Webhooks
Receive StableOps Agent Payments Webhooks for payment, resource, approval, and circuit-breaker states with signature verification, retries, and replay handling.
Agent Payments state changes are committed to a transactional outbox, then delivered through StableOps's signed Webhook pipeline. Delivery includes automatic retries, endpoint concurrency limits, manual replay, and dead-letter handling.
Configure an endpoint
Open Agent Payments Webhooks to create endpoints, rotate signing secrets, inspect delivery history, and replay failed or dead-letter deliveries.
Endpoints created here receive agent_payment.* events. Configure Sandbox and Live independently.
Two state axes
Each Agent payment tracks two independent kinds of state:
payment_status: policy, approval, authorization, and onchain settlement state;resource_status: whether the paid HTTP request produced a reliable response.
Event types
| Category | Events |
|---|---|
| Intent | agent_payment.intent.created, agent_payment.intent.awaiting_approval |
| Approval | agent_payment.approval.approved, agent_payment.approval.rejected, agent_payment.approval.expired |
| Authorization | agent_payment.authorization.issued, agent_payment.authorization.expired |
| Settlement | agent_payment.settlement.unknown, agent_payment.settlement.settled, agent_payment.settlement.reverted |
| Resource | agent_payment.resource.succeeded, agent_payment.resource.failed, agent_payment.resource.unknown |
| Circuit break | agent_payment.agent.paused, agent_payment.organization.paused |
settlement.unknown means the payment request may have reached the facilitator, but the available evidence cannot confirm the outcome. Query and reconcile the original Intent; never create a replacement Intent or authorization.
Payload shape
Regular payment events use a versioned envelope:
{
"id": "7b91729e-41d0-4f9f-8dd1-6eea06a5764d",
"type": "agent_payment.settlement.settled",
"version": "1",
"occurred_at": "2026-08-05T08:00:00.000Z",
"data": {
"organization_id": "org_...",
"environment": "sandbox",
"agent_id": "agent_...",
"intent_id": "pint_...",
"payment_status": "settled",
"resource_status": "response_received",
"amount_atomic": "1000",
"asset": "USDC",
"asset_contract": "0x036CbD53842c5426634e7929541eC2318f3dCF7e",
"asset_decimals": 6,
"network": "eip155:84532",
"origin": "https://resource.example.com",
"pay_to": "0x...",
"approval_id": null,
"authorization_id": "pauth_...",
"receipt_id": "receipt_..."
}
}Pause events contain only the applicable organization, environment, Agent, or pause reason. Payloads never include Agent Keys, raw execution grants, complete payment signatures, private keys, or paid resource response bodies.
See the Agent Payments Webhook API reference for the complete versioned envelope, every event name, field types, required and nullable fields, and all three payload variants.
Safe handling rules
- Verify the signature against the raw request body before parsing JSON.
- Enforce uniqueness on the top-level
id; retries and manual replay can redeliver an event. - Persist the event and return
2xxquickly. Move slow business work to your own queue. - Do not assume strict ordering across events. Before an irreversible action, query the current state with
management.payments.get(intentId). - Alert and reconcile on
settlement.unknown,settlement.reverted, or either pause event. Do not automatically repay.
See the general Webhook documentation for endpoint setup, raw-body verification, secret rotation, retry timing, and dead-letter replay.
How is this guide?
Last updated
Signer
Use StableOps Agent Payments Signer CLI to validate pairing challenges, run a loopback sidecar, and sign constrained payments with local keys or AWS KMS.
App notifications
Configure StableOps Agent Payments notifications for Telegram and Discord, pick payment events, protect credentials, and verify human-readable message delivery.