TeamDay Docs

API Endpoints

Current Teamday API endpoint map for agent automation, streaming events, durable jobs, missions, and MCP clients.

API Endpoints

The canonical endpoint contract is the OpenAPI document:

GET https://app.teamday.ai/api/openapi.json

Use this page as the human-readable map. All authenticated endpoints use:

Authorization: Bearer <teamday-service-token>

Service tokens support least-privilege scopes such as agents:read, chats:write, jobs:read, jobs:write, missions:write, webhooks:write, and mcp. A token with * keeps full access.

Mutating JSON requests may include:

Idempotency-Key: <unique-key-for-this-operation>

Base URLs

SurfaceBase URL
App/APIhttps://app.teamday.ai
OpenAPIhttps://app.teamday.ai/api/openapi.json
Interactive referencehttps://app.teamday.ai/api/reference
Agent-readiness manifesthttps://app.teamday.ai/api/agent-readiness
SDK exampleshttps://app.teamday.ai/api/sdk-examples
MCP OAuth metadatahttps://app.teamday.ai/.well-known/oauth-authorization-server

Contract

MethodPathPurposeAuth
GET/api/openapi.jsonOpenAPI 3.1 contractPublic
GET/api/referenceInteractive API reference backed by the OpenAPI contractPublic
GET/api/sdk-examplesGenerated-client commands and TypeScript/Python examplesPublic
GET/api/agent-readinessMachine-readable agent-readiness manifestPublic
GET/.well-known/teamday-agent-apiWell-known manifest for crawlers and agentsPublic
GET/api/versionDeployed version metadataPublic

Agents

MethodPathPurpose
GET/api/agentsList agents available to the organization
POST/api/agentsCreate a Private Agent
PATCH/api/agents/{id}Update an agent
DELETE/api/agents/{id}Delete a Private Agent
PATCH/api/agents/{id}/install-stateInstall, uninstall, or restore a library agent

Chats

MethodPathPurpose
GET/api/chatsList chats
POST/api/chatsCreate a durable chat
GET/api/chats/{id}/messagesRead chat messages and durable work summary
POST/api/chats/{id}/messagesSend a message to an agent
GET/api/chats/{id}/eventsStream chat events over Server-Sent Events
PATCH/api/chats/{id}/optionsUpdate chat options
DELETE/api/chats/{id}Delete a chat

Jobs

Jobs are long-running work records. Use them when an agent starts work that may outlive a request.

MethodPathPurpose
GET/api/jobsList jobs
GET/api/jobs/{id}Read job status, metadata, artifacts, review state, and links
GET/api/jobs/{id}/eventsStream job events over Server-Sent Events
GET/api/jobs/{id}/lineageRead related jobs
GET/api/jobs/{id}/transcript-eventsRead transcript events
POST/api/jobs/{id}/approveApprove reviewable work
POST/api/jobs/{id}/cancelCancel running work
POST/api/jobs/{id}/resumeResume blocked work
POST/api/jobs/{id}/iterateRequest another iteration

Missions

Missions define manual or scheduled recurring work for an agent.

MethodPathPurpose
GET/api/missionsList missions
POST/api/missionsCreate a mission
GET/api/missions/{id}Read a mission
PATCH/api/missions/{id}Update a mission
POST/api/missions/{id}/tasksAdd a mission task
PATCH/api/missions/{id}/tasks/{taskId}Update a mission task
POST/api/missions/{id}/tasks/{taskId}/start-workStart long-running work from a task

Workspaces And Files

MethodPathPurpose
POST/api/workspacesCreate a workspace
POST/api/workspaces/{id}/selectSet the active workspace
POST/api/workspaces/{id}/reposAdd a repository mount
POST/api/workspaces/{id}/repos/cloneClone a repository mount
POST/api/workspaces/{id}/appsCreate a workspace app
POST/api/workspaces/{id}/files/previewCreate or fetch a file preview
POST/api/workspaces/{id}/files/shareCreate a public file share
POST/api/workspaces/{id}/files/directoryCreate a directory
POST/api/workspaces/{id}/files/moveMove a file or directory
POST/api/workspaces/{id}/data-blocks/queryRun a read-only data-block query

MCP

Teamday exposes a Streamable HTTP MCP endpoint for MCP clients.

MethodPathPurposeAuth
POST/mcpSend MCP JSON-RPC or Streamable HTTP messagesOAuth mcp scope
GET/mcpOpen an MCP Streamable HTTP sessionOAuth mcp scope
DELETE/mcpClose an MCP sessionOAuth mcp scope

Event Streams

SSE endpoints return text/event-stream, send an initial connection comment, replay recent events, then stream live events and heartbeat comments.

StreamEvents
/api/chats/{id}/eventsChat message replay, assistant output, routing status, artifacts, review state
/api/jobs/{id}/eventsJob event replay, runner status, transcript output, artifact updates
/mcp-app/jobs/{jobId}/eventsSigned app stream for embedded MCP app surfaces

Webhook Event Delivery

Teamday can push durable work state changes to an organization webhook. Configure the destination through the messaging integration API.

MethodPathPurpose
GET/api/messaging-integrationRead webhook/event delivery configuration
PUT/api/messaging-integrationConfigure the HTTPS destination and enable delivery
POST/api/messaging-integration/signing-secret/rotateRotate the HMAC-SHA256 signing secret
POST/api/messaging-integration/testSend a signed test delivery

Webhook deliveries include:

Teamday-Event-Id: 01HX...
Teamday-Event-Type: job.done
Teamday-Delivery-Attempt: 1
Teamday-Timestamp: 1779330180
Teamday-Signature: t=1779330180,v1=<hex-hmac-sha256>
Idempotency-Key: 01HX...

Verify Teamday-Signature by computing HMAC-SHA256(secret, "${timestamp}.${rawBody}") and comparing it to the v1 value. Treat Teamday-Event-Id as the idempotent event key. Teamday retries transient delivery failures with backoff delays of 0s, 1s, 2s, and 4s.

Rate-Limit Headers

Every API response includes transparent quota headers when rate limiting is active:

X-RateLimit-Limit: 900
X-RateLimit-Remaining: 899
X-RateLimit-Reset: 1779330180
RateLimit-Limit: 900
RateLimit-Remaining: 899
RateLimit-Reset: 60
RateLimit-Policy: 900;w=60

When throttled, the API returns 429 and a Retry-After header.

The default production budget is 900 requests per minute per authenticated identity. Agents may use the full one-minute budget as a burst and should back off with Retry-After after a 429. High-volume enterprise workloads can be assigned a contract-specific limit without changing the header contract.

In production, rate-limit counters and idempotency replay state are stored in Redis so the behavior is consistent across API replicas.

On this page