Overview
This documentation explains how to submit a task and retrieve results from undressme.ai.
Quick Flow
- Generate upload URL: request an
uploadUrlandsourceKeyfor your file - Upload file: PUT the file bytes to the
uploadUrl - Create task: start processing using the
sourceKey(you can reuse the samesourceKey) - Check task status: poll with the
taskIduntil 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_shakingCredit 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