curl --request GET \
--url https://api.erdo.ai/v1/managed-organization-performance \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.erdo.ai/v1/managed-organization-performance"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.erdo.ai/v1/managed-organization-performance', 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/managed-organization-performance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.erdo.ai/v1/managed-organization-performance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.erdo.ai/v1/managed-organization-performance")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/managed-organization-performance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"from": "<string>",
"message": "<string>",
"organizations": [
{
"campaigns": [
{
"account_id": "<string>",
"attribution": "<string>",
"campaign_id": "<string>",
"campaign_name": "<string>",
"clicks": 123,
"conversions": 123,
"date": "<string>",
"evidence": "<string>",
"impressions": 123,
"provider": "<string>",
"spend": 123
}
],
"coverage": [
{
"dataset": "<string>",
"metrics": [
"<string>"
],
"purpose": "<string>",
"reason": "<string>"
}
],
"days": [
{
"clicks": 123,
"conversions": 123,
"date": "<string>",
"form_starts": 123,
"impressions": 123,
"leads_captured": 123,
"leads_on_page": 123,
"spend": 123,
"visits": 123
}
],
"organization_name": "<string>",
"organization_slug": "<string>"
}
],
"timezone": "<string>",
"to": "<string>"
}{
"code": "not_found",
"details": {},
"message": "<string>"
}ManagerPerformanceAPI mirrors erdo_get_manager_performance.
Daily spend, impressions, clicks, provider conversions, page visits, form starts, on-page lead events and captured leads for one organization or for every client organization this account manages, plus per-campaign spend where the source carries a campaign id. A measurement whose source could not be read is null with an entry in `coverage` saying which source and why, never zero.
curl --request GET \
--url https://api.erdo.ai/v1/managed-organization-performance \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.erdo.ai/v1/managed-organization-performance"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.erdo.ai/v1/managed-organization-performance', 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/managed-organization-performance",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.erdo.ai/v1/managed-organization-performance"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.erdo.ai/v1/managed-organization-performance")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/managed-organization-performance")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"from": "<string>",
"message": "<string>",
"organizations": [
{
"campaigns": [
{
"account_id": "<string>",
"attribution": "<string>",
"campaign_id": "<string>",
"campaign_name": "<string>",
"clicks": 123,
"conversions": 123,
"date": "<string>",
"evidence": "<string>",
"impressions": 123,
"provider": "<string>",
"spend": 123
}
],
"coverage": [
{
"dataset": "<string>",
"metrics": [
"<string>"
],
"purpose": "<string>",
"reason": "<string>"
}
],
"days": [
{
"clicks": 123,
"conversions": 123,
"date": "<string>",
"form_starts": 123,
"impressions": 123,
"leads_captured": 123,
"leads_on_page": 123,
"spend": 123,
"visits": 123
}
],
"organization_name": "<string>",
"organization_slug": "<string>"
}
],
"timezone": "<string>",
"to": "<string>"
}{
"code": "not_found",
"details": {},
"message": "<string>"
}Authorizations
An Erdo API key (erdo_api_...) or scoped token (erdo_token_...).
Query Parameters
OrganizationSlug names one organization. Omitting it reads every client organization the caller's account manages.
Response
Success response
Asking for every client as an organization that manages nobody is the case it exists for.
Show child attributes
Show child attributes
It is always "UTC" today, and is stated rather than assumed so a consumer can tell if that ever changes.

