curl --request GET \
--url https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyPreview the cancellation refund
Computes — read-only, no side effect — what cancelling this booking right now would refund: the cancellation tier that applies, the net amount deducted from the next settlement, the indicative gross to refund the customer, and the deadline until which cancellation is still free. Uses the same calculator as POST /bookings/{booking_number}/cancel, so the figures match exactly. Evaluated at the current server time.
curl --request GET \
--url https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.safarapi.com/api/partner/v1/bookings/{booking_number}/cancellation-quote")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyAuthorizations
API key authentication. Issued by the Safariat admin or via the partner portal. The secret is shown only once at generation.
Production sk_live_* keys must additionally sign every write request
(POST/PUT/DELETE) with the X-Timestamp and X-Signature headers.
Sandbox sk_test_* keys are exempt from request signing: X-Signature and
X-Timestamp are not required for writes in the sandbox (so the developer-portal
"Try it" playground works end to end). The Idempotency-Key header remains
required on writes in both environments.
Path Parameters
Safariat booking number (format MV-XXXXXX). In the sandbox, create a booking first (POST /bookings) and use the returned number here.
^MV-[A-Z0-9]{6}$Response
Cancellation quote computed (no change made)
Server time at which the quote was computed.
Show child attributes
Show child attributes
Omitted when no tier matched (full or zero refund applies).
Show child attributes
Show child attributes
Last instant a cancellation still yields the maximum refund tier. null when there is no free-cancellation tier.