API reference
Every REST endpoint, its parameters, and what it returns — projects, phases, tasks, comments, templates, webhooks and agents.
All endpoints are relative to https://cadence.alen.world/api/v1 and require a Pro or Enterprise API key unless noted. Read REST conventions first for the envelope, error shapes and rate limits.
Health
/healthno authLiveness check. Returns the API version and server time. Useful as an uptime monitor target.
Users
Get the current identity
/users/meReturns the profile of the user who owns the API key: id, name, email, avatarUrl, role, department, systemRole, teamId and agent.
Call this first when setting up an integration — it confirms the key works and tells you which team and identity your writes will be attributed to.
Projects
List projects
/projectsEvery project in the team, each with its project manager, phase statuses and tags.
Create a project
/projectsnamestringRequiredThe project name.
descriptionstringFree text. Used by AI task refinement when a template is applied.
startDatedateYYYY-MM-DD.deadlinedateYYYY-MM-DD.projectManagerIduuidA profile in your team. Defaults to the key's owner. If it references a connected agent, an agent run is queued — which requires a paid plan.
templateIduuidTemplate to record against the project.
Returns 201 with the created project.
Get a project
/projects/:idThe full object: project manager, team members, every phase with its tasks and assignees, and tags. This is the one call to make when you need a project's whole tree — fetching phases and tasks separately costs more requests for the same data.
Update a project
/projects/:idAccepts name, description, status, startDate, deadline and projectManagerId. Only the fields you send are changed.
Setting projectManagerId to null or "" clears it. Setting it to an agent queues a run for that agent.
Delete a project
/projects/:idDeletes the project and everything under it. Returns 204.
List a project's phases
/projects/:id/phasesPhases in order, each with the ids and statuses of its tasks.
List a project's team
/projects/:id/teamProfiles on the project team, including their role, department and whether each is an agent.
Phases
Get a phase
/phases/:idThe phase with its parent project and its full list of gate criteria.
Update a phase
/phases/:idAccepts name, description, status, startDate and deadline.
List a phase's tasks
/phases/:id/tasksEvery task in the phase, with assignees.
Tasks
Create a task
/tasksphaseIduuidRequiredThe phase to create the task in. Must belong to your team.
titlestringRequiredWhat has to be done.
descriptionstringThe detail.
prioritylow | medium | high | criticalDefaults to
medium.assigneeIduuidA profile in your team. Assigning a connected agent queues a run and requires a paid plan.
deadlinedateYYYY-MM-DD.estimatedHoursnumberEffort estimate.
Returns 201 with the created task and its assignee.
Get a task
/tasks/:idThe task with its assignee, its phase, that phase's project, and its required skills.
Update a task
/tasks/:idAccepts title, description, status, priority, assigneeId, deadline and estimatedHours.
Valid statuses: not-started, in-progress, blocked, review, completed, cancelled. These are validated — anything else returns 400. Send assigneeId as null or "" to unassign.
Delete a task
/tasks/:idReturns 204.
Search tasks
/tasks/searchSearch across the whole team, with every filter optional and combined with AND.
querystringCase-insensitive substring match on the task title.
statusstringExact status match.
prioritystringExact priority match.
assigneeIduuidTasks assigned to this profile.
projectIduuidTasks anywhere in this project.
phaseIduuidTasks in this phase.
Returns up to 100 tasks, each with its assignee, phase and project. There is no pagination — narrow the filters if you are hitting the ceiling.
curl -X POST https://cadence.alen.world/api/v1/tasks/search \
-H "Authorization: Bearer $CADENCE_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "status": "blocked", "priority": "critical" }'Attachments
Attach a link to a task
/tasks/:id/attachments/linkRecords an attachment that points at a file hosted elsewhere. Use this to surface a document from your DMS, drive or wiki on the task, without uploading it.
filenamestringRequiredDisplay name.
urlstringRequiredMust be a valid absolute URL.
typestringRequiredMIME type, e.g.
application/pdf.sizenumberRequiredSize in bytes. Must be zero or greater.
Returns 201. Uploading actual files is done through the interface.
Comments
List comments
/comments?entity_type=&entity_id=Both query parameters are required. entity_type is one of task, phase, project or tag. Returns comments oldest first, each with its author.
Create a comment
/commentsentityTypetask | phase | project | tagRequiredWhat is being commented on.
entityIduuidRequiredThe id of that entity.
contentstringRequiredThe comment body.
The comment is attributed to the user who owns the API key. Returns 201.
Templates
List templates
/templatesEvery template in the team, with its phases and the tasks inside them, ordered by name. Read-only — templates are authored in the interface.
Webhooks
Full detail, including signature verification, is on the webhooks page.
List endpoints
/webhooksRegistered endpoints with their url, subscribed events and isActive flag. Secrets are never returned here.
Create an endpoint
/webhooksurlstringRequiredAbsolute URL to deliver to.
eventsstring[]RequiredAt least one of
task.created,task.updated,task.deleted,phase.status_changed,project.created,project.updated,comment.created. Any unrecognised value rejects the whole request.
Returns 201 including the generated secret — the only time it is ever returned. Store it; you need it to verify signatures.
Update an endpoint
/webhooks/:idAccepts url, events and isActive. Set isActive to false to pause deliveries without losing the endpoint or its secret.
Delete an endpoint
/webhooks/:idReturns 204.
Agents
Agents require a paid plan; creating, updating and deleting them additionally requires an admin identity. See AI agents.
List agents
/agentsCreate an agent
/agentsadminnamestringRequiredDisplay name. This is what appears in assignee pickers.
descriptionstringWhat the agent is for.
mcpUrlstringRequiredThe agent's MCP endpoint. Must be a valid URL.
mcpAuthTokenstringSent as a bearer token when cadence. connects to that endpoint.
Creates the agent and a team profile for it, so it can be assigned work like a person. Returns 201.
Get, update and delete an agent
/agents/:id/agents/:idadmin/agents/:idadminPATCH accepts name, description, mcpUrl, mcpAuthToken and status (active or paused). Deleting an agent also removes its team profile.
List an agent's runs
/agents/:id/runs?limit=50Runs newest first. limit defaults to 50 and is capped at 200.
Test an agent's connection
/agents/:id/test-connectionConnects to the agent's MCP endpoint and issues a trivial call. Returns { "data": { "ok": true } } on success, or 400 with the underlying connection error.
Retry a run
/agent-runs/:runId/retryRe-queues a failed run.