API KEYS · FEEDBACK

Authentication

Every request to /api/v1/* and /api/mcp authenticates with an API key from /account/developers.

Header format

Authorization: Bearer im_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Keys act as your user: workspace reads and writes are scoped to the account that created the key. Revoking a key at /account/developers takes effect immediately.

Rate limits

Each key allows 100 requests per minute. Exceeding it returns 429 with a Retry-After header (seconds until the window resets):

HTTP/1.1 429 Too Many Requests
Retry-After: 42

{"error": {"code": "rate_limited", "message": "Rate limit exceeded for this API key."}}

Error shape

All errors are JSON with a stable machine-readable code:

{"error": {"code": string, "message": string}}
StatusCodeWhen
400invalid_taxonomyAn explicit ?taxonomy= id is not a published activity taxonomy for the resolved landscape.
401missing_api_key / invalid_api_keyNo or bad Authorization header.
404unknown_landscape / unknown_group / unknown_org / unknown_target / not_foundThe referenced resource doesn't exist (an explicit ?landscape= slug is never silently substituted).
403forbiddenA workspace resource owned by a different user.
409duplicate_itemThe org/group is already on that list.
422validation_errorBody or query failed validation — the message names the field.
429rate_limitedKey over 100 req/min — respect Retry-After.

Pagination

List endpoints accept ?limit= (default 50, max 200) and ?offset=, and respond with an envelope:

{"data": [...], "total": 123, "limit": 50, "offset": 0, "meta": {...}}

Scope & reproducibility

Warehouse read endpoints accept ?landscape=<slug> (default: the default landscape) and ?taxonomy=<id> (default: that landscape's default published activity taxonomy). Pin both parameters to make repeated results reproducible:

curl "https://ny.northstartoolkit.com/api/v1/taxonomy?landscape=YOUR_LANDSCAPE&taxonomy=14" \
  -H "Authorization: Bearer YOUR_API_KEY"

{"data": [...], "meta": {"landscape": "YOUR_LANDSCAPE", "taxonomy_id": 14}}

meta.taxonomy_id echoes the resolved taxonomy version. Pass that id back as the taxonomy parameter to pin it — taxonomies are versioned artifacts and the default can change between data releases.