Search Person
const url = 'https://api.aerandil.com/v1/object-types/hospitality.person/search';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"branch":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","cursor":"example","filters":[{"property":"given_name","type":"eq","value":"example"}],"limit":1,"order":"asc","property_id":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","scope":{"level":"tenant"},"sort_by":"created_at"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.aerandil.com/v1/object-types/hospitality.person/search \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "branch": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "cursor": "example", "filters": [ { "property": "given_name", "type": "eq", "value": "example" } ], "limit": 1, "order": "asc", "property_id": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "scope": { "level": "tenant" }, "sort_by": "created_at" }'Search for instances. Filters eq, contains, gte and lte AND-compose; or / not are additive follow-ups. Pages with an opaque cursor; the +1 fetch returns has_more without a second round-trip. Ordered by sort_by (default created_at) in order (default ascending), id breaking ties; rows with no value for a property key sort last.
An individual person known to the hospitality system — guest, local, member, or any combination across a stay’s lifecycle. Persons are tenant-wide so loyalty, recognition, and history follow them across the portfolio. The ‘guest’ label is a role carried on reservation_for_guest and on a stay; the same person may also be a local (visiting a venue without a reservation), a member (enrolled in a membership-club program), or all three.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Optional open-branch id. Search composes that branch’s copy-on-first-write overlay instead of main, so a preview reads its own hypothetical writes. Omit to read main.
Opaque cursor from a prior response’s next_cursor. Pass back verbatim; do not introspect.
Conjunctive list of predicates. Empty or omitted matches every row in scope, capped by limit.
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
- object
object
object
Case-insensitive substring needle.
object
object
object
object
Case-insensitive substring needle.
object
object
object
object
Case-insensitive substring needle.
object
object
object
object
Case-insensitive substring needle.
object
object
object
object
Case-insensitive substring needle.
object
object
object
object
object
object
object
object
object
Case-insensitive substring needle.
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
object
Case-insensitive substring needle.
object
object
object
object
object
object
object
Case-insensitive substring needle.
object
object
Page size. Server defaults to 50, silently clamps at 500 (AIP-158 §3).
Direction of sort_by: asc (oldest / smallest first) or desc. A cursor is bound to the sort_by and order it was minted under; another pair is refused (422).
The house a desk stands in: keeps this property’s rows (property- or venue-scoped there) and every row scoped to no property (tenant, brand, portfolio), and drops a sibling house’s — the meaning property_id has on the event tail.
object
object
object
object
object
What the page is ordered by: the row’s created_at or updated_at, or a property whose type orders — strings, enums and dates as text, ints, decimals and durations as numbers, datetimes as instants. Rows with no value sort last in either direction. A property the caller is not cleared to read is refused (403).
Responses
Section titled “Responses”Search results, ordered by (sort_by, id) in the requested order (ascending by default).
object
object
object
The guest’s own postal address. Required on any tax invoice above the property’s simplified-invoice threshold — reg 14(1)(e) of the UK VAT Regulations 1995 wants “the name and address of the person to whom the goods or services are supplied”, and §14(4) Nr. 1 UStG the same. Snapshotted onto the document at issue.
object
Marketing consent
object
Lifetime value (projection over folio history)
object
Preferences
object
Relationship context (Tier 1.4 / 2 §D.2)
object
object
A personal tax number where a jurisdiction prints one on a guest’s invoice. Rare in the UK; ordinary in parts of southern Europe and Latin America.
VIP recognition assignment (proposal 0025)
object
Per-property source attribution and pins. An entry under properties means the property’s current value came from that source (on the source’s own clock, source_updated_at); an entry under pins is a human override protecting the property from sourced writes.
object
object
object
object
object
object
object
object
object
object
object
Cursor for the next page; omitted when the result set is exhausted.
Example
{ "data": [ { "object_type": "hospitality.person", "properties": { "consent": { "method": "web_form" }, "dietary_observance": [ "halal" ], "preferences": { "room_floor_preference": "low" }, "relationship_context": { "important_dates": [ { "occasion": "birthday" } ], "local_status": "not_local" }, "resolution_status": "active", "vip_recognition": { "tier": "standard" } }, "scope": { "level": "tenant" } } ]}Validation error — unknown property or filter type mismatch.