---
title: "Confirm an order"
method: POST
path: "/orders/{id}/confirm"
tags: ["Orders"]
---

# Confirm an order

`POST /orders/{id}/confirm`

## Request

- Base URL: `https://www.happyscribe.com/api/v1`
- URL: `https://www.happyscribe.com/api/v1/orders/{id}/confirm`
- Auth: API key in header `Authorization`

Confirms an order previously created with `confirm: false`. Once confirmed, the
order begins processing according to the selected service type.

## Path parameters

- `id` string, required

## Response `200`

Order was confirmed and submitted for processing.

- Order
  - `id` string: Unique identifier for the order (UUID format).
  - `folder_id` integer
  - `state` 'incomplete' | 'waiting_for_payment' | 'submitted' | 'locked' | 'fulfilled' | 'failed' | 'canceled' | 'expired' | 'free_trial_submitted' | 'free_trial_fulfilled': Current state of the order: - `incomplete` — created but not yet submitted - `waiting_for_payment` — waiting for payment to be processed - `submitted` — submitted, processing in progress - `locked` — insufficient credits or balance; unlock from the UI after topping up - `fulfilled` — completed successfully - `failed` — processing failed; see `failure_reason` - `canceled` — the order was canceled - `expired` — an old failed or incomplete order that has been cleaned up - `free_trial_submitted` / `free_trial_fulfilled` — legacy free-trial states
  - `operations` OrderOperation[]
    - `name` string: The type of operation, e.g. `transcription_translation` or `subtitles`.
    - `type` 'auto' | 'pro': The service level.
    - `language` string: The source language code.
    - `target_language` string: The target language code, for translation operations.
    - `glossary_ids` string[]: Glossary IDs, beginning with `gls_`.
    - `style_guide_id` integer
    - `use_vocab` boolean: Whether vocabulary optimization is used (subtitle operations).
  - `details` OrderDetails: Pricing information and items being processed.
    - `items` object[]
      - `input_id` integer
      - `filename` string
      - `pricing_unit_name` string
      - `pricing_unit_count` number
      - `service` OrderOperation
        - `name` string: The type of operation, e.g. `transcription_translation` or `subtitles`.
        - `type` 'auto' | 'pro': The service level.
        - `language` string: The source language code.
        - `target_language` string: The target language code, for translation operations.
        - `glossary_ids` string[]: Glossary IDs, beginning with `gls_`.
        - `style_guide_id` integer
        - `use_vocab` boolean: Whether vocabulary optimization is used (subtitle operations).
      - `addon_id` integer, nullable
      - `addon_name` string, nullable
      - `turnaround_minutes` integer
      - `cents_per_unit` integer
      - `cents` integer
      - `credits` number, nullable
    - `pricing_unit_name` string
    - `pricing_unit_total_count` number
    - `total_cents` integer
    - `total_credits` number, nullable
    - `currency` string
    - `currency_symbol` string
    - `addons_total_cents` object
    - `minimum_charge` integer
  - `addons` object[]
    - `name` string
  - `inputs` object[]
    - `transcription_id` string
  - `can_be_submitted` boolean
  - `outputs_ids` string[]: IDs (UUIDs) of the generated transcriptions or translations. Only present when the order is fulfilled.
  - `transcriptions` object[]: Generated transcriptions with their state and estimated delivery time.
    - `id` integer
    - `uuid` string
    - `name` string
    - `state` string
    - `language` string
    - `estimated_at` string, date-time
  - `ingestions` Ingestion[]
    - `id` integer
    - `name` string: The name of the file being ingested.
    - `state` 'idle' | 'transferring' | 'transferred' | 'analyzing' | 'done' | 'failed' | 'expired'
    - `failure_reason` 'failed_import' | 'invalid_file' | 'failed_analysis' | 'unknown': Only present when `state` is `failed`: - `failed_import` — the file could not be downloaded (URL errored, private, or expired) - `invalid_file` — the file format is not supported - `failed_analysis` — media metadata could not be extracted - `unknown` — something else went wrong; contact support
    - `failure_message` string: Only present when `state` is `failed`. Human-readable, suitable for displaying to an end user.
  - `failure_reason` 'ingestion_failed' | 'transcription_failed' | 'unknown': Present when `state` is `failed`: - `ingestion_failed` — one or more files could not be imported; inspect `ingestions[]` - `transcription_failed` — the transcription/subtitling step failed; inspect `transcriptions[]` - `unknown` — no identifiable cause; contact support

## Other responses

- `400`: The order cannot be submitted in its current form (already submitted, language unavailable, or a localization target is missing). The error's `message` gives the specific reason.
- `401`: Your API key is missing (`missing_api_key`) or wrong (`invalid_api_key`), or it may not access this resource (`unauthorized`).
- `409`: The order's media is still being ingested and cannot be confirmed yet. Retry after the number of seconds in the `Retry-After` header — or omit `confirm` at creation (it defaults to `true`) so the order auto-submits once ready.

---

[API](https://skmtc.dev/happyscribe/apis/happyscribe-api.md) - [All operations](https://skmtc.dev/happyscribe/apis/happyscribe-api/llms.txt) - [OpenAPI document](https://skmtc.dev/happyscribe/apis/happyscribe-api/revisions/1281bd968c3d?raw)
