VidMage

VidMage is an AI video and image creation platform for creators. Turn your ideas and images into videos and fresh visuals.

Open the creator tools
Explore APIs
AI Video APIsAI Image APIsAI Audio APIsAI 3D APIsAI Face Swap APIsAI Effects APIs
Build with VidMage
QuickstartAPI keysVidMage MCPError reference
Your account
Developer consoleAbout VidMagePlans and creditsAPI billingContact support
© 2026 VidMage. All rights reserved.
Privacy PolicyTerms of ServiceReport Abuse
Skip to content
VidMage/Developers
Overview
APIs
All APIsAI Video APIsAI Image APIsAI Audio APIsAI 3D APIsAI Face Swap APIsAI Effects APIs
DocumentationVidMage MCPOpen console
Developers/AI GIF Face Swap API for Animated Images

AI GIF Face Swap API for Animated Images

Add animated face swaps to your app with a GIF and a reference photo. Select the target and reference faces by index, then retrieve the result as an animated GIF.

Get API keyView API docs
Abstract illustration for AI GIF Face Swap API for Animated Images
PlaygroundAPIPricingGuideFAQs

AI GIF Face Swap API Playground

Use your existing API key and subscription. Submitting a generation uses credits; uploading and preparing a request does not start a generation.

API access is available to subscribers only. Your subscription credits are shared across the website and the API.

View plans

Parameter

4 parameters

Animated-GIF fileUrl returned by upload_files.

Publicly reachable URL of the photo containing the replacement face.

Optional explicit tracked-face index. Omit to auto-select only one detected target face.(Optional)

min 0max 99

Optional explicit reference-face index. Omit to auto-select only one detected reference face.(Optional)

min 0max 99

Request code

#!/usr/bin/env bash
set -euo pipefail
# Set this once per intended task; preserve it and the body for transport retries.
: "${VIDMAGE_IDEMPOTENCY_KEY:?Set a unique key for this task}"

SUBMIT_RESPONSE="$(curl --fail-with-body --silent --show-error -X POST "https://vidmage.ai/api/v1/gif-face-swap/submit" \
  -H "Authorization: Bearer ${VIDMAGE_API_KEY}" \
  -H "Idempotency-Key: ${VIDMAGE_IDEMPOTENCY_KEY}" \
  -H "Content-Type: application/json" \
  --data-raw '{
  "targetGifUrl": "https://upload.wikimedia.org/wikipedia/commons/2/2c/Rotating_earth_%28large%29.gif",
  "referenceFaceImageUrl": "https://vidmage.ai/assets/images/samples/smiling-man-sweater.webp"
}')"
TASK_ID="$(printf '%s' "$SUBMIT_RESPONSE" | jq -er '.["taskId"]')"

while true; do
  QUERY_RESPONSE="$(curl --fail-with-body --silent --show-error -X POST "https://vidmage.ai/api/v1/gif-face-swap/query" \
    -H "Authorization: Bearer ${VIDMAGE_API_KEY}" \
    -H "Content-Type: application/json" \
    --data-raw "{\"taskId\":\"${TASK_ID}\"}")"
  STATUS="$(printf '%s' "$QUERY_RESPONSE" | jq -r '(.status // .data.status // "") | ascii_downcase')"
  case "$STATUS" in
    success|succeeded|completed)
      RESULT="$(printf '%s' "$QUERY_RESPONSE" | jq -r '(.result // .["gifUrl"] // .data["gifUrl"] // empty)')"
      if [ -z "$RESULT" ]; then
        printf '%s' "Result missing; preserve task $TASK_ID and query the same task again. Do not resubmit." >&2
        exit 2
      fi
      printf '%s\n' "$RESULT"
      break
      ;;
    needs_input)
      printf '%s' "Face selection required; preserve task $TASK_ID" >&2
      exit 2
      ;;
    failed|error)
      printf '%s' "$QUERY_RESPONSE" | jq -r '(.message // .error // .data.error // "Task failed")' >&2
      exit 1
      ;;
  esac
  sleep 5
done

Response data

Submit the task to see the API response here.
PlaygroundCapabilities

API documentation

Submit a request, track the task, and retrieve your result.

Required inputs
targetGifUrl referenceFaceImageUrl
Output
Image·gifUrl
Request setup & limitsHeaders, input options and media limits

Request headers

Authorization
Bearer YOUR_API_KEY

Keep your API key on your server.

Content-Type
application/json
Idempotency-Key
YOUR_UNIQUE_KEY

Use a new key per task. Reuse it only when retrying the same submission.

Input options & limits

Request controls follow each task's parameter rules; they do not guarantee output properties.

GIF Face Swap

RequiredtargetGifUrl referenceFaceImageUrl
Request controls
  • targetFaceIndex: range 0 to 99
  • referenceFaceIndex: range 0 to 99

Output dimensions and format are not specified in this reference.

Input retention and output-link lifetime depend on the API contract. Confirm API-specific retention terms before making promises to your users. Upload guide ↗

GIF Face Swap

POST /api/v1/gif-face-swap/submit

Full API documentation ↗

targetGifUrl is required and referenceFaceImageUrl is required.

Required inputs

targetGifUrlstring
Animated-GIF fileUrl returned by upload_files.
referenceFaceImageUrlstring
Publicly reachable URL of the photo containing the replacement face.

Edit the sample inputs for your own task before submitting.

GIF Face Swap request
# Set VIDMAGE_IDEMPOTENCY_KEY to a unique value for this task; preserve it for transport retries.
curl -X POST "https://vidmage.ai/api/v1/gif-face-swap/submit" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Idempotency-Key: ${VIDMAGE_IDEMPOTENCY_KEY}" \
  -H "Content-Type: application/json" \
  -d '{"targetGifUrl":"https://upload.wikimedia.org/wikipedia/commons/2/2c/Rotating_earth_%28large%29.gif","referenceFaceImageUrl":"https://vidmage.ai/assets/images/samples/smiling-man-sweater.webp"}'
# -> { "success": true, "taskId": "...", "creditsRequired": ..., "creditsConsumed": 0, "usageDeferred": true }
Parameters and input rules4 fields
FieldTypeRequiredDefaultMeaning and limits
targetGifUrlstringYesNot specifiedAnimated-GIF fileUrl returned by upload_files. No additional field constraint listed.
referenceFaceImageUrlstringYesNot specifiedPublicly reachable URL of the photo containing the replacement face. No additional field constraint listed.
targetFaceIndexnumberNoNot specifiedOptional explicit tracked-face index. Omit to auto-select only one detected target face. Minimum: 0 · Maximum: 99 · Whole numbers only
referenceFaceIndexnumberNoNot specifiedOptional explicit reference-face index. Omit to auto-select only one detected reference face. Minimum: 0 · Maximum: 99 · Whole numbers only

Retrieve the result

Save taskId from the accepted submission and send it to this endpoint:

POST /api/v1/gif-face-swap/query

Use the same Bearer API key. On completion, read the gifUrl result field.

Task states and recovery ↗
GIF Face Swap query
curl -X POST "https://vidmage.ai/api/v1/gif-face-swap/query" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "taskId": "TASK_ID_FROM_SUBMIT" }'
# -> { "success": true, "data": { "status": "...", "gifUrl": "https://..." } }

Pricing

See what one image, video, or generation costs in credits. Your API and website activity share the same credit balance.

API credit rates and calculated example request costs
API / workflowExample requestPrice (credits)
GIF Face Swapimage API4.4-second GIF: 5 credits
How this is calculated
  • GIF duration: 1 credit / second

The example uses the duration shown above. The server measures uploaded media for billing; this duration is only supplied to the estimate.

Duration × rate is rounded up to whole credits; the applicable minimum charge is enforced.

Estimate your own request ↗
1 credit / secondSee calculation details
Billed in credits. Shared with the website.Active subscription required. Unit rates and examples follow current API credit rules.Billing details⌄

Examples show the charge for the inputs listed above. Resolution, duration, audio, output count and reference media can change the total. Minimum charges and rounding follow the selected API.

Use the Playground to estimate your request before submitting it. Estimates do not start a generation. Subscription and credit-pack prices are listed on the plans page.

Your task’s recorded usage is the source of truth for the final charge.

View plans ↗Billing guide ↗

About AI GIF Face Swap API

VidMage's AI GIF Face Swap API is an interface for replacing faces in animated GIFs. It accepts a source GIF, a reference face photo, and optional face selections. The output is an edited animated GIF that can be used in reaction libraries or other animation workflows. To edit an animated GIF in your browser, use VidMage's GIF Face Swap.

AI GIF Face Swap API capabilities

Animated face replacement
Use an existing GIF as the target and a separate photo to provide the replacement face.
Target and reference selection
Select faces in the target animation and reference image with their own optional zero-based indices.
GIF output
Retrieve the completed animation through gifUrl and display it in a component that preserves animated frames.

What you can build

Personal reaction packs

Surprise, applause, celebration: a reaction library becomes personal when the user appears in each animation. Pair their portrait with the selected GIFs through separate requests and collect the resulting animations into a pack for chat conversations.

Birthday greeting GIFs

Make a birthday GIF personal with a face photo the sender has permission to use. Your greeting-card editor adds the recipient's name and message around the edited animation.

Animated event souvenirs

Guests can leave a booth with a shareable animation as well as a still photo. An approved event GIF supplies the action, and their booth portrait supplies the face. Previewing the full loop helps them choose a souvenir.

How to use AI GIF Face Swap API

  1. Get an API key

    Create a key in the Developer Console and store it on your server. Use it in the Authorization: Bearer header.

  2. Prepare and submit your inputs

    Set up your inputs in the Playground, then copy the matching API request. Send it from your server with a unique Idempotency-Key.

  3. Track the task

    Save the returned taskId and query the same operation until it completes. Keep that identifier if your app stops waiting.

  4. Retrieve the result

    Read gifUrl from the completed task. Preview the result in your app and save a copy to your own storage for later use.

Input tips
Preserve GIF field names
Use targetGifUrl for the animation and referenceFaceImageUrl for the portrait. Read the completed animation from gifUrl, rather than an image or video result field.
Review the full animation
Inspect face selection during movement and at the loop transition. The request has no frame-rate or loop-count control, so evaluate the returned animation directly.

Input requirementsUpload local files

Task fields and results

Keep the task identifier with its original request and Idempotency-Key. Query the same capability until it completes, then read the documented result field.

Task identifier
taskId
Query route
POST /api/v1/gif-face-swap/query
Completed result
gifUrl
Task states and response structure ↗
Errors, retries and limits

Retry transport failures with the same idempotency key only when the original submission may not have reached the server. For a confirmed task, keep querying the original task instead of submitting a duplicate.

Read error recovery guidance ↗

FAQs

Can this turn a still photo into a dancing GIF?

AI Photo Dance animates a still photo from a motion-reference video and returns a video. This GIF route edits an animation you already have.

Are failed or timed-out requests charged?

A client timeout is not a confirmed task failure. Confirmed failures are automatically refunded only when the refund outcome is certain. Unknown charges or refunds remain pending reconciliation.

Failure and refund handling ↗
How long should my app wait for a result?

The checked contract does not establish a fixed completion time. Choose a local wait budget for your app; it is not an API completion deadline.

Polling and wait budgets ↗
What are the rate and concurrency limits?

Request-rate limits control how often you can call the API; concurrency limits control simultaneous work. The documentation ties both to the stable API key but does not publish numeric limits for this operation. Confirm account limits before planning parallel jobs.

Rate-limit recovery ↗
Can I receive results through a webhook?

The checked request contract documents status queries and does not list a webhook or callback field for these routes. Check the current authenticated OpenAPI contract before making a callback part of your integration.

Query task results ↗Check the current contract ↗

Explore more APIs on VidMage

  • AI Photo Face Swap API↗
  • AI Video Face Swap API for Clip Workflows↗
  • AI Multi Face Swap API for Photos and Videos↗
  • AI Photo Dance API for Reference-Led Animation↗
  • AI Head Swap API for Photos and Videos↗
  • Qwen Image API↗
  • AI Image Upscaler API for 2x and 4x Requests↗
  • AI Girl Generator API for Portrait Briefs↗