> ## Documentation Index
> Fetch the complete documentation index at: https://docs.magichour.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Processing Times

> Recent typical end-to-end processing times for successful Magic Hour API jobs.

The published baseline values cover successful API jobs created during the **30 complete UTC
days from August 18 through September 16, 2026**. Three values use the latest 48-hour cohort, from
**September 29 at 18:00 through October 1 at 18:00 UTC**, and are marked with ◎. Three values use
the September 22 at 16:00 through September 24 at 16:00 UTC cohort and are marked with ※. Three values use
the September 19 at 16:00 through September 21 at 16:00 UTC cohort and are marked with ◇. One value uses
the September 12 at 16:00 through September 14 at 16:00 UTC cohort and is marked with ¶. Three
values use the September 5 at 17:00 through September 7 at 17:00 UTC cohort and are marked with §.
Two unchanged values use the September 4 at 01:00 through September 6 at 01:00 UTC cohort and are
marked with ‡. Unmarked rows retain their published baseline value and sample. All values measure
end-to-end time from project creation to completion, including queueing. The warehouse snapshot was
queried on October 1, 2026. A fresh 30-complete-UTC-day comparison covered September 1 through
September 30, 2026; unchanged rows retain their published sample and measurement window.

<Warning>
  These are directional observations, not an SLA or a prediction for an individual job. Processing
  time varies with the endpoint, selected model and settings, input duration and size, output
  resolution, and current queue load. Build timeout handling into every integration.
</Warning>

**Typical (p50)** means half of successful jobs finished within this time. **Sample** is the number
of successful API jobs included. Errored, canceled, and still-active jobs are excluded.

<Note>
  These metrics are reviewed twice weekly. If the end of the measurement window is more than seven
  days old, treat the figures as historical until the next refresh.
</Note>

## Video endpoints

| Endpoint | Typical (p50) | Sample |
| - | -: | -: |
| [`POST /v1/ai-talking-photo`](/api-reference/video-projects/ai-talking-photo) | 41s | 19†‡ |
| [`POST /v1/ai-video-editor`](/api-reference/video-projects/ai-video-editor) | 1m 11s | 16† |
| [`POST /v1/animation`](/api-reference/video-projects/animation) | 2m 46s | 10† |
| [`POST /v1/audio-to-video`](/api-reference/video-projects/audio-to-video) | 1m 11s | 26† |
| [`POST /v1/auto-subtitle-generator`](/api-reference/video-projects/auto-subtitle-generator) | 52s | 30 |
| [`POST /v1/character-replace`](/api-reference/video-projects/character-replace) | 5m 23s | 144◎ |
| [`POST /v1/face-swap`](/api-reference/video-projects/face-swap-video) | 1m 17s | 152※ |
| [`POST /v1/image-to-video`](/api-reference/video-projects/image-to-video) | 33s | 140※ |
| [`POST /v1/lip-sync`](/api-reference/video-projects/lip-sync) | 1m 30s | 61‡ |
| [`POST /v1/text-to-video`](/api-reference/video-projects/text-to-video) | 25s | 128§ |
| [`POST /v1/video-to-video`](/api-reference/video-projects/video-to-video) | 6m 26s | 63 |

† Fewer than 30 successful jobs. Treat these figures as low-confidence until more traffic is
available.

‡ Uses the prior 48-hour API cohort, from September 4 at 01:00 through September 6 at 01:00 UTC.

§ Uses an earlier 48-hour API cohort, from September 5 at 17:00 through September 7 at 17:00 UTC,
because its median was faster than the value published before that refresh.

¶ Uses the September 12 at 16:00 through September 14 at 16:00 UTC cohort,
because its median was faster than the currently published value. Other rows retain their published
baseline or earlier 48-hour value.

◇ Uses the September 19 at 16:00 through September 21 at 16:00 UTC API cohort.

※ Uses the September 22 at 16:00 through September 24 at 16:00 UTC API cohort.

◎ Uses the latest 48-hour API cohort, from September 29 at 18:00 through October 1 at 18:00 UTC,
because its median was faster than the currently published value. Other rows retain their published
baseline or earlier 48-hour value.

## Image endpoints

| Endpoint | Typical (p50) | Sample |
| - | -: | -: |
| [`POST /v1/ai-clothes-changer`](/api-reference/image-projects/ai-clothes-changer) | 10s | 92¶ |
| [`POST /v1/ai-face-editor`](/api-reference/image-projects/ai-face-editor) | 2s | 33※ |
| [`POST /v1/ai-gif-generator`](/api-reference/image-projects/ai-gif-generator) | 26s | 179 |
| [`POST /v1/ai-headshot-generator`](/api-reference/image-projects/ai-headshot-generator) | 16s | 147 |
| [`POST /v1/ai-image-editor`](/api-reference/image-projects/ai-image-editor) | 10s | 299§ |
| [`POST /v1/ai-image-generator`](/api-reference/image-projects/ai-image-generator) | 4s | 401◇ |
| [`POST /v1/ai-image-upscaler`](/api-reference/image-projects/ai-image-upscaler) | 17s | 80◎ |
| [`POST /v1/ai-meme-generator`](/api-reference/image-projects/ai-meme-generator) | 6s | 322 |
| [`POST /v1/ai-qr-code-generator`](/api-reference/image-projects/ai-qr-code-generator) | 7s | 233 |
| [`POST /v1/body-swap`](/api-reference/image-projects/body-swap) | 27s | 38 |
| [`POST /v1/face-swap-photo`](/api-reference/image-projects/face-swap-photo) | 5s | 233§ |
| [`POST /v1/head-swap`](/api-reference/image-projects/head-swap) | 18s | 51◇ |
| [`POST /v1/image-background-remover`](/api-reference/image-projects/image-background-remover) | 5s | 84◇ |
| [`POST /v1/photo-colorizer`](/api-reference/image-projects/photo-colorizer) | 10s | 100 |

## Audio endpoints

| Endpoint | Typical (p50) | Sample |
| - | -: | -: |
| [`POST /v1/ai-voice-generator`](/api-reference/audio-projects/ai-voice-generator) | 4s | 46◎ |
| [`POST /v1/ai-voice-cloner`](/api-reference/audio-projects/ai-voice-cloner) | 1m 11s | 200 |

## Monitor every job

After creating a job, store its project ID and monitor the corresponding image, video, or audio
project until it reaches a terminal status.

* Prefer [webhooks](/integration/webhook/overview) for production and higher-volume integrations.
* If polling, use [exponential backoff](/integration/adding-api-to-your-app#option-1-polling) instead
  of a tight fixed interval.
* Handle `complete`, `error`, and `canceled` explicitly. Continue waiting while a job is `queued` or
  `rendering`.
* Make webhook handlers idempotent and
  [verify every webhook signature](/integration/webhook/secure-handler).

## Choose timeouts for your product

Do not use a typical time as a failure threshold. Set a user-facing timeout based on your product's
tolerance for delayed work. Reaching that timeout should stop or defer your own waiting flow; it
does not prove the Magic Hour job failed. Keep the project ID so you can check the final status
later.

Longer inputs, higher resolutions, and more complex video workflows generally need more time than
small image jobs. Test the exact endpoints, models, settings, and input ranges your integration will
use before choosing retry and timeout behavior.

## Investigate an unusually long job

1. Retrieve the project again and check its current status and error details.
2. Confirm the input file is valid and the account has enough credits.
3. Avoid submitting duplicate jobs while the original is still active.
4. If the job remains active beyond your workload-specific timeout, contact support with the project
   ID, endpoint, creation time, current status, and non-sensitive input details.

[Learn how to monitor jobs and handle errors →](/integration/adding-api-to-your-app#step-3-monitor-job-status)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.