Import persons (bulk)

Creates multiple persons for a gallery in a single request.

Written by Exportlab · Updated March 2026

POST /group-shoot/checkin/{token}/persons

Creates multiple persons for a group shoot gallery in a single request. Designed for HR/CRM systems that need to pre-populate participants before the photo session.

Each person gets a unique 4-character access code automatically. Up to 500 persons per request.

json
Copied
{
  "persons": [
    { "name": "Max Mustermann", "email": "max@example.com", "employeeId": "EMP-001", "shootingDayId": "abc12345" },
    { "name": "Erika Musterfrau", "employeeId": "EMP-002" },
    { "name": "John Doe" }
  ]
}
bash
Copied
curl -X POST "https://api.exportlab.io/v1/group-shoot/checkin/{TOKEN}/persons" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "X-Tenant-Slug: YOUR_TENANT" \
  -H "Content-Type: application/json" \
  -d '{
    "persons": [
      { "name": "Max Mustermann", "email": "max@example.com", "employeeId": "EMP-001" },
      { "name": "Erika Musterfrau", "employeeId": "EMP-002" }
    ]
  }'
json
Copied
{
  "ok": true,
  "requestId": "c3d4e5f6-...",
  "galleryToken": "iURWUkHo",
  "imported": 2,
  "skipped": 0,
  "persons": [
    { "personId": "mZTZBszq", "name": "Max Mustermann", "email": "max@example.com", "employeeId": "EMP-001", "shootingDayId": "abc12345", "code": "LWR7" },
    { "personId": "nXaYcTdr", "name": "Erika Musterfrau", "email": null, "employeeId": "EMP-002", "shootingDayId": null, "code": "KP3M" }
  ]
}

Idempotency

The API does not deduplicate by employeeId or name. Calling the endpoint twice with the same data creates duplicate persons. Check via GET /persons?employeeId= before importing if you need idempotency.

Path parameterTypeDescription
tokenstringThe gallery token
FieldTypeRequiredDescription
personsarrayYesList of persons to import (max 500)
persons[].namestringYesFull name (1–200 chars)
persons[].emailstringNoEmail address (max 200 chars)
persons[].employeeIdstringNoHR system employee ID (max 100 chars)
persons[].shootingDayIdstringNoShooting day ID from GET /days. Invalid IDs are silently ignored
Response fieldTypeDescription
importednumberNumber of persons successfully created
skippednumberNumber of rows skipped due to validation errors
personsarrayCreated persons with their generated code and personId
skippedDetailsarrayOnly present when skipped > 0 — lists index and reason for each skipped row