curl --request POST \
--url https://api.erna.ai/v1/workspaces/{workspaceId}/pipelines \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"name": "<string>",
"instructions": "<string>",
"connectors": []
}
'import requests
url = "https://api.erna.ai/v1/workspaces/{workspaceId}/pipelines"
payload = {
"name": "<string>",
"instructions": "<string>",
"connectors": []
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({name: '<string>', instructions: '<string>', connectors: []})
};
fetch('https://api.erna.ai/v1/workspaces/{workspaceId}/pipelines', 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.erna.ai/v1/workspaces/{workspaceId}/pipelines",
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([
'name' => '<string>',
'instructions' => '<string>',
'connectors' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-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://api.erna.ai/v1/workspaces/{workspaceId}/pipelines"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"connectors\": []\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
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://api.erna.ai/v1/workspaces/{workspaceId}/pipelines")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"connectors\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erna.ai/v1/workspaces/{workspaceId}/pipelines")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"connectors\": []\n}"
response = http.request(request)
puts response.read_body{
"pipelineId": "<string>",
"name": "<string>",
"playbookId": "scheduling",
"status": "building",
"latestRevisionId": "<string>",
"links": {
"self": "<string>",
"runs": "<string>",
"revisions": "<string>"
},
"definition": {
"playbookId": "scheduling",
"instructions": "<string>",
"connectors": [
{
"connector": "<string>",
"connectionId": "<string>"
}
]
},
"inputJsonSchema": {},
"outputJsonSchema": {},
"latestRun": {
"runId": "<string>",
"status": "running",
"createdAt": "<string>",
"updatedAt": "<string>",
"links": {
"self": "<string>"
}
},
"error": "<unknown>"
}{
"error": "<string>",
"connector": "<string>",
"flow": "<string>",
"providerError": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>"
}
],
"message": "<string>",
"reason": "<string>",
"runId": "<string>",
"requiredActions": [
{
"id": "<string>",
"type": "connect_service",
"connector": "<string>",
"href": "<string>",
"request": {}
}
],
"billing": {
"checkoutPath": "<string>"
}
}{
"error": "<string>",
"connector": "<string>",
"flow": "<string>",
"providerError": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>"
}
],
"message": "<string>",
"reason": "<string>",
"runId": "<string>",
"requiredActions": [
{
"id": "<string>",
"type": "connect_service",
"connector": "<string>",
"href": "<string>",
"request": {}
}
],
"billing": {
"checkoutPath": "<string>"
}
}{
"error": "<string>",
"connector": "<string>",
"flow": "<string>",
"providerError": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>"
}
],
"message": "<string>",
"reason": "<string>",
"runId": "<string>",
"requiredActions": [
{
"id": "<string>",
"type": "connect_service",
"connector": "<string>",
"href": "<string>",
"request": {}
}
],
"billing": {
"checkoutPath": "<string>"
}
}Create a reusable pipeline configuration
curl --request POST \
--url https://api.erna.ai/v1/workspaces/{workspaceId}/pipelines \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"name": "<string>",
"instructions": "<string>",
"connectors": []
}
'import requests
url = "https://api.erna.ai/v1/workspaces/{workspaceId}/pipelines"
payload = {
"name": "<string>",
"instructions": "<string>",
"connectors": []
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({name: '<string>', instructions: '<string>', connectors: []})
};
fetch('https://api.erna.ai/v1/workspaces/{workspaceId}/pipelines', 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.erna.ai/v1/workspaces/{workspaceId}/pipelines",
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([
'name' => '<string>',
'instructions' => '<string>',
'connectors' => [
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"Idempotency-Key: <idempotency-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://api.erna.ai/v1/workspaces/{workspaceId}/pipelines"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"connectors\": []\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("Authorization", "Bearer <token>")
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://api.erna.ai/v1/workspaces/{workspaceId}/pipelines")
.header("Idempotency-Key", "<idempotency-key>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"connectors\": []\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erna.ai/v1/workspaces/{workspaceId}/pipelines")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"connectors\": []\n}"
response = http.request(request)
puts response.read_body{
"pipelineId": "<string>",
"name": "<string>",
"playbookId": "scheduling",
"status": "building",
"latestRevisionId": "<string>",
"links": {
"self": "<string>",
"runs": "<string>",
"revisions": "<string>"
},
"definition": {
"playbookId": "scheduling",
"instructions": "<string>",
"connectors": [
{
"connector": "<string>",
"connectionId": "<string>"
}
]
},
"inputJsonSchema": {},
"outputJsonSchema": {},
"latestRun": {
"runId": "<string>",
"status": "running",
"createdAt": "<string>",
"updatedAt": "<string>",
"links": {
"self": "<string>"
}
},
"error": "<unknown>"
}{
"error": "<string>",
"connector": "<string>",
"flow": "<string>",
"providerError": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>"
}
],
"message": "<string>",
"reason": "<string>",
"runId": "<string>",
"requiredActions": [
{
"id": "<string>",
"type": "connect_service",
"connector": "<string>",
"href": "<string>",
"request": {}
}
],
"billing": {
"checkoutPath": "<string>"
}
}{
"error": "<string>",
"connector": "<string>",
"flow": "<string>",
"providerError": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>"
}
],
"message": "<string>",
"reason": "<string>",
"runId": "<string>",
"requiredActions": [
{
"id": "<string>",
"type": "connect_service",
"connector": "<string>",
"href": "<string>",
"request": {}
}
],
"billing": {
"checkoutPath": "<string>"
}
}{
"error": "<string>",
"connector": "<string>",
"flow": "<string>",
"providerError": "<string>",
"details": [
{
"path": "<string>",
"message": "<string>"
}
],
"message": "<string>",
"reason": "<string>",
"runId": "<string>",
"requiredActions": [
{
"id": "<string>",
"type": "connect_service",
"connector": "<string>",
"href": "<string>",
"request": {}
}
],
"billing": {
"checkoutPath": "<string>"
}
}Authorizations
OAuth2 access token or API key
Headers
1"unique-idempotency-key"
Path Parameters
"ws_123"
Body
Human-readable name for this reusable pipeline.
1Playbook that defines the reusable pipeline type and run input contract.
scheduling, reporting Reusable business rules and configuration used for every run of this pipeline. For scheduling, include staff context, constraints, preferences, and recurring rules here, not the one-off dateRange.
1Stored external connections available during pipeline builds and runs.
Show child attributes
Show child attributes
Response
Pipeline accepted
Reusable pipeline id.
Human-readable reusable pipeline name.
Playbook that owns this pipeline and defines its run input contract.
scheduling, reporting Current pipeline build status. Only ready pipelines can be run, but schemas may be visible before the build completes.
building, ready, failed Latest ready executable revision id, or null while the pipeline is building.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
JSON Schema for the input object accepted by pipeline runs. Fetch pipeline detail before running and send matching data under the run request input property.
Show child attributes
Show child attributes
JSON Schema for run output once a run completes.
Show child attributes
Show child attributes
Latest pipeline run summary, if one exists. Fetch links.self to read full output or error details.
Show child attributes
Show child attributes
Public error details when status is failed.