Get invitation details
Retrieve the current status and metadata for a single invitation key.
/apiv1/invitationUse this endpoint to inspect a specific invitation. It reports the upload channel, message state, photo and quality-control state, user consent decisions, timestamps, and invitation URL where applicable.
An upload performed by the kiosk or app can close the initial invitation and create a new
invitation_key. The response then includes the upload record underuploaded_with. Do not rely on a permanentinvitation_key ↔ customer_nomapping; useGET /searchwhencustomer_nois the stable identifier.
Request parameters
| Parameter | Required | Description |
|---|---|---|
invitation_key |
Yes | Unique invitation key. |
language_interface |
No | Response language. ISO locale codes such as en_US are recommended. Two-letter codes such as en are matched on a best-effort basis. |
Response
{
"invitation_key": "o2hIyfWYpMq8",
"customer_no": "123456789",
"customer_to": "+41760000000",
"photocode": null,
"locale": "en_US",
"upload_channel": "invitation",
"site_name": "Demo",
"site_code": "demo",
"photo_status": null,
"qc_status": null,
"qc_failed_reason": null,
"user_consent": null,
"created_at": "2024-03-12T17:07:55+01:00",
"expires_at": null,
"uploaded_at": null,
"exported_at": null,
"received_at": null,
"invitation_url": "https://demo.photocollect.io/c/o2hIyfWYpMq8",
"iteration": 1,
"message_status": "delivered"
}
Unknown keys return HTTP 400 with GET_INVITATION_FAILED.
User consent
user_consent contains the user's recorded consent decisions as a JSON object keyed by category. It is null when no decisions have been recorded. Decisions are collected only for enabled, applicable consent questions. Only categories with a recorded decision are included; a missing category does not mean the user declined it.
| Category | Description |
|---|---|
use_general |
Consent to use the user's photo. |
use_marketing |
Consent to use the photo for marketing, communications, and the website. |
enhance_genai |
Consent to enhance or change the photo using generative AI. |
The three categories above are the base categories. Theme-defined categories such as use_linkedin and use_advertising can also appear, with the same fields. Treat the category names as extensible rather than a fixed enumeration. Valid historical decisions remain in the response even if a category is later disabled or removed from the theme.
Consent requirements can be configured when creating an invitation using config.consent. That configuration describes which questions to ask; user_consent describes the user's recorded answers.
Each category contains:
| Field | Type | Description |
|---|---|---|
choice |
Boolean | true when the user consented; false when the user declined. |
datetime |
String | Time the decision was recorded, in UTC using the ISO 8601 format YYYY-MM-DDTHH:mm:ssZ. |
For example, an invitation with recorded decisions can include:
{
"user_consent": {
"use_general": {
"choice": true,
"datetime": "2026-09-16T12:30:00Z"
},
"use_marketing": {
"choice": false,
"datetime": "2026-09-16T12:30:00Z"
},
"enhance_genai": {
"choice": true,
"datetime": "2026-09-16T12:30:00Z"
},
"use_linkedin": {
"choice": false,
"datetime": "2026-10-18T10:15:00Z"
}
}
}
The same user_consent field is included in invitation records returned by GET /search and each item in the files array returned by GET /export. The original UTC decision timestamps are preserved in all three responses.