Skip to main content

Plans and Subscriptions

Plan terms are managed at runtime and can change. Do not rely on fixed plan names, prices, quotas, or request limits copied from an old example. The public catalogue is the source of truth for currently published plans.

The cards below load the public plan catalog when this page opens. Prices, quotas, request limits, wallet credits per cycle, and localized descriptions come from the backend; no plan terms are embedded in this documentation build. If the catalog cannot be validated, the page shows an error instead of substituting sample values.

Loading the current catalog…

Live Plan Catalog​

Endpoint: GET /subscription/catalog

This public endpoint returns the published plan catalog used by customer surfaces. Its response is the standard Yodi envelope; data.plans contains the localized display copy, current price and currency, quotas, rate limit, wallet credits per cycle, and the supported purchase action. The optional stale flag identifies a backend-served cached catalog.

curl --fail-with-body "https://api.yodi.tg/v1/subscription/catalog"
interface PublicPlanCatalog {
plans: Array<{
slug: string;
price: string | null;
currency: string;
quota_limit: number | null;
rate_limit: number | null;
walletCreditsPerCycle: number | null;
action: "signup" | "checkout" | "contact";
featured: boolean;
title: { fr: string; en: string };
subtitle: { fr: string; en: string };
highlights: { fr: string[]; en: string[] };
}>;
generated_at: string;
stale: boolean;
}

Prices are decimal strings to preserve currency precision. Nullable values remain nullable; a null quota_limit means unlimited, while a null price means no published price. Do not infer a price, quota, or purchase flow from a plan name. The public API may change these terms after an administrator publishes an update, so retrieve them at runtime rather than copying them into a client.

Read Operation Unit Prices​

Endpoint: GET /billing/pricing

Use this public catalogue to read the active credit price and unit for each billable operation. A successful request, generated audio second, transcription, or channel delivery can have a different unit and price. The catalogue does not expose account balances or provider/model choices.

curl --fail-with-body "https://api.yodi.tg/v1/billing/pricing"

See Operation unit pricing for the response contract and the meaning of each billable unit.

Understand Your Funding Balance​

Endpoint: GET /credits/me/funding

Use an authenticated Yodi Console session. The API identifies the account from that session; clients must not submit another user's identifier. The response's fundingModel identifies the active contract for that environment. Use the shared-wallet response as the account-wide spendable balance when it is active; legacy service-bucket reporting is not evidence that funds are spendable across services.

See Shared wallet and funding models for both explicit response variants and migration behavior. Never add legacy service counters to the shared-wallet balance.

Start or Manage a Subscription​

Subscription purchase and management use the authenticated checkout and account flows in Yodi Console. Do not call guessed subscription-creation, provider checkout, or cancellation routes: those are not part of this public integration contract. A payment or promotion changes an account's entitlement only after the backend confirms the corresponding transaction outcome.

See Payments and transactions for the payment state contract.