From 4e8f2263f853765598caebba259ae2bf5da04c97 Mon Sep 17 00:00:00 2001 From: David Hu Date: Sat, 22 Aug 2026 13:05:05 -0700 Subject: [PATCH] docs: refresh stale product and API guidance --- api-reference/models.mdx | 14 ++++++------ api-reference/openapi.json | 30 +++++++++++++------------- billing/overview.mdx | 4 ++-- billing/subscription-pricing.mdx | 17 ++++++++------- changelog.mdx | 2 +- changelog/2024.mdx | 4 ++-- changelog/2025.mdx | 8 +++---- get-started/quick-start.mdx | 6 +++--- integration/adding-api-to-your-app.mdx | 2 +- integration/webhook/event-types.mdx | 2 +- tools/audio/voice-cloner.mdx | 10 ++++----- tools/audio/voice-generator.mdx | 8 +++---- tools/image/headshot-generator.mdx | 6 +++--- 13 files changed, 58 insertions(+), 55 deletions(-) diff --git a/api-reference/models.mdx b/api-reference/models.mdx index b726dab..e8a7722 100644 --- a/api-reference/models.mdx +++ b/api-reference/models.mdx @@ -18,6 +18,7 @@ Available on [text to video](/api-reference/video-projects/text-to-video) and | Model | Best for | Resolutions | Durations (seconds) | Audio | | :------------------ | :-------------------------------------------------------- | :---------------- | :--------------------------------------------------------------------------------------------------- | :-------------------- | | `ltx-2.3` | Fastest output. Best for rapid iteration | 480p, 720p, 1080p | 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30 | Yes, no extra credits | +| `minimax-h3` | Native-audio video with flexible duration | 480p, 720p, 1080p | 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30 | Yes, no extra credits | | `wan-2.2` | Strong physics, camera moves, and motion | 480p, 720p, 1080p | 3, 4, 5, 6, 7, 8, 9, 10, 15 | No | | `kling-2.6` | Great for action, motion blur, and camera moves | 720p, 1080p | 5, 10 | No | | `kling-3.0` | Best overall quality for cinematic storytelling | 720p, 1080p, 4k | 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 | Yes, costs extra | @@ -43,6 +44,7 @@ Credits per second of output. Multiply by your `end_seconds` to estimate a job. | Model | 480p | 720p | 1080p | 4k | With audio | | :------------------ | ---: | ---: | ----: | --: | :---------------------------- | | `ltx-2.3` | 24 | 48 | 72 | — | Included | +| `minimax-h3` | 24 | 48 | 72 | — | Included | | `wan-2.2` | 24 | 48 | 72 | — | Not supported | | `kling-2.6` | — | 36 | 72 | — | Not supported | | `kling-3.0` | — | 48 | 72 | 240 | +24 at 720p, 1080p; +48 at 4k | @@ -104,9 +106,9 @@ and generating multiple images multiplies the cost. | `qwen-edit` | — | 2 | | `seedream-v4.5` | — | 9 | -## Fixed-cost endpoints +## Reference costs -These endpoints have a single model and a flat rate. +These endpoints have a single model. Some rates vary by resolution or output settings. | Endpoint | Credits | | :--------------------------------------------------------------------------------- | :--------------------------------------- | @@ -116,13 +118,13 @@ These endpoints have a single model and a flat rate. | [AI Headshot Generator](/api-reference/image-projects/ai-headshot-generator) | 50 per headshot | | [AI Meme Generator](/api-reference/image-projects/ai-meme-generator) | 10 per meme | | [AI QR Code Generator](/api-reference/image-projects/ai-qr-code-generator) | Free | -| [Body Swap](/api-reference/image-projects/body-swap) | 100 per image | +| [Body Swap](/api-reference/image-projects/body-swap) | 50+ per image, based on resolution | | [Face Swap Photo](/api-reference/image-projects/face-swap-photo) | 10 per image | | [Head Swap](/api-reference/image-projects/head-swap) | 10 per image | | [Image Background Remover](/api-reference/image-projects/image-background-remover) | 5 per image | | [Photo Colorizer](/api-reference/image-projects/photo-colorizer) | 10 per image | -| [AI Voice Generator](/api-reference/audio-projects/ai-voice-generator) | 0.05 per character, rounded up | -| [AI Voice Cloner](/api-reference/audio-projects/ai-voice-cloner) | 0.05 per generated character, rounded up | +| [AI Voice Generator](/api-reference/audio-projects/ai-voice-generator) | 0.1 per character, rounded up | +| [AI Voice Cloner](/api-reference/audio-projects/ai-voice-cloner) | 0.1 per generated character, rounded up | ### AI Image Upscaler @@ -160,4 +162,4 @@ These charge by output length rather than per generation. - **Credits to dollars** — [usage-based rates](/billing/usage-based-pricing#rates-and-volume-discounts) give the per-credit price for each tier, including volume discounts. - **Cost calculator** — [model your monthly spend](https://magichour.ai/api?ref=docs-models#api-cost-calculator) across endpoints and volumes. - **Mock server** — [develop against sample responses](/integration/development-and-testing#mock-server-recommended-for-development) without spending credits. -- **Free tier** — 400 credits on signup plus 100 daily credits, enough to exercise every image endpoint and short video jobs. +- **Free access** — starter credits and account-specific rewards may be available; check your current balance. diff --git a/api-reference/openapi.json b/api-reference/openapi.json index 09c0c93..17217b5 100644 --- a/api-reference/openapi.json +++ b/api-reference/openapi.json @@ -1138,7 +1138,7 @@ }, "/v1/ai-video-editor": { "post": { - "description": "**What this API does**\n\nCreate the same Video Editor you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding video editor into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a video editor job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: usually a file, sometimes a YouTube link, depending on project type \n- Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes \n- Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/ai-video-editor).", + "description": "**What this API does**\n\nCreate the same Video Editor you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding video editor into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a video editor job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: see the request schema for endpoint-specific assets \n- Resolution: free users default to 480p; higher plans unlock HD and larger sizes \n- Extra fields: see the request schema for endpoint-specific options \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/ai-video-editor).", "summary": "AI Video Editor", "tags": ["Video Projects"], "parameters": [], @@ -1702,7 +1702,7 @@ }, "/v1/audio-to-video": { "post": { - "description": "**What this API does**\n\nCreate the same Audio To Video you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding audio to video into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a audio to video job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: usually a file, sometimes a YouTube link, depending on project type \n- Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes \n- Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/audio-to-video).", + "description": "**What this API does**\n\nCreate the same Audio To Video you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding audio to video into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a audio to video job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: see the request schema for endpoint-specific assets \n- Resolution: free users default to 480p; higher plans unlock HD and larger sizes \n- Extra fields: see the request schema for endpoint-specific options \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/audio-to-video).", "summary": "Audio-to-Video", "tags": ["Video Projects"], "parameters": [], @@ -2156,7 +2156,7 @@ }, "/v1/character-replace": { "post": { - "description": "**What this API does**\n\nCreate the same Character Replace you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding character replace into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a character replace job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: usually a file, sometimes a YouTube link, depending on project type \n- Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes \n- Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/character-replace).", + "description": "**What this API does**\n\nCreate the same Character Replace you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding character replace into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a character replace job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: see the request schema for endpoint-specific assets \n- Resolution: free users default to 480p; higher plans unlock HD and larger sizes \n- Extra fields: see the request schema for endpoint-specific options \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/character-replace).", "summary": "Character Replace", "tags": ["Video Projects"], "parameters": [], @@ -2401,7 +2401,7 @@ }, "/v1/face-swap": { "post": { - "description": "**What this API does**\n\nCreate the same Face Swap you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding face swap into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a face swap job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: usually a file, sometimes a YouTube link, depending on project type \n- Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes \n- Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/face-swap).", + "description": "**What this API does**\n\nCreate the same Face Swap you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding face swap into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a face swap job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: see the request schema for endpoint-specific assets \n- Resolution: free users default to 480p; higher plans unlock HD and larger sizes \n- Extra fields: see the request schema for endpoint-specific options \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/face-swap).", "summary": "Face Swap Video", "tags": ["Video Projects"], "parameters": [], @@ -2647,7 +2647,7 @@ }, "/v1/image-to-video": { "post": { - "description": "**What this API does**\n\nCreate the same Image To Video you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding image to video into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a image to video job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: usually a file, sometimes a YouTube link, depending on project type \n- Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes \n- Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/image-to-video).", + "description": "**What this API does**\n\nCreate the same Image To Video you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding image to video into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a image to video job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: see the request schema for endpoint-specific assets \n- Resolution: free users default to 480p; higher plans unlock HD and larger sizes \n- Extra fields: see the request schema for endpoint-specific options \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/image-to-video).", "summary": "Image-to-Video", "tags": ["Video Projects"], "parameters": [], @@ -2880,7 +2880,7 @@ }, "/v1/lip-sync": { "post": { - "description": "**What this API does**\n\nCreate the same Lip Sync you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding lip sync into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a lip sync job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: usually a file, sometimes a YouTube link, depending on project type \n- Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes \n- Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/lip-sync).", + "description": "**What this API does**\n\nCreate the same Lip Sync you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding lip sync into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a lip sync job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: see the request schema for endpoint-specific assets \n- Resolution: free users default to 480p; higher plans unlock HD and larger sizes \n- Extra fields: see the request schema for endpoint-specific options \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/lip-sync).", "summary": "Lip Sync", "tags": ["Video Projects"], "parameters": [], @@ -3099,7 +3099,7 @@ }, "/v1/text-to-video": { "post": { - "description": "**What this API does**\n\nCreate the same Text To Video you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding text to video into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a text to video job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: usually a file, sometimes a YouTube link, depending on project type \n- Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes \n- Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/text-to-video).", + "description": "**What this API does**\n\nCreate the same Text To Video you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding text to video into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a text to video job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: see the request schema for endpoint-specific assets \n- Resolution: free users default to 480p; higher plans unlock HD and larger sizes \n- Extra fields: see the request schema for endpoint-specific options \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/text-to-video).", "summary": "Text-to-Video", "tags": ["Video Projects"], "parameters": [], @@ -3290,19 +3290,19 @@ "x-codeSamples": [ { "lang": "python", - "source": "from magic_hour import Client\nfrom os import getenv\n\nclient = Client(token=getenv(\"API_TOKEN\"))\nres = client.v1.text_to_video.generate(\n end_seconds=5.0,\n orientation=\"landscape\",\n style={\"prompt\": \"a dog running\"},\n name=\"Text To Video video\",\n resolution=\"720p\",\n wait_for_completion=True,\n download_outputs=True,\n download_directory=\".\"\n)" + "source": "from magic_hour import Client\nfrom os import getenv\n\nclient = Client(token=getenv(\"API_TOKEN\"))\nres = client.v1.text_to_video.generate(\n end_seconds=5.0,\n aspect_ratio=\"16:9\",\n style={\"prompt\": \"a dog running\"},\n name=\"Text To Video video\",\n resolution=\"720p\",\n wait_for_completion=True,\n download_outputs=True,\n download_directory=\".\"\n)" }, { "lang": "javascript", - "source": "import { Client } from \"magic-hour\";\n\nconst client = new Client({ token: process.env[\"API_TOKEN\"]!! });\nconst res = await client.v1.textToVideo.generate(\n {\n endSeconds: 5.0,\n name: \"Text To Video video\",\n orientation: \"landscape\",\n resolution: \"720p\",\n style: { prompt: \"a dog running\" },\n },\n {\n waitForCompletion: true,\n downloadOutputs: true,\n downloadDirectory: \".\",\n },\n);" + "source": "import { Client } from \"magic-hour\";\n\nconst client = new Client({ token: process.env[\"API_TOKEN\"]!! });\nconst res = await client.v1.textToVideo.generate(\n {\n endSeconds: 5.0,\n name: \"Text To Video video\",\n resolution: \"720p\",\n style: { prompt: \"a dog running\" },\n },\n {\n waitForCompletion: true,\n downloadOutputs: true,\n downloadDirectory: \".\",\n },\n);" }, { "lang": "go", - "source": "package main\n\nimport (\n\tos \"os\"\n\n\tsdk \"github.com/magichourhq/magic-hour-go/client\"\n\tnullable \"github.com/magichourhq/magic-hour-go/nullable\"\n\ttext_to_video \"github.com/magichourhq/magic-hour-go/resources/v1/text_to_video\"\n\ttypes \"github.com/magichourhq/magic-hour-go/types\"\n)\n\nfunc main() {\n\tclient := sdk.NewClient(\n\t\tsdk.WithBearerAuth(os.Getenv(\"API_TOKEN\")),\n\t)\n\tres, err := client.V1.TextToVideo.Create(text_to_video.CreateRequest{\n\t\tAspectRatio: nullable.NewValue(types.V1TextToVideoCreateBodyAspectRatioEnum169),\n\t\tAudio: nullable.NewValue(true),\n\t\tEndSeconds: 5.0,\n\t\tModel: nullable.NewValue(types.V1TextToVideoCreateBodyModelEnumKling30),\n\t\tName: nullable.NewValue(\"My Text To Video video\"),\n\t\tOrientation: nullable.NewValue(types.V1TextToVideoCreateBodyOrientationEnumLandscape),\n\t\tResolution: nullable.NewValue(types.V1TextToVideoCreateBodyResolutionEnum720p),\n\t\tStyle: types.V1TextToVideoCreateBodyStyle{\n\t\t\tPrompt: \"a dog running\",\n\t\t},\n\t})\n}" + "source": "package main\n\nimport (\n\tos \"os\"\n\n\tsdk \"github.com/magichourhq/magic-hour-go/client\"\n\tnullable \"github.com/magichourhq/magic-hour-go/nullable\"\n\ttext_to_video \"github.com/magichourhq/magic-hour-go/resources/v1/text_to_video\"\n\ttypes \"github.com/magichourhq/magic-hour-go/types\"\n)\n\nfunc main() {\n\tclient := sdk.NewClient(\n\t\tsdk.WithBearerAuth(os.Getenv(\"API_TOKEN\")),\n\t)\n\tres, err := client.V1.TextToVideo.Create(text_to_video.CreateRequest{\n\t\tAspectRatio: nullable.NewValue(types.V1TextToVideoCreateBodyAspectRatioEnum169),\n\t\tAudio: nullable.NewValue(true),\n\t\tEndSeconds: 5.0,\n\t\tModel: nullable.NewValue(types.V1TextToVideoCreateBodyModelEnumKling30),\n\t\tName: nullable.NewValue(\"My Text To Video video\"),\n\t\tResolution: nullable.NewValue(types.V1TextToVideoCreateBodyResolutionEnum720p),\n\t\tStyle: types.V1TextToVideoCreateBodyStyle{\n\t\t\tPrompt: \"a dog running\",\n\t\t},\n\t})\n}" }, { "lang": "rust", - "source": "let client = magic_hour::Client::default()\n .with_bearer_auth(&std::env::var(\"API_TOKEN\").unwrap());\nlet res = client\n .v1()\n .text_to_video()\n .create(magic_hour::resources::v1::text_to_video::CreateRequest {\n aspect_ratio: Some(\n magic_hour::models::V1TextToVideoCreateBodyAspectRatioEnum::Enum169,\n ),\n audio: Some(true),\n end_seconds: 5.0,\n model: Some(magic_hour::models::V1TextToVideoCreateBodyModelEnum::Kling30),\n name: Some(\"My Text To Video video\".to_string()),\n orientation: Some(\n magic_hour::models::V1TextToVideoCreateBodyOrientationEnum::Landscape,\n ),\n resolution: Some(\n magic_hour::models::V1TextToVideoCreateBodyResolutionEnum::Enum720p,\n ),\n style: magic_hour::models::V1TextToVideoCreateBodyStyle {\n prompt: \"a dog running\".to_string(),\n ..Default::default()\n },\n })\n .await;" + "source": "let client = magic_hour::Client::default()\n .with_bearer_auth(&std::env::var(\"API_TOKEN\").unwrap());\nlet res = client\n .v1()\n .text_to_video()\n .create(magic_hour::resources::v1::text_to_video::CreateRequest {\n aspect_ratio: Some(\n magic_hour::models::V1TextToVideoCreateBodyAspectRatioEnum::Enum169,\n ),\n audio: Some(true),\n end_seconds: 5.0,\n model: Some(magic_hour::models::V1TextToVideoCreateBodyModelEnum::Kling30),\n name: Some(\"My Text To Video video\".to_string()),\n resolution: Some(\n magic_hour::models::V1TextToVideoCreateBodyResolutionEnum::Enum720p,\n ),\n style: magic_hour::models::V1TextToVideoCreateBodyStyle {\n prompt: \"a dog running\".to_string(),\n ..Default::default()\n },\n })\n .await;" }, { "lang": "curl", @@ -3321,7 +3321,7 @@ }, "/v1/video-to-video": { "post": { - "description": "**What this API does**\n\nCreate the same Video To Video you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding video to video into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a video to video job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: usually a file, sometimes a YouTube link, depending on project type \n- Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes \n- Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/video-to-video).", + "description": "**What this API does**\n\nCreate the same Video To Video you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow.\n \n**Good for**\n- Automation and batch processing \n- Adding video to video into apps, pipelines, or tools \n\n**How it works (3 steps)**\n1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. \n2) Send a request to create a video to video job with the basic fields. \n3) Check the job status until it's `complete`, then download the result from `downloads`.\n\n**Key options**\n- Inputs: see the request schema for endpoint-specific assets \n- Resolution: free users default to 480p; higher plans unlock HD and larger sizes \n- Extra fields: see the request schema for endpoint-specific options \n\n**Cost** \nCredits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done.\n\nFor detailed examples, see the [product page](https://magichour.ai/products/video-to-video).", "summary": "Video-to-Video", "tags": ["Video Projects"], "parameters": [], @@ -4811,7 +4811,7 @@ "x-codeSamples": [ { "lang": "python", - "source": "from magic_hour import Client\nfrom os import getenv\n\nclient = Client(token=getenv(\"API_TOKEN\"))\nres = client.v1.ai_image_editor.generate(\n assets={\"image_file_path\": \"/path/to/1234.png\"},\n style={\"prompt\": \"Give me sunglasses\"},\n name=\"Ai Image Editor image\",\n wait_for_completion=True,\n download_outputs=True,\n download_directory=\".\"\n)" + "source": "from magic_hour import Client\nfrom os import getenv\n\nclient = Client(token=getenv(\"API_TOKEN\"))\nres = client.v1.ai_image_editor.generate(\n assets={\"image_file_paths\": [\"/path/to/1234.png\"]},\n style={\"prompt\": \"Give me sunglasses\"},\n name=\"Ai Image Editor image\",\n wait_for_completion=True,\n download_outputs=True,\n download_directory=\".\"\n)" }, { "lang": "javascript", @@ -5434,11 +5434,11 @@ "x-codeSamples": [ { "lang": "python", - "source": "from magic_hour import Client\nfrom os import getenv\n\nclient = Client(token=getenv(\"API_TOKEN\"))\nres = client.v1.ai_image_upscaler.generate(\n assets={\"image_file_path\": \"/path/to/1234.png\"},\n scale_factor=2.0,\n style={\"enhancement\": \"Balanced\"},\n name=\"Image Upscaler image\",\n wait_for_completion=True,\n download_outputs=True,\n download_directory=\".\"\n)" + "source": "from magic_hour import Client\nfrom os import getenv\n\nclient = Client(token=getenv(\"API_TOKEN\"))\nres = client.v1.ai_image_upscaler.generate(\n assets={\"image_file_path\": \"/path/to/1234.png\"},\n scale_factor=2.0,\n style={\"mode\": \"balanced\"},\n name=\"Image Upscaler image\",\n wait_for_completion=True,\n download_outputs=True,\n download_directory=\".\"\n)" }, { "lang": "javascript", - "source": "import { Client } from \"magic-hour\";\n\nconst client = new Client({ token: process.env[\"API_TOKEN\"]!! });\nconst res = await client.v1.aiImageUpscaler.generate(\n {\n assets: { imageFilePath: \"/path/to/1234.png\" },\n name: \"Image Upscaler image\",\n scaleFactor: 2.0,\n style: { enhancement: \"Balanced\" },\n },\n {\n waitForCompletion: true,\n downloadOutputs: true,\n downloadDirectory: \".\",\n },\n);" + "source": "import { Client } from \"magic-hour\";\n\nconst client = new Client({ token: process.env[\"API_TOKEN\"]!! });\nconst res = await client.v1.aiImageUpscaler.generate(\n {\n assets: { imageFilePath: \"/path/to/1234.png\" },\n name: \"Image Upscaler image\",\n scaleFactor: 2.0,\n style: { mode: \"balanced\" },\n },\n {\n waitForCompletion: true,\n downloadOutputs: true,\n downloadDirectory: \".\",\n },\n);" }, { "lang": "go", diff --git a/billing/overview.mdx b/billing/overview.mdx index 9dc7faa..0b7f288 100644 --- a/billing/overview.mdx +++ b/billing/overview.mdx @@ -118,6 +118,6 @@ higher resolution on the same plan costs more credits. Details are on - **Uncertain usage**: Start with usage-based, switch to subscription later - **Not sure?** Start with our Free tier (400 credits + 100/day) to test the API, then choose the - model that fits your actual usage patterns. + **Not sure?** Start with the Free tier. Starter credits and account-specific rewards may be + available; check your account balance, then choose the model that fits your usage. diff --git a/billing/subscription-pricing.mdx b/billing/subscription-pricing.mdx index 1c7a5e4..9ee64d1 100644 --- a/billing/subscription-pricing.mdx +++ b/billing/subscription-pricing.mdx @@ -47,7 +47,7 @@ import { PricingCard } from "/snippets/pricing-card.mdx"; title="Free" prices={[{ amount: 0, label: "/month" }]} benefits={[ - "400 credits on signup plus 100 credits/day", + "Starter credits and account-specific rewards may be available; check your account for the current balance", "Lowest resolution option on each tool", "Access to all image modes", "Access to Animation, Face Swap, Lip Sync, Subtitle Generator, Talking Photo", @@ -113,6 +113,7 @@ If you use more credits than your plan includes, you can purchase additional cre | Starter | 4,000 | $10 | | Standard | 12,000 | $30 | | Large | 32,000 | $80 | +| Max | 64,000 | $160 | That's 400 credits per dollar. Credits are added immediately and never expire. Packs do not include subscription benefits other than removing watermarks. @@ -165,7 +166,7 @@ Ready to subscribe? Here's how to set up your subscription in minutes. ![Pricing Page](./images/pricing-page-3.png) -Click **"Get Plan"** to proceed to checkout. +Click the button for your chosen plan to proceed to checkout. @@ -178,7 +179,7 @@ Click **"Get Plan"** to proceed to checkout. After successful payment: - - You'll be redirected to [My Plan](https://magichour.ai/dashboard/my-plan) + - You'll be redirected to [Settings](https://magichour.ai/settings) - Credits are added to your account within minutes - Start using the API immediately @@ -194,7 +195,7 @@ Click **"Get Plan"** to proceed to checkout. Monitor your remaining credits in multiple ways: -1. **My Plan Dashboard**: Visit [My Plan](https://magichour.ai/dashboard/my-plan) to see your monthly credit allocation and next renewal date +1. **Settings**: Visit [Settings](https://magichour.ai/settings) to see your monthly credit allocation and next renewal date 2. **Any signed-in page**: Check credit balance in the top navigation ![Create Page](./images/subscription-credits.png) @@ -208,7 +209,7 @@ Monitor your remaining credits in multiple ways: **Downgrade Process**: -- Cancel current subscription at [My Plan](https://magichour.ai/dashboard/my-plan) +- Cancel current subscription in [Settings](https://magichour.ai/settings) - Downgrade takes effect at end of current billing cycle - All unused credits carry over permanently @@ -231,8 +232,8 @@ When your subscription ends or you downgrade to Free: **❌ You Lose (at end of billing cycle):** - **Higher resolution options** - revert to the Free option on each tool -- **No watermark** - outputs will include watermarks again -- **Monthly credit allocation** - revert to Free tier (400 credits + 100/day) +- **Paid watermark removal** - free video/audio outputs may include watermarks; image outputs remain watermark-free +- **Monthly credit allocation** - starter credits and rewards vary by account; check your current balance - **Premium features** - lose priority support, larger uploads, etc. **💡 Upgrade Anytime:** @@ -251,7 +252,7 @@ When your subscription ends or you downgrade to Free: **Credits Never Expire**: Your credits remain in your account permanently, even after your subscription ends. However, you'll lose access to subscription benefits like higher resolution - options and no watermarks. + options and paid watermark removal for video/audio where applicable. diff --git a/changelog.mdx b/changelog.mdx index 089d4c5..5d32950 100644 --- a/changelog.mdx +++ b/changelog.mdx @@ -1284,7 +1284,7 @@ You can now swap a character into any image with Magic Hour’s free character s Free usage includes 1 character swap per day. The new product page also includes step-by-step instructions, use cases, feature highlights, and guidance for getting the best results. -Try it out now: https://magichour.ai/products/character-swap +The original product page is no longer publicly available. diff --git a/changelog/2024.mdx b/changelog/2024.mdx index ffaef1c..36dbcc2 100644 --- a/changelog/2024.mdx +++ b/changelog/2024.mdx @@ -46,12 +46,12 @@ In the response of `GET /v1/video-projects/:id`, we added `.downloads` key to re ```diff { - "download": { -- "url": "https://video.magichour.ai/id/output.mp4?auth-token=1234", +- "url": "https://videos.magichour.ai/id/output.mp4?auth-token=1234", - "expires_at": "2024-12-18T00:00:00.000Z" - }, + "downloads": [ + { -+ "url": "https://video.magichour.ai/id/output.mp4?auth-token=1234", ++ "url": "https://videos.magichour.ai/id/output.mp4?auth-token=1234", + "expires_at": "2024-12-18T00:00:00.000Z" + } + ], diff --git a/changelog/2025.mdx b/changelog/2025.mdx index e77596e..36292c8 100644 --- a/changelog/2025.mdx +++ b/changelog/2025.mdx @@ -1536,7 +1536,7 @@ We shipped a free tool so you can try out AI Selfie for free. ![AI Selfie Generator Free Tool](/changelog/images/2025/06/ai-selfie-free-tool.jpg) -Try it out now: https://magichour.ai/products/ai-selfie-generator! +Try it out now: https://magichour.ai/products/ai-selfie-generator @@ -1550,7 +1550,7 @@ To make it easier to pick the right style for your headshot, we added image prev ![AI Headshot Generator](/changelog/images/2025/06/professional-headshot-style-image.jpg) -Try it out now: https://magichour.ai/create/ai-headshot-generator! +Try it out now: https://magichour.ai/create/ai-headshot-generator @@ -1562,7 +1562,7 @@ We created a new tool that allow you to stylized your selfies in a variety of st ![AI Selfie Generator](/changelog/images/2025/06/ai-selfie-generator-dashboard.jpg) -Try it out now: https://magichour.ai/create/ai-selfie-generator! +Try it out now: https://magichour.ai/create/ai-selfie-generator @@ -1838,7 +1838,7 @@ Now you can create memes in our create page, meaning your outputs will be saved ## 🎉 New: Photo Colorizer Free Tool -Colorize your photo in seconds, completed free! https://staging.magichour.ai/products/photo-colorizer +Colorize your photo in seconds, completely free! https://magichour.ai/products/photo-colorizer diff --git a/get-started/quick-start.mdx b/get-started/quick-start.mdx index c7253d1..7f9152b 100644 --- a/get-started/quick-start.mdx +++ b/get-started/quick-start.mdx @@ -22,8 +22,8 @@ Magic Hour is an AI video and image generation platform. You submit a job, we re **Credit Cost:** Pick the example that matches your goal. The image tab costs about 5 credits; the - face swap video tab costs about 200 credits for the sample clip. New accounts get 400 free credits - plus 100 daily credits if you claim them in the web app. + face swap video tab costs about 200 credits for the sample clip. New accounts may receive starter + credits and account-specific rewards; check your balance in the web app. ## 1. Create your API key @@ -794,7 +794,7 @@ If you encounter HTTP errors, here's what they mean: | :--------- | :-------------------- | :-------------------------------------------------------------------------------------------------------------------------------------- | | `400` | Bad Request | The response `message` names the invalid or missing field - fix it and resubmit | | `401` | Unauthorized | Verify your API key is correct and sent as `Authorization: Bearer ` | -| `402` | Payment Required | Insufficient credits - [add more credits](https://magichour.ai/dashboard/my-plan?ref=docs-quickstart-402&utm_source=docs&utm_medium=referral&utm_campaign=quick-start) | +| `402` | Payment Required | Insufficient credits - [add more credits](https://magichour.ai/settings?ref=docs-quickstart-402&utm_source=docs&utm_medium=referral&utm_campaign=quick-start) | | `403` | Forbidden | Your key is valid but the model, resolution, or feature is not available on your plan | | `429` | Too Many Requests | You are sending requests too quickly - retry with exponential backoff | | `500` | Internal Server Error | Temporary server issue - retry after a few seconds | diff --git a/integration/adding-api-to-your-app.mdx b/integration/adding-api-to-your-app.mdx index 6bb6b96..f5cf226 100644 --- a/integration/adding-api-to-your-app.mdx +++ b/integration/adding-api-to-your-app.mdx @@ -672,7 +672,7 @@ When a job completes, the `downloads` array is populated with secure, time-limit "status": "complete", "downloads": [ { - "url": "https://video.magichour.ai/id/output.mp4?auth-token=1234", + "url": "https://videos.magichour.ai/id/output.mp4?auth-token=1234", "expires_at": "2024-10-19T05:16:19.027Z" } ] diff --git a/integration/webhook/event-types.mdx b/integration/webhook/event-types.mdx index 0edd6c5..8cfb7ba 100644 --- a/integration/webhook/event-types.mdx +++ b/integration/webhook/event-types.mdx @@ -316,7 +316,7 @@ Audio events track the lifecycle of audio processing jobs. All payloads match th "credits_charged": 5, "downloads": [ { - "url": "https://audio.magichour.ai/clx9audio123voice456/output.mp3", + "url": "https://videos.magichour.ai/clx9audio123voice456/output.mp3", "expires_at": "2024-10-19T05:16:19.027Z" } ], diff --git a/tools/audio/voice-cloner.mdx b/tools/audio/voice-cloner.mdx index 6b156b4..e921943 100644 --- a/tools/audio/voice-cloner.mdx +++ b/tools/audio/voice-cloner.mdx @@ -31,7 +31,7 @@ AI Voice Cloner creates realistic speech audio from text by cloning voices from For best results, your voice sample should: - **Be clear and high-quality** - Minimal background noise -- **Be 10-30 seconds long** - Enough audio for the AI to learn the voice +- **Be at least 3 seconds long** - Short 2-5 second samples work; longer clean samples can improve quality - **Contain natural speech** - Conversational tone works best - **Be single-speaker** - Only one person speaking in the sample - **Have good enunciation** - Clear pronunciation of words @@ -286,13 +286,13 @@ print("lip_status:", lip_sync_result.status, "paths:", getattr(lip_sync_result, ## Pricing -Voice cloning costs **0.05 credits per character** of generated text, rounded up to the nearest whole number. +Voice cloning costs **0.1 credits per character** of generated text, rounded up to the nearest whole number. Inputs support up to 1,000 characters. | Text Length | Credits | | :-------------------------------- | :---------- | -| 100 characters (1-2 sentences) | 5 credits | -| 500 characters (a paragraph) | 25 credits | -| 2,000 characters (long-form) | 100 credits | +| 100 characters (1-2 sentences) | 10 credits | +| 500 characters (a paragraph) | 50 credits | +| 1,000 characters (maximum) | 100 credits | **Try this in our Google Colab Cookbook:** [Run this API with sample diff --git a/tools/audio/voice-generator.mdx b/tools/audio/voice-generator.mdx index e64381f..d5c0c8f 100644 --- a/tools/audio/voice-generator.mdx +++ b/tools/audio/voice-generator.mdx @@ -279,13 +279,13 @@ print("lip_status:", lip_sync_result.status, "paths:", getattr(lip_sync_result, ## Pricing -Voice generation costs **0.05 credits per character** of text, rounded up to the nearest whole number. +Voice generation costs **0.1 credits per character** of text, rounded up to the nearest whole number. Inputs support up to 1,000 characters. | Text Length | Credits | | :-------------------------------- | :---------- | -| 100 characters (1-2 sentences) | 5 credits | -| 500 characters (a paragraph) | 25 credits | -| 2,000 characters (long-form) | 100 credits | +| 100 characters (1-2 sentences) | 10 credits | +| 500 characters (a paragraph) | 50 credits | +| 1,000 characters (maximum) | 100 credits | **Try this in our Google Colab Cookbook:** [Run this API with sample diff --git a/tools/image/headshot-generator.mdx b/tools/image/headshot-generator.mdx index 2bde816..9b4449e 100644 --- a/tools/image/headshot-generator.mdx +++ b/tools/image/headshot-generator.mdx @@ -8,7 +8,7 @@ import { ToolSection } from "/snippets/tool-section.mdx"; ## Overview -AI Headshot Generator creates professional-quality headshots from a single photo. The API generates multiple high-resolution headshots with different backgrounds, lighting, and professional styling while maintaining the person's facial features and identity. +AI Headshot Generator creates a professional-quality headshot from a single photo while maintaining the person's facial features and identity.