{"openapi":"3.1.0","info":{"title":"Nyblit API","version":"1.0.0-beta","summary":"Read and manage your Nyblit Tasks, Projects, Workflows and Statuses.","description":"Authenticate with a personal access token: `Authorization: Bearer nyb_pat_…`. Create tokens in Nyblit → Settings → API Access. Requires a plan with API Access; end-to-end encrypted accounts are not supported.","contact":{"name":"Nyblit","url":"https://www.nyblit.app"}},"servers":[{"url":"https://dev.developers.nyblit.app/api/v1"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"User","description":"Who the token acts as."},{"name":"Tasks","description":"Tasks always have exactly one Disposition."},{"name":"Projects","description":"Optional grouping for tasks."},{"name":"Workflows","description":"User-defined Workflows and their Statuses."},{"name":"Dispositions","description":"The five fixed Dispositions (tabs)."}],"paths":{"/me":{"get":{"operationId":"getMe","tags":["User"],"summary":"Get the token’s user","description":"Identity and the token’s scopes — handy for checking a token works. Any valid token; no scope needed.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/dispositions":{"get":{"operationId":"listDispositions","tags":["Dispositions"],"summary":"List Dispositions","description":"All five, in tab order, with their current labels and colours. Any valid token; no scope needed.","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"OK.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DispositionList"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/tasks":{"get":{"operationId":"listTasks","tags":["Tasks"],"summary":"List tasks","description":"Your tasks. Oldest first, with cursor pagination. Unknown query parameters are rejected with 400 so typos do not silently return everything. Requires `tasks:read`.","security":[{"bearerAuth":["tasks:read"]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Page size (1–100).","schema":{"default":50,"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"`next_cursor` from the previous page.","schema":{"type":"string","maxLength":200}},{"name":"disposition","in":"query","required":false,"schema":{"type":"string","enum":["not_started","in_progress","waiting","on_hold","done"]}},{"name":"project_id","in":"query","required":false,"schema":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"}},{"name":"updated_since","in":"query","required":false,"description":"Only tasks updated at or after this time.","schema":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":"OK.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TaskList"}}}},"400":{"description":"Invalid query parameters.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"post":{"operationId":"createTask","tags":["Tasks"],"summary":"Create a task","description":"Creates a task in your account; it appears in the apps straight away. Send `status_id` to start it on a Status (that sets its Workflow and Disposition), or `workflow_id` to land on that Workflow’s Status for the Disposition. Counts against your plan’s active-task limit. Requires `tasks:write`.","security":[{"bearerAuth":["tasks:write"]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"description":"Any unique string (1–255 printable characters). Retrying with the same key returns the task the first request created (`200` + `Idempotent-Replayed: true`) instead of creating another.","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTask"}}}},"responses":{"200":{"description":"Replayed — the task an earlier request with this `Idempotency-Key` created.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"201":{"description":"Created.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."},"ETag":{"schema":{"type":"string"},"description":"The resource `version`, quoted."},"Location":{"schema":{"type":"string"},"description":"URL of the new task."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid body, header or field (see `errors`).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, the account is end-to-end encrypted, or the plan’s active-task limit is reached (`task_limit_reached`).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/tasks/{id}":{"get":{"operationId":"getTask","tags":["Tasks"],"summary":"Get a task","description":"One of your tasks. Requires `tasks:read`.","security":[{"bearerAuth":["tasks:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."},"ETag":{"schema":{"type":"string"},"description":"The resource `version`, quoted."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No task with this id in your account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"patch":{"operationId":"updateTask","tags":["Tasks"],"summary":"Update a task","description":"Changes only the fields you send. The same rules as the app apply: a Status sets the Workflow and Disposition; changing the Disposition alone clears the Status; changing the Workflow resets its step progress; `on_hold_until` needs the `on_hold` Disposition, and leaving `on_hold` clears it. Requires `tasks:write`.","security":[{"bearerAuth":["tasks:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"If-Match","in":"header","required":false,"description":"The task’s `ETag` (or `version`) from your last read. If it has changed since, you get `412`.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTask"}}}},"responses":{"200":{"description":"OK — the updated task.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."},"ETag":{"schema":{"type":"string"},"description":"The resource `version`, quoted."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid body, header or field (see `errors`).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No task with this id in your account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"The task changed since your `If-Match` version.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}},"delete":{"operationId":"deleteTask","tags":["Tasks"],"summary":"Delete a task","description":"Permanently deletes the task and its checklist, attachments and links. This cannot be undone. Requires `tasks:write`.","security":[{"bearerAuth":["tasks:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"If-Match","in":"header","required":false,"description":"The task’s `ETag` (or `version`) from your last read. If it has changed since, you get `412`.","schema":{"type":"string"}}],"responses":{"204":{"description":"Deleted.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."}}},"400":{"description":"Invalid body, header or field (see `errors`).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No task with this id in your account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"The task changed since your `If-Match` version.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/tasks/{id}/complete":{"post":{"operationId":"completeTask","tags":["Tasks"],"summary":"Complete a task","description":"Moves the task to `done` and stamps `completed_at`. Same as `PATCH` with `{\"disposition\": \"done\"}`. Requires `tasks:write`.","security":[{"bearerAuth":["tasks:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"If-Match","in":"header","required":false,"description":"The task’s `ETag` (or `version`) from your last read. If it has changed since, you get `412`.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK — the updated task.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."},"ETag":{"schema":{"type":"string"},"description":"The resource `version`, quoted."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid body, header or field (see `errors`).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No task with this id in your account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"The task changed since your `If-Match` version.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/tasks/{id}/later":{"post":{"operationId":"laterTask","tags":["Tasks"],"summary":"Move a task to Later","description":"Moves the task to `on_hold` (Later). With `until`, it wakes back onto Today (`in_progress`) at that time, returning to the Today Status it left. Requires `tasks:write`.","security":[{"bearerAuth":["tasks:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"If-Match","in":"header","required":false,"description":"The task’s `ETag` (or `version`) from your last read. If it has changed since, you get `412`.","schema":{"type":"string"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaterTask"}}}},"responses":{"200":{"description":"OK — the updated task.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."},"ETag":{"schema":{"type":"string"},"description":"The resource `version`, quoted."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid body, header or field (see `errors`).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No task with this id in your account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"The task changed since your `If-Match` version.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/tasks/{id}/archive":{"post":{"operationId":"archiveTask","tags":["Tasks"],"summary":"Archive a task","description":"Hides the task from its tab without deleting it. List with `include_archived=true` to see it. Requires `tasks:write`.","security":[{"bearerAuth":["tasks:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"If-Match","in":"header","required":false,"description":"The task’s `ETag` (or `version`) from your last read. If it has changed since, you get `412`.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK — the updated task.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."},"ETag":{"schema":{"type":"string"},"description":"The resource `version`, quoted."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid body, header or field (see `errors`).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No task with this id in your account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"The task changed since your `If-Match` version.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/tasks/{id}/unarchive":{"post":{"operationId":"unarchiveTask","tags":["Tasks"],"summary":"Unarchive a task","description":"Puts an archived task back on its tab. Requires `tasks:write`.","security":[{"bearerAuth":["tasks:write"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"If-Match","in":"header","required":false,"description":"The task’s `ETag` (or `version`) from your last read. If it has changed since, you get `412`.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK — the updated task.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."},"ETag":{"schema":{"type":"string"},"description":"The resource `version`, quoted."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Task"}}}},"400":{"description":"Invalid body, header or field (see `errors`).","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No task with this id in your account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"412":{"description":"The task changed since your `If-Match` version.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/tasks/{id}/steps":{"get":{"operationId":"listTaskSteps","tags":["Tasks"],"summary":"List a task’s steps","description":"Progressive steps in app order: the Today Statuses of the task’s Workflow, or its own checklist when it has no Workflow. Requires `tasks:read`.","security":[{"bearerAuth":["tasks:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StepList"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No task with this id in your account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/projects":{"get":{"operationId":"listProjects","tags":["Projects"],"summary":"List projects","description":"Projects you own. Oldest first, with cursor pagination. Unknown query parameters are rejected with 400 so typos do not silently return everything. Requires `projects:read`.","security":[{"bearerAuth":["projects:read"]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Page size (1–100).","schema":{"default":50,"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"`next_cursor` from the previous page.","schema":{"type":"string","maxLength":200}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"string","enum":["true","false"]}}],"responses":{"200":{"description":"OK.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectList"}}}},"400":{"description":"Invalid query parameters.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/projects/{id}":{"get":{"operationId":"getProject","tags":["Projects"],"summary":"Get a project","description":"One of your projects. Requires `projects:read`.","security":[{"bearerAuth":["projects:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."},"ETag":{"schema":{"type":"string"},"description":"The resource `version`, quoted."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No project with this id in your account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/workflows":{"get":{"operationId":"listWorkflows","tags":["Workflows"],"summary":"List Workflows","description":"Your Workflows. Oldest first, with cursor pagination. Unknown query parameters are rejected with 400 so typos do not silently return everything. Requires `workflows:read`.","security":[{"bearerAuth":["workflows:read"]}],"parameters":[{"name":"limit","in":"query","required":false,"description":"Page size (1–100).","schema":{"default":50,"type":"integer","minimum":1,"maximum":100}},{"name":"cursor","in":"query","required":false,"description":"`next_cursor` from the previous page.","schema":{"type":"string","maxLength":200}}],"responses":{"200":{"description":"OK.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowList"}}}},"400":{"description":"Invalid query parameters.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/workflows/{id}":{"get":{"operationId":"getWorkflow","tags":["Workflows"],"summary":"Get a Workflow","description":"One of your Workflows. Requires `workflows:read`.","security":[{"bearerAuth":["workflows:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."},"ETag":{"schema":{"type":"string"},"description":"The resource `version`, quoted."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Workflow"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No Workflow with this id in your account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/workflows/{id}/statuses":{"get":{"operationId":"listWorkflowStatuses","tags":["Workflows"],"summary":"List a Workflow’s Statuses","description":"Grouped by Disposition in tab order, then by position. Requires `workflows:read`.","security":[{"bearerAuth":["workflows:read"]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK.","headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests allowed in the current window."},"RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests left in the current window."},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the window resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote this when contacting support."}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusList"}}}},"401":{"description":"Missing, invalid, expired or revoked token.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"Token lacks the scope, the plan lacks API Access, or the account is end-to-end encrypted.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"No Workflow with this id in your account.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"Rate limit exceeded. Wait `Retry-After` seconds.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"The API is temporarily disabled.","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"schemas":{"DispositionKey":{"$id":"#/components/schemas/DispositionKey","type":"string","enum":["not_started","in_progress","waiting","on_hold","done"]},"User":{"$id":"#/components/schemas/User","type":"object","properties":{"object":{"type":"string","const":"user"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"email":{"type":["string","null"]},"name":{"type":["string","null"]},"token":{"type":"object","properties":{"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"scopes":{"type":"array","items":{"type":"string","enum":["tasks:read","tasks:write","projects:read","projects:write","workflows:read","workflows:write","webhooks:manage"]}}},"required":["id","scopes"],"additionalProperties":false}},"required":["object","id","email","name","token"],"additionalProperties":false},"Task":{"$id":"#/components/schemas/Task","type":"object","properties":{"object":{"type":"string","const":"task"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"title":{"type":"string"},"notes":{"type":["string","null"]},"url":{"description":"Link attached to the task.","type":["string","null"]},"disposition":{"$ref":"#/components/schemas/DispositionKey"},"workflow_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"status_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"Status within the task’s Workflow. Setting a Status sets the Disposition."},"project_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}]},"due_date":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"deadline":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"on_hold_until":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When a task in the `on_hold` (Later) Disposition wakes up."},"is_urgent":{"type":"boolean"},"estimated_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"archived":{"type":"boolean"},"completed_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"version":{"type":"string","description":"Opaque version. Sent as the `ETag`; pass it in `If-Match` when updating or deleting."}},"required":["object","id","title","notes","url","disposition","workflow_id","status_id","project_id","due_date","deadline","on_hold_until","is_urgent","estimated_minutes","archived","completed_at","created_at","updated_at","version"],"additionalProperties":false},"TaskList":{"$id":"#/components/schemas/TaskList","type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Task"}},"has_more":{"type":"boolean"},"next_cursor":{"description":"Pass as `cursor` to fetch the next page.","type":["string","null"]}},"required":["object","data","has_more","next_cursor"],"additionalProperties":false},"Step":{"$id":"#/components/schemas/Step","type":"object","properties":{"object":{"type":"string","const":"step"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"kind":{"type":"string","enum":["status","subtask"],"description":"`status` = a Today Status of the task’s Workflow (ticking moves the task through the Workflow); `subtask` = a checklist item on a task with no Workflow."},"title":{"type":"string"},"completed":{"type":"boolean"},"estimated_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]}},"required":["object","id","kind","title","completed","estimated_minutes"],"additionalProperties":false},"StepList":{"$id":"#/components/schemas/StepList","type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Step"}}},"required":["object","data"],"additionalProperties":false},"Project":{"$id":"#/components/schemas/Project","type":"object","properties":{"object":{"type":"string","const":"project"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"notes":{"type":["string","null"]},"color":{"description":"Hex colour, e.g. `#3480E0`.","type":["string","null"]},"target_completion_date":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"archived":{"type":"boolean"},"archived_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"sort_order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Position in the app’s project list (ascending)."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"version":{"type":"string","description":"Opaque version, also sent as the `ETag`."}},"required":["object","id","name","notes","color","target_completion_date","archived","archived_at","sort_order","created_at","updated_at","version"],"additionalProperties":false},"ProjectList":{"$id":"#/components/schemas/ProjectList","type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Project"}},"has_more":{"type":"boolean"},"next_cursor":{"description":"Pass as `cursor` to fetch the next page.","type":["string","null"]}},"required":["object","data","has_more","next_cursor"],"additionalProperties":false},"Workflow":{"$id":"#/components/schemas/Workflow","type":"object","properties":{"object":{"type":"string","const":"workflow"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"description":{"type":["string","null"]},"emoji":{"type":["string","null"]},"sort_order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Position in the app’s Workflow list (ascending)."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"version":{"type":"string","description":"Opaque version, also sent as the `ETag`."}},"required":["object","id","name","description","emoji","sort_order","created_at","updated_at","version"],"additionalProperties":false},"WorkflowList":{"$id":"#/components/schemas/WorkflowList","type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Workflow"}},"has_more":{"type":"boolean"},"next_cursor":{"description":"Pass as `cursor` to fetch the next page.","type":["string","null"]}},"required":["object","data","has_more","next_cursor"],"additionalProperties":false},"Status":{"$id":"#/components/schemas/Status","type":"object","properties":{"object":{"type":"string","const":"status"},"id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"workflow_id":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"name":{"type":"string"},"emoji":{"type":["string","null"]},"disposition":{"description":"Assigning this Status moves the task to this Disposition.","$ref":"#/components/schemas/DispositionKey"},"sort_order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"Order within its Disposition (ascending)."},"default_estimated_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"version":{"type":"string"}},"required":["object","id","workflow_id","name","emoji","disposition","sort_order","default_estimated_minutes","created_at","updated_at","version"],"additionalProperties":false},"StatusList":{"$id":"#/components/schemas/StatusList","type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Status"}}},"required":["object","data"],"additionalProperties":false},"Disposition":{"$id":"#/components/schemas/Disposition","type":"object","properties":{"object":{"type":"string","const":"disposition"},"key":{"$ref":"#/components/schemas/DispositionKey"},"label":{"type":"string","description":"Current tab label. Admin-editable — store the key, not this."},"color":{"type":"string","description":"Accent colour (hex)."}},"required":["object","key","label","color"],"additionalProperties":false},"DispositionList":{"$id":"#/components/schemas/DispositionList","type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{"$ref":"#/components/schemas/Disposition"}}},"required":["object","data"],"additionalProperties":false},"CreateTask":{"$id":"#/components/schemas/CreateTask","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200,"description":"1–200 characters (trimmed)."},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"url":{"anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}],"description":"Link attached to the task (`http` or `https`)."},"disposition":{"description":"Defaults to `not_started`.","$ref":"#/components/schemas/DispositionKey"},"workflow_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"One of your Workflows, or `null` for none. The task lands on that Workflow’s Status for its Disposition."},"status_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"One of your Statuses. Sets the task’s Workflow and Disposition to match."},"project_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"One of your projects, or `null`."},"due_date":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"deadline":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"on_hold_until":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"Wake time for a task in `on_hold` (Later). At that time it moves back to Today (`in_progress`)."},"is_urgent":{"type":"boolean"},"estimated_minutes":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}]}},"required":["title"],"additionalProperties":false},"UpdateTask":{"$id":"#/components/schemas/UpdateTask","type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200,"description":"1–200 characters (trimmed)."},"notes":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}]},"url":{"anyOf":[{"type":"string","maxLength":2048,"format":"uri"},{"type":"null"}],"description":"Link attached to the task (`http` or `https`)."},"disposition":{"description":"Changing the Disposition on its own clears the Status. Omit it when you send `status_id`.","$ref":"#/components/schemas/DispositionKey"},"workflow_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"One of your Workflows, or `null` for none. The task lands on that Workflow’s Status for its Disposition."},"status_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"One of your Statuses. Sets the task’s Workflow and Disposition to match."},"project_id":{"anyOf":[{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},{"type":"null"}],"description":"One of your projects, or `null`."},"due_date":{"anyOf":[{"type":"string","format":"date","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"},{"type":"null"}]},"deadline":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"on_hold_until":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"Wake time for a task in `on_hold` (Later). At that time it moves back to Today (`in_progress`)."},"is_urgent":{"type":"boolean"},"estimated_minutes":{"anyOf":[{"type":"integer","minimum":0,"maximum":100000},{"type":"null"}]},"archived":{"type":"boolean"}},"additionalProperties":false},"LaterTask":{"$id":"#/components/schemas/LaterTask","type":"object","properties":{"until":{"description":"When the task wakes back onto Today. `null` removes the wake time. Omit to keep the current wake time (none if the task was not already in Later).","anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]}},"additionalProperties":false},"Problem":{"$id":"#/components/schemas/Problem","type":"object","properties":{"type":{"type":"string","description":"Stable URI identifying the error, e.g. `https://developers.nyblit.app/errors/rate_limited`."},"title":{"type":"string"},"status":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"detail":{"type":"string"},"code":{"type":"string","enum":["invalid_request","invalid_token","insufficient_scope","plan_required","access_disabled","vault_account_unsupported","task_limit_reached","not_found","precondition_failed","rate_limited","api_disabled","internal_error"]},"request_id":{"type":"string"},"errors":{"description":"Field-level validation errors.","type":"array","items":{"type":"object","properties":{"field":{"type":"string"},"message":{"type":"string"}},"required":["field","message"],"additionalProperties":false}}},"required":["type","title","status","code","request_id"],"additionalProperties":false}},"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"nyb_pat_…","description":"Personal access token. Scopes: `tasks:read` — Read your tasks.; `tasks:write` — Create, update and delete your tasks.; `projects:read` — Read your projects.; `projects:write` — Create, update and delete your projects.; `workflows:read` — Read your Workflows and Statuses.; `workflows:write` — Create, update and delete your Workflows and Statuses.; `webhooks:manage` — Manage webhook subscriptions.."}}}}