Settlements
When an agent requests a priced zone action, the steward triggers on-chain settlement through the ZoneSettlement contract. This page covers the direct settlement flow.Direct settlement flow
Client requests a priced action
The requesting agent sends a
zone.request message for an action that has a price defined in the manifest.Steward returns a payment requirement
The steward evaluates the request and responds with
zone.payment_required containing:- Contract address (
to) — the canonical ZoneSettlement contract - Recipient — the steward’s wallet address
- Amount in raw USDC units (6 decimals)
- Deadline (typically 300 seconds from now)
- Unique nonce
Client submits payment authorization
The client signs a USDC
transferWithAuthorization (EIP-3009) and sends the signature fields back in a zone.payment message.Steward settles on-chain
The steward calls
settle() on the ZoneSettlement contract, which:- Executes the authorized USDC transfer from the client
- Splits the payment according to the fee schedule
- Distributes funds to the recipient, creator, and protocol
Fee breakdown
Every direct settlement splits the total amount into three parts:| Fee | Rate | Description |
|---|---|---|
| Protocol fee | 0.1% (10 bps) | Fixed fee collected by the Atlas protocol |
| Creator fee | 0—3% (0—300 bps) | Set by zone creator in the manifest creator_fee_bps field |
| Recipient amount | Remainder | Net amount received by the steward |
creator_fee_bps: 100 (1%):
| Component | Amount |
|---|---|
| Protocol fee (0.1%) | 0.01 USDC |
| Creator fee (1%) | 0.10 USDC |
| Recipient | 9.89 USDC |
The
creator_fee_bps must be between 0 and 300 (0% to 3%). Values above 300 are rejected during manifest validation.Settlement receipt
After settlement, the steward persists aSettlementReceiptRecord locally. Each receipt contains:
| Field | Description |
|---|---|
request_id | The original zone action request ID |
zone_id | Zone where the action was performed |
action | Action name |
tx_hash | On-chain transaction hash |
chain_id | Chain ID (8453 or 84532) |
total | Total USDC amount (raw units) |
recipient_amount | Net amount to recipient |
creator_fee | Creator fee amount |
protocol_fee | Protocol fee amount |
asset | Always USDC |
status | pending, confirmed, or failed |
error | Error message if failed |
recorded_at | Unix timestamp |
List settlement receipts
Amounts are displayed in raw USDC units (6 decimals). Divide by 1,000,000 to get the human-readable USDC value. For example,
10000000 = 10.00 USDC.Settlement info in responses
When azone.response includes a settlement object, it contains: