
Overview
The Kodexa Platform API provides programmatic access to all platform capabilities including document processing, AI assistants, knowledge management, and workflow orchestration. This REST API is the foundation that powers the Kodexa Python SDK and enables custom integrations.Base URL
All API endpoints are relative to your Kodexa Platform instance:Authentication
Getting Your API Key
- Log in to the Kodexa Platform
- Navigate to your profile settings
- Go to the API Keys section
- Generate a new API key or copy an existing one
Using Your API Key
Include your API key in thex-api-key header with every request:
OpenAPI Specification
The machine-readable specification for this API is served by your instance atGET /v3/api-docs, using the same authentication as any other endpoint. Use it to generate typed clients; the endpoint reference on this site is generated from it and has been refreshed to the 2026.10 contract.
Request and Response Schemas
Each resource is described by three schemas rather than one:<Entity>- the response shape.requiredlists the fields the server always returns, andnullablemarks the ones that can come back asnull.<Entity>CreateRequest- the body accepted byPOST. Server-generated fields (id,uuid,createdOn,updatedOn,changeSequence) are removed, andrequirednames only what the server insists on -TaskCreateRequest, for example, requires justprojectId.<Entity>UpdateRequest- the body accepted byPUT. Nothing is required,changeSequenceis kept for optimistic locking (see Update Semantics), and the ownership fields an update never writes are omitted.
allOf plus nullable: true, so a generated type carries both the target schema and the fact that the field can be null. Fields that hold free-form JSON - workspace storage, prompt metadata, platform-event payloads - are described as JSON values (object, array, or scalar) rather than base64-encoded strings.
Named Enumerations
Every enumeration is emitted as a named component and referenced by$ref: TaskStatusType, ExecutionStatus, ExecutionStatusMessageType, SortDirection, AuditAction, ChatMessageRole, WebLlmModelSize, and the rest. Generators therefore produce one stable type per enumeration instead of inventing names such as Type1 or StatusType3.
TaskStatusType is OPEN | IN_PROGRESS | DONE | BLOCKED | PENDING. The older project-scoped task status type (TODO / IN_PROGRESS / DONE) is retired; a project template that still declares a task status with statusType: TODO is accepted and stored as OPEN.
Operation IDs
Operation IDs are unique, so no operation is dropped from a generated client by a name collision:PUT /api/tasks/{id}/statusissetTaskStatus, which leavesupdateTaskStatustoPUT /api/task-statuses/{id}.GET /api/task-groups/{id}/historyislistHistoryForTaskGroup, which leaveslistTaskGroupHistorytoGET /api/task-group-history.cancelExecutionis defined once, onPUT /api/executions/{executionId}/cancel.
<Entity>CreateRequest and update calls take <Entity>UpdateRequest instead of the response type; response fields that were all optional are now typed as required where the server always sends them; enum types take their component names; JSON-blob fields become objects instead of strings; and the two operations above are renamed (updateTaskStatus and listTaskGroupHistory now refer to the task-status and task-group-history endpoints). Hand-written HTTP integrations need no change.
API Conventions
Resource Patterns
The Kodexa API follows RESTful conventions:- List resources:
GET /api/{resource}- Returns paginated list - Get single resource:
GET /api/{resource}/{id}- Returns specific resource - Create resource:
POST /api/{resource}- Creates new resource - Update resource:
PUT /api/{resource}/{id}- Updates existing resource - Delete resource:
DELETE /api/{resource}/{id}- Deletes resource
Update Semantics
Create and update requests persist exactly the fields you send:- Explicit values always persist - sending
falseor0writesfalseor0, including on fields that have a server-side default - Omitted fields stay unchanged - leave a field out of the body to leave its stored value untouched, so sparse updates are reliable
nullclears - sendingnullclears a nullable field- Round-trips are safe - echoing back the body of a
GETas aPUTis a no-op
id, uuid, createdOn, createdByUserId, organizationId, projectId, and soft-delete state - are ignored if included in an update body.
changeSequence is never written directly; it serves only as the optimistic-locking token. Locking is enforced whenever the body carries a non-null changeSequence - including 0 on a resource that has never been updated - and a stale value returns 409 Conflict with the current sequence so you can re-fetch and retry. Omit the field (or send null) to opt out of locking.
Malformed writes are rejected up front: a body that is not a JSON object, or that repeats the same field under case-variant keys (for example name and Name), returns 400 Bad Request. Uniqueness violations return 409 Conflict, and setting a non-nullable field to null or referencing a record that doesn’t exist returns 400 Bad Request.
Changed in 2026.9: previously, a field set to false or 0 in an update body could be silently dropped - the request returned 200 OK but the value never changed - and on create a server-side default could overwrite an explicit false or 0. Explicit values now always persist; to leave a field unchanged, omit it from the body.
Pagination
List endpoints support pagination via query parameters:page(integer, optional) - Zero-indexed page number (default: 0)pageSize(integer, optional) - Items per page (default: 10, max: 100)
Filtering & Sorting
Most list endpoints supportfilter, query, and sort query parameters to narrow and order results.
-
filter- Filter results using the SpringFilter-style syntax. Common operators include==,!=,=like=,=in=,and, andor. Strings must be single-quoted. -
query- Free-text search across searchable fields (typicallynameanddescription). -
sort- Sort results withfield:directionpairs. Separate multiple sorts with;. Direction defaults toasc.
Error Responses
The API uses standard HTTP status codes:200 OK- Request succeeded201 Created- Resource created successfully400 Bad Request- Invalid request parameters401 Unauthorized- Missing or invalid API key403 Forbidden- Authenticated but not authorized404 Not Found- Resource doesn’t exist500 Internal Server Error- Server error
Common Resources
The API is organized around these core resource types:- Projects - Container for tasks, assistants, and resources
- Tasks - Document processing and workflow tasks
- Assistants - AI assistant configurations and definitions
- Documents - Document families and content
- Stores - Document, data, and model storage
- Knowledge - Knowledge sets, items, and features
- Executions - Pipeline and process execution tracking
Rate Limiting
API requests are subject to rate limiting to ensure platform stability:- Rate limit: 100 requests per minute per API key
- Burst limit: 20 requests per second
429 Too Many Requests response.
Using the Python SDK
For Python developers, we recommend using the Kodexa Python SDK which provides a high-level interface to this API:API Endpoints
Browse the complete API endpoint documentation in the Endpoints section below. Each endpoint includes:- HTTP methods and paths
- Request/response schemas
- Required and optional parameters
- Example requests and responses
- Authentication requirements
