# Agent trust checklist

> How agentpaywire.com commits to being dependable for agents. Status is met or partial. Nothing here is paid.

JSON: https://agentpaywire.com/trust.json

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.

## Stable endpoint URLs

Status: 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.

- Every site machine path. https://agentpaywire.com/api/index.json
- Site OpenAPI, including the paid routes. https://agentpaywire.com/openapi.json
- API-host OpenAPI. Redeploy the API worker for this host to match the worker source. https://api.agentpaywire.com/v1/openapi.json
- Removal notices go here. https://agentpaywire.com/changelog.json
- HTML and machine URLs. https://agentpaywire.com/sitemap.xml

## Explicit limits and errors

Status: 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).

- Site L402 discovery: price_sats, credits, ttl_days, authorization. https://agentpaywire.com/.well-known/l402
- paid_api block with the same numbers. https://agentpaywire.com/support.json
- Worker OpenAPI. The source lists these codes. The live host matches after redeploy. https://api.agentpaywire.com/v1/openapi.json
- The error table in this file. https://agentpaywire.com/trust.json

## Consistent naming

Status: 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`. Body { error }. GET /v1/updates without a since value that Date.parse accepts. Returned before a credit is spent.
- HTTP 401 `invalid_macaroon`. Body { error, protocol, payment }. Authorization uses L402 but the macaroon signature or body is invalid.
- HTTP 402 `payment_required`. Body { error, protocol, payment, price, invoice, macaroon, how_to_pay, free_data }. 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`. Body { error, protocol, payment }. The macaroon exp has passed, or the stored bundle is past its expiry.
- HTTP 402 `payment_not_settled`. Body { error, protocol, payment, macaroon, how_to_pay }. 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`. Body { error, protocol, payment, credits_remaining, credits_total, how_to_pay }. The bundle has no credits left.
- HTTP 404 `not_found`. Body { error }. The path is not a free or paid route. Trailing slashes are stripped before the check.
- HTTP 405 `method_not_allowed`. Body { error }. The method is not GET. OPTIONS returns 204 with an empty body.
- HTTP 500 `token_store`. Body { error }. The credit row could not be written or read.
- HTTP 500 `misconfigured`. Body { error }. The worker threw before it could handle the request.
- HTTP 502 `upstream_unavailable`. Body { error }. The paid route could not read the public site files.
- HTTP 503 `signing_key_missing`. Body { error }. L402_SIGNING_KEY is empty.
- HTTP 503 `rate_limited`. Body { error, protocol, payment } plus Retry-After. 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.

## Wallet error codes on HTTP 503

invoice_unavailable, invalid_lightning_address, lightning_address_missing, nwc_invalid_relay, nwc_invalid_secret, nwc_missing, nwc_wrong_scheme, rate_limited, wallet_api_key_missing, wallet_api_url_missing, wallet_backend_unimplemented, wallet_backend_unknown, wallet_unreachable

## URLs

### site

- https://agentpaywire.com/api/index.json
- https://agentpaywire.com/openapi.json
- https://agentpaywire.com/llms.txt
- https://agentpaywire.com/llms-full.txt
- https://agentpaywire.com/changelog.json
- https://agentpaywire.com/sitemap.xml
- https://agentpaywire.com/trust.json
- https://agentpaywire.com/trust.md
- https://agentpaywire.com/support.json
- https://agentpaywire.com/api/library.json
- https://agentpaywire.com/datasets/index.json
- https://agentpaywire.com/bots.json

### api

- https://api.agentpaywire.com/v1
- https://api.agentpaywire.com/v1/health
- https://api.agentpaywire.com/v1/openapi.json
- https://api.agentpaywire.com/v1/search
- https://api.agentpaywire.com/v1/updates
- https://api.agentpaywire.com/v1/digest

### mcp

- https://mcp.agentpaywire.com/mcp

### well_known

- https://agentpaywire.com/.well-known/api-catalog
- https://agentpaywire.com/.well-known/ai-catalog.json
- https://agentpaywire.com/.well-known/l402
- https://agentpaywire.com/.well-known/l402-services
- https://agentpaywire.com/.well-known/support.json
- https://api.agentpaywire.com/.well-known/l402
- https://api.agentpaywire.com/.well-known/l402-services

## 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.
