curl --request POST \
--url https://api.arize.com/v2/spans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"project_id": "my-project",
"start_time": "2024-01-01T00:00:00Z",
"end_time": "2024-01-02T00:00:00Z",
"filter": "status_code = 'ERROR'"
}
EOFimport requests
url = "https://api.arize.com/v2/spans"
payload = {
"project_id": "my-project",
"start_time": "2024-01-01T00:00:00Z",
"end_time": "2024-01-02T00:00:00Z",
"filter": "status_code = 'ERROR'"
}
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({
project_id: 'my-project',
start_time: '2024-01-01T00:00:00Z',
end_time: '2024-01-02T00:00:00Z',
filter: 'status_code = \'ERROR\''
})
};
fetch('https://api.arize.com/v2/spans', 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.arize.com/v2/spans",
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([
'project_id' => 'my-project',
'start_time' => '2024-01-01T00:00:00Z',
'end_time' => '2024-01-02T00:00:00Z',
'filter' => 'status_code = \'ERROR\''
]),
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.arize.com/v2/spans"
payload := strings.NewReader("{\n \"project_id\": \"my-project\",\n \"start_time\": \"2024-01-01T00:00:00Z\",\n \"end_time\": \"2024-01-02T00:00:00Z\",\n \"filter\": \"status_code = 'ERROR'\"\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.arize.com/v2/spans")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"project_id\": \"my-project\",\n \"start_time\": \"2024-01-01T00:00:00Z\",\n \"end_time\": \"2024-01-02T00:00:00Z\",\n \"filter\": \"status_code = 'ERROR'\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arize.com/v2/spans")
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 \"project_id\": \"my-project\",\n \"start_time\": \"2024-01-01T00:00:00Z\",\n \"end_time\": \"2024-01-02T00:00:00Z\",\n \"filter\": \"status_code = 'ERROR'\"\n}"
response = http.request(request)
puts response.read_body{
"spans": [
{
"name": "llm.chat.completion",
"context": {
"trace_id": "trace_001",
"span_id": "span_001"
},
"kind": "LLM",
"parent_id": "span_000",
"status_code": "OK",
"start_time": "2024-01-01T12:00:00Z",
"end_time": "2024-01-01T12:00:01Z",
"attributes": {
"llm.model_name": "gpt-4o",
"llm.token_count.prompt": 150,
"llm.token_count.completion": 50
}
}
],
"pagination": {
"next_cursor": "cursor_12345",
"has_more": true
}
}{
"status": 400,
"title": "Invalid request parameters",
"detail": "The 'name' field is required and must be a non-empty string.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#invalid-request"
}{
"status": 401,
"title": "Authentication required",
"detail": "You must be authenticated to access this resource.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#authentication-required"
}{
"status": 403,
"title": "Access forbidden",
"detail": "You do not have permission to access this resource.",
"instance": "/resource/12345",
"type": "https://arize.com/docs/ax/rest-reference/errors#access-forbidden"
}{
"status": 404,
"title": "Resource not found",
"detail": "The requested resource with ID '12345' was not found.",
"instance": "/resource/12345",
"type": "https://arize.com/docs/ax/rest-reference/errors#resource-not-found"
}{
"status": 422,
"title": "Unprocessable Entity",
"detail": "One or more fields failed validation.",
"instance": "/resource/12345",
"type": "https://arize.com/docs/ax/rest-reference/errors#unprocessable-entity"
}{
"status": 429,
"title": "Rate limit exceeded",
"detail": "You have exceeded the allowed number of requests. Please try again later.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#rate-limit-exceeded"
}List spans
Returns a paginated list of spans.
The spans are sorted by their timestamp, with the most recent coming first.
curl --request POST \
--url https://api.arize.com/v2/spans \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"project_id": "my-project",
"start_time": "2024-01-01T00:00:00Z",
"end_time": "2024-01-02T00:00:00Z",
"filter": "status_code = 'ERROR'"
}
EOFimport requests
url = "https://api.arize.com/v2/spans"
payload = {
"project_id": "my-project",
"start_time": "2024-01-01T00:00:00Z",
"end_time": "2024-01-02T00:00:00Z",
"filter": "status_code = 'ERROR'"
}
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({
project_id: 'my-project',
start_time: '2024-01-01T00:00:00Z',
end_time: '2024-01-02T00:00:00Z',
filter: 'status_code = \'ERROR\''
})
};
fetch('https://api.arize.com/v2/spans', 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.arize.com/v2/spans",
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([
'project_id' => 'my-project',
'start_time' => '2024-01-01T00:00:00Z',
'end_time' => '2024-01-02T00:00:00Z',
'filter' => 'status_code = \'ERROR\''
]),
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.arize.com/v2/spans"
payload := strings.NewReader("{\n \"project_id\": \"my-project\",\n \"start_time\": \"2024-01-01T00:00:00Z\",\n \"end_time\": \"2024-01-02T00:00:00Z\",\n \"filter\": \"status_code = 'ERROR'\"\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.arize.com/v2/spans")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"project_id\": \"my-project\",\n \"start_time\": \"2024-01-01T00:00:00Z\",\n \"end_time\": \"2024-01-02T00:00:00Z\",\n \"filter\": \"status_code = 'ERROR'\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.arize.com/v2/spans")
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 \"project_id\": \"my-project\",\n \"start_time\": \"2024-01-01T00:00:00Z\",\n \"end_time\": \"2024-01-02T00:00:00Z\",\n \"filter\": \"status_code = 'ERROR'\"\n}"
response = http.request(request)
puts response.read_body{
"spans": [
{
"name": "llm.chat.completion",
"context": {
"trace_id": "trace_001",
"span_id": "span_001"
},
"kind": "LLM",
"parent_id": "span_000",
"status_code": "OK",
"start_time": "2024-01-01T12:00:00Z",
"end_time": "2024-01-01T12:00:01Z",
"attributes": {
"llm.model_name": "gpt-4o",
"llm.token_count.prompt": 150,
"llm.token_count.completion": 50
}
}
],
"pagination": {
"next_cursor": "cursor_12345",
"has_more": true
}
}{
"status": 400,
"title": "Invalid request parameters",
"detail": "The 'name' field is required and must be a non-empty string.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#invalid-request"
}{
"status": 401,
"title": "Authentication required",
"detail": "You must be authenticated to access this resource.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#authentication-required"
}{
"status": 403,
"title": "Access forbidden",
"detail": "You do not have permission to access this resource.",
"instance": "/resource/12345",
"type": "https://arize.com/docs/ax/rest-reference/errors#access-forbidden"
}{
"status": 404,
"title": "Resource not found",
"detail": "The requested resource with ID '12345' was not found.",
"instance": "/resource/12345",
"type": "https://arize.com/docs/ax/rest-reference/errors#resource-not-found"
}{
"status": 422,
"title": "Unprocessable Entity",
"detail": "One or more fields failed validation.",
"instance": "/resource/12345",
"type": "https://arize.com/docs/ax/rest-reference/errors#unprocessable-entity"
}{
"status": 429,
"title": "Rate limit exceeded",
"detail": "You have exceeded the allowed number of requests. Please try again later.",
"instance": "/resource",
"type": "https://arize.com/docs/ax/rest-reference/errors#rate-limit-exceeded"
}Authorizations
Most Arize AI endpoints require authentication. For those endpoints that require authentication, include your API key in the request header using the format
Query Parameters
Maximum items to return
1 <= x <= 500Opaque pagination cursor returned from a previous response
(pagination.next_cursor). Treat it as an unreadable token; do not
attempt to parse or construct it.
Body
Body containing span query parameters
The project ID to list spans for
Filter to spans starting at or after this timestamp (inclusive).
ISO 8601 format (e.g., 2024-01-01T00:00:00Z). Defaults to 1 week ago.
Filter to spans starting before this timestamp (exclusive).
ISO 8601 format (e.g., 2024-01-02T00:00:00Z). Defaults to the current time.
Filter expression to apply to the query. Supports SQL-like syntax
for filtering spans by attributes (e.g., status_code = 'ERROR').
Optional; omit it to apply no filter. If provided, it must not be
empty or whitespace-only.
Was this page helpful?