Submit check-in

Creates a person from a public check-in form.

Written by Exportlab · Updated March 2026

POST /group-shoot

Creates a person from a public check-in form.

This endpoint is public and does not require an API key.

Email is required by the current check-in handler. If email is missing, the response is email_required.

If the selected package requires payment, the handler creates a payment reservation and returns a Stripe checkoutUrl instead of finalizing the person immediately.

json
Copied
{
  "action": "submitCheckin",
  "token": "iURWUkHo",
  "name": "Max Mustermann",
  "email": "max@example.com",
  "employeeId": "EMP-001",
  "shootingDayId": "day-abc123",
  "selectedPackageId": "pkg-xyz456",
  "termsAccepted": true,
  "selfieBase64": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQ..."
}
bash
Copied
curl -X POST "https://api.exportlab.io/v1/group-shoot" \
  -H "Content-Type: application/json" \
  -H "X-Tenant-Slug: YOUR_TENANT" \
  -d '{
    "action": "submitCheckin",
    "token": "iURWUkHo",
    "name": "Max Mustermann",
    "email": "max@example.com",
    "employeeId": "EMP-001"
  }'
json
Copied
{
  "ok": true,
  "personId": "mZTZBszq",
  "code": "LWR7",
  "name": "Max Mustermann",
  "requestId": "b4ad3a02-..."
}
FieldTypeRequiredDescription
actionstringYesMust be submitCheckin
tokenstringYesGallery token
namestringYesFull name (1–200 chars)
emailstringYesEmail address (max 200 chars)
employeeIdstringNoHR system employee ID (max 100 chars)
phonestringNoPhone number (max 50 chars)
departmentstringNoDepartment or team (max 100 chars)
notesstringNoParticipant notes (max 1000 chars)
customFieldsobjectNoValues for enabled custom-* form fields
consentGivenbooleanConditionalRequired when consent is enabled for the gallery
faceConsentbooleanNoGranular face consent when enabled
notificationConsentbooleanNoGranular notification consent when enabled
hrExportConsentbooleanNoGranular HR export consent when enabled
shootingDayIdstringNoSelected shooting day ID
selectedPackageIdstringNoSelected package ID
orderNotesstringNoNotes for the package order (max 1000 chars)
termsAcceptedbooleanConditionalRequired when the selected package requires payment
selfieBase64stringNoBase64-encoded JPEG. Accepts full data URI or raw base64
Paid package response fieldTypeDescription
orderIdstringPayment reservation/order ID
checkoutUrlstringStripe Checkout URL. Redirect the participant here
statusTokenstringOpaque token used after successful checkout to poll status
retryTokenstringOpaque token used after a cancelled checkout to retry
packageNamestringSelected package name