Search Payment
const url = 'https://api.aerandil.com/v1/object-types/hospitality.payment/search';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"branch":"2489E9AD-2EE2-8E00-8EC9-32D5F69181C0","cursor":"example","filters":[{"property":"id","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.payment/search \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "branch": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "cursor": "example", "filters": [ { "property": "id", "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 payment applied to a folio. Settles charges. Refunds are recorded as a separate negative-amount Payment row linked to the original settled payment via payment_refunds_payment and carrying payment_kind = refund per proposal 0019. The original settled Payment row stays immutable — status = settled is the evidence that money was captured, and partial-refund / multiple-refund state is derived from the linked refund legs rather than by rewriting the source row.
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
- 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
object
object
object
object
object
object
Case-insensitive substring needle.
object
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
object
object
Case-insensitive substring needle.
object
object
object
object
Case-insensitive substring needle.
object
object
object
object
object
object
object
object
object
object
object
Case-insensitive substring needle.
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
object
object
object
Case-insensitive substring needle.
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
Case-insensitive substring needle.
object
object
object
object
Case-insensitive substring needle.
object
object
object
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
Case-insensitive substring needle.
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
Case-insensitive substring needle.
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
Amount
object
Set by record_page_fee on a payment a hosted page took: refunded (the difference to the card’s own class was refunded), not_due (nothing to give back), refused (the processor refused the refund; the hotel paid the ceiling, fee_true_up_detail says why, and the operator’s variance shows it). Absent on every other payment.
The processor’s id for the application-fee refund the page’s true-up made (Stripe fr_…).
Set when an issuer flags this payment as suspected fraud (an early fraud warning: Visa’s TC40, Mastercard’s SAFE report). About 40% of Visa and Mastercard warnings become fraud disputes when the charge is not refunded, and Visa’s VAMP counts the warning itself whatever happens next. Absent on a payment no issuer has flagged.
Stripe’s issfr_… for the early fraud warning an issuer raised on this payment’s charge — the join key for every later report about the same warning.
Decided once, from the stay, when the warning first arrives: hold_voided (an uncaptured hold released before capture — the cardholder cannot dispute it), refunded (a captured line after the stay at or under the house’s ceiling, refunded in full), desk_review (a deposit before arrival, a stay in house, a line above the ceiling, or a release or refund the ledger refused — a person decides), not_actionable (already disputed or refunded, or nothing left to act on).
Set on a pending card hold when its stay checks out: release (the card rail voids it), capture (the bill still owed money — the rail takes that from the hold, which lets the rest go), or keep (the house’s post-stay window is on; the hold stays for charges found after departure until hold_kept_until). Absent on a hold no departure has decided.
Set on a card hold when it is placed: booking (the guarantee before arrival — the pay page’s hold, or a desk hold on the booking’s own account), check_in (the desk’s hold on the stay’s folio), top_up, re_placement (the card rail renewing a booking hold before the issuer lapses it), incidentals, no_show, post_stay, or other. A hold carried from the booking onto the stay at check-in keeps booking. Absent on a payment taken in one step.
What the transfer to the hotel carried less the application fee the platform took back, net of any transfer reversal or fee refund a refund made — the platform’s balance transactions for the payment, folded by record_processor_fee. Equals the hotel’s own payout line for the charge (amount less fee). Chargeback movements are the case’s (platform_dispute_cost), not counted here.
object
The platform’s fee on this card payment as the account’s fee schedule priced it for the card’s class (fee_class, card_present) — the processor’s application_fee_amount, set when the money was taken, on what was taken. Absent on a payment that settled to the platform’s own account.
object
What of the platform’s fee the card rail refunded to the hotel when the hosted page this payment came from completed: the link fixed its fee at the account’s dearest card class (payment_request.page_fee_ceiling), and the difference to the class of the card the guest paid with went back as an application-fee refund. platform_fee is what the platform kept. Zero when nothing was due or the refund was refused (fee_true_up). In the payment’s currency.
object
Stripe’s actual processing fee on the payment’s charge, read off the platform’s balance transaction for it (its fee; a partial capture’s reversal line counted in) by record_processor_fee. On a destination charge the fee is the platform’s, recouped through the application fee — processor_fee beside processor_fee_estimate is the variance the pricing decision reports per account per month; the hotel is never trued up. In the platform’s balance currency.
object
The processor’s published rate for the card’s class on what was taken (its conversion fee added when the charge’s currency is not the schedule’s) — the estimate processor_fee is read back against. In the charge’s currency.
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.payment", "properties": { "authentication_outcome": "frictionless", "fee_class": "domestic_standard", "fee_true_up": "refunded", "fraud_warning_response": "hold_voided", "fraud_warning_stay_phase": "before_arrival", "fraud_warning_type": "card_never_received", "hold_decision": "release", "hold_outcome": "released", "hold_purpose": "booking", "liability_shift_basis": "three_ds2_authenticated", "method": "cash", "payment_kind": "payment", "refund_reason": "duplicate", "refund_trace_reference_type": "arn", "review_state": "not_required", "sca_exemption_claimed": "none", "status": "pending", "void_reason": "duplicate" }, "scope": { "level": "tenant" } } ]}Validation error — unknown property or filter type mismatch.