---
title: "A free result's finish page, as data"
method: GET
path: "/api/try/jobs/{id}/finish"
tags: ["Free API"]
---

# A free result's finish page, as data

`GET /api/try/jobs/{id}/finish`

## Request

- Base URL: `https://audo.ai`
- URL: `https://audo.ai/api/try/jobs/{id}/finish`
- Auth: none required

What the finish link's page shows: the whole length, what the free run did, the price in credits (1 credit is 1 US cent), and how finishing is going (open, expired, finishing, done, failed). t is the finish link's token (or the status link's). A wrong or expired token reads as expired. People pay on the page itself (finishUrl); agents give them the link and keep checking the status link, whose finishedBy names the whole-file job once paid.

## Path parameters

- `id` string, required

## Query parameters

- `t` string, required
- `checkout` string

## Response `200`

OK

- object
  - `state` 'open' | 'expired' | 'finishing' | 'done' | 'failed', required
  - `jobId` string, required
  - `tool` 'remove_noise' | 'enhance_voice' | 'transcribe_audio' | 'align_script' | 'cut_audio' | 'remove_silence' | 'adjust_loudness' | 'convert_audio' | 'join_audio' | 'replace_audio' | 'analyze_audio' | 'remove_fillers' | 'level_speakers' | 'mix_tracks', nullable, required
  - `totalSeconds` number, nullable, required: The whole file's billed length
  - `processedSeconds` number, nullable, required: What the free run did
  - `priceCredits` integer, nullable, required: What the whole file costs, in credits (1 credit is 1 cent)
  - `accountJob` boolean, required
  - `firstPack` boolean, nullable: For a run of a person's account: whether that account may still buy the first-purchase pack (the credits go there). Null when whoever pays decides, by their own purchases
  - `checkout` object, nullable, required
    - `id` string, required
    - `amountCents` integer, required: The price in US cents
    - `credits` integer, required: The credits it adds
    - `status` 'open' | 'completed' | 'expired', required
    - `provider` 'stripe' | 'dev', required
    - `processing` boolean: Open, with a payment on its way that hasn't arrived yet (a bank debit, say)
    - `runJobId` string, nullable: The whole-file job this purchase started, once paid
    - `runError` string, nullable: Why the purchase's run couldn't start (such as file_expired); the credits are kept
    - `savedFor` string, nullable: Paid without signing in: the email the credits are kept for, masked
    - `leftCents` integer, nullable: Paid without signing in, once its run is done: what the purchase left over, in US cents
    - `paidTotal` object, nullable: Once paid: what the buyer was charged, tax included, in the currency they paid in (null when the payment provider didn't say)
      - `amount` integer, required: In the currency's smallest unit, such as cents
      - `currency` string, required: ISO 4217, lowercase, such as usd or eur
  - `preview` object, nullable: While it's open, the free part to listen to: the whole recording the agent sent (the page plays its free part) and what the free run made (links work for 15 minutes)
    - `originalUrl` string, required
    - `resultUrl` string, required
    - `hasVideo` boolean, required
  - `wholeJob` object, nullable, required
    - `id` string, required
    - `status` 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled' | 'held', required
    - `progress` integer, required
    - `stage` 'queued' | 'preparing' | 'processing' | 'finishing' | 'succeeded' | 'failed' | 'cancelled' | 'held', required
    - `estimatedSecondsLeft` integer, nullable, required

## Other responses

- `default`: An error, with what went wrong and what to do next

---

[API](https://skmtc.dev/audo/apis/audo-api.md) · [All operations](https://skmtc.dev/audo/apis/audo-api/llms.txt) · [OpenAPI document](https://skmtc.dev/audo/apis/audo-api/revisions/0800e93224eb?raw)
