curl --request POST \
--url https://pillarforge.corepillar.ai/api/v1/traces \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/x-protobuf' \
--data '<string>'import requests
url = "https://pillarforge.corepillar.ai/api/v1/traces"
payload = "<string>"
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/x-protobuf"
}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/x-protobuf'},
body: '<string>'
};
fetch('https://pillarforge.corepillar.ai/api/v1/traces', 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://pillarforge.corepillar.ai/api/v1/traces",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "<string>",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/x-protobuf"
],
]);
$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://pillarforge.corepillar.ai/api/v1/traces"
payload := strings.NewReader("<string>")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/x-protobuf")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://pillarforge.corepillar.ai/api/v1/traces")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/x-protobuf")
.body("<string>")
.asString();require 'uri'
require 'net/http'
url = URI("https://pillarforge.corepillar.ai/api/v1/traces")
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/x-protobuf'
request.body = "<string>"
response = http.request(request)
puts response.read_body{}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>",
"details": {}
}
}Export OTLP traces
OpenTelemetry OTLP/HTTP trace receiver. Point an exporter’s base endpoint at https://pillarforge.corepillar.ai/api (exporters append /v1/traces) and send the tracing key as Authorization: Bearer ....
Accepts protobuf or JSON. gRPC isn’t supported. Spans are converted to AgentHub spans (kind, model, tokens, cost from the model catalog, input and output), merged with earlier exports of the same trace, and stitched across fragments of one session. Responds with an OTLP ExportTraceServiceResponse, not the { data } envelope.
See OpenTelemetry (OTLP).
curl --request POST \
--url https://pillarforge.corepillar.ai/api/v1/traces \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/x-protobuf' \
--data '<string>'import requests
url = "https://pillarforge.corepillar.ai/api/v1/traces"
payload = "<string>"
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/x-protobuf"
}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/x-protobuf'},
body: '<string>'
};
fetch('https://pillarforge.corepillar.ai/api/v1/traces', 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://pillarforge.corepillar.ai/api/v1/traces",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "<string>",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/x-protobuf"
],
]);
$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://pillarforge.corepillar.ai/api/v1/traces"
payload := strings.NewReader("<string>")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/x-protobuf")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://pillarforge.corepillar.ai/api/v1/traces")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/x-protobuf")
.body("<string>")
.asString();require 'uri'
require 'net/http'
url = URI("https://pillarforge.corepillar.ai/api/v1/traces")
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/x-protobuf'
request.body = "<string>"
response = http.request(request)
puts response.read_body{}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>",
"details": {}
}
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "<string>",
"details": {}
}
}Authorizations
Project tracing key, from Settings → Tracing keys. Authorization: Bearer tk_live_.... The word Bearer is case-sensitive.
Headers
identity, gzip, deflate Body
An OTLP ExportTraceServiceRequest (or the metrics/logs equivalent). Optionally gzip or deflate compressed; up to 32 MiB decompressed.
The body is of type file.
Response
OTLP ExportTraceServiceResponse, in the request's encoding. Empty on full success; partialSuccess when some spans were dropped.
Show child attributes
Show child attributes