curl --request GET \
--url https://api.veryfront.com/api-keys/usage \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.veryfront.com/api-keys/usage"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.veryfront.com/api-keys/usage', 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.veryfront.com/api-keys/usage",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.veryfront.com/api-keys/usage"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.veryfront.com/api-keys/usage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.veryfront.com/api-keys/usage")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"scope": {
"kind": "user",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"timeframe": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"granularity": "hour",
"bucket_count": 1,
"previous": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"granularity": "hour",
"bucket_count": 1
}
},
"attribution": {
"enabled": true,
"recording_since": "<string>"
},
"summary": {
"credits": 123,
"usd": 123,
"requests": 123,
"input_tokens": 123,
"output_tokens": 123,
"cache_read_tokens": 123,
"cache_creation_tokens": 123,
"funding": "managed",
"previous": {
"credits": 123,
"usd": 123,
"requests": 123,
"input_tokens": 123,
"output_tokens": 123,
"cache_read_tokens": 123,
"cache_creation_tokens": 123,
"funding": "managed"
}
},
"series": [
{
"credits": 123,
"usd": 123,
"requests": 123,
"input_tokens": 123,
"output_tokens": 123,
"cache_read_tokens": 123,
"cache_creation_tokens": 123,
"bucket_start": "2023-11-07T05:31:56Z",
"funding": "managed",
"groups": [
{
"credits": 123,
"usd": 123,
"requests": 123,
"input_tokens": 123,
"output_tokens": 123,
"cache_read_tokens": 123,
"cache_creation_tokens": 123,
"dimensions": {
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"model": "<string>",
"model_provider": "<string>",
"api_key_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"api_key_kind": "api_key",
"member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"member_kind": "member"
},
"funding": "managed"
}
]
}
],
"keys": [
{
"kind": "api_key",
"api_key_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"key_prefix": "<string>",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"revoked": true,
"credits": 123,
"usd": 123,
"requests": 123,
"input_tokens": 123,
"output_tokens": 123,
"cache_read_tokens": 123,
"cache_creation_tokens": 123,
"funding": "managed"
}
],
"group_by": [
"project"
]
}{
"type": "https://api.veryfront.com/errors/validation-failed",
"title": "Validation Failed",
"status": 400,
"cause": "schedule_concurrency_forbidden",
"idempotency": {
"state": "in_progress",
"operation": "<string>",
"retryable": true,
"retry_after_seconds": 1,
"expires_at": "<string>",
"recovery": {
"available": true,
"description": "<string>",
"resource_url": "<string>"
}
},
"code": "RUN_INVALID_INPUT",
"detail": "The 'email' field must be a valid email address",
"instance": "/projects/my-project/members",
"slug": "validation-failed",
"category": "VALIDATION",
"suggestion": "Check the request body and query parameters against the API documentation.",
"errors": [
{
"field": "email",
"message": "Invalid email format",
"code": "INVALID_FORMAT"
}
]
}{
"type": "https://api.veryfront.com/errors/validation-failed",
"title": "Validation Failed",
"status": 400,
"cause": "schedule_concurrency_forbidden",
"idempotency": {
"state": "in_progress",
"operation": "<string>",
"retryable": true,
"retry_after_seconds": 1,
"expires_at": "<string>",
"recovery": {
"available": true,
"description": "<string>",
"resource_url": "<string>"
}
},
"code": "RUN_INVALID_INPUT",
"detail": "The 'email' field must be a valid email address",
"instance": "/projects/my-project/members",
"slug": "validation-failed",
"category": "VALIDATION",
"suggestion": "Check the request body and query parameters against the API documentation.",
"errors": [
{
"field": "email",
"message": "Invalid email format",
"code": "INVALID_FORMAT"
}
]
}{
"type": "https://api.veryfront.com/errors/validation-failed",
"title": "Validation Failed",
"status": 400,
"cause": "schedule_concurrency_forbidden",
"idempotency": {
"state": "in_progress",
"operation": "<string>",
"retryable": true,
"retry_after_seconds": 1,
"expires_at": "<string>",
"recovery": {
"available": true,
"description": "<string>",
"resource_url": "<string>"
}
},
"code": "RUN_INVALID_INPUT",
"detail": "The 'email' field must be a valid email address",
"instance": "/projects/my-project/members",
"slug": "validation-failed",
"category": "VALIDATION",
"suggestion": "Check the request body and query parameters against the API documentation.",
"errors": [
{
"field": "email",
"message": "Invalid email format",
"code": "INVALID_FORMAT"
}
]
}{
"type": "https://api.veryfront.com/errors/validation-failed",
"title": "Validation Failed",
"status": 400,
"cause": "schedule_concurrency_forbidden",
"idempotency": {
"state": "in_progress",
"operation": "<string>",
"retryable": true,
"retry_after_seconds": 1,
"expires_at": "<string>",
"recovery": {
"available": true,
"description": "<string>",
"resource_url": "<string>"
}
},
"code": "RUN_INVALID_INPUT",
"detail": "The 'email' field must be a valid email address",
"instance": "/projects/my-project/members",
"slug": "validation-failed",
"category": "VALIDATION",
"suggestion": "Check the request body and query parameters against the API documentation.",
"errors": [
{
"field": "email",
"message": "Invalid email format",
"code": "INVALID_FORMAT"
}
]
}{
"type": "https://api.veryfront.com/errors/validation-failed",
"title": "Validation Failed",
"status": 400,
"cause": "schedule_concurrency_forbidden",
"idempotency": {
"state": "in_progress",
"operation": "<string>",
"retryable": true,
"retry_after_seconds": 1,
"expires_at": "<string>",
"recovery": {
"available": true,
"description": "<string>",
"resource_url": "<string>"
}
},
"code": "RUN_INVALID_INPUT",
"detail": "The 'email' field must be a valid email address",
"instance": "/projects/my-project/members",
"slug": "validation-failed",
"category": "VALIDATION",
"suggestion": "Check the request body and query parameters against the API documentation.",
"errors": [
{
"field": "email",
"message": "Invalid email format",
"code": "INVALID_FORMAT"
}
]
}List API key usage
List API key usage.
curl --request GET \
--url https://api.veryfront.com/api-keys/usage \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.veryfront.com/api-keys/usage"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.veryfront.com/api-keys/usage', 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.veryfront.com/api-keys/usage",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.veryfront.com/api-keys/usage"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.veryfront.com/api-keys/usage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.veryfront.com/api-keys/usage")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"scope": {
"kind": "user",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"timeframe": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"granularity": "hour",
"bucket_count": 1,
"previous": {
"from": "2023-11-07T05:31:56Z",
"to": "2023-11-07T05:31:56Z",
"timezone": "<string>",
"granularity": "hour",
"bucket_count": 1
}
},
"attribution": {
"enabled": true,
"recording_since": "<string>"
},
"summary": {
"credits": 123,
"usd": 123,
"requests": 123,
"input_tokens": 123,
"output_tokens": 123,
"cache_read_tokens": 123,
"cache_creation_tokens": 123,
"funding": "managed",
"previous": {
"credits": 123,
"usd": 123,
"requests": 123,
"input_tokens": 123,
"output_tokens": 123,
"cache_read_tokens": 123,
"cache_creation_tokens": 123,
"funding": "managed"
}
},
"series": [
{
"credits": 123,
"usd": 123,
"requests": 123,
"input_tokens": 123,
"output_tokens": 123,
"cache_read_tokens": 123,
"cache_creation_tokens": 123,
"bucket_start": "2023-11-07T05:31:56Z",
"funding": "managed",
"groups": [
{
"credits": 123,
"usd": 123,
"requests": 123,
"input_tokens": 123,
"output_tokens": 123,
"cache_read_tokens": 123,
"cache_creation_tokens": 123,
"dimensions": {
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"model": "<string>",
"model_provider": "<string>",
"api_key_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"api_key_kind": "api_key",
"member_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"member_kind": "member"
},
"funding": "managed"
}
]
}
],
"keys": [
{
"kind": "api_key",
"api_key_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"key_prefix": "<string>",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"revoked": true,
"credits": 123,
"usd": 123,
"requests": 123,
"input_tokens": 123,
"output_tokens": 123,
"cache_read_tokens": 123,
"cache_creation_tokens": 123,
"funding": "managed"
}
],
"group_by": [
"project"
]
}{
"type": "https://api.veryfront.com/errors/validation-failed",
"title": "Validation Failed",
"status": 400,
"cause": "schedule_concurrency_forbidden",
"idempotency": {
"state": "in_progress",
"operation": "<string>",
"retryable": true,
"retry_after_seconds": 1,
"expires_at": "<string>",
"recovery": {
"available": true,
"description": "<string>",
"resource_url": "<string>"
}
},
"code": "RUN_INVALID_INPUT",
"detail": "The 'email' field must be a valid email address",
"instance": "/projects/my-project/members",
"slug": "validation-failed",
"category": "VALIDATION",
"suggestion": "Check the request body and query parameters against the API documentation.",
"errors": [
{
"field": "email",
"message": "Invalid email format",
"code": "INVALID_FORMAT"
}
]
}{
"type": "https://api.veryfront.com/errors/validation-failed",
"title": "Validation Failed",
"status": 400,
"cause": "schedule_concurrency_forbidden",
"idempotency": {
"state": "in_progress",
"operation": "<string>",
"retryable": true,
"retry_after_seconds": 1,
"expires_at": "<string>",
"recovery": {
"available": true,
"description": "<string>",
"resource_url": "<string>"
}
},
"code": "RUN_INVALID_INPUT",
"detail": "The 'email' field must be a valid email address",
"instance": "/projects/my-project/members",
"slug": "validation-failed",
"category": "VALIDATION",
"suggestion": "Check the request body and query parameters against the API documentation.",
"errors": [
{
"field": "email",
"message": "Invalid email format",
"code": "INVALID_FORMAT"
}
]
}{
"type": "https://api.veryfront.com/errors/validation-failed",
"title": "Validation Failed",
"status": 400,
"cause": "schedule_concurrency_forbidden",
"idempotency": {
"state": "in_progress",
"operation": "<string>",
"retryable": true,
"retry_after_seconds": 1,
"expires_at": "<string>",
"recovery": {
"available": true,
"description": "<string>",
"resource_url": "<string>"
}
},
"code": "RUN_INVALID_INPUT",
"detail": "The 'email' field must be a valid email address",
"instance": "/projects/my-project/members",
"slug": "validation-failed",
"category": "VALIDATION",
"suggestion": "Check the request body and query parameters against the API documentation.",
"errors": [
{
"field": "email",
"message": "Invalid email format",
"code": "INVALID_FORMAT"
}
]
}{
"type": "https://api.veryfront.com/errors/validation-failed",
"title": "Validation Failed",
"status": 400,
"cause": "schedule_concurrency_forbidden",
"idempotency": {
"state": "in_progress",
"operation": "<string>",
"retryable": true,
"retry_after_seconds": 1,
"expires_at": "<string>",
"recovery": {
"available": true,
"description": "<string>",
"resource_url": "<string>"
}
},
"code": "RUN_INVALID_INPUT",
"detail": "The 'email' field must be a valid email address",
"instance": "/projects/my-project/members",
"slug": "validation-failed",
"category": "VALIDATION",
"suggestion": "Check the request body and query parameters against the API documentation.",
"errors": [
{
"field": "email",
"message": "Invalid email format",
"code": "INVALID_FORMAT"
}
]
}{
"type": "https://api.veryfront.com/errors/validation-failed",
"title": "Validation Failed",
"status": 400,
"cause": "schedule_concurrency_forbidden",
"idempotency": {
"state": "in_progress",
"operation": "<string>",
"retryable": true,
"retry_after_seconds": 1,
"expires_at": "<string>",
"recovery": {
"available": true,
"description": "<string>",
"resource_url": "<string>"
}
},
"code": "RUN_INVALID_INPUT",
"detail": "The 'email' field must be a valid email address",
"instance": "/projects/my-project/members",
"slug": "validation-failed",
"category": "VALIDATION",
"suggestion": "Check the request body and query parameters against the API documentation.",
"errors": [
{
"field": "email",
"message": "Invalid email format",
"code": "INVALID_FORMAT"
}
]
}Authorizations
Use a JWT bearer token or a Veryfront API key in the Authorization header.
Query Parameters
Whole local days, defaulting to 30d. Explicit from/to bounds take precedence over preset, including SDK-supplied defaults.
7d, 30d, 90d Inclusive start. Supply both from and to; these bounds take precedence over preset.
Exclusive end, no later than the end of today in timezone.
UTC hours, or local calendar days, Monday-based weeks and months.
hour, day, week, month Grouping dimensions supported by this operation. Repeat the parameter or use a comma-separated list.
4project, model, api_key, member Compare preceding calendar months for whole-month custom ranges, local days for whole-day ranges and presets, or equal elapsed duration otherwise.
previous_period Optional project UUID or slug. Scopes the listing to that project’s keys.
Response
AI spending by API key; kind separates individual keys from grouped usage, including requests without API key authentication. With project_reference: the project’s keys, requests without a key, and usage from deleted key records. Without it: the caller’s own keys and requests without a key; usage of a deleted key record cannot be recovered. Read from the AI usage ledger; usd is the customer charge at the credit rate and never provider cost.
Authorized listing scope. User scope means the caller’s readable keys and keyless activity, not billing-account totals.
- Option 1
- Option 2
- Option 3
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Whether attribution is complete for the returned usage. Treat it as incomplete if enabled is false, recording_since is null, or the selected period includes an unattributed row.
Show child attributes
Show child attributes
Sum of the key and attribution rows below.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
project, model, api_key, member