Skip to main content

Overview

This endpoint returns presigned download links for original, unwatermarked photos for an event. You can query by BIB number or Selfie UUID.

Endpoint

POST /api/v1/ext/{org_id}/event/{event_id}/original-photos

Query Parameters

ParameterTypeRequiredDescription
pagenumberNoPage number (default: 1)
page_sizenumberNoNumber of photos per page (default: 30, max: 60)
This endpoint returns paginated results. See the pagination guide: Pagination.

Pagination Example

curl -i \
  -H "X-API-Key: <your_9pic_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"method":"selfie","identifier":"<SELFIE_UUID>"}' \
  "https://api.9pic.ai/api/v1/ext/903/event/456/original-photos?page=2&page_size=60"

Request Body

{
  "method": "bib",
  "identifier": "123"
}

Body Fields

FieldTypeRequiredDescription
methodstringYesbib or selfie
identifierstringYesBIB number or Selfie UUID

Response

{
  "presigned_urls": [
    {
      "url": "https://...",
      "filename": "a1b2c3.jpg"
    }
  ],
  "failed_urls": [],
  "total_images": 1,
  "successful_count": 1,
  "failed_count": 0,
  "identifier": "123",
  "message": null,
  "pagination": {
    "total": 47,
    "currentPage": 1,
    "totalPages": 2,
    "hasNextPage": true,
    "hasPreviousPage": false,
    "page_size": 30
  }
}

Response Fields

FieldTypeDescription
presigned_urlsarrayList of presigned download links
failed_urlsarrayImages that failed to generate links
total_imagesnumberTotal images requested
successful_countnumberLinks generated successfully
failed_countnumberLinks that failed
identifierstringThe BIB number or Selfie UUID used
messagestring | nullOptional message when no images are found
paginationobjectPagination metadata

Ownership Validation

For security, org_id must own event_id. If they do not match, the API returns 403.

How To Find org_id and event_id

Find org_id

In the admin.9pic.ai dashboard, your organisation ID is shown in the top-left organisation selector. Use that value as org_id.

Find event_id

In the 9Pic Dashboard, the event ID appears beside the event name. Use that value as event_id.

Example Request

curl -i \
  -H "X-API-Key: <your_9pic_api_key>" \
  -H "Content-Type: application/json" \
  -d '{"method":"selfie","identifier":"<SELFIE_UUID>"}' \
  "https://api.9pic.ai/api/v1/ext/903/event/456/original-photos?page=1&page_size=60"

Example Response

{
  "presigned_urls": [
    {
      "url": "https://be6b0590ad80e33aa59e6592da2b1bcd.r2.cloudflarestorage.com/raw-memories/imgs/5952/large/a4402318-0cf4-4e1e-b8e8-ac8e8f2fc244.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=...",
      "filename": "a4402318-0cf4-4e1e-b8e8-ac8e8f2fc244.jpg"
    }
  ],
  "failed_urls": [],
  "total_images": 47,
  "successful_count": 47,
  "failed_count": 0,
  "identifier": "ddc661a7-8861-4793-9437-af42a82d12f8",
  "message": null,
  "pagination": {
    "total": 47,
    "currentPage": 1,
    "totalPages": 1,
    "hasNextPage": false,
    "hasPreviousPage": false,
    "page_size": 60
  }
}
To access the full list, iterate over the presigned_urls array returned by the API.

Notes

  • Presigned URLs are time-limited and will expire (typically within ~1 hour).
  • Only large/original images are returned.