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

# Extract Picks

> POST /api/v2/extract-picks — extract stock picks from article text the subscriber owns, as a background job.

Some picks never exist in a Drip source — they live in a subscriber's own
newsletter, a transcript, a research note, or a post they read somewhere else.
`/api/v2/extract-picks` takes that text and returns the same structured shape
as `GET /api/v2/stock-picks`: ticker, action, direction, conviction, evidence
quote, thesis, price target.

| Route | Access |
| - | - |
| `POST /api/v2/extract-picks` | Subscription (PRO/EXPERT), included in plan |
| `GET /api/v2/extract-picks` | Subscription (PRO/EXPERT), included in plan |
| `GET /api/v2/extract-picks/{id}` | Subscription (PRO/EXPERT), included in plan |

No credits are spent — the call is included in the plan. The API key mount
only (`Bearer pk_drip_…` or an MCP OAuth token); there is no wallet twin.

> [!WARNING]
>
> The pasted text is **never stored**. It travels to the extraction job and is gone when the job
> ends — we keep the picks, not the article. Results are advisory and never enter the public picks
> product, the leaderboard, or consensus.

## `POST /api/v2/extract-picks`

Submits a paste and returns immediately. The extraction runs as a background
job (30–90 seconds), so poll the result endpoint until the status is terminal.

```bash theme={null}
curl -X POST https://dripstack.com/api/v2/extract-picks \
  -H "Authorization: Bearer $DRIP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Q3 Position Update",
    "text": "NVDA — I bought 200 shares at $182 last Tuesday..."
  }'
```

```json theme={null}
{ "id": "cmvsl2zxr0003mb0xcqbt5avm", "status": "PENDING" }
```

| Field | Required | Notes |
| - | - | - |
| `text` | yes | 1–15,000 characters. Longer pastes are rejected |
| `title` | no | Label shown in the caller's extraction list |

Re-posting **identical text** returns the stored result instantly (`200` with
the picks) instead of running a new job — the text is hashed, never stored.

### Limits

* **5 extractions/day** on Personal, **10/day** on Enterprise (UTC day).
* **One extraction at a time** per account — a second submit while a job is
  running is refused.
* `400` when the text is empty or over the cap, `403` without a plan, `429`
  when the daily quota is spent.

## `GET /api/v2/extract-picks/{id}`

Polls one extraction. `status` is `PENDING`, `READY`, or `FAILED`.

```bash theme={null}
curl https://dripstack.com/api/v2/extract-picks/cmvsl2zxr0003mb0xcqbt5avm \
  -H "Authorization: Bearer $DRIP_API_KEY"
```

```json theme={null}
{
  "id": "cmvsl2zxr0003mb0xcqbt5avm",
  "status": "READY",
  "title": "Q3 Position Update",
  "picks": [
    {
      "ticker": "NVDA",
      "action": "NEW_POSITION",
      "direction": "LONG",
      "conviction": 4,
      "evidenceQuote": "I bought 200 shares of NVDA at $182 last Tuesday...",
      "yahooSymbol": "NVDA",
      "instrumentType": "EQUITY"
    }
  ],
  "skipped": [{ "ticker": "AMD", "reason": "not an actionable pick" }],
  "model": "anthropic/claude-sonnet-5.5",
  "pipelineVersion": 1
}
```

Polling is free: it does not consume the monthly API request allowance, and
only a submitted extraction counts against the daily quota. Another account's
id returns `404`.

## `GET /api/v2/extract-picks`

Lists the caller's own extractions, newest first.

```json theme={null}
{
  "extractions": [
    {
      "id": "cmvsl2zxr0003mb0xcqbt5avm",
      "status": "READY",
      "title": "Q3 Position Update",
      "createdAt": "2026-10-28T20:45:27.279Z",
      "pickCount": 5
    }
  ]
}
```

## Hosted MCP

Two tools mirror the routes:

* `extract_picks` — `{"text": "...", "title": "..."}` → `{"id": "...", "status": "PENDING"}`
* `get_extraction` — `{"id": "..."}` → the result above

Submit, then poll `get_extraction` until the status is terminal. Do not wait
inside one tool call — the job takes longer than any MCP client timeout.


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