Source: https://01router.com/docs/models/ltx-2.5-pro/quote Base URL: https://01router.com/api/v1 # LTX-2.5 Pro · Quote Choose API quotes or frontend quotes: the API returns costs for currently available providers; frontend quotes read prices and billing fields from models and recalculate locally when inputs change. `POST /api/v1/quote` Public · No API key ## API quotes Call POST /api/v1/quote with Content-Type: application/json. No API key is required and no credits are charged. This endpoint supports video, image and audio generation. Chat costs use token counts, as described under frontend quotes. Required body fields: model (model slug) and input (generation parameters). Supply prompt, duration, resolution, num_images and other fields declared by the model, using the same parameters as generation creation. Optional provider pins a channel; optional project is a project ID used to resolve custom model names. Without provider, the endpoint quotes automatic routing candidates. The providers array contains provider, unit, quantity, price_usd, original_price_usd and credits, in server routing order; its first entry is the automatic route’s first choice. unavailable lists rejected providers and reasons; handle the returned error if the request fails or no provider is available. For metered audio, the quote is a reservation; final charges use actual usage. ## Frontend quotes Read prices: request GET /api/v1/models, optionally filtering by type. In the standard catalog, select a model by slug from data, then a channel from providers, and read that channel’s prices, params and billing. For GET /api/v1/models?project=PROJECT_ID, read these fields directly from the selected model in data. Reads are public and require no API key; project catalogs enforce their configured domain restrictions for cross-origin access. ### Price fields | Field | Meaning and use | | --- | --- | | prices[].unit | Billing unit: request, second, image, kchar (1,000 characters), or input_token / output_token (one million tokens). | | prices[].priceMicros | Unit price in micro-USD. 1,000,000 micro-USD = 1 USD; token prices cover one million tokens. | | prices[].conditions | Conditions such as resolution or mode. For tokens, min_input_tokens is the input-length threshold, defaulting to 0. | | params | Supported inputs for the selected provider. Use type, required, default, options and min/max to validate inputs and apply defaults. | | billing.modelParams | Model-level parameter definitions, used to validate user input first. | | billing.upstreamParams | Optional. When present, these definitions determine the final validated input and defaults. | | billing.characterBilling | Optional character settings: fields to count, block size for rounding up, and minimum billable characters. | | billing.metering | Optional audio usage settings: outputTokenHold reserves output tokens; providerCost=true means final cost must be reported by the provider. | | billing.creditsPerUsd | Credits per dollar. When null, do not calculate gateway credits. Do not multiply prices[].credits by quantity. | | billing.priceScope | gateway means gateway prices; project means resale prices with the project ratio already applied. | | billing.version | The current calculation contract is version 1. Stop quoting and refresh the catalog for an unsupported version. | | billing.unavailableReason | A nonempty value means this configuration cannot be quoted. Show the reason rather than a free price. | | prices[].originalMicros | Optional list price for display only; it does not determine the amount charged. | | fromMicros | Starting unit price in the model list, not a request total. Use the selected provider’s prices for a quote. | | maxMicros | Highest unit price in the model list (unit in maxUnit), not a request total. Use the selected provider’s prices for a quote. | ### Before calculating: prepare inputs and select a price Prepare input: billing.version=1 is the current calculation contract; a nonempty billing.unavailableReason prevents quoting. Validate model input against billing.modelParams, then validate and apply defaults using the channel’s params types, required, default, options and min/max constraints. If billing.upstreamParams exists, its validated input and defaults are final. Ignore a field unsupported by the channel or upstream only when its value equals the model default; otherwise reject it. Derive mode as image or text from whether image/images fields in the final parameter definitions have a value; do not trust a user-supplied mode. For request, second, image and character billing, match every prices[].conditions entry against the final input, comparing values as strings. Choose the matching rule with the most conditions; keep response order for ties. For tokens, use the input-length tiers below. ### Per request (request) Quantity is 1 per request. Total micro-USD = round(priceMicros × 1), independent of duration or image count. Example: a unit price of 20,000 micro-USD costs $0.02 per request. ### Per second (second) Use input.duration after applying defaults, with a minimum of 1. If neither the input nor the model provides a value, use 1. Total micro-USD = round(priceMicros × seconds). Example: 50,000 micro-USD per second for 8 seconds costs $0.40. Duration must still satisfy the model’s constraints. ### Per image (image) Use input.num_images after applying defaults, with a minimum of 1. If neither the input nor the model provides a value, use 1. Total micro-USD = round(priceMicros × image count). Example: 30,000 micro-USD per image for 4 images costs $0.12. The count must still satisfy the model’s constraints. ### Per character count (kchar) The unit price covers 1,000 characters. By default, count input.prompt using JavaScript string length, not bytes; some emoji count as 2. With billing.characterBilling, sum the string lengths of fields, round up to a multiple of block when configured, then apply minimum. The final count is at least 1 character. Quantity = billable characters / 1,000; total micro-USD = round(priceMicros × quantity). Example: 1,200 characters with block=1,000 and minimum=1,000 bills 2,000 characters. At 100,000 micro-USD per thousand, the total is $0.20. Without block, do not round up to whole thousands. ### Per token (input_token / output_token) Input and output have separate prices, each per 1,000,000 tokens. For each unit, choose the highest min_input_tokens threshold reached by the input token count; an omitted threshold is 0, and ties keep response order. The output price tier also depends on the input count. Total micro-USD = ceil(input price × input tokens / 1,000,000 + output price × output tokens / 1,000,000). Add both costs before rounding up. Example: input price 1,000,000 and output price 2,000,000 micro-USD, with 1,000 input and 500 output tokens, costs $0.002. Token counts are not character counts; unknown output usage is only an estimate. Audio reservation: when billing.metering exists, estimate input tokens as the UTF-8 byte length of prompt concatenated with style_instructions plus 256, and use outputTokenHold for output tokens. Apply the token formula to reserve funds. Final settlement uses actual usage; providerCost=true requires the provider’s cost report. ### Convert totals to dollars and credits Above, round means rounding to integer micro-USD with Math.round; ceil means rounding up with Math.ceil. Dollars = total micro-USD / 1,000,000. When billing.creditsPerUsd is non-null, credits = max(1, ceil(dollars × creditsPerUsd - 1e-9)). The minimum is 1 credit; subtracting 1e-9 avoids extra credits from floating-point error. Example: $0.40 at 250 credits per dollar is 100 credits. ### Project prices and estimate validity Project prices: billing.priceScope=project means unit prices already include the resale ratio; do not apply it again. billing.creditsPerUsd=null, so these prices cannot determine gateway credits. POST /quote returns gateway prices and credits even with project supplied; it excludes project resale markup. Consistency: these rules match backend calculations for the same price configuration, pinned provider and input. Catalogs are cached for 60 seconds; refresh after price changes. Frontend estimates do not lock prices. Routing also considers availability, priority and circuit breakers, so a local minimum is not a guaranteed charge. Invalid input, unsupported versions or missing prices must show an unavailable quote, not a free price. ## Input parameters | Field | Type | Required | Description | Constraints | | --- | --- | --- | --- | --- | | model | string | yes | Model slug from the catalog. Project keys may use a project-specific model slug. | options: [ "ltx-2.5-pro" ] | | input | object | yes | Model-specific input object. See the selected model reference for required fields, defaults and limits. | | | provider | string | no | Optional provider slug. Omit for automatic routing; project settings may pin the provider. | | | project | string | no | Optional project ID. Use its published model catalog and routing configuration. | | | input.prompt | string | yes | | | | input.image_url | string | no | Optional start image (image-to-video) | | | input.end_image_url | string | no | | | | input.duration | enum | no | | default: 6; options: [ 6, 8, 10 ] | | input.resolution | enum | no | | default: "1080p"; options: [ "720p", "1080p" ] | | input.aspect_ratio | enum | no | | default: "16:9"; options: [ "16:9", "9:16" ] | | input.generate_audio | boolean | no | | default: true | ## Response fields | Field | Type | Required | Description | Constraints | | --- | --- | --- | --- | --- | | model | string | — | Model slug from the catalog. Project keys may use a project-specific model slug. | | | input | object | — | Model-specific input object. See the selected model reference for required fields, defaults and limits. | | | providers | array | — | Available providers in server routing order, with unit, quantity, price_usd, original_price_usd and credits. The first entry is the automatic route's first choice. | | | unavailable | array | — | Rejected providers and the reason each cannot serve the request. | | ## Examples (pseudocode) ### API quotes ```text parameters.model ← selected model slug parameters.input ← prompt, duration, resolution and other generation fields parameters.provider ← selected provider (optional) parameters.project ← project ID (optional) result ← POST /api/v1/quote with parameters as the JSON body On failure, display error; on success, display price_usd and credits from providers Use unavailable to explain why other providers were excluded ``` ### Frontend quotes ```text catalog ← GET /api/v1/models (add project for a project catalog) source ← selected model’s provider; for a project, select the model directly input ← validate, apply defaults and derive mode using params and billing rule ← match prices conditions; for tokens, select context tiers quantity ← derive from unit and input; use billing.metering for audio holds total micros ← ordinary: round(unit price × quantity); tokens: ceil(input cost + output cost) dollars ← total micros / 1,000,000 credits ← if creditsPerUsd is non-null: max(1, ceil(dollars × creditsPerUsd - 1e-9)) Display estimate; recalculate locally on input changes without calling /quote ```