Skip to main content
Paid work is priced in minutes, from the payer’s balance. These pages give the rules, never amounts. To get a price, call the estimate: it runs the same price function as the charge.

Estimate, then cap

Every spending operation has an estimate, named in x-rask-operation.estimate_operation. It is free, needs no credits:spend, and changes nothing. Send its total_minutes as expected_cost_minutes. That value is a price cap, not a price:
  • A higher current price answers 409 cost_changed, with current_cost_minutes, and spends nothing.
  • An equal or lower price is charged as it is.
  • Too few minutes answer 402 insufficient_balance.
Some spends come later: the auto-dub after translation, an on-screen auto-start after the first dub, and each stage of a run. They are stored with the cap. If the price at that moment is above it, or the balance is short, the spend is skipped, uncharged, and the project or the job says why (for the auto-dub, auto_dub.skipped_reason). Behind every request sit the key’s monthly caps.

The price rules

round is rounding half to even: 90 seconds is 1.5 minutes and rounds to 2, while 150 seconds is 2.5 minutes and also rounds to 2. ceil rounds up. A dub has no cap at the full price. A changed_segments dub costs the speech of the segments it voices. There is no point where a redub is cut off at what a full dub would cost, so the estimate is the number to trust. Dub and segment-generation estimates state the rule in details.pricing_rule, and a localization estimate in details.dub.pricing_rule: full, changed_speech, selected_speech or free_language. Each minutes cost line has credit_type, feature, minutes, charged_when and basis (billable_seconds, multiplier). A project-credit line has projects instead of minutes, and no basis. The text a dub voices is held to the speech it is priced on. createDub, generateSegments and the dub of a run answer 422 validation_failed when a translation holds more than 60 characters per second of its segment, though any segment may hold 100 (errors[].code: text_too_long_for_interval). When every line passes, all the text one request voices may hold at most 3,600 characters for each minute its speech is priced at, also on a free dubbing variant (text_too_long_for_price). The estimate lists the same refusal in reasons.

The anchor segment

A dub can reuse clips from generateSegments without voicing or charging them again, but a track can be rebuilt only when at least one segment is voiced. So when every changed segment already has a current clip, the shortest is voiced again, at its own speech price with a minimum of 1 minute, and its clip in the track is a new take. The estimate discloses this before you pay: details.assembly_anchor_segment_id names the segment, and the notice assembly_anchor_voiced explains it. Details are in Voice chosen segments.

Refunds

Refunds show on the job, in cost.refunded and cost.refunded_at, and in the usage events, in refunded_minutes. A failed dub’s refund also closes the text again if it was the only dub charge.

Which pool pays

All the pools belong to the workspace owner, and all workspaces of one owner share them. The balance is in Spend, balance and errors.