Tasks API
Headless task management for customer portals and server-side agents. One secret API key per integration; pass an actor on each write so your end-users are attributed without Tensient logins.
Machine-readable
openapi.json — REST paths and schemas for agents and codegen.
llms.txt — agent index (MCP + REST + auth).
MCP tools list_tasks, create_task, etc. use the same logic — see /docs/tools.
Authentication & rate limits
Secret keys only (tns_...). Same keys as MCP and Feedback. Default limit: 120 requests/minute per key (override with EXTERNAL_TASKS_RATE_LIMIT_PER_MINUTE).
Authorization: Bearer tns_YOUR_KEY_HEREIn local dev, use your app origin (e.g. http://localhost:3000/api/external/tasks) — docs show production URLs for copy-paste into customer repos.
End-user attribution (actor)
You do not need a Tensient API key per customer user. Use one integration key on your server, then include actor on POST/PATCH (tasks) and POST (comments):
"actor": {
"externalId": "usr_123", // your platform user id (recommended)
"email": "alex@example.com",
"name": "Alex Smith"
}Tensient upserts a workspace_people record (same model as assignees). Creates set createdByDisplayName; updates set updatedByDisplayName; comments show authorPersonId and name. The API key still proves your server is allowed to write — the actor is who did it on your product.
Endpoints
GEThttps://tensient.com/api/external/tasksList tasks — query: status, archived=true
POSThttps://tensient.com/api/external/tasksCreate task
GEThttps://tensient.com/api/external/tasks/{id}Get task + linked feedback
PATCHhttps://tensient.com/api/external/tasks/{id}Update task (partial)
DELETEhttps://tensient.com/api/external/tasks/{id}Hard delete
GEThttps://tensient.com/api/external/tasks/{id}/commentsList comments
POSThttps://tensient.com/api/external/tasks/{id}/commentsAdd comment (markdown body)
POSThttps://tensient.com/api/external/tasks/{id}/feedback-linksLink feedback ticket
DELETEhttps://tensient.com/api/external/tasks/{id}/feedback-links?feedbackSubmissionId=...Unlink feedback
GEThttps://tensient.com/api/external/feedback?search=checkoutSearch feedback to link (search required)
GEThttps://tensient.com/api/external/task-categoriesList categories
POSThttps://tensient.com/api/external/task-categoriesCreate category — body: { name }
GEThttps://tensient.com/api/external/milestonesList milestones with task counts
POSThttps://tensient.com/api/external/milestonesCreate milestone — body: name, description?, targetDate?
GEThttps://tensient.com/api/external/peopleList assignable people (members + placeholders)
POSThttps://tensient.com/api/external/peopleRegister person — body: externalId?, email?, name?
Example — create with actor
curl -X POST "https://tensient.com/api/external/tasks" \
-H "Authorization: Bearer tns_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{
"title": "Fix checkout bug",
"status": "todo",
"actor": {
"externalId": "usr_123",
"email": "alex@customer.com",
"name": "Alex Smith"
}
}'