---
title: "Video Completed"
method: POST
path: "/video.completed"
tags: ["Video Events"]
---

# Video Completed

`POST /video.completed`

The request example illustrates what your webhook endpoint should expect.

## Headers

- `magic-hour-event-signature` string, required — A signatured created with the webhook secret key and a signed_payload, using HMAC with SHA-256
- `magic-hour-event-timestamp` string, required — Time in seconds since the epoch. Use this value to check whether the request is within a reasonable window of the current time. Usually less than 5 minutes.

## Request body

- object
  - `type` 'video.completed', required
  - `payload` object, required — Success
    - `id` string, required — Unique ID of the video. Use it with the [Get video Project API](https://docs.magichour.ai/api-reference/video-projects/get-video-details) to fetch status and downloads.
    - `name` string, nullable, required — The name of the video.
    - `status` 'draft' | 'queued' | 'rendering' | 'complete' | 'error' | 'canceled', required — The status of the video.
    - `type` string, required — The type of the video project. Possible values are ANIMATION, AUTO_SUBTITLE, VIDEO_TO_VIDEO, FACE_SWAP, TEXT_TO_VIDEO, IMAGE_TO_VIDEO, LIP_SYNC, TALKING_PHOTO, VIDEO_UPSCALER, VIDEO_EDITOR, CHARACTER_REPLACE, VIDEO_COLORIZER, MUSIC_VIDEO, EXTEND, AUDIO_TO_VIDEO, VIDEO_EXPANDER, UGC_AD
    - `created_at` string, date-time, required
    - `width` integer, required — The width of the final output video. A value of -1 indicates the width can be ignored.
    - `height` integer, required — The height of the final output video. A value of -1 indicates the height can be ignored.
    - `enabled` boolean, required — Whether this resource is active. If false, it is deleted.
    - `start_seconds` number, float, required — Start time of your clip (seconds). Must be ≥ 0.
    - `end_seconds` number, float, required — End time of your clip (seconds). Must be greater than start_seconds.
    - `credits_charged` integer, required — The amount of credits deducted from your account to generate the video. If the status is not 'complete', this value is an estimate and may be adjusted upon completion based on the actual FPS of the output video. If video generation fails, credits will be refunded, and this field will be updated to include the refund.
    - `fps` number, required — Frame rate of the video. If the status is not 'complete', the frame rate is an estimate and will be adjusted when the video completes.
    - `error` object, nullable, required — In the case of an error, this object will contain the error encountered during video render
      - `message` string, required — Details on the reason why a failure happened.
      - `code` string, required — An error code to indicate why a failure happened.
    - `downloads` object[], required
      - `url` string, uri, required
      - `expires_at` string, date-time, required

## Response `200`

Success

- object — Success
  - `message` string, required

## Other responses

- `400` — Error
- `500` — Error

---

[API](https://skmtc.net/magichourhq/apis/magic-hour-webhook.md) · [All operations](https://skmtc.net/magichourhq/apis/magic-hour-webhook/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/magichourhq/magic-hour-webhook/revisions/00604aab4c16/schema)
