Challenges
Read a challenge's frames
GET https://api.xipid.org/challenges/{id}/frames
The frames XipID kept from the challenge's selfies, for a brand that keeps frames, while they are kept: 90 days from each selfie. A brand may ask for them only over a dispute about the challenge's request, as the notice the person agreed to says. Each retrieval is recorded on the challenge with the key that made it. A challenge with no frames kept is not found.
Scope: any live key of the brand.
Limits: 1,000 requests a minute per key and 2,000 requests a minute per source address; every answer says what is left in X-RateLimit-Remaining, and a refusal when to come back in Retry-After.
Idempotency: a read, safe to repeat.
Changes: 2026-09-26: added.
Parameters
idXipID's id for the challenge.
Xip-VersionThe version to answer in; when absent, the version the brand's org is pinned to.
2026-09-26: The first version: challenges, subjects and events, and the signed outcome.
Answers
200 OK
Every frame still kept.
Its headers: X-Request-Id, Xip-Version, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
challenge_idframescapture_idpositioncontent_typeThe image's format, read from its bytes.
image/jpeg: A JPEG image.image/png: A PNG image.
imagecaptured_atexpires_at
{
"challenge_id": "01JD2R5W8Y3K6M9P2S5V8X1Z4B",
"frames": [
{
"capture_id": "01JD2RC8D0F2H4K6M8N0P2Q4S6",
"position": 0,
"content_type": "image/jpeg",
"image": "/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA==",
"captured_at": "2026-11-19T18:06:40.512Z",
"expires_at": "2027-02-17T18:06:40.512Z"
}
]
}
Errors
json_invalid, 400: The request body is not valid JSON.parameter_invalid, 400: The request contains invalid parameters.parameter_unknown, 400: The request contains a parameter this route does not take.version_invalid, 400: Xip-Version names no released version of this API.authentication_required, 401: Authentication is required.authentication_failed, 401: The credential is invalid, expired or revoked.insufficient_scope, 403: The credential does not allow this operation.resource_not_found, 404: No such resource.content_too_large, 413: The request body is larger than this route accepts.media_type_unsupported, 415: This route does not accept that Content-Type.rate_limit_exceeded, 429: Too many requests; try again later.internal_error, 500: Something went wrong on our side.upstream_error, 502: A service XipID depends on failed.service_unavailable, 503: The service is temporarily unavailable.upstream_timeout, 504: A service XipID depends on did not answer in time.