Trace one row through the enrichments
curl --request POST \
--url https://api.example.com/enrichments/explain \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"row": {
"cos_namespace": "team-a",
"cos_cluster_name": "d01"
}
}
'import requests
url = "https://api.example.com/enrichments/explain"
payload = { "row": {
"cos_namespace": "team-a",
"cos_cluster_name": "d01"
} }
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({row: {cos_namespace: 'team-a', cos_cluster_name: 'd01'}})
};
fetch('https://api.example.com/enrichments/explain', 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.example.com/enrichments/explain",
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([
'row' => [
'cos_namespace' => 'team-a',
'cos_cluster_name' => 'd01'
]
]),
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.example.com/enrichments/explain"
payload := strings.NewReader("{\n \"row\": {\n \"cos_namespace\": \"team-a\",\n \"cos_cluster_name\": \"d01\"\n }\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.example.com/enrichments/explain")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"row\": {\n \"cos_namespace\": \"team-a\",\n \"cos_cluster_name\": \"d01\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/enrichments/explain")
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 \"row\": {\n \"cos_namespace\": \"team-a\",\n \"cos_cluster_name\": \"d01\"\n }\n}"
response = http.request(request)
puts response.read_body{
"steps": [
{
"mapping": "<string>",
"keyField": "<string>",
"key": "<string>",
"hit": true,
"allocations": [
{
"weight": 123,
"values": {}
}
],
"reason": "no key",
"metric": {
"table": "<string>",
"dateColumn": "<string>",
"metricColumn": "<string>",
"propagates": [
"<string>"
]
}
}
],
"rows": [
{
"weight": 123,
"values": {}
}
],
"warnings": [
"<string>"
],
"published": {
"steps": [
{
"mapping": "<string>",
"keyField": "<string>",
"key": "<string>",
"hit": true,
"allocations": [
{
"weight": 123,
"values": {}
}
],
"reason": "no key",
"metric": {
"table": "<string>",
"dateColumn": "<string>",
"metricColumn": "<string>",
"propagates": [
"<string>"
]
}
}
],
"rows": [
{
"weight": 123,
"values": {}
}
],
"warnings": [
"<string>"
]
}
}{
"errors": [
"<string>"
]
}{
"error": "<string>"
}{
"error": "ADMIN_REQUIRED"
}Enrichments API
Trace one row through the enrichments
Runs one billed row through the live set with the drafts applied. published is the same trace on the live set alone and is present when drafts exist. Org admin only.
POST
/
enrichments
/
explain
Trace one row through the enrichments
curl --request POST \
--url https://api.example.com/enrichments/explain \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"row": {
"cos_namespace": "team-a",
"cos_cluster_name": "d01"
}
}
'import requests
url = "https://api.example.com/enrichments/explain"
payload = { "row": {
"cos_namespace": "team-a",
"cos_cluster_name": "d01"
} }
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({row: {cos_namespace: 'team-a', cos_cluster_name: 'd01'}})
};
fetch('https://api.example.com/enrichments/explain', 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.example.com/enrichments/explain",
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([
'row' => [
'cos_namespace' => 'team-a',
'cos_cluster_name' => 'd01'
]
]),
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.example.com/enrichments/explain"
payload := strings.NewReader("{\n \"row\": {\n \"cos_namespace\": \"team-a\",\n \"cos_cluster_name\": \"d01\"\n }\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.example.com/enrichments/explain")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"row\": {\n \"cos_namespace\": \"team-a\",\n \"cos_cluster_name\": \"d01\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/enrichments/explain")
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 \"row\": {\n \"cos_namespace\": \"team-a\",\n \"cos_cluster_name\": \"d01\"\n }\n}"
response = http.request(request)
puts response.read_body{
"steps": [
{
"mapping": "<string>",
"keyField": "<string>",
"key": "<string>",
"hit": true,
"allocations": [
{
"weight": 123,
"values": {}
}
],
"reason": "no key",
"metric": {
"table": "<string>",
"dateColumn": "<string>",
"metricColumn": "<string>",
"propagates": [
"<string>"
]
}
}
],
"rows": [
{
"weight": 123,
"values": {}
}
],
"warnings": [
"<string>"
],
"published": {
"steps": [
{
"mapping": "<string>",
"keyField": "<string>",
"key": "<string>",
"hit": true,
"allocations": [
{
"weight": 123,
"values": {}
}
],
"reason": "no key",
"metric": {
"table": "<string>",
"dateColumn": "<string>",
"metricColumn": "<string>",
"propagates": [
"<string>"
]
}
}
],
"rows": [
{
"weight": 123,
"values": {}
}
],
"warnings": [
"<string>"
]
}
}{
"errors": [
"<string>"
]
}{
"error": "<string>"
}{
"error": "ADMIN_REQUIRED"
}Authorizations
Send Authorization: Bearer <credential> using either a Clerk session JWT or a Clerk API key (ak_*). API keys may identify a user (user_*) or organization (org_*) principal and are generated in the Clerk Dashboard under API keys.
Body
application/json
Column name to value for the billed row to trace.
Show child attributes
Show child attributes
Last modified on October 12, 2026
Was this page helpful?
