net_amount frozen in each quote). This page is the money
model your finance team needs.
The cycle
- Throughout the month you create bookings; each carries a
paid_amount_net. - At month end Safariat aggregates your bookings, refunds, and adjustments into one settlement.
- The settlement moves to
ISSUED; asettlement.issuedwebhook fires and a PDF invoice becomes available. - You pay the
net_dueby bank transfer beforedue_at. - A Safariat admin marks it
PAIDonce the transfer is received.
settlement_id is null until it is invoiced, then points at the
settlement that included it.
Amounts
MAD, 2-decimal
string). SettlementDetail exposes the per-line breakdown:
line_type | Sign | Meaning |
|---|---|---|
BOOKING | positive | Net amount of one booking. |
REFUND | negative | Reversal of a cancelled booking (per its tier). |
ADJUSTMENT | ± | Manual correction by Safariat (rare, always documented). |
Status lifecycle
| Status | Meaning |
|---|---|
DRAFT | Generated, under Safariat admin review. Not visible to you. |
ISSUED | Issued; PDF invoice available; payment expected. |
PAID | Transfer received, marked by a Safariat admin. |
OVERDUE | Past due_at without payment. |
DISPUTED | You disputed it; blocks future issuances until resolved. |
CANCELLED | Administrative cancellation (exception). |
Endpoints
GET /settlements— list (paginated;DRAFTis never returned).GET /settlements/{id}— detail withlines.GET /settlements/{id}/invoice.pdf— redirect to the pre-signed invoice PDF.
Sandbox (
sk_test_*) never issues a settlement — bookings are flagged
test_mode=true. Use the response examples to model
your reconciliation logic, and validate it end to end only against production.