curl --request GET \
--url https://api.egp.scale.com/v5/spans/export/{export_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.egp.scale.com/v5/spans/export/{export_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.egp.scale.com/v5/spans/export/{export_id}', 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.egp.scale.com/v5/spans/export/{export_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-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"
"net/http"
"io"
)
func main() {
url := "https://api.egp.scale.com/v5/spans/export/{export_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
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.egp.scale.com/v5/spans/export/{export_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.egp.scale.com/v5/spans/export/{export_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"export_id": "<string>",
"status": "running",
"run_id": "<string>",
"rows_written": 123,
"bytes_written": 123,
"shards_completed": 123,
"shards_total": 123,
"filename": "<string>",
"signed_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"from_ts": "2023-11-07T05:31:56Z",
"to_ts": "2023-11-07T05:31:56Z",
"snapshot_ts": "2023-11-07T05:31:56Z",
"truncated": {
"reason": "<string>",
"rows_exported": 123
},
"reason": "<string>",
"guidance": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Get span export status
Retrieve the status, and when complete the result location, of an async span export.
Poll this with the export_id returned by POST /v5/spans/export. Only
exports that ran as async jobs on the ClickHouse-backed tracing service have a
pollable status; synchronous Postgres exports return their result directly and
have no export id to poll here. The lookup is proxied to the tracing service
and scoped to the caller’s account; a tracing-service failure surfaces as a 503.
curl --request GET \
--url https://api.egp.scale.com/v5/spans/export/{export_id} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.egp.scale.com/v5/spans/export/{export_id}"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api.egp.scale.com/v5/spans/export/{export_id}', 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.egp.scale.com/v5/spans/export/{export_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-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"
"net/http"
"io"
)
func main() {
url := "https://api.egp.scale.com/v5/spans/export/{export_id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
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.egp.scale.com/v5/spans/export/{export_id}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.egp.scale.com/v5/spans/export/{export_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"export_id": "<string>",
"status": "running",
"run_id": "<string>",
"rows_written": 123,
"bytes_written": 123,
"shards_completed": 123,
"shards_total": 123,
"filename": "<string>",
"signed_url": "<string>",
"expires_at": "2023-11-07T05:31:56Z",
"from_ts": "2023-11-07T05:31:56Z",
"to_ts": "2023-11-07T05:31:56Z",
"snapshot_ts": "2023-11-07T05:31:56Z",
"truncated": {
"reason": "<string>",
"rows_exported": 123
},
"reason": "<string>",
"guidance": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Headers
Path Parameters
Response
Successful Response
Status for GET /v5/spans/export/{export_id} (mirrors the sgp-traces status object).
Always returned with HTTP 200; unknown or cross-account ids arrive as
failed with reason=not_found.
The export id echoed back.
Lifecycle state.
running, succeeded, failed Temporal run id of the export workflow.
Rows written so far (running).
Bytes written so far (running).
Shards completed so far (running).
Total shards in the plan (running).
Name of the exported file (succeeded).
Pre-signed download URL (succeeded).
When the signed URL expires.
Resolved start of the window.
Resolved end of the window.
Snapshot the export read at.
Present when the export hit a budget.
Show child attributes
Show child attributes
Terminal failure reason, incl. not_found.
Human-readable, actionable next step for a failed export (failed).

