REST API

Available

Every endpoint group exposed by the Orkovia API, with conventions.

Base URL and versioning

All endpoints are versioned under /api/v1. Paths in the tables below are relative to that prefix — for a local install, http://localhost:8080/api/v1.

Authentication

Every endpoint requires an Authorization: Bearer <token> header, except login, the auth config check, the health check and the OpenAPI/Swagger endpoints. A token can come from POST /auth/login (username and password) or from your OIDC provider (Keycloak, Auth0, Okta).

Token claimMeaning
subThe calling user or service; recorded on audit and history events
tenantIdTenant scope (a UUID). Data from another tenant is reported as 404, not 403
rolesOne or more of ADMIN, PROCESS_OWNER, TASK_USER

As a rule, reads are open to any authenticated caller in the tenant, while deploying, operating on instances, recovering incidents and other design-time or operational writes need ADMIN or PROCESS_OWNER. User, group, authorization and audit-log endpoints are ADMIN only.

Response and error envelope

{
  "success": true,
  "message": "Success",
  "timestamp": "2026-07-25T10:15:30Z",
  "data": { }
}
{
  "success": false,
  "errorCode": "RESOURCE_NOT_FOUND",
  "message": "process instance not found: abc-123",
  "timestamp": "2026-07-25T10:15:30Z",
  "errors": [],
  "correlationId": "9f2c..."
}
errorCodeHTTP status
VALIDATION_ERROR, BAD_REQUEST400
UNAUTHORIZED401
FORBIDDEN403
RESOURCE_NOT_FOUND404
CONFLICT409
BUSINESS_ERROR422
INTERNAL_ERROR500

Every response echoes an X-Correlation-Id header. Send your own value in a request header of the same name and it is returned unchanged; otherwise the server generates one.

Authentication and access

EndpointPurpose
GET /auth/configWhich sign-in methods are enabled (public)
POST /auth/loginExchange a username and password for a bearer token (public)
GET, POST /auth/usersList or create users in your tenant
GET, POST /auth/groupsList or create groups
GET, POST /auth/groups/{id}/membersList or add group members
DELETE /auth/groups/{id}/members/{userId}Remove a group member
GET, POST /auth/authorizationsList or grant resource-level permissions
DELETE /auth/authorizations/{id}Revoke a permission
GET, POST /invitationsList outstanding invitations or invite someone to an organization
POST /invitations/acceptAccept an invitation
DELETE /invitations/{id}Revoke an invitation

Deployments

EndpointPurpose
POST /deploymentsDeploy a process — BPMN 2.0 XML (application/xml) or a JSON graph (application/json)
GET /deploymentsList deployments; ?key= returns one process's version history
GET /deployments/{id}Fetch a deployment, including its BPMN XML
DELETE /deployments/{id}Undeploy a version; ?includeFinishedInstances=true also deletes its finished instances
POST /deployments/{id}/suspend, /resumeBlock or allow new instance starts and timer fires for a definition
POST /deployments/{id}/simulateRun in-memory simulated instances and report branch coverage and timings
GET /deployments/{id}/nodesNode ids and types, for building a migration mapping

Process instances

EndpointPurpose
POST /process-instancesStart an instance of a deployment, with optional variables
GET /process-instancesList instances, newest first
GET /process-instances/{id}Read one instance
DELETE /process-instances/{id}Permanently delete a finished instance and its history
POST /process-instances/{id}/cancelTerminate an instance and any call-activity children
POST /process-instances/{id}/suspend, /resumePause and resume a waiting instance
POST /process-instances/{id}/move-tokenMove a waiting token from one node to another
POST /process-instances/migrateMigrate instances to another version of the same process
GET /process-instances/{id}/historyExecution history and audit trail, oldest first
GET /process-instances/{id}/history/{eventSeq}/snapshotVariables and active node as of one history event
GET /process-instances/{id}/tokensTokens currently parked at a join, job or task
GET /process-instances/{id}/event-subscriptionsPending timer and message subscriptions

Variables

EndpointPurpose
GET, PUT /process-instances/{id}/variablesRead or edit an instance's variables, with optimistic locking via expectedVersion
GET /process-instances/{id}/node-variablesVariables attached to specific nodes of an instance
PUT /process-instances/{id}/nodes/{nodeId}/variablesAttach variables to one node
GET /scopes/{scopeId}/variablesEvery variable visible from a scope, with the scope it was found in
GET, PUT, DELETE /scopes/{scopeId}/variables/{name}Read, set or remove one variable in a scope (audited)

Messages, signals and conditional starts

EndpointPurpose
POST /messagesCorrelate a message by name and correlation key to waiting instances
POST /signalsBroadcast a signal to every matching subscription and signal start event
POST /conditional-start-events/evaluateRe-check conditional start events against supplied variables

All three respond 202 Accepted with a count of resumed or started instances. Zero matches is not an error.

Batch operations

EndpointPurpose
POST /batch-operationsStart a CANCEL, RETRY, RESOLVE_INCIDENT, MIGRATE or SET_VARIABLES batch over many targets
GET /batch-operations/{id}Batch progress and per-item outcome

Jobs (workers)

EndpointPurpose
POST /jobs/activationPoll for jobs of a type and lock them; supports long polling
GET /jobs/streamServer-sent event stream that pushes jobs to a worker
POST /jobs/{id}/heartbeatExtend a job lock
POST /jobs/{id}/completeReport success and resume the instance
POST /jobs/{id}/failReport a technical failure; retries, then dead-letters into an incident
POST /jobs/{id}/errorThrow a business error for an error boundary event to catch
GET /jobsList jobs, newest first
POST /jobs/{id}/retriesReset a job's retry count and make it claimable again
GET, POST /jobs/{id}/retryRead a job's retry state or replace its retry policy
POST /jobs/{id}/retry-nowSkip the remaining backoff of a waiting retry
POST /jobs/{id}/retry/cancelCancel a pending retry and raise an incident
GET /jobs/{id}/retry/historyRecorded retry attempts for a job

Human tasks

EndpointPurpose
GET /tasksList tasks; filter by ?candidateGroup= and ?assignee=
POST /tasks/{id}/claim, /unclaimClaim a task or release it
POST /tasks/{id}/assignAssign a task to a user
POST /tasks/{id}/delegateDelegate a claimed task to another user
POST /tasks/{id}/completeComplete a task with variables and resume the instance
GET, POST /tasks/{id}/commentsRead or add to a task's comment thread
GET /tasks/{id}/formThe task's linked form schema
GET /tasks/{id}/form-definitionThe task's linked Form Designer form
GET, POST /task-filtersList or save task list filters
DELETE /task-filters/{id}Delete a saved filter

Incidents

EndpointPurpose
GET /incidentsList incidents
POST /incidents/{id}/retryRe-run the failed node
POST /incidents/{id}/skip-nodeContinue past the failed node without running it
POST /incidents/{id}/restart-from-nodeResume from a chosen node, keeping variables
POST /incidents/{id}/rollbackRestore variables to a history event, then retry
POST /incidents/{id}/edit-variables-and-retryPatch variables and retry in one call

Decisions (DMN) and FEEL

EndpointPurpose
GET, POST /decisionsList decisions or deploy a decision table (JSON)
POST /decisions/importImport a DMN XML file
GET /decisions/{id}Fetch a decision
GET /decisions/{id}/xmlExport a decision as DMN XML
POST /decisions/{id}/evaluateEvaluate a decision against variables
POST /decisions/{id}/evaluate-with-traceEvaluate and return which rules matched
GET /decision-modelsList imported DMN models
GET /decision-models/{id}A model's decisions, decision services and required inputs
GET /decision-models/{id}/xmlThe model's DMN XML
POST /decision-models/{id}/decisions/{decisionId}/evaluateEvaluate one decision in a model, including its required decisions
POST /decision-models/{id}/services/{serviceId}/evaluateEvaluate a decision service
POST /feel/evaluateEvaluate a FEEL expression against a supplied context
GET /feel/functionsList the FEEL built-in functions

Forms

EndpointPurpose
GET, POST /form-definitionsList Form Designer forms or create a draft
GET, PUT, DELETE /form-definitions/{id}Fetch, edit or delete a form (edit and delete while DRAFT)
POST /form-definitions/{id}/validate, /return-to-draft, /publish, /deploy, /retireLifecycle transitions: DRAFT → VALIDATED → PUBLISHED → DEPLOYED → RETIRED
POST /form-definitions/{id}/playgroundRun a form against mock data
GET /form-definitions/{id}/versionsChange history
GET /form-definitions/{id}/versions/diffComponent diff between two versions (?from=&to=)
POST /form-definitions/{id}/versions/{version}/restoreRestore a version as a new draft
GET /form-definitions/{id}/lineageEvery form restored from, or into, this one
GET /form-definitions/{id}/auditGovernance audit trail
GET /form-definitions/{id}/localesLocales that have translations
PUT, DELETE /form-definitions/{id}/locales/{locale}Save or remove a locale's translated labels
GET /form-definitions/{id}/locales/{locale}/resolvedLabels resolved for a locale, with fallback applied
GET, POST /formsList or deploy a simple form schema (legacy)
GET, PUT, DELETE /forms/{id}Fetch a form, publish an edit as a new version, or remove a version (legacy)
POST /forms/{id}/migrate-to-v1Import a legacy form as a new Form Designer draft

Connectors and connections

EndpointPurpose
GET /connectorsConnector types registered in this installation
GET, POST /connectionsList or create connections
GET, PUT, DELETE /connections/{id}Fetch, update or delete a connection
POST /connections/{id}/enable, /disableSwitch a connection on or off
POST /connections/{id}/testCheck that a connection is completely configured

Modeling and collaboration

EndpointPurpose
GET, POST /projectsList or create projects
GET, PATCH, DELETE /projects/{id}Fetch, update or delete a project
GET, POST /projects/{id}/membersList or add project members
DELETE /projects/{id}/members/{userId}Remove a project member
GET, POST /projects/{id}/foldersList or create folders
GET, POST /modelsList or create models
GET, DELETE /models/{id}Fetch or delete a model
PUT /models/{id}/contentSave model content as a new revision
GET /models/{id}/revisionsRevision history
POST /models/{id}/restoreRestore an earlier revision
GET, POST, DELETE /models/{modelId}/lockRead, acquire or release a model's editing lock
POST /models/{modelId}/lock/renew, /takeoverKeep a lock alive or take it over
GET, POST /draftsList or create your own drafts; filter by ?kind=
GET, PUT, DELETE /drafts/{id}Fetch, save or delete a draft
POST /drafts/{id}/promoteDeploy a draft as a process, decision or form
GET, POST /templatesList or create process templates
GET, PUT, DELETE /templates/{id}Fetch, update or delete a template

Testing and analysis

EndpointPurpose
POST /play/sessionsStart a Play session from BPMN XML, without deploying
POST /play/sessions/{id}/stepAdvance one node; optionally choose a gateway branch or set variables
GET /play/sessions/{id}Read a session's current state
POST /analysis/variablesStatic variable analysis and warnings for BPMN XML

Insights, audit and administration

EndpointPurpose
GET /insightsProcess duration, completion rate, job reliability and task-age metrics
GET /insights/reportCompletion rate or duration, filtered by process and date range and grouped by a variable
GET /audit-eventsPaged, filterable log of every state-changing API call
POST /admin/projections/instance-summary/rebuildRebuild the instance summary projection

OpenAPI and Swagger UI

Each installation serves its own machine-readable spec and interactive explorer. These two paths sit at the server root, not under /api/v1, and need no token.

PathPurpose
GET /v3/api-docsOpenAPI 3 specification as JSON
GET /swagger-ui.htmlInteractive Swagger UI
This page lists what each endpoint is for. For exact request bodies, response schemas and role requirements, use the Swagger UI of your installed Orkovia release.