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.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"SafarAPI","description":"Developer documentation for the SafarAPI partner channel — quote, book and settle Moroccan adventures from your app.","colors":{"primary":"#f2460d","light":"#fb923c","dark":"#c2410c"},"logo":{"light":"https://mintcdn.com/safariat/uq0i7jK0LmN_yZ-e/logo/safarapi-light.svg?fit=max\u0026auto=format\u0026n=uq0i7jK0LmN_yZ-e\u0026q=85\u0026s=6e54d448368f1737309eebb08e5e571c","dark":"https://mintcdn.com/safariat/uq0i7jK0LmN_yZ-e/logo/safarapi-dark.svg?fit=max\u0026auto=format\u0026n=uq0i7jK0LmN_yZ-e\u0026q=85\u0026s=007f52ec9befa6071011db06b432b61d"},"favicon":"https://mintcdn.com/safariat/uq0i7jK0LmN_yZ-e/favicon.svg?fit=max\u0026auto=format\u0026n=uq0i7jK0LmN_yZ-e\u0026q=85\u0026s=a5d5d7ecbe37e9205bda58ca868f2853","api":{"playground":{"display":"interactive","proxy":true}},"navbar":{"links":[{"href":"/status","label":"Status"},{"href":"https://console.safarapi.com","label":"Console"}],"primary":{"type":"button","label":"Get sandbox access","href":"https://console.safarapi.com/signup"}},"footer":{"socials":{"website":"https://safarapi.com","linkedin":"https://www.linkedin.com/company/safarapi"}},"search":{"prompt":"Search the SafarAPI docs — quotes, bookings, webhooks, settlements"},"seo":{"metatags":{"og:title":"SafarAPI — Morocco travel API for banks \u0026 fintechs","og:description":"Quote, book and settle curated Moroccan travel from your banking app. Sandbox in minutes, production in 7 days.","og:type":"website"},"indexing":"navigable"},"fonts":{"heading":{"family":"Space Grotesk"},"body":{"family":"Inter"}},"styling":{"eyebrows":"section","codeblocks":{"theme":"github-dark-dimmed"},"latex":false},"errors":{"404":{"redirect":false,"title":"Page not found","description":"This page does not exist. Start from the [welcome guide](/introduction/welcome), the [quickstart](/introduction/quickstart), or the [API reference](/api-reference/openapi)."}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"safariat","hasAudioNarration":false,"actualSubdomain":"safariat","customDomains":["developers.safarapi.com"],"gitSource":{"type":"github","owner":"adnanahouzi","repo":"maroc-voyages-r-v-s","deployBranch":"main","contentDirectory":"docs-portal","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a9c766b0d95020accd6ba30","collectionId":"ffbff38d-bd54-4930-96e6-24689d9a11de","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6a9c766b0d95020accd6ba30"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a9c766b0d95020accd6ba30","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API Reference","count":67},{"language":"default","tag":"Endpoints","count":58},{"language":"default","tag":"Guides","count":22},{"language":"default","tag":"API concepts","count":10},{"language":"default","tag":"Catalog","count":8},{"language":"default","tag":"Webhooks","count":7},{"language":"default","tag":"Bookings","count":6},{"language":"default","tag":"Dashboard","count":5},{"language":"default","tag":"Settlements","count":5},{"language":"default","tag":"Introduction","count":4}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":":root{--safarapi-ink: #1a1a1a;--safarapi-rule: #ececec;--safarapi-accent: #f2460d}.dark{--safarapi-ink: #ededed;--safarapi-rule: #2a2a2a;--safarapi-accent: #fb923c}body{-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}main p,main li{line-height:1.68}main h2{margin-top:2.5rem;letter-spacing:-0.01em}main h3{margin-top:1.75rem}main a:not([class]){color:var(--safarapi-accent);text-decoration:none;border-bottom:1px solid transparent;transition:border-color 120ms ease}main a:not([class]):hover{border-bottom-color:currentColor}pre,code{border:1px solid var(--safarapi-rule);border-radius:6px}pre{box-shadow:none}table{border-collapse:collapse}table th,table td{border-color:var(--safarapi-rule)}a:focus-visible,button:focus-visible{outline:2px solid var(--safarapi-accent);outline-offset:2px}"}],"page":{"pagePath":"api-reference/settlements/settlement-detail-with-lines","slug":"/api-reference/settlements/settlement-detail-with-lines","pageMetadata":{"title":"Settlement detail (with lines)","description":"One settlement with its per-line breakdown (bookings, refunds, adjustments). `net_due = bookings_total − refunds_total + adjustments_total`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /settlements/{id}","href":"/api-reference/settlements/settlement-detail-with-lines","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"One settlement with its per-line breakdown (bookings, refunds, adjustments). \", _jsx(_components.code, {\n children: \"net_due = bookings_total − refunds_total + adjustments_total\"\n }), \".\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"codeStyling":{"theme":"github-dark-dimmed"},"config":{},"pageMetadata":{"title":"Settlement detail (with lines)","description":"One settlement with its per-line breakdown (bookings, refunds, adjustments). `net_due = bookings_total − refunds_total + adjustments_total`.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /settlements/{id}","href":"/api-reference/settlements/settlement-detail-with-lines","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/safariat/f751755c840beb5a/trust/tools/generate-cobranded-pdf.js"],"openApiReferenceData":{"operation":{"tags":["Settlements"],"operationId":"getSettlement","summary":"Settlement detail (with lines)","description":"One settlement with its per-line breakdown (bookings, refunds, adjustments). `net_due = bookings_total − refunds_total + adjustments_total`.","parameters":["ff5dbead-0580-4b42-97df-d94eda46fabe"],"responses":{"200":"d2879c18-5788-4ab5-9315-e046328b21d5","401":"5d72793d-c174-4b5b-aa87-bbdc65781c34","404":"d9582140-1daf-411f-a56b-ce89c82cfc58","429":"901671dd-185a-4cd5-8aee-53faf3e8d596"},"method":"get","type":"path","servers":["bef6bbb6-8b53-47c4-b0bd-53ed06e38170"],"security":["509b5ed1-5a9c-40f6-a981-6928a3ac2aa3"],"path":"/settlements/{id}","baseUrlOptions":["https://api.safarapi.com/api/partner/v1"],"title":"Settlement detail (with lines)","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"ff5dbead-0580-4b42-97df-d94eda46fabe":{"in":"path","name":"id","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"description":"Settlement UUID. List `GET /settlements` first and use a returned id; sandbox settlements are issued by the monthly job, not pre-seeded.","uniqueKey":"","typeLabel":"string\u003cuuid>"},"example":"0a9f8e7d-6c5b-4a3f-8e2d-1c0b9a8f7e6d","description":"Settlement UUID. List `GET /settlements` first and use a returned id; sandbox settlements are issued by the monthly job, not pre-seeded."}},"responses":{"d2879c18-5788-4ab5-9315-e046328b21d5":{"description":"Detailed settlement","content":{"application/json":{"schema":{"type":"object","required":["id","period_start","period_end","status","net_due","currency"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"period_start":{"type":"string","format":"date","isRequired":true,"uniqueKey":"period_start","typeLabel":"string\u003cdate>"},"period_end":{"type":"string","format":"date","isRequired":true,"uniqueKey":"period_end","typeLabel":"string\u003cdate>"},"status":{"type":"string","enum":["DRAFT","ISSUED","PAID","OVERDUE","DISPUTED","CANCELLED"],"description":"- `DRAFT`: generated, under Safariat admin review, not visible to the bank.\n- `ISSUED`: issued, PDF invoice available, payment expected.\n- `PAID`: transfer received, marked by a Safariat admin.\n- `OVERDUE`: past the due date without payment.\n- `DISPUTED`: the bank disputes it, blocking future issuances.\n- `CANCELLED`: administrative cancellation (exception).\n","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"net_due":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"string","pattern":"^-?\\d+\\.\\d{2}$","description":"Amount as a decimal string with 2 decimals to preserve precision.","example":"3200.00","isRequired":true,"uniqueKey":"net_due.amount","typeLabel":"string"},"currency":{"type":"string","enum":["MAD"],"description":"Currency — MAD only in V1.","example":"MAD","isRequired":true,"uniqueKey":"net_due.currency","typeLabel":"enum\u003cstring>"}},"description":"bookings_total − refunds_total + adjustments_total","isRequired":true,"uniqueKey":"net_due","typeLabel":"object"},"currency":{"type":"string","enum":["MAD"],"isRequired":true,"uniqueKey":"currency","typeLabel":"enum\u003cstring>"},"invoice_number":{"oneOf":[{"type":"string","description":"INV-PRT-\u003cyear>-\u003csequence> in live, INV-PRT-TEST-\u003cyear>-\u003csequence> in sandbox.","example":"INV-PRT-2026-000042","uniqueKey":"invoice_number.oneOf.0","typeLabel":"string"},{"type":"null","description":"INV-PRT-\u003cyear>-\u003csequence> in live, INV-PRT-TEST-\u003cyear>-\u003csequence> in sandbox.","example":"INV-PRT-2026-000042","uniqueKey":"invoice_number.oneOf.1","typeLabel":"null"}],"uniqueKey":"invoice_number","typeLabel":"string | null"},"bookings_count":{"type":"integer","uniqueKey":"bookings_count","typeLabel":"integer"},"refunds_count":{"type":"integer","uniqueKey":"refunds_count","typeLabel":"integer"},"bookings_total":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"string","pattern":"^-?\\d+\\.\\d{2}$","description":"Amount as a decimal string with 2 decimals to preserve precision.","example":"3200.00","isRequired":true,"uniqueKey":"bookings_total.amount","typeLabel":"string"},"currency":{"type":"string","enum":["MAD"],"description":"Currency — MAD only in V1.","example":"MAD","isRequired":true,"uniqueKey":"bookings_total.currency","typeLabel":"enum\u003cstring>"}},"uniqueKey":"bookings_total","typeLabel":"object"},"refunds_total":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"string","pattern":"^-?\\d+\\.\\d{2}$","description":"Amount as a decimal string with 2 decimals to preserve precision.","example":"3200.00","isRequired":true,"uniqueKey":"refunds_total.amount","typeLabel":"string"},"currency":{"type":"string","enum":["MAD"],"description":"Currency — MAD only in V1.","example":"MAD","isRequired":true,"uniqueKey":"refunds_total.currency","typeLabel":"enum\u003cstring>"}},"uniqueKey":"refunds_total","typeLabel":"object"},"adjustments_total":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"string","pattern":"^-?\\d+\\.\\d{2}$","description":"Amount as a decimal string with 2 decimals to preserve precision.","example":"3200.00","isRequired":true,"uniqueKey":"adjustments_total.amount","typeLabel":"string"},"currency":{"type":"string","enum":["MAD"],"description":"Currency — MAD only in V1.","example":"MAD","isRequired":true,"uniqueKey":"adjustments_total.currency","typeLabel":"enum\u003cstring>"}},"uniqueKey":"adjustments_total","typeLabel":"object"},"issued_at":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"issued_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"issued_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"issued_at","typeLabel":"string\u003cdate-time> | null"},"due_at":{"oneOf":[{"type":"string","format":"date","uniqueKey":"due_at.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","format":"date","uniqueKey":"due_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"due_at","typeLabel":"string\u003cdate> | null"},"paid_at":{"oneOf":[{"type":"string","format":"date-time","uniqueKey":"paid_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","uniqueKey":"paid_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"paid_at","typeLabel":"string\u003cdate-time> | null"},"invoice_pdf_url":{"oneOf":[{"type":"string","format":"uri","description":"Pre-signed URL to the PDF (null if DRAFT).","uniqueKey":"invoice_pdf_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Pre-signed URL to the PDF (null if DRAFT).","uniqueKey":"invoice_pdf_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"invoice_pdf_url","typeLabel":"string\u003curi> | null"},"lines":{"type":"array","items":{"type":"object","required":["booking_number","line_type","amount","occurred_at"],"properties":{"booking_number":{"type":"string","isRequired":true,"uniqueKey":"lines.items.[INDEX].booking_number","typeLabel":"string"},"line_type":{"type":"string","enum":["BOOKING","REFUND","ADJUSTMENT"],"isRequired":true,"uniqueKey":"lines.items.[INDEX].line_type","typeLabel":"enum\u003cstring>"},"amount":{"type":"object","required":["amount","currency"],"properties":{"amount":{"type":"string","pattern":"^-?\\d+\\.\\d{2}$","description":"Amount as a decimal string with 2 decimals to preserve precision.","example":"3200.00","isRequired":true,"uniqueKey":"lines.items.[INDEX].amount.amount","typeLabel":"string"},"currency":{"type":"string","enum":["MAD"],"description":"Currency — MAD only in V1.","example":"MAD","isRequired":true,"uniqueKey":"lines.items.[INDEX].amount.currency","typeLabel":"enum\u003cstring>"}},"description":"Positive for BOOKING / ADJUSTMENT+, negative for REFUND / ADJUSTMENT−.","isRequired":true,"uniqueKey":"lines.items.[INDEX].amount","typeLabel":"object"},"occurred_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"lines.items.[INDEX].occurred_at","typeLabel":"string\u003cdate-time>"},"description":{"oneOf":[{"type":"string","uniqueKey":"lines.items.[INDEX].description.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"lines.items.[INDEX].description.oneOf.1","typeLabel":"null"}],"uniqueKey":"lines.items.[INDEX].description","typeLabel":"string | null"}},"uniqueKey":"lines.items.[INDEX]","typeLabel":"object"},"uniqueKey":"lines","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"example":{"id":"0a9f8e7d-6c5b-4a3f-8e2d-1c0b9a8f7e6d","invoice_number":"INV-PRT-2026-000042","period_start":"2026-07-01","period_end":"2026-07-31","status":"ISSUED","bookings_count":1,"refunds_count":0,"bookings_total":{"amount":"5400.00","currency":"MAD"},"refunds_total":{"amount":"0.00","currency":"MAD"},"adjustments_total":{"amount":"0.00","currency":"MAD"},"net_due":{"amount":"5400.00","currency":"MAD"},"currency":"MAD","issued_at":"2026-08-01T06:00:00Z","due_at":"2026-08-31","paid_at":null,"invoice_pdf_url":"https://placehold.co/600x400?text=DEMO","lines":[{"booking_number":"MV-AB7X92","line_type":"BOOKING","amount":{"amount":"5400.00","currency":"MAD"},"occurred_at":"2026-07-12T10:05:00Z","description":"[DEMO] 3-day Sahara desert circuit from Marrakech — Comfort"}]},"examples":{"Example":{"title":"Example","value":{"id":"0a9f8e7d-6c5b-4a3f-8e2d-1c0b9a8f7e6d","invoice_number":"INV-PRT-2026-000042","period_start":"2026-07-01","period_end":"2026-07-31","status":"ISSUED","bookings_count":1,"refunds_count":0,"bookings_total":{"amount":"5400.00","currency":"MAD"},"refunds_total":{"amount":"0.00","currency":"MAD"},"adjustments_total":{"amount":"0.00","currency":"MAD"},"net_due":{"amount":"5400.00","currency":"MAD"},"currency":"MAD","issued_at":"2026-08-01T06:00:00Z","due_at":"2026-08-31","paid_at":null,"invoice_pdf_url":"https://placehold.co/600x400?text=DEMO","lines":[{"booking_number":"MV-AB7X92","line_type":"BOOKING","amount":{"amount":"5400.00","currency":"MAD"},"occurred_at":"2026-07-12T10:05:00Z","description":"[DEMO] 3-day Sahara desert circuit from Marrakech — Comfort"}]}}},"exampleType":"examples"}},"exampleType":"examples"},"5d72793d-c174-4b5b-aa87-bbdc65781c34":{"description":"API key missing, invalid, expired, or incorrect HMAC signature.","content":{"application/json":{"schema":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string","description":"Stable, documented i18n code. Form `domain.subdomain.detail`\n(e.g. `payment.amount.mismatch`, `auth.api_key.invalid`).\n","example":"validation.required.field","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"English message (for bank logs). API errors are never localized on the Safariat side.","example":"Field 'rate_pack_id' is required.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","description":"Unique request ID on the Safariat side.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"details":{"type":"object","description":"Optional structured details (offending field, expected value, etc.).","additionalProperties":true,"uniqueKey":"details","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"missing":{"title":"missing","value":{"code":"auth.api_key.missing","message":"Authorization header is required.","request_id":"01HXY2ZRPM3R8K9PSBTRQYNFHC"}},"invalid":{"title":"invalid","value":{"code":"auth.api_key.invalid","message":"The provided API key is invalid or has been revoked.","request_id":"01HXY2ZRPM3R8K9PSBTRQYNFHC"}},"signatureInvalid":{"title":"signatureInvalid","value":{"code":"auth.signature.invalid","message":"HMAC signature does not match.","request_id":"01HXY2ZRPM3R8K9PSBTRQYNFHC"}},"timestampSkew":{"title":"timestampSkew","value":{"code":"auth.timestamp.skew","message":"Timestamp is more than 5 minutes off server time.","request_id":"01HXY2ZRPM3R8K9PSBTRQYNFHC"}}},"exampleType":"examples"}},"exampleType":"examples"},"d9582140-1daf-411f-a56b-ce89c82cfc58":{"description":"Resource does not exist or is inaccessible for this partner.","content":{"application/json":{"schema":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string","description":"Stable, documented i18n code. Form `domain.subdomain.detail`\n(e.g. `payment.amount.mismatch`, `auth.api_key.invalid`).\n","example":"validation.required.field","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"English message (for bank logs). API errors are never localized on the Safariat side.","example":"Field 'rate_pack_id' is required.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","description":"Unique request ID on the Safariat side.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"details":{"type":"object","description":"Optional structured details (offending field, expected value, etc.).","additionalProperties":true,"uniqueKey":"details","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"validation.required.field","message":"Field 'rate_pack_id' is required.","request_id":"\u003cstring>","details":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"901671dd-185a-4cd5-8aee-53faf3e8d596":{"description":"Rate limit exceeded for the current key.","headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds to wait before the next attempt (RFC 7231)."},"X-RateLimit-Limit":{"schema":{"type":"integer"},"description":"Request limit per minute for the current key."},"X-RateLimit-Remaining":{"schema":{"type":"integer"},"description":"Requests remaining in the current window."},"X-RateLimit-Reset":{"schema":{"type":"integer","format":"int64"},"description":"Unix timestamp (s) at which the window resets."}},"content":{"application/json":{"schema":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string","description":"Stable, documented i18n code. Form `domain.subdomain.detail`\n(e.g. `payment.amount.mismatch`, `auth.api_key.invalid`).\n","example":"validation.required.field","isRequired":true,"uniqueKey":"code","typeLabel":"string"},"message":{"type":"string","description":"English message (for bank logs). API errors are never localized on the Safariat side.","example":"Field 'rate_pack_id' is required.","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"request_id":{"type":"string","description":"Unique request ID on the Safariat side.","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"details":{"type":"object","description":"Optional structured details (offending field, expected value, etc.).","additionalProperties":true,"uniqueKey":"details","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"code":"rate_limit.exceeded","message":"Rate limit exceeded for this API key.","request_id":"01HXY2ZRPM3R8K9PSBTRQYNFHC"},"examples":{"Example":{"title":"Example","value":{"code":"rate_limit.exceeded","message":"Rate limit exceeded for this API key.","request_id":"01HXY2ZRPM3R8K9PSBTRQYNFHC"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"509b5ed1-5a9c-40f6-a981-6928a3ac2aa3":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"sk_live_\u003cprefix>_\u003csecret> or sk_test_\u003cprefix>_\u003csecret>","x-default":"sk_test_DEMO0000_replace_with_your_sandbox_key","description":"API key authentication. Issued by the Safariat admin or via the partner portal.\nThe secret is shown only once at generation.\n\nProduction `sk_live_*` keys must additionally sign every write request\n(`POST`/`PUT`/`DELETE`) with the `X-Timestamp` and `X-Signature` headers.\nSandbox `sk_test_*` keys are exempt from request signing: `X-Signature` and\n`X-Timestamp` are not required for writes in the sandbox (so the developer-portal\n\"Try it\" playground works end to end). The `Idempotency-Key` header remains\nrequired on writes in both environments.\n","scopes":[]}}},"servers":{"bef6bbb6-8b53-47c4-b0bd-53ed06e38170":{"url":"https://api.safarapi.com/api/partner/v1","description":"Production and sandbox share this host. The environment is selected by the API key prefix: sk_live_ targets production, sk_test_ targets the sandbox."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"sk_live_\u003cprefix>_\u003csecret> or sk_test_\u003cprefix>_\u003csecret>","x-default":"sk_test_DEMO0000_replace_with_your_sandbox_key","description":"API key authentication. Issued by the Safariat admin or via the partner portal.\nThe secret is shown only once at generation.\n\nProduction `sk_live_*` keys must additionally sign every write request\n(`POST`/`PUT`/`DELETE`) with the `X-Timestamp` and `X-Signature` headers.\nSandbox `sk_test_*` keys are exempt from request signing: `X-Signature` and\n`X-Timestamp` are not required for writes in the sandbox (so the developer-portal\n\"Try it\" playground works end to end). The `Idempotency-Key` header remains\nrequired on writes in both environments.\n","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key authentication. Issued by the Safariat admin or via the partner portal.\nThe secret is shown only once at generation.\n\nProduction `sk_live_*` keys must additionally sign every write request\n(`POST`/`PUT`/`DELETE`) with the `X-Timestamp` and `X-Signature` headers.\nSandbox `sk_test_*` keys are exempt from request signing: `X-Signature` and\n`X-Timestamp` are not required for writes in the sandbox (so the developer-portal\n\"Try it\" playground works end to end). The `Idempotency-Key` header remains\nrequired on writes in both environments.\n","format":"bearer","default":"sk_test_DEMO0000_replace_with_your_sandbox_key","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"safariat","siteName":"SafarAPI","title":"SafarAPI — Morocco travel API for banks \u0026 fintechs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-05T20:07:21.088Z","originalFileLocation":"api-reference/settlements/settlement-detail-with-lines.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"One settlement with its per-line breakdown (bookings, refunds, adjustments). net_due = bookings_total − refunds_total + adjustments_total.\">\u003cmeta data-mint-head name=\"application-name\" content=\"SafarAPI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/safariat/edKFf_9gmlxKUwaY/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/safariat/edKFf_9gmlxKUwaY/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/safariat/edKFf_9gmlxKUwaY/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/safariat/edKFf_9gmlxKUwaY/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/safariat/edKFf_9gmlxKUwaY/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/safariat/edKFf_9gmlxKUwaY/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/safariat/edKFf_9gmlxKUwaY/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/safariat/edKFf_9gmlxKUwaY/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/safariat/edKFf_9gmlxKUwaY/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"SafarAPI — Morocco travel API for banks \u0026amp; fintechs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Quote, book and settle curated Moroccan travel from your banking app. Sandbox in minutes, production in 7 days.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"SafarAPI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.safarapi.com/api-reference/settlements/settlement-detail-with-lines\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://safariat.mintlify.site/_mintlify/api/og/v2?division=Settlements\u0026amp;title=Settlement+detail+%28with+lines%29\u0026amp;description=One+settlement+with+its+per-line+breakdown+%28bookings%2C+refunds%2C+adjustments%29.+%60net_due+%3D+bookings_total+%E2%88%92+refunds_total+%2B+adjustments_total%60.\u0026amp;theme=3b8c95b43b12f994ae542965\u0026amp;signature=62536aae03c970ceff67057455efd749928a9947375accb2d69fd8432c64c1ae\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"SafarAPI — Morocco travel API for banks \u0026amp; fintechs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Quote, book and settle curated Moroccan travel from your banking app. Sandbox in minutes, production in 7 days.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://safariat.mintlify.site/_mintlify/api/og/v2?division=Settlements\u0026amp;title=Settlement+detail+%28with+lines%29\u0026amp;description=One+settlement+with+its+per-line+breakdown+%28bookings%2C+refunds%2C+adjustments%29.+%60net_due+%3D+bookings_total+%E2%88%92+refunds_total+%2B+adjustments_total%60.\u0026amp;theme=3b8c95b43b12f994ae542965\u0026amp;signature=62536aae03c970ceff67057455efd749928a9947375accb2d69fd8432c64c1ae\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/safariat/edKFf_9gmlxKUwaY/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"SafarAPI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#f2460d\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.safarapi.com/api-reference/settlements/settlement-detail-with-lines\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/settlements/settlement-detail-with-lines.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.safarapi.com/#organization\",\"name\":\"SafarAPI\",\"url\":\"https://developers.safarapi.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/safariat/uq0i7jK0LmN_yZ-e/logo/safarapi-light.svg?fit=max\u0026auto=format\u0026n=uq0i7jK0LmN_yZ-e\u0026q=85\u0026s=6e54d448368f1737309eebb08e5e571c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.safarapi.com#website\",\"name\":\"SafarAPI\",\"url\":\"https://developers.safarapi.com\",\"publisher\":{\"@id\":\"https://developers.safarapi.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.safarapi.com/api-reference/settlements/settlement-detail-with-lines#webpage\",\"url\":\"https://developers.safarapi.com/api-reference/settlements/settlement-detail-with-lines\",\"name\":\"Settlement detail (with lines)\",\"description\":\"One settlement with its per-line breakdown (bookings, refunds, adjustments). net_due = bookings_total − refunds_total + adjustments_total.\",\"dateModified\":\"2026-09-05T20:07:21.088Z\",\"isPartOf\":{\"@id\":\"https://developers.safarapi.com#website\"},\"breadcrumb\":{\"@id\":\"https://developers.safarapi.com/api-reference/settlements/settlement-detail-with-lines#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.safarapi.com/api-reference/settlements/settlement-detail-with-lines#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://developers.safarapi.com/api-reference/meta/service-status\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Settlements\",\"item\":\"https://developers.safarapi.com/api-reference/settlements/paginated-list-of-monthly-invoices\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Settlement detail (with lines)\",\"item\":\"https://developers.safarapi.com/api-reference/settlements/settlement-detail-with-lines\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developers.safarapi.com/api-reference/settlements/settlement-detail-with-lines#apireference\",\"headline\":\"Settlement detail (with lines)\",\"name\":\"Settlement detail (with lines)\",\"description\":\"One settlement with its per-line breakdown (bookings, refunds, adjustments). net_due = bookings_total − refunds_total + adjustments_total.\",\"url\":\"https://developers.safarapi.com/api-reference/settlements/settlement-detail-with-lines\",\"mainEntityOfPage\":{\"@id\":\"https://developers.safarapi.com/api-reference/settlements/settlement-detail-with-lines#webpage\"},\"dateModified\":\"2026-09-05T20:07:21.088Z\",\"publisher\":{\"@id\":\"https://developers.safarapi.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.safarapi.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"SafarAPI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"SafarAPI","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/introduction/welcome"}]},{"tab":"API Reference","groups":[{"group":"Using the API","pages":[{"title":"Overview","href":"/api-reference/openapi"},{"title":"SDKs \u0026 tooling","href":"/api-reference/tooling"}]},{"group":"Endpoints","pages":[{"group":"Meta","pages":[{"title":"Service status","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /health","href":"/api-reference/meta/service-status"},{"title":"Read partner configuration","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /me/config","href":"/api-reference/meta/read-partner-configuration"},{"title":"Update the surcharge rate","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /me/config","href":"/api-reference/meta/update-the-surcharge-rate"},{"title":"Current key information","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /me","href":"/api-reference/meta/current-key-information"}]},{"group":"Catalog","pages":[{"title":"List adventure categories","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /categories","href":"/api-reference/catalog/list-adventure-categories"},{"title":"List destinations","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /destinations","href":"/api-reference/catalog/list-destinations"},{"title":"Autocomplete free-text places","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /places/autocomplete","href":"/api-reference/catalog/autocomplete-free-text-places"},{"title":"Resolve a place prediction to coordinates","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /places/details","href":"/api-reference/catalog/resolve-a-place-prediction-to-coordinates"},{"title":"Paginated adventure search","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /adventures","href":"/api-reference/catalog/paginated-adventure-search"},{"title":"Detailed adventure record","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /adventures/{slug}","href":"/api-reference/catalog/detailed-adventure-record"},{"title":"Adventure availability over a period","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /adventures/{slug}/availability","href":"/api-reference/catalog/adventure-availability-over-a-period"},{"title":"Detailed agency record","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /agencies/{id}","href":"/api-reference/catalog/detailed-agency-record"}]},{"group":"Files","pages":[{"title":"Issue a presigned PUT URL to upload a review photo to R2","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /files/presigned-upload","href":"/api-reference/files/issue-a-presigned-put-url-to-upload-a-review-photo-to-r2"}]},{"group":"Reviews","pages":[{"title":"Paginated traveler reviews","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /reviews","href":"/api-reference/reviews/paginated-traveler-reviews"},{"title":"Post a traveler review on behalf of a completed booking","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /reviews","href":"/api-reference/reviews/post-a-traveler-review-on-behalf-of-a-completed-booking"},{"title":"Edit a previously posted review","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /reviews/{id}","href":"/api-reference/reviews/edit-a-previously-posted-review"}]},{"group":"Quotes","pages":[{"title":"List quotes","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /quotes","href":"/api-reference/quotes/list-quotes"},{"title":"Create a price-locked quote","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /quotes","href":"/api-reference/quotes/create-a-price-locked-quote"},{"title":"Retrieve a quote by id","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /quotes/{quote_id}","href":"/api-reference/quotes/retrieve-a-quote-by-id"}]},{"group":"Bookings","pages":[{"title":"Paginated list of the partner's bookings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bookings","href":"/api-reference/bookings/paginated-list-of-the-partners-bookings"},{"title":"Create a booking","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bookings","href":"/api-reference/bookings/create-a-booking"},{"title":"Retrieve a booking","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bookings/{booking_number}","href":"/api-reference/bookings/retrieve-a-booking"},{"title":"Cancel a booking","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /bookings/{booking_number}/cancel","href":"/api-reference/bookings/cancel-a-booking"},{"title":"Preview the cancellation refund","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bookings/{booking_number}/cancellation-quote","href":"/api-reference/bookings/preview-the-cancellation-refund"},{"title":"Retrieve the PDF voucher","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /bookings/{booking_number}/voucher.pdf","href":"/api-reference/bookings/retrieve-the-pdf-voucher"}]},{"group":"Webhooks","pages":[{"title":"List webhook delivery attempts","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /webhooks/deliveries","href":"/api-reference/webhooks/list-webhook-delivery-attempts"},{"title":"Replay a webhook delivery","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /webhooks/deliveries/{id}/replay","href":"/api-reference/webhooks/replay-a-webhook-delivery"},{"title":"List configured webhook endpoints","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /webhooks","href":"/api-reference/webhooks/list-configured-webhook-endpoints"},{"title":"Register a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /webhooks","href":"/api-reference/webhooks/register-a-webhook-endpoint"},{"title":"Retrieve a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /webhooks/{id}","href":"/api-reference/webhooks/retrieve-a-webhook-endpoint"},{"title":"Delete a webhook endpoint","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /webhooks/{id}","href":"/api-reference/webhooks/delete-a-webhook-endpoint"},{"title":"Emit a test event","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /webhooks/{id}/test","href":"/api-reference/webhooks/emit-a-test-event"}]},{"group":"Sandbox","pages":[{"title":"Reset the sandbox dataset","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /sandbox/reset","href":"/api-reference/sandbox/reset-the-sandbox-dataset"}]},{"group":"Settlements","pages":[{"title":"Paginated list of monthly invoices","description":"Monthly settlements issued to your account, newest first. `DRAFT` settlements (under Safariat review) are never returned. See Settlements \u0026 reconciliation for the money model.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /settlements","href":"/api-reference/settlements/paginated-list-of-monthly-invoices"},{"title":"Settlement detail (with lines)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /settlements/{id}","href":"/api-reference/settlements/settlement-detail-with-lines"},{"title":"Invoice PDF (Safariat → partner)","description":"Redirects (302) to a short-lived pre-signed URL for the PDF invoice. Follow the redirect and do not cache the signed URL.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /settlements/{id}/invoice.pdf","href":"/api-reference/settlements/invoice-pdf-safariat-→-partner"},{"title":"Statement of Account CSV (Safariat → partner)","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /settlements/{id}/statement.csv","href":"/api-reference/settlements/statement-of-account-csv-safariat-→-partner"},{"title":"Daily transactions ledger CSV","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /settlements/daily","href":"/api-reference/settlements/daily-transactions-ledger-csv"}]},{"group":"Team","pages":[{"title":"List team members","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /team/members","href":"/api-reference/team/list-team-members"},{"title":"Invite a member","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /team/members","href":"/api-reference/team/invite-a-member"},{"title":"Change a member's role","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /team/members/{user_id}/role","href":"/api-reference/team/change-a-members-role"},{"title":"Remove a member","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /team/members/{user_id}","href":"/api-reference/team/remove-a-member"}]},{"group":"API keys","pages":[{"title":"List API keys for the current partner","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /api-keys","href":"/api-reference/api-keys/list-api-keys-for-the-current-partner"},{"title":"Issue a new API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /api-keys","href":"/api-reference/api-keys/issue-a-new-api-key"},{"title":"Revoke an API key","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /api-keys/{key_id}","href":"/api-reference/api-keys/revoke-an-api-key"}]},{"group":"Audit","pages":[{"title":"List HTTP audit trail for this partner","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /audit-logs","href":"/api-reference/audit/list-http-audit-trail-for-this-partner"}]},{"group":"Dashboard","pages":[{"title":"KPI overview for the Console home","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /dashboard","href":"/api-reference/dashboard/kpi-overview-for-the-console-home"},{"title":"Commercial performance over a period","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /metrics/commercial","href":"/api-reference/dashboard/commercial-performance-over-a-period"},{"title":"How many quotes turn into bookings","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /metrics/quote-funnel","href":"/api-reference/dashboard/how-many-quotes-turn-into-bookings"},{"title":"Travelers leaving soon","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /metrics/departures","href":"/api-reference/dashboard/travelers-leaving-soon"},{"title":"Same commercial figures, as a CSV file","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /metrics/commercial.csv","href":"/api-reference/dashboard/same-commercial-figures-as-a-csv-file"}]},{"group":"API Reference","pages":[{"title":"Booking confirmed echo","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook bookingConfirmed","href":"/api-reference/booking-confirmed-echo"},{"title":"Booking cancelled","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook bookingCancelled","href":"/api-reference/booking-cancelled"},{"title":"Booking completed trip taken","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook bookingCompleted","href":"/api-reference/booking-completed-trip-taken"},{"title":"Monthly invoice available","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook settlementIssued","href":"/api-reference/monthly-invoice-available"},{"title":"Settlement marked paid","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook settlementPaid","href":"/api-reference/settlement-marked-paid"},{"title":"Adventure rate pack became unavailable","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook adventureUnavailable","href":"/api-reference/adventure-rate-pack-became-unavailable"},{"title":"Review hidden restored or deleted by a safariat admin","version":null,"deprecated":null,"openapi":"/api-reference/openapi.yaml webhook reviewModerated","href":"/api-reference/review-hidden-restored-or-deleted-by-a-safariat-admin"}]}]}]}]},"basePath":"","title":"SafarAPI — Morocco travel API for banks \u0026 fintechs","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}