REST API for uncensored image generation, face swap, and video. API key auth, async jobs, same credit system as the UI.
Bearer token with per-key rate limits. Max 5 keys per account.
202 Accepted + polling. No blocking requests. Signed URLs when complete.
Credits deducted on submission. Failed jobs auto-refunded by cron.
Same content filter as the UI. CSAM blocked at all tiers.
All endpoints (except /api/v1/health) require a Bearer token:
Authorization: Bearer nc_live_<your_key>
API keys are generated in Settings → API Keys. Keys are shown once at creation — store them securely.
| Method | Path | Description | Auth |
|---|---|---|---|
| POST | /api/v1/generate | Image generation (txt2img & img2img) | Required |
| POST | /api/v1/face-swap | Face swap | Required |
| POST | /api/v1/video | Video generation (t2v & i2v) | Required |
| GET | /api/v1/jobs/{id} | Poll job status + signed output URLs | Required |
| GET | /api/v1/jobs | List recent jobs (paginated) | Required |
| GET | /api/v1/account | Credit balance + usage | Required |
| GET | /api/v1/health | Service health check | None |
Submit an image generation job and poll for the result:
1. Submit a job (202 Accepted)
curl -X POST https://nocensor.ai/api/v1/generate \
-H "Authorization: Bearer nc_live_<your_key>" \
-H "Content-Type: application/json" \
-d '{"prompt": "beautiful woman, photorealistic", "model": "realistic"}'
# 202 Accepted
# {
# "data": { "id": "job_...", "status": "pending" },
# "meta": { "poll_url": "/api/v1/jobs/job_...", "credits_remaining": 490 }
# }2. Poll until complete
curl https://nocensor.ai/api/v1/jobs/<job_id> \
-H "Authorization: Bearer nc_live_<your_key>"
# 200 OK — when done:
# {
# "data": {
# "id": "job_...", "status": "completed",
# "outputs": [{ "url": "https://...", "media_type": "image", "expires_at": "..." }]
# }
# }| Limit | Value | Scope |
|---|---|---|
| Per-key | 60 rpm | Per API key |
| Per-user aggregate | 300 rpm | All keys on your account |
| Active keys | 5 max | Per account |
All responses include X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. Rate-limited responses include a Retry-After header.
| Code | HTTP | Trigger |
|---|---|---|
| UNAUTHORIZED | 401 | Missing, invalid, or revoked API key |
| FORBIDDEN | 403 | Account suspended or key missing required scope |
| INSUFFICIENT_CREDITS | 402 | Not enough credits for the workflow |
| RATE_LIMITED | 429 | Per-key or per-user rate limit exceeded |
| VALIDATION_ERROR | 422 | Malformed request body |
| PROMPT_BLOCKED | 400 | Content policy filter triggered |
| CONSENT_REQUIRED | 400 | Face processing without biometricConsent: true |
| PAYLOAD_TOO_LARGE | 413 | Image exceeds 3.4MB |
| GPU_UNAVAILABLE | 503 | All GPU workers throttled — retry shortly |
| NOT_FOUND | 404 | Job does not exist or not owned by caller |
Create an account, get your API key, and start generating.
Get started free