curl "https://api.lumenfall.ai/v1/requests?limit=5" \
-H "Authorization: Bearer $LUMENFALL_API_KEY"
curl "https://api.lumenfall.ai/v1/requests?created_after=2026-03-01T00:00:00Z&created_before=2026-03-31T23:59:59Z&summary=true" \
-H "Authorization: Bearer $LUMENFALL_API_KEY"
import requests
response = requests.get(
"https://api.lumenfall.ai/v1/requests",
headers={"Authorization": "Bearer your-lumenfall-api-key"},
params={
"limit": 5,
"created_after": "2026-03-01T00:00:00Z",
"summary": "true",
},
)
data = response.json()
for req in data["data"]:
print(f"{req['created_at']} {req['model']} ${req['cost']}")
# Paginate
while data["next_page_url"]:
response = requests.get(
f"https://api.lumenfall.ai{data['next_page_url']}",
headers={"Authorization": "Bearer your-lumenfall-api-key"},
)
data = response.json()
for req in data["data"]:
print(f"{req['created_at']} {req['model']} ${req['cost']}")
const baseUrl = "https://api.lumenfall.ai";
const headers = { Authorization: "Bearer your-lumenfall-api-key" };
let url: string | null = `${baseUrl}/v1/requests?limit=5&summary=true`;
while (url) {
const response = await fetch(url, { headers });
const data = await response.json();
for (const req of data.data) {
console.log(`${req.created_at} ${req.model} $${req.cost}`);
}
url = data.next_page_url ? `${baseUrl}${data.next_page_url}` : null;
}
{
"object": "list",
"data": [
{
"id": "req_2m4jLFHhkN1i4VrVHpjJqCOKlPw",
"object": "request",
"created_at": "2026-03-15T14:32:10.000Z",
"model": "flux-pro",
"modality": "image",
"endpoint": "/openai/v1/images/generations",
"status": "completed",
"cost": 0.045,
"currency": "usd",
"duration_ms": 2340,
"key_id": "test_abc123",
"error_code": null,
"error_message": null,
"session_id": null,
"trace_id": null,
"user": null,
"request_size_bytes": 1024,
"response_size_bytes": 524288
},
{
"id": "req_2m4jKEGfmR8h3UqTGnhHpBNkMOx",
"object": "request",
"created_at": "2026-03-15T14:30:05.000Z",
"model": "gpt-image-1.5",
"modality": "image",
"endpoint": "/openai/v1/images/generations",
"status": "completed",
"cost": 0.02,
"currency": "usd",
"duration_ms": 4120,
"key_id": "test_abc123",
"error_code": null,
"error_message": null,
"session_id": null,
"trace_id": null,
"user": null,
"request_size_bytes": 512,
"response_size_bytes": 1048576
}
],
"next_page_url": "/v1/requests?starting_after=req_2m4jKEGfmR8h3UqTGnhHpBNkMOx&limit=5",
"previous_page_url": null
}
{
"object": "list",
"data": [
{
"id": "req_2m4jLFHhkN1i4VrVHpjJqCOKlPw",
"object": "request",
"created_at": "2026-03-15T14:32:10.000Z",
"model": "flux-pro",
"modality": "image",
"endpoint": "/openai/v1/images/generations",
"status": "completed",
"cost": 0.045,
"currency": "usd",
"duration_ms": 2340,
"key_id": "test_abc123",
"error_code": null,
"error_message": null,
"session_id": null,
"trace_id": null,
"user": null,
"request_size_bytes": 1024,
"response_size_bytes": 524288
}
],
"next_page_url": "/v1/requests?starting_after=req_2m4jLFHhkN1i4VrVHpjJqCOKlPw&limit=20&summary=true",
"previous_page_url": null,
"summary": {
"total_cost": 12.34,
"currency": "usd",
"count": 347
}
}
Billing
List requests
Retrieve a paginated list of your API requests with optional filtering and cost summary
GET
/
v1
/
requests
curl "https://api.lumenfall.ai/v1/requests?limit=5" \
-H "Authorization: Bearer $LUMENFALL_API_KEY"
curl "https://api.lumenfall.ai/v1/requests?created_after=2026-03-01T00:00:00Z&created_before=2026-03-31T23:59:59Z&summary=true" \
-H "Authorization: Bearer $LUMENFALL_API_KEY"
import requests
response = requests.get(
"https://api.lumenfall.ai/v1/requests",
headers={"Authorization": "Bearer your-lumenfall-api-key"},
params={
"limit": 5,
"created_after": "2026-03-01T00:00:00Z",
"summary": "true",
},
)
data = response.json()
for req in data["data"]:
print(f"{req['created_at']} {req['model']} ${req['cost']}")
# Paginate
while data["next_page_url"]:
response = requests.get(
f"https://api.lumenfall.ai{data['next_page_url']}",
headers={"Authorization": "Bearer your-lumenfall-api-key"},
)
data = response.json()
for req in data["data"]:
print(f"{req['created_at']} {req['model']} ${req['cost']}")
const baseUrl = "https://api.lumenfall.ai";
const headers = { Authorization: "Bearer your-lumenfall-api-key" };
let url: string | null = `${baseUrl}/v1/requests?limit=5&summary=true`;
while (url) {
const response = await fetch(url, { headers });
const data = await response.json();
for (const req of data.data) {
console.log(`${req.created_at} ${req.model} $${req.cost}`);
}
url = data.next_page_url ? `${baseUrl}${data.next_page_url}` : null;
}
{
"object": "list",
"data": [
{
"id": "req_2m4jLFHhkN1i4VrVHpjJqCOKlPw",
"object": "request",
"created_at": "2026-03-15T14:32:10.000Z",
"model": "flux-pro",
"modality": "image",
"endpoint": "/openai/v1/images/generations",
"status": "completed",
"cost": 0.045,
"currency": "usd",
"duration_ms": 2340,
"key_id": "test_abc123",
"error_code": null,
"error_message": null,
"session_id": null,
"trace_id": null,
"user": null,
"request_size_bytes": 1024,
"response_size_bytes": 524288
},
{
"id": "req_2m4jKEGfmR8h3UqTGnhHpBNkMOx",
"object": "request",
"created_at": "2026-03-15T14:30:05.000Z",
"model": "gpt-image-1.5",
"modality": "image",
"endpoint": "/openai/v1/images/generations",
"status": "completed",
"cost": 0.02,
"currency": "usd",
"duration_ms": 4120,
"key_id": "test_abc123",
"error_code": null,
"error_message": null,
"session_id": null,
"trace_id": null,
"user": null,
"request_size_bytes": 512,
"response_size_bytes": 1048576
}
],
"next_page_url": "/v1/requests?starting_after=req_2m4jKEGfmR8h3UqTGnhHpBNkMOx&limit=5",
"previous_page_url": null
}
{
"object": "list",
"data": [
{
"id": "req_2m4jLFHhkN1i4VrVHpjJqCOKlPw",
"object": "request",
"created_at": "2026-03-15T14:32:10.000Z",
"model": "flux-pro",
"modality": "image",
"endpoint": "/openai/v1/images/generations",
"status": "completed",
"cost": 0.045,
"currency": "usd",
"duration_ms": 2340,
"key_id": "test_abc123",
"error_code": null,
"error_message": null,
"session_id": null,
"trace_id": null,
"user": null,
"request_size_bytes": 1024,
"response_size_bytes": 524288
}
],
"next_page_url": "/v1/requests?starting_after=req_2m4jLFHhkN1i4VrVHpjJqCOKlPw&limit=20&summary=true",
"previous_page_url": null,
"summary": {
"total_cost": 12.34,
"currency": "usd",
"count": 347
}
}
Returns a paginated list of API requests for your organization, sorted newest first.
This endpoint uses the native Lumenfall API path (
/v1/requests), not the OpenAI-compatible prefix (/openai/v1).Query parameters
integer
default:"20"
Number of results to return per page. Minimum 1, maximum 100.
string
Cursor for forward pagination. Returns results older than the request with this ID.
Use the
next_page_url from a previous response instead of constructing this manually.string
Cursor for backward pagination. Returns results newer than the request with this ID.
Cannot be combined with
starting_after.string
Filter to requests created at or after this time. ISO 8601 datetime (e.g.,
2026-03-01T00:00:00Z).string
Filter to requests created at or before this time. ISO 8601 datetime (e.g.,
2026-03-31T23:59:59Z).string
Filter to requests made with a specific API key ID. You can retrieve your key IDs from the List API keys endpoint.
string
Filter to requests with a specific status. Accepts a single value:
completed, pending, processing, upstream_failure, rejected, or cancelled. Matches the status field on each request object.boolean
When
true, includes a summary object with the total cost and count of all matching requests (not just the current page).Response
string
Always
list.array
Array of request objects, sorted newest first.
Show Request object
Show Request object
string
Unique request identifier (e.g.,
req_2m4jLFHhkN1i4VrVHpjJqCOKlPw).string
Always
request.string
When the request started, as an ISO 8601 datetime.
string | null
The model used (e.g.,
flux-pro, gpt-image-1.5).string | null
The request modality -
image, video, speech, or vision.string | null
The API endpoint path (e.g.,
/openai/v1/images/generations).string
Request status -
completed, pending, processing, upstream_failure, rejected, or cancelled.number
Request cost in USD (e.g.,
0.045).string
Always
usd.integer | null
Total response time in milliseconds.
string | null
The API key ID used for this request.
string | null
Error code if the request failed (e.g.,
ALL_PROVIDERS_EXHAUSTED).string | null
Human-readable error message if the request failed.
string | null
Caller-provided session ID for grouping related requests.
string | null
Trace ID extracted from the W3C
traceparent header.string | null
End user identifier from the request body.
integer | null
Size of the request body in bytes.
integer | null
Size of the response body in bytes.
string | null
URL to fetch the next page of results.
null when there are no more results.
Includes all original filters so you can follow it directly.string | null
URL to fetch the previous page of results.
null when on the first page.object
curl "https://api.lumenfall.ai/v1/requests?limit=5" \
-H "Authorization: Bearer $LUMENFALL_API_KEY"
curl "https://api.lumenfall.ai/v1/requests?created_after=2026-03-01T00:00:00Z&created_before=2026-03-31T23:59:59Z&summary=true" \
-H "Authorization: Bearer $LUMENFALL_API_KEY"
import requests
response = requests.get(
"https://api.lumenfall.ai/v1/requests",
headers={"Authorization": "Bearer your-lumenfall-api-key"},
params={
"limit": 5,
"created_after": "2026-03-01T00:00:00Z",
"summary": "true",
},
)
data = response.json()
for req in data["data"]:
print(f"{req['created_at']} {req['model']} ${req['cost']}")
# Paginate
while data["next_page_url"]:
response = requests.get(
f"https://api.lumenfall.ai{data['next_page_url']}",
headers={"Authorization": "Bearer your-lumenfall-api-key"},
)
data = response.json()
for req in data["data"]:
print(f"{req['created_at']} {req['model']} ${req['cost']}")
const baseUrl = "https://api.lumenfall.ai";
const headers = { Authorization: "Bearer your-lumenfall-api-key" };
let url: string | null = `${baseUrl}/v1/requests?limit=5&summary=true`;
while (url) {
const response = await fetch(url, { headers });
const data = await response.json();
for (const req of data.data) {
console.log(`${req.created_at} ${req.model} $${req.cost}`);
}
url = data.next_page_url ? `${baseUrl}${data.next_page_url}` : null;
}
{
"object": "list",
"data": [
{
"id": "req_2m4jLFHhkN1i4VrVHpjJqCOKlPw",
"object": "request",
"created_at": "2026-03-15T14:32:10.000Z",
"model": "flux-pro",
"modality": "image",
"endpoint": "/openai/v1/images/generations",
"status": "completed",
"cost": 0.045,
"currency": "usd",
"duration_ms": 2340,
"key_id": "test_abc123",
"error_code": null,
"error_message": null,
"session_id": null,
"trace_id": null,
"user": null,
"request_size_bytes": 1024,
"response_size_bytes": 524288
},
{
"id": "req_2m4jKEGfmR8h3UqTGnhHpBNkMOx",
"object": "request",
"created_at": "2026-03-15T14:30:05.000Z",
"model": "gpt-image-1.5",
"modality": "image",
"endpoint": "/openai/v1/images/generations",
"status": "completed",
"cost": 0.02,
"currency": "usd",
"duration_ms": 4120,
"key_id": "test_abc123",
"error_code": null,
"error_message": null,
"session_id": null,
"trace_id": null,
"user": null,
"request_size_bytes": 512,
"response_size_bytes": 1048576
}
],
"next_page_url": "/v1/requests?starting_after=req_2m4jKEGfmR8h3UqTGnhHpBNkMOx&limit=5",
"previous_page_url": null
}
{
"object": "list",
"data": [
{
"id": "req_2m4jLFHhkN1i4VrVHpjJqCOKlPw",
"object": "request",
"created_at": "2026-03-15T14:32:10.000Z",
"model": "flux-pro",
"modality": "image",
"endpoint": "/openai/v1/images/generations",
"status": "completed",
"cost": 0.045,
"currency": "usd",
"duration_ms": 2340,
"key_id": "test_abc123",
"error_code": null,
"error_message": null,
"session_id": null,
"trace_id": null,
"user": null,
"request_size_bytes": 1024,
"response_size_bytes": 524288
}
],
"next_page_url": "/v1/requests?starting_after=req_2m4jLFHhkN1i4VrVHpjJqCOKlPw&limit=20&summary=true",
"previous_page_url": null,
"summary": {
"total_cost": 12.34,
"currency": "usd",
"count": 347
}
}