One plan
https://api.norreach.app/v1/plans/{id}A plan with its Overview numbers: how many leads stand at each stage of its arc, and how many people it found (and how many became contacts).
curl -X GET "https://api.norreach.app/v1/plans/{id}" \
-H "Authorization: Bearer $NORREACH_API_KEY"{
"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",
"overview": {
"arc": {
"curiosity": 40,
"awareness": 22,
"consideration": 9,
"proof": 4,
"offer": 2,
"urgency": 0,
"decision": 1
},
"pool": {
"total": 120,
"unlocked": 30,
"waiting": 90
}
}
}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
Path parameters
An id (UUID).
Response
200application/json— One plan
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).
Show child attributesHide child attributes
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).
The plan's Overview numbers.
Show child attributesHide child attributes
How many leads stand at each stage of the plan's arc (null = couldn't be counted).
People found for the plan: all of them, those who became contacts, those still waiting.
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. |
| 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. |
| 404 | not_found | That doesn't exist. |
| 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. |