Documentation

Login to create your API key

Updates

03.02.2026: Added localized names to animation presets endpoint
02.02.2026: Added animation presets list endpoint
01.02.2026: Breaking update of the Animate Photo API
21.01.2026: Added Animate Photo API
21.01.2026: Added body_shape, boobs, hair options for premium_v2 style
19.12.2025: Remove basic face swap photo
13.12.2025: Update documenation about undress videos
12.12.2025: Added ability to create undress videos
11.12.2025: Removed legacy options from OpenAPI specification
26.09.2025: Removed information about unsupported undress styles
30.12.2024: Added link to beta version of API documentation
27.12.2024: Added Face Swap Videos API
10.12.2024: Added version field to FaceSwap API
25.10.2024: Added FaceSwap API
18.10.2024: Added premium v2 style
21.09.2024: Added link to OpenAPI specification
21.09.2024: Added information about the new automatic mask generation feature
16.09.2024: Added link to pricing page
11.05.2024: Added curl usage example.
10.05.2024: Updated API documentation to be in sync with the current version of the API.

Authorization

To authorize your requests, you need to pass your API key in the header of your request.

Authorization: Bearer <your_api_key>

Undress API

Create Undress

Accepts the source image, the image mask and one of the styles

Source image should be base64 encoded image in jpeg format, mask should be base64 encoded image in png format. Mask should contain 2 colors: white for regions which should be undressed and black for rest of the image.

Available styles: standard, premium, premium_v2, video

"video" is the special style which generates undress animation video in the result.

Premium v2 Options

When using the premium_v2 style, you can optionally specify body customization options:

  • body_shape: Body shape adjustment. Values: null (normal), fat, skinny, athletic
  • boobs: Breast size adjustment. Values: null (normal), small, large
  • hair: Pubic hair style. Values: null (normal), hairy, shaved

Example request with premium_v2 options:

curl -X POST https://deepstrip.com/api/v1/undress \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"source_image": "<base64_encoded_image>", "automask": true, "style": "premium_v2", "body_shape": "athletic", "boobs": "large", "hair": "shaved"}'

Example request:

curl -X POST https://deepstrip.com/api/v1/undress \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"source_image": "<base64_encoded_image>", "mask": "<base64_encoded_mask>", "style": "standard"}'

Example request with automatic mask generation:

curl -X POST https://deepstrip.com/api/v1/undress \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"source_image": "<base64_encoded_image>", "automask": true, "style": "standard"}'

Example request to generate Animated Undress:

curl -X POST https://deepstrip.com/api/v1/undress \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"source_image": "<base64_encoded_image>", "style": "video"}'

In case of the video generation you may send request to generate video with undress of the next cloth item using parent parameter, which should be equal to the "id" response field of the previous result.

curl -X POST https://deepstrip.com/api/v1/undress \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"parent": "<id-of-the-response>"}'

The API returns a JSON object with the identifier of the job or error message. Example responses:

HTTP status code: 201

{"id": "69d280ab-42c5-4f49-9881-51076afb1747"}

HTTP status code: 400

{"error": "no_credits"}

HTTP status code: 400

{"error": "invalid_params", "errors": ["Image is invalid"]}

Animated Undress Face Swap Video

For animated undress you also can (if you want) only once run a free face swap for the result to improve (usually) consistency of the face. Usually it takes about 60-120 seconds to complete the face swap.

curl -X POST https://deepstrip.com/api/v1/undress_face_swap_video \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"undress_id": "<id-of-the-undress>"}'

The API returns a JSON object with the identifier of the job or error message. Example responses:

HTTP status code: 201

{
  "id": "69d280ab-42c5-4f49-9881-51076afb1747",
  "face_swap_video_id": "35b4a4a8-e5e6-4613-b1a3-d538b8698d06",
  "undress_id": "69968efe-556d-4805-87bd-1556a49f4e37",
  "undress_result_id: null
}

HTTP status code: 404

{"error": "NOT_FOUND"}

You can check face swap video status using the provided id and standard face swap video endpoint to fetch status.

When face swap video is completed you can fetch undress face swap video status using following endpoint to retreive id of the resulted undress to fetch it using standard undress endpoint.

curl https://deepstrip.com/api/v1/undress_face_swap_video/<identifier> \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json"

HTTP status code: 201

{
  "id": "69d280ab-42c5-4f49-9881-51076afb1747",
  "face_swap_video_id": "35b4a4a8-e5e6-4613-b1a3-d538b8698d06",
  "undress_id": "69968efe-556d-4805-87bd-1556a49f4e37",
  "undress_result_id: "616c2b43-c432-416d-8ecb-470a670fbdee"
}

HTTP status code: 404

{"error": "NOT_FOUND"}

Get Undress Result

Accepts the identifier of the job and returns the generated image and the generated mask or the generation status.

Example request:

curl https://deepstrip.com/api/v1/undress/<identifier> \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json"

The API returns a JSON object with the generation result or the generation status. Parameter image is deprecated in favor of result. Example responses:

HTTP status code: 200

{"status": "completed", "image": "<result url>", "result": "<result url>"}

HTTP status code: 200

{"status": "pending"}

HTTP status code: 200

{"status": "failed"}

HTTP status code: 404

{"error": "NOT_FOUND"}

FaceSwap API

Create FaceSwap

Accepts the face image and the image

Face and target images should be base64 encoded images in jpeg, webp, or png format

Example request:

curl -X POST https://deepstrip.com/api/v1/face_swaps \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"image": "<base64_encoded_image>", "face": "<base64_encoded_face>"}'

The API returns a JSON object with the identifier of the job or error message. Example responses:

HTTP status code: 201

{"id": "69d280ab-42c5-4f49-9881-51076afb1747"}

HTTP status code: 400

{"error": "no_credits"}

HTTP status code: 400

{"error": "invalid_params", "errors": ["Image is invalid"]}

Get FaceSwap Result

Accepts the identifier of the job and returns the generated image or the generation status.

Example request:

curl https://deepstrip.com/api/v1/face_swaps/<identifier> \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json"

The API returns a JSON object with the generated image or the generation status. Example responses:

HTTP status code: 200

{"status": "completed", "image": "<result image url>"}

HTTP status code: 200

{"status": "pending"}

HTTP status code: 200

{"status": "failed"}

HTTP status code: 404

{"error": "NOT_FOUND"}

Face Swap Videos API

Payment Requirement: Face swap videos API is only available to users who have completed payments of $100 or more.

HTTP status code: 402

{"error": "PAYMENT_REQUIRED", "message": "Face swap video API requires a completed payment of $100 or more"}

Analyze Video

Calculate the price for processing a video based on its duration

Example request:

curl -X POST https://deepstrip.com/api/v1/face_swap_videos/analyze \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"video_url": "https://example.com/video.mp4", "preview": false, "version": "v2"}'

The API returns a JSON object with the price calculation or error message. Example responses:

HTTP status code: 200

{"price": 4.0, "duration": 20 }

HTTP status code: 400

{"error": "INVALID_VIDEO_URL", "details": ["must be a valid URL", "must use HTTPS"]}

HTTP status code: 422, video dimensions should not exceed 1920x1080

{"error":"ANALYSIS_FAILED","details":"too_large"}

Create Face Swap Video

Create a new face swap video job using URL

Example request with URLs:

curl -X POST https://deepstrip.com/api/v1/face_swap_videos \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"video_url": "https://example.com/video.mp4", "face_url": "https://example.com/face.jpg", "preview": false, "version": "v2"}'

The API returns a JSON object with the job details or error message. Example responses:

HTTP status code: 201

{"id": "69d280ab-42c5-4f49-9881-51076afb1747", "status": "created", "message": "Face swap video creation started"}

HTTP status code: 400

{"error": "VALIDATION_ERROR", "details": ["Video is required"]}

Get Face Swap Video Status

Check the status of a face swap video job and get the result URL when completed

Example request:

curl https://deepstrip.com/api/v1/face_swap_videos/<identifier> \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json"

The API returns a JSON object with the current status and details. Example responses:

HTTP status code: 200 (Processing)

{ "id": "69d280ab-42c5-4f49-9881-51076afb1747", "status": "processing", "progress": 45.5, "step": "working", "result_url": null, "error_details": null }

HTTP status code: 200 (Completed)

{ "id": "69d280ab-42c5-4f49-9881-51076afb1747", "status": "completed", "progress": 100.0, "step": "uploading", "result_url": "https://assets.nodress.ai/videos/result.mp4", "error_details": null }

HTTP status code: 404

{"error": "NOT_FOUND"}

Animate Photo API

The Animate Photo API converts static photos into videos with smooth, natural motion.

Create Animation

Accepts a source image and a preset ID to create an animation job

Source image should be a base64 encoded data URI in jpeg, png, or webp format (e.g., data:image/jpeg;base64,/9j/4AAQ...).

Available Presets

The preset_id parameter is required and determines the animation style. Use the GET /api/v1/animation_presets endpoint to fetch the current list of available presets.

Example request to get presets:

curl https://deepstrip.com/api/v1/animation_presets

Example response:

[{"id": 1, "name": "Missionary POV", "name_de": "Missionarsstellung POV", "name_es": "Misionero POV", ...}, ...]

The response includes localized names for all supported languages (en, de, es, pt, fr, ru, zh). The name field contains the English name. Each name_XX field contains the translation for that locale, falling back to English if not set.

Current presets:

  • 1 - Missionary POV
  • 3 - Reverse Cowgirl
  • 4 - Face Sitting
  • 5 - Breast Expansion
  • 6 - Doggy Slider
  • 7 - Dildo Handjob
  • 8 - Cumshot on the face
  • 9 - Feet Up
  • 12 - Pet Play
  • 13 - Squirt
  • 14 - Tongue Out
  • 15 - Deepthroat
  • 16 - Breast Play
  • 17 - Spoon Sex

Example request:

curl -X POST https://deepstrip.com/api/v1/animations \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"source_image": "<base64_encoded_image>", "preset_id": 1}'

The API returns a JSON object with the identifier of the job or error message. Example responses:

HTTP status code: 201

{"id": "69d280ab-42c5-4f49-9881-51076afb1747"}

HTTP status code: 400

{"error": "no_credits"}

HTTP status code: 400

{"error": "invalid_params", "errors": ["Input is invalid"]}

Get Animation Result

Accepts the identifier of the job and returns the generated video URL or the generation status.

Example request:

curl https://deepstrip.com/api/v1/animations/<identifier> \
  -H "Authorization: Bearer <your_api_key>" \
  -H "Content-Type: application/json"

The API returns a JSON object with the generated video URL or the generation status. Example responses:

HTTP status code: 200

{"status": "completed", "result": "<result video url>"}

HTTP status code: 200

{"status": "pending"}

HTTP status code: 200

{"status": "failed"}

HTTP status code: 404

{"error": "NOT_FOUND"}