API Reference
Base URL: https://v2-api.zeplo.io
All endpoints require authentication via Authorization: Bearer <token> header. See Authentication.
Queues
List queues
GET /workspaces/:workspaceId/queues/
Returns all queues in the workspace.
Create queue
POST /workspaces/:workspaceId/queues/
{
"name": "string (required)",
"type": "standard | fifo"
}
Get queue
GET /workspaces/:workspaceId/queues/:queueId/
Returns queue details including metrics (request count, success rate, error rate, avg response time).
Update queue
PATCH /workspaces/:workspaceId/queues/:queueId/
{
"name": "string",
"status": "active | paused"
}
Delete queue
DELETE /workspaces/:workspaceId/queues/:queueId/
Requests
Enqueue request (public)
POST /queues/:queueId/enqueue
This is the primary endpoint for adding work to a queue. Uses token-based auth.
{
"method": "GET | POST | PUT | PATCH | DELETE",
"url": "string (required)",
"headers": {},
"body": "string",
"delay": 0,
"retries": 3,
"requestId": "string"
}
Legacy v1 compatibility headers supported:
- X-Zeplo-Delay
- X-Zeplo-Delay-Until
- X-Zeplo-Retry
- X-Zeplo-Interval
- X-Zeplo-Cron
- X-Zeplo-Timezone
Precedence:
- body retries overrides X-Zeplo-Retry
- body delay overrides delay headers
- X-Zeplo-Interval overrides X-Zeplo-Cron when both are present
Response (202) — request queued or delayed:
{
"requestId": "req_xyz789",
"status": "queued|scheduled",
"queuedAt": "2026-03-12T19:00:00Z"
}
Response (202) — recurring schedule created via legacy headers:
{
"scheduleId": "sched_xyz789",
"status": "scheduled",
"type": "interval|cron",
"nextRun": "2026-03-12T19:05:00Z",
"createdAt": "2026-03-12T19:00:00Z"
}
Create request (dashboard)
POST /workspaces/:workspaceId/queues/:queueId/requests
Same as enqueue but scoped to a workspace. Used by the dashboard.
Get request
GET /workspaces/:workspaceId/requests/:requestId
Returns full request details including response data and timeline.
List requests (queue logs)
GET /workspaces/:workspaceId/queues/:queueId/logs/
Returns paginated request history for a queue. Supports filtering by status.
Schedules
List schedules
GET /workspaces/:workspaceId/schedules/
Create schedule
POST /workspaces/:workspaceId/schedules/
{
"name": "string (required)",
"queueId": "string (required)",
"schedule": "string (required, cron expression)",
"requestTemplate": {
"method": "POST",
"url": "string (required)",
"headers": {},
"body": "string"
}
}
Get schedule
GET /workspaces/:workspaceId/schedules/:scheduleId/
Update schedule
PATCH /workspaces/:workspaceId/schedules/:scheduleId/
{
"name": "string",
"schedule": "string (cron expression)",
"status": "active | paused",
"requestTemplate": {
"method": "string",
"url": "string",
"headers": {},
"body": "string"
}
}
Delete schedule
DELETE /workspaces/:workspaceId/schedules/:scheduleId/
Tokens
List tokens
GET /workspaces/:workspaceId/tokens/
Create token
POST /workspaces/:workspaceId/tokens/
{
"name": "string (required)"
}
The token value is returned once on creation and cannot be retrieved again.
Delete token
DELETE /workspaces/:workspaceId/tokens/:tokenId/
Webhooks
List webhooks
GET /workspaces/:workspaceId/webhooks/
Create webhook
POST /workspaces/:workspaceId/webhooks/
{
"url": "string (required)",
"events": ["request.create", "request.complete", "request.fail"]
}
Update webhook
PATCH /workspaces/:workspaceId/webhooks/:webhookId/
Delete webhook
DELETE /workspaces/:workspaceId/webhooks/:webhookId/
Workspaces
Get workspace
GET /workspaces/:workspaceId/
Update workspace
PATCH /workspaces/:workspaceId/
List members
GET /workspaces/:workspaceId/team
Invite member
POST /workspaces/:workspaceId/team/invite
{
"email": "string (required)",
"role": "admin | member | viewer"
}
Request statuses
| Status | Description |
|---|---|
pending |
Queued, waiting to be processed |
scheduled |
Delayed or scheduled for future execution |
processing |
Currently being executed |
completed |
Successfully executed (2xx response) |
failed |
All attempts exhausted |
cancelled |
Manually cancelled |
Error responses
All errors follow a consistent format:
{
"error": {
"code": "NOT_FOUND",
"message": "Queue not found"
}
}
Common HTTP status codes:
| Code | Meaning |
|---|---|
400 |
Invalid request body or parameters |
401 |
Missing or invalid authentication |
403 |
Insufficient permissions |
404 |
Resource not found |
409 |
Conflict (e.g., duplicate idempotency key) |
429 |
Rate limit exceeded |