Generated resources (images, videos) are valid for 7 days. Please save related resources promptly to prevent expiration.

Overview

Live Face Swap API provides real-time face swap functionality, supporting real-time face swap operations during live streaming.

Get Access Token

Before calling other APIs, you need to obtain an access token first.
POST https://openapi.akool.com/api/open/v3/getToken
Request Headers
ParameterValueDescription
Content-Typeapplication/jsonRequest content type
Request Body
ParameterTypeDescription
clientIdStringClient ID
clientSecretStringClient secret
Example Request
{
    "clientId": "AKX5brZQ***XBQSk=",
    "clientSecret": "tcMhvgV0fY***WQ2eIoEY70rNi"
}

Face Detection

Detect faces in an image and get facial landmarks coordinates.
POST https://sg3.akool.com/detect
Request Headers
ParameterValueDescription
AuthorizationBearer tokenAPI key for request authorization
Content-Typeapplication/jsonRequest content type
Request Body
ParameterTypeDescription
single_faceBooleanWhether to detect single face only
image_urlStringImage URL for face detection
imgStringBase64 encoded image (optional)
Example Request
{
    "single_face": false,
    "image_url": "https://d21ksh0k4smeql.cloudfront.net/1745579943557-yr5w-crop_1728989585247-3239-0-1728989585409-9277.png"
}
Response
ParameterTypeDescription
error_codeintError code (0: success)
error_msgStringError message
landmarksArrayFacial landmarks coordinates array
landmarks_strArrayFacial landmarks coordinates string array
regionArrayFace region coordinates
secondsfloatProcessing time in seconds
trx_idStringTransaction ID
Response Example
{
    "error_code": 0,
    "error_msg": "SUCCESS",
    "landmarks": [
        [
            [249, 510],
            [460, 515],
            [343, 657],
            [255, 740],
            [0, 0],
            [0, 0]
        ]
    ],
    "landmarks_str": [
        "249,510:460,515:343,657:255,740"
    ],
    "region": [
        [150, 264, 437, 657]
    ],
    "seconds": 0.6554102897644043,
    "trx_id": "64498285-446f-462d-9470-fe36c36c6eac"
}

Create Real-time Face Swap Session

Create a new real-time face swap session.
POST https://openapi.akool.com/api/open/v3/faceswap/live/create
Request Headers
ParameterValueDescription
AuthorizationBearer tokenAPI key for request authorization
Content-Typeapplication/jsonRequest content type
Request Body
ParameterTypeDescription
sourceImageArraySource image information array, each element contains path and opts properties
Example Request
{
    "sourceImage": [
        {
            "path": "https://d21ksh0k4smeql.cloudfront.net/crop_1695201165222-7514-0-1695201165485-8149.png",
            "opts": "262,175:363,175:313,215:272,279"
        }
    ]
}
Response
ParameterTypeDescription
codeintAPI response business status code (1000: success)
msgStringAPI response status information
dataObjectResponse data object
Response Example
{
    "code": 1000,
    "msg": "OK",
    "data": {
        "_id": "684f8fb744b8795862e45cbe",
        "faceswap_status": 1,
        "front_user_id": "1",
        "algorithm_user_id": "3",
        "front_rtc_token": "007eJxTYFj/uGvaue3C3/VlOLdFmM5UuffmzHGhszbnTSqs3or94HNRYEhNNElJM0oxMkg1MTYxMklMMkm0MDCySDW0sDBOMjRP297vnyHAx8Bw6YAZIyMDIwMLAyMDiM8EJpnBJAuYFGMwMjAyNTAzNDMwNrI0tTQ0MIy3MDIyYWQwBADtwSJM",
        "channel_id": "20250616032959101_8224",
        "app_id": ""
    }
}
Status Code Description
  • faceswap_status:
    • 1: Queuing
    • 2: Processing (when this value is 2, the frontend can connect to Agora’s server)
    • 3: Success
    • 4: Failed

Update Real-time Face Swap Session

Update existing real-time face swap session configuration.
POST https://openapi.akool.com/api/open/v3/faceswap/live/update
Request Headers
ParameterValueDescription
AuthorizationBearer tokenAPI key for request authorization
Content-Typeapplication/jsonRequest content type
Request Body
ParameterTypeDescription
_idStringSession ID
sourceImageArraySource image information array, each element contains path and opts properties
Example Request
{
    "sourceImage": [
        {
            "path": "https://d21ksh0k4smeql.cloudfront.net/1745579943557-yr5w-crop_1728989585247-3239-0-1728989585409-9277.png",
            "opts": "249,510:460,515:343,657:255,740"
        }
    ],
    "_id": "685ea0bb5aa150dd8b7116b1"
}
Response Example
{
    "code": 1000,
    "msg": "OK"
}

Close Real-time Face Swap Session

Close the specified real-time face swap session.
POST https://openapi.akool.com/api/open/v3/faceswap/live/close
Request Headers
ParameterValueDescription
AuthorizationBearer tokenAPI key for request authorization
Content-Typeapplication/jsonRequest content type
Request Body
ParameterTypeDescription
_idStringSession ID
Example Request
{
    "_id": "685ea0bb5aa150dd8b7116b1"
}
Response Example
{
    "code": 1000,
    "msg": "OK"
}

Code Examples

# Get token
curl -X POST "https://openapi.akool.com/api/open/v3/getToken" \
    -H "Content-Type: application/json" \
    -d '{
        "clientId": "AKX5brZQ***XBQSk=",
        "clientSecret": "tcMhvgV0fY***WQ2eIoEY70rNi"
    }'

# Face detection
curl -X POST "https://sg3.akool.com/detect" \
    -H "Authorization: Bearer token" \
    -H "Content-Type: application/json" \
    -d '{
        "single_face": false,
        "image_url": "https://d21ksh0k4smeql.cloudfront.net/1745579943557-yr5w-crop_1728989585247-3239-0-1728989585409-9277.png"
    }'

# Create session
curl -X POST "https://openapi.akool.com/api/open/v3/faceswap/live/create" \
    -H "Authorization: Bearer token" \
    -H "Content-Type: application/json" \
    -d '{
        "sourceImage": [
            {
                "path": "https://d21ksh0k4smeql.cloudfront.net/crop_1695201165222-7514-0-1695201165485-8149.png",
                "opts": "262,175:363,175:313,215:272,279"
            }
        ]
    }'

# Update session
curl -X POST "https://openapi.akool.com/api/open/v3/faceswap/live/update" \
    -H "Authorization: Bearer token" \
    -H "Content-Type: application/json" \
    -d '{
        "sourceImage": [
            {
                "path": "https://d21ksh0k4smeql.cloudfront.net/1745579943557-yr5w-crop_1728989585247-3239-0-1728989585409-9277.png",
                "opts": "249,510:460,515:343,657:255,740"
            }
        ],
        "_id": "685ea0bb5aa150dd8b7116b1"
    }'

# Close session
curl -X POST "https://openapi.akool.com/api/open/v3/faceswap/live/close" \
    -H "Authorization: Bearer token" \
    -H "Content-Type: application/json" \
    -d '{
        "_id": "685ea0bb5aa150dd8b7116b1"
    }'

Response Code Description

Note: If the code value in the response is not 1000, the request has failed or is incorrect.
ParameterValueDescription
code1000Success
code1003Parameter error or parameter cannot be empty
code1101Invalid authorization or the request token has expired
code1102Authorization cannot be empty
code1104Insufficient quota

Important Notes

  1. Resource Validity: Generated resources are valid for 7 days, please save them promptly
  2. Face Detection: Use the face-detect API to get face landmarks coordinates before creating face swap sessions
  3. Status Monitoring: After creating a session, you need to monitor the faceswap_status status
  4. Real-time Connection: When the status is 2, you can connect to Agora’s server for real-time face swap
  5. Session Management: Please close sessions promptly after use to release resources
  6. Error Handling: Please handle API error codes and error messages properly

Push and pull stream Demo References

For implementing real-time video communication with Agora SDK, you can refer to the following resources:

Basic Video Calling Demo Parameter Description

Basic Video Calling Demo Parameter Description As shown in the figure above, channel_id, front_user_id, and front_rtc_token correspond to the Channel, User ID, and Token input fields on the page respectively. These parameters can be obtained after creating a session through the Live Face Swap API. After filling them in, you can experience push/pull streaming and real-time face swap effects.

Demo Page

Source Code

For optimal performance in live face swap scenarios, it’s recommended to use the following track configurations:

Audio Track Configuration

const audioTrack = await AgoraRTC.createMicrophoneAudioTrack({
  encoderConfig: "music_standard",
});

Video Track Configuration

const videoTrack = await AgoraRTC.createCameraVideoTrack({
  encoderConfig: {
    width: 640,
    height: 480,
    frameRate: {max: 20, min: 20},
    bitrateMin: 5000,
    bitrateMax: 5000,
  },
});
These configurations are optimized for:
  • Audio: Using music_standard encoder for better audio quality
  • Video: Fixed frame rate at 20fps with controlled bitrate for stable performance
  • Resolution: 640x480 resolution suitable for face swap processing
These resources provide complete examples of how to integrate Agora’s real-time video communication SDK, which can be used as a reference for implementing the video streaming part of the live face swap functionality.