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

# Unlocks

> Posts this account already paid to unlock. Metadata only — re-read the summary on the paid post route.

`GET /api/v1/me/unlocks` lists **lifetime unlocks** for the Drip user identified
by the API key or MCP OAuth token. Keys and tokens for the same user share this
list. Wallet and MPP unlocks belong to their payment identities and are not
included. Use it to answer "what has this account already bought?"

Requires `Authorization: Bearer pk_drip_…` or an MCP OAuth access token with
`mcp:unlock`. Session JWTs are rejected (`401`).

MCP: `list_unlocked_posts`.

This route does **not** return `synthesizedSummary`. Re-read with
`GET /api/v1/publications/{publicationSlug}/{postSlug}` (or MCP
`unlock_post`) — free after the first unlock for this Drip user. See
[Payment Flow](/concepts/payment-flow).

## List

```bash theme={null}
curl -H "Authorization: Bearer pk_drip_…" \
  "https://dripstack.com/api/v1/me/unlocks?limit=20"
```

Cursor-paginated, newest first. Optional `limit` (1-50, default 20) and
`cursor` (pass the previous `nextCursor`). `nextCursor` is `null` when
exhausted. A bad `limit` returns `400` with field `issues`; an unknown
`cursor` returns `400` with `error: "Invalid cursor."`. Both include
`code: "bad_request"` and `hint`. See [Errors & Retries](/concepts/errors-retries).

```json theme={null}
{
  "items": [
    {
      "id": "punl_01",
      "publicationSlug": "stratechery",
      "publicationName": "Stratechery",
      "postSlug": "the-ai-infrastructure-boom",
      "title": "The AI Infrastructure Boom",
      "subtitle": "Why hyperscalers are spending billions on GPU clusters",
      "author": "Ben Thompson",
      "url": "https://stratechery.com/p/the-ai-infrastructure-boom",
      "publishedAt": "2026-06-14T12:00:00.000Z",
      "unlockedAt": "2026-06-15T10:30:00.000Z",
      "isPodcast": false,
      "amountUsd": 0.5
    }
  ],
  "nextCursor": null
}
```

`amountUsd` is the credits charged on first unlock, or `null` when no spend
row exists. `isPodcast` is true for episodes.

To unlock a **new** post, confirm `$X.XX` from discovery `priceCents`, then
call the paid publication-post route (HTTP) or `unlock_post` with
`confirmSpend: true` (MCP). MCP re-reads of an already-unlocked post do not
require `confirmSpend`.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.