Budget & Settlement
The economic layer — how agents price work, lock funds, and settle on completion.
When one agent delegates work to another, money is involved. The market layer handles budget allocation (locking funds before execution), cost estimation (pricing from service listings), and settlement (paying or refunding based on the outcome). Every function is pure — no I/O, no side effects, deterministic results.
The flow
A delegation task moves through five economic stages:
- Service listing — The candidate agent registers its capabilities and pricing with the relay.
- Cost estimation — The delegating agent estimates the cost from the candidate's pricing and the required capabilities.
- Budget allocation — Funds are locked against the estimated cost, with a risk buffer.
- Execution — The candidate executes the task and returns a signed execution receipt.
- Settlement — The receipt determines the outcome: completed receipts settle (pay), failed receipts refund, partial completion settles proportionally.
If the estimated cost exceeds available budget at step 3, the delegation fails with HTTP 402 (insufficient budget) before any work begins.
Service listings
Agents register capabilities and pricing with the sync relay:
POST /api/v1/agents/:motebitId/listingA listing declares what the agent can do and what it charges:
{
"capabilities": ["web_search", "read_url", "summarize"],
"pricing": [
{ "capability": "web_search", "unit_cost": 0.01, "currency": "USD", "per": "task" },
{ "capability": "read_url", "unit_cost": 0.005, "currency": "USD", "per": "task" }
],
"sla": {
"max_latency_ms": 5000,
"availability_guarantee": 0.99
},
"description": "Web search and URL reading service"
}Each CapabilityPrice specifies the cost per unit of work. The per field indicates the billing unit (typically "task"). Listings are publicly queryable — any agent can discover candidates and compare pricing.
Cost estimation
Given a candidate's pricing and the capabilities needed for a task, estimateCost sums the unit costs:
If a required capability has no matching price entry, it contributes zero to the estimate. The caller should check that all required capabilities are present in the listing before delegating — the candidate scoring system handles this via the capability_match sub-score.
Budget allocation
allocateBudget locks funds against an estimated cost with a risk buffer:
The locked amount is estimated_cost * (1 + risk_factor * 0.2), capped at the available budget. With the default risk factor of 1.0, this locks 120% of the estimated cost as a buffer. If the capped amount is less than the estimated cost (insufficient funds), the function returns null — no allocation, no delegation.
Collaborative budgets
For plans that involve multiple agents, allocateCollaborativeBudget distributes the budget across participants based on their assigned steps and per-task pricing:
Returns one allocation per participant, or an empty array if the total cost exceeds the available budget.
Settlement
After execution, settleOnReceipt determines the financial outcome:
Three outcomes:
| Receipt Status | Ledger | Settlement |
|---|---|---|
"completed" | All steps completed (or no ledger) | Full settlement — locked amount is paid |
"completed" | Some steps completed, some failed | Partial settlement — proportional to completed steps |
"failed" or "denied" | Any | Refund — locked amount returned, amount_settled: 0 |
The settlement record includes:
{
settlement_id: string;
allocation_id: string;
receipt_hash: string; // links to the execution receipt
ledger_hash: string | null; // links to the execution ledger
amount_settled: number;
status: "completed" | "partial" | "refunded";
settled_at: number;
}Partial settlement uses the execution ledger to determine the proportion: completed_steps / total_steps * amount_locked, rounded to two decimal places. This requires the delegating agent to have access to the ledger — if no ledger is provided and the receipt is completed, full settlement applies.
Candidate scoring
When multiple agents can perform a task, the market scores and ranks them. Six weighted factors determine the composite score:
| Factor | Default Weight | What It Measures |
|---|---|---|
| Trust | 0.25 | Trust level from interaction history (or chain trust from delegation tree) |
| Success rate | 0.25 | Fraction of tasks completed successfully |
| Latency | 0.15 | Average response time, normalized via 1 - avg_ms / (avg_ms + k) |
| Price efficiency | 0.15 | How much of the budget the candidate would consume |
| Capability match | 0.10 | Whether the candidate has all required capabilities |
| Availability | 0.10 | Whether the candidate is currently online |
Blocked agents and candidates missing required capabilities score zero regardless of other factors.
Exploration vs. exploitation
The scoring system supports active inference through applyPrecisionToMarketConfig. When the agent's exploration drive is high (low self-trust about which agents to use), the system shifts weight from trust/success_rate toward availability/capability_match and adds epsilon-greedy randomization. This promotes trying untested agents to reduce uncertainty. When exploration drive is low, the system exploits known-good routes.
API endpoints
Service listing
POST /api/v1/agents/:motebitId/listing — register or update
GET /api/v1/agents/:motebitId/listing — retrieve current listingCandidate discovery
GET /api/v1/market/candidates?capability=web_search&max_budget=0.10&limit=5Returns scored and ranked candidates matching the specified criteria.
Budget (via relay internals)
Budget allocations and settlements are stored on the relay and linked to task submissions. The relay tracks allocations (relay_budget_allocations) and settlement records (relay_settlements) per task. When a task is submitted with a max_budget, the relay runs cost estimation and budget allocation before forwarding to the candidate. Settlement occurs automatically when the execution receipt is verified.