API Reference
Submit a file, read the verdict, and browse previous submissions.
The Pixel Systems API is organized around REST: predictable resource-oriented URLs, file uploads as multipart/form-data, JSON responses, and standard HTTP response codes and verbs. Every request authenticates with an API key; see Authentication.
Base URL
https://api.pixelsystems.comEvery endpoint lives under /v1. A change that breaks an existing call arrives as a new API version, not as a change to /v1.
Client libraries
Call the API over HTTP from any language, or generate a typed client from the API's OpenAPI spec:
https://api.pixelsystems.com/openapi.jsonTypeScript SDKs are available on request.
Workflow
The fastest way to verify a file, or up to 20 files of one case, is one call to Assess a file (/v1/assess): upload the files as multipart/form-data, one file part each. The call waits for analysis by default and responds 200 with the finished job (status completed or error) when analysis ends inside the wait window; otherwise it returns 202 with a processing status and you poll the job until it finishes.
To read a result later, call Get a job's result (/v1/jobs/{jobId}) and poll until the job's status leaves processing. It ends as completed (with a verdict on each entry of results[]) or error. A job stays in processing until analysis finishes, which takes longer when the platform is busy. Each pipeline sets a total time its jobs may wait for capacity. A job that reaches it ends as error rather than staying in processing, so every job reaches completed or error. Keep polling rather than resubmitting the file: a resubmission creates a second job, and the first one still completes. Pass ?wait=true to long-poll instead of tight-looping. Use List jobs (/v1/jobs) to browse previous submissions.
Example request
Send the files with your API key, one file part each:
curl -X POST "https://api.pixelsystems.com/v1/assess" \ -H "Authorization: Bearer {api_key}" \ -H "Idempotency-Key: case-123-photos" \ -F "file=@front.jpg;type=image/jpeg" \ -F "file=@side.jpg;type=image/jpeg" \ -F 'metadata={"customer_case_id":"case-123"}'Example response
When analysis finishes inside the wait window, the call responds 200 with the completed job:
{ "jobId": "550e8400-e29b-41d4-a716-446655440000", "status": "completed", "results": [ { "file": { "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7", "name": "front.jpg", "size": 1834211, "type": "image/jpeg" }, "status": "completed", "startedAt": "2026-06-01T12:00:01Z", "completedAt": "2026-06-01T12:00:14Z", "verdict": { "assessment": "ai_generated", "confidence": "high" }, "dimensions": [ { "key": "ai_detection", "assessment": "likely_ai", "score": 0.82, "confidence": "high" } ] }, { "file": { "id": "9b2d3f41-6a8e-4c1b-9f0d-2e7a5c8b1d34", "name": "side.jpg", "size": 1650372, "type": "image/jpeg" }, "status": "completed", "startedAt": "2026-06-01T12:00:01Z", "completedAt": "2026-06-01T12:00:12Z", "verdict": { "assessment": "authentic", "confidence": "medium" }, "dimensions": [ { "key": "ai_detection", "assessment": "likely_authentic", "score": 0.12, "confidence": "medium" } ] } ], "metadata": { "customer_case_id": "case-123" }, "createdAt": "2026-06-01T12:00:00Z", "completedAt": "2026-06-01T12:00:14Z"}The job's result is results[], one entry per file. Each completed entry carries a verdict (the assessment and a confidence level) and dimensions: one entry per axis of analysis with its key, score, and, where the analysis found some, structured evidence under data. The API returns keys and values, not display text, so your integration renders its own words from them. Field-by-field documentation lives in FileResult; the reference page for Get a job's result shows an example of every response state.
Explore the reference
- Authentication: API keys and the
Authorizationheader. - Rate limits: request limits, the rate limit headers, and how to retry.
- Error codes: the error envelope and what every code means.
- Resources: the objects the API returns and how they reference each other.
- Assess a file (
/v1/assess): verify a file, or up to 20 files of one case, in one call. - Get a job's result (
/v1/jobs/{jobId}): read a job's status and per-file results. - List jobs (
/v1/jobs): browse previous submissions.
See also Concepts for how applications, jobs, and files relate.