Agent trust checklist
How agentpaywire.com commits to being dependable for agents. Status is met or partial. Nothing here is paid.
Redeploy the agentpaywire-api worker if it is older than this commit. This commit serves /.well-known/l402-services, returns 400 for a missing since before spending a credit, adds price_sats, credits, ttl_days, and authorization on the API-host L402 document, and lists the error codes on /v1/openapi.json.
JSON: /trust.json. Markdown: /trust.md.
Stable endpoint URLs met
Site files are unversioned and listed in https://agentpaywire.com/api/index.json. The paid API is only under https://api.agentpaywire.com/v1. The MCP server is only at https://mcp.agentpaywire.com/mcp. A published path is not removed without a changelog record and a redirect from the old path. Renaming a query parameter or a JSON field follows the same rule. Adding a field is not a removal.
Explicit limits and errors met
100 sats buys 100 credits for 30 days. One credit is one paid request. The API does not rate-limit clients and does not return HTTP 429. A wallet rate limit is HTTP 503 with Retry-After. Error bodies are JSON with a string error field, except OPTIONS (204, empty) and a rate-limited deep health probe (the health document, ok false).
Consistent naming partial
Paid requests use Authorization: L402 <macaroon>:<preimage>. price_sats, credits, and ttl_days are the names on the site discovery, support.json, and the site OpenAPI x-payment object. The static changelog cursor is exclusive: verified_at greater than the cursor, parameter updated_since. Paid GET /v1/updates is inclusive: verified_at >= since, parameter since. The site L402 file and the API-host L402 file share protocol, payment, price_sats, credits, ttl_days, and authorization. The API host also nests pricing.amount_sats. The documents are not identical.
- Authorization line and the 100 sat price. https://agentpaywire.com/llms.txt
- Site field names. https://agentpaywire.com/.well-known/l402
- API-host field names. pricing.amount_sats remains. https://api.agentpaywire.com/.well-known/l402
- Exclusive cursor. https://agentpaywire.com/changelog.json
- Inclusive since parameter. https://api.agentpaywire.com/v1/updates
- MCP tools: changes_since, get_article, get_dataset, get_source, get_support_info, get_trust_checklist, latest_sources, list_articles, list_bots, list_categories, list_datasets, protocol_facts, search, search_library. https://mcp.agentpaywire.com/mcp
Credits
100 sats = 100 credits for 30 days. One credit is one paid request.
Rate limits
No client rate limit. HTTP 429 is not used. A Lightning wallet rate limit becomes HTTP 503, error rate_limited, and Retry-After. The default wait is 10 seconds.
Errors
- HTTP 400
since_required. GET /v1/updates without a since value that Date.parse accepts. Returned before a credit is spent. - HTTP 401
invalid_macaroon. Authorization uses L402 but the macaroon signature or body is invalid. - HTTP 402
payment_required. A paid route has no Authorization header, or the header is not L402. WWW-Authenticate carries the macaroon and BOLT11 invoice. - HTTP 402
token_expired. The macaroon exp has passed, or the stored bundle is past its expiry. - HTTP 402
payment_not_settled. The preimage is missing or its sha256 does not match the payment hash, and the verify-URL lookup is not settled. - HTTP 402
token_spent. The bundle has no credits left. - HTTP 404
not_found. The path is not a free or paid route. Trailing slashes are stripped before the check. - HTTP 405
method_not_allowed. The method is not GET. OPTIONS returns 204 with an empty body. - HTTP 500
token_store. The credit row could not be written or read. - HTTP 500
misconfigured. The worker threw before it could handle the request. - HTTP 502
upstream_unavailable. The paid route could not read the public site files. - HTTP 503
signing_key_missing. L402_SIGNING_KEY is empty. - HTTP 503
rate_limited. The Lightning wallet rate-limits invoice creation or lookup. Default Retry-After is 10 seconds when the wallet omits it. A deep health probe instead returns the health document with ok false.
Deprecation
A published path is not removed without a changelog record and a redirect from the old path. Renaming a query parameter or a JSON field follows the same rule. Adding a field is not a removal.