AiAttributionQuota ai.attribution-quota@1

Generated at from openvibe-contracts v0.76.0 and openvibe-sdk v0.20.1.

Version
1.0.0
Owner
ai
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/ai/attribution-quota.v1.json

ai.attribution-quota@1 (OpenVibe.AI; roadmap WS-O task 2): a cap on one attribution as its service reads it (GET or PUT /api/v1/attribution-quotas/{attribution}), with what the current window has used.

Fields

FieldTypeRequiredDescriptionConstraints
attributionstringyes<service>:<type>:<id>, the run's attribution as AI keys it (Live: live:user:<id>).
  • pattern ^[a-z][a-z0-9-]{1,31}:[a-z][a-z0-9_]{1,31}:[A-Za-z0-9_.-]{1,80}$
windowenumyes
  • one of "hour", "day"
workflow_prefixstring | null
max_cost_usdnumber | null
  • minimum 0
max_requestsinteger | null
  • minimum 0
usedobjectyes
  • no other fields
used.requestsintegeryes
  • minimum 0
used.cost_usdnumberyes
  • minimum 0
window_resets_atstringyes
  • format date-time
updated_atstringyes
  • format date-time

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: viewers
{
  "attribution": "live:user:42",
  "window": "day",
  "workflow_prefix": "live.viewers.",
  "max_cost_usd": 0.2,
  "max_requests": null,
  "used": {
    "requests": 12,
    "cost_usd": 0.034
  },
  "window_resets_at": "2026-09-29T00:00:00.000Z",
  "updated_at": "2026-09-28T00:30:00.000Z"
}
Rejected: bad-attribution
{
  "attribution": "42",
  "window": "day",
  "used": {
    "requests": 0,
    "cost_usd": 0
  },
  "window_resets_at": "2026-09-29T00:00:00.000Z",
  "updated_at": "2026-09-28T00:30:00.000Z"
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('ai.attribution-quota@1', value);   // { valid, errors: [{ path, message }] }