The Acaption API generates explicit, conversion-optimised captions for adult content images and videos. Send a base64-encoded image or a raw video file — receive three caption variants instantly. No filters, no refusals.
The API is designed for direct integration into creator tools, agency platforms (Clawbot, SuperCreator, etc.), and custom automation pipelines. Authentication uses a static API key passed in a header — no OAuth, no sessions.
Pass your API key in the X-Api-Key request header. Keys are prefixed ac_.
You receive your key by email after subscribing at acaption.com/#pricing.
X-Api-Key: ac_your_api_key_here
All requests must use Content-Type: application/json.
Send one base64-encoded image. Supported MIME types: image/jpeg, image/png, image/webp, image/gif.
| Field | Type | Required | Description |
|---|---|---|---|
imageData |
string | required | Base64-encoded image bytes (no data: prefix). |
imageType |
string | required | MIME type of the image, e.g. "image/jpeg". |
{
"imageData": "/9j/4AAQSkZJRgABAQAA...",
"imageType": "image/jpeg"
}
Video captioning uses a dedicated endpoint. Send your raw video file as multipart/form-data —
Acaption handles all processing server-side and returns three captions reflecting the full content of the video.
Supported formats: video/mp4, video/quicktime, video/x-msvideo.
Available on Pro and Agency plans.
Contact hello@acaption.com to enable video access on your key.
# Video — multipart/form-data curl -s -X POST https://api.acaption.com/caption \ -H "X-Api-Key: YOUR_API_KEY" \ -F "video=@/path/to/video.mp4"
| Field | Type | Description |
|---|---|---|
captions |
array | Array of 3 caption objects, each with label and text. |
captions[].label |
string | Caption style: "Raw & Direct", "Sensual & Teasing", or "Bold & Provocative". |
captions[].text |
string | The generated caption text. |
demo |
boolean | true if the request was unauthenticated (demo mode), false otherwise. |
{
"captions": [
{
"label": "Raw & Direct",
"text": "She's pinned against the wall, dress barely covering anything."
},
{
"label": "Sensual & Teasing",
"text": "There's something about the way the light hits that lace..."
},
{
"label": "Bold & Provocative",
"text": "Not here for your comfort zone. Tap if you can handle it."
}
],
"demo": false
}
All error responses follow this shape:
{ "error": "Human-readable error message" }
# Encode image and send IMAGE_B64=$(base64 -i /path/to/photo.jpg) curl -s -X POST https://acaption.com/.netlify/functions/acaption \ -H "Content-Type: application/json" \ -H "X-Api-Key: ac_your_api_key_here" \ -d "{\"imageData\":\"$IMAGE_B64\",\"imageType\":\"image/jpeg\"}"
import base64, requests # Load and encode image with open("/path/to/photo.jpg", "rb") as f: image_b64 = base64.b64encode(f.read()).decode() # Call Acaption API response = requests.post( "https://acaption.com/.netlify/functions/acaption", headers={ "Content-Type": "application/json", "X-Api-Key": "ac_your_api_key_here", }, json={ "imageData": image_b64, "imageType": "image/jpeg", }, ) data = response.json() if response.status_code == 200: for caption in data["captions"]: print(f"{caption['label']}: {caption['text']}") else: print("Error:", data.get("error"))
const fs = require("fs"); // Load and encode image const imageBuffer = fs.readFileSync("/path/to/photo.jpg"); const imageB64 = imageBuffer.toString("base64"); // Call Acaption API const response = await fetch( "https://acaption.com/.netlify/functions/acaption", { method: "POST", headers: { "Content-Type": "application/json", "X-Api-Key": "ac_your_api_key_here", }, body: JSON.stringify({ imageData: imageB64, imageType: "image/jpeg", }), } ); const data = await response.json(); if (response.ok) { data.captions.forEach(c => console.log(`${c.label}: ${c.text}`)); } else { console.error("Error:", data.error); }
B2B / Agency API access is priced individually based on your volume and integration needs. Plans start from €149 / month, invoiced as a B2B SaaS licence via Stripe or bank transfer.
Each API call (image or video) counts as 1 file against your agreed monthly quota. Dedicated rate limits and multi-client key management included on all plans.
Contact hello@acaption.com to discuss your requirements and receive a quote.
Image size — Images do not need to be full resolution. Resize to 1024px on the longest side before encoding to keep payloads small and latency low. JPEG quality 80 is sufficient.
Video — Send the raw file. Frame extraction is handled server-side — no preprocessing required on your end.
Retry on 502/500 — Upstream AI errors are transient. Implement an exponential backoff retry (3 attempts, starting at 2 s delay).
Base64 encoding — Encode raw image bytes only. Do not include the data:image/jpeg;base64, data-URI prefix — the API expects a bare base64 string.
Get your API key in minutes. No onboarding call, no approval process.
Get API Access →