Documentation Index
Fetch the complete documentation index at: https://docs.duvo.ai/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The Duvo Public API enables programmatic access to run Assignments from your own applications, scripts, or automation pipelines. Instead of triggering runs through the Duvo web interface, you can integrate Assignments directly into your workflows.Finding Your Assignment ID
Each Assignment has a unique ID you pass in every API request. The easiest way to find it is in the assignment builder: open your assignment, go to the Setup tab, scroll to the Triggers section, and expand the API Trigger card. It shows a ready-to-runcurl example with your assignment’s ID already filled in, so you can copy and paste it straight into a terminal or script. You can also create an API key from the link in that card.
Key Concepts
Assignments: Assignments are configured through the Duvo web interface with a specific SOP, connections, and capabilities. The Public API allows you to start Jobs for them programmatically. To create and manage Assignments via API, see Creating Assignments via API. Builds: A Build is a versioned Setup snapshot for an Assignment. Every time an Assignment is published, a new Build is created. Runs always execute against an Assignment’s latest Build. You can also create Builds via the API to deploy Setup changes programmatically. Runs: A run represents a single execution of an Assignment. When you start a run, the Assignment begins working on its configured task. Runs are asynchronous—the API returns immediately with run information, and you poll for status updates. Sandboxes: Sandboxes are isolated file environments where you can upload files before starting a run. If your Assignment needs to process files (CSVs, documents, images, etc.), you first upload them to a sandbox, then reference that sandbox when starting the run. Human-in-the-Loop (HITL): Some Assignments may require human input during execution. When this happens, the run enters a “waiting” status. You can provide a webhook URL when starting a run to receive notifications when human input is needed, then respond via the API.Base URL
All API endpoints are available at:Rate Limiting
The API enforces rate limits per API key (300 requests per minute). Rate limit information is included in response headers:| Header | Description |
|---|---|
x-ratelimit-limit | Maximum requests allowed in the window |
x-ratelimit-remaining | Requests remaining in current window |
x-ratelimit-reset | Unix timestamp when the window resets |
retry-after | Seconds to wait before retrying (when rate limited) |
429 Too Many Requests response.
Authentication
All Public API requests require authentication using an API key. API keys are scoped to a team and inherit the permissions of the user who created them.API Key Format
API keys follow the formatdv_<random> (e.g., dv_abc123xyz789...). They are approximately 35 characters long.
Using Your API Key
Include your API key in theAuthorization header as a Bearer token:
Creating API Keys in the UI
- Navigate to Team Settings → API Keys in the Duvo web interface
- Click Create API Key
- Enter a descriptive name for the key (e.g., “Production Pipeline”, “CI/CD Integration”)
- Click Create
- Copy the key immediately — it will only be shown once and cannot be retrieved later
⚠️ Important: Store your API key securely. Treat it like a password. If you lose it, you’ll need to create a new one.
Managing API Keys
From the API Keys settings page, you can:- View all keys for your team, including who created them and when they were last used
- Delete keys that are no longer needed or may have been compromised
Key Security
- Keys are hashed before storage — Duvo cannot retrieve your full key
- Keys can be revoked at any time by deleting them
- The
last_used_attimestamp helps you identify unused keys - Optional expiration can be set when creating keys programmatically
Endpoints
For Assignment and Build CRUD endpoints, see Creating Assignments via API.
Runs
Start a Run
API: POST /v1/runs — see the API Reference for full details.
Get Run Status
API: GET /v1/runs/{run_id} — see the API Reference for full details.
Get Run Messages
API: GET /v1/runs/{run_id}/messages — see the API Reference for full details.
Post a Message to a Run
API: POST /v1/runs/{run_id}/messages — see the API Reference for full details.
Respond to Human Request
API: POST /v1/runs/{run_id}/human-requests/{request_id}/respond — see the API Reference for full details.
Stop a Run
API: POST /v1/runs/{run_id}/stop — see the API Reference for full details.
Sandboxes
Create a Sandbox
API: POST /v1/sandboxes — see the API Reference for full details.
Get Upload URLs for a Sandbox
API: POST /v1/sandboxes/{sandbox_id}/upload-urls — see the API Reference for full details.
Get Files in a Sandbox
API: GET /v1/sandboxes/{sandbox_id}/files — see the API Reference for full details.
Upload Files to a Sandbox
API: POST /v1/sandboxes/{sandbox_id}/files — see the API Reference for full details.
Error Handling
All errors follow a consistent format:| Code | Description |
|---|---|
| 400 | Bad Request — Invalid parameters |
| 401 | Unauthorized — Missing or invalid API key |
| 403 | Forbidden — API key doesn’t have access to this resource |
| 404 | Not Found — Resource doesn’t exist |
| 413 | Payload Too Large — File exceeds size limit |
| 429 | Too Many Requests — Rate limit exceeded |
| 500 | Internal Server Error — Something went wrong on our end |
| 502 | Bad Gateway — Upstream service unavailable |
Webhooks
Human-in-the-Loop Webhook
When you provide ahuman_request_webhook_url when starting a run, Duvo will POST to that URL whenever the Assignment needs human input.
Webhook Payload