curl --request GET \
--url https://api.veryfront.com/projects/{project_reference}/members/usage \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.veryfront.com/projects/{project_reference}/members/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/projects/{project_reference}/members/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/projects/{project_reference}/members/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/projects/{project_reference}/members/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/projects/{project_reference}/members/usage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.veryfront.com/projects/{project_reference}/members/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": "project",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"member_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"
}
]
}
],
"members": [
{
"kind": "member",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"email": "<string>",
"role": "<string>",
"credits": 123,
"usd": 123,
"requests": 123,
"input_tokens": 123,
"output_tokens": 123,
"cache_read_tokens": 123,
"cache_creation_tokens": 123,
"funding": "managed"
}
],
"serving": [
{
"host": "<string>",
"tier": "eu-resident",
"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"
}
]
}Get member usage
Get member usage.
curl --request GET \
--url https://api.veryfront.com/projects/{project_reference}/members/usage \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.veryfront.com/projects/{project_reference}/members/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/projects/{project_reference}/members/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/projects/{project_reference}/members/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/projects/{project_reference}/members/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/projects/{project_reference}/members/usage")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.veryfront.com/projects/{project_reference}/members/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": "project",
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"member_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"
}
]
}
],
"members": [
{
"kind": "member",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"email": "<string>",
"role": "<string>",
"credits": 123,
"usd": 123,
"requests": 123,
"input_tokens": 123,
"output_tokens": 123,
"cache_read_tokens": 123,
"cache_creation_tokens": 123,
"funding": "managed"
}
],
"serving": [
{
"host": "<string>",
"tier": "eu-resident",
"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.
Path Parameters
"my-project"
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 Response
AI spending by project member; webhook and channel-bot usage without a person appears in an Automations row. Owners and administrators read all members; other members read only their own. serving groups spending by deployment host and sovereignty tier; null means the deployment was not recorded, not a location. Read from the AI usage ledger; usd is the customer charge at the credit rate and never provider cost.
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 member and attribution rows below.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The same spend cut by the deployment that served it. Ordered by spend descending, then by request count descending, then by host, then by tier; the row whose host and tier are both null is always last, because it is the absence of a record rather than a deployment. Additive: it neither replaces nor re-slices any other field.
Show child attributes
Show child attributes
project, model, api_key, member