API Documentation

Automate OKiDO from scripts, integrations, and AI agents.

Overview

The OKiDO API is a JSON REST API. Everything you can do in the app — projects, tasks, SOP runs, documents, templates — is available programmatically. All requests use the base URL:

https://app.okido.io/api

Request and response bodies are JSON (Content-Type: application/json).

Authentication

Personal access tokens

The recommended way to call the API is with a personal access token (PAT). Create one in the app under Settings → Security → Personal access tokens. Tokens start with dit_pat_, act with your permissions in every organization you belong to, and can be set to expire after 7 days, 1 month, 3 months, 6 months, 1 year — or never. The token is shown once at creation; store it securely.

Send it in the Authorization header on every request:

curl https://app.okido.io/api/projects \
  -H "Authorization: Bearer dit_pat_..." \
  -H "X-Org-Id: <your-org-id>"

For safety, a personal access token cannot manage tokens, change your password, or manage sessions — those actions require an interactive session and return 403 SESSION_AUTH_REQUIRED.

Organization API tokens

Organization-scoped API tokens (prefix dit_, created by org owners/admins under organization settings) authenticate the MCP endpoint only. They carry granular scopes and are bound to a single organization — use them when you want a credential that is not tied to a person.

Selecting an organization

Your account can belong to several organizations, so every REST request must say which organization it targets via the X-Org-Id header. You must be an active member of the organization; otherwise the API responds 403.

X-Org-Id: org-id
# or several at once (reads only):
X-Org-Id: org-id-1,org-id-2

When multiple IDs are provided, list endpoints return results across all of them, and write operations target the first ID.

Errors

Errors share a single shape:

{
  "message": "Human-readable description",
  "code": "MACHINE_READABLE_CODE"
}
StatusCodeMeaning
400VALIDATION_ERRORMissing or invalid request fields
400ORG_ID_REQUIREDThe X-Org-Id header is missing
401UNAUTHORIZEDMissing, invalid, or expired token
403FORBIDDENNot a member of the organization, or insufficient role
403SESSION_AUTH_REQUIREDAction not allowed with a personal access token
404NOT_FOUNDResource does not exist (or belongs to another organization)
429RATE_LIMITEDToo many requests — retry later
500INTERNAL_ERRORSomething went wrong on our side

Resources

The tables below list the most-used endpoints per resource. All of them require the Authorization and X-Org-Id headers described above. List responses wrap results in a named array, e.g. { "projects": [...] }.

Projects

MethodEndpointDescription
GET/projectsList projects
POST/projectsCreate a project
GET/projects/:idGet a project
PATCH/projects/:idUpdate a project
DELETE/projects/:idDelete a project
GET/projects/:id/tasksList tasks in a project
GET/projects/:id/stagesList workflow stages
POST/projects/:id/membersAdd a member (private projects)

Tasks

MethodEndpointDescription
POST/tasksCreate a task
GET/tasks/search?q=...Search tasks in the organization
GET/tasks/:idGet a task
PATCH/tasks/:idUpdate a task (status, assignee, due date, ...)
DELETE/tasks/:idDelete a task
POST/tasks/:id/commentsAdd a comment
POST/tasks/:id/subtasksCreate a subtask
POST/tasks/:id/time-entriesLog time on a task

SOP runs

MethodEndpointDescription
GET/runsList runs (filter with ?status=... or ?templateId=...)
POST/runsStart a run from a template
GET/runs/:idGet a run with its steps
PATCH/runs/:idUpdate a run
DELETE/runs/:idDelete a run
POST/runs/:id/steps/:stepId/completeComplete a step
PATCH/runs/:id/steps/:stepIdUpdate a step (status, assignee)
POST/runs/:id/variable-valuesSet a run variable value

Documents

MethodEndpointDescription
GET/documentsList documents (filter with ?processId=...)
POST/documentsCreate a document
GET/documents/:idGet a document
PATCH/documents/:idUpdate a document
DELETE/documents/:idDelete a document
POST/documents/:id/publishPublish (new version)
GET/documents/:id/versionsList version history

SOP templates

MethodEndpointDescription
GET/sop-templatesList templates
POST/sop-templatesCreate a template
GET/sop-templates/:idGet a template
PATCH/sop-templates/:idUpdate a template
DELETE/sop-templates/:idDelete a template
POST/sop-templates/:id/stepsAdd a step
POST/sop-templates/:id/publishPublish a version snapshot

MCP endpoint for AI agents

OKiDO exposes a Model Context Protocol endpoint so AI clients such as Claude can work with your projects, tasks, runs, and documents through tools instead of raw HTTP:

https://app.okido.io/mcp

Authenticate with a personal access token, an organization API token, or OAuth. With a personal access token the AI client can act across all your organizations; an organization token limits it to one organization with the scopes you selected.

Quickstart

# 1. Create a personal access token in Settings → Security
# 2. List your projects
curl https://app.okido.io/api/projects \
  -H "Authorization: Bearer dit_pat_..." \
  -H "X-Org-Id: <your-org-id>"

# 3. Create a task
curl -X POST https://app.okido.io/api/tasks \
  -H "Authorization: Bearer dit_pat_..." \
  -H "X-Org-Id: <your-org-id>" \
  -H "Content-Type: application/json" \
  -d '{"title": "My first API task", "projectId": "<project-id>"}'

Questions or missing endpoints? Contact us — we're expanding this reference continuously.