Full OpenAPI contract reference
This document is generated from resources/openapi.yaml. It defines the detailed API contract.
OpenAPI version: 3.1.0
API title: Okatana External API
API version: 1.0.0
Server base in source: /api/v1
The source server is relative. The SDK combines it with the deployment URL that the caller must configure.
1. GET /organizations/{organization}
Summary: Read organization
Requires organization:read.
Parameters
| Name |
In |
Required |
Type |
Constraints |
organization |
path |
yes |
string |
— |
Responses
| Status |
Description |
200 |
Organization |
401 |
Invalid credential |
403 |
Wrong organization or scope |
2. GET /organizations/{organization}/projects
Summary: List projects
Requires projects:read.
Parameters
| Name |
In |
Required |
Type |
Constraints |
organization |
path |
yes |
string |
— |
Responses
| Status |
Description |
200 |
Project list |
3. POST /organizations/{organization}/projects
Summary: Create project
Requires projects:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
organization |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
name |
yes |
string |
max length 180 |
key |
yes |
string |
max length 12 |
description |
no |
string / null |
max length 5000 |
Responses
| Status |
Description |
201 |
Project created |
422 |
Validation failure |
4. GET /projects/{project}
Summary: Read project
Requires projects:read.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
Responses
| Status |
Description |
200 |
Project |
5. PATCH /projects/{project}
Summary: Update project
Requires projects:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
name |
no |
string |
max length 180 |
description |
no |
string / null |
max length 5000 |
archived |
no |
boolean |
— |
Responses
| Status |
Description |
200 |
Updated project |
422 |
Validation failure |
6. DELETE /projects/{project}
Summary: Soft-delete project
Requires projects:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
Responses
| Status |
Description |
204 |
Deleted |
7. GET /projects/{project}/members
Summary: List project members
Requires projects:read. Includes explicit project members and organization owners/admins.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
Responses
| Status |
Description |
200 |
Member list |
8. GET /projects/{project}/labels
Summary: List project labels
Requires projects:read.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
Responses
| Status |
Description |
200 |
Label list |
9. GET /projects/{project}/boards
Summary: List project boards
Requires boards:read.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
Responses
| Status |
Description |
200 |
Board list |
10. POST /projects/{project}/boards
Summary: Create project board
Requires boards:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
name |
yes |
string |
max length 120 |
color |
no |
string / null |
max length 32 |
wip_limit |
no |
integer / null |
min 1 |
is_done |
no |
boolean |
— |
Responses
| Status |
Description |
201 |
Board created |
422 |
Validation failure |
11. PUT /projects/{project}/boards/reorder
Summary: Reorder project boards
Requires boards:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
board_ids |
yes |
array<string> |
— |
Responses
| Status |
Description |
200 |
Reordered board list |
422 |
Invalid board list |
12. PATCH /boards/{board}
Summary: Update board
Requires boards:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
board |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
name |
no |
string |
max length 120 |
color |
no |
string / null |
max length 32 |
wip_limit |
no |
integer / null |
min 1 |
is_done |
no |
boolean |
— |
is_hidden |
no |
boolean |
— |
Responses
| Status |
Description |
200 |
Updated board |
13. DELETE /boards/{board}
Summary: Soft-delete board
Requires boards:write. If tickets exist, move_to_board_id is required.
Parameters
| Name |
In |
Required |
Type |
Constraints |
board |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
move_to_board_id |
no |
string |
— |
Responses
| Status |
Description |
204 |
Deleted |
422 |
Invalid target or WIP limit exceeded |
14. GET /projects/{project}/tickets
Summary: List project tickets
Requires tickets:read.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
board_id |
query |
no |
string |
— |
q |
query |
no |
string |
— |
per_page |
query |
no |
integer |
min 1; max 200; default 50 |
Responses
| Status |
Description |
200 |
Paginated ticket list |
15. POST /projects/{project}/tickets
Summary: Create ticket
Requires tickets:write. Choose board_id or board_slug. The API credential is recorded as the ticket creator and its name will appear in the UI instead of the user who provisioned it.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
board_id |
no |
string |
— |
board_slug |
no |
string |
— |
title |
yes |
string |
max length 500 |
description_html |
no |
string / null |
max length 200000 |
priority |
no |
string |
one of: lowest, low, normal, high, highest, critical |
due_at |
no |
string / null |
format date-time |
assignee_ids |
no |
array<string> |
— |
label_ids |
no |
array<string> |
— |
Responses
| Status |
Description |
201 |
Ticket created |
422 |
Validation |
16. PUT /projects/{project}/tickets/reorder
Summary: Reorder tickets inside a board
Requires tickets:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
board_id |
yes |
string |
— |
ticket_ids |
yes |
array<string> |
— |
Responses
| Status |
Description |
204 |
Reordered |
422 |
Invalid ticket list |
17. GET /projects/{project}/analytics
Summary: Read project analytics
Requires analytics:read.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
Responses
| Status |
Description |
200 |
Project analytics |
18. GET /tickets/{ticket}
Summary: Read ticket
Requires tickets:read.
Parameters
| Name |
In |
Required |
Type |
Constraints |
ticket |
path |
yes |
string |
— |
Responses
| Status |
Description |
200 |
Ticket detail |
19. PATCH /tickets/{ticket}
Summary: Update ticket
Requires tickets:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
ticket |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
title |
no |
string |
max length 500 |
description_html |
no |
string / null |
max length 200000 |
priority |
no |
string |
one of: lowest, low, normal, high, highest, critical |
due_at |
no |
string / null |
format date-time |
assignee_ids |
no |
array<string> |
— |
label_ids |
no |
array<string> |
— |
archived |
no |
boolean |
— |
Responses
| Status |
Description |
200 |
Updated ticket |
20. DELETE /tickets/{ticket}
Summary: Soft-delete ticket
Requires tickets:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
ticket |
path |
yes |
string |
— |
Responses
| Status |
Description |
204 |
Deleted |
21. POST /tickets/{ticket}/move
Summary: Move a ticket to another board
Requires tickets:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
ticket |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
board_id |
yes |
string |
— |
position |
no |
integer |
min 0 |
Responses
| Status |
Description |
200 |
Moved ticket |
422 |
Invalid board or WIP limit reached |
Summary: Create ticket comment
Requires comments:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
ticket |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
body_html |
yes |
string |
max length 200000 |
Responses
| Status |
Description |
201 |
Comment created |
23. GET /organizations/{organization}/documents
Summary: List organization documents
Requires documents:read. Supports optional project, status, search, tag, and pagination filters.
Parameters
| Name |
In |
Required |
Type |
Constraints |
organization |
path |
yes |
string |
— |
project_id |
query |
no |
string |
— |
status |
query |
no |
string |
one of: draft, published |
q |
query |
no |
string |
— |
tags |
query |
no |
string |
— |
per_page |
query |
no |
integer |
min 1; max 200; default 50 |
Responses
| Status |
Description |
200 |
Paginated document list |
24. POST /organizations/{organization}/documents
Summary: Create document
Requires documents:write. The API credential is recorded as the document author and its name will appear in the UI instead of the user who provisioned it.
Parameters
| Name |
In |
Required |
Type |
Constraints |
organization |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
project_id |
no |
string / null |
— |
title |
yes |
string |
max length 500 |
caption |
no |
string / null |
max length 2000 |
content_html |
no |
string / null |
max length 1000000 |
status |
no |
string |
one of: draft, published; default draft |
editor_ids |
no |
array<string> |
max items 100 |
tag_names |
no |
array<string> |
max items 20 |
Responses
| Status |
Description |
201 |
Document created |
422 |
Validation failure |
25. GET /documents/{document}
Summary: Read document
Requires documents:read.
Parameters
| Name |
In |
Required |
Type |
Constraints |
document |
path |
yes |
string |
— |
Responses
| Status |
Description |
200 |
Document detail |
26. PATCH /documents/{document}
Summary: Update document
Requires documents:write. Can update publication state, archive state, project scope, content, and editor membership.
Parameters
| Name |
In |
Required |
Type |
Constraints |
document |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
project_id |
no |
string / null |
— |
title |
no |
string |
max length 500 |
caption |
no |
string / null |
max length 2000 |
content_html |
no |
string / null |
max length 1000000 |
status |
no |
string |
one of: draft, published |
archived |
no |
boolean |
— |
editor_ids |
no |
array<string> |
max items 100 |
tag_names |
no |
array<string> |
max items 20 |
Responses
| Status |
Description |
200 |
Document updated |
422 |
Validation failure |
27. DELETE /documents/{document}
Summary: Soft-delete document
Requires documents:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
document |
path |
yes |
string |
— |
Responses
| Status |
Description |
204 |
Document soft-deleted |
Summary: Create document comment
Requires document_comments:write.
Parameters
| Name |
In |
Required |
Type |
Constraints |
document |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
body_html |
yes |
string |
max length 200000 |
Responses
| Status |
Description |
201 |
Comment created |
422 |
Validation failure |
29. POST /organizations/{organization}/notifications
Summary: Send organization notifications
Requires notifications:write. Recipients must belong to the credential organization.
Parameters
| Name |
In |
Required |
Type |
Constraints |
organization |
path |
yes |
string |
— |
JSON request body
| Field |
Required |
Type |
Constraints |
user_ids |
yes |
array<string> |
min items 1; max items 100 |
title |
yes |
string |
max length 180 |
body |
yes |
string |
max length 2000 |
url |
no |
string / null |
— |
Responses
| Status |
Description |
201 |
Notifications queued/sent |
422 |
Invalid recipient or URL |
Summary: List used project tags
Requires projects:read. Returns tags currently assigned to at least one ticket.
Parameters
| Name |
In |
Required |
Type |
Constraints |
project |
path |
yes |
string |
— |
Responses
| Status |
Description |
200 |
Used project tags with ticket counts |
Component schemas
These are the reusable schemas defined by the supplied OpenAPI document.
Error
| Field |
Required |
Type |
Constraints |
message |
no |
string |
— |
Project
| Field |
Required |
Type |
Constraints |
id |
no |
string |
— |
organization_id |
no |
string |
— |
name |
no |
string |
— |
key |
no |
string |
— |
description |
no |
string / null |
— |
archived_at |
no |
string / null |
format date-time |
Board
| Field |
Required |
Type |
Constraints |
id |
no |
string |
— |
project_id |
no |
string |
— |
name |
no |
string |
— |
slug |
no |
string |
— |
position |
no |
integer |
— |
color |
no |
string / null |
— |
wip_limit |
no |
integer / null |
— |
is_done |
no |
boolean |
— |
is_hidden |
no |
boolean |
— |
Ticket
| Field |
Required |
Type |
Constraints |
id |
no |
string |
— |
project_id |
no |
string |
— |
board_id |
no |
string |
— |
number |
no |
integer |
— |
title |
no |
string |
— |
description_html |
no |
string / null |
— |
priority |
no |
string |
one of: lowest, low, normal, high, highest, critical |
position |
no |
integer |
— |
due_at |
no |
string / null |
format date-time |
started_at |
no |
string / null |
format date-time |
completed_at |
no |
string / null |
format date-time |
api_credential_id |
no |
string / null |
— |
archived_at |
no |
string / null |
format date-time |
Document
| Field |
Required |
Type |
Constraints |
id |
no |
string |
— |
organization_id |
no |
string |
— |
project_id |
no |
string / null |
— |
author_id |
no |
string / null |
— |
title |
no |
string |
— |
caption |
no |
string / null |
— |
content_html |
no |
string / null |
— |
status |
no |
string |
one of: draft, published |
api_credential_id |
no |
string / null |
— |
published_at |
no |
string / null |
format date-time |
archived_at |
no |
string / null |
format date-time |
tags |
no |
array<object> |
— |
created_at |
no |
string |
format date-time |
updated_at |
no |
string |
format date-time |