---
title: "Quote a product bundle"
method: POST
path: "/videos/{videoId}/quote"
tags: ["Credits"]
---

# Quote a product bundle

`POST /videos/{videoId}/quote`

## Request

- Base URL: `https://api.braiv.co/v1`
- URL: `https://api.braiv.co/v1/videos/{videoId}/quote`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`

Calculates the exact credits required without debiting the account. Duration is resolved from the video unless supplied. Required scope: `videos:read`.

## Path parameters

- `videoId` string, required

## Headers

- `Idempotency-Key` string

## Request body

- CreditBundleRequest
  - `durationSeconds` number: Settled billing duration; otherwise resolved from the source video.
  - `dubs` CreditDubSelection[]: Dubs included in the quote or reservation.
    - `product` 'plus' | 'premium': Dubbing voice product: - `plus` — expressive multilingual dubbing using a Braiv voice. - `premium` — dubbing with a cloned voice created from each speaker's source samples.
    - `languages` LanguageCode[], required: Target languages priced separately.
  - `captionLanguageCodes` LanguageCode[]: Caption translation languages to price.
  - `transcriptOnly` boolean: Reserve source transcription as a standalone action.
  - `shorts` CreditShortsSelection
    - `kind` 'shorts' | 'promo' | 'clips', required: Shorts-family product to price: `shorts` prices short highlights, `promo` prices one promotional edit, and `clips` prices long-form excerpts.
    - `numClips` integer: Number of clips priced; defaults to one.
    - `includeWatermark` boolean: Affects clip pricing and subscriber rebates.
    - `isSubscriber` boolean: Pricing hint consumed by the bundle pricer.
    - `includeSoundtrack` boolean: Adds the promo soundtrack product.
    - `includeGeneratedThumbnail` boolean: Adds generated thumbnail pricing to each long clip.
  - `zeroPromptThumbnail` CreditThumbnailSelection
    - `enabled` boolean, required: Only `true` creates thumbnail line items.
    - `referenceProducts` string[]: Additional catalog products used as references.
    - `characterCount` integer: Character reference slots added to pricing.
    - `translateLanguageCodes` LanguageCode[]: Thumbnail translation languages priced individually.
    - `autoDetectContentMoments` boolean: Adds the `content-moment-detect` line item. Set this when the generation recipe uses Precision `autoDetectContentReferences`. Quote field name stays `autoDetectContentMoments` for pricing.

## Response `200`

Current pricing, balance, shortfall, and per-action breakdown.

- CreditQuote
  - `total` number, required: Total credits required by all line items.
  - `durationSeconds` number, required: Settled duration used for pricing.
  - `pricingVersion` string, required: Pricing ruleset identifier.
  - `balance` number, required: Current account credit balance.
  - `usageBillingActive` boolean, required: If true, wallet shortfall does not block the operation.
  - `shortfall` number, required: Additional wallet credits required; zero with usage billing.
  - `sufficient` boolean, required: Whether billing can cover the quoted total.
  - `breakdown` CreditQuoteLine[], required: Per-action pricing lines.
    - `actionKey` 'dub' | 'captions' | 'transcript' | 'zero-prompt-thumbnail' | 'thumbnail-translate' | 'content-moment-detect' | 'lipsync' | 'shorts-clip' | 'promo' | 'longclip', required: Billable action consumed by downstream work.
    - `product` string, required: Internal catalog product used for pricing.
    - `targetLanguageCode` string: ISO-style language or locale code accepted by the underlying product.
    - `credits` number, required: Exact credits quoted or reserved.
    - `description` string: Human-readable line-item summary.

## Other responses

- `400`: Request fields are missing, malformed, out of bounds, or mutually inconsistent.
- `401`: A supported authentication header is missing or contains an invalid Public API key.
- `403`: Authentication succeeded, but the required scope, workspace role, or resource permission is missing.
- `404`: The resource does not exist or is not accessible to the caller.
- `409`: The Idempotency-Key was reused with a different path or request body.
- `422`: Duration-priced work cannot be quoted because media duration is unknown.
- `429`: The API key exceeded its allowed concurrency or request rate. Retry after in-flight work completes or the limit resets.
- `500`: An unexpected server error occurred.

---

[API](https://skmtc.dev/braiv/apis/braiv-public-api.md) - [All operations](https://skmtc.dev/braiv/apis/braiv-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/braiv/apis/braiv-public-api/revisions/8ed0fd0d0a6f?raw)
