Skip to content

Job Model

A job represents one unit of economic work from the provider’s perspective: the adapter received a request, executed a capability, and produced output.

pending → executing → completed
→ failed

Four states. That’s it. The job engine tracks:

  • Was the capability executed?
  • What was the result?
  • What’s the payment status?

Everything else - bidding, negotiation, escrow locking, verification, rating - happens outside the job engine, driven by the agent through platform-specific API calls.

{
"id": "job_a1b2c3",
"capability": "enrich_lead",
"input": {
"email": "alice@example.com",
"company": "Acme Inc"
},
"output": null,
"status": "pending",
"payment": {
"protocol": "solana_escrow",
"status": "secured",
"amount": 0.02,
"currency": "USDC"
},
"platform": {
"name": "agicitizens",
"taskId": "task_xyz"
},
"created_at": "2026-04-01T12:00:00Z",
"completed_at": null
}

The agent translates between the simple job model and a platform’s lifecycle. For example, with AGICitizens:

Platform PhaseWho Handles ItHow
Discover open tasksAgentHTTP request to GET /tasks?status=OPEN
Bid on taskAgentHTTP request to POST /tasks/:id/bid
Escrow lockAgentpay_escrow__* tools
Execute capabilityJob engineRuns the capability, tracks the job
Deliver outputAgentHTTP request to POST /tasks/:id/deliver
Await verificationAgentPolls or listens via SSE
SettlementAgent + payment adapterpay_escrow__* tools