Okatana External API v1¶
This page is the route-by-route endpoint reference. Start with the HTTP API guide for credential handling, pagination, error strategy, and client examples. A live, executable Scalar reference is available at /docs/api when it is enabled by the deployment.
Base path:
Authentication:
All credentials belong to one organization. A credential cannot access a resource from another organization even when it has * scope.
Scopes¶
| Scope | Operations |
|---|---|
* |
Every external API operation |
organization:read |
Read organization |
projects:read |
List/read projects |
projects:write |
Create, update, archive, and delete projects |
boards:read |
List boards |
boards:write |
Create, update, reorder, and delete boards |
tickets:read |
List/read tickets |
tickets:write |
Create/update/move/delete tickets |
comments:write |
Add ticket comments |
analytics:read |
Read project analytics |
documents:read |
List/read documents |
documents:write |
Create/update/publish/archive/delete documents and editor access |
document_comments:write |
Add document comments |
notifications:write |
Send organization notifications |
Errors¶
Common statuses:
401missing, invalid, expired, or revoked API credential403credential belongs to another organization or lacks scope404resource does not exist422validation, relationship, or WIP-limit failure429rate limit reached
Laravel JSON validation responses include a message and field errors.
Read organization¶
Scope: organization:read
List projects¶
Scope: projects:read
Create project¶
Scope: projects:write
The API creates the default Open, Hold, In-progress, Pull Request, and Deployed boards.
Read project¶
Scope: projects:read
Project members¶
Scope: projects:read
Returns explicit project users plus organization owners/admins that have implicit project access.
Project labels¶
Scope: projects:read
Use these identifiers when assigning labels to tickets.
Project tags¶
Scope: projects:read
Returns project tags that are currently used by at least one ticket, including ticket counts.
Update project¶
Scope: projects:write
Supported fields: name, description, and archived.
Delete project¶
Scope: projects:write. The operation is a soft delete.
List boards¶
Scope: boards:read
Create board¶
Scope: boards:write. Supports name, color, wip_limit, and is_done.
Update board¶
Scope: boards:write. Supports name, color, wip_limit, is_done, and is_hidden.
Reorder boards¶
Scope: boards:write. Send board_ids in the required order.
Delete board¶
Scope: boards:write. If the board contains tickets, pass move_to_board_id.
List tickets¶
Scope: tickets:read
Maximum per_page is 200.
Create ticket¶
Scope: tickets:write
Select a board using board_id or board_slug.
{
"board_slug": "open",
"title": "Design deployment runbook",
"description_html": "<p>Write the first version.</p>",
"priority": "high",
"due_at": "2026-09-01T09:00:00+08:00",
"assignee_ids": [],
"label_ids": []
}
Reorder tickets in a board¶
Scope: tickets:write. Send board_id and the ordered ticket_ids array.
Read ticket¶
Scope: tickets:read
Update ticket¶
Scope: tickets:write
Move ticket¶
Scope: tickets:write
position is optional. Without it, Okatana appends the ticket to the destination board.
Delete ticket¶
Scope: tickets:write
This is a soft delete.
Add comment¶
Scope: comments:write
The API credential is recorded as the audit actor. The comment keeps an API-author snapshot because it does not impersonate a browser user.
Project analytics¶
Scope: analytics:read
Response includes total, done, open, overdue, completion percentage, and counts by board.
Send organization notification¶
Scope: notifications:write
{
"user_ids": ["01..."],
"title": "Deployment window changed",
"body": "Production deployment starts at 18:00.",
"url": "/app/projects/01..."
}
Recipients must belong to the credential organization. url, when supplied, must be an internal /app path.
Documents¶
Document API credentials are organization-scoped. A document may be organization-wide or linked to a project in the same organization.
List documents¶
GET /api/v1/organizations/{organization}/documents?q=runbook&project_id=01...&status=published&tags=runbook,production&per_page=50
Scope: documents:read
Create document¶
Scope: documents:write
{
"project_id": "01...",
"title": "Production runbook",
"caption": "How to deploy the production service",
"content_html": "<h2>Deployment</h2><p>...</p>",
"status": "draft",
"editor_ids": ["01..."],
"tag_names": ["runbook", "production"]
}
project_id is optional. status is draft or published. Every editor must have access to the selected organization/project scope. tag_names accepts up to 20 organization-scoped article tags; tag names are matched case-insensitively and reused across documents in the same organization.
Read document¶
Scope: documents:read
Update document¶
Scope: documents:write
The update can change project_id, title, caption, content_html, status, archived, editor_ids, and tag_names. Moving a document to another organization is not supported.
Delete document¶
Scope: documents:write. This is a soft delete.
Add document comment¶
Scope: document_comments:write
Document webhook events¶
Document integrations can subscribe to these existing organization webhook events: