Documentation
Everything you need to integrate Pixicular API photo analysis into your app.
See implementation guides for OCR text extraction, ID document OCR for KYC, and UGC image moderation.
Getting Started
Get up and running with the Pixicular API in just a few minutes.
Create an account
Sign up for a free account to get your API key.
Get your API key
Generate an API key from your dashboard.
Make your first request
Use the code examples in the POST /v1/detect or POST /v1/detect-from-url section below to make your first detection request.
Authentication
All API requests require authentication using a Bearer token in the Authorization header.
Authorization: Bearer apd_live_your_api_key_here
API keys have the format: apd_live_... or apd_test_...
Use apd_test_... keys for development — they work identically but are tracked separately. Use apd_live_... keys in production.
/v1/detectand/v1/detect-from-urlAnalyze an image to detect if it was AI-generated. Supports both file upload (multipart) and URL submission (JSON).
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
file | File | Required* | Image file (multipart upload) |
url | String | Required* | Image URL (JSON body) |
services | String | Required | Comma-separated list of services to run. Available: detect-age, detect-labels. |
* Either file or url is required
Code Examples
File Upload (multipart/form-data)
curl -X POST "https://api.pixicular.com/v1/detect" \-H "Authorization: Bearer apd_live_your_api_key_here" \-F "services=detect-age" \-F "file=@/path/to/image.jpg"
URL Submission (application/json)
curl -X POST "https://api.pixicular.com/v1/detect-from-url" \-H "Authorization: Bearer apd_live_your_api_key_here" \-H "Content-Type: application/json" \-d '{"services": "detect-age","url": "https://example.com/image.jpg"}'
Response
{"success": true,"services": {"detect-age": {"faces": [{"ageRange": {"low": 22,"high": 28},"ageEstimate": 25,"confidence": 99.99726104736328}]}},"photo": {"id": "photo_Dy2csYO9nhYgdDxn9B","status": "COMPLETED"},"creditCost": 1,"processingTimeMs": 1250,"processedAt": "2025-12-31T23:59:59.002Z"}
Service response examples
{"services": {"detect-age": {"faces": [{"ageRange": { "low": 25, "high": 35 },"ageEstimate": 30,"confidence": 98.4}]}}}
{"services": {"detect-labels": {"labels": [{"name": "Person","confidence": 99.8,"categories": ["Person Description"]}]}}}
/v1/historyRetrieve a paginated list of your operation history.
Query Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
page | Integer | 1 | Page number |
perPage | Integer | 50 | Results per page (max 100) |
Code Examples
curl "https://api.pixicular.com/v1/history?page=1&perPage=50" \-H "Authorization: Bearer apd_live_your_api_key_here"
Response
{"data": [{"requestId": "req_wUKl0im7IZg4bCefnE","operationId": "op_QtLqxId519-4muCl_L","services": {"detect-age": {"faces": [{ "ageRange": { "low": 30, "high": 40 }, "ageEstimate": 35, "confidence": 97.2 }]}},"processedAt": "2025-12-31T23:59:59.002Z"}],"meta": {"pagination": {"currentPage": 1,"perPage": 50,"totalRecords": 150,"totalPages": 3,"hasNextPage": true,"hasPreviousPage": false}}}
/v1/history/:requestIdRetrieve detailed information about a specific operation result.
Code Examples
curl "https://api.pixicular.com/v1/history/req_wUKl0im7IZg4bCefnE" \-H "Authorization: Bearer apd_live_your_api_key_here"
Response
{"data": {"requestId": "req_wUKl0im7IZg4bCefnE","processedAt": "2025-12-31T23:59:59.002Z","services": {"detect-age": {"faces": [{"ageRange": {"low": 22,"high": 28},"ageEstimate": 25,"confidence": 99.99726104736328}]},},"photo": {"id": "photo_Dy2csYO9nhYgdDxn9B","status": "COMPLETED"},"creditCost": 3,"processingTimeMs": 1156,"processedAt": "2025-12-31T23:59:59.002Z"}}
Photo Analysis Services
Pass a comma-separated list of service IDs in the services field. Each service costs 1 credit per request.
detect-age1 creditEstimates the age range of every face detected in the image.
{"faces": [{"ageRange": { "low": 25, "high": 35 },"ageEstimate": 30,"confidence": 99.3}]}
detect-labels1 creditDetects objects, scenes, and activities in the image with confidence scores and category tags.
{"labels": [{ "name": "Person", "confidence": 99.8, "categories": ["People"] },{ "name": "Outdoors", "confidence": 87.3, "categories": ["Nature"] },{ "name": "Mountain", "confidence": 74.1, "categories": ["Nature"] }]}
detect-moderation1 creditDetects unsafe or sensitive content — nudity, violence, drugs, hate symbols, and more. Returns a hierarchical list of moderation labels with confidence scores.detected is true when any label is found.
{"detected": true,"labels": [{"name": "Suggestive","parentName": "","confidence": 90.5},{"name": "Female Swimwear Or Underwear","parentName": "Suggestive","confidence": 90.5}]}
detect-text1 creditExtracts lines of text found in the image using OCR. Only full lines are returned (individual words are omitted).
{"detections": [{ "detectedText": "Hello World", "type": "LINE", "confidence": 99.1 },{ "detectedText": "Open 9am – 5pm", "type": "LINE", "confidence": 96.4 }]}
detect-face-emotions1 creditReturns confidence scores for eight emotions — HAPPY, SAD, ANGRY, SURPRISED, DISGUSTED, CALM, CONFUSED, and FEAR — for each face detected.
{"faces": [{"faceConfidence": 99.9,"emotions": [{ "type": "HAPPY", "confidence": 97.2 },{ "type": "CALM", "confidence": 1.5 },{ "type": "SURPRISED", "confidence": 0.8 }]}]}
Limits & Pricing
General Limits
Max file size
10MB per image
Supported formats
PNG, JPG, JPEG, GIF, WebP
Rate limit
Detection: 60 req/min, History: 600 req/min
Image dimensions
100x100 to 4096x4096 px
Pricing Plans
| Plan | Price | Included | Overage |
|---|---|---|---|
| Developer | $0/mo | 100 operations | - |
| Launch | $25/mo | 1,000 operations | $0.015 per extra operation |
| Scale | $99/mo | 10,000 operations | $0.010 per extra operation |
| Business | $299/mo | 100,000 operations | $0.005 per extra operation |
| Enterprise | Custom | Unlimited | Custom |
A request is one uploaded and processed photo via Pixicular API (or via the Pixicular website), regardless of how many services it includes.
An operation is one service run on a request.
So if 3 services are selected on one request, it counts as 3 operations. For example, if there is one request and it has two services defined, `detect-age` and `detect-labels`, it counts as two operations.
Usage Limits & Overage Policy
Developer plan: Currently includes a 14-day trial and is hard-capped at 100 operations. Once reached, operations are blocked until you upgrade.
Paid plans (Launch, Scale, Business):Once 100% of your monthly usage is reached, you will be charged per extra operation at your plan's overage rate. By default, when you reach 200% of the original plan usage, operations will be rate-limited (HTTP 429) until the next payment period or until you upgrade your plan.
Email alerts: You will receive email notifications at 80%, 90%, and 100% of your monthly usage limit.
To request a higher overage cap for your plan, contact us at support@pixicular.com.
Error Handling
The API uses standard HTTP status codes and returns errors in a consistent JSON format.
{"statusCode": 400,"error": "Bad Request","message": "Invalid services: unknown-service. Available: detect-age,detect-labels"}
{"statusCode": 401,"error": "Unauthorized","message": "Invalid or missing API key"}
{"statusCode": 429,"error": "Too Many Requests","message": "Rate limit exceeded. Please wait 15 minutes."}
{"statusCode": 429,"error": "Usage Limit Exceeded","message": "Requests rate-limited because usage has reached 200% of your monthly limit for this period."}
Need Help?
Visit your Dashboard to monitor usage
View Pricing plans and upgrade options
Email us at support@pixicular.com for general support
Contact support for Enterprise plan inquiries