Operation unit pricing
YODI publishes the active credit tariff for each enabled billable operation. The catalog lets you inspect the configured price and its unit before using a service. It is not a quote for a complete workflow and does not show your account balance.
The table below reads the active public catalog at page load. Rates and units are configured by authorized administrators and are not fixed in this documentation. If the catalog is unavailable or invalid, no sample tariff is shown.
Loading the current catalog…
Public endpoint​
GET https://api.yodi.tg/v1/billing/pricing
This read-only endpoint is public and does not require an API key, request body, or query parameters. It returns no account-specific information. The catalog is limited to 60 requests per minute and may be cached for 30 seconds.
curl --fail-with-body "https://api.yodi.tg/v1/billing/pricing"
Response​
Successful responses use the standard YODI envelope. The schema below omits commercial values intentionally; obtain current values from the endpoint or the live table above.
interface PricingCatalog {
version: number;
effectiveAt: string | null;
operations: Array<{
operation: string;
unit: string;
creditsPerUnit: number;
}>;
}
| Field | Meaning |
|---|---|
version | Positive integer identifying the active pricing version. |
effectiveAt | UTC activation timestamp, or null if the active version has no activation timestamp. |
operations | Up to 12 unique, enabled operation prices. Disabled operations are omitted. |
operation | Closed identifier for one billable YODI operation. |
unit | Unit used for the price. Read it from the response; do not infer it from the operation name. |
creditsPerUnit | Integer from 0 to 1,000,000. Zero explicitly means complimentary. |
The catalog can include translation, assistant, financial, reminder, climate,
analysis, audio synthesis, transcription, SMS, WhatsApp text/audio, and voice
call operations. The unit depends on the operation policy: for example,
completed_request, generated_second, artifact, transcription, or
accepted_recipient. Audio synthesis can be priced by an artifact or measured
generated seconds, according to the active policy.
The current operation identifiers are module.translate.request,
module.assistant.request, module.financial.request,
module.reminder.request, module.climate.request, analysis.request,
audio.synthesis, audio.transcription, message.sms.recipient,
message.whatsapp.text.recipient, message.whatsapp.audio.recipient, and
message.call.recipient. The response's operation and unit fields are
authoritative; do not construct identifiers or units from user input.
An operation missing from operations does not have a public active tariff.
Missing does not mean free. The endpoint never returns draft policies, selected
AI providers/models, account data, or wallet balances. Funding is reported
separately by the authenticated funding endpoint; the
backend may return a legacy service-bucket model or a shared wallet. Neither the
catalog nor an individual price implies that a shared-wallet cutover is active
in production.
Errors and safe use​
503 PRICING_UNAVAILABLE: the active policy is unavailable or fails its integrity checks. Do not replace it with a hard-coded price.429: the request exceeded the endpoint's rate limit; retry after the server-provided delay when present.- A malformed response is a contract error. Do not treat an unknown operation or unit as a valid tariff.
The returned unit price is not necessarily the full cost of a workflow. A workflow may perform multiple billable operations, and a provider-delivery charge can depend on the number of accepted recipients. Generated audio is charged using the unit and measured quantity enforced by the API. Use the operation result and your account usage history to understand settled charges.
Financial-agent voice generation​
When POST /v1/ai/financial/message requests speech (speak: true), billing
can include both the configured module.financial.request price for the
successful financial operation and the configured audio.synthesis price for
the generated audio. The audio quantity is measured from the resulting audio
duration and rounded up to whole seconds by the backend. The number of selected
financial fields is not itself the billable audio unit: more spoken content can
produce longer audio and therefore a higher measured audio charge. Any later
SMS, WhatsApp, or call delivery is a separate operation billed by its channel
and accepted-recipient quantity. Read the live catalog for the active unit
rates; the server's settled usage is authoritative.
Tariffs, funding balances, request quotas, and rate limits are distinct contracts. A shared-wallet response makes funds spendable across operations; the tariff for each operation remains independent.
Reminder relaunch estimate​
Request a server estimate before confirming a one-time relaunch of an existing reminder:
POST https://api.yodi.tg/v1/ai/reminders/{id}/relaunch/estimate
The endpoint is authenticated and owner-scoped. Its standard response envelope
includes an opaque, short-lived estimateToken and a pricingQuote produced
from the same active rate used for the affordability check:
interface PricingQuote {
operation: string;
unit: string;
quantity: number;
creditsPerUnit: number;
totalCredits: number;
pricingVersion: number;
}
The server supplies the channel operation, recipient quantity, unit rate,
total, and pricing version. Do not calculate the total in the browser from the
public catalog. Confirm by sending only the returned estimateToken to
POST /v1/ai/reminders/{id}/relaunch; never edit, recreate, or reuse it. A
missing or malformed quote is a contract error, not a reason to substitute a
fixed price. See the shared funding guide for the
distinction between a tariff, available balance, and reserved funds.