curl --request POST \
--url https://api.erdo.ai/v1/event-pipelines \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"auth_config": {},
"auth_mode": "<string>",
"description": "<string>",
"name": "<string>",
"owner_artifact_id": "<string>",
"pipeline": [
{}
],
"purpose": "<string>",
"request_schema": {},
"sample_payload": {},
"source_kind": "<string>",
"state": "<string>",
"transform_js": "<string>"
}
'import requests
url = "https://api.erdo.ai/v1/event-pipelines"
payload = {
"auth_config": {},
"auth_mode": "<string>",
"description": "<string>",
"name": "<string>",
"owner_artifact_id": "<string>",
"pipeline": [{}],
"purpose": "<string>",
"request_schema": {},
"sample_payload": {},
"source_kind": "<string>",
"state": "<string>",
"transform_js": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
auth_config: {},
auth_mode: '<string>',
description: '<string>',
name: '<string>',
owner_artifact_id: '<string>',
pipeline: [{}],
purpose: '<string>',
request_schema: {},
sample_payload: {},
source_kind: '<string>',
state: '<string>',
transform_js: '<string>'
})
};
fetch('https://api.erdo.ai/v1/event-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.erdo.ai/v1/event-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([
'auth_config' => [
],
'auth_mode' => '<string>',
'description' => '<string>',
'name' => '<string>',
'owner_artifact_id' => '<string>',
'pipeline' => [
[
]
],
'purpose' => '<string>',
'request_schema' => [
],
'sample_payload' => [
],
'source_kind' => '<string>',
'state' => '<string>',
'transform_js' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.erdo.ai/v1/event-pipelines"
payload := strings.NewReader("{\n \"auth_config\": {},\n \"auth_mode\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"owner_artifact_id\": \"<string>\",\n \"pipeline\": [\n {}\n ],\n \"purpose\": \"<string>\",\n \"request_schema\": {},\n \"sample_payload\": {},\n \"source_kind\": \"<string>\",\n \"state\": \"<string>\",\n \"transform_js\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.erdo.ai/v1/event-pipelines")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"auth_config\": {},\n \"auth_mode\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"owner_artifact_id\": \"<string>\",\n \"pipeline\": [\n {}\n ],\n \"purpose\": \"<string>\",\n \"request_schema\": {},\n \"sample_payload\": {},\n \"source_kind\": \"<string>\",\n \"state\": \"<string>\",\n \"transform_js\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/event-pipelines")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"auth_config\": {},\n \"auth_mode\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"owner_artifact_id\": \"<string>\",\n \"pipeline\": [\n {}\n ],\n \"purpose\": \"<string>\",\n \"request_schema\": {},\n \"sample_payload\": {},\n \"source_kind\": \"<string>\",\n \"state\": \"<string>\",\n \"transform_js\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"auth_config": {},
"auth_mode": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"created_by_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_datasets": [
"<string>"
],
"created_from_thread_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"endpoint_url": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"last_updated_from_thread_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"owner_artifact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pipeline": {},
"purpose": "<string>",
"request_schema": {},
"secret": "<string>",
"slug": "<string>",
"source_kind": "<string>",
"state": "<string>",
"transform_js": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"warnings": [
"<string>"
],
"write_target_datasets": [
"<string>"
]
}{
"code": "not_found",
"details": {},
"message": "<string>"
}CreateEventPipelineAPI mirrors erdo_create_event_pipeline. Creation is where
the inbound source and auth are set; dataset.write targets are referenced by slug (a well-formed same-org slug that doesn’t exist yet is auto-created and reported in created_datasets), and the generated verification secret for the secret-bearing auth modes is returned exactly once, on this response.
curl --request POST \
--url https://api.erdo.ai/v1/event-pipelines \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"auth_config": {},
"auth_mode": "<string>",
"description": "<string>",
"name": "<string>",
"owner_artifact_id": "<string>",
"pipeline": [
{}
],
"purpose": "<string>",
"request_schema": {},
"sample_payload": {},
"source_kind": "<string>",
"state": "<string>",
"transform_js": "<string>"
}
'import requests
url = "https://api.erdo.ai/v1/event-pipelines"
payload = {
"auth_config": {},
"auth_mode": "<string>",
"description": "<string>",
"name": "<string>",
"owner_artifact_id": "<string>",
"pipeline": [{}],
"purpose": "<string>",
"request_schema": {},
"sample_payload": {},
"source_kind": "<string>",
"state": "<string>",
"transform_js": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
auth_config: {},
auth_mode: '<string>',
description: '<string>',
name: '<string>',
owner_artifact_id: '<string>',
pipeline: [{}],
purpose: '<string>',
request_schema: {},
sample_payload: {},
source_kind: '<string>',
state: '<string>',
transform_js: '<string>'
})
};
fetch('https://api.erdo.ai/v1/event-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.erdo.ai/v1/event-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([
'auth_config' => [
],
'auth_mode' => '<string>',
'description' => '<string>',
'name' => '<string>',
'owner_artifact_id' => '<string>',
'pipeline' => [
[
]
],
'purpose' => '<string>',
'request_schema' => [
],
'sample_payload' => [
],
'source_kind' => '<string>',
'state' => '<string>',
'transform_js' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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.erdo.ai/v1/event-pipelines"
payload := strings.NewReader("{\n \"auth_config\": {},\n \"auth_mode\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"owner_artifact_id\": \"<string>\",\n \"pipeline\": [\n {}\n ],\n \"purpose\": \"<string>\",\n \"request_schema\": {},\n \"sample_payload\": {},\n \"source_kind\": \"<string>\",\n \"state\": \"<string>\",\n \"transform_js\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
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.erdo.ai/v1/event-pipelines")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"auth_config\": {},\n \"auth_mode\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"owner_artifact_id\": \"<string>\",\n \"pipeline\": [\n {}\n ],\n \"purpose\": \"<string>\",\n \"request_schema\": {},\n \"sample_payload\": {},\n \"source_kind\": \"<string>\",\n \"state\": \"<string>\",\n \"transform_js\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/event-pipelines")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"auth_config\": {},\n \"auth_mode\": \"<string>\",\n \"description\": \"<string>\",\n \"name\": \"<string>\",\n \"owner_artifact_id\": \"<string>\",\n \"pipeline\": [\n {}\n ],\n \"purpose\": \"<string>\",\n \"request_schema\": {},\n \"sample_payload\": {},\n \"source_kind\": \"<string>\",\n \"state\": \"<string>\",\n \"transform_js\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"auth_config": {},
"auth_mode": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"created_by_user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_datasets": [
"<string>"
],
"created_from_thread_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"endpoint_url": "<string>",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"last_updated_from_thread_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"owner_artifact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"pipeline": {},
"purpose": "<string>",
"request_schema": {},
"secret": "<string>",
"slug": "<string>",
"source_kind": "<string>",
"state": "<string>",
"transform_js": "<string>",
"updated_at": "2023-11-07T05:31:56Z",
"warnings": [
"<string>"
],
"write_target_datasets": [
"<string>"
]
}{
"code": "not_found",
"details": {},
"message": "<string>"
}Authorizations
An Erdo API key (erdo_api_...) or scoped token (erdo_token_...).
Body
authenticated_viewer, header for shared_secret_header). For the secret-bearing modes an omitted secret is generated server-side.
keeps the stored/default action list, while any other top-level shape — explicit null, a string, an object — is rejected because it is not an action array.
Response
Success response
is stripped by toPipeline. The secret is surfaced only once, at create and rotate, via the Secret field below.
auto-created because they didn't exist yet. Populated only on the create and update responses (like Secret), empty on list/get — the creation must be visible to the caller, not silent.
user/agent-authored ones: "custom" (the default) or "page_events" (the per-page first-party analytics pipeline).
create and rotate responses (empty on list/get). It is a bearer-equivalent credential, so it is encore:"sensitive" (kept out of request traces).
save does not refuse but the caller should act on (e.g. a lead-capture pipeline whose write target diverges from the org's other lead pipelines, splitting leads across datasets). Populated only on the create and update responses (like CreatedDatasets), empty on list/get.
to (its dataset.write actions) — a convenience view of where the pipeline's output lands, parsed from Pipeline. Generic config, not tied to any use case.

