Documentation
How PortMula works
Everything you need to use the platform or run an agent on your own machine. If something here is wrong or missing, tell us at portmula@willmediaservices.com.
1. Concepts
Five words carry most of the product. They're used consistently everywhere — in the app, in this documentation, and in the code.
Agent
One per account. It has a wallet, a set of skills it's allowed to use, and a set of instructions written in plain language. You get one agent rather than many, because many agents would mean many wallets to fund and many balances to watch.
Run
One cycle of the agent's work: it reads the chain, decides what it needs, buys those skills, and reports. A run happens because you started it or, once schedules are live, because an automation's schedule fired. Scheduled runs are not live in this build yet, and paid plans are not open yet. Every run ends with a manifest — a numbered list of what was bought, what each cost, and the transaction behind it.
Skill
A paid HTTP endpoint the agent can call. Skills come in two kinds. Read skills return data and run automatically. Execute skills build an unsigned Algorand transaction group and always stop for your approval. No skill ever moves your funds by itself.
Automation
A saved instruction plus a schedule. Each time it fires, that's a run. Automations share the agent's single wallet and single history.
Cap
The most a self-hosted agent may spend on any one skill call. You choose it — there is no default, and until you choose, the agent refuses paid calls.
A hosted agent has no per-call cap. What bounds it is the runs-per-day meter, the balance in its own wallet, and approval on anything that moves funds. The cap governs the download, where the agent runs unattended on your machine with nobody there to approve anything — which is the case a cap is for.
2. The skill catalog
Prices are in USDC and charged at the moment of the call. A skill listed as coming is disabled at the server, not just greyed out — your agent will say the data is unavailable rather than invent it.
Read skills
| Service | Price | Takes | Returns |
|---|---|---|---|
| asset-info | $0.01 | assetId | Name, unit name, total supply, decimals, and whether it is frozen, clawback-able or reconfigurable |
| nfd-lookup | $0.01 | name or address | The matching .algo name or address, and its verified fields |
| pool-info | $0.01 | assetA, assetB | Live reserves, issued pool tokens, and current deposit ratio |
| wallet-balance | $0.01 | address | ALGO balance and every asset held, with amounts as both decimals and strings |
| lp-position | $0.02 | address, assetA, assetB | LP tokens held and what they are worth in both underlying assets |
| swap-quote | $0.02 | assetA, assetB, amount | Expected output, price impact, and minimum received |
Reserves come from the pool's on-chain application state, not from its asset balances. A pool account also holds accrued fees and anything sent to it directly, so a balance reading is not a reserve reading.
Execute skills
| Service | Price | Takes | Returns |
|---|---|---|---|
| build-opt-out not available | free | assetId | An unsigned transaction closing the holding and returning its 0.1 ALGO |
| build-swap-tx | $0.02 | assetIn, assetOut, amount, slippage | An unsigned transaction group with any required opt-in prepended |
| build-remove-liquidity | $0.0225 | assetA, assetB, lpAmount | An unsigned withdrawal group, with opt-ins for both output assets if needed |
| build-add-liquidity | $0.0275 | assetA, assetB, amountA | An unsigned deposit group, with the matching second amount calculated |
Execute skills return bytes, not money. They never sign and never submit. You review the group, you sign it, you send it. PortMula holds no key for a wallet you connect. For a wallet we create, it signs skill payments on its own and signs anything that moves funds only after you approve it.
Coming
Lending rates, staking and participation rewards, governance, and NFT floor data. A skill listed but not yet live is disabled at the server, not just greyed out in the interface — your agent will say the data is unavailable rather than invent it.
3. How payment works
PortMula uses x402, an open protocol that revives HTTP status code 402 — "Payment Required" — as a real payment handshake. Nothing here is proprietary; you can implement it yourself.
A call goes like this:
- Your agent requests a skill endpoint with no payment attached.
- The server replies 402 with the terms: the price, the asset, the receiving address, and the network identifier.
- Your agent builds an Algorand transaction group paying those exact terms and signs it.
- It retries the request with the signed payment attached.
- The server verifies the payment, runs the handler, and settles only if the handler succeeds.
That last point matters. Settlement happens after the response is known to be good, so a failed skill does not charge you. A dependency outage is never a billing problem.
The network identifier in the terms is the chain's genesis hash, and it is checked against the node the request is actually settling on. A payment quoted for one network cannot settle on another.
4. Spending limits
Three things bound what a hosted agent can spend, and none of them is a per-call cap.
- Approval on anything that moves funds. Read skills run on their own; a skill that builds a transaction stops and asks, every time.
- Runs are metered. A server-side limit on how many runs a day your plan allows, checked before a run starts.
- Your wallet balance. The agent can spend only what is there, and it checks before it commits rather than half-finishing a job.
Read skills run inside these bounds automatically. Execute skills stop for approval every time, because what bounds spending on data has nothing to say about moving funds out of your wallet.
5. Wallets
Every account has one agent wallet: a standard Algorand account that can hold ALGO, USDC, any ASA, and NFTs.
If you connect your own wallet, we never hold its key. If we create one for you, we hold that key encrypted so the agent can act when you are not present — a run continues after you close the tab. You can export its recovery phrase at any time and withdraw at any time, whatever your plan or payment status. Section 4 of the Terms sets this out precisely, and you should read it rather than take a summary.
Opt-ins. Algorand accounts must opt into an asset before they can receive it, and each opt-in locks 0.1 ALGO of minimum balance. We sponsor the USDC opt-in because the product requires it. Any other asset comes from your own balance, and the locked amount is released if you opt out later.
Fees. We sponsor the network fee for skill payments, so buying data does not move your agent's ALGO balance. Everything else your agent signs — a swap, a further opt-in — pays its own fee from the ALGO in its wallet, which is why we fund it with some. You never need to top it up from your own pocket for ordinary use.
6. Run an agent yourself
Running the agent yourself isn't offered. The download is built and switched off, and it isn't part of any plan. The download contains the agent, its configuration, a payment client, a skills module, and a README.
A self-hosted agent uses a wallet whose key never leaves your machine. Nothing about it depends on us except the skill endpoints it calls, and it pays for those exactly as the hosted agent does.
Two consequences worth understanding before you choose it:
- You hold the key. There is no recovery path through us. If you lose it, the funds are gone.
- You provide the schedule. Nothing runs while your machine is off. Automations are a hosted feature because they need a machine that stays on — and scheduled runs are not live in this build yet.
Requirements: Node 20 or later, and a wallet funded with USDC and opted in.
7. Networks and assets
| This deployment | |
|---|---|
| Network | testnet |
| USDC asset ID | 10458941 |
| USDC decimals | 6 |
| Money at risk | None — testnet assets have no value |
Pin those asset IDs. Imposter assets using the name "USDC" exist on both networks, and matching by name rather than by ID is how people lose money.
Chain access is provided by Nodely, whose free tier is production-grade infrastructure from a core Algorand team.
8. Limits
| Free | Paid | |
|---|---|---|
| Agents | 1 | 1 |
| Runs | 25 / day | 200 / day |
| Automations | 3 | 10 |
| Schedule | On demand only | Any, min 4h apart |
| Model | claude-haiku-4-5 | claude-sonnet-5 |
Scheduled runs are not live in this build yet, and paid plans are not open yet, so every account is on Free today.
Daily limits reset at midnight UTC. Skill purchases are not limited by plan — that is your own money and we take no cut of your wallet. What the plan governs is how much of our compute you use.
Exceeding a limit stops the action and tells you. We never bill an overage you didn't agree to.
Documentation · last updated 20 August 2026 · FAQ