Start a run
Starts a run of the workflow.
For interactive workflows the response blocks briefly and already carries action_required.url, so no poll is needed to obtain the link. If the wait times out you receive a non-terminal status with action_required: null - poll GET /v1/runs/{id} for the link.
curl -X POST "https://api.deepvue.link/v1/workflows/123e4567-e89b-12d3-a456-426614174000/runs" \
-H "Content-Type: application/json" \
-H "client-id: YOUR_API_KEY" \
-H "x-api-key: YOUR_API_KEY" \
-d '{
"reference_id": "user_123",
"input": {
"pan_number": "ABCDE1234F",
"mobile": "9876543210"
},
"redirect_uri": "https://your-app.example.com/kyc/done"
}'
import requests
import json
url = "https://api.deepvue.link/v1/workflows/123e4567-e89b-12d3-a456-426614174000/runs"
headers = {
"Content-Type": "application/json",
"client-id": "YOUR_API_KEY",
"x-api-key": "YOUR_API_KEY"
}
data = {
"reference_id": "user_123",
"input": {
"pan_number": "ABCDE1234F",
"mobile": "9876543210"
},
"redirect_uri": "https://your-app.example.com/kyc/done"
}
response = requests.post(url, headers=headers, json=data)
print(response.json())
const response = await fetch("https://api.deepvue.link/v1/workflows/123e4567-e89b-12d3-a456-426614174000/runs", {
method: "POST",
headers: {
"Content-Type": "application/json",
"client-id": "YOUR_API_KEY",
"x-api-key": "YOUR_API_KEY"
},
body: JSON.stringify({
"reference_id": "user_123",
"input": {
"pan_number": "ABCDE1234F",
"mobile": "9876543210"
},
"redirect_uri": "https://your-app.example.com/kyc/done"
})
});
const data = await response.json();
console.log(data);
package main
import (
"fmt"
"net/http"
"bytes"
"encoding/json"
)
func main() {
data := []byte(`{
"reference_id": "user_123",
"input": {
"pan_number": "ABCDE1234F",
"mobile": "9876543210"
},
"redirect_uri": "https://your-app.example.com/kyc/done"
}`)
req, err := http.NewRequest("POST", "https://api.deepvue.link/v1/workflows/123e4567-e89b-12d3-a456-426614174000/runs", bytes.NewBuffer(data))
if err != nil {
panic(err)
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("client-id", "YOUR_API_KEY")
req.Header.Set("x-api-key", "YOUR_API_KEY")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println("Response Status:", resp.Status)
}
require 'net/http'
require 'json'
uri = URI('https://api.deepvue.link/v1/workflows/123e4567-e89b-12d3-a456-426614174000/runs')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
request = Net::HTTP::Post.new(uri)
request['Content-Type'] = 'application/json'
request['client-id'] = 'YOUR_API_KEY'
request['x-api-key'] = 'YOUR_API_KEY'
request.body = '{
"reference_id": "user_123",
"input": {
"pan_number": "ABCDE1234F",
"mobile": "9876543210"
},
"redirect_uri": "https://your-app.example.com/kyc/done"
}'
response = http.request(request)
puts response.body
{
"id": "1e30a341-cb3b-48b8-9992-99a1b436b8d9",
"workflow_id": "e97e7d78-4ceb-4283-8080-5c5e0b72ddac",
"reference_id": "user_123",
"status": "in_progress",
"started_at": "2026-07-30T09:14:02Z",
"completed_at": null,
"action_required": {
"type": "customer_input",
"signal_name": "selfie_captured",
"url": "https://hosted.deepvue.link/h/eyJ0eXAi..."
},
"error": null
}
{
"error": "reference_id is required"
}
{
"error": "insufficient balance",
"code": "INSUFFICIENT_BALANCE"
}
{
"error": "missing credentials: send client-id + x-api-key headers"
}
{
"error": "invalid Deepvue credentials"
}
{
"error": "Not Found",
"message": "The requested resource was not found",
"code": 404
}
/v1/workflows/{id}/runsTarget server for requests. Edit to use your own host.
Your Deepvue client identifier.
Your Deepvue API key. Secret - keep it server-side.
The workflow's UUID.
The media type of the request body
Your identifier for the person or entity.
Trigger data; keys are per-workflow.
Where to send the end user once the run is terminal. run_id and status are appended. Validated against your tenant's allowlist at request time.
Request Preview
Response
Response will appear here after sending the request
Authentication
API Key for authentication. Your Deepvue client identifier.
API Key for authentication. Your Deepvue API key. Secret - keep it server-side.
Path Parameters
The workflow's UUID.
Body
Trigger data; keys are per-workflow.
Where to send the end user once the run is terminal. run_id and status are appended. Validated against your tenant's allowlist at request time.