Get It Done Logo
Get It Done

API documentation

The GetItDone REST API is AI-native task management for people and agents. 37 operations, one gid_ key, Bearer auth. Base URL:

https://app.nowgetitdone.com/v1

Quickstart — first 200

  1. Create an API key in the app: Profile → API Keys. It is shown once — store it as a server-side secret.
  2. Call the API with your key:
curl
curl https://app.nowgetitdone.com/v1/organizations \
  -H "Authorization: Bearer gid_YOUR_API_KEY"
200 — cursor envelope
{
  "data": [
    { "id": "org_a1b2c3", "name": "Acme Inc", "role": "owner" }
  ],
  "has_more": false,
  "next_cursor": null
}

Authentication

Send your key on every request. Both header forms are accepted:

Bearer (recommended)
Authorization: Bearer gid_YOUR_API_KEY
x-api-key
x-api-key: gid_YOUR_API_KEY

Test keys are prefixed gid_test_ — use them against test data, live keys against production.

Errors

Errors are RFC 9457 application/problem+json documents with a stable machine-readable code. Switch on code, never on the human-readable title. Every response carries an x-request-id — quote it in support requests.

Example problem document
{
  "type": "https://nowgetitdone.com/docs/api/problems/validation-failed",
  "title": "Request validation failed",
  "status": 400,
  "code": "validation_failed",
  "request_id": "req_a1b2c3d4",
  "errors": [
    { "pointer": "/title", "code": "too_small", "message": "String must contain at least 1 character(s)" }
  ]
}

Browse every error code →

Rate limits & quotas

Two independent systems, two codes. A per-credential burst window answers 429 rate_limited (retry after Retry-After); the billing-period allowance answers 429 quota_exhausted. Every response carries IETF draft-11 RateLimit headers plus the X-RateLimit-* trio.

PlanAPI calls / periodBurst / minute
Free5010
Pro50,000120
Team500,000300

One API call = one request against your workspace quota; it resets each billing period. Outbound webhooks require a Pro or Team plan.

Pagination

List endpoints return a cursor envelope. Pass next_cursor back as the after query parameter for the next page. Filters are baked into the cursor — reusing one with different filters answers 400 validation_failed.

Envelope shape
{ "data": [ /* … */ ], "has_more": true, "next_cursor": "eyJ…" }

Idempotency

Consequential POSTs accept an optional Idempotency-Key header (1–255 characters; a UUID works). Retrying with the same key and byte-identical body within 24h replays the stored response — never re-executed, never re-charged. A different body answers 422 idempotency_key_reused; a retry racing the first answers 409 idempotency_in_progress.

Webhooks

Receive signed events when tasks change. Full details — event catalog, signature verification, retries, and secret rotation — on the webhooks page.

Keep exploring

Prefer AI tooling? Connect the MCP server at https://app.nowgetitdone.com/api/mcp.