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.
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}.
Register, log in, and log out. Tokens are scoped to a tenant and used as Bearer auth on all other endpoints.
Create a new account and tenant. Returns an API token scoped to the new tenant.
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\"
}"
{
"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"
}
}
Authenticate with email and password. Returns an API token.
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\": \"|]|{+-\"
}"
{
"token": "2|xyz789...",
"user": {
"id": "uuid",
"name": "Jane Doe",
"email": "jane@example.com",
"role": "owner"
}
}
Revoke the current API token.
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" {
"message": "Logged out successfully."
}
Read and update the current tenant. The tenant is resolved from your auth token — you cannot access another tenant's data.
Returns the tenant associated with the current API token.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Update the tenant's name or settings.
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\"
}"
Manage users within the tenant. Roles: owner, admin, member, viewer.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
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\"
}"
The ID of the user.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the user.
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\\/\"
}"
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.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
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
}
]
}"
The ID of the workflow.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the workflow.
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
}"
Returns the ordered list of states for a workflow, including category, WIP limit, and SLA configuration.
The ID of the workflow.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
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.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
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\"
}"
The ID of the project.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the project.
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\"
}"
The ID of the project.
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 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.
The ID of the project.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the project.
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
}"
Returns a single work item with its project, workflow, parent, children, and assignments.
The ID of the workItem.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the workItem.
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\"
}"
The ID of the workItem.
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" The ID of the workItem.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
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.
The ID of the workItem.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
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.
The ID of the workItem.
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\"
}"
{
"message": "Transition denied",
"errors": {
"transition": [
"WIP limit of 5 reached for 'in_progress' state"
]
}
}
The ID of the workItem.
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 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.
The ID of the workItem.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
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.
The ID of the workItem.
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\"
}"
{
"message": "Cyclic dependency detected",
"errors": {
"target_id": [
"This relation would create a circular dependency"
]
}
}
The ID of the relation.
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" 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.
The ID of the workItem.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the workItem.
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\"
}"
The ID of the assignment.
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" 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.
The ID of the project.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the project.
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
}"
The ID of the customFieldDefinition.
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
}"
The ID of the customFieldDefinition.
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" Map external projects to internal projects and configure field mappings.
The ID of the connection.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the connection.
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\"
}"
The ID of the connection.
The ID of the map.
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\"
}"
The ID of the connection.
The ID of the map.
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" The ID of the connection.
The ID of the map.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the connection.
The ID of the map.
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\"
}"
The ID of the connection.
The ID of the map.
The ID of the fieldMapping.
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" Manage external platform connections (Jira, Trello, etc.).
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
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\"
}"
The ID of the connection.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the connection.
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" The ID of the connection.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the connection.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
POST /api/v1/connections/{platform}/auth
Returns: { "redirect_url": "https://..." }
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" GET /api/v1/connections/{platform}/callback
Returns a ConnectionResource on success.
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\"
}"
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
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" Audit log of all changes made within your tenant.
Returns a paginated audit log scoped to the authenticated tenant. Filter by subject type, subject ID, causer, event type, or date range.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Import work items from JSON payloads or uploaded CSV/JSON files.
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
}
]
}"
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" Trigger and inspect sync jobs for external platform connections.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the syncJob.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the connection.
The ID of the map.
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" Manage outbound webhooks for your tenant. Each webhook receives signed POST requests
when subscribed events occur. Verify authenticity using the X-Signature-256 header.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
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
}"
The ID of the webhook.
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" cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
The ID of the webhook.
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
}"
The ID of the webhook.
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"