Introduction

Headless work management infrastructure. Model tasks, workflows, dependencies and assignments for any product — without building it yourself.

The Universal Work Engine is a headless work management API. It provides the building blocks — work items,
workflows, assignments, relations, and custom fields — that any product can use to model structured work.

**Base URL:** All endpoints are prefixed with `/api/v1/`.

**Authentication:** All endpoints except `/auth/register` and `/auth/login` require a Bearer token.
Obtain a token by registering or logging in, then pass it as `Authorization: Bearer {token}`.

**Multi-tenancy:** Every request is automatically scoped to your tenant via your auth token.
You never pass a `tenant_id` — it is resolved from the token.

**Pagination:** List endpoints accept `?page=1&per_page=25`. Responses include a `meta.pagination` object.

**Filtering & sorting:** List endpoints accept `?filter[field]=value&sort=-created_at`.
Prefix a sort field with `-` for descending order.

**Envelope format:** All responses use `{ "data": {...} }` for single resources and
`{ "data": [...], "meta": { "pagination": {...} } }` for collections.

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_API_TOKEN}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

Obtain a token via POST /api/v1/auth/register or POST /api/v1/auth/login. Pass it as a Bearer token: Authorization: Bearer {token}.

Authentication

Register, log in, and log out. Tokens are scoped to a tenant and used as Bearer auth on all other endpoints.

Register

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/auth/register

Create a new account and tenant. Returns an API token scoped to the new tenant.

Headers

Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/auth/register" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"tenant_name\": \"b\",
    \"name\": \"n\",
    \"email\": \"ashly64@example.com\",
    \"password\": \"pBNvYg\"
}"
Example response:
{
    "token": "1|abc123...",
    "user": {
        "id": "uuid",
        "name": "Jane Doe",
        "email": "jane@example.com",
        "role": "owner"
    },
    "tenant": {
        "id": "uuid",
        "name": "Acme Corp",
        "slug": "acme-corp-x7k2q1"
    }
}

Login

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/auth/login

Authenticate with email and password. Returns an API token.

Headers

Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/auth/login" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"gbailey@example.net\",
    \"password\": \"|]|{+-\"
}"
Example response:

Logout

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/auth/logout
requires authentication

Revoke the current API token.

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/auth/logout" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "message": "Logged out successfully."
}

Tenant

Read and update the current tenant. The tenant is resolved from your auth token — you cannot access another tenant's data.

Get tenant

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/tenant
requires authentication

Returns the tenant associated with the current API token.

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/tenant" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

Update tenant

PUT
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/tenant
requires authentication

Update the tenant's name or settings.

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request PUT \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/tenant" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\"
}"

Users

Manage users within the tenant. Roles: owner, admin, member, viewer.

GET api/v1/users

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/users
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/users" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

POST api/v1/users

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/users
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/users" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"email\": \"zbailey@example.net\",
    \"password\": \"-0pBNvYgxw\",
    \"role\": \"admin\"
}"

GET api/v1/users/{user_id}

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/users/{user_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The ID of the user.

Example:
019d4a3d-2295-71e3-ad7a-dac3e7c8d7f8
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/users/019d4a3d-2295-71e3-ad7a-dac3e7c8d7f8" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

PUT api/v1/users/{user_id}

PUT
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/users/{user_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

user_id
string
required

The ID of the user.

Example:
019d4a3d-2295-71e3-ad7a-dac3e7c8d7f8

Body Parameters

Example request:
curl --request PUT \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/users/019d4a3d-2295-71e3-ad7a-dac3e7c8d7f8" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"role\": \"owner\",
    \"avatar_url\": \"http:\\/\\/bailey.com\\/\"
}"

Workflows

Define and manage workflow state machines. A workflow is a set of states and valid transitions between them. States carry a category (todo, active, blocked, closed, cancelled) for cross-workflow reporting. Transitions can enforce role requirements and WIP limits.

GET api/v1/workflows

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/workflows
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/workflows" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

POST api/v1/workflows

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/workflows
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/workflows" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"is_default\": true,
    \"states\": [
        {
            \"label\": \"n\",
            \"key\": \"g\",
            \"category\": \"todo\",
            \"position\": 16,
            \"wip_limit\": 22,
            \"sla_hours\": 67
        }
    ]
}"

GET api/v1/workflows/{workflow_id}

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/workflows/{workflow_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workflow_id
string
required

The ID of the workflow.

Example:
019d4a3d-2406-712d-b796-5c39f5c2dd6a
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/workflows/019d4a3d-2406-712d-b796-5c39f5c2dd6a" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

PUT api/v1/workflows/{workflow_id}

PUT
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/workflows/{workflow_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workflow_id
string
required

The ID of the workflow.

Example:
019d4a3d-2406-712d-b796-5c39f5c2dd6a

Body Parameters

Example request:
curl --request PUT \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/workflows/019d4a3d-2406-712d-b796-5c39f5c2dd6a" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"is_default\": true
}"

List workflow states

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/workflows/{workflow_id}/states
requires authentication

Returns the ordered list of states for a workflow, including category, WIP limit, and SLA configuration.

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workflow_id
string
required

The ID of the workflow.

Example:
019d4a3d-2406-712d-b796-5c39f5c2dd6a
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/workflows/019d4a3d-2406-712d-b796-5c39f5c2dd6a/states" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

Projects

Projects are containers for work items. Each project has a short key (e.g. PROJ) used in display IDs, a default workflow, and optional settings. Deleting a project archives it rather than destroying it.

GET api/v1/projects

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/projects
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/projects" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

POST api/v1/projects

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/projects
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/projects" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"key\": \"ngzmiyvdljnikhwa\",
    \"description\": \"Eius et animi quos velit et.\",
    \"workflow_id\": \"21c4122b-d554-3723-966c-6d723ea5293f\"
}"

GET api/v1/projects/{project_id}

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/projects/{project_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

project_id
string
required

The ID of the project.

Example:
019d4a3d-2444-702d-b8b0-46ed2acf570a
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/projects/019d4a3d-2444-702d-b8b0-46ed2acf570a" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

PUT api/v1/projects/{project_id}

PUT
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/projects/{project_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

project_id
string
required

The ID of the project.

Example:
019d4a3d-2444-702d-b8b0-46ed2acf570a

Body Parameters

Example request:
curl --request PUT \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/projects/019d4a3d-2444-702d-b8b0-46ed2acf570a" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"b\",
    \"description\": \"Eius et animi quos velit et.\",
    \"workflow_id\": \"21c4122b-d554-3723-966c-6d723ea5293f\",
    \"status\": \"active\"
}"

DELETE api/v1/projects/{project_id}

DELETE
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/projects/{project_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

project_id
string
required

The ID of the project.

Example:
019d4a3d-2444-702d-b8b0-46ed2acf570a
Example request:
curl --request DELETE \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/projects/019d4a3d-2444-702d-b8b0-46ed2acf570a" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Work Items

Work items are the core unit of work. They belong to a project, carry a type (task, story, epic, etc.), and move through a workflow state machine. Items can be nested (parent/child), linked via relations, and extended with custom fields.

GET api/v1/projects/{project_id}/work-items

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/projects/{project_id}/work-items
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

project_id
string
required

The ID of the project.

Example:
019d4a3d-2444-702d-b8b0-46ed2acf570a
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/projects/019d4a3d-2444-702d-b8b0-46ed2acf570a/work-items" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

POST api/v1/projects/{project_id}/work-items

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/projects/{project_id}/work-items
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

project_id
string
required

The ID of the project.

Example:
019d4a3d-2444-702d-b8b0-46ed2acf570a

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/projects/019d4a3d-2444-702d-b8b0-46ed2acf570a/work-items" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"title\": \"b\",
    \"description\": \"Eius et animi quos velit et.\",
    \"type\": \"v\",
    \"parent_id\": \"5707ca55-f609-3528-be8b-1baeaee1567e\",
    \"workflow_id\": \"947170af-7488-3f30-a16d-723355a9502f\",
    \"status\": \"i\",
    \"estimated_hours\": 75,
    \"start_at\": \"2026-04-02T11:19:49\",
    \"due_at\": \"2026-04-02T11:19:49\",
    \"position\": 7
}"

Get work item

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/work-items/{workItem_id}
requires authentication

Returns a single work item with its project, workflow, parent, children, and assignments.

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workItem_id
string
required

The ID of the workItem.

Example:
019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/work-items/019d4a92-eb1d-72c6-ae2b-ff9ac39bf615" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

PUT api/v1/work-items/{workItem_id}

PUT
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/work-items/{workItem_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workItem_id
string
required

The ID of the workItem.

Example:
019d4a92-eb1d-72c6-ae2b-ff9ac39bf615

Body Parameters

Example request:
curl --request PUT \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/work-items/019d4a92-eb1d-72c6-ae2b-ff9ac39bf615" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"title\": \"b\",
    \"description\": \"Eius et animi quos velit et.\",
    \"type\": \"v\",
    \"workflow_id\": \"5707ca55-f609-3528-be8b-1baeaee1567e\",
    \"status\": \"j\",
    \"estimated_hours\": 52,
    \"start_at\": \"2026-04-02T11:19:49\",
    \"due_at\": \"2026-04-02T11:19:49\",
    \"completed_at\": \"2026-04-02T11:19:49\"
}"

DELETE api/v1/work-items/{workItem_id}

DELETE
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/work-items/{workItem_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workItem_id
string
required

The ID of the workItem.

Example:
019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
Example request:
curl --request DELETE \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/work-items/019d4a92-eb1d-72c6-ae2b-ff9ac39bf615" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

GET api/v1/work-items/{workItem_id}/children

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/work-items/{workItem_id}/children
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workItem_id
string
required

The ID of the workItem.

Example:
019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/work-items/019d4a92-eb1d-72c6-ae2b-ff9ac39bf615/children" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

List available transitions

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/work-items/{workItem_id}/available-transitions
requires authentication

Returns the transitions the authenticated user can trigger on this work item right now. Filtered by current state, the user's role, and WIP headroom on target states. Use this to drive UI affordances — only show buttons for what is actually possible.

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workItem_id
string
required

The ID of the workItem.

Example:
019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/work-items/019d4a92-eb1d-72c6-ae2b-ff9ac39bf615/available-transitions" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

Transition work item

PUT
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/work-items/{workItem_id}/transition
requires authentication

Move a work item to a new workflow state. Enforces guard conditions: role requirements, WIP limits, and any custom guards defined on the transition. Returns the updated work item or a structured error.

This is a command endpoint — not a field update. Use it instead of PUT /work-items/{id} for state changes.

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workItem_id
string
required

The ID of the workItem.

Example:
019d4a92-eb1d-72c6-ae2b-ff9ac39bf615

Body Parameters

Example request:
curl --request PUT \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/work-items/019d4a92-eb1d-72c6-ae2b-ff9ac39bf615/transition" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"transition_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\"
}"
Example response:
{
    "message": "Transition denied",
    "errors": {
        "transition": [
            "WIP limit of 5 reached for 'in_progress' state"
        ]
    }
}
{
    "message": "Transition denied",
    "errors": {
        "transition": [
            "You do not have the required role 'reviewer' for this transition"
        ]
    }
}

PUT api/v1/work-items/{workItem_id}/move

PUT
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/work-items/{workItem_id}/move
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workItem_id
string
required

The ID of the workItem.

Example:
019d4a92-eb1d-72c6-ae2b-ff9ac39bf615

Body Parameters

Example request:
curl --request PUT \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/work-items/019d4a92-eb1d-72c6-ae2b-ff9ac39bf615/move" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"parent_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",
    \"project_id\": \"6b72fe4a-5b40-307c-bc24-f79acf9a1bb9\",
    \"position\": 77
}"

Relations

Relations model how work items connect. The blocks type forms a directed acyclic graph (DAG) — cycle detection runs on every insert. Use relations to encode dependencies, duplicates, or soft associations.

GET api/v1/work-items/{workItem_id}/relations

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/work-items/{workItem_id}/relations
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workItem_id
string
required

The ID of the workItem.

Example:
019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/work-items/019d4a92-eb1d-72c6-ae2b-ff9ac39bf615/relations" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

Create relation

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/work-items/{workItem_id}/relations
requires authentication

Create a relation between two work items. For blocks relations, cycle detection runs automatically — if the relation would create a circular dependency, the request is rejected with a 422.

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workItem_id
string
required

The ID of the workItem.

Example:
019d4a92-eb1d-72c6-ae2b-ff9ac39bf615

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/work-items/019d4a92-eb1d-72c6-ae2b-ff9ac39bf615/relations" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"target_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",
    \"type\": \"blocks\"
}"
Example response:
{
    "message": "Cyclic dependency detected",
    "errors": {
        "target_id": [
            "This relation would create a circular dependency"
        ]
    }
}

DELETE api/v1/relations/{relation_id}

DELETE
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/relations/{relation_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

relation_id
string
required

The ID of the relation.

Example:
019d4a43-a34c-7285-90da-e92c6bf35dc7
Example request:
curl --request DELETE \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/relations/019d4a43-a34c-7285-90da-e92c6bf35dc7" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Assignments

Assign users to work items with a role. Roles drive transition permissions — only a user with role reviewer can approve a transition that requires a reviewer. Roles: assignee, reviewer, approver, watcher.

GET api/v1/work-items/{workItem_id}/assignments

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/work-items/{workItem_id}/assignments
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workItem_id
string
required

The ID of the workItem.

Example:
019d4a92-eb1d-72c6-ae2b-ff9ac39bf615
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/work-items/019d4a92-eb1d-72c6-ae2b-ff9ac39bf615/assignments" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

POST api/v1/work-items/{workItem_id}/assignments

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/work-items/{workItem_id}/assignments
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

workItem_id
string
required

The ID of the workItem.

Example:
019d4a92-eb1d-72c6-ae2b-ff9ac39bf615

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/work-items/019d4a92-eb1d-72c6-ae2b-ff9ac39bf615/assignments" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"user_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",
    \"role\": \"g\"
}"

DELETE api/v1/assignments/{assignment_id}

DELETE
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/assignments/{assignment_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

assignment_id
string
required

The ID of the assignment.

Example:
019d4a3e-4d31-70f7-9eeb-c14b3dc3b723
Example request:
curl --request DELETE \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/assignments/019d4a3e-4d31-70f7-9eeb-c14b3dc3b723" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Custom Fields

Define custom fields per project. Supported types: text, number, boolean, date, select, multi_select. Field values are stored on work items in the custom_fields JSONB column — read and write them via work item endpoints.

GET api/v1/projects/{project_id}/custom-fields

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/projects/{project_id}/custom-fields
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

project_id
string
required

The ID of the project.

Example:
019d4a3d-2444-702d-b8b0-46ed2acf570a
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/projects/019d4a3d-2444-702d-b8b0-46ed2acf570a/custom-fields" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

POST api/v1/projects/{project_id}/custom-fields

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/projects/{project_id}/custom-fields
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

project_id
string
required

The ID of the project.

Example:
019d4a3d-2444-702d-b8b0-46ed2acf570a

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/projects/019d4a3d-2444-702d-b8b0-46ed2acf570a/custom-fields" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"label\": \"b\",
    \"key\": \"n\",
    \"field_type\": \"user\",
    \"is_required\": true,
    \"position\": 84
}"

PUT api/v1/custom-fields/{customFieldDefinition_id}

PUT
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/custom-fields/{customFieldDefinition_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

customFieldDefinition_id
string
required

The ID of the customFieldDefinition.

Example:
architecto

Body Parameters

Example request:
curl --request PUT \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/custom-fields/architecto" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"label\": \"b\",
    \"is_required\": true,
    \"position\": 39
}"

DELETE api/v1/custom-fields/{customFieldDefinition_id}

DELETE
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/custom-fields/{customFieldDefinition_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

customFieldDefinition_id
string
required

The ID of the customFieldDefinition.

Example:
architecto
Example request:
curl --request DELETE \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/custom-fields/architecto" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Connection Mappings

Map external projects to internal projects and configure field mappings.

GET api/v1/connections/{connection_id}/mappings

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{connection_id}/mappings
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

connection_id
string
required

The ID of the connection.

Example:
architecto
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto/mappings" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

POST api/v1/connections/{connection_id}/mappings

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{connection_id}/mappings
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

connection_id
string
required

The ID of the connection.

Example:
architecto

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto/mappings" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"project_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",
    \"external_project_id\": \"g\",
    \"external_project_name\": \"z\",
    \"sync_direction\": \"outbound\"
}"

PUT api/v1/connections/{connection_id}/mappings/{map_id}

PUT
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{connection_id}/mappings/{map_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

connection_id
string
required

The ID of the connection.

Example:
architecto
map_id
string
required

The ID of the map.

Example:
architecto

Body Parameters

Example request:
curl --request PUT \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto/mappings/architecto" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"project_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",
    \"external_project_id\": \"g\",
    \"external_project_name\": \"z\",
    \"sync_direction\": \"bidirectional\"
}"

DELETE api/v1/connections/{connection_id}/mappings/{map_id}

DELETE
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{connection_id}/mappings/{map_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

connection_id
string
required

The ID of the connection.

Example:
architecto
map_id
string
required

The ID of the map.

Example:
architecto
Example request:
curl --request DELETE \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto/mappings/architecto" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

GET api/v1/connections/{connection_id}/mappings/{map_id}/fields

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{connection_id}/mappings/{map_id}/fields
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

connection_id
string
required

The ID of the connection.

Example:
architecto
map_id
string
required

The ID of the map.

Example:
architecto
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto/mappings/architecto/fields" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

POST api/v1/connections/{connection_id}/mappings/{map_id}/fields

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{connection_id}/mappings/{map_id}/fields
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

connection_id
string
required

The ID of the connection.

Example:
architecto
map_id
string
required

The ID of the map.

Example:
architecto

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto/mappings/architecto/fields" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"external_field_key\": \"b\",
    \"external_field_label\": \"n\",
    \"internal_field\": \"g\"
}"

DELETE api/v1/connections/{connection_id}/mappings/{map_id}/fields/{fieldMapping_id}

DELETE
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{connection_id}/mappings/{map_id}/fields/{fieldMapping_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

connection_id
string
required

The ID of the connection.

Example:
architecto
map_id
string
required

The ID of the map.

Example:
architecto
fieldMapping_id
string
required

The ID of the fieldMapping.

Example:
architecto
Example request:
curl --request DELETE \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto/mappings/architecto/fields/architecto" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Connections

Manage external platform connections (Jira, Trello, etc.).

GET api/v1/connections

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

POST api/v1/connections

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"platform\": \"jira\",
    \"access_token\": \"architecto\",
    \"refresh_token\": \"architecto\",
    \"token_expires_at\": \"2026-04-02T11:19:49\",
    \"external_account_id\": \"n\"
}"

GET api/v1/connections/{connection_id}

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{connection_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

connection_id
string
required

The ID of the connection.

Example:
architecto
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

DELETE api/v1/connections/{connection_id}

DELETE
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{connection_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

connection_id
string
required

The ID of the connection.

Example:
architecto
Example request:
curl --request DELETE \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

List all importable projects from the external platform.

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{connection_id}/projects
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

connection_id
string
required

The ID of the connection.

Example:
architecto
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto/projects" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

List all available fields for a specific external project.

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{connection_id}/fields/{externalProjectId}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

connection_id
string
required

The ID of the connection.

Example:
architecto
externalProjectId
string
required
Example:
architecto
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto/fields/architecto" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

Endpoints

Generate an OAuth redirect URL for the given platform.

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{platform}/auth
requires authentication

POST /api/v1/connections/{platform}/auth

Returns: { "redirect_url": "https://..." }

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

platform
string
required
Example:
architecto
Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto/auth" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Handle the OAuth callback and persist the connection.

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{platform}/callback
requires authentication

GET /api/v1/connections/{platform}/callback

Returns a ConnectionResource on success.

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

platform
string
required
Example:
architecto

Body Parameters

Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto/callback" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"code\": \"architecto\",
    \"state\": \"architecto\"
}"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

POST api/v1/inbound/jira

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/inbound/jira
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/inbound/jira" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Events

Audit log of all changes made within your tenant.

List events

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/events
requires authentication

Returns a paginated audit log scoped to the authenticated tenant. Filter by subject type, subject ID, causer, event type, or date range.

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/events" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

Import

Import work items from JSON payloads or uploaded CSV/JSON files.

Bulk-import work items from a JSON payload (synchronous, up to 500 items).

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/import/bulk
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/import/bulk" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"project_id\": \"6ff8f7f6-1eb3-3525-be4a-3932c805afed\",
    \"items\": [
        {
            \"title\": \"b\",
            \"type\": \"story\",
            \"description\": \"Eius et animi quos velit et.\",
            \"status\": \"architecto\",
            \"assignee_email\": \"zbailey@example.net\",
            \"due_at\": \"2026-04-02T11:19:49\",
            \"estimated_hours\": 8,
            \"origin_id\": \"architecto\",
            \"parent_index\": 16
        }
    ]
}"

Upload a CSV or JSON file and start a background import job.

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/import/file
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
multipart/form-data
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/import/file" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "project_id=6ff8f7f6-1eb3-3525-be4a-3932c805afed"\
    --form "origin_system=b"\
    --form "file=@/private/var/folders/7f/drx06wl539n7jt4sfk4prjyh0000gn/T/phpn0l9vibplae39emHmAu" 

Sync Jobs

Trigger and inspect sync jobs for external platform connections.

GET api/v1/sync-jobs

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/sync-jobs
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/sync-jobs" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

GET api/v1/sync-jobs/{syncJob_id}

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/sync-jobs/{syncJob_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

syncJob_id
string
required

The ID of the syncJob.

Example:
architecto
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/sync-jobs/architecto" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

Trigger a new full-import sync for a connection–project mapping.

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/connections/{connection_id}/mappings/{map_id}/sync
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

connection_id
string
required

The ID of the connection.

Example:
architecto
map_id
string
required

The ID of the map.

Example:
architecto
Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/connections/architecto/mappings/architecto/sync" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"

Webhooks

Manage outbound webhooks for your tenant. Each webhook receives signed POST requests when subscribed events occur. Verify authenticity using the X-Signature-256 header.

GET api/v1/webhooks

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/webhooks
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/webhooks" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

POST api/v1/webhooks

POST
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/webhooks
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Example request:
curl --request POST \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/webhooks" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"url\": \"http:\\/\\/www.bailey.biz\\/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html\",
    \"events\": [
        \"work_item.transitioned\"
    ],
    \"is_active\": false
}"

GET api/v1/webhooks/{webhook_id}

GET
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/webhooks/{webhook_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

webhook_id
string
required

The ID of the webhook.

Example:
architecto
Example request:
curl --request GET \
    --get "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/webhooks/architecto" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
Headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
    "message": "Unauthenticated."
}

PUT api/v1/webhooks/{webhook_id}

PUT
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/webhooks/{webhook_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

webhook_id
string
required

The ID of the webhook.

Example:
architecto

Body Parameters

Example request:
curl --request PUT \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/webhooks/architecto" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"url\": \"http:\\/\\/www.bailey.biz\\/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html\",
    \"events\": [
        \"project.updated\"
    ],
    \"is_active\": true
}"

DELETE api/v1/webhooks/{webhook_id}

DELETE
https://universal-work-engine-develop-niyqyr.laravel.cloud
/api/v1/webhooks/{webhook_id}
requires authentication

Headers

Authorization
Example:
Bearer {YOUR_API_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

webhook_id
string
required

The ID of the webhook.

Example:
architecto
Example request:
curl --request DELETE \
    "https://universal-work-engine-develop-niyqyr.laravel.cloud/api/v1/webhooks/architecto" \
    --header "Authorization: Bearer {YOUR_API_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"