What you can do with the API
Authentication
All requests use an API key in theAuthorization header:
dv_<random>, and are shown once at creation, so store them immediately.
- Base URL:
https://api.duvo.ai/v2 - Rate limit: 300 requests per minute per API key. Responses include
x-ratelimit-limit,x-ratelimit-remaining, andx-ratelimit-resetheaders. On429, honor theretry-afterheader. - Error model: errors return
{ "error": "...", "message": "..." }with a standard HTTP status code (400,401,403,404,413,429,5xx).
Collection endpoints are team-scoped (
/teams/\{teamId\}/...); endpoints that
act on a specific resource are addressed directly by ID (/agents/\{agent_id\},
/runs/\{run_id\}).Agents and Revisions
Agents are the units of work in Duvo. A Revision is a versioned snapshot of an Agent’s Setup — AOP, model settings, and attached skills. Runs always run against an Agent’s latest Revision. What you can do:- List, create, and update Agents
- Create Revisions to deploy AOP changes programmatically
- Organize Agents into folders
See the API Reference for request and response schemas, and Creating Agents via API for worked examples including folders and the full create flow.
You can create an Agent and its first Revision in a single request — pass a
build object in the body:
Runs
A Run is a single execution of an Agent. Runs are asynchronous — the API returns immediately and you poll or use a webhook to track completion. What you can do:- Start a Run with optional file input, an initial message, and a webhook for event notifications
- Poll for status (
pending,running,waiting,completed,failed,stopped) - Read the conversation — everything the Agent did, step by step
- Respond to human-in-the-loop requests programmatically
- Stop a running Run
See the API Reference for schemas, and Running Agents via API for the full flow including file uploads and HITL webhooks.
Starting a Run and polling for completion:
Skills
Skills package reusable knowledge — AOPs, rule books, taxonomies — into a zip that any Agent can use. Managing skills via the API lets you keep your AOPs in a Git repository and sync them to Duvo on every push, without anyone clicking through the UI. What you can do:- List team skills and system skills
- Create a skill from text content
- Upload a multi-file skill as a zip
- Download a skill as a zip
- Update individual skill files
- Delete a skill
See the API Reference for schemas and Creating Custom Skills for how to structure your
SKILL.md files.
Creating a skill from text:
SKILL.md at the root with name and description frontmatter. Supporting documents, templates, and examples can live in subfolders.
Queues and Cases
Queues hold individual work items — called Cases — that Agents process one at a time. You can push Cases into a queue from any external system, which makes it the standard pattern for high-volume integrations where events arrive faster than a single Agent can handle them. What you can do:- List and inspect queues
- Push Cases into a queue (one at a time or in batch)
- List and search Cases in a queue
- Bulk-update, bulk-reprocess, or bulk-delete Cases
- Track Case status through the processing lifecycle
See the API Reference for schemas.
Case statuses:
When listing Cases you can also filter by
needs_input (Cases with an open human request) and postponed (Cases scheduled to retry later). These are derived from Case fields (pending_human_request_id, postponed_to) rather than stored status values.
Pushing a Case from an external system. Wrap a single Case in a case object. The data field is free-form text or a JSON string — Agents receive it when they claim the Case:
cases array instead:
added_cases, each with its id and status. Once Cases are in the queue, an Agent with a Case Trigger picks them up automatically — see Queue for how to configure the trigger.
Validate queue wiring before you start work. Check that a Revision’s queue integration slots are linked to real queues. The response reports, per producer/consumer slot, how many queues are linked. A slot with linked_queue_count of 0 is attached but points at no queue and will fail at runtime — link a queue before starting Runs.
Schedules
You can create, list, update, and delete an Agent’s schedules via the API to run recurring Runs.
See the API Reference for schedule fields and limits.
Connections
Connections link your Agents to external services. The API lets you list and inspect connections, create user-provided connections (custom MCP servers with an API key), and initiate OAuth flows.
Probe by
integration_slug (catalog connections — the backend resolves the server URL for you) or by a custom server_url. A response with success: false includes a code: listing_unavailable means there’s nothing to list yet (not an error — some connections only expose tools once connected), while probe_failed means the probe genuinely failed.
See the API Reference for schemas and Creating Agents via API for the full OAuth flows.
Sandboxes and file uploads
When your Agent needs to process files — CSVs, PDFs, images — upload them to a Sandbox before starting the Run, then pass thesandbox_id when you start the run.
See the API Reference for schemas and Running Agents via API for the complete file-upload pattern.
End-to-end example: order management integration
This example shows an order management system (OMS) pushing new orders into Duvo for processing whenever they arrive. Duvo validates each order, checks inventory, and posts the result back to the OMS. Architecture:1
Configure Duvo
Create an Agent with a Queue trigger pointed at your order-processing queue. The Agent’s AOP instructs it to read Case data, validate the order, check inventory via your ERP connection, and post the result to your OMS webhook.
2
OMS integration code
3
Track results
List Cases to see their status and retrieve Agent output:
Next steps
Creating Agents via API
Agents, Revisions, Folders, Connections, Schedules
Running Agents via API
Runs, Sandboxes, HITL webhooks
Creating Custom Skills
How to structure skills for the API
Queue
Queue architecture and Case Trigger setup
API Reference
Full request and response schemas for every endpoint