ReportAiUsageResult report.ai-usage-result@1
Generated at from
openvibe-contracts v0.419.0 and
openvibe-sdk v0.161.0.
- Version
- 1.0.0
- Owner
- report
- Visibility
- public
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/report/ai-usage-result.v1.json
report.ai-usage-result@1: the AI meter in groups (plan L40/L41). GET /api/v1/ai/usage needs a service token with report.ai_usage.read; the rows are grouped by day, site, model, system or paid_by. A group that fewer than ten people share reads fewer than 10 instead of counting them.
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
group | enum | yes |
| |
usage | array of object | yes |
| |
usage[].group | enum | yes |
| |
usage[].key | string | yes | The name of the group: the day, the site, the model, the system or the payer. |
|
usage[].calls | integer | yes |
| |
usage[].people | one of | yes | ||
usage[].input | integer | yes |
| |
usage[].output | integer | yes |
| |
usage[].reasoning | integer | yes |
| |
usage[].cache_read | integer | yes |
| |
usage[].cache_write | integer | yes |
| |
usage[].images | integer |
| ||
usage[].audio_seconds | number |
| ||
usage[].video_seconds | number |
| ||
usage[].list_cost_usd | number | yes |
| |
usage[].charged_usd | number | yes |
| |
usage[].fee_usd | number | yes |
| |
usage[].cache_saved_usd | number | yes |
| |
totals | object | yes |
| |
totals.calls | integer | yes |
| |
totals.input | integer | yes |
| |
totals.output | integer | yes |
| |
totals.reasoning | integer | yes |
| |
totals.cache_read | integer | yes |
| |
totals.cache_write | integer | yes |
| |
totals.images | integer |
| ||
totals.audio_seconds | number |
| ||
totals.video_seconds | number |
| ||
totals.list_cost_usd | number | yes |
| |
totals.charged_usd | number | yes |
| |
totals.fee_usd | number | yes |
| |
totals.cache_saved_usd | number | yes |
|
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: by-day
{
"group": "day",
"usage": [
{
"group": "day",
"key": "2026-10-31",
"calls": 12,
"people": 14,
"input": 100,
"output": 50,
"reasoning": 0,
"cache_read": 800,
"cache_write": 0,
"list_cost_usd": 0.1,
"charged_usd": 0.1,
"fee_usd": 0,
"cache_saved_usd": 0.02
}
],
"totals": {
"calls": 12,
"input": 100,
"output": 50,
"reasoning": 0,
"cache_read": 800,
"cache_write": 0,
"list_cost_usd": 0.1,
"charged_usd": 0.1,
"fee_usd": 0,
"cache_saved_usd": 0.02
}
}Valid: fewer-than-ten
{
"group": "site",
"usage": [
{
"group": "site",
"key": "site:design",
"calls": 3,
"people": "fewer than 10",
"input": 10,
"output": 5,
"reasoning": 0,
"cache_read": 0,
"cache_write": 0,
"list_cost_usd": 0.01,
"charged_usd": 0.01,
"fee_usd": 0,
"cache_saved_usd": 0
}
],
"totals": {
"calls": 3,
"input": 10,
"output": 5,
"reasoning": 0,
"cache_read": 0,
"cache_write": 0,
"list_cost_usd": 0.01,
"charged_usd": 0.01,
"fee_usd": 0,
"cache_saved_usd": 0
}
}Rejected: counts-few-people
{
"group": "site",
"usage": [
{
"group": "site",
"key": "site:design",
"calls": 3,
"people": 3,
"input": 10,
"output": 5,
"reasoning": 0,
"cache_read": 0,
"cache_write": 0,
"list_cost_usd": 0.01,
"charged_usd": 0.01,
"fee_usd": 0,
"cache_saved_usd": 0
}
],
"totals": {
"calls": 3,
"input": 10,
"output": 5,
"reasoning": 0,
"cache_read": 0,
"cache_write": 0,
"list_cost_usd": 0.01,
"charged_usd": 0.01,
"fee_usd": 0,
"cache_saved_usd": 0
}
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('report.ai-usage-result@1', value); // { valid, errors: [{ path, message }] }