Skip to Content
Overview

Overview

This documentation explains how to submit a task and retrieve results from undressme.ai.

Quick Flow

  1. Generate upload URL: request an uploadUrl and sourceKey for your file
  2. Upload file: PUT the file bytes to the uploadUrl
  3. Create task: start processing using the sourceKey (you can reuse the same sourceKey)
  4. Check task status: poll with the taskId until the result is ready

Authentication

All endpoints require authentication:

  • Authorization: Bearer <API_KEY>

Unauthenticated requests return 401 Authentication required.

Rate Limit

When API key rate limiting is enabled, the limit is 10 requests per 2 seconds. Exceeding this returns 429 Rate limit exceeded.

Task Types and Credits

GET /api/task-types returns values from the TaskType enum. Current values:

bikini undress video_undress video_undress_tit_massage video_undress_blowjob video_tit_massage video_tit_sucking video_blowjob video_missionary video_spooning video_doggy video_cowgirl video_standing_sex video_cumshot video_pov_insertion video_pretzel_pose video_fingering video_titty_fuck video_handjob_blowjob_combo video_spread video_anal_sex video_ass_shaking

Credit costs:

  • bikini, undress: 3 credits
  • all video_*: 9 credits

Reference: Minimal Flow

const headers = { Authorization: `Bearer ${API_KEY}` } // 1. presign const { key, uploadUrl } = await fetch(`${BASE_URL}/api/presign`, { method: "POST", headers }).then(r => r.json()) // 2. upload await fetch(uploadUrl, { method: "PUT", body: fs.createReadStream(FILE_PATH) }) // 3. create task const { taskId } = await fetch(`${BASE_URL}/api/tasks`, { method: "POST", headers: { ...headers, "Content-Type": "application/json" }, body: JSON.stringify({ type: "undress", sourceKey: key }) }).then(r => r.json()) // 4. poll const status = await fetch(`${BASE_URL}/api/tasks/${taskId}`, { headers }).then(r => r.json())
Last updated on