Search Property
const url = 'https://api.aerandil.com/v1/object-types/hospitality.property/search';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"branch":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","cursor":"example","filters":[{"property":"code","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.property/search \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "branch": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "cursor": "example", "filters": [ { "property": "code", "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.
A single operated site — a hotel or resort, or a non-lodging business run on the same substrate (a standalone day spa). The property is the canonical home of most operational data and the anchor for local timezone, currency, and brand standards.
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
- 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
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
object
object
object
object
object
Case-insensitive substring needle.
object
object
object
object
object
Case-insensitive substring needle.
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
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
Address
object
Who this property is, legally, on a document it issues. Absent until an operator fills it in, and issue_invoice refuses without it — a tax invoice with no supplier registration number is not one. Snapshotted onto every invoice at issue, so editing this never rewrites a document already handed over.
object
object
object
object
When the open business date was opened. A posting stamped before this instant belongs to an earlier day and is dated by the property-local calendar instead.
The smallest excess worth a top-up — the bill less what is held plus the rule’s allowance
object
object
The business date this property has open — the hotel date a posting made now is dated to. Written by open_business_date and the night audit’s close; unset while no day is open.
When true, a payment request’s pay link is sent to the booking’s guest — by email, or by SMS when the profile holds no email — as soon as the card rail has minted it. Unset: off, and the desk sends the link itself.
What the pay page tells the guest about keeping their card (Stripe’s submit-button text, at most 1,200 characters): that the house may charge it without them present, for what, when and how often, and how each amount is set — the terms Stripe requires for a merchant-initiated charge. Set with set_payment_request_messaging. Unset: the card rail’s default wording.
How many business days after departure a charge found later (the minibar, damage, laundry) may still be posted to the departed stay’s bill and taken from its card. On (1–14), check-out keeps the stay’s largest card hold and releases the rest, and the window closes at the house’s midnight after its last day — 1 is OPERA’s “until the end of the business date”. Off (0 or unset), check-out releases every hold. Set with set_post_stay_charging.
How many minutes before its due time a housekeeping request reads as soon on the housekeeping_requests read (and on the handset’s card). Unset: 30. Between 1 and 720. Set through set_request_urgency_window.
When true, a charge or hold the card rail tried with the guest absent that the issuer will only complete with the cardholder sends the guest a page to confirm it on (email first, else SMS, under the service-message consent gate), reminds them before the deadline, and tells the house when the deadline passes. Unset: off — the state and its deadline are still recorded and the desk sends the page itself. Set with set_sca_chase.
The house’s deadline for a pending authentication, in hours from the moment the issuer asked (1–168). Unset: 24.
How many reminders go to the guest before the deadline, spread evenly across it (0–3; 1 is one at half-time). Unset: 1.
How many days past a stay’s arrival night the night audit keeps the booking engine’s visitor key on its offers, turnaways and reservation before stripping it; the records themselves stay. Unset: 30. At most 365.
The start of the link a waitlist offer carries; the offer’s claim token is appended as a path segment. Point it at the kernel’s own claim page (https://<kernel>/v1/waitlist-claims/) or at a booking site that calls the claim route. An https URL ending in /, with no query or fragment (plain http only to a loopback dev host). Unset: the offer goes out without a link and asks the guest to call.
How many minutes a waitlist offer — the desk’s or the matcher’s — keeps its room-nights before they are given back and offered to the next entry. Unset: 30. Between 1 and 1440 (OPERA’s room-hold range).
When true, every waitlist offer — the desk’s or the matcher’s — is sent to the guest by SMS (or email when the profile holds no phone), with a link to claim it. Unset: off.
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.property", "properties": { "billing_identity": { "tax_registration_scheme": "vat" }, "credit_limit_overage": "off", "fnb_open_checks_at_roll": "carry", "kind": "hotel", "positioning": "luxury" }, "scope": { "level": "tenant" } } ]}Validation error — unknown property or filter type mismatch.