Get a workflow
curl --request GET \
--url https://api.ingestly.ai/workflows/{workflowId} \
--header 'X-Api-Key: <api-key>'import requests
url = "https://api.ingestly.ai/workflows/{workflowId}"
headers = {"X-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Api-Key': '<api-key>'}};
fetch('https://api.ingestly.ai/workflows/{workflowId}', 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://api.ingestly.ai/workflows/{workflowId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.ingestly.ai/workflows/{workflowId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-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.get("https://api.ingestly.ai/workflows/{workflowId}")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ingestly.ai/workflows/{workflowId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "0199a6c1-9e2f-7c3d-8a4b-1c2d3e4f5a6b",
"name": "Purchase orders",
"environment": "prod",
"isEnabled": true,
"triggerFormats": [
"pdf",
"png",
"jpeg"
],
"createdOn": "2026-09-14T09:12:44+00:00",
"updatedOn": "2026-10-01T16:30:02+00:00"
}{
"status": 123,
"title": "<string>",
"type": "<string>",
"instance": "<string>",
"traceId": "<string>",
"detail": "<string>",
"errors": {}
}{
"status": 123,
"title": "<string>",
"type": "<string>",
"instance": "<string>",
"traceId": "<string>",
"detail": "<string>",
"errors": {}
}{
"status": 123,
"title": "<string>",
"type": "<string>",
"instance": "<string>",
"traceId": "<string>",
"detail": "<string>",
"errors": {}
}{
"status": 123,
"title": "<string>",
"type": "<string>",
"instance": "<string>",
"traceId": "<string>",
"detail": "<string>",
"errors": {}
}{
"status": 123,
"title": "<string>",
"type": "<string>",
"instance": "<string>",
"traceId": "<string>",
"detail": "<string>",
"errors": {}
}{
"status": 123,
"title": "<string>",
"type": "<string>",
"instance": "<string>",
"traceId": "<string>",
"detail": "<string>",
"errors": {}
}Workflows
Get a workflow
Returns a workflow and the document formats its API trigger accepts. triggerFormats is empty when the workflow has no API trigger, and the trigger then rejects every document. triggerFormats always reflects the current graph, while updatedOn moves only when the workflow itself changes (its name or enabled state), not when only its graph is edited.
GET
/
workflows
/
{workflowId}
Get a workflow
curl --request GET \
--url https://api.ingestly.ai/workflows/{workflowId} \
--header 'X-Api-Key: <api-key>'import requests
url = "https://api.ingestly.ai/workflows/{workflowId}"
headers = {"X-Api-Key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-Api-Key': '<api-key>'}};
fetch('https://api.ingestly.ai/workflows/{workflowId}', 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://api.ingestly.ai/workflows/{workflowId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://api.ingestly.ai/workflows/{workflowId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-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.get("https://api.ingestly.ai/workflows/{workflowId}")
.header("X-Api-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ingestly.ai/workflows/{workflowId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-Api-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"id": "0199a6c1-9e2f-7c3d-8a4b-1c2d3e4f5a6b",
"name": "Purchase orders",
"environment": "prod",
"isEnabled": true,
"triggerFormats": [
"pdf",
"png",
"jpeg"
],
"createdOn": "2026-09-14T09:12:44+00:00",
"updatedOn": "2026-10-01T16:30:02+00:00"
}{
"status": 123,
"title": "<string>",
"type": "<string>",
"instance": "<string>",
"traceId": "<string>",
"detail": "<string>",
"errors": {}
}{
"status": 123,
"title": "<string>",
"type": "<string>",
"instance": "<string>",
"traceId": "<string>",
"detail": "<string>",
"errors": {}
}{
"status": 123,
"title": "<string>",
"type": "<string>",
"instance": "<string>",
"traceId": "<string>",
"detail": "<string>",
"errors": {}
}{
"status": 123,
"title": "<string>",
"type": "<string>",
"instance": "<string>",
"traceId": "<string>",
"detail": "<string>",
"errors": {}
}{
"status": 123,
"title": "<string>",
"type": "<string>",
"instance": "<string>",
"traceId": "<string>",
"detail": "<string>",
"errors": {}
}{
"status": 123,
"title": "<string>",
"type": "<string>",
"instance": "<string>",
"traceId": "<string>",
"detail": "<string>",
"errors": {}
}Requires the
workflows:read scope. Check triggerFormats before you trigger the workflow: a document in any other format is rejected with 400 Bad Request.
triggerFormats always reflects the workflow’s current graph. updatedOn reflects changes to the workflow itself, such as its name or enabled state, and does not move when only its graph is edited.Authorizations
Path Parameters
Response
OK
Example:
"0199a6c1-9e2f-7c3d-8a4b-1c2d3e4f5a6b"
Example:
"Purchase orders"
Available options:
dev, prod Example:
"prod"
Example:
true
Available options:
pdf, docx, xlsx, pptx, csv, png, jpeg, tiff, gif, webp Example:
["pdf", "png", "jpeg"]
Example:
"2026-09-14T09:12:44+00:00"
Example:
"2026-10-01T16:30:02+00:00"