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,
"resume_after": "<string>"
},
"staged_file": {
"key": "<string>",
"size_bytes": 123,
"sha256": "<string>"
},
"reason": "<string>",
"guidance": "<string>"
}{
"detail": "<string>",
"error_code": "TRACES_SERVICE_CONFIGURATION_ERROR"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"detail": "<string>",
"error_code": "TRACES_SERVICE_CONFIGURATION_ERROR"
}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 tracing service have a pollable status;
synchronous exports from the legacy trace store 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,
"resume_after": "<string>"
},
"staged_file": {
"key": "<string>",
"size_bytes": 123,
"sha256": "<string>"
},
"reason": "<string>",
"guidance": "<string>"
}{
"detail": "<string>",
"error_code": "TRACES_SERVICE_CONFIGURATION_ERROR"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}{
"detail": "<string>",
"error_code": "TRACES_SERVICE_CONFIGURATION_ERROR"
}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.
Terminal failure reason (failed): not_found (unknown or cross-account export id, or a result that expired or predates the object-storage cutover), invalid_input (the request was rejected, and guidance names what to change), resource_exhausted, timed_out, resume_cursor_stale (the resume cursor does not match how this export is ordered), canceled, terminated, failed (no cause recorded), or internal (server-side fault).

