Skip to content

Billing and limits

API usage is paid with Anytime and Earned credits only — free credits and plan credits can’t be used for the API. A run draws on your Anytime credits first, then on your Earned credits. A credit pack from the pricing page adds Anytime credits. Runs started from the MCP connector are paid like studio runs instead.

A call that starts a run — a generation, a dataset preparation, a training run — costs credits. The run is charged for what it uses:

  • When it starts, it reserves credits: the workflow variant’s pricing.initialCreditsReservationMilli. When your Anytime and Earned credits don’t cover the reservation, the call answers failed_precondition, with the rule above as its message, and starts nothing. The reservation is what a run needs to start, not its price: a long run, such as a training run, can cost more and keeps drawing on your Anytime and Earned credits; if they run out, the run fails with the same message.
  • While it runs, it is charged for what it uses: its GPU and CPU time and the data it reads and writes on Voplica’s models, and the provider’s bill on a third-party model. A Sensitive run’s steps on isolated hardware cost 10 % more (privacyMode PRIVACY_SENSITIVE, which needs a Base or Premium plan; when it is not set, your account’s default applies). Audio — voices, speech and music — is charged by its GPU time, like images and videos. The speed setting, inference_mode, does not change how a run is charged.
  • There is no minimum charge: a short run pays only for what it used.
  • When it ends, any unused part of the reservation comes back.

Amounts are in thousandths of a credit (…Milli).

  • One attempt per step. If a step has to start again — for example, after a machine fails during the run — you pay for at most one attempt of that step: the most expensive one.
  • A failure on Voplica’s side is refunded. The run’s creditsReversedMilli shows what came back, and creditsNetChargedMilli what the run cost. If a run failed on Voplica’s side and was still charged, open a billing issue on the Support page; every account can.
  • A failure caused by the request is not refunded, for example an input the model cannot use.
  • A request blocked by the checks before it runs is not charged (Content policy). When a third-party model’s own safety systems stop a generation, its credits are returned.

Each run carries its own costs: GetWorkflowExecution returns creditsChargedMilli, creditsReversedMilli and creditsNetChargedMilli, and GetWorkflowOutput breaks the cost down by step (Generating images and videos). Across runs, PaymentService.ListOperationTransactions lists your transactions, newest first, one per run:

Terminal window
curl -X POST https://api.voplica.com/voplica.api.payment.PaymentService/ListOperationTransactions \
-H "Authorization: Bearer $VOPLICA_API_KEY" \
-H 'Content-Type: application/json' \
-d '{"limit": 3}'

The answer, shortened:

{
"transactions": [
{
"id": "…",
"idempotencyKey": "<the run's id>",
"state": "TX_CLOSED",
"reservedCreditsMilli": "29600",
"totalChargedMilli": "1712"
}
],
"nextToken": "…",
"prevToken": "…"
}

A transaction’s idempotencyKey is the id of its run. GetBillingInfo returns your balance.

Limit Value
Active API keys per account 30
A request body 1 MiB (1,048,576 bytes), counted after decompression
An idempotency key at most 30 characters: letters, digits and _
One text in a request, such as a prompt 8,000 characters; a longer one is refused, uncharged (CONTENT_POLICY_INPUT_TOO_LONG)

A key has no rate limit of its own (Authentication). Some actions have per-account quotas: a call over one answers resource_exhausted (the JSON API’s errors). The limits above answer in their own way: a body over 1 MiB with invalid_argument (the message gives the limit), an idempotency key outside its rule with invalid_argument too, a text over 8,000 characters with a FAILED run; a 31st active key is refused in the studio.