Add Workflow Agent Files
curl --request POST \
--url https://odyssey.asteroid.ai/agents/v2/agents/{agentId}/workflows/{workflowId}/agent-files \
--header 'Content-Type: multipart/form-data' \
--header 'X-Asteroid-Agents-Api-Key: <api-key>' \
--form 'files=<string>' \
--form files.items='@example-file'import requests
url = "https://odyssey.asteroid.ai/agents/v2/agents/{agentId}/workflows/{workflowId}/agent-files"
files = { "files.items": ("example-file", open("example-file", "rb")) }
payload = { "files": "<string>" }
headers = {"X-Asteroid-Agents-Api-Key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('files', '<string>');
form.append('files.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {'X-Asteroid-Agents-Api-Key': '<api-key>'}};
options.body = form;
fetch('https://odyssey.asteroid.ai/agents/v2/agents/{agentId}/workflows/{workflowId}/agent-files', 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/agents/{agentId}/workflows/{workflowId}/agent-files",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"X-Asteroid-Agents-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/agents/{agentId}/workflows/{workflowId}/agent-files"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Asteroid-Agents-Api-Key", "<api-key>")
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/agents/{agentId}/workflows/{workflowId}/agent-files")
.header("X-Asteroid-Agents-Api-Key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://odyssey.asteroid.ai/agents/v2/agents/{agentId}/workflows/{workflowId}/agent-files")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Asteroid-Agents-Api-Key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"files": [
{
"agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"createdAt": "2023-11-07T05:31:56Z",
"downloadUrl": "<string>",
"fileName": "<string>",
"filePath": "<string>",
"fileSize": 123,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"isFrozen": true,
"updatedAt": "2023-11-07T05:31:56Z",
"version": 123,
"checksum": "<string>",
"lastModifiedByExecutionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"mimeType": "<string>"
}
],
"workflowId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}"Invalid file upload request.""Workflow not found."Files
Add Workflow Agent Files
Add one or more agent files to a workflow version. Workflow versions are immutable, so this creates a new workflow version derived from workflowId with the files added, and returns the new version’s id as workflowId in the response. The original version is untouched. The uploaded files only take effect for new executions once the version containing them is live: publish the returned version (POST /agents//workflows//publish) to make it the agent’s published version, or execute it directly by id. Chain further file changes onto the returned workflowId.
POST
/
agents
/
{agentId}
/
workflows
/
{workflowId}
/
agent-files
Add Workflow Agent Files
curl --request POST \
--url https://odyssey.asteroid.ai/agents/v2/agents/{agentId}/workflows/{workflowId}/agent-files \
--header 'Content-Type: multipart/form-data' \
--header 'X-Asteroid-Agents-Api-Key: <api-key>' \
--form 'files=<string>' \
--form files.items='@example-file'import requests
url = "https://odyssey.asteroid.ai/agents/v2/agents/{agentId}/workflows/{workflowId}/agent-files"
files = { "files.items": ("example-file", open("example-file", "rb")) }
payload = { "files": "<string>" }
headers = {"X-Asteroid-Agents-Api-Key": "<api-key>"}
response = requests.post(url, data=payload, files=files, headers=headers)
print(response.text)const form = new FormData();
form.append('files', '<string>');
form.append('files.items', '{
"fileName": "example-file"
}');
const options = {method: 'POST', headers: {'X-Asteroid-Agents-Api-Key': '<api-key>'}};
options.body = form;
fetch('https://odyssey.asteroid.ai/agents/v2/agents/{agentId}/workflows/{workflowId}/agent-files', 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/agents/{agentId}/workflows/{workflowId}/agent-files",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data",
"X-Asteroid-Agents-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/agents/{agentId}/workflows/{workflowId}/agent-files"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-Asteroid-Agents-Api-Key", "<api-key>")
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/agents/{agentId}/workflows/{workflowId}/agent-files")
.header("X-Asteroid-Agents-Api-Key", "<api-key>")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://odyssey.asteroid.ai/agents/v2/agents/{agentId}/workflows/{workflowId}/agent-files")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-Asteroid-Agents-Api-Key"] = '<api-key>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files\"\r\n\r\n<string>\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"files.items\"; filename=\"example-file\"\r\nContent-Type: application/octet-stream\r\n\r\n{\r\n \"fileName\": \"example-file\"\r\n}\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"files": [
{
"agentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"createdAt": "2023-11-07T05:31:56Z",
"downloadUrl": "<string>",
"fileName": "<string>",
"filePath": "<string>",
"fileSize": 123,
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"isFrozen": true,
"updatedAt": "2023-11-07T05:31:56Z",
"version": 123,
"checksum": "<string>",
"lastModifiedByExecutionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"mimeType": "<string>"
}
],
"workflowId": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}"Invalid file upload request.""Workflow not found."Authorizations
Body
multipart/form-data
Response
The request has succeeded.
⌘I

