Create Face Swap
Endpoints
Create Face Swap
Submit a video and face image for AI face swapping
POST
Create Face Swap
Submit a video and a face image to generate an AI face swap. You can provide any video URL (YouTube, TikTok, Instagram, Vimeo, and 1000+ other platforms — or a direct link to a video file), upload files directly, or a mix of both.
Cost is $0.20 per second of video (rounded up), deducted from your wallet upfront. Maximum video duration is 5 minutes (300 seconds).
In fullbody mode, the API automatically detects face segments in the video, processes each segment through Kling AI, and stitches the result back into the full original video.
The response comes back immediately with a
job_id. The video is processed in the background. Use Get Face Swap Status to poll for results.Modes
| Mode | Engine | Speed | Best for |
|---|---|---|---|
face | FAL AI | Fast (minutes) | Face-only swaps, quick previews |
fullbody (default) | Kling AI | Slower (may take longer) | Full body swaps, production quality |
Option 1: JSON with URLs
Option 2: File upload via form data
Option 3: Mix of URL and file
Headers
Body parameters (JSON)
A URL to the source video. Supports YouTube, TikTok, Instagram, Vimeo, and 1000+ other platforms — as well as direct links to video files. Required if not uploading a
video file.A publicly accessible URL to the face image. Required if not uploading a
face_image file.Face swap mode. One of
face or fullbody.face— Fast face-only swap using FAL AI.fullbody— Full body swap using Kling AI. Automatically detects face segments and stitches the result into the original video.
Form data fields (multipart upload)
Video file (mp4, mov, webm, avi). Max 500MB. Required if not providing
video_url.Face image file (jpg, png, webp). Max 500MB. Required if not providing
face_image_url.Face swap mode. One of
face or fullbody.Response
UUID job identifier. Poll with Get Face Swap Status.
The mode used:
"face" or "fullbody".Video duration in seconds (rounded up). This is the billable quantity.
Total amount charged in cents (
duration_seconds * 20).Always
"processing" on success.
