- Wallet mount (
/api/v2/x402/...): payment-aware clients use x402 with USDC on Base or Solana, or MPP on Tempo or Stripe (card / Link). A plain request returns HTTP402, then the client retries with payment credentials. Free browsing routes use a zero-dollar identity proof — the client answers with a wallet proof and no funds move. Account credentials (API key / JWT / OAuth) are rejected with403 wallet_only. - Account mount (plain
/api/v2/...routes): API-key and session clients authenticate withAuthorization: Bearer pk_drip_...or a session JWT and need an active plan — no credential returns401, no plan returns403 subscription_required. There is no free tier. Stock picks, tickers, and writer profiles are included in the plan; paid post reads still debit credits. Wallet credentials are rejected with403 account_only.
X-Drip-Unlock / unlockToken from the first settle and send it
on free re-reads. If the token is lost but the same wallet (x402) or validated
MPP credential is presented again, the server detects the existing unlock, skips
the charge, and re-issues a token.
Response fields
A first API-key post response can report
protocol: "mpp" when Drip completes
the credit-funded payment through MPP, or "credits" otherwise. The request
still spends the authenticated user’s credits. Use the credit ledger to inspect
the debit; spendSource is not a response field.
Lifetime unlocks apply only to individual posts. Paid stock-picks bundles are
charged on each request and do not grant access to their source posts. Stock
Picks V2 also offers subscription access; see Stock Picks.
Invalid or revoked X-Drip-Unlock does not block payment: when a pay credential
is also present, the request falls through to that rail (or to a 402 challenge
if none).
Wallet identity for free browsing (/api/v2/x402/*)
Free browsing routes take a zero-dollar identity proof instead of payment:
- Build a CAIP-122 Sign-In-With-X message for the target origin (domain,
URI, version
1, a fresh randomnonce,issuedAt, chaineip155:*orsolana:*). - Sign it with the wallet key (EIP-191 for EVM, ed25519 for Solana).
- Base64-encode the payload and send it in the
sign-in-with-xheader. Proofs are single-use — sign a fresh message per request, and keepissuedAtwithin 5 minutes.
WWW-Authenticate: Payment
challenge with a proof credential. A tampered or replayed proof returns
401 (invalid_siwx / siwx_replayed); unauthenticated calls get 402.
Repeated calls from one wallet are rate limited (429 wallet_rate_limited).
The 402 handshake for wallet clients
- A plain request to a paid route returns
402with two headers:WWW-Authenticate: Payment ...— the MPP challenges for Tempo and StripePAYMENT-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.
402 response lets a wallet-aware client inspect the exact runtime price
before authorizing payment. For discovery-time estimates, publication post
listings include priceCents. The runtime challenge is authoritative.
A plain request returns a challenge rather than the paid summary:
API-key credits
API keys are traditional bearer tokens created from the API keys page. Use them when your agent or backend service should spend an account balance instead of holding a wallet.403 with reason: "insufficient_credits" instead of issuing a 402
payment challenge. See the API-key quickstart for the
full setup and request examples.
Inspect pricing before payment
List a publication’s recent posts to compare prices before selecting one:priceCents is useful for selection and agent spending limits. When requesting
the paid route with a wallet, inspect the returned 402 challenge before
authorizing payment because it contains the live price.
Discovery pricing vs runtime pricing
The OpenAPI discovery document exposesx-payment-info.offers[] on paid routes.
These offers are advisory — they may list Base or Solana 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 the request — for example,
stock-picks charge a flat rate per UTC day served, so a from/to range costs
the day rate × charged days. Always trust the live 402 over publication
listings or discovery offers.
Status codes
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.
