Skip to main content

Cancellations & refunds

Cancel with the book response's supplier_reference, unchanged. Only the account that made the booking can cancel it (404 booking_not_found otherwise). A modified supplier_reference answers 422 invalid_booking_token.

reason is optional free text, forwarded to providers that accept one.

Cancel reference

POST/v1/transfer/cancel
Request
{
"provider_context": {"provider": "provider_a"},
"supplier_reference": {
"booking_id": "01aa00bb11cc22dd33ee44ff55667781",
"confirmation_number": "PRV0000001",
"provider": "provider_a",
"booking_status": "completed",
"booking_token": "bt1.gAAAAAB..."
},
"reason": "Customer request"
}

Handling the outcome​

statusWhat to do
cancelledFinal. Mark the booking cancelled and store the cancel response (pass it as cancel_response to booking details later).
cancellation_pendingThe provider accepted the request but confirms later. Show "cancellation in progress" and poll booking details (below). Do not send cancel again.
failedThe booking is not cancelled; read error. A booking past its pickup time, already cancelled or completed cannot be cancelled. Check booking details before trying again.
unknownThe provider did not answer in time (cancel_outcome_unknown). Check booking details; cancel again only if the booking is still confirmed or pending.

A timeout or 5xx also leaves the result unknown: check booking details first. Cancelling a booking that we have already cancelled returns the stored response (Idempotent-Replayed: true) without contacting the provider again.

Pending cancellations​

Some providers accept cancellations asynchronously: cancel answers cancellation_pending with cancelled: false. It normally completes within minutes.

  1. Call booking details with supplier_reference (and the cancel_response you received).
  2. Repeat every 2 to 5 minutes until booking_details.booking.status is cancelled.
  3. Then read booking_details.cancellation for cancelled_at and the refund.
  4. Still pending after one hour? Contact support with the booking reference.

Refunds​

The refund we report is information: it does not move money. Settle refunds according to your agreement with Pathfndr. Refunds are always reported in the currency of the booking.

refund_sourceHow the amount is determined
supplierReported by the provider: the amount paid minus any non-refundable part under the policy
policy_estimateComputed from the free-cancellation deadline when the provider reports no amount: full refund before the deadline, 0 after. refund_estimated is true.
nullNo amount reported and no deadline known. Use the offer's cancellation.policy_text.

The deadline is pickup-local (free cancellation until N hours before pickup, in the pickup's time zone). booking_details.cancellation.free_cancellation_until shows it with its UTC offset.

200 OK, refund estimated from the policy
{
"status": "cancelled",
"cancelled": true,
"refund_amount": 400.0,
"currency": "EUR",
"refund_source": "policy_estimate",
"refund_estimated": true,
"cancelled_at": "2026-10-23T06:37:22+00:00",
"cancelled_at_source": "tp_cancel",
"error": null
}
200 OK, cancellation pending
{
"status": "cancellation_pending",
"cancelled": false,
"refund_amount": null,
"currency": null,
"refund_source": null,
"refund_estimated": false,
"cancelled_at": null,
"cancelled_at_source": null,
"error": null
}

Round trips and multi-leg bookings​

Each leg is a separate booking with its own supplier_reference: cancel each leg separately. A round trip booked as one round_trip offer is cancelled as a whole.