Evaluate the active promotion rules against a cart
DRY-RUN: loads every rule whose validity window contains the current instant, runs them against the cart snapshot you pass, and returns the best NON-CONFLICTING set of outcomes. Writes nothing and does not touch the cart — it answers ‘what would this basket earn automatically?’. Two rules that claim the same SKU conflict, and only the more valuable one survives, so the reply is a selection, not the sum of everything that matched. Use it to preview or verify an offer’s effect on a concrete basket, or to explain a till total; do NOT use it to grant a reduction — POST /v1/checkout/finalize re-computes promotions server-side and is the only thing that makes them real. Cart money is integer cents; applied[].benefitCents is a positive magnitude while discountLines[].amountCents is SIGNED (<= 0) so a breakdown sums straight into a total. Scope gotcha (tracked as solya-pos#943): despite being the till’s read path, this rides the back-office pos.promotion.manage scope, so a plain cashier token holding only pos.checkout.operate is refused 403 at the router gate. In practice pos.promotion.manage is the grant that works here.
POST
/
v1
/
promotions
/
evaluate
Error
A valid request URL is required to generate request examples
Authorization: Bearer <token>. Accepts EITHER a Keycloak access token (scopes-in-token) OR an opaque POS session token; both resolve to the same pos.* scope vocabulary the route guards enforce.
Required range: -9007199254740991 <= x <= 9007199254740991
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Solya POS Docs","description":"Documentation for Solya POS — the Centrale back-office, the Caisse point-of-sale, and the REST API.","colors":{"primary":"#7367F0","light":"#8F85F3","dark":"#675DD8"},"logo":{"light":"https://mintcdn.com/solya-pos/-jF44ACKJ9wNNMCD/images/logo-light.png?fit=max\u0026auto=format\u0026n=-jF44ACKJ9wNNMCD\u0026q=85\u0026s=f4e34e81952858b22c95479dc4bcb8b4","dark":"https://mintcdn.com/solya-pos/-jF44ACKJ9wNNMCD/images/logo-dark.png?fit=max\u0026auto=format\u0026n=-jF44ACKJ9wNNMCD\u0026q=85\u0026s=2e3a7ec3c63e54c6ff549a1afa1a25a0"},"favicon":"https://mintcdn.com/solya-pos/-jF44ACKJ9wNNMCD/images/favicon.svg?fit=max\u0026auto=format\u0026n=-jF44ACKJ9wNNMCD\u0026q=85\u0026s=2bc0fe5039f661a3dc8617855cf55406","navbar":{"links":[{"href":"https://caisse.solya.app","label":"Caisse"},{"href":"https://centrale.solya.app","label":"Centrale"}]},"footer":{"socials":{"website":"https://www.solya.app"}},"styling":{"latex":false},"navigation":{"languages":[{"language":"en","href":"en"},{"language":"fr","href":"fr"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"solya-pos","hasAudioNarration":false,"actualSubdomain":"solya-pos","customDomains":["docs-pos.solya.app"],"gitSource":{"type":"github","owner":"solya-app","repo":"solya-pos","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6a7c0afdf4dde05d267c56a1","collectionId":"3317598b-fb95-4bd6-b828-15039783c77c","liveDeploymentHistoryId":"6a7c0afdf4dde05d267c56a1","schemaVersion":"v3"},"entitlements":{},"buildId":"6a7c0afdf4dde05d267c56a1:success","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"API Reference","count":309},{"language":"default","tag":"Catalogue \u0026 stock","count":124},{"language":"default","tag":"Ventes \u0026 encaissement","count":59},{"language":"default","tag":"Finance","count":52},{"language":"en","tag":"Guides","count":48},{"language":"fr","tag":"Guides","count":48},{"language":"default","tag":"Catalog","count":42},{"language":"default","tag":"Checkout","count":35},{"language":"default","tag":"Système","count":30},{"language":"default","tag":"Network","count":27},{"language":"default","tag":"Procurement","count":26},{"language":"en","tag":"Centrale","count":23},{"language":"fr","tag":"Centrale","count":23},{"language":"default","tag":"Clients \u0026 fidélité","count":21},{"language":"en","tag":"Caisse","count":18},{"language":"fr","tag":"Caisse","count":18},{"language":"en","tag":"Developers","count":10},{"language":"fr","tag":"Développeurs","count":10},{"language":"en","tag":"Get started","count":7},{"language":"fr","tag":"Prise en main","count":7}]},"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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart","slug":"/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart","pageMetadata":{"title":"Evaluate the active promotion rules against a cart","description":"DRY-RUN: loads every rule whose validity window contains the current instant, runs them against the cart snapshot you pass, and returns the best NON-CONFLICTING set of outcomes. Writes nothing and does not touch the cart — it answers 'what would this basket earn automatically?'. Two rules that claim the same SKU conflict, and only the more valuable one survives, so the reply is a selection, not the sum of everything that matched. Use it to preview or verify an offer's effect on a concrete basket, or to explain a till total; do NOT use it to grant a reduction — `POST /v1/checkout/finalize` re-computes promotions server-side and is the only thing that makes them real. Cart money is integer cents; `applied[].benefitCents` is a positive magnitude while `discountLines[].amountCents` is SIGNED (`\u003c= 0`) so a breakdown sums straight into a total. Scope gotcha (tracked as solya-pos#943): despite being the till's read path, this rides the back-office `pos.promotion.manage` scope, so a plain cashier token holding only `pos.checkout.operate` is refused 403 at the router gate. In practice `pos.promotion.manage` is the grant that works here.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/promotions/evaluate","href":"/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart","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: [\"DRY-RUN: loads every rule whose validity window contains the current instant, runs them against the cart snapshot you pass, and returns the best NON-CONFLICTING set of outcomes. Writes nothing and does not touch the cart — it answers ‘what would this basket earn automatically?’. Two rules that claim the same SKU conflict, and only the more valuable one survives, so the reply is a selection, not the sum of everything that matched. Use it to preview or verify an offer’s effect on a concrete basket, or to explain a till total; do NOT use it to grant a reduction — \", _jsx(_components.code, {\n children: \"POST /v1/checkout/finalize\"\n }), \" re-computes promotions server-side and is the only thing that makes them real. Cart money is integer cents; \", _jsx(_components.code, {\n children: \"applied[].benefitCents\"\n }), \" is a positive magnitude while \", _jsx(_components.code, {\n children: \"discountLines[].amountCents\"\n }), \" is SIGNED (\", _jsx(_components.code, {\n children: \"\u003c= 0\"\n }), \") so a breakdown sums straight into a total. Scope gotcha (tracked as solya-pos#943): despite being the till’s read path, this rides the back-office \", _jsx(_components.code, {\n children: \"pos.promotion.manage\"\n }), \" scope, so a plain cashier token holding only \", _jsx(_components.code, {\n children: \"pos.checkout.operate\"\n }), \" is refused 403 at the router gate. In practice \", _jsx(_components.code, {\n children: \"pos.promotion.manage\"\n }), \" is the grant that works here.\"]\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":{"config":{},"pageMetadata":{"title":"Evaluate the active promotion rules against a cart","description":"DRY-RUN: loads every rule whose validity window contains the current instant, runs them against the cart snapshot you pass, and returns the best NON-CONFLICTING set of outcomes. Writes nothing and does not touch the cart — it answers 'what would this basket earn automatically?'. Two rules that claim the same SKU conflict, and only the more valuable one survives, so the reply is a selection, not the sum of everything that matched. Use it to preview or verify an offer's effect on a concrete basket, or to explain a till total; do NOT use it to grant a reduction — `POST /v1/checkout/finalize` re-computes promotions server-side and is the only thing that makes them real. Cart money is integer cents; `applied[].benefitCents` is a positive magnitude while `discountLines[].amountCents` is SIGNED (`\u003c= 0`) so a breakdown sums straight into a total. Scope gotcha (tracked as solya-pos#943): despite being the till's read path, this rides the back-office `pos.promotion.manage` scope, so a plain cashier token holding only `pos.checkout.operate` is refused 403 at the router gate. In practice `pos.promotion.manage` is the grant that works here.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/promotions/evaluate","href":"/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"evaluatePromotions","summary":"Evaluate the active promotion rules against a cart","tags":["Promotions"],"description":"DRY-RUN: loads every rule whose validity window contains the current instant, runs them against the cart snapshot you pass, and returns the best NON-CONFLICTING set of outcomes. Writes nothing and does not touch the cart — it answers 'what would this basket earn automatically?'. Two rules that claim the same SKU conflict, and only the more valuable one survives, so the reply is a selection, not the sum of everything that matched. Use it to preview or verify an offer's effect on a concrete basket, or to explain a till total; do NOT use it to grant a reduction — `POST /v1/checkout/finalize` re-computes promotions server-side and is the only thing that makes them real. Cart money is integer cents; `applied[].benefitCents` is a positive magnitude while `discountLines[].amountCents` is SIGNED (`\u003c= 0`) so a breakdown sums straight into a total. Scope gotcha (tracked as solya-pos#943): despite being the till's read path, this rides the back-office `pos.promotion.manage` scope, so a plain cashier token holding only `pos.checkout.operate` is refused 403 at the router gate. In practice `pos.promotion.manage` is the grant that works here.","requestBody":"acb4d213-4686-437d-82bd-a163e17a4485","security":["628475fe-75e0-4482-919a-bf5846969f1c"],"x-agent-tier":"supported","x-required-permissions":["pos.promotion.manage"],"responses":{"200":"6295868b-97dd-4dfb-b70e-aee4e091cd92","400":"eae8fb3b-efb9-4487-8e8e-b01b16e9e632","401":"7a1859a1-f18e-4620-9571-db2c8e5f0947","403":"c3a11fc4-3ee7-41d9-8ed2-b01cfbfa5fc7","500":"bc98818a-1115-4962-b335-550d68a9a474"},"method":"post","type":"path","servers":["e916e6f6-9ac8-4670-9030-c73027795f70"],"path":"/v1/promotions/evaluate","baseUrlOptions":["/"],"title":"Evaluate the active promotion rules against a cart","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"cart":{"type":"object","properties":{"lines":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"cart.lines.items.[INDEX].id","typeLabel":"string"},"skuId":{"oneOf":[{"type":"string","pattern":"^[0-9a-f]{64}$","isRequired":true,"uniqueKey":"cart.lines.items.[INDEX].skuId.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9a-f]{64}$","isRequired":true,"uniqueKey":"cart.lines.items.[INDEX].skuId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"cart.lines.items.[INDEX].skuId","typeLabel":"string | null"},"quantity":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991,"isRequired":true,"uniqueKey":"cart.lines.items.[INDEX].quantity","typeLabel":"integer"},"unitPrice":{"type":"integer","minimum":0,"maximum":9007199254740991,"isRequired":true,"uniqueKey":"cart.lines.items.[INDEX].unitPrice","typeLabel":"integer"},"vatRate":{"type":"number","minimum":0,"maximum":100,"isRequired":true,"uniqueKey":"cart.lines.items.[INDEX].vatRate","typeLabel":"number"},"free":{"type":"boolean","isRequired":true,"uniqueKey":"cart.lines.items.[INDEX].free","typeLabel":"boolean"}},"required":["id","skuId","quantity","unitPrice","vatRate","free"],"uniqueKey":"cart.lines.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"cart.lines","typeLabel":"object[]"},"freeLineSequence":{"type":"integer","minimum":0,"maximum":9007199254740991,"isRequired":true,"uniqueKey":"cart.freeLineSequence","typeLabel":"integer"}},"required":["lines","freeLineSequence"],"isRequired":true,"uniqueKey":"cart","typeLabel":"object"}},"required":["cart"],"example":{"cart":{"lines":[{"id":"line-1","skuId":"2f0a30932a471a86d885382399c476bc17fde6e613c42a73e2cf6a760fe4f774","quantity":2,"unitPrice":1990,"vatRate":20,"free":false},{"id":"line-2","skuId":"9c1d4b7e0a3f6852cd41e0b7a26f5d98314c7ae60b2f9d51a83c604e7fb21d3a","quantity":1,"unitPrice":1200,"vatRate":20,"free":false}],"freeLineSequence":0}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"cart":{"lines":[{"id":"line-1","skuId":"2f0a30932a471a86d885382399c476bc17fde6e613c42a73e2cf6a760fe4f774","quantity":2,"unitPrice":1990,"vatRate":20,"free":false},{"id":"line-2","skuId":"9c1d4b7e0a3f6852cd41e0b7a26f5d98314c7ae60b2f9d51a83c604e7fb21d3a","quantity":1,"unitPrice":1200,"vatRate":20,"free":false}],"freeLineSequence":0}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"6295868b-97dd-4dfb-b70e-aee4e091cd92":{"description":"The selected non-conflicting outcomes and the total benefit in cents.","content":{"application/json":{"schema":{"type":"object","properties":{"applied":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string","isRequired":true,"uniqueKey":"applied.items.[INDEX].ruleId","typeLabel":"string"},"ruleType":{"type":"string","enum":["bogo","threshold","bundle"],"isRequired":true,"uniqueKey":"applied.items.[INDEX].ruleType","typeLabel":"enum\u003cstring>"},"benefitCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"isRequired":true,"uniqueKey":"applied.items.[INDEX].benefitCents","typeLabel":"integer"},"discountLines":{"type":"array","items":{"type":"object","properties":{"skuId":{"type":"string","isRequired":true,"uniqueKey":"applied.items.[INDEX].discountLines.items.[INDEX].skuId","typeLabel":"string"},"quantity":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"isRequired":true,"uniqueKey":"applied.items.[INDEX].discountLines.items.[INDEX].quantity","typeLabel":"integer"},"amountCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"isRequired":true,"uniqueKey":"applied.items.[INDEX].discountLines.items.[INDEX].amountCents","typeLabel":"integer"}},"required":["skuId","quantity","amountCents"],"additionalProperties":false,"uniqueKey":"applied.items.[INDEX].discountLines.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"applied.items.[INDEX].discountLines","typeLabel":"object[]"},"claimedSkuIds":{"type":"array","items":{"type":"string","uniqueKey":"applied.items.[INDEX].claimedSkuIds.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"applied.items.[INDEX].claimedSkuIds","typeLabel":"string[]"}},"required":["ruleId","ruleType","benefitCents","discountLines","claimedSkuIds"],"additionalProperties":false,"uniqueKey":"applied.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"applied","typeLabel":"object[]"},"totalBenefitCents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"isRequired":true,"uniqueKey":"totalBenefitCents","typeLabel":"integer"}},"required":["applied","totalBenefitCents"],"additionalProperties":false,"description":"The selected non-conflicting outcomes and the total benefit in cents.","example":{"applied":[{"ruleId":"promo-threshold-tshirt","ruleType":"threshold","benefitCents":398,"discountLines":[{"skuId":"2f0a30932a471a86d885382399c476bc17fde6e613c42a73e2cf6a760fe4f774","quantity":2,"amountCents":-398}],"claimedSkuIds":["2f0a30932a471a86d885382399c476bc17fde6e613c42a73e2cf6a760fe4f774"]}],"totalBenefitCents":398},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"applied":[{"ruleId":"promo-threshold-tshirt","ruleType":"threshold","benefitCents":398,"discountLines":[{"skuId":"2f0a30932a471a86d885382399c476bc17fde6e613c42a73e2cf6a760fe4f774","quantity":2,"amountCents":-398}],"claimedSkuIds":["2f0a30932a471a86d885382399c476bc17fde6e613c42a73e2cf6a760fe4f774"]}],"totalBenefitCents":398}}},"exampleType":"generated"}},"exampleType":"generated"},"eae8fb3b-efb9-4487-8e8e-b01b16e9e632":{"description":"The request failed schema validation; `error.fieldErrors` lists the fields.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":false,"description":"A `VALIDATION_FAILED` envelope carrying the offending fields in `fieldErrors`.","properties":{"error":{"type":"object","required":["code","message","statusCode"],"additionalProperties":false,"properties":{"code":{"type":"string","enum":["VALIDATION_FAILED"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"statusCode":{"type":"integer","isRequired":true,"uniqueKey":"error.statusCode","typeLabel":"integer"},"fieldErrors":{"type":"array","description":"One entry per rejected field: the field path and why it was rejected.","items":{"type":"object","required":["field","message"],"additionalProperties":false,"properties":{"field":{"type":"string","description":"Dot-path of the offending field.","isRequired":true,"uniqueKey":"error.fieldErrors.items.[INDEX].field","typeLabel":"string"},"message":{"type":"string","description":"Why the field was rejected.","isRequired":true,"uniqueKey":"error.fieldErrors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"error.fieldErrors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.fieldErrors","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"VALIDATION_FAILED","message":"\u003cstring>","statusCode":123,"fieldErrors":[{"field":"\u003cstring>","message":"\u003cstring>"}]}}}},"exampleType":"generated"}},"exampleType":"generated"},"7a1859a1-f18e-4620-9571-db2c8e5f0947":{"description":"No valid credential was presented — send a bearer token.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":false,"description":"The uniform failure envelope every non-2xx response returns.","properties":{"error":{"type":"object","required":["code","message","statusCode"],"additionalProperties":false,"properties":{"code":{"type":"string","enum":["VALIDATION_FAILED","UNAUTHORIZED","FORBIDDEN","NOT_FOUND","CONFLICT","BUSINESS_RULE_VIOLATION","INTERNAL_ERROR"],"description":"Machine-readable kernel `ResultCode` — branch on this, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation. Safe to surface; never leaks server internals.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"statusCode":{"type":"integer","description":"The HTTP status, mirrored into the body so a client need not read headers.","isRequired":true,"uniqueKey":"error.statusCode","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"VALIDATION_FAILED","message":"\u003cstring>","statusCode":123}}}},"exampleType":"generated"}},"exampleType":"generated"},"c3a11fc4-3ee7-41d9-8ed2-b01cfbfa5fc7":{"description":"The actor is authenticated but lacks the required `pos.*` scope.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":false,"description":"The uniform failure envelope every non-2xx response returns.","properties":{"error":{"type":"object","required":["code","message","statusCode"],"additionalProperties":false,"properties":{"code":{"type":"string","enum":["VALIDATION_FAILED","UNAUTHORIZED","FORBIDDEN","NOT_FOUND","CONFLICT","BUSINESS_RULE_VIOLATION","INTERNAL_ERROR"],"description":"Machine-readable kernel `ResultCode` — branch on this, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation. Safe to surface; never leaks server internals.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"statusCode":{"type":"integer","description":"The HTTP status, mirrored into the body so a client need not read headers.","isRequired":true,"uniqueKey":"error.statusCode","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"VALIDATION_FAILED","message":"\u003cstring>","statusCode":123}}}},"exampleType":"generated"}},"exampleType":"generated"},"bc98818a-1115-4962-b335-550d68a9a474":{"description":"An unexpected server error — safe to retry idempotent requests.","content":{"application/json":{"schema":{"type":"object","required":["error"],"additionalProperties":false,"description":"The uniform failure envelope every non-2xx response returns.","properties":{"error":{"type":"object","required":["code","message","statusCode"],"additionalProperties":false,"properties":{"code":{"type":"string","enum":["VALIDATION_FAILED","UNAUTHORIZED","FORBIDDEN","NOT_FOUND","CONFLICT","BUSINESS_RULE_VIOLATION","INTERNAL_ERROR"],"description":"Machine-readable kernel `ResultCode` — branch on this, not on `message`.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Human-readable explanation. Safe to surface; never leaks server internals.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"statusCode":{"type":"integer","description":"The HTTP status, mirrored into the body so a client need not read headers.","isRequired":true,"uniqueKey":"error.statusCode","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"VALIDATION_FAILED","message":"\u003cstring>","statusCode":123}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"628475fe-75e0-4482-919a-bf5846969f1c":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"`Authorization: Bearer \u003ctoken>`. Accepts EITHER a Keycloak access token (scopes-in-token) OR an opaque POS session token; both resolve to the same `pos.*` scope vocabulary the route guards enforce.","scopes":[]}}},"servers":{"e916e6f6-9ac8-4670-9030-c73027795f70":{"url":"/","description":"The backend, relative to its deployed origin."}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"`Authorization: Bearer \u003ctoken>`. Accepts EITHER a Keycloak access token (scopes-in-token) OR an opaque POS session token; both resolve to the same `pos.*` scope vocabulary the route guards enforce.","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"`Authorization: Bearer \u003ctoken>`. Accepts EITHER a Keycloak access token (scopes-in-token) OR an opaque POS session token; both resolve to the same `pos.*` scope vocabulary the route guards enforce.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"solya-pos","siteName":"Solya POS Docs","title":"Evaluate the active promotion rules against a cart - Solya POS Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart","matchLevel":0},"fr":{"href":"/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart","matchLevel":0}}},"lastModified":"2026-08-12T05:56:33.906Z","originalFileLocation":"api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart.mdx","locale":"en"},"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=\"DRY-RUN: loads every rule whose validity window contains the current instant, runs them against the cart snapshot you pass, and returns the best NON-CONFLICTING set of outcomes. Writes nothing and does not touch the cart — it answers \u0026#x27;what would this basket earn automatically?\u0026#x27;. Two rules that claim the same SKU conflict, and only the more valuable one survives, so the reply is a selection, not the sum of everything that matched. Use it to preview or verify an offer\u0026#x27;s effect on a concrete basket, or to explain a till total; do NOT use it to grant a reduction — POST /v1/checkout/finalize re-computes promotions server-side and is the only thing that makes them real. Cart money is integer cents; applied[].benefitCents is a positive magnitude while discountLines[].amountCents is SIGNED (\u0026lt;= 0) so a breakdown sums straight into a total. Scope gotcha (tracked as solya-pos#943): despite being the till\u0026#x27;s read path, this rides the back-office pos.promotion.manage scope, so a plain cashier token holding only pos.checkout.operate is refused 403 at the router gate. In practice pos.promotion.manage is the grant that works here.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Solya POS Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/solya-pos/bjR54-UDpBaR8quu/_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/solya-pos/bjR54-UDpBaR8quu/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/solya-pos/bjR54-UDpBaR8quu/_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/solya-pos/bjR54-UDpBaR8quu/_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/solya-pos/bjR54-UDpBaR8quu/_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/solya-pos/bjR54-UDpBaR8quu/_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/solya-pos/bjR54-UDpBaR8quu/_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/solya-pos/bjR54-UDpBaR8quu/_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/solya-pos/bjR54-UDpBaR8quu/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Evaluate the active promotion rules against a cart - Solya POS Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"DRY-RUN: loads every rule whose validity window contains the current instant, runs them against the cart snapshot you pass, and returns the best NON-CONFLICTING set of outcomes. Writes nothing and does not touch the cart — it answers \u0026#x27;what would this basket earn automatically?\u0026#x27;. Two rules that claim the same SKU conflict, and only the more valuable one survives, so the reply is a selection, not the sum of everything that matched. Use it to preview or verify an offer\u0026#x27;s effect on a concrete basket, or to explain a till total; do NOT use it to grant a reduction — POST /v1/checkout/finalize re-computes promotions server-side and is the only thing that makes them real. Cart money is integer cents; applied[].benefitCents is a positive magnitude while discountLines[].amountCents is SIGNED (\u0026lt;= 0) so a breakdown sums straight into a total. Scope gotcha (tracked as solya-pos#943): despite being the till\u0026#x27;s read path, this rides the back-office pos.promotion.manage scope, so a plain cashier token holding only pos.checkout.operate is refused 403 at the router gate. In practice pos.promotion.manage is the grant that works here.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Solya POS Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs-pos.solya.app/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://solya-pos.mintlify.app/_mintlify/api/og/v2?division=Promotions\u0026amp;title=Evaluate+the+active+promotion+rules+against+a+cart\u0026amp;description=DRY-RUN%3A+loads+every+rule+whose+validity+window+contains+the+current+instant%2C+runs+them+against+the+cart+snapshot+you+pass%2C+and+returns+the+best+NON-CONFLICTING\u0026amp;theme=d38e9e894d2efabe74a4c74f\u0026amp;signature=6a66b150542fcfe067897c10050717612a940846622ed6ae10cdb5b2de100e48\">\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=\"Evaluate the active promotion rules against a cart - Solya POS Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"DRY-RUN: loads every rule whose validity window contains the current instant, runs them against the cart snapshot you pass, and returns the best NON-CONFLICTING set of outcomes. Writes nothing and does not touch the cart — it answers \u0026#x27;what would this basket earn automatically?\u0026#x27;. Two rules that claim the same SKU conflict, and only the more valuable one survives, so the reply is a selection, not the sum of everything that matched. Use it to preview or verify an offer\u0026#x27;s effect on a concrete basket, or to explain a till total; do NOT use it to grant a reduction — POST /v1/checkout/finalize re-computes promotions server-side and is the only thing that makes them real. Cart money is integer cents; applied[].benefitCents is a positive magnitude while discountLines[].amountCents is SIGNED (\u0026lt;= 0) so a breakdown sums straight into a total. Scope gotcha (tracked as solya-pos#943): despite being the till\u0026#x27;s read path, this rides the back-office pos.promotion.manage scope, so a plain cashier token holding only pos.checkout.operate is refused 403 at the router gate. In practice pos.promotion.manage is the grant that works here.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://solya-pos.mintlify.app/_mintlify/api/og/v2?division=Promotions\u0026amp;title=Evaluate+the+active+promotion+rules+against+a+cart\u0026amp;description=DRY-RUN%3A+loads+every+rule+whose+validity+window+contains+the+current+instant%2C+runs+them+against+the+cart+snapshot+you+pass%2C+and+returns+the+best+NON-CONFLICTING\u0026amp;theme=d38e9e894d2efabe74a4c74f\u0026amp;signature=6a66b150542fcfe067897c10050717612a940846622ed6ae10cdb5b2de100e48\">\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/solya-pos/bjR54-UDpBaR8quu/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Solya POS Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#7367F0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs-pos.solya.app/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs-pos.solya.app/#organization\",\"name\":\"Solya POS Docs\",\"url\":\"https://docs-pos.solya.app\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/solya-pos/-jF44ACKJ9wNNMCD/images/logo-light.png?fit=max\u0026auto=format\u0026n=-jF44ACKJ9wNNMCD\u0026q=85\u0026s=f4e34e81952858b22c95479dc4bcb8b4\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs-pos.solya.app#website\",\"name\":\"Solya POS Docs\",\"url\":\"https://docs-pos.solya.app\",\"publisher\":{\"@id\":\"https://docs-pos.solya.app/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs-pos.solya.app/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart#webpage\",\"url\":\"https://docs-pos.solya.app/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart\",\"name\":\"Evaluate the active promotion rules against a cart\",\"description\":\"DRY-RUN: loads every rule whose validity window contains the current instant, runs them against the cart snapshot you pass, and returns the best NON-CONFLICTING set of outcomes. Writes nothing and does not touch the cart — it answers 'what would this basket earn automatically?'. Two rules that claim the same SKU conflict, and only the more valuable one survives, so the reply is a selection, not the sum of everything that matched. Use it to preview or verify an offer's effect on a concrete basket, or to explain a till total; do NOT use it to grant a reduction — POST /v1/checkout/finalize re-computes promotions server-side and is the only thing that makes them real. Cart money is integer cents; applied[].benefitCents is a positive magnitude while discountLines[].amountCents is SIGNED (\\u003c= 0) so a breakdown sums straight into a total. Scope gotcha (tracked as solya-pos#943): despite being the till's read path, this rides the back-office pos.promotion.manage scope, so a plain cashier token holding only pos.checkout.operate is refused 403 at the router gate. In practice pos.promotion.manage is the grant that works here.\",\"dateModified\":\"2026-08-12T05:56:33.906Z\",\"isPartOf\":{\"@id\":\"https://docs-pos.solya.app#website\"},\"breadcrumb\":{\"@id\":\"https://docs-pos.solya.app/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs-pos.solya.app/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Marketing \u0026 promotions\",\"item\":\"https://docs-pos.solya.app/api-reference/promotions/list-the-coupon-catalogue-code-promo\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Promotions\",\"item\":\"https://docs-pos.solya.app/api-reference/promotions/list-the-coupon-catalogue-code-promo\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Evaluate the active promotion rules against a cart\",\"item\":\"https://docs-pos.solya.app/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs-pos.solya.app/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart#apireference\",\"headline\":\"Evaluate the active promotion rules against a cart\",\"name\":\"Evaluate the active promotion rules against a cart\",\"description\":\"DRY-RUN: loads every rule whose validity window contains the current instant, runs them against the cart snapshot you pass, and returns the best NON-CONFLICTING set of outcomes. Writes nothing and does not touch the cart — it answers 'what would this basket earn automatically?'. Two rules that claim the same SKU conflict, and only the more valuable one survives, so the reply is a selection, not the sum of everything that matched. Use it to preview or verify an offer's effect on a concrete basket, or to explain a till total; do NOT use it to grant a reduction — POST /v1/checkout/finalize re-computes promotions server-side and is the only thing that makes them real. Cart money is integer cents; applied[].benefitCents is a positive magnitude while discountLines[].amountCents is SIGNED (\\u003c= 0) so a breakdown sums straight into a total. Scope gotcha (tracked as solya-pos#943): despite being the till's read path, this rides the back-office pos.promotion.manage scope, so a plain cashier token holding only pos.checkout.operate is refused 403 at the router gate. In practice pos.promotion.manage is the grant that works here.\",\"url\":\"https://docs-pos.solya.app/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart\",\"mainEntityOfPage\":{\"@id\":\"https://docs-pos.solya.app/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart#webpage\"},\"dateModified\":\"2026-08-12T05:56:33.906Z\",\"publisher\":{\"@id\":\"https://docs-pos.solya.app/#organization\"},\"isPartOf\":{\"@id\":\"https://docs-pos.solya.app#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Solya POS Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Solya POS Docs","nav":{"global":null,"languages":[{"language":"en","tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/en"}]},{"tab":"Developers","pages":[{"title":"Developers","href":"/en/developers/overview"}]},{"tab":"API Reference","groups":[{"group":"Ventes \u0026 encaissement","pages":[{"group":"Checkout","pages":[{"title":"List appointments (RDV)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/appointments","href":"/api-reference/checkout/list-appointments-rdv"},{"title":"Book an appointment (RDV)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/appointments","href":"/api-reference/checkout/book-an-appointment-rdv"},{"title":"Get an appointment (RDV) by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/appointments/{appointmentId}","href":"/api-reference/checkout/get-an-appointment-rdv-by-id"},{"title":"Cancel an appointment (RDV)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/appointments/{appointmentId}/cancel","href":"/api-reference/checkout/cancel-an-appointment-rdv"},{"title":"Complete an appointment (RDV)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/appointments/{appointmentId}/complete","href":"/api-reference/checkout/complete-an-appointment-rdv"},{"title":"Confirm an appointment (RDV)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/appointments/{appointmentId}/confirm","href":"/api-reference/checkout/confirm-an-appointment-rdv"},{"title":"Mark an appointment (RDV) as a no-show","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/appointments/{appointmentId}/no-show","href":"/api-reference/checkout/mark-an-appointment-rdv-as-a-no-show"},{"title":"Reschedule an appointment (RDV)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/appointments/{appointmentId}/reschedule","href":"/api-reference/checkout/reschedule-an-appointment-rdv"},{"title":"Finalize a settled sale (encaissement)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/checkout/finalize","href":"/api-reference/checkout/finalize-a-settled-sale-encaissement"},{"title":"List deposits (acomptes)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/deposits","href":"/api-reference/checkout/list-deposits-acomptes"},{"title":"Open a deposit (acompte)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/deposits","href":"/api-reference/checkout/open-a-deposit-acompte"},{"title":"Get a deposit (acompte) by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/deposits/{depositId}","href":"/api-reference/checkout/get-a-deposit-acompte-by-id"},{"title":"Record a deposit payment (versement)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/deposits/{depositId}/payments","href":"/api-reference/checkout/record-a-deposit-payment-versement"},{"title":"Settle a deposit (acompte)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/deposits/{depositId}/settle","href":"/api-reference/checkout/settle-a-deposit-acompte"},{"title":"List open parked sales","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/parked","href":"/api-reference/checkout/list-open-parked-sales"},{"title":"Park a cart","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/parked","href":"/api-reference/checkout/park-a-cart"},{"title":"Get a parked sale by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/parked/{parkedSaleId}","href":"/api-reference/checkout/get-a-parked-sale-by-id"},{"title":"Drop a parked sale","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/parked/{parkedSaleId}","href":"/api-reference/checkout/drop-a-parked-sale"},{"title":"Resume a parked sale","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/parked/{parkedSaleId}/resume","href":"/api-reference/checkout/resume-a-parked-sale"},{"title":"List quotes","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/quotes","href":"/api-reference/checkout/list-quotes"},{"title":"Create a quote (devis)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/quotes","href":"/api-reference/checkout/create-a-quote-devis"},{"title":"Get a quote by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/quotes/{quoteId}","href":"/api-reference/checkout/get-a-quote-by-id"},{"title":"Update a quote","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/quotes/{quoteId}","href":"/api-reference/checkout/update-a-quote"},{"title":"Accept a quote","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/quotes/{quoteId}/accept","href":"/api-reference/checkout/accept-a-quote"},{"title":"Cancel a quote","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/quotes/{quoteId}/cancel","href":"/api-reference/checkout/cancel-a-quote"},{"title":"Send a quote","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/quotes/{quoteId}/send","href":"/api-reference/checkout/send-a-quote"},{"title":"List in-store holds","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/reservations","href":"/api-reference/checkout/list-in-store-holds"},{"title":"Place an in-store hold (réservation)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/reservations","href":"/api-reference/checkout/place-an-in-store-hold-réservation"},{"title":"Get a reservation by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/reservations/{reservationId}","href":"/api-reference/checkout/get-a-reservation-by-id"},{"title":"Cancel a hold","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/reservations/{reservationId}/cancel","href":"/api-reference/checkout/cancel-a-hold"},{"title":"Fulfil a hold","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/reservations/{reservationId}/fulfil","href":"/api-reference/checkout/fulfil-a-hold"},{"title":"Open a register session (session de caisse)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/sessions","href":"/api-reference/checkout/open-a-register-session-session-de-caisse"},{"title":"Get a register session (session de caisse) by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/sessions/{sessionId}","href":"/api-reference/checkout/get-a-register-session-session-de-caisse-by-id"},{"title":"Close a register session (clôture de caisse)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/sessions/{sessionId}/close","href":"/api-reference/checkout/close-a-register-session-clôture-de-caisse"},{"title":"Record a cash movement (mouvement de caisse) on a session","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/sessions/{sessionId}/movements","href":"/api-reference/checkout/record-a-cash-movement-mouvement-de-caisse-on-a-session"}]},{"group":"Orders","pages":[{"title":"List orders (commandes)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/orders","href":"/api-reference/orders/list-orders-commandes"},{"title":"Capture an order (commande)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/orders","href":"/api-reference/orders/capture-an-order-commande"},{"title":"Get an order by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/orders/{id}","href":"/api-reference/orders/get-an-order-by-id"},{"title":"Advance an order","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/orders/{id}/advance","href":"/api-reference/orders/advance-an-order"},{"title":"Revert an order one step","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/orders/{id}/revert","href":"/api-reference/orders/revert-an-order-one-step"},{"title":"Route a captured order","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/orders/{id}/route","href":"/api-reference/orders/route-a-captured-order"}]},{"group":"Returns","pages":[{"title":"How much is still refundable on an acompte / caution","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/refunds/refundable/{subjectKind}/{subjectId}","href":"/api-reference/returns/how-much-is-still-refundable-on-an-acompte-caution"},{"title":"Refund an acompte / caution as store credit (avoir)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/refunds/store-credit","href":"/api-reference/returns/refund-an-acompte-caution-as-store-credit-avoir"},{"title":"Get a store-credit refund by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/refunds/{refundId}","href":"/api-reference/returns/get-a-store-credit-refund-by-id"},{"title":"List processed returns (retours)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/returns","href":"/api-reference/returns/list-processed-returns-retours"},{"title":"Process a return (retour / avoir)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/returns","href":"/api-reference/returns/process-a-return-retour-avoir"},{"title":"Get a processed return by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/returns/{id}","href":"/api-reference/returns/get-a-processed-return-by-id"},{"title":"Get a return's cash-drawer pay-out","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/returns/{id}/cash-movement","href":"/api-reference/returns/get-a-returns-cash-drawer-pay-out"}]},{"group":"Fiscal","pages":[{"title":"List the published fiscal verification keys","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal-keys","href":"/api-reference/fiscal/list-the-published-fiscal-verification-keys"},{"title":"Export the period retention archive","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/archive","href":"/api-reference/fiscal/export-the-period-retention-archive"},{"title":"Get one sealed closure by period","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/closure","href":"/api-reference/fiscal/get-one-sealed-closure-by-period"},{"title":"List a store's sealed closures","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/closures","href":"/api-reference/fiscal/list-a-stores-sealed-closures"},{"title":"Seal a mandatory fiscal closure","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/fiscal/closures","href":"/api-reference/fiscal/seal-a-mandatory-fiscal-closure"},{"title":"Export the signed fiscal journal","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/journal","href":"/api-reference/fiscal/export-the-signed-fiscal-journal"},{"title":"Verify the fiscal chain integrity","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/verify","href":"/api-reference/fiscal/verify-the-fiscal-chain-integrity"},{"title":"Fiscal X (mid-shift read)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/x","href":"/api-reference/fiscal/fiscal-x-mid-shift-read"},{"title":"Fiscal Z (closing report)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/z","href":"/api-reference/fiscal/fiscal-z-closing-report"}]},{"group":"Compliance","pages":[{"title":"List age-verification attestations","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/age-attestations","href":"/api-reference/compliance/list-age-verification-attestations"},{"title":"Record an age-verification attestation","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/age-attestations","href":"/api-reference/compliance/record-an-age-verification-attestation"}]}]},{"group":"Catalogue \u0026 stock","pages":[{"group":"Catalog","pages":[{"title":"List catalog brands (marques)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/brands","href":"/api-reference/catalog/list-catalog-brands-marques"},{"title":"Create a brand (marque)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/brands","href":"/api-reference/catalog/create-a-brand-marque"},{"title":"Get a brand (marque) by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/brands/{brandId}","href":"/api-reference/catalog/get-a-brand-marque-by-id"},{"title":"Update a brand (marque)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/brands/{brandId}","href":"/api-reference/catalog/update-a-brand-marque"},{"title":"Deactivate (archive) a brand (marque)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/brands/{brandId}/deactivate","href":"/api-reference/catalog/deactivate-archive-a-brand-marque"},{"title":"List a brand's suppliers (fournisseurs)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/brands/{brandId}/suppliers","href":"/api-reference/catalog/list-a-brands-suppliers-fournisseurs"},{"title":"Replace a brand's supplier (fournisseur) set","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/brands/{brandId}/suppliers","href":"/api-reference/catalog/replace-a-brands-supplier-fournisseur-set"},{"title":"Enrich a single brand or product synchronously","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/catalog/enrich","href":"/api-reference/catalog/enrich-a-single-brand-or-product-synchronously"},{"title":"Upload a supplier PDF catalogue for extraction","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/catalog/imports","href":"/api-reference/catalog/upload-a-supplier-pdf-catalogue-for-extraction"},{"title":"Poll a catalogue-import job's status and proposed products","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/catalog/imports/{jobId}","href":"/api-reference/catalog/poll-a-catalogue-import-jobs-status-and-proposed-products"},{"title":"List catalog kits (coffrets, nomenclatures)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/kits","href":"/api-reference/catalog/list-catalog-kits-coffrets-nomenclatures"},{"title":"Create a kit (coffret / nomenclature / BOM)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/kits","href":"/api-reference/catalog/create-a-kit-coffret-nomenclature-bom"},{"title":"Update a kit (coffret / nomenclature)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/kits/{id}","href":"/api-reference/catalog/update-a-kit-coffret-nomenclature"},{"title":"Deactivate (archive) a kit (coffret)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/kits/{id}/deactivate","href":"/api-reference/catalog/deactivate-archive-a-kit-coffret"},{"title":"Resolve a kit's price and explosion (nomenclature)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/kits/{id}/resolve","href":"/api-reference/catalog/resolve-a-kits-price-and-explosion-nomenclature"},{"title":"List markdown schedules (démarques / soldes)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/markdowns","href":"/api-reference/catalog/list-markdown-schedules-démarques-soldes"},{"title":"Set a product's markdown schedule (démarque programmée)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/markdowns","href":"/api-reference/catalog/set-a-products-markdown-schedule-démarque-programmée"},{"title":"Resolve a product's markdown price (prix démarqué)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/markdowns/{productId}","href":"/api-reference/catalog/resolve-a-products-markdown-price-prix-démarqué"},{"title":"Deactivate a product's markdown schedule (fin de démarque)","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/markdowns/{productId}","href":"/api-reference/catalog/deactivate-a-products-markdown-schedule-fin-de-démarque"},{"title":"List / search catalog products (produits, articles)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/products","href":"/api-reference/catalog/list-search-catalog-products-produits-articles"},{"title":"Create a product (produit)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/products","href":"/api-reference/catalog/create-a-product-produit"},{"title":"Bulk-import products","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/products/import","href":"/api-reference/catalog/bulk-import-products"},{"title":"List the sellable catalogue (produits + prix de vente TTC)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/products/sellable","href":"/api-reference/catalog/list-the-sellable-catalogue-produits-+-prix-de-vente-ttc"},{"title":"Get a product (produit) by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/products/{id}","href":"/api-reference/catalog/get-a-product-produit-by-id"},{"title":"Update a product (produit)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/products/{id}","href":"/api-reference/catalog/update-a-product-produit"},{"title":"Get a product's priced sellable units (prix de vente TTC)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/products/{id}/units","href":"/api-reference/catalog/get-a-products-priced-sellable-units-prix-de-vente-ttc"},{"title":"Global cross-entity search (recherche globale)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/search","href":"/api-reference/catalog/global-cross-entity-search-recherche-globale"},{"title":"List price overrides (prix magasin) by store or by product","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/store-prices","href":"/api-reference/catalog/list-price-overrides-prix-magasin-by-store-or-by-product"},{"title":"Set a store price override (prix magasin / surcharge)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/store-prices","href":"/api-reference/catalog/set-a-store-price-override-prix-magasin-surcharge"},{"title":"Clear a store price override","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/store-prices","href":"/api-reference/catalog/clear-a-store-price-override"},{"title":"List taxonomy axes (classification, familles)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/taxonomy","href":"/api-reference/catalog/list-taxonomy-axes-classification-familles"},{"title":"Create a taxonomy axis (axe de classification)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/taxonomy","href":"/api-reference/catalog/create-a-taxonomy-axis-axe-de-classification"},{"title":"List the importable taxonomy presets (librairie d'axes)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/taxonomy/presets","href":"/api-reference/catalog/list-the-importable-taxonomy-presets-librairie-daxes"},{"title":"Save the current taxonomy as an internal preset","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/taxonomy/presets","href":"/api-reference/catalog/save-the-current-taxonomy-as-an-internal-preset"},{"title":"Delete an internal taxonomy preset","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/taxonomy/presets/{presetId}","href":"/api-reference/catalog/delete-an-internal-taxonomy-preset"},{"title":"Import a taxonomy preset (importer une librairie d'axes)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/taxonomy/presets/{presetId}/import","href":"/api-reference/catalog/import-a-taxonomy-preset-importer-une-librairie-daxes"},{"title":"Preview a taxonomy preset import (dry run)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/taxonomy/presets/{presetId}/preview","href":"/api-reference/catalog/preview-a-taxonomy-preset-import-dry-run"},{"title":"Get a taxonomy axis (axe de classification) by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/taxonomy/{axisId}","href":"/api-reference/catalog/get-a-taxonomy-axis-axe-de-classification-by-id"},{"title":"Update a taxonomy axis (axe de classification)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/taxonomy/{axisId}","href":"/api-reference/catalog/update-a-taxonomy-axis-axe-de-classification"},{"title":"Delete a taxonomy axis (supprimer un axe)","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/taxonomy/{axisId}","href":"/api-reference/catalog/delete-a-taxonomy-axis-supprimer-un-axe"},{"title":"Deactivate (archive) a taxonomy axis (axe de classification)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/taxonomy/{axisId}/deactivate","href":"/api-reference/catalog/deactivate-archive-a-taxonomy-axis-axe-de-classification"},{"title":"Reparent a taxonomy node (déplacer un nœud)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/taxonomy/{axisId}/nodes/{nodeId}/move","href":"/api-reference/catalog/reparent-a-taxonomy-node-déplacer-un-nœud"}]},{"group":"Inventory","pages":[{"title":"List cadence configs (cadence de comptage tournant)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/cycle-counts/cadences","href":"/api-reference/inventory/list-cadence-configs-cadence-de-comptage-tournant"},{"title":"Upsert a store's cadence config","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/cycle-counts/cadences","href":"/api-reference/inventory/upsert-a-stores-cadence-config"},{"title":"Plan a store's due cycle counts (comptage tournant)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/cycle-counts/plan","href":"/api-reference/inventory/plan-a-stores-due-cycle-counts-comptage-tournant"},{"title":"Set a SKU's count policy","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/cycle-counts/policies","href":"/api-reference/inventory/set-a-skus-count-policy"},{"title":"Complete a count task","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/cycle-counts/tasks/{skuId}/complete","href":"/api-reference/inventory/complete-a-count-task"},{"title":"Skip a count task","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/cycle-counts/tasks/{skuId}/skip","href":"/api-reference/inventory/skip-a-count-task"},{"title":"List stock items (stock / inventaire)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory","href":"/api-reference/inventory/list-stock-items-stock-inventaire"},{"title":"List count sessions (comptages / inventaires physiques)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory/counts","href":"/api-reference/inventory/list-count-sessions-comptages-inventaires-physiques"},{"title":"Open a count session (comptage / inventaire physique)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/inventory/counts","href":"/api-reference/inventory/open-a-count-session-comptage-inventaire-physique"},{"title":"Get a count session by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory/counts/{sessionId}","href":"/api-reference/inventory/get-a-count-session-by-id"},{"title":"Close a count session","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/inventory/counts/{sessionId}/close","href":"/api-reference/inventory/close-a-count-session"},{"title":"Record a counted line","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/inventory/counts/{sessionId}/lines","href":"/api-reference/inventory/record-a-counted-line"},{"title":"Get a count session's valued variance","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory/counts/{sessionId}/variance","href":"/api-reference/inventory/get-a-count-sessions-valued-variance"},{"title":"List stock in transit between stores","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory/in-transit","href":"/api-reference/inventory/list-stock-in-transit-between-stores"},{"title":"List stock write-offs (démarque)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory/write-offs","href":"/api-reference/inventory/list-stock-write-offs-démarque"},{"title":"Record a stock write-off (démarque)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/inventory/write-offs","href":"/api-reference/inventory/record-a-stock-write-off-démarque"},{"title":"Approve a stock write-off","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/inventory/write-offs/{id}/approve","href":"/api-reference/inventory/approve-a-stock-write-off"},{"title":"Reject a stock write-off","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/inventory/write-offs/{id}/reject","href":"/api-reference/inventory/reject-a-stock-write-off"},{"title":"Get a stock item by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory/{id}","href":"/api-reference/inventory/get-a-stock-item-by-id"}]},{"group":"Replenishment","pages":[{"title":"List reorder policies (seuils de réapprovisionnement)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/reorder-policies","href":"/api-reference/replenishment/list-reorder-policies-seuils-de-réapprovisionnement"},{"title":"Set a reorder policy (seuil min/max) for one SKU × store","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/reorder-policies","href":"/api-reference/replenishment/set-a-reorder-policy-seuil-minmax-for-one-sku-×-store"},{"title":"Generate replenishment suggestions (suggestions de réapprovisionnement) for a store","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/reorder-policies/suggestions","href":"/api-reference/replenishment/generate-replenishment-suggestions-suggestions-de-réapprovisionnement-for-a-store"}]},{"group":"Transfer","pages":[{"title":"List transfers","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/transfers","href":"/api-reference/transfer/list-transfers"},{"title":"Request a transfer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/transfers","href":"/api-reference/transfer/request-a-transfer"},{"title":"Get a transfer by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/transfers/{transferId}","href":"/api-reference/transfer/get-a-transfer-by-id"},{"title":"Cancel a transfer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/transfers/{transferId}/cancel","href":"/api-reference/transfer/cancel-a-transfer"},{"title":"Get a transfer's receipt discrepancy","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/transfers/{transferId}/discrepancy","href":"/api-reference/transfer/get-a-transfers-receipt-discrepancy"},{"title":"Receive a transfer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/transfers/{transferId}/receive","href":"/api-reference/transfer/receive-a-transfer"},{"title":"Ship a transfer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/transfers/{transferId}/ship","href":"/api-reference/transfer/ship-a-transfer"}]},{"group":"Procurement","pages":[{"title":"List the network's plans","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/plans","href":"/api-reference/procurement/list-the-networks-plans"},{"title":"Open a plan","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/plans","href":"/api-reference/procurement/open-a-plan"},{"title":"Get one plan","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/plans/{planId}","href":"/api-reference/procurement/get-one-plan"},{"title":"Edit a draft plan","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/plans/{planId}","href":"/api-reference/procurement/edit-a-draft-plan"},{"title":"Cancel a draft plan","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/plans/{planId}/cancel","href":"/api-reference/procurement/cancel-a-draft-plan"},{"title":"List the lines of one plan","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/plans/{planId}/items","href":"/api-reference/procurement/list-the-lines-of-one-plan"},{"title":"Add a line to a draft plan","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/plans/{planId}/items","href":"/api-reference/procurement/add-a-line-to-a-draft-plan"},{"title":"Remove a line from a draft plan","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/plans/{planId}/items/{itemId}","href":"/api-reference/procurement/remove-a-line-from-a-draft-plan"},{"title":"Judge a plan against the network's rules","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/plans/{planId}/rules","href":"/api-reference/procurement/judge-a-plan-against-the-networks-rules"},{"title":"Move a plan one step along its lifecycle","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/plans/{planId}/transitions","href":"/api-reference/procurement/move-a-plan-one-step-along-its-lifecycle"},{"title":"List purchase orders (commandes fournisseur)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/purchase-orders","href":"/api-reference/procurement/list-purchase-orders-commandes-fournisseur"},{"title":"Create a purchase order (commande fournisseur / bon de commande)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/purchase-orders","href":"/api-reference/procurement/create-a-purchase-order-commande-fournisseur-bon-de-commande"},{"title":"Get a purchase order by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/purchase-orders/{orderId}","href":"/api-reference/procurement/get-a-purchase-order-by-id"},{"title":"Receive against a purchase order (réception de marchandise)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/purchase-orders/{orderId}/receive","href":"/api-reference/procurement/receive-against-a-purchase-order-réception-de-marchandise"},{"title":"Get a purchase order's received-vs-ordered variance (écart de réception)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/purchase-orders/{orderId}/variance","href":"/api-reference/procurement/get-a-purchase-orders-received-vs-ordered-variance-écart-de-réception"},{"title":"List returns-to-vendor (retours fournisseur)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/return-to-vendors","href":"/api-reference/procurement/list-returns-to-vendor-retours-fournisseur"},{"title":"Raise a return-to-vendor (retour fournisseur)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/return-to-vendors","href":"/api-reference/procurement/raise-a-return-to-vendor-retour-fournisseur"},{"title":"Get a return-to-vendor by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/return-to-vendors/{rtvId}","href":"/api-reference/procurement/get-a-return-to-vendor-by-id"},{"title":"Cancel a return-to-vendor","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/return-to-vendors/{rtvId}/cancel","href":"/api-reference/procurement/cancel-a-return-to-vendor"},{"title":"Credit a return-to-vendor","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/return-to-vendors/{rtvId}/credit","href":"/api-reference/procurement/credit-a-return-to-vendor"},{"title":"Ship a return-to-vendor","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/return-to-vendors/{rtvId}/ship","href":"/api-reference/procurement/ship-a-return-to-vendor"},{"title":"List suppliers (fournisseurs)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/suppliers","href":"/api-reference/procurement/list-suppliers-fournisseurs"},{"title":"Create a supplier","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/suppliers","href":"/api-reference/procurement/create-a-supplier"},{"title":"Get a supplier by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/suppliers/{supplierId}","href":"/api-reference/procurement/get-a-supplier-by-id"},{"title":"Update a supplier (fournisseur)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/suppliers/{supplierId}","href":"/api-reference/procurement/update-a-supplier-fournisseur"},{"title":"Deactivate a supplier","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/suppliers/{supplierId}/deactivate","href":"/api-reference/procurement/deactivate-a-supplier"}]},{"group":"Network","pages":[{"title":"List the companies (sociétés) the network trades under","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/companies","href":"/api-reference/network/list-the-companies-sociétés-the-network-trades-under"},{"title":"Create a company (société)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/companies","href":"/api-reference/network/create-a-company-société"},{"title":"Attach a store to a company and set its establishment number","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/companies/stores/{storeId}","href":"/api-reference/network/attach-a-store-to-a-company-and-set-its-establishment-number"},{"title":"Get a company with its identity history","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/companies/{companyId}","href":"/api-reference/network/get-a-company-with-its-identity-history"},{"title":"Edit a company's fiscal identity (appends a version)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/companies/{companyId}/identity","href":"/api-reference/network/edit-a-companys-fiscal-identity-appends-a-version"},{"title":"Resolve the fiscal header a store's documents print","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal-identity/stores/{storeId}","href":"/api-reference/network/resolve-the-fiscal-header-a-stores-documents-print"},{"title":"List the paired register peripherals","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fleet","href":"/api-reference/network/list-the-paired-register-peripherals"},{"title":"Pair a device onto a register","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/fleet","href":"/api-reference/network/pair-a-device-onto-a-register"},{"title":"Get a paired device by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fleet/{deviceId}","href":"/api-reference/network/get-a-paired-device-by-id"},{"title":"Update a paired device","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/fleet/{deviceId}","href":"/api-reference/network/update-a-paired-device"},{"title":"Retire (unpair) a paired device","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/fleet/{deviceId}/retire","href":"/api-reference/network/retire-unpair-a-paired-device"},{"title":"List the network's regions","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/regions","href":"/api-reference/network/list-the-networks-regions"},{"title":"Create a region","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/regions","href":"/api-reference/network/create-a-region"},{"title":"Get a region by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/regions/{regionId}","href":"/api-reference/network/get-a-region-by-id"},{"title":"Update a region","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/regions/{regionId}","href":"/api-reference/network/update-a-region"},{"title":"Deactivate (archive) a region","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/regions/{regionId}/deactivate","href":"/api-reference/network/deactivate-archive-a-region"},{"title":"List the network's stores","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/stores","href":"/api-reference/network/list-the-networks-stores"},{"title":"Provision a store","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/stores","href":"/api-reference/network/provision-a-store"},{"title":"Get a store by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/stores/{storeId}","href":"/api-reference/network/get-a-store-by-id"},{"title":"Update a store","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/stores/{storeId}","href":"/api-reference/network/update-a-store"},{"title":"Deactivate (close) a store","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/stores/{storeId}/deactivate","href":"/api-reference/network/deactivate-close-a-store"},{"title":"Reactivate (reopen) a store","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/stores/{storeId}/reactivate","href":"/api-reference/network/reactivate-reopen-a-store"},{"title":"List the network's VAT / tax codes","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/tax-codes","href":"/api-reference/network/list-the-networks-vat-tax-codes"},{"title":"Create a VAT / tax code","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/tax-codes","href":"/api-reference/network/create-a-vat-tax-code"},{"title":"Get a tax code by its code","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/tax-codes/{code}","href":"/api-reference/network/get-a-tax-code-by-its-code"},{"title":"Update a VAT / tax code","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/tax-codes/{code}","href":"/api-reference/network/update-a-vat-tax-code"},{"title":"Deactivate (archive) a VAT / tax code","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/tax-codes/{code}/deactivate","href":"/api-reference/network/deactivate-archive-a-vat-tax-code"}]}]},{"group":"Finance","pages":[{"group":"Finance","pages":[{"title":"List finance entries","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance","href":"/api-reference/finance/list-finance-entries"},{"title":"Export a generic accounting file (journal entries / configurable CSV)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/accounting-export","href":"/api-reference/finance/export-a-generic-accounting-file-journal-entries-configurable-csv"},{"title":"Report cash discrepancies for a period","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/cash-discrepancy","href":"/api-reference/finance/report-cash-discrepancies-for-a-period"},{"title":"Get one session's cash discrepancy","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/cash-discrepancy/{sessionId}","href":"/api-reference/finance/get-one-sessions-cash-discrepancy"},{"title":"List deposit batches","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/deposits","href":"/api-reference/finance/list-deposit-batches"},{"title":"Open a deposit batch","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/finance/deposits","href":"/api-reference/finance/open-a-deposit-batch"},{"title":"Deposit trend (declared vs settled per day)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/deposits/trend","href":"/api-reference/finance/deposit-trend-declared-vs-settled-per-day"},{"title":"Get a deposit batch by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/deposits/{batchId}","href":"/api-reference/finance/get-a-deposit-batch-by-id"},{"title":"Settle a deposit line","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/finance/deposits/{batchId}/lines/settle","href":"/api-reference/finance/settle-a-deposit-line"},{"title":"Reconcile a deposit batch","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/finance/deposits/{batchId}/reconcile","href":"/api-reference/finance/reconcile-a-deposit-batch"},{"title":"Export the FEC accounting file","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/fec","href":"/api-reference/finance/export-the-fec-accounting-file"},{"title":"Report the period close","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/period-close","href":"/api-reference/finance/report-the-period-close"},{"title":"Close (lock) a fiscal period","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/finance/period-close","href":"/api-reference/finance/close-lock-a-fiscal-period"},{"title":"Get a finance entry by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/{entryId}","href":"/api-reference/finance/get-a-finance-entry-by-id"},{"title":"Windowed sales analytics report","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/reports/sales","href":"/api-reference/finance/windowed-sales-analytics-report"},{"title":"List finalized sale tickets","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/sales","href":"/api-reference/finance/list-finalized-sale-tickets"},{"title":"Tally one salesperson's day","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/sales/seller-day","href":"/api-reference/finance/tally-one-salespersons-day"},{"title":"Summarise sales into dashboard KPIs","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/sales/summary","href":"/api-reference/finance/summarise-sales-into-dashboard-kpis"},{"title":"Get a sale ticket by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/sales/{id}","href":"/api-reference/finance/get-a-sale-ticket-by-id"}]},{"group":"Billing","pages":[{"title":"Read the billing catalogue and current plan","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/credits/billing","href":"/api-reference/billing/read-the-billing-catalogue-and-current-plan"},{"title":"Grant SMS credits to the account wallet (crédit)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/credits/grant","href":"/api-reference/billing/grant-sms-credits-to-the-account-wallet-crédit"},{"title":"Read the credit wallet, ledger and usage (crédit, recharge)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/credits/overview","href":"/api-reference/billing/read-the-credit-wallet-ledger-and-usage-crédit-recharge"},{"title":"Open a Stripe Checkout session for a monthly plan","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/credits/plan","href":"/api-reference/billing/open-a-stripe-checkout-session-for-a-monthly-plan"},{"title":"Open a Stripe Checkout session for a credit top-up","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/credits/topup","href":"/api-reference/billing/open-a-stripe-checkout-session-for-a-credit-top-up"}]},{"group":"Instruments","pages":[{"title":"List stored-value instruments (carte cadeau, avoir)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/giftcards","href":"/api-reference/instruments/list-stored-value-instruments-carte-cadeau-avoir"},{"title":"Issue a stored-value instrument (carte cadeau, avoir)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/giftcards","href":"/api-reference/instruments/issue-a-stored-value-instrument-carte-cadeau-avoir"},{"title":"Report stored-value breakage across the whole network (carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/giftcards/breakage","href":"/api-reference/instruments/report-stored-value-breakage-across-the-whole-network-carte-cadeau"},{"title":"Get an instrument by its bearer code (carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/giftcards/by-code/{code}","href":"/api-reference/instruments/get-an-instrument-by-its-bearer-code-carte-cadeau"},{"title":"Bulk-issue stored-value instruments (carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/giftcards/import","href":"/api-reference/instruments/bulk-issue-stored-value-instruments-carte-cadeau"},{"title":"Redeem value from an instrument (carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/giftcards/redemptions","href":"/api-reference/instruments/redeem-value-from-an-instrument-carte-cadeau"},{"title":"Get an instrument by id (carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/giftcards/{id}","href":"/api-reference/instruments/get-an-instrument-by-id-carte-cadeau"},{"title":"Reload an instrument with more value (recharge carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/giftcards/{id}/reload","href":"/api-reference/instruments/reload-an-instrument-with-more-value-recharge-carte-cadeau"},{"title":"Void an instrument (carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/giftcards/{id}/void","href":"/api-reference/instruments/void-an-instrument-carte-cadeau"}]}]},{"group":"Clients \u0026 fidélité","pages":[{"group":"Customers","pages":[{"title":"List customers","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/customers","href":"/api-reference/customers/list-customers"},{"title":"Register a customer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/customers","href":"/api-reference/customers/register-a-customer"},{"title":"Report the customer base by RFM segment (segment client)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/customers/segments","href":"/api-reference/customers/report-the-customer-base-by-rfm-segment-segment-client"},{"title":"Get a customer by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/customers/{id}","href":"/api-reference/customers/get-a-customer-by-id"},{"title":"Update a customer profile","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/customers/{id}","href":"/api-reference/customers/update-a-customer-profile"},{"title":"Get a customer's consent record","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/customers/{id}/consent","href":"/api-reference/customers/get-a-customers-consent-record"},{"title":"Record a customer consent decision","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/customers/{id}/consent","href":"/api-reference/customers/record-a-customer-consent-decision"},{"title":"Deactivate a customer (reversible)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/customers/{id}/deactivation","href":"/api-reference/customers/deactivate-a-customer-reversible"},{"title":"Erase a customer's personal data (GDPR)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/customers/{id}/erasure","href":"/api-reference/customers/erase-a-customers-personal-data-gdpr"},{"title":"Export a customer's personal data (GDPR)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/customers/{id}/export","href":"/api-reference/customers/export-a-customers-personal-data-gdpr"},{"title":"Get a customer's purchase history","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/customers/{id}/purchases","href":"/api-reference/customers/get-a-customers-purchase-history"},{"title":"Reactivate a deactivated customer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/customers/{id}/reactivation","href":"/api-reference/customers/reactivate-a-deactivated-customer"}]},{"group":"Loyalty","pages":[{"title":"List loyalty members (fidélité)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/loyalty","href":"/api-reference/loyalty/list-loyalty-members-fidélité"},{"title":"Get a customer's derived loyalty account (fidélité, palier)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/loyalty/accounts/{customerId}","href":"/api-reference/loyalty/get-a-customers-derived-loyalty-account-fidélité-palier"},{"title":"Accrue loyalty points for a sale (points de fidélité)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/loyalty/accruals","href":"/api-reference/loyalty/accrue-loyalty-points-for-a-sale-points-de-fidélité"},{"title":"Get the active loyalty program config (fidélité, paliers)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/loyalty/config","href":"/api-reference/loyalty/get-the-active-loyalty-program-config-fidélité-paliers"},{"title":"Replace the loyalty program config (fidélité, paliers)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/loyalty/config","href":"/api-reference/loyalty/replace-the-loyalty-program-config-fidélité-paliers"},{"title":"Redeem loyalty points for a discount (points de fidélité)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/loyalty/redemptions","href":"/api-reference/loyalty/redeem-loyalty-points-for-a-discount-points-de-fidélité"},{"title":"Get a loyalty member by id (fidélité)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/loyalty/{memberId}","href":"/api-reference/loyalty/get-a-loyalty-member-by-id-fidélité"}]},{"group":"Notifications","pages":[{"title":"Get per-channel notification availability","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/notifications/channels","href":"/api-reference/notifications/get-per-channel-notification-availability"},{"title":"Send a finalized sale's receipt to the customer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/notifications/receipt","href":"/api-reference/notifications/send-a-finalized-sales-receipt-to-the-customer"}]}]},{"group":"Marketing \u0026 promotions","pages":[{"group":"Promotions","pages":[{"title":"List the coupon catalogue (code promo)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/coupons","href":"/api-reference/promotions/list-the-coupon-catalogue-code-promo"},{"title":"Create one coupon under a chosen code (code promo)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/coupons","href":"/api-reference/promotions/create-one-coupon-under-a-chosen-code-code-promo"},{"title":"Batch-generate a run of coupon codes (code promo)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/coupons/batch","href":"/api-reference/promotions/batch-generate-a-run-of-coupon-codes-code-promo"},{"title":"Preview a coupon against a basket total (code promo, bon de réduction)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/coupons/validate","href":"/api-reference/promotions/preview-a-coupon-against-a-basket-total-code-promo-bon-de-réduction"},{"title":"Edit an existing coupon (code promo)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/coupons/{id}","href":"/api-reference/promotions/edit-an-existing-coupon-code-promo"},{"title":"Deactivate a coupon (code promo)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/coupons/{id}/deactivate","href":"/api-reference/promotions/deactivate-a-coupon-code-promo"},{"title":"Apply an authorised discount to a whole ticket","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/discounts/ticket","href":"/api-reference/promotions/apply-an-authorised-discount-to-a-whole-ticket"},{"title":"Get an applied discount by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/discounts/{id}","href":"/api-reference/promotions/get-an-applied-discount-by-id"},{"title":"List automatic promotion rules","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/promotions","href":"/api-reference/promotions/list-automatic-promotion-rules"},{"title":"Create or replace an automatic promotion rule","description":"UPSERTS one automatic promotion rule by `id`: there is no separate create and update, and no PATCH. Posting an existing id REPLACES that rule wholesale — every field not in your body is destroyed, including the reward mechanics. The read-modify-write path is `GET /v1/promotions/{id}/rule` (the directory reads carry no mechanics): read the live rule there, change the one field you were asked to change, and send the whole object back. If that read 404s (the promotion carries no configured rule) STOP and ask; do not reconstruct plausible values to satisfy the schema, as that silently overwrites a live pricing rule. Pick the `type` by the mechanic you want: `bogo` (buy `buyQuantity` of `buySkuId`, get `getQuantity` of `getSkuId` at `getDiscountBps` off — 10000 bps makes it free), `threshold` (once `skuId` reaches `minQuantity` units, a percent or flat `reward` comes off that SKU's subtotal) or `bundle` (buy the `components` together and pay `bundlePriceCents`). Money is integer CENTS and percentages are BASIS POINTS (1000 = 10%). `validFrom`/`validUntil` are inclusive ISO-8601 instants (`Z` or a UTC offset) and `validUntil` must not precede `validFrom`. Use this for an always-on offer any matching basket earns; use `POST /v1/coupons` instead when the reduction must be unlocked by a code the customer presents.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/promotions","href":"/api-reference/promotions/create-or-replace-an-automatic-promotion-rule"},{"title":"Evaluate the active promotion rules against a cart","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/promotions/evaluate","href":"/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart"},{"title":"Get a promotion by id","description":"Resolves ONE automatic promotion by its rule id and returns the directory projection: `id`, `name`, `type`, `status`, `validFrom`, `validUntil`. That is the whole payload. It does NOT carry the rule's reward mechanics — no `skuId`, `minQuantity`, `reward`, `components`, `bundlePriceCents` or `buySkuId`. Use it to check one promotion's lifecycle status or validity window; to read the mechanics (before rewriting a live rule) call `GET /v1/promotions/{id}/rule` instead. 404s when no rule carries the id.","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/promotions/{id}","href":"/api-reference/promotions/get-a-promotion-by-id"},{"title":"Update an existing promotion rule","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/promotions/{id}","href":"/api-reference/promotions/update-an-existing-promotion-rule"},{"title":"Deactivate a promotion rule","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/promotions/{id}/deactivate","href":"/api-reference/promotions/deactivate-a-promotion-rule"},{"title":"Get a promotion's full rule definition","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/promotions/{id}/rule","href":"/api-reference/promotions/get-a-promotions-full-rule-definition"}]},{"group":"Marketing","pages":[{"title":"List marketing campaigns (campagne)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/campaigns","href":"/api-reference/marketing/list-marketing-campaigns-campagne"},{"title":"Author a marketing campaign (campagne)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/campaigns","href":"/api-reference/marketing/author-a-marketing-campaign-campagne"},{"title":"Get a campaign by id (campagne)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/campaigns/{id}","href":"/api-reference/marketing/get-a-campaign-by-id-campagne"},{"title":"Preview a campaign's recipients without sending (campagne, relance)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/campaigns/{id}/dry-run","href":"/api-reference/marketing/preview-a-campaigns-recipients-without-sending-campagne-relance"},{"title":"Send a campaign to its consented audience (campagne, relance)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/campaigns/{id}/send","href":"/api-reference/marketing/send-a-campaign-to-its-consented-audience-campagne-relance"}]}]},{"group":"Services","pages":[{"group":"Rentals","pages":[{"title":"List rentals","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/rentals","href":"/api-reference/rentals/list-rentals"},{"title":"Open a rental","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/rentals","href":"/api-reference/rentals/open-a-rental"},{"title":"Get a rental by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/rentals/{rentalId}","href":"/api-reference/rentals/get-a-rental-by-id"},{"title":"Flag a rental as overdue","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/rentals/{rentalId}/mark-overdue","href":"/api-reference/rentals/flag-a-rental-as-overdue"},{"title":"Return a rental and settle the caution","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/rentals/{rentalId}/return","href":"/api-reference/rentals/return-a-rental-and-settle-the-caution"}]},{"group":"Repairs","pages":[{"title":"List repair orders","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/repairs","href":"/api-reference/repairs/list-repair-orders"},{"title":"Take an article in for repair","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/repairs","href":"/api-reference/repairs/take-an-article-in-for-repair"},{"title":"Get a repair order by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/repairs/{orderId}","href":"/api-reference/repairs/get-a-repair-order-by-id"},{"title":"Record collection of a repaired article","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/repairs/{orderId}/collect","href":"/api-reference/repairs/record-collection-of-a-repaired-article"},{"title":"Mark a repair order ready for pickup","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/repairs/{orderId}/ready","href":"/api-reference/repairs/mark-a-repair-order-ready-for-pickup"},{"title":"Send a repair order to the workshop","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/repairs/{orderId}/to-workshop","href":"/api-reference/repairs/send-a-repair-order-to-the-workshop"},{"title":"Declare a repair order unrepairable","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/repairs/{orderId}/unrepairable","href":"/api-reference/repairs/declare-a-repair-order-unrepairable"}]}]},{"group":"Assistant","pages":[{"title":"Ask the in-till assistant a question","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/assistant/chat","href":"/api-reference/assistant/ask-the-in-till-assistant-a-question"}]},{"group":"Intégrations \u0026 données","pages":[{"group":"Integrations","pages":[{"title":"List the connectors (intégration, connecteur)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/integrations","href":"/api-reference/integrations/list-the-connectors-intégration-connecteur"},{"title":"Read one connector (connecteur)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/integrations/{key}","href":"/api-reference/integrations/read-one-connector-connecteur"},{"title":"Configure a connector (connecteur, intégration)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/integrations/{key}","href":"/api-reference/integrations/configure-a-connector-connecteur-intégration"},{"title":"Disable a connector (connecteur)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/integrations/{key}/disable","href":"/api-reference/integrations/disable-a-connector-connecteur"},{"title":"Enable a connector (connecteur)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/integrations/{key}/enable","href":"/api-reference/integrations/enable-a-connector-connecteur"}]},{"group":"Merchandising import","pages":[{"title":"Bulk-import proposed promotions (promotions)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/import/promotions","href":"/api-reference/merchandising-import/bulk-import-proposed-promotions-promotions"},{"title":"Bulk-import proposed replenishment plans (commandes de réapprovisionnement)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/import/purchase-orders","href":"/api-reference/merchandising-import/bulk-import-proposed-replenishment-plans-commandes-de-réapprovisionnement"},{"title":"Bulk-import proposed inter-store transfer plans (transferts inter-magasins)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/import/transfers","href":"/api-reference/merchandising-import/bulk-import-proposed-inter-store-transfer-plans-transferts-inter-magasins"}]},{"group":"Data platform","pages":[{"title":"Export a resource's changed rows (incremental CDC feed)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/export/{resource}","href":"/api-reference/data-platform/export-a-resources-changed-rows-incremental-cdc-feed"}]}]},{"group":"Système","pages":[{"group":"Auth","pages":[{"title":"Resolve the authenticated actor's identity and effective POS scopes (MCP gateway alias)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/whoami","href":"/api-reference/auth/resolve-the-authenticated-actors-identity-and-effective-pos-scopes-mcp-gateway-alias"},{"title":"Request a single-use manager elevation grant","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/auth/elevate","href":"/api-reference/auth/request-a-single-use-manager-elevation-grant"},{"title":"Set or rotate the calling actor's own elevation PIN","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/auth/elevation/pin","href":"/api-reference/auth/set-or-rotate-the-calling-actors-own-elevation-pin"},{"title":"Resolve the authenticated actor's identity and effective POS scopes","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/auth/whoami","href":"/api-reference/auth/resolve-the-authenticated-actors-identity-and-effective-pos-scopes"},{"title":"Tally the authenticated actor's own day","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/me/day-summary","href":"/api-reference/auth/tally-the-authenticated-actors-own-day"},{"title":"Get the POS permission manifest","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/permissions/manifest","href":"/api-reference/auth/get-the-pos-permission-manifest"}]},{"group":"Team","pages":[{"title":"List team members","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/team","href":"/api-reference/team/list-team-members"},{"title":"Provision a team member","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/team","href":"/api-reference/team/provision-a-team-member"},{"title":"Get a team member by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/team/{memberId}","href":"/api-reference/team/get-a-team-member-by-id"},{"title":"Replace a team member's directory record","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/team/{memberId}","href":"/api-reference/team/replace-a-team-members-directory-record"},{"title":"Offboard a team member (disable sign-in)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/team/{memberId}/deactivate","href":"/api-reference/team/offboard-a-team-member-disable-sign-in"},{"title":"Get a team member's effective permissions","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/team/{memberId}/permissions","href":"/api-reference/team/get-a-team-members-effective-permissions"},{"title":"Re-onboard a team member (restore sign-in)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/team/{memberId}/reactivate","href":"/api-reference/team/re-onboard-a-team-member-restore-sign-in"},{"title":"Assign a scoped role to a team member","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/team/{memberId}/roles","href":"/api-reference/team/assign-a-scoped-role-to-a-team-member"},{"title":"Revoke a scoped role from a team member","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/team/{memberId}/roles","href":"/api-reference/team/revoke-a-scoped-role-from-a-team-member"}]},{"group":"Settings","pages":[{"title":"Read the order-routing rules","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/routing-rules","href":"/api-reference/settings/read-the-order-routing-rules"},{"title":"Replace the order-routing rules","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/routing-rules","href":"/api-reference/settings/replace-the-order-routing-rules"},{"title":"List the network's business rules","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/rules","href":"/api-reference/settings/list-the-networks-business-rules"},{"title":"Create a rule from a catalogue template","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/rules","href":"/api-reference/settings/create-a-rule-from-a-catalogue-template"},{"title":"List the network's rulesets","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/rules/groups","href":"/api-reference/settings/list-the-networks-rulesets"},{"title":"Create a ruleset","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/rules/groups","href":"/api-reference/settings/create-a-ruleset"},{"title":"Change a ruleset","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/rules/groups/{groupId}","href":"/api-reference/settings/change-a-ruleset"},{"title":"List the rule catalogue","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/rules/templates","href":"/api-reference/settings/list-the-rule-catalogue"},{"title":"Get one rule and its per-subject thresholds","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/rules/{ruleId}","href":"/api-reference/settings/get-one-rule-and-its-per-subject-thresholds"},{"title":"Change a rule's threshold, mode, perimeter or switch","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/rules/{ruleId}","href":"/api-reference/settings/change-a-rules-threshold-mode-perimeter-or-switch"},{"title":"Read the network settings","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/settings","href":"/api-reference/settings/read-the-network-settings"},{"title":"Replace the network settings","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/settings","href":"/api-reference/settings/replace-the-network-settings"}]},{"group":"Devices","pages":[{"title":"Get the active card-terminal provider","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/payment-terminal/config","href":"/api-reference/devices/get-the-active-card-terminal-provider"},{"title":"Run the card-terminal round-trip self-test","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/payment-terminal/test","href":"/api-reference/devices/run-the-card-terminal-round-trip-self-test"}]},{"group":"Audit","pages":[{"title":"Query the central audit log","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/audit","href":"/api-reference/audit/query-the-central-audit-log"}]}]}]}]},{"language":"fr","tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/fr"}]},{"tab":"Développeurs","pages":[{"title":"Développeurs","href":"/fr/developers/overview"}]},{"tab":"API Reference","groups":[{"group":"Ventes \u0026 encaissement","pages":[{"group":"Checkout","pages":[{"title":"List appointments (RDV)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/appointments","href":"/api-reference/checkout/list-appointments-rdv"},{"title":"Book an appointment (RDV)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/appointments","href":"/api-reference/checkout/book-an-appointment-rdv"},{"title":"Get an appointment (RDV) by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/appointments/{appointmentId}","href":"/api-reference/checkout/get-an-appointment-rdv-by-id"},{"title":"Cancel an appointment (RDV)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/appointments/{appointmentId}/cancel","href":"/api-reference/checkout/cancel-an-appointment-rdv"},{"title":"Complete an appointment (RDV)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/appointments/{appointmentId}/complete","href":"/api-reference/checkout/complete-an-appointment-rdv"},{"title":"Confirm an appointment (RDV)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/appointments/{appointmentId}/confirm","href":"/api-reference/checkout/confirm-an-appointment-rdv"},{"title":"Mark an appointment (RDV) as a no-show","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/appointments/{appointmentId}/no-show","href":"/api-reference/checkout/mark-an-appointment-rdv-as-a-no-show"},{"title":"Reschedule an appointment (RDV)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/appointments/{appointmentId}/reschedule","href":"/api-reference/checkout/reschedule-an-appointment-rdv"},{"title":"Finalize a settled sale (encaissement)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/checkout/finalize","href":"/api-reference/checkout/finalize-a-settled-sale-encaissement"},{"title":"List deposits (acomptes)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/deposits","href":"/api-reference/checkout/list-deposits-acomptes"},{"title":"Open a deposit (acompte)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/deposits","href":"/api-reference/checkout/open-a-deposit-acompte"},{"title":"Get a deposit (acompte) by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/deposits/{depositId}","href":"/api-reference/checkout/get-a-deposit-acompte-by-id"},{"title":"Record a deposit payment (versement)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/deposits/{depositId}/payments","href":"/api-reference/checkout/record-a-deposit-payment-versement"},{"title":"Settle a deposit (acompte)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/deposits/{depositId}/settle","href":"/api-reference/checkout/settle-a-deposit-acompte"},{"title":"List open parked sales","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/parked","href":"/api-reference/checkout/list-open-parked-sales"},{"title":"Park a cart","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/parked","href":"/api-reference/checkout/park-a-cart"},{"title":"Get a parked sale by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/parked/{parkedSaleId}","href":"/api-reference/checkout/get-a-parked-sale-by-id"},{"title":"Drop a parked sale","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/parked/{parkedSaleId}","href":"/api-reference/checkout/drop-a-parked-sale"},{"title":"Resume a parked sale","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/parked/{parkedSaleId}/resume","href":"/api-reference/checkout/resume-a-parked-sale"},{"title":"List quotes","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/quotes","href":"/api-reference/checkout/list-quotes"},{"title":"Create a quote (devis)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/quotes","href":"/api-reference/checkout/create-a-quote-devis"},{"title":"Get a quote by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/quotes/{quoteId}","href":"/api-reference/checkout/get-a-quote-by-id"},{"title":"Update a quote","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/quotes/{quoteId}","href":"/api-reference/checkout/update-a-quote"},{"title":"Accept a quote","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/quotes/{quoteId}/accept","href":"/api-reference/checkout/accept-a-quote"},{"title":"Cancel a quote","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/quotes/{quoteId}/cancel","href":"/api-reference/checkout/cancel-a-quote"},{"title":"Send a quote","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/quotes/{quoteId}/send","href":"/api-reference/checkout/send-a-quote"},{"title":"List in-store holds","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/reservations","href":"/api-reference/checkout/list-in-store-holds"},{"title":"Place an in-store hold (réservation)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/reservations","href":"/api-reference/checkout/place-an-in-store-hold-réservation"},{"title":"Get a reservation by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/reservations/{reservationId}","href":"/api-reference/checkout/get-a-reservation-by-id"},{"title":"Cancel a hold","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/reservations/{reservationId}/cancel","href":"/api-reference/checkout/cancel-a-hold"},{"title":"Fulfil a hold","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/reservations/{reservationId}/fulfil","href":"/api-reference/checkout/fulfil-a-hold"},{"title":"Open a register session (session de caisse)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/sessions","href":"/api-reference/checkout/open-a-register-session-session-de-caisse"},{"title":"Get a register session (session de caisse) by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/sessions/{sessionId}","href":"/api-reference/checkout/get-a-register-session-session-de-caisse-by-id"},{"title":"Close a register session (clôture de caisse)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/sessions/{sessionId}/close","href":"/api-reference/checkout/close-a-register-session-clôture-de-caisse"},{"title":"Record a cash movement (mouvement de caisse) on a session","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/sessions/{sessionId}/movements","href":"/api-reference/checkout/record-a-cash-movement-mouvement-de-caisse-on-a-session"}]},{"group":"Orders","pages":[{"title":"List orders (commandes)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/orders","href":"/api-reference/orders/list-orders-commandes"},{"title":"Capture an order (commande)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/orders","href":"/api-reference/orders/capture-an-order-commande"},{"title":"Get an order by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/orders/{id}","href":"/api-reference/orders/get-an-order-by-id"},{"title":"Advance an order","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/orders/{id}/advance","href":"/api-reference/orders/advance-an-order"},{"title":"Revert an order one step","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/orders/{id}/revert","href":"/api-reference/orders/revert-an-order-one-step"},{"title":"Route a captured order","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/orders/{id}/route","href":"/api-reference/orders/route-a-captured-order"}]},{"group":"Returns","pages":[{"title":"How much is still refundable on an acompte / caution","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/refunds/refundable/{subjectKind}/{subjectId}","href":"/api-reference/returns/how-much-is-still-refundable-on-an-acompte-caution"},{"title":"Refund an acompte / caution as store credit (avoir)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/refunds/store-credit","href":"/api-reference/returns/refund-an-acompte-caution-as-store-credit-avoir"},{"title":"Get a store-credit refund by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/refunds/{refundId}","href":"/api-reference/returns/get-a-store-credit-refund-by-id"},{"title":"List processed returns (retours)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/returns","href":"/api-reference/returns/list-processed-returns-retours"},{"title":"Process a return (retour / avoir)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/returns","href":"/api-reference/returns/process-a-return-retour-avoir"},{"title":"Get a processed return by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/returns/{id}","href":"/api-reference/returns/get-a-processed-return-by-id"},{"title":"Get a return's cash-drawer pay-out","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/returns/{id}/cash-movement","href":"/api-reference/returns/get-a-returns-cash-drawer-pay-out"}]},{"group":"Fiscal","pages":[{"title":"List the published fiscal verification keys","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal-keys","href":"/api-reference/fiscal/list-the-published-fiscal-verification-keys"},{"title":"Export the period retention archive","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/archive","href":"/api-reference/fiscal/export-the-period-retention-archive"},{"title":"Get one sealed closure by period","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/closure","href":"/api-reference/fiscal/get-one-sealed-closure-by-period"},{"title":"List a store's sealed closures","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/closures","href":"/api-reference/fiscal/list-a-stores-sealed-closures"},{"title":"Seal a mandatory fiscal closure","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/fiscal/closures","href":"/api-reference/fiscal/seal-a-mandatory-fiscal-closure"},{"title":"Export the signed fiscal journal","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/journal","href":"/api-reference/fiscal/export-the-signed-fiscal-journal"},{"title":"Verify the fiscal chain integrity","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/verify","href":"/api-reference/fiscal/verify-the-fiscal-chain-integrity"},{"title":"Fiscal X (mid-shift read)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/x","href":"/api-reference/fiscal/fiscal-x-mid-shift-read"},{"title":"Fiscal Z (closing report)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal/z","href":"/api-reference/fiscal/fiscal-z-closing-report"}]},{"group":"Compliance","pages":[{"title":"List age-verification attestations","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/age-attestations","href":"/api-reference/compliance/list-age-verification-attestations"},{"title":"Record an age-verification attestation","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/age-attestations","href":"/api-reference/compliance/record-an-age-verification-attestation"}]}]},{"group":"Catalogue \u0026 stock","pages":[{"group":"Catalog","pages":[{"title":"List catalog brands (marques)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/brands","href":"/api-reference/catalog/list-catalog-brands-marques"},{"title":"Create a brand (marque)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/brands","href":"/api-reference/catalog/create-a-brand-marque"},{"title":"Get a brand (marque) by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/brands/{brandId}","href":"/api-reference/catalog/get-a-brand-marque-by-id"},{"title":"Update a brand (marque)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/brands/{brandId}","href":"/api-reference/catalog/update-a-brand-marque"},{"title":"Deactivate (archive) a brand (marque)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/brands/{brandId}/deactivate","href":"/api-reference/catalog/deactivate-archive-a-brand-marque"},{"title":"List a brand's suppliers (fournisseurs)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/brands/{brandId}/suppliers","href":"/api-reference/catalog/list-a-brands-suppliers-fournisseurs"},{"title":"Replace a brand's supplier (fournisseur) set","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/brands/{brandId}/suppliers","href":"/api-reference/catalog/replace-a-brands-supplier-fournisseur-set"},{"title":"Enrich a single brand or product synchronously","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/catalog/enrich","href":"/api-reference/catalog/enrich-a-single-brand-or-product-synchronously"},{"title":"Upload a supplier PDF catalogue for extraction","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/catalog/imports","href":"/api-reference/catalog/upload-a-supplier-pdf-catalogue-for-extraction"},{"title":"Poll a catalogue-import job's status and proposed products","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/catalog/imports/{jobId}","href":"/api-reference/catalog/poll-a-catalogue-import-jobs-status-and-proposed-products"},{"title":"List catalog kits (coffrets, nomenclatures)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/kits","href":"/api-reference/catalog/list-catalog-kits-coffrets-nomenclatures"},{"title":"Create a kit (coffret / nomenclature / BOM)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/kits","href":"/api-reference/catalog/create-a-kit-coffret-nomenclature-bom"},{"title":"Update a kit (coffret / nomenclature)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/kits/{id}","href":"/api-reference/catalog/update-a-kit-coffret-nomenclature"},{"title":"Deactivate (archive) a kit (coffret)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/kits/{id}/deactivate","href":"/api-reference/catalog/deactivate-archive-a-kit-coffret"},{"title":"Resolve a kit's price and explosion (nomenclature)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/kits/{id}/resolve","href":"/api-reference/catalog/resolve-a-kits-price-and-explosion-nomenclature"},{"title":"List markdown schedules (démarques / soldes)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/markdowns","href":"/api-reference/catalog/list-markdown-schedules-démarques-soldes"},{"title":"Set a product's markdown schedule (démarque programmée)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/markdowns","href":"/api-reference/catalog/set-a-products-markdown-schedule-démarque-programmée"},{"title":"Resolve a product's markdown price (prix démarqué)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/markdowns/{productId}","href":"/api-reference/catalog/resolve-a-products-markdown-price-prix-démarqué"},{"title":"Deactivate a product's markdown schedule (fin de démarque)","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/markdowns/{productId}","href":"/api-reference/catalog/deactivate-a-products-markdown-schedule-fin-de-démarque"},{"title":"List / search catalog products (produits, articles)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/products","href":"/api-reference/catalog/list-search-catalog-products-produits-articles"},{"title":"Create a product (produit)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/products","href":"/api-reference/catalog/create-a-product-produit"},{"title":"Bulk-import products","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/products/import","href":"/api-reference/catalog/bulk-import-products"},{"title":"List the sellable catalogue (produits + prix de vente TTC)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/products/sellable","href":"/api-reference/catalog/list-the-sellable-catalogue-produits-+-prix-de-vente-ttc"},{"title":"Get a product (produit) by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/products/{id}","href":"/api-reference/catalog/get-a-product-produit-by-id"},{"title":"Update a product (produit)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/products/{id}","href":"/api-reference/catalog/update-a-product-produit"},{"title":"Get a product's priced sellable units (prix de vente TTC)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/products/{id}/units","href":"/api-reference/catalog/get-a-products-priced-sellable-units-prix-de-vente-ttc"},{"title":"Global cross-entity search (recherche globale)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/search","href":"/api-reference/catalog/global-cross-entity-search-recherche-globale"},{"title":"List price overrides (prix magasin) by store or by product","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/store-prices","href":"/api-reference/catalog/list-price-overrides-prix-magasin-by-store-or-by-product"},{"title":"Set a store price override (prix magasin / surcharge)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/store-prices","href":"/api-reference/catalog/set-a-store-price-override-prix-magasin-surcharge"},{"title":"Clear a store price override","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/store-prices","href":"/api-reference/catalog/clear-a-store-price-override"},{"title":"List taxonomy axes (classification, familles)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/taxonomy","href":"/api-reference/catalog/list-taxonomy-axes-classification-familles"},{"title":"Create a taxonomy axis (axe de classification)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/taxonomy","href":"/api-reference/catalog/create-a-taxonomy-axis-axe-de-classification"},{"title":"List the importable taxonomy presets (librairie d'axes)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/taxonomy/presets","href":"/api-reference/catalog/list-the-importable-taxonomy-presets-librairie-daxes"},{"title":"Save the current taxonomy as an internal preset","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/taxonomy/presets","href":"/api-reference/catalog/save-the-current-taxonomy-as-an-internal-preset"},{"title":"Delete an internal taxonomy preset","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/taxonomy/presets/{presetId}","href":"/api-reference/catalog/delete-an-internal-taxonomy-preset"},{"title":"Import a taxonomy preset (importer une librairie d'axes)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/taxonomy/presets/{presetId}/import","href":"/api-reference/catalog/import-a-taxonomy-preset-importer-une-librairie-daxes"},{"title":"Preview a taxonomy preset import (dry run)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/taxonomy/presets/{presetId}/preview","href":"/api-reference/catalog/preview-a-taxonomy-preset-import-dry-run"},{"title":"Get a taxonomy axis (axe de classification) by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/taxonomy/{axisId}","href":"/api-reference/catalog/get-a-taxonomy-axis-axe-de-classification-by-id"},{"title":"Update a taxonomy axis (axe de classification)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/taxonomy/{axisId}","href":"/api-reference/catalog/update-a-taxonomy-axis-axe-de-classification"},{"title":"Delete a taxonomy axis (supprimer un axe)","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/taxonomy/{axisId}","href":"/api-reference/catalog/delete-a-taxonomy-axis-supprimer-un-axe"},{"title":"Deactivate (archive) a taxonomy axis (axe de classification)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/taxonomy/{axisId}/deactivate","href":"/api-reference/catalog/deactivate-archive-a-taxonomy-axis-axe-de-classification"},{"title":"Reparent a taxonomy node (déplacer un nœud)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/taxonomy/{axisId}/nodes/{nodeId}/move","href":"/api-reference/catalog/reparent-a-taxonomy-node-déplacer-un-nœud"}]},{"group":"Inventory","pages":[{"title":"List cadence configs (cadence de comptage tournant)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/cycle-counts/cadences","href":"/api-reference/inventory/list-cadence-configs-cadence-de-comptage-tournant"},{"title":"Upsert a store's cadence config","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/cycle-counts/cadences","href":"/api-reference/inventory/upsert-a-stores-cadence-config"},{"title":"Plan a store's due cycle counts (comptage tournant)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/cycle-counts/plan","href":"/api-reference/inventory/plan-a-stores-due-cycle-counts-comptage-tournant"},{"title":"Set a SKU's count policy","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/cycle-counts/policies","href":"/api-reference/inventory/set-a-skus-count-policy"},{"title":"Complete a count task","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/cycle-counts/tasks/{skuId}/complete","href":"/api-reference/inventory/complete-a-count-task"},{"title":"Skip a count task","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/cycle-counts/tasks/{skuId}/skip","href":"/api-reference/inventory/skip-a-count-task"},{"title":"List stock items (stock / inventaire)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory","href":"/api-reference/inventory/list-stock-items-stock-inventaire"},{"title":"List count sessions (comptages / inventaires physiques)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory/counts","href":"/api-reference/inventory/list-count-sessions-comptages-inventaires-physiques"},{"title":"Open a count session (comptage / inventaire physique)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/inventory/counts","href":"/api-reference/inventory/open-a-count-session-comptage-inventaire-physique"},{"title":"Get a count session by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory/counts/{sessionId}","href":"/api-reference/inventory/get-a-count-session-by-id"},{"title":"Close a count session","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/inventory/counts/{sessionId}/close","href":"/api-reference/inventory/close-a-count-session"},{"title":"Record a counted line","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/inventory/counts/{sessionId}/lines","href":"/api-reference/inventory/record-a-counted-line"},{"title":"Get a count session's valued variance","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory/counts/{sessionId}/variance","href":"/api-reference/inventory/get-a-count-sessions-valued-variance"},{"title":"List stock in transit between stores","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory/in-transit","href":"/api-reference/inventory/list-stock-in-transit-between-stores"},{"title":"List stock write-offs (démarque)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory/write-offs","href":"/api-reference/inventory/list-stock-write-offs-démarque"},{"title":"Record a stock write-off (démarque)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/inventory/write-offs","href":"/api-reference/inventory/record-a-stock-write-off-démarque"},{"title":"Approve a stock write-off","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/inventory/write-offs/{id}/approve","href":"/api-reference/inventory/approve-a-stock-write-off"},{"title":"Reject a stock write-off","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/inventory/write-offs/{id}/reject","href":"/api-reference/inventory/reject-a-stock-write-off"},{"title":"Get a stock item by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/inventory/{id}","href":"/api-reference/inventory/get-a-stock-item-by-id"}]},{"group":"Replenishment","pages":[{"title":"List reorder policies (seuils de réapprovisionnement)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/reorder-policies","href":"/api-reference/replenishment/list-reorder-policies-seuils-de-réapprovisionnement"},{"title":"Set a reorder policy (seuil min/max) for one SKU × store","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/reorder-policies","href":"/api-reference/replenishment/set-a-reorder-policy-seuil-minmax-for-one-sku-×-store"},{"title":"Generate replenishment suggestions (suggestions de réapprovisionnement) for a store","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/reorder-policies/suggestions","href":"/api-reference/replenishment/generate-replenishment-suggestions-suggestions-de-réapprovisionnement-for-a-store"}]},{"group":"Transfer","pages":[{"title":"List transfers","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/transfers","href":"/api-reference/transfer/list-transfers"},{"title":"Request a transfer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/transfers","href":"/api-reference/transfer/request-a-transfer"},{"title":"Get a transfer by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/transfers/{transferId}","href":"/api-reference/transfer/get-a-transfer-by-id"},{"title":"Cancel a transfer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/transfers/{transferId}/cancel","href":"/api-reference/transfer/cancel-a-transfer"},{"title":"Get a transfer's receipt discrepancy","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/transfers/{transferId}/discrepancy","href":"/api-reference/transfer/get-a-transfers-receipt-discrepancy"},{"title":"Receive a transfer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/transfers/{transferId}/receive","href":"/api-reference/transfer/receive-a-transfer"},{"title":"Ship a transfer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/transfers/{transferId}/ship","href":"/api-reference/transfer/ship-a-transfer"}]},{"group":"Procurement","pages":[{"title":"List the network's plans","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/plans","href":"/api-reference/procurement/list-the-networks-plans"},{"title":"Open a plan","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/plans","href":"/api-reference/procurement/open-a-plan"},{"title":"Get one plan","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/plans/{planId}","href":"/api-reference/procurement/get-one-plan"},{"title":"Edit a draft plan","deprecated":null,"version":null,"openapi":"/openapi.json patch /v1/plans/{planId}","href":"/api-reference/procurement/edit-a-draft-plan"},{"title":"Cancel a draft plan","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/plans/{planId}/cancel","href":"/api-reference/procurement/cancel-a-draft-plan"},{"title":"List the lines of one plan","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/plans/{planId}/items","href":"/api-reference/procurement/list-the-lines-of-one-plan"},{"title":"Add a line to a draft plan","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/plans/{planId}/items","href":"/api-reference/procurement/add-a-line-to-a-draft-plan"},{"title":"Remove a line from a draft plan","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/plans/{planId}/items/{itemId}","href":"/api-reference/procurement/remove-a-line-from-a-draft-plan"},{"title":"Judge a plan against the network's rules","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/plans/{planId}/rules","href":"/api-reference/procurement/judge-a-plan-against-the-networks-rules"},{"title":"Move a plan one step along its lifecycle","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/plans/{planId}/transitions","href":"/api-reference/procurement/move-a-plan-one-step-along-its-lifecycle"},{"title":"List purchase orders (commandes fournisseur)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/purchase-orders","href":"/api-reference/procurement/list-purchase-orders-commandes-fournisseur"},{"title":"Create a purchase order (commande fournisseur / bon de commande)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/purchase-orders","href":"/api-reference/procurement/create-a-purchase-order-commande-fournisseur-bon-de-commande"},{"title":"Get a purchase order by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/purchase-orders/{orderId}","href":"/api-reference/procurement/get-a-purchase-order-by-id"},{"title":"Receive against a purchase order (réception de marchandise)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/purchase-orders/{orderId}/receive","href":"/api-reference/procurement/receive-against-a-purchase-order-réception-de-marchandise"},{"title":"Get a purchase order's received-vs-ordered variance (écart de réception)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/purchase-orders/{orderId}/variance","href":"/api-reference/procurement/get-a-purchase-orders-received-vs-ordered-variance-écart-de-réception"},{"title":"List returns-to-vendor (retours fournisseur)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/return-to-vendors","href":"/api-reference/procurement/list-returns-to-vendor-retours-fournisseur"},{"title":"Raise a return-to-vendor (retour fournisseur)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/return-to-vendors","href":"/api-reference/procurement/raise-a-return-to-vendor-retour-fournisseur"},{"title":"Get a return-to-vendor by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/return-to-vendors/{rtvId}","href":"/api-reference/procurement/get-a-return-to-vendor-by-id"},{"title":"Cancel a return-to-vendor","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/return-to-vendors/{rtvId}/cancel","href":"/api-reference/procurement/cancel-a-return-to-vendor"},{"title":"Credit a return-to-vendor","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/return-to-vendors/{rtvId}/credit","href":"/api-reference/procurement/credit-a-return-to-vendor"},{"title":"Ship a return-to-vendor","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/return-to-vendors/{rtvId}/ship","href":"/api-reference/procurement/ship-a-return-to-vendor"},{"title":"List suppliers (fournisseurs)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/suppliers","href":"/api-reference/procurement/list-suppliers-fournisseurs"},{"title":"Create a supplier","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/suppliers","href":"/api-reference/procurement/create-a-supplier"},{"title":"Get a supplier by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/suppliers/{supplierId}","href":"/api-reference/procurement/get-a-supplier-by-id"},{"title":"Update a supplier (fournisseur)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/suppliers/{supplierId}","href":"/api-reference/procurement/update-a-supplier-fournisseur"},{"title":"Deactivate a supplier","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/suppliers/{supplierId}/deactivate","href":"/api-reference/procurement/deactivate-a-supplier"}]},{"group":"Network","pages":[{"title":"List the companies (sociétés) the network trades under","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/companies","href":"/api-reference/network/list-the-companies-sociétés-the-network-trades-under"},{"title":"Create a company (société)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/companies","href":"/api-reference/network/create-a-company-société"},{"title":"Attach a store to a company and set its establishment number","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/companies/stores/{storeId}","href":"/api-reference/network/attach-a-store-to-a-company-and-set-its-establishment-number"},{"title":"Get a company with its identity history","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/companies/{companyId}","href":"/api-reference/network/get-a-company-with-its-identity-history"},{"title":"Edit a company's fiscal identity (appends a version)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/companies/{companyId}/identity","href":"/api-reference/network/edit-a-companys-fiscal-identity-appends-a-version"},{"title":"Resolve the fiscal header a store's documents print","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fiscal-identity/stores/{storeId}","href":"/api-reference/network/resolve-the-fiscal-header-a-stores-documents-print"},{"title":"List the paired register peripherals","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fleet","href":"/api-reference/network/list-the-paired-register-peripherals"},{"title":"Pair a device onto a register","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/fleet","href":"/api-reference/network/pair-a-device-onto-a-register"},{"title":"Get a paired device by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/fleet/{deviceId}","href":"/api-reference/network/get-a-paired-device-by-id"},{"title":"Update a paired device","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/fleet/{deviceId}","href":"/api-reference/network/update-a-paired-device"},{"title":"Retire (unpair) a paired device","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/fleet/{deviceId}/retire","href":"/api-reference/network/retire-unpair-a-paired-device"},{"title":"List the network's regions","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/regions","href":"/api-reference/network/list-the-networks-regions"},{"title":"Create a region","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/regions","href":"/api-reference/network/create-a-region"},{"title":"Get a region by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/regions/{regionId}","href":"/api-reference/network/get-a-region-by-id"},{"title":"Update a region","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/regions/{regionId}","href":"/api-reference/network/update-a-region"},{"title":"Deactivate (archive) a region","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/regions/{regionId}/deactivate","href":"/api-reference/network/deactivate-archive-a-region"},{"title":"List the network's stores","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/stores","href":"/api-reference/network/list-the-networks-stores"},{"title":"Provision a store","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/stores","href":"/api-reference/network/provision-a-store"},{"title":"Get a store by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/stores/{storeId}","href":"/api-reference/network/get-a-store-by-id"},{"title":"Update a store","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/stores/{storeId}","href":"/api-reference/network/update-a-store"},{"title":"Deactivate (close) a store","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/stores/{storeId}/deactivate","href":"/api-reference/network/deactivate-close-a-store"},{"title":"Reactivate (reopen) a store","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/stores/{storeId}/reactivate","href":"/api-reference/network/reactivate-reopen-a-store"},{"title":"List the network's VAT / tax codes","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/tax-codes","href":"/api-reference/network/list-the-networks-vat-tax-codes"},{"title":"Create a VAT / tax code","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/tax-codes","href":"/api-reference/network/create-a-vat-tax-code"},{"title":"Get a tax code by its code","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/tax-codes/{code}","href":"/api-reference/network/get-a-tax-code-by-its-code"},{"title":"Update a VAT / tax code","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/tax-codes/{code}","href":"/api-reference/network/update-a-vat-tax-code"},{"title":"Deactivate (archive) a VAT / tax code","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/tax-codes/{code}/deactivate","href":"/api-reference/network/deactivate-archive-a-vat-tax-code"}]}]},{"group":"Finance","pages":[{"group":"Finance","pages":[{"title":"List finance entries","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance","href":"/api-reference/finance/list-finance-entries"},{"title":"Export a generic accounting file (journal entries / configurable CSV)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/accounting-export","href":"/api-reference/finance/export-a-generic-accounting-file-journal-entries-configurable-csv"},{"title":"Report cash discrepancies for a period","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/cash-discrepancy","href":"/api-reference/finance/report-cash-discrepancies-for-a-period"},{"title":"Get one session's cash discrepancy","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/cash-discrepancy/{sessionId}","href":"/api-reference/finance/get-one-sessions-cash-discrepancy"},{"title":"List deposit batches","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/deposits","href":"/api-reference/finance/list-deposit-batches"},{"title":"Open a deposit batch","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/finance/deposits","href":"/api-reference/finance/open-a-deposit-batch"},{"title":"Deposit trend (declared vs settled per day)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/deposits/trend","href":"/api-reference/finance/deposit-trend-declared-vs-settled-per-day"},{"title":"Get a deposit batch by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/deposits/{batchId}","href":"/api-reference/finance/get-a-deposit-batch-by-id"},{"title":"Settle a deposit line","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/finance/deposits/{batchId}/lines/settle","href":"/api-reference/finance/settle-a-deposit-line"},{"title":"Reconcile a deposit batch","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/finance/deposits/{batchId}/reconcile","href":"/api-reference/finance/reconcile-a-deposit-batch"},{"title":"Export the FEC accounting file","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/fec","href":"/api-reference/finance/export-the-fec-accounting-file"},{"title":"Report the period close","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/period-close","href":"/api-reference/finance/report-the-period-close"},{"title":"Close (lock) a fiscal period","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/finance/period-close","href":"/api-reference/finance/close-lock-a-fiscal-period"},{"title":"Get a finance entry by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/finance/{entryId}","href":"/api-reference/finance/get-a-finance-entry-by-id"},{"title":"Windowed sales analytics report","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/reports/sales","href":"/api-reference/finance/windowed-sales-analytics-report"},{"title":"List finalized sale tickets","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/sales","href":"/api-reference/finance/list-finalized-sale-tickets"},{"title":"Tally one salesperson's day","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/sales/seller-day","href":"/api-reference/finance/tally-one-salespersons-day"},{"title":"Summarise sales into dashboard KPIs","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/sales/summary","href":"/api-reference/finance/summarise-sales-into-dashboard-kpis"},{"title":"Get a sale ticket by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/sales/{id}","href":"/api-reference/finance/get-a-sale-ticket-by-id"}]},{"group":"Billing","pages":[{"title":"Read the billing catalogue and current plan","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/credits/billing","href":"/api-reference/billing/read-the-billing-catalogue-and-current-plan"},{"title":"Grant SMS credits to the account wallet (crédit)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/credits/grant","href":"/api-reference/billing/grant-sms-credits-to-the-account-wallet-crédit"},{"title":"Read the credit wallet, ledger and usage (crédit, recharge)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/credits/overview","href":"/api-reference/billing/read-the-credit-wallet-ledger-and-usage-crédit-recharge"},{"title":"Open a Stripe Checkout session for a monthly plan","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/credits/plan","href":"/api-reference/billing/open-a-stripe-checkout-session-for-a-monthly-plan"},{"title":"Open a Stripe Checkout session for a credit top-up","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/credits/topup","href":"/api-reference/billing/open-a-stripe-checkout-session-for-a-credit-top-up"}]},{"group":"Instruments","pages":[{"title":"List stored-value instruments (carte cadeau, avoir)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/giftcards","href":"/api-reference/instruments/list-stored-value-instruments-carte-cadeau-avoir"},{"title":"Issue a stored-value instrument (carte cadeau, avoir)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/giftcards","href":"/api-reference/instruments/issue-a-stored-value-instrument-carte-cadeau-avoir"},{"title":"Report stored-value breakage across the whole network (carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/giftcards/breakage","href":"/api-reference/instruments/report-stored-value-breakage-across-the-whole-network-carte-cadeau"},{"title":"Get an instrument by its bearer code (carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/giftcards/by-code/{code}","href":"/api-reference/instruments/get-an-instrument-by-its-bearer-code-carte-cadeau"},{"title":"Bulk-issue stored-value instruments (carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/giftcards/import","href":"/api-reference/instruments/bulk-issue-stored-value-instruments-carte-cadeau"},{"title":"Redeem value from an instrument (carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/giftcards/redemptions","href":"/api-reference/instruments/redeem-value-from-an-instrument-carte-cadeau"},{"title":"Get an instrument by id (carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/giftcards/{id}","href":"/api-reference/instruments/get-an-instrument-by-id-carte-cadeau"},{"title":"Reload an instrument with more value (recharge carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/giftcards/{id}/reload","href":"/api-reference/instruments/reload-an-instrument-with-more-value-recharge-carte-cadeau"},{"title":"Void an instrument (carte cadeau)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/giftcards/{id}/void","href":"/api-reference/instruments/void-an-instrument-carte-cadeau"}]}]},{"group":"Clients \u0026 fidélité","pages":[{"group":"Customers","pages":[{"title":"List customers","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/customers","href":"/api-reference/customers/list-customers"},{"title":"Register a customer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/customers","href":"/api-reference/customers/register-a-customer"},{"title":"Report the customer base by RFM segment (segment client)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/customers/segments","href":"/api-reference/customers/report-the-customer-base-by-rfm-segment-segment-client"},{"title":"Get a customer by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/customers/{id}","href":"/api-reference/customers/get-a-customer-by-id"},{"title":"Update a customer profile","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/customers/{id}","href":"/api-reference/customers/update-a-customer-profile"},{"title":"Get a customer's consent record","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/customers/{id}/consent","href":"/api-reference/customers/get-a-customers-consent-record"},{"title":"Record a customer consent decision","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/customers/{id}/consent","href":"/api-reference/customers/record-a-customer-consent-decision"},{"title":"Deactivate a customer (reversible)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/customers/{id}/deactivation","href":"/api-reference/customers/deactivate-a-customer-reversible"},{"title":"Erase a customer's personal data (GDPR)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/customers/{id}/erasure","href":"/api-reference/customers/erase-a-customers-personal-data-gdpr"},{"title":"Export a customer's personal data (GDPR)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/customers/{id}/export","href":"/api-reference/customers/export-a-customers-personal-data-gdpr"},{"title":"Get a customer's purchase history","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/customers/{id}/purchases","href":"/api-reference/customers/get-a-customers-purchase-history"},{"title":"Reactivate a deactivated customer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/customers/{id}/reactivation","href":"/api-reference/customers/reactivate-a-deactivated-customer"}]},{"group":"Loyalty","pages":[{"title":"List loyalty members (fidélité)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/loyalty","href":"/api-reference/loyalty/list-loyalty-members-fidélité"},{"title":"Get a customer's derived loyalty account (fidélité, palier)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/loyalty/accounts/{customerId}","href":"/api-reference/loyalty/get-a-customers-derived-loyalty-account-fidélité-palier"},{"title":"Accrue loyalty points for a sale (points de fidélité)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/loyalty/accruals","href":"/api-reference/loyalty/accrue-loyalty-points-for-a-sale-points-de-fidélité"},{"title":"Get the active loyalty program config (fidélité, paliers)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/loyalty/config","href":"/api-reference/loyalty/get-the-active-loyalty-program-config-fidélité-paliers"},{"title":"Replace the loyalty program config (fidélité, paliers)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/loyalty/config","href":"/api-reference/loyalty/replace-the-loyalty-program-config-fidélité-paliers"},{"title":"Redeem loyalty points for a discount (points de fidélité)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/loyalty/redemptions","href":"/api-reference/loyalty/redeem-loyalty-points-for-a-discount-points-de-fidélité"},{"title":"Get a loyalty member by id (fidélité)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/loyalty/{memberId}","href":"/api-reference/loyalty/get-a-loyalty-member-by-id-fidélité"}]},{"group":"Notifications","pages":[{"title":"Get per-channel notification availability","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/notifications/channels","href":"/api-reference/notifications/get-per-channel-notification-availability"},{"title":"Send a finalized sale's receipt to the customer","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/notifications/receipt","href":"/api-reference/notifications/send-a-finalized-sales-receipt-to-the-customer"}]}]},{"group":"Marketing \u0026 promotions","pages":[{"group":"Promotions","pages":[{"title":"List the coupon catalogue (code promo)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/coupons","href":"/api-reference/promotions/list-the-coupon-catalogue-code-promo"},{"title":"Create one coupon under a chosen code (code promo)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/coupons","href":"/api-reference/promotions/create-one-coupon-under-a-chosen-code-code-promo"},{"title":"Batch-generate a run of coupon codes (code promo)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/coupons/batch","href":"/api-reference/promotions/batch-generate-a-run-of-coupon-codes-code-promo"},{"title":"Preview a coupon against a basket total (code promo, bon de réduction)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/coupons/validate","href":"/api-reference/promotions/preview-a-coupon-against-a-basket-total-code-promo-bon-de-réduction"},{"title":"Edit an existing coupon (code promo)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/coupons/{id}","href":"/api-reference/promotions/edit-an-existing-coupon-code-promo"},{"title":"Deactivate a coupon (code promo)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/coupons/{id}/deactivate","href":"/api-reference/promotions/deactivate-a-coupon-code-promo"},{"title":"Apply an authorised discount to a whole ticket","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/discounts/ticket","href":"/api-reference/promotions/apply-an-authorised-discount-to-a-whole-ticket"},{"title":"Get an applied discount by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/discounts/{id}","href":"/api-reference/promotions/get-an-applied-discount-by-id"},{"title":"List automatic promotion rules","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/promotions","href":"/api-reference/promotions/list-automatic-promotion-rules"},{"title":"Create or replace an automatic promotion rule","description":"UPSERTS one automatic promotion rule by `id`: there is no separate create and update, and no PATCH. Posting an existing id REPLACES that rule wholesale — every field not in your body is destroyed, including the reward mechanics. The read-modify-write path is `GET /v1/promotions/{id}/rule` (the directory reads carry no mechanics): read the live rule there, change the one field you were asked to change, and send the whole object back. If that read 404s (the promotion carries no configured rule) STOP and ask; do not reconstruct plausible values to satisfy the schema, as that silently overwrites a live pricing rule. Pick the `type` by the mechanic you want: `bogo` (buy `buyQuantity` of `buySkuId`, get `getQuantity` of `getSkuId` at `getDiscountBps` off — 10000 bps makes it free), `threshold` (once `skuId` reaches `minQuantity` units, a percent or flat `reward` comes off that SKU's subtotal) or `bundle` (buy the `components` together and pay `bundlePriceCents`). Money is integer CENTS and percentages are BASIS POINTS (1000 = 10%). `validFrom`/`validUntil` are inclusive ISO-8601 instants (`Z` or a UTC offset) and `validUntil` must not precede `validFrom`. Use this for an always-on offer any matching basket earns; use `POST /v1/coupons` instead when the reduction must be unlocked by a code the customer presents.","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/promotions","href":"/api-reference/promotions/create-or-replace-an-automatic-promotion-rule"},{"title":"Evaluate the active promotion rules against a cart","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/promotions/evaluate","href":"/api-reference/promotions/evaluate-the-active-promotion-rules-against-a-cart"},{"title":"Get a promotion by id","description":"Resolves ONE automatic promotion by its rule id and returns the directory projection: `id`, `name`, `type`, `status`, `validFrom`, `validUntil`. That is the whole payload. It does NOT carry the rule's reward mechanics — no `skuId`, `minQuantity`, `reward`, `components`, `bundlePriceCents` or `buySkuId`. Use it to check one promotion's lifecycle status or validity window; to read the mechanics (before rewriting a live rule) call `GET /v1/promotions/{id}/rule` instead. 404s when no rule carries the id.","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/promotions/{id}","href":"/api-reference/promotions/get-a-promotion-by-id"},{"title":"Update an existing promotion rule","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/promotions/{id}","href":"/api-reference/promotions/update-an-existing-promotion-rule"},{"title":"Deactivate a promotion rule","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/promotions/{id}/deactivate","href":"/api-reference/promotions/deactivate-a-promotion-rule"},{"title":"Get a promotion's full rule definition","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/promotions/{id}/rule","href":"/api-reference/promotions/get-a-promotions-full-rule-definition"}]},{"group":"Marketing","pages":[{"title":"List marketing campaigns (campagne)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/campaigns","href":"/api-reference/marketing/list-marketing-campaigns-campagne"},{"title":"Author a marketing campaign (campagne)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/campaigns","href":"/api-reference/marketing/author-a-marketing-campaign-campagne"},{"title":"Get a campaign by id (campagne)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/campaigns/{id}","href":"/api-reference/marketing/get-a-campaign-by-id-campagne"},{"title":"Preview a campaign's recipients without sending (campagne, relance)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/campaigns/{id}/dry-run","href":"/api-reference/marketing/preview-a-campaigns-recipients-without-sending-campagne-relance"},{"title":"Send a campaign to its consented audience (campagne, relance)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/campaigns/{id}/send","href":"/api-reference/marketing/send-a-campaign-to-its-consented-audience-campagne-relance"}]}]},{"group":"Services","pages":[{"group":"Rentals","pages":[{"title":"List rentals","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/rentals","href":"/api-reference/rentals/list-rentals"},{"title":"Open a rental","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/rentals","href":"/api-reference/rentals/open-a-rental"},{"title":"Get a rental by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/rentals/{rentalId}","href":"/api-reference/rentals/get-a-rental-by-id"},{"title":"Flag a rental as overdue","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/rentals/{rentalId}/mark-overdue","href":"/api-reference/rentals/flag-a-rental-as-overdue"},{"title":"Return a rental and settle the caution","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/rentals/{rentalId}/return","href":"/api-reference/rentals/return-a-rental-and-settle-the-caution"}]},{"group":"Repairs","pages":[{"title":"List repair orders","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/repairs","href":"/api-reference/repairs/list-repair-orders"},{"title":"Take an article in for repair","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/repairs","href":"/api-reference/repairs/take-an-article-in-for-repair"},{"title":"Get a repair order by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/repairs/{orderId}","href":"/api-reference/repairs/get-a-repair-order-by-id"},{"title":"Record collection of a repaired article","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/repairs/{orderId}/collect","href":"/api-reference/repairs/record-collection-of-a-repaired-article"},{"title":"Mark a repair order ready for pickup","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/repairs/{orderId}/ready","href":"/api-reference/repairs/mark-a-repair-order-ready-for-pickup"},{"title":"Send a repair order to the workshop","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/repairs/{orderId}/to-workshop","href":"/api-reference/repairs/send-a-repair-order-to-the-workshop"},{"title":"Declare a repair order unrepairable","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/repairs/{orderId}/unrepairable","href":"/api-reference/repairs/declare-a-repair-order-unrepairable"}]}]},{"group":"Assistant","pages":[{"title":"Ask the in-till assistant a question","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/assistant/chat","href":"/api-reference/assistant/ask-the-in-till-assistant-a-question"}]},{"group":"Intégrations \u0026 données","pages":[{"group":"Integrations","pages":[{"title":"List the connectors (intégration, connecteur)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/integrations","href":"/api-reference/integrations/list-the-connectors-intégration-connecteur"},{"title":"Read one connector (connecteur)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/integrations/{key}","href":"/api-reference/integrations/read-one-connector-connecteur"},{"title":"Configure a connector (connecteur, intégration)","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/integrations/{key}","href":"/api-reference/integrations/configure-a-connector-connecteur-intégration"},{"title":"Disable a connector (connecteur)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/integrations/{key}/disable","href":"/api-reference/integrations/disable-a-connector-connecteur"},{"title":"Enable a connector (connecteur)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/integrations/{key}/enable","href":"/api-reference/integrations/enable-a-connector-connecteur"}]},{"group":"Merchandising import","pages":[{"title":"Bulk-import proposed promotions (promotions)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/import/promotions","href":"/api-reference/merchandising-import/bulk-import-proposed-promotions-promotions"},{"title":"Bulk-import proposed replenishment plans (commandes de réapprovisionnement)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/import/purchase-orders","href":"/api-reference/merchandising-import/bulk-import-proposed-replenishment-plans-commandes-de-réapprovisionnement"},{"title":"Bulk-import proposed inter-store transfer plans (transferts inter-magasins)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/import/transfers","href":"/api-reference/merchandising-import/bulk-import-proposed-inter-store-transfer-plans-transferts-inter-magasins"}]},{"group":"Data platform","pages":[{"title":"Export a resource's changed rows (incremental CDC feed)","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/export/{resource}","href":"/api-reference/data-platform/export-a-resources-changed-rows-incremental-cdc-feed"}]}]},{"group":"Système","pages":[{"group":"Auth","pages":[{"title":"Resolve the authenticated actor's identity and effective POS scopes (MCP gateway alias)","deprecated":null,"version":null,"openapi":"/openapi.json get /api/auth/whoami","href":"/api-reference/auth/resolve-the-authenticated-actors-identity-and-effective-pos-scopes-mcp-gateway-alias"},{"title":"Request a single-use manager elevation grant","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/auth/elevate","href":"/api-reference/auth/request-a-single-use-manager-elevation-grant"},{"title":"Set or rotate the calling actor's own elevation PIN","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/auth/elevation/pin","href":"/api-reference/auth/set-or-rotate-the-calling-actors-own-elevation-pin"},{"title":"Resolve the authenticated actor's identity and effective POS scopes","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/auth/whoami","href":"/api-reference/auth/resolve-the-authenticated-actors-identity-and-effective-pos-scopes"},{"title":"Tally the authenticated actor's own day","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/me/day-summary","href":"/api-reference/auth/tally-the-authenticated-actors-own-day"},{"title":"Get the POS permission manifest","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/permissions/manifest","href":"/api-reference/auth/get-the-pos-permission-manifest"}]},{"group":"Team","pages":[{"title":"List team members","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/team","href":"/api-reference/team/list-team-members"},{"title":"Provision a team member","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/team","href":"/api-reference/team/provision-a-team-member"},{"title":"Get a team member by id","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/team/{memberId}","href":"/api-reference/team/get-a-team-member-by-id"},{"title":"Replace a team member's directory record","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/team/{memberId}","href":"/api-reference/team/replace-a-team-members-directory-record"},{"title":"Offboard a team member (disable sign-in)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/team/{memberId}/deactivate","href":"/api-reference/team/offboard-a-team-member-disable-sign-in"},{"title":"Get a team member's effective permissions","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/team/{memberId}/permissions","href":"/api-reference/team/get-a-team-members-effective-permissions"},{"title":"Re-onboard a team member (restore sign-in)","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/team/{memberId}/reactivate","href":"/api-reference/team/re-onboard-a-team-member-restore-sign-in"},{"title":"Assign a scoped role to a team member","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/team/{memberId}/roles","href":"/api-reference/team/assign-a-scoped-role-to-a-team-member"},{"title":"Revoke a scoped role from a team member","deprecated":null,"version":null,"openapi":"/openapi.json delete /v1/team/{memberId}/roles","href":"/api-reference/team/revoke-a-scoped-role-from-a-team-member"}]},{"group":"Settings","pages":[{"title":"Read the order-routing rules","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/routing-rules","href":"/api-reference/settings/read-the-order-routing-rules"},{"title":"Replace the order-routing rules","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/routing-rules","href":"/api-reference/settings/replace-the-order-routing-rules"},{"title":"List the network's business rules","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/rules","href":"/api-reference/settings/list-the-networks-business-rules"},{"title":"Create a rule from a catalogue template","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/rules","href":"/api-reference/settings/create-a-rule-from-a-catalogue-template"},{"title":"List the network's rulesets","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/rules/groups","href":"/api-reference/settings/list-the-networks-rulesets"},{"title":"Create a ruleset","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/rules/groups","href":"/api-reference/settings/create-a-ruleset"},{"title":"Change a ruleset","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/rules/groups/{groupId}","href":"/api-reference/settings/change-a-ruleset"},{"title":"List the rule catalogue","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/rules/templates","href":"/api-reference/settings/list-the-rule-catalogue"},{"title":"Get one rule and its per-subject thresholds","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/rules/{ruleId}","href":"/api-reference/settings/get-one-rule-and-its-per-subject-thresholds"},{"title":"Change a rule's threshold, mode, perimeter or switch","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/rules/{ruleId}","href":"/api-reference/settings/change-a-rules-threshold-mode-perimeter-or-switch"},{"title":"Read the network settings","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/settings","href":"/api-reference/settings/read-the-network-settings"},{"title":"Replace the network settings","deprecated":null,"version":null,"openapi":"/openapi.json put /v1/settings","href":"/api-reference/settings/replace-the-network-settings"}]},{"group":"Devices","pages":[{"title":"Get the active card-terminal provider","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/payment-terminal/config","href":"/api-reference/devices/get-the-active-card-terminal-provider"},{"title":"Run the card-terminal round-trip self-test","deprecated":null,"version":null,"openapi":"/openapi.json post /v1/payment-terminal/test","href":"/api-reference/devices/run-the-card-terminal-round-trip-self-test"}]},{"group":"Audit","pages":[{"title":"Query the central audit log","deprecated":null,"version":null,"openapi":"/openapi.json get /v1/audit","href":"/api-reference/audit/query-the-central-audit-log"}]}]}]}]}]},"title":"Evaluate the active promotion rules against a cart - Solya POS Docs","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-WRhTSUDL.js","utils-ChMov4Kr.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-_REmC2bI.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp6nVRCu.js","snippetPresets-DZadmXoU.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CY2WdoTl.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-DwYG-Q4l.js","shallow-BXQIGwv4.js","getApiPlaygroundDisplay-CK5nK5B9.js","CodeSnippet-TH4a2aGW.js","CodeSnippets-DwsQiOFS.js","Page-R3M_BF4L.js","getPastedJson-DD7kUzi_.js","icon-holE3QoJ.js","MethodPill-DUW0T8us.js","DuplicateIcon-CI_p4be-.js","createIcon-BdbRvavb.js","DynamicMarkdown-DN96a4Ur.js","SectionHeading-SCu36A9d.js","axios-vUo_bRtp.js","Markdown-CCeGv-zI.js","clsx-BGBGWFTt.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-Cv_O2fky.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-2C5OB2eV.js"]}