List plans
https://api.norreach.app/v1/plansThe workspace's plans — each one Nora wrote from a brief — newest first, a page at a time, with their budget, autonomy, channels and how many cards are done or waiting for a person.
curl -X GET "https://api.norreach.app/v1/plans" \
-H "Authorization: Bearer $NORREACH_API_KEY"{
"object": "list",
"data": [
{
"id": "6a7b8c9d-0e1f-4a2b-8c3d-4e5f6a7b8c9d",
"object": "plan",
"name": "Example Care — 20 new nurse placements in Stockholm",
"status": "review",
"goal_type": "lead_gen",
"playbook": "Local services",
"brand_name": "Example Care",
"lead_status": "have",
"start_date": "2026-11-10",
"end_date": "2026-12-09",
"rationale": "Clinics decide in two weeks; the plan warms them with proof before it asks.",
"kpis": [
"Meetings booked",
"Cost per lead"
],
"budget": {
"total": {
"amount_minor": 1500000,
"currency": "SEK"
},
"per_week": {
"amount_minor": 350000,
"currency": "SEK"
},
"split": [
{
"label": "Meta ads",
"amount": {
"amount_minor": 1000000,
"currency": "SEK"
},
"cost_class": "high",
"note": "Two weeks of lead ads"
}
]
},
"autonomy": {
"preset": "auto_veto",
"policies": {
"quiet_hours": true,
"disclosure": true,
"ai_call": false
}
},
"channels": [
{
"channel": "email",
"role": "recommended",
"enabled": true
},
{
"channel": "paid_ad",
"role": "optional",
"enabled": true
}
],
"cards": {
"total": 24,
"completed": 0,
"awaiting_approval": 3
},
"generation": {
"step": 7,
"total": 7,
"note": "done",
"done": true,
"failed": false
},
"created_at": "2026-11-04T09:12:33.120Z"
}
],
"has_more": false,
"next_cursor": null
}Authorizations
Bearer authentication: send Authorization: Bearer <key>, with an API key or an OAuth access token. The key needs the scope plans:read. API keys and scopes
Query parameters
Page size (1–200, default 50).
The next_cursor of the previous page.
generatingreviewactivepausedcompletedfailedbrand_awarenesslead_gennurtureResponse
200application/json— List plans
Show child attributesHide child attributes
An id (UUID).
generatingreviewactivepausedcompletedfailedbrand_awarenesslead_gennurturehave = the plan works on the workspace's own contacts; need = it finds people first.
haveneedNora's reasoning for the plan's shape.
Show child attributesHide child attributes
Money in integer minor units (öre, cents).
Show child attributesHide child attributes
Money in integer minor units (öre, cents).
Show child attributesHide child attributes
Show child attributesHide child attributes
Money in integer minor units (öre, cents).
freelowhighcustomerWhat Nora may do in this plan without asking.
Show child attributesHide child attributes
ask_everything = every piece waits for a person; auto_veto = Nora goes ahead unless you stop her; full_auto = Nora runs it.
ask_everythingauto_vetofull_autoPer-kind switches. quiet_hours and disclosure are always on.
Show child attributesHide child attributes
recommendedoptionalShow child attributesHide child attributes
Show child attributesHide child attributes
What Nora is doing now (her own words).
The plan is written (it is in review or later).
Errors
Errors are application/problem+json with a stable code.
| Status | Code | Meaning |
|---|---|---|
| 400 | bad_request | The request couldn't be read. |
| 400 | unknown_field | The request has a field this operation doesn't know. |
| 400 | invalid_cursor | That cursor doesn't belong to this list. |
| 401 | unauthorized | A valid API key is required. |
| 403 | insufficient_scope | This API key doesn't have the scope this operation needs. |
| 403 | feature_not_enabled | The API isn't switched on for this workspace. |
| 429 | rate_limited | Too many requests. Slow down and try again. |
| 500 | server_error | Something went wrong on our side. |
| 503 | unavailable | The API isn't available right now. Try again shortly. |