Request parameters explained
Parameters and response fields that are commonly misunderstood.
Terms: PSS (Passenger Service System); the airline reservation or host system holding the ticket. Where the ticket is held in a GDS (Global Distribution System) such as Amadeus, Sabre or Travelport rather than an airline host, read the same guidance as applying to the GDS. EMD (Electronic Miscellaneous Document); a document for ancillary services (seats, baggage), as opposed to an e-ticket for flights.
isEmd
isEmdA routing hint only; it does not control how a document is treated. Deal Engine determines the real document type from PSS data (the presence of an RFISC, the service code identifying an EMD):
isEmd: trueon an actual e-ticket is not rejected and produces no error.- The engine silently corrects the flag and processes the document as its real type.
- The response reflects the actual document type.
You cannot force EMD treatment through
isEmd. Trust the PSS-derived type in the response.
Related document references
Document responses may reference other tickets. All are read-only context; the refund is always keyed to the ticketNum you requested, and none require action:
| Field | What it is | Your action |
|---|---|---|
conjunctionTicketNum | Continuation ticket, used when an itinerary has more segments than fit one ticket | Ignore for refund handling |
parentTicketNum | Previous ticket in an exchange/reissue chain; used internally for correct refund math | None |
parentIssueDate | Issue date of that previous ticket | None |
associatedTicketNum (EMD) | The flight ticket the EMD belongs to | None |
The Sync header
Sync headerBehaves differently per mutation; the part most integrators get wrong:
createQuote:Sync: truewaits and returns an array of document-shaped quote results (ticket metadata, nestedquotewith fulfillment/taxes, segments, request context). Genuinely synchronous, but the wait is PSS-dependent, capped at 3 minutes. Worst cases (a purged reservation, private fares, or many reschedules on the itinerary) push closer to that cap. If an item times out, don't treat that as a failed quote; see the timeout section below.processRefund:Sync: trueonly delays the response. The body remains the enqueue acknowledgment:
{ "success": true, "message": "Queued for processing" }That is not the refund outcome; it means the ticket passed basic validation and entered the queue.
This is the summary-only shape.processRefundis also documented returning a per-ticket array,{ success, message, results[] }; see Reading theprocessRefundresponse. Treatresultsas optional, branch on the booleans rather than onmessagestrings, and reconcile perticketNum.
Never read the refund outcome from the
processRefundresponse. Use webhooks or status polling; see Refund lifecycle & statuses.
Sync timeout on createQuote
createQuoteIf the quote is not ready within the 3-minute deadline, that item returns a timeout instead of a document:
{
"error": "Failed due to timeout",
"message": "Quote result timeout, call query document."
}A timeout is not a definitive quote failure; the work may still finish in the background. Call document(ticketNum) (or wait for refund_request.status_updated) to read the stored quote. See Quote workflow.
Sending it
The header is a normal HTTP header on the GraphQL request. Omit it (or send Sync: false) for the asynchronous default.
The examples below use the production endpoint. For a first integration, substitute your Sandbox URL; see Environments & access. A quote against production reads a live ticket.
Synchronous quote; document-shaped results in the response:
curl https://api.deal-engine.com/v3 \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-H "Sync: true" \
-d '{
"query": "mutation CreateQuote($request: [quoteRequest]!) { createQuote(request: $request) }",
"variables": { "request": [{ "ticketNum": "1282132019309" }] }
}'Asynchronous quote (default); header omitted:
curl https://api.deal-engine.com/v3 \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"query": "mutation CreateQuote($request: [quoteRequest]!) { createQuote(request: $request) }",
"variables": { "request": [{ "ticketNum": "1282132019309" }] }
}'Response shapes for both modes: API usage & integration.
Asynchronous is the recommended default. Pair it with therefund_request.status_updatedwebhook instead of blocking on the response; see Quote workflow and the Webhooks guide.
Updated about 1 month ago