Send your own records.
A vendor we have no connector for, a bill, an export from a system of your own: send the rows as JSON in the one shape every connector writes, and they land on the ledger like any other source.
The key
Create the endpoint under Connect → OpenTelemetry; the key it shows is the organization's push key. It writes and cannot read. The key the editor holds reads and cannot write.
curl -X POST https://app.valistry.ai/api/v1/records \
-H "Authorization: Bearer vly_ot_…" -H "Content-Type: application/json" \
-d '{"records":[{"source_record_id":"inv-0917-3","occurred_at":"2026-09-17T10:00:00Z",
"provider":"anthropic","model":"claude-sonnet-4","input_tokens":1200,"output_tokens":300,
"team":"support","workflow":"ticket-triage"}]}'The fields
- source_record_id
- Your own id for the row. Required. The same id sent again replaces the row; it never doubles.
- occurred_at
- When, as an ISO 8601 instant with its offset. Required.
- provider · model
- The vendor and the model as the vendor names it. Required. A model the rate card knows is priced from it.
- input_tokens · output_tokens · cached_tokens
- Integers. Optional, default 0.
- cost_usd
- What the row cost, in dollars, when you know it. Optional. Given, it is kept; absent, the tokens are priced.
- request_count
- Calls in the row: one for a call, more for a daily bucket. Optional, default 1.
- status · latency_ms · attempt
- ok, error or timeout; milliseconds; which attempt this was. Optional.
- trace_id
- The trace the call ran in, when you have one: the join to an outcome. Optional.
- application · workflow · team · agent
- Who and what, as your own names; a rule can match on any of them. Optional.
- workload · region
- The class of use, from the fixed list; the region. Optional.
What happens to a row
- Priced
- A row with tokens and a model the rate card knows is priced from the card, and the record says so. A row with a cost keeps it.
- Unpriced
- A row with neither lands at zero and is marked; the reply counts them.
- Sent again
- The same id replaces the row. A retry never doubles a dollar.
- Refused
- A row the format does not allow refuses the whole batch, naming the row and the field. Nothing is stored.
- Up to
- 5,000 rows a call.