Skip to content

Search Dispute evidence packet

POST
/v1/object-types/hospitality.dispute_evidence_packet/search
curl --request POST \
--url https://api.aerandil.com/v1/object-types/hospitality.dispute_evidence_packet/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.

The evidence the kernel assembled to counter one chargeback: the text fields it would send, the documents it would attach (each pinned to the source object’s id and version), and the evidence the argument wanted but the house could not supply. Built from what the kernel already holds — folio, frozen cancellation terms, stay record, 3DS outcome — so nobody at the property gathers or uploads anything. A person counters or accepts; the one submission the kernel makes itself is a packet with no gaps still unsent 48 hours before the deadline (move 13, 2026-10-22: the night audit’s sweep, submitted_by = system).

Media typeapplication/json
object
branch

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.

string format: uuid
cursor

Opaque cursor from a prior response’s next_cursor. Pass back verbatim; do not introspect.

string
filters

Conjunctive list of predicates. Empty or omitted matches every row in scope, capped by limit.

Array
One of:
object
property
required
Allowed value: id
type
required
Allowed value: eq
value
required
string
limit

Page size. Server defaults to 50, silently clamps at 500 (AIP-158 §3).

integer
>= 1 <= 500
order

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).

string
default: asc
Allowed values: asc desc
property_id

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.

string format: uuid
scope
One of: discriminator: level
object
level
required
string
Allowed value: tenant
Allowed values: tenant
sort_by

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).

string
default: created_at
Allowed values: created_at updated_at id status template packet_version assembled_at submitted_at gaps_acknowledged_by submitted_by refusal sending_at page_count byte_count

Search results, ordered by (sort_by, id) in the requested order (ascending by default).

Media typeapplication/json
object
data
required
Array<object>
object
created_at
required
string format: date-time
id
required
string format: uuid
object_type
required
Allowed value: hospitality.dispute_evidence_packet
properties
required
object
assembled_at
required
Assembled at
string format: date-time
byte_count
The bytes the packet's documents came to when they were rendered for the processor (4.5 MB at most in all)
integer
documents
required
Dispute evidence packet documents

The files the packet attaches, one per evidence type, each naming the object and version it is rendered from

Array<object>
object
evidence_type
required
string
Allowed values: receipt service_documentation cancellation_policy customer_signature duplicate_charge_documentation customer_communication uncategorized_file
source_id
required
string
source_object_type
required
string
source_version
required
integer
sources
Array<object>
object
source_id
required
string
source_object_type
required
string
source_version
required
integer
enhanced_evidence
Dispute evidence packet enhanced evidence

Visa Compelling Evidence 3.0, as the processor takes it (Stripe evidence[enhanced_evidence][visa_compelling_evidence_3]): the disputed booking’s identifiers and two prior undisputed charges on the same card, 120 to 364 days before it, each matching the disputed one on two of the purchase IP, the device and the guest’s email (at least one of them the IP or the device). Each prior names the payment and version it was read from, checked again before the packet is sent. Absent when the case is not Visa card-absent fraud, when the processor’s own prior transactions already qualify, or when two were not found (a gap says how many were).

object
customer_device_id
string
customer_email_address
string
customer_purchase_ip
string
merchandise_or_services
required
string
priors
required
Array<object>
object
captured_at
required
string format: date-time
charge
required
string
customer_device_id
string
customer_email_address
string
customer_purchase_ip
string
matches
required
integer
payment_id
required
string
payment_version
required
integer
product_description
required
string
product_description
required
string
fields
The text evidence, keyed by the processor's evidence name (`customer_name`, `service_date`, `cancellation_policy_disclosure`, …). Generated from the objects, never written freehand, so every sentence can be checked against the packet's own sources.
object
key
additional properties
any
files
Dispute evidence packet files

The files uploaded for this packet, one per evidence type, as the processor’s file ids — recorded when the packet is marked sending, before the dispute update

Array<object>
object
evidence_type
required
string
Allowed values: receipt service_documentation cancellation_policy customer_signature duplicate_charge_documentation customer_communication uncategorized_file
file_id
required
string
gaps
required
Dispute evidence packet gaps

Evidence the argument wanted and the kernel could not supply — shown to the desk before it counters, so a weak case is visible as one

Array<object>
object
evidence
required
string
why
required
string
gaps_acknowledged
Whether the house submitted knowing the packet's gaps — required when there are any
boolean
gaps_acknowledged_by
Who acknowledged the gaps and submitted (the principal)
string
id
required
Packet id
string
packet_version
required
1 for the first assembly on a case; each re-assembly bumps it and supersedes the unsent packet before it
integer
page_count
The pages the packet's documents came to when they were rendered for the processor — the networks' limit is counted on these (fewer than 50 in all; 19 for Mastercard)
integer
refusal
The processor's words when it refused this packet — a refused packet is not sent again; assembling another is the retry
string
sending_at
When the packet's dispute update was sent to the processor (its idempotency key is remembered for 24 hours from then)
string format: date-time
status
required
Status
string
Allowed values: draft staged submitted accepted superseded sending superseded_by_escalation
submitted_at
When the processor took the packet to the issuer
string format: date-time
submitted_by
Who sent the packet to the processor: the principal, or `system` when the night audit's sweep submitted a gap-free packet 48 hours before the deadline
string
template
required
Which argument the packet makes — chosen from the dispute reason and what happened to the booking. Recorded so a later change to the templates cannot rewrite what this packet said.
string
Allowed values: fraud no_show cancellation duplicate service
provenance

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
pins
object
key
additional properties
object
pinned_at
string format: date-time
pinned_by
object
reason
required
string
properties
object
key
additional properties
object
external_id
string
recorded_at
required
string format: date-time
source
required
string
source_updated_at
string format: date-time
stream
string
scope
required
One of: discriminator: level
object
level
required
string
Allowed value: tenant
Allowed values: tenant
tenant_id
required
string format: uuid
updated_at
required
string format: date-time
version
required
integer
>= 1
has_more
required
boolean
next_cursor

Cursor for the next page; omitted when the result set is exhausted.

string
Example
{
"data": [
{
"object_type": "hospitality.dispute_evidence_packet",
"properties": {
"documents": [
{
"evidence_type": "receipt"
}
],
"files": [
{
"evidence_type": "receipt"
}
],
"status": "draft",
"template": "fraud"
},
"scope": {
"level": "tenant"
}
}
]
}

Validation error — unknown property or filter type mismatch.