> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dripstack.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Payment Flow

> Wallet payment challenges, API-key credits, headers, and pricing semantics.

Paid article-summary routes support two payment models:

* **Wallet-aware clients** use x402 with USDC on Base or Solana, or MPP on Tempo.
  A plain request returns HTTP `402`, then the client retries with payment
  credentials.
* **API-key clients** authenticate with
  [`Authorization: Bearer pk_drip_...`](/quickstart-api-keys) and spend
  pre-purchased credits. API keys do not use the 402 wallet handshake.

Each successful paid request returns a robust synthesized summary. Payment does
not grant permanent access, and a later request to the same paid route is
charged again.

## The 402 handshake for wallet clients

1. A plain request to a paid route returns `402` with two headers:
   * `WWW-Authenticate: Payment ...` — the MPP challenge
   * `PAYMENT-REQUIRED` — the x402 v2 challenge
2. Retry the **same request** through a payment-aware client, or manually with:
   * `Authorization: Payment <credential>` for MPP, or
   * a `PAYMENT-SIGNATURE` header for x402 v2.
3. On success (`200`), the response includes `synthesizedSummary` and
   `paymentInfo`.

The `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.

<Warning>
  Treat a `402` as a "pay and retry" signal, not a failure. If a plain HTTP request returns `402`,
  retry it through the payment-aware client rather than surfacing an error.
</Warning>

A plain request returns a challenge rather than the paid summary:

```http theme={null}
HTTP/1.1 402 Payment Required
PAYMENT-REQUIRED: <encoded x402 challenge>
WWW-Authenticate: Payment <MPP challenge parameters>
```

After a successful payment, the response identifies how the request was paid:

```json theme={null}
{
  "publicationSlug": "fabricatedknowledge.com",
  "slug": "ais-600b-question",
  "title": "AI's $600B Question",
  "synthesizedSummary": "The article examines whether projected AI revenue can justify rapidly expanding infrastructure spending...",
  "paymentInfo": {
    "amountUsd": "0.50",
    "protocol": "x402"
  }
}
```

## API-key credits

API keys are traditional bearer tokens created from the Drip dashboard. Use them
when your agent or backend service should spend an account balance instead of
holding a wallet.

```bash theme={null}
curl \
  "https://dripstack.com/api/v1/publications/fabricatedknowledge.com/ais-600b-question" \
  -H "Authorization: Bearer $DRIP_API_KEY"
```

API keys spend purchased credits only. If the balance is too low, the paid route
returns `403` with `reason: "insufficient_credits"` instead of issuing a 402
payment challenge. See the [API-key quickstart](/quickstart-api-keys) for the
full setup and request examples.

## Inspect pricing before payment

List a publication's recent posts to compare prices before selecting one:

```bash theme={null}
curl "https://dripstack.com/api/v1/publications/fabricatedknowledge.com?limit=5"
```

```json theme={null}
{
  "posts": [
    {
      "slug": "ais-600b-question",
      "title": "AI's $600B Question",
      "publishedAt": "2026-06-14T12:00:00.000Z",
      "priceCents": 50
    }
  ]
}
```

`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 exposes `x-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 content — for example,
stock-picks are priced by the number of distinct attributed source articles in
the response. Always trust the live `402` over publication listings or discovery
offers.

## Status codes

| Status | Meaning                                   | Action                                                |
| ------ | ----------------------------------------- | ----------------------------------------------------- |
| `200`  | Summary returned; request was charged     | Read `synthesizedSummary`                             |
| `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       |
| `503`  | Summary not ready (`summary_not_ready`)   | Retry later; no payment challenge is issued           |

<Note>
  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.
</Note>

For production handling, see [Errors & Retries](/concepts/errors-retries).

## Discovery

Prefer `GET /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.
