Fees and distribution
Every paid call puts USDC into one lane vault. A distribution then empties the vault's available balance in a single transaction: first the protocol fee, then the model's split, which includes the operator's share. This page shows who pays what, how each amount is computed and how deferred payouts are claimed.
Who pays what
| Who | Pays | To | When |
|---|---|---|---|
| Caller | The call's price in USDC (fixed per call, or metered up to a ceiling) | The lane vault | On each call |
| Facilitator | The Solana network fee for each payment transaction | Solana | On each call |
| Anyone who distributes | The network fee for distribute | Solana | Whenever a vault holds funds |
| Lane vault | The protocol fee | The protocol treasury | At distribution |
| Lane vault | The rest, by the model's split | The owner, the lane's operator, contributors | At distribution |
| Model owner | Network fees and rent for the Model account, and for lanes it opens | Solana | On listing and when opening lanes |
| Operator | The bond in USDC (returned after unbonding unless slashed), plus network fees and rent for its platforms and nodes | The bond vault, Solana | On deposit and registration |
| Dispute claimant | The dispute deposit in USDC | The dispute's vault | On opening a dispute |
Fees, bonds and deposits are all USDC. The protocol fee is what buys and burns $SEALROOM; see Token.
The protocol fee
The protocol fee is 500 bps (5%) of each distribution at launch. It is taken from the lane vault at distribution, never at call time, and paid to the protocol treasury. The protocol's whole fee share is used for one thing: buying $SEALROOM on the market and burning it.
GET <api-url>/v1/parameters returns the live value as protocolFeeBps. A change to the fee is proposed by the admin multisig and can be applied 48 hours later; while one is waiting, pendingProtocolFee shows the new value and its effectiveAt time.
The operator's share
The operator's share is the operator entry in each model's split, set by the model's owner. At distribution it is paid to the payout account of the operator whose node serves the lane, so each lane pays its own operator. The deployment's suggested default is operatorShareDefaultBps in the parameters; the app's Your share, % field starts from it when you list a model.
The split
A split has 1 to 8 entries whose shares sum to 10,000 bps. Each entry pays a canonical USDC account and has a role: owner, operator, base_model or contributor. Locked entries can only be lowered with the recipient's signature, and a split change takes effect after 7 days. List a model covers both.
How a distribution is computed
distribute works on the vault's available balance: its USDC minus any amounts already held for claims. All amounts are integers in USDC base units (1 USDC = 1,000,000 base units).
Every division rounds down, and the last entry of the split receives whatever the rounding left over, so the fee plus all shares always equal the available balance exactly.
The lane's activeSplit is the split used. When the model's split has changed, the lane first distributes its available balance under the split that was active when those funds arrived, then switches to the new one.
Worked example
A model costs 0.025 USDC per call. Its split is 70% to the owner, 20% to the operator and a locked 10% to the base model it was fine-tuned from. A lane on one node has served 1,000 calls, so its vault holds 25 USDC. Anyone sends distribute:
| Step | Base units | USDC |
|---|---|---|
| Available in the vault | 25,000,000 | 25.000000 |
| Protocol fee, 500 bps | 1,250,000 | 1.250000 |
| Net after the fee | 23,750,000 | 23.750000 |
| Owner, 7,000 bps | 16,625,000 | 16.625000 |
| Operator of this lane's node, 2,000 bps | 4,750,000 | 4.750000 |
| Base-model owner, 1,000 bps (locked) | 2,375,000 | 2.375000 |
| Total paid out | 25,000,000 | 25.000000 |
All four transfers happen in one transaction. The model's page records the distribution with its gross amount and four recipients, and each recipient's USDC arrives in its canonical account.
Rounding example
A vault holds 101 base units, the fee is 500 bps and the split is 3,333 / 3,333 / 3,334 bps:
| Step | Computation | Base units |
|---|---|---|
| Fee | floor(101 × 500 / 10,000) = floor(5.05) | 5 |
| Net | 101 − 5 | 96 |
| Entry 1 | floor(96 × 3,333 / 10,000) = floor(31.9968) | 31 |
| Entry 2 | floor(96 × 3,333 / 10,000) | 31 |
| Entry 3 | floor(96 × 3,334 / 10,000) = 32, plus the remainder 96 − 94 = 2 | 34 |
5 + 31 + 31 + 34 = 101.
Deferred payouts and claims
A distribution pays each recipient directly into its canonical USDC account. A recipient whose account is missing, frozen or has changed owner cannot receive a transfer, so its share is held in the lane as a claim while every other recipient is paid normally.
- Prepare. A held share needs a claim account. When one is missing, the distribute preview returns
CLAIM_PREPARATION_REQUIRED. Anyone sendsprepare_claimwith thelaneId,recipientAtaandrecipientOwner, then distributes again. - Hold. The distribution records the share against the claim and keeps it in the lane vault. The lane's
claimablelist shows the recipient and the amount, and itsreservedAmountgrows by the same sum. Later distributions leave reserved funds untouched. - Claim. The recipient sends
claimwith thelaneIdandrecipientAta. The funds go to the recipient's canonical USDC account, or to thedestinationAtait names when the deployment'ssettlementPolicies.claimDestinationisany_owned_usdc.
Only the recipient can claim its funds, and claims do not expire. In each distribution record, a payout shows amount (paid now), allocatedAmount (its full share) and deferredAmount (held as a claim).
Where to see it
| What | Where |
|---|---|
| A lane's vault, total in and total distributed | The model's page, Lanes table; GET /v1/lanes/<lane> |
| Each distribution and its payouts | The model's page, Distributions table; GET /v1/distributions?laneId=<lane> |
| A model's or operator's totals | revenue on GET /v1/models/<model> and GET /v1/operators/<operator> |
| USDC distributed across Sealroom | The Registry page, Distributed, USDC; GET /v1/summary |
| The protocol fee and pending changes | GET /v1/parameters |