curl --request POST \
--url https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"agentProfileId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agentProfilePoolId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dynamicData": {},
"executionOptions": {
"softTimeoutMins": 2,
"variantKey": "<string>"
},
"inputs": {},
"metadata": {},
"tempFiles": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"timeoutSeconds": 25,
"version": 123
}
'import requests
url = "https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync"
payload = {
"agentProfileId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agentProfilePoolId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dynamicData": {},
"executionOptions": {
"softTimeoutMins": 2,
"variantKey": "<string>"
},
"inputs": {},
"metadata": {},
"tempFiles": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"timeoutSeconds": 25,
"version": 123
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
agentProfileId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
agentProfilePoolId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
dynamicData: {},
executionOptions: {softTimeoutMins: 2, variantKey: '<string>'},
inputs: {},
metadata: {},
tempFiles: [{id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', name: '<string>'}],
timeoutSeconds: 25,
version: 123
})
};
fetch('https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'agentProfileId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'agentProfilePoolId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'dynamicData' => [
],
'executionOptions' => [
'softTimeoutMins' => 2,
'variantKey' => '<string>'
],
'inputs' => [
],
'metadata' => [
],
'tempFiles' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'name' => '<string>'
]
],
'timeoutSeconds' => 25,
'version' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync"
payload := strings.NewReader("{\n \"agentProfileId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agentProfilePoolId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"dynamicData\": {},\n \"executionOptions\": {\n \"softTimeoutMins\": 2,\n \"variantKey\": \"<string>\"\n },\n \"inputs\": {},\n \"metadata\": {},\n \"tempFiles\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"timeoutSeconds\": 25,\n \"version\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"agentProfileId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agentProfilePoolId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"dynamicData\": {},\n \"executionOptions\": {\n \"softTimeoutMins\": 2,\n \"variantKey\": \"<string>\"\n },\n \"inputs\": {},\n \"metadata\": {},\n \"tempFiles\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"timeoutSeconds\": 25,\n \"version\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"agentProfileId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agentProfilePoolId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"dynamicData\": {},\n \"executionOptions\": {\n \"softTimeoutMins\": 2,\n \"variantKey\": \"<string>\"\n },\n \"inputs\": {},\n \"metadata\": {},\n \"tempFiles\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"timeoutSeconds\": 25,\n \"version\": 123\n}"
response = http.request(request)
puts response.read_body{
"executionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "queued",
"executionResult": {
"createdAt": "2023-11-07T05:31:56Z",
"executionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome": "<string>",
"reasoning": "<string>",
"result": "<unknown>"
}
}{
"executionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "queued",
"executionResult": {
"createdAt": "2023-11-07T05:31:56Z",
"executionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome": "<string>",
"reasoning": "<string>",
"result": "<unknown>"
}
}{
"code": 123,
"message": "<string>"
}Execute workflow and wait for the result
Start an execution of the workflow and wait for it to finish, up to timeoutSeconds. Returns 200 with the result once the execution completes, fails or is cancelled. Returns 202 when it has not finished in time, or when it is paused or awaiting confirmation. The execution keeps running; follow it with GET /executions/. This call is not idempotent: on a gateway timeout, look the execution up instead of retrying.
curl --request POST \
--url https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"agentProfileId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agentProfilePoolId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dynamicData": {},
"executionOptions": {
"softTimeoutMins": 2,
"variantKey": "<string>"
},
"inputs": {},
"metadata": {},
"tempFiles": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"timeoutSeconds": 25,
"version": 123
}
'import requests
url = "https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync"
payload = {
"agentProfileId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"agentProfilePoolId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"dynamicData": {},
"executionOptions": {
"softTimeoutMins": 2,
"variantKey": "<string>"
},
"inputs": {},
"metadata": {},
"tempFiles": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
],
"timeoutSeconds": 25,
"version": 123
}
headers = {
"X-Api-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-Api-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
agentProfileId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
agentProfilePoolId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
dynamicData: {},
executionOptions: {softTimeoutMins: 2, variantKey: '<string>'},
inputs: {},
metadata: {},
tempFiles: [{id: '3c90c3cc-0d44-4b50-8888-8dd25736052a', name: '<string>'}],
timeoutSeconds: 25,
version: 123
})
};
fetch('https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'agentProfileId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'agentProfilePoolId' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'dynamicData' => [
],
'executionOptions' => [
'softTimeoutMins' => 2,
'variantKey' => '<string>'
],
'inputs' => [
],
'metadata' => [
],
'tempFiles' => [
[
'id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'name' => '<string>'
]
],
'timeoutSeconds' => 25,
'version' => 123
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-Api-Key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync"
payload := strings.NewReader("{\n \"agentProfileId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agentProfilePoolId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"dynamicData\": {},\n \"executionOptions\": {\n \"softTimeoutMins\": 2,\n \"variantKey\": \"<string>\"\n },\n \"inputs\": {},\n \"metadata\": {},\n \"tempFiles\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"timeoutSeconds\": 25,\n \"version\": 123\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Api-Key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"agentProfileId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agentProfilePoolId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"dynamicData\": {},\n \"executionOptions\": {\n \"softTimeoutMins\": 2,\n \"variantKey\": \"<string>\"\n },\n \"inputs\": {},\n \"metadata\": {},\n \"tempFiles\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"timeoutSeconds\": 25,\n \"version\": 123\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://odyssey.asteroid.ai/agents/v2/workflows/{workflowId}/execute/sync")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Api-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"agentProfileId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"agentProfilePoolId\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"dynamicData\": {},\n \"executionOptions\": {\n \"softTimeoutMins\": 2,\n \"variantKey\": \"<string>\"\n },\n \"inputs\": {},\n \"metadata\": {},\n \"tempFiles\": [\n {\n \"id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"name\": \"<string>\"\n }\n ],\n \"timeoutSeconds\": 25,\n \"version\": 123\n}"
response = http.request(request)
puts response.read_body{
"executionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "queued",
"executionResult": {
"createdAt": "2023-11-07T05:31:56Z",
"executionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome": "<string>",
"reasoning": "<string>",
"result": "<unknown>"
}
}{
"executionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "queued",
"executionResult": {
"createdAt": "2023-11-07T05:31:56Z",
"executionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"outcome": "<string>",
"reasoning": "<string>",
"result": "<unknown>"
}
}{
"code": 123,
"message": "<string>"
}Authorizations
Path Parameters
The ID of the workflow to execute
Body
Execution request parameters
Request to execute a workflow and wait for the result
The ID of the agent profile to use for this execution. Mutually exclusive with agentProfilePoolId.
The ID of the agent profile pool to select a profile from. Mutually exclusive with agentProfileId.
Deprecated: Use 'inputs' instead. Inputs to be merged into the placeholders defined in prompts
Per-execution runtime options that override or extend the workflow's default settings.
Show child attributes
Show child attributes
Inputs to be merged into the placeholders defined in prompts
Optional metadata key-value pairs (string keys and string values) for organizing and filtering executions
What to do when the execution cannot start right now because the organisation is at its concurrency limit or every profile in the pool is in use. "reject" (the default) fails the request as today. "queue" accepts it: the execution is created in the "queued" status under the returned ID and starts automatically, oldest first, as capacity frees. Temp files cannot be queued.
reject, queue Array of temporary files to attach to the execution. Must have been pre-uploaded using the stage file endpoint
Show child attributes
Show child attributes
Seconds to wait for the execution to finish before returning 202. Defaults to 25.
1 <= x <= 25The version of the workflow to execute. If not provided, the published version is used.
Response
The request has succeeded.
Response from executing a workflow and waiting for the result
The ID of the newly created execution
The execution's status when the call returned: terminal on 200, the current status on 202
queued, starting, running, paused, awaiting_confirmation, completed, cancelled, failed, paused_by_agent Outcome, reasoning and result data. Present on 200 when the execution recorded a result.
Show child attributes
Show child attributes

