Integration attendee lists
Read the people assigned ticket passes for an active event in the selected resource. These rows contain personal contact fields for the intended integration; they are neither pass-owner lists nor attendance/check-in evidence.
| Task | Operation |
|---|---|
| Read assigned attendees | GET event attendees |
Example clients and synthetic values follow response conventions. Use WALLKIT_API_BASE for the supplied scheme and host, without /api/v1. Examples include the full path; Node.js examples use an ES module (.mjs).
Read assigned event attendees
GET /api/v1/integrations/ti-events/{id}/attendees
Read assigned users grouped by user and ticket, with optional ticket filtering. The pass owner is not used as the attendee identity. No pass activation, expiry, refund or check-in condition is applied.
Before you call
The selected resource must enable its ticket-event system. The event must exist, be active and belong to that resource; knowing an event ID alone is insufficient.
Use the existing resource public key and resource-scoped service-api-key headers. The account must be active and not suspended, with an active attached service-account user. The service_account role has a separate route allowance; the account must also have full_access or an explicit grant for this controller/action. An ordinary member token is insufficient. Root context bypasses the route ACL, but is not the example credential.
Service-account initialization can create or update a session, increment request counters, extend its expiry and record the request/response, even for GET. An invalid key can fall back to ordinary context resolution; no dedicated invalid-key response is guaranteed. See credential transport.
This action does not require that the service-account user own a pass or be assigned to it. Its account grant controls access to the resource-scoped integration action.
Request
Bodyless GET.
| Name | Location | Type / requirement | Meaning and constraints |
|---|---|---|---|
| resource | header | required public-key string | Selects resource and service account. |
| service-api-key | header | existing authorized key string | Requires full access or the attendee action grant. |
| id | path | required digits, integer-filtered | Active event ID in the resource. |
| limit | query | optional integer-filtered value; default 100 | Must be 1 through 1000 inclusive. |
| offset | query | optional integer-filtered value; default 0 | Must be nonnegative; row offset, not page number. |
| tickets[] | query | optional nonempty array of integer-filtered ticket IDs | Restricts tickets joined to this event. Example spelling uses tickets%5B%5D=2001. Empty array or scalar fails; unknown IDs simply do not match. |
Result
HTTP 200 collection, with no nested user object. Assignment rows require a matching user and ticket. Items are grouped by user ID and ticket ID and ordered by the maximum pass creation time ascending; there is no stable tie-breaker.
| Field | Type / presence | Meaning |
|---|---|---|
| items | array; present | One row per matched assigned user/ticket group; empty [] possible. Multiple passes for that group collapse. |
| items[].email | stored string | Assigned user email, not pass-owner email. |
| items[].first_name, items[].last_name | stored strings / nullable | Assigned user names; no extra normalization promised. |
| items[].ti_event_ticket_id | stored integer | Ticket ID, not pass ID or event ID. |
| total | integer; present | Count of distinct assigned users, unlike the user/ticket grouping of items. |
| limit, offset | integers; present | Applied row limit and offset. |
| has_more | boolean; present | total > returned row count + offset. Because total counts users, this can understate remaining user/ticket rows. |
An internal collection failure is logged and can return the default empty collection with total 0 and has_more false. An empty result is therefore not conclusive proof of no assignments. This read does not establish current pass usability, attendance or content access.
Example: Read assignments for one ticket
Read event 1001, restricting ticket 2001 and returning up to 100 rows. The excerpt shows the assigned reader contact, without identifying who paid for or owns the pass.
curl "${WALLKIT_API_BASE}/api/v1/integrations/ti-events/1001/attendees?limit=100&offset=0&tickets%5B%5D=2001" \
-H "resource: ${RESOURCE_KEY}" \
-H "service-api-key: ${SERVICE_API_KEY}"
const response = await fetch(`${process.env.WALLKIT_API_BASE}/api/v1/integrations/ti-events/1001/attendees?limit=100&offset=0&tickets%5B%5D=2001`, {
method: "GET",
headers: {"resource": process.env.RESOURCE_KEY, "service-api-key": process.env.SERVICE_API_KEY}
});
console.log(response.status, await response.json());
import os, json
from urllib.request import Request, urlopen
from urllib.error import HTTPError
request = Request(os.environ["WALLKIT_API_BASE"] + "/api/v1/integrations/ti-events/1001/attendees?limit=100&offset=0&tickets%5B%5D=2001",
headers={'resource': os.environ["RESOURCE_KEY"], 'service-api-key': os.environ["SERVICE_API_KEY"]}, method="GET")
try:
with urlopen(request) as response:
print(response.status, json.load(response))
except HTTPError as error:
print(error.code, json.load(error))
Synthetic HTTP 200 result:
{
"items": [
{
"email": "reader@example.com",
"first_name": "Alex",
"last_name": "Rivera",
"ti_event_ticket_id": 2001
}
],
"total": 1,
"limit": 100,
"offset": 0,
"has_more": false
}
Consequential alternate
A matching event with no matched assigned users/tickets can return:
{
"items": [],
"total": 0,
"limit": 100,
"offset": 0,
"has_more": false
}
This same default shape can follow a caught collection failure. Separately, an inactive, wrong-resource or absent event returns HTTP 404 ti_event_not_found. Do not infer attendance or zero assignments from the empty collection alone.
Recovery
| HTTP status | API code / shape | Cause | Next action |
|---|---|---|---|
| 401 / 403 | access | Resolved role or account lacks this action. | Ask the integration owner to check account status, attached user and exact action grant. |
| 401 | token_expired / token_compromised | A resolved non-guest session fails the shared session checks. | Confirm the existing authorized context; do not substitute a member token for the account grant. |
| 404 | resource_not_exists | Resource key does not resolve. | Correct the resource context. |
| 409 | ti_events_not_available | Ticket-event system disabled for the resource. | Ask the resource administrator to confirm the configured integration. |
| 404 | ti_event_not_found | Event absent, inactive or outside this resource. | Check the event ID and resource; avoid treating this as an empty attendee list. |
| 409 | invalid_limit / invalid_offset / invalid_tickets | Invalid filtered pagination or ticket array. | Send limit 1–1000, offset >= 0 and a nonempty tickets array when filtering. |
| 409 | ti_event_assigns | Other caught controller failure. | Retain the error context for the integration owner. |
| 200 | Empty collection | No joined matches, or swallowed collection failure. | Check intended event/ticket filters and integration logs before concluding there are no assignments. |
Next task
Use the Event tickets activation and passes to distinguish owner, assignee and event-access checks. Keep attendance/check-in and actual access decisions separate from this contact list.
See the Server-integrations (advanced) to select the actor, identifiers and next task.