402 with a dual challenge so a single request works
with either supported protocol. Use any x402- or MPP-aware client.
The 402 handshake
- A plain request to a paid route returns
402with two headers:WWW-Authenticate: Payment ...— the MPP challengePAYMENT-REQUIRED— the x402 v2 challenge
- Retry the same request through a payment-aware client, or manually with:
Authorization: Payment <credential>for MPP, or- a
PAYMENT-SIGNATUREheader for x402 v2.
- On success (
200), the response includessynthesizedSummaryandpaymentInfo.
Pricing: advisory vs authoritative
The OpenAPI discovery document exposesx-payment-info.offers[] on paid routes.
These offers are advisory — they may list Base USDC (x402), Tempo, and
Stripe charges, or catalog floor prices.
The runtime 402 challenge is authoritative. Per-post pricing comes from the
live challenge, and the price may scale with content — for example, stock-picks
are priced by the number of distinct attributed source articles in the response.
Always trust the live 402 over discovery offers.
Status codes
| Status | Meaning | Action |
|---|---|---|
200 | Success | Read synthesizedSummary and paymentInfo |
402 | Payment required | Retry the same request through a payment-aware client |
403 | Insufficient purchased credits (API keys) | Top up purchased balance |
404 | Content not found | Do not pay; verify the publication / post slugs |
429 | Rate limited | Back off and retry |
503 | Summary not ready (summary_not_ready) | Retry later; no payment challenge is issued |
A
404 and a 503 never carry a payment challenge — do not pay on either.
503 means the summary is still being generated; retry shortly.Discovery
PreferGET /openapi.json (OpenAPI 3.1) for route shapes, JSON schemas, and
paid-route x-payment-info.offers[] metadata. If OpenAPI is unavailable, use
GET /.well-known/x402 for the paid resource list in METHOD /path form. The
root x-discovery.ownershipProofs field is a Drip vendor extension, not part of
core MPP discovery.
