Import persons (bulk)
Creates multiple persons for a gallery in a single request.
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.
Copied
{
"persons": [
{ "name": "Max Mustermann", "email": "max@example.com", "employeeId": "EMP-001", "shootingDayId": "abc12345" },
{ "name": "Erika Musterfrau", "employeeId": "EMP-002" },
{ "name": "John Doe" }
]
}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" }
]
}'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 parameter | Type | Description |
|---|---|---|
| token | string | The gallery token |
| Field | Type | Required | Description |
|---|---|---|---|
| persons | array | Yes | List of persons to import (max 500) |
| persons[].name | string | Yes | Full name (1–200 chars) |
| persons[].email | string | No | Email address (max 200 chars) |
| persons[].employeeId | string | No | HR system employee ID (max 100 chars) |
| persons[].shootingDayId | string | No | Shooting day ID from GET /days. Invalid IDs are silently ignored |
| Response field | Type | Description |
|---|---|---|
| imported | number | Number of persons successfully created |
| skipped | number | Number of rows skipped due to validation errors |
| persons | array | Created persons with their generated code and personId |
| skippedDetails | array | Only present when skipped > 0 — lists index and reason for each skipped row |