Base URL
/api/v1/ext/....
Authentication
Every request must send the API key in theX-API-Key header:
Identifiers
URL Path Conventions
- Org-scoped:
/api/v1/ext/{org_id}/... - Event-scoped:
/api/v1/ext/{org_id}/event/{event_id}/... - Request-id-scoped:
.../{request_id}whererequest_idis a UUID returned by a previous selfie POST. - Pipeline (media-scoped):
/api/v1/ext/{org_id}/event/{event_id}/pipeline/{media}/{stage}—mediaisphotostoday (see Pipeline Status); stage isimport,process,go-live, orstatus.
Response Envelope
Every endpoint — success or error — returns the same three-key envelope:
This applies to every
/api/v1/ext/... endpoint, including List Events, Event Details, All Photos, BIB Search, Face Search, Video Clipping Search, Download Original Photos, and Ping. Endpoint-specific fields like request_id, confidence_percentage, status, videos, pagination, etc. always live inside data.
Error envelope
Errors use the same shape withdata: null:
Datetime Format
Alldatetime fields are ISO 8601 strings:
null.
Pagination
Listing and search endpoints return aPaginationInfo object. Defaults and maximums vary per endpoint.
See the canonical model and per-endpoint limits on Pagination Model.
Some empty-result responses return
currentPage: 0 and totalPages: 0. Treat those values as “no page is available” rather than as a normal page number.request_id Idempotency
Selfie-driven searches use a POST-once / GET-many pattern. The request_id is the canonical identifier for a single selfie search, not a session token.
See Face Search and Video Clipping Search for endpoint-specific behaviour.
Async Endpoints
Video Clipping Search is asynchronous:POST returns immediately with data.status: "processing" and data.request_id. Poll GET /video-clipping/{request_id} until data.status is anything other than processing. Recommended interval: exponential backoff starting at 3s.
Host Validation
Requests are validated against an approved hostname allowlist. Calls from non-approved hosts return403. The production allowlist includes api.9pic.ai. Talk to support if you need an additional host enabled for testing.

