> ## 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 refreshed baseline comparison covers successful API jobs created during the **30 complete UTC
days from August 18 through September 16, 2026**. One value uses the latest 48-hour cohort, from
**September 15 at 18:00 through September 17 at 18:00 UTC**, and is marked with ※. Two values use
the September 12 at 16:00 through September 14 at 16:00 UTC cohort and are marked with ¶. Five
values use the September 5 at 17:00 through September 7 at 17:00 UTC cohort and are marked with §.
Four 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 September 17, 2026.

<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)             |       11m 30s |    331 |
| [`POST /v1/face-swap`](/api-reference/video-projects/face-swap-video)                       |        1m 28s |   165§ |
| [`POST /v1/image-to-video`](/api-reference/video-projects/image-to-video)                   |         1m 9s |   130‡ |
| [`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 latest 48-hour API cohort, from September 15 at 18:00 through September 17 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)                     |            3s |    63¶ |
| [`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)             |            5s |   213※ |
| [`POST /v1/ai-image-upscaler`](/api-reference/image-projects/ai-image-upscaler)               |           27s |    443 |
| [`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)                               |           19s |    36§ |
| [`POST /v1/image-background-remover`](/api-reference/image-projects/image-background-remover) |            6s |    414 |
| [`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) |           19s |    620 |
| [`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)
