Skip to main content

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;
}>;
}
FieldMeaning
versionPositive integer identifying the active pricing version.
effectiveAtUTC activation timestamp, or null if the active version has no activation timestamp.
operationsUp to 12 unique, enabled operation prices. Disabled operations are omitted.
operationClosed identifier for one billable YODI operation.
unitUnit used for the price. Read it from the response; do not infer it from the operation name.
creditsPerUnitInteger 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.