StreakPlan for developers

A REST API and an MCP server for your own account: use StreakPlan from Claude, ChatGPT, Claude Code or a script. In every plan. You choose what each key can do.

Connected in a minute

1The Claude app

No key to copy
  1. Settings › Connectors › Add custom connector
  2. Name it StreakPlan and paste the URL
  3. Connect, pick what Claude may do, Approve
https://streakplan.com/api/v1/mcp

2ChatGPT

Developer mode
  1. Settings › Apps & Connectors › Advanced › turn on Developer mode
  2. Create: name it StreakPlan, paste the URL, pick OAuth
  3. Sign in, pick what ChatGPT may do, Approve
https://streakplan.com/api/v1/mcp

3Claude Code

One command

Make a key, then run this once. Cursor, VS Code and any MCP client that sends a header work the same way.

Terminal
claude mcp add --transport http streakplan \
https://streakplan.com/api/v1/mcp \
--header "Authorization: Bearer $API_KEY"

4The REST API

JSON over HTTPS

For scripts, cron jobs and your own tools.

Terminal
curl https://streakplan.com/api/v1/me \
-H "Authorization: Bearer $API_KEY"

Keys are made in StreakPlan: the account menu › API and MCP. The Claude app and ChatGPT make their own when you approve them.

You decide what a key can do

Pick it when you make the key, or when you approve Claude or ChatGPT. No key ever changes your plan, billing, account or its keys.

Read only

Default

Reads your account and your runs. It never starts anything.

  • Your account, plan and usage
  • Your runs and their answers
  • Start a run

Read and write

Also starts runs, which use your plan's allowance like the dashboard does.

  • Everything Read only does
  • Start runs, within your plan

Reference

Base URL and keys

Base URL
https://streakplan.com/api/v1
Auth
Authorization: Bearer sp_live_…
Format
JSON in and out. Times are UTC, ISO 8601.
Headers
Every answer to a valid key has X-RateLimit-Limit and X-RateLimit-Remaining. Send Idempotency-Key on a write, so a retry never does it twice.

For agents: GET /api/v1/docs answers this whole reference as JSON, with no key.

Limits

Requests
60 a minute per key, then 429 with Retry-After
Runs started
100 a day per account, within your plan's allowance
Keys
Up to 5 per account, each shown once
Body
JSON, up to 256 KB
MCP batch
Up to 10 messages; each tool call counts as a request

Errors

Every error is JSON with one message that says what to fix: {"error": "limit must be a whole number from 1 to 100."}

400
Something in the request is wrong: the message says what.
401
No key, or the key is wrong or revoked.
402
The plan's allowance is used, or the free trial ended: pick a plan in Billing.
403
The key may not do this: a Read only key asked to write.
404
No such endpoint or record. An unknown address lists the endpoints.
409
A request with this Idempotency-Key is still running: try again in a moment.
413 / 415
The body is too large, or not JSON.
422
This Idempotency-Key was used for another request.
429
Too many requests, or a daily limit: Retry-After says when to try again.
500 / 503
Our side failed, or new work is paused. Nothing was changed.

Account

Who the key belongs to, its plan and usage, and what the key may do.

GET/api/v1/meAny key

The user's StreakPlan account: the workspace's name, its plan, how much of each plan limit it has used this period (and when it refills), and what this key may do. It reads only; nothing here changes the plan, billing or the account.

Request
curl https://streakplan.com/api/v1/me \
-H "Authorization: Bearer $API_KEY"
Response200 OK
{
"workspace": { "id": "01JBX6…", "name": "Acme" },
"plan": { "id": "pro", "name": "Pro" },
"usage": [{ "metric": "runs", "label": "AI requests", "used": 42, "limit": 500, "resetsAt": "2026-12-01T00:00:00.000Z" }],
"key": { "access": "read", "can": ["read"] }
}

Runs

Ask a question and read the answer: start a run, then follow it until it is done.

GET/api/v1/runsAny key

The user's latest StreakPlan runs, newest first: each one's id, status (queued, running, done or failed), what was asked, the answer or the error, and when. It reads only; nothing here changes the plan, billing or the account.

Query parameters

limit

optional · 1–100

How many (default 20).
Request
curl "https://streakplan.com/api/v1/runs?limit=5" \
-H "Authorization: Bearer $API_KEY"
Response200 OK
{
"runs": [{
"id": "01JBX7Q2MDV4H8C3N5P9R2K6TE",
"status": "done",
"prompt": "Summarise this week's feedback",
"output": "Three themes stand out…",
"error": null,
"createdAt": "2026-11-02T09:14:03.000Z",
"updatedAt": "2026-11-02T09:14:21.000Z"
}]
}
GET/api/v1/runs/{id}Any key

One of the user's StreakPlan runs by its id: its status (queued, running, done or failed), what was asked, and the answer once it is done (or the error). Ask again every few seconds after start_run until it is done or failed. It reads only; nothing here changes the plan, billing or the account.

Query parameters

id

path

The run's id, from start_run or list_runs.
Request
curl https://streakplan.com/api/v1/runs/01JBX7Q2MDV4H8C3N5P9R2K6TE \
-H "Authorization: Bearer $API_KEY"
Response200 OK
{
"run": {
"id": "01JBX7Q2MDV4H8C3N5P9R2K6TE",
"status": "running",
"prompt": "Summarise this week's feedback",
"output": null,
"error": null,
"createdAt": "2026-11-02T09:14:03.000Z",
"updatedAt": "2026-11-02T09:14:05.000Z"
}
}
POST/api/v1/runsRead and write key

Asks StreakPlan a question: starts a run in the background, as the dashboard's ask does, and answers it with status "queued". Follow it with get_run until it is done (usually under a minute). Each run uses one of the plan's ai requests this period. Needs a Read and write key; it changes nothing else.

JSON body

prompt

required · up to 2,000 characters

What to ask, up to 2,000 characters.
Request
curl -X POST https://streakplan.com/api/v1/runs \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt":"Summarise this week's feedback"}'
Response201 Created
{
"run": {
"id": "01JBX7Q2MDV4H8C3N5P9R2K6TE",
"status": "queued",
"prompt": "Summarise this week's feedback",
"output": null,
"error": null,
"createdAt": "2026-11-02T09:14:03.000Z",
"updatedAt": "2026-11-02T09:14:03.000Z"
}
}

MCP tools

The MCP server at /api/v1/mcp (Streamable HTTP, JSON answers) has a tool for every endpoint above, with the same arguments, limits and permissions. Your AI sees only the tools its key allows.