List travelers
GET/v1/travelers
The agency's passengers across live trips, for polling (n8n, Zapier): pass the last updatedAt you saw as updatedSince with sort=updatedAt, and follow nextCursor until it is null. Filter by tripId. access is null here — read a trip's roster for it. Reordering passengers does not move updatedAt. Personal data: audited.
Permissions: travelers:read · Kind: read · Cost: 1 unit
Path parameters
None.
Query parameters
| Field | Type | Required | Description |
|---|---|---|---|
limit |
integer | 1–100, default 25 | |
cursor |
string | max 500 chars | |
sort |
"updatedAt" | "-updatedAt" | "createdAt" | "-createdAt" | default "-updatedAt" | |
updatedSince |
datetime | ||
tripId |
uuid |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
object |
"list" | yes | |
data |
object[] | yes | |
data[].object |
"traveler" | yes | |
data[].id |
uuid | yes | |
data[].tripId |
uuid | yes | |
data[].position |
integer | yes | |
data[].title |
"mr" | "mrs" | "ms" | "mstr" | "miss" | null | yes | |
data[].firstName |
string | null | yes | |
data[].lastName1 |
string | null | yes | |
data[].lastName2 |
string | null | yes | |
data[].birthDate |
string | null | yes | |
data[].sex |
"m" | "f" | null | yes | |
data[].nationality |
string | null | yes | |
data[].docType |
"dni" | "nie" | "passport" | "other" | null | yes | |
data[].docNumber |
string | null | yes | |
data[].docExpiry |
string | null | yes | |
data[].docCountry |
string | null | yes | |
data[].email |
string | null | yes | |
data[].phone |
string | null | yes | |
data[].address |
object | null | yes | |
data[].address.line1 |
string | null | yes | |
data[].address.line2 |
string | null | yes | |
data[].address.postalCode |
string | null | yes | |
data[].address.city |
string | null | yes | |
data[].address.region |
string | null | yes | |
data[].address.country |
string | null | yes | |
data[].taxId |
string | null | yes | |
data[].paxType |
"adult" | "child" | "infant" | "unknown" | yes | |
data[].missing |
string[] | yes | |
data[].access |
"invited" | "queued" | "failed" | "no_email" | "not_yet" | null | yes | |
data[].source |
string | yes | |
data[].consentAt |
string | null | yes | |
data[].docsPurgedAt |
string | null | yes | |
data[].createdAt |
string | yes | |
data[].updatedAt |
string | yes | |
nextCursor |
string | null | yes |
Errors
Errors are problem details. Besides the refusals described above, any call like this one can return:
invalid_request— Invalid requestunauthorized— Missing or invalid API keyinsufficient_scope— Missing permissionrate_limited— Rate limit reached