Redemption lets a customer spend their points to reduce what they pay. It builds directly on Track Orders: you add a hold step that locks the points, then submit the same order call with a reference to that hold. The hold prevents double-spending and guarantees the points are reserved for this transaction only.
If you haven’t implemented Track Orders yet, do that first. Redemption is the order call plus one extra step.
Holds are time-limited (typically 10 minutes). If the order isn’t completed in time, the points are automatically released back to the customer. Don’t reuse or delay using a holdReference.
This is the standard Track Orders call with one addition, a redemption block carrying the hold reference. Note that totalPaid reflects the discounted amount:
Behind the scenes, Gameball verifies the hold reference, deducts the redeemed points, and rewards new points based on the amount actually paid after redemption, then updates the customer’s redemption and earning history.
The flow above, where the customer is identified by customerId (mobile number, email, or CRM ID) and you hold then redeem against their balance.
Instead of typing a phone number, the cashier scans a QR code the customer shows from their Gameball widget/app or their Virtual Pass. The QR encodes both who the customer is and a one-time security token, so the customer is identified and verified in a single scan, no separate lookup needed.
The hash is a rotating, single-use security token, it changes regularly and expires. Only send it in the Hold Points call, and never store or reuse an old hash. If a scan fails validation, ask the customer to refresh their QR code and scan again.
The same hash can also be generated server-side via the Get Customer Hash API if you need to validate a customer without a live scan.
Gameball Virtual Pass lets customers use QR codes without a mobile app. The pass lives in Apple Wallet (iOS) or PassWallet (Android) and behaves exactly like an app-based QR code.
No additional API integration needed, use the same QR flow above.
Ensure your POS scanners can read digital screens and long string formats.
Was this page helpful?
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Gameball Docs","colors":{"primary":"#FB5819","light":"#FFD800","dark":"#F5DB5B"},"logo":{"light":"https://mintcdn.com/gameball/G3Do1BW89krXAJ48/logo/light.svg?fit=max\u0026auto=format\u0026n=G3Do1BW89krXAJ48\u0026q=85\u0026s=aecb464405fc6a468704d3da3cedc5ae","dark":"https://mintcdn.com/gameball/G3Do1BW89krXAJ48/logo/dark.svg?fit=max\u0026auto=format\u0026n=G3Do1BW89krXAJ48\u0026q=85\u0026s=05dec1e7bb58ddf654926789347480f2"},"favicon":"https://mintcdn.com/gameball/DyB0l4Pe2M9HXiFz/favicon.svg?fit=max\u0026auto=format\u0026n=DyB0l4Pe2M9HXiFz\u0026q=85\u0026s=2159e3f87590969ecc17da52bd808257","api":{"playground":{"display":"interactive","proxy":true},"examples":{"languages":["curl","javascript","python","csharp","go","php","java"]}},"navbar":{"links":[{"href":"mailto:support@gameball.co","label":"Support"}],"primary":{"type":"button","label":"Sign in","href":"https://app.gameball.co/"}},"footer":{"socials":{"facebook":"https://www.facebook.com/Gameball.co","linkedin":"https://www.linkedin.com/company/gameball"}},"styling":{"eyebrows":"breadcrumbs","latex":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"interaction":{"drilldown":true},"navigation":{"global":{"anchors":[{"anchor":"Gameball Website","icon":"globe","href":"https://gameball.co/"},{"anchor":"Blog","icon":"newspaper","href":"https://www.gameball.co/blog"},{"anchor":"Case Studies","icon":"briefcase","href":"https://www.gameball.co/case-study"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"gameball","hasAudioNarration":false,"actualSubdomain":"gameball","customDomains":["docs.gameball.co"],"gitSource":{"type":"github","owner":"gameballers","repo":"gameball-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae77047d14d2161b5f1aa39","collectionId":"4ab5a5df-ae42-4575-80c1-b07b31f8cefa","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae77047d14d2161b5f1aa39"},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6ae77047d14d2161b5f1aa39","clientVersion":"0.0.4044","searchFilterCounts":[{"language":"default","tag":"Product Docs","count":233},{"language":"default","tag":"Product Documentation","count":233},{"language":"default","tag":"Installation","count":130},{"language":"default","tag":"API reference","count":97},{"language":"default","tag":"API documentation","count":92},{"language":"default","tag":"Mobile Integration","count":85},{"language":"default","tag":"Technical Tutorials","count":55},{"language":"default","tag":"Rewards Campaigns","count":50},{"language":"default","tag":"Web \u0026 POS Integration","count":43},{"language":"default","tag":"Apps \u0026 Integrations","count":30}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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":"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":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":".nav-logo,.nav-logo img{width:auto!important;height:40px!important;max-height:40px!important}.nav-logo img{object-fit:contain!important}.security-banner{display:flex;align-items:flex-start;gap:.75rem;background:rgba(239,68,68,.25);border:1px solid rgba(239,68,68,.5);border-left:4px solid #ef4444;padding:1rem;border-radius:.5rem;margin:1rem 0}.security-banner-icon{font-size:1.25rem;color:#ef4444;flex-shrink:0;line-height:1.5}.security-banner-content{flex:1;font-size:.9375rem;line-height:1.6;color:inherit}.security-banner-content strong{font-weight:600;color:inherit}.security-banner-content code{background:rgba(239,68,68,.15);color:#dc2626;padding:.125rem .375rem;border-radius:.25rem;font-size:.875em;font-family:monospace}"}],"page":{"pagePath":"installation-guides/v3/pos/integrate-redemption","slug":"/installation-guides/v3/pos/integrate-redemption","pageMetadata":{"title":"How Do I Redeem Points at Checkout with Gameball POS (v3)?","sidebarTitle":"Redeem Points at Checkout","description":"Let customers apply their loyalty points as a discount at checkout","href":"/installation-guides/v3/pos/integrate-redemption"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Let customers apply their loyalty points as a discount at checkout\"\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,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Info,Mermaid,Note,Step,Steps,Tab,Table,Tabs,Tip,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Redemption lets a customer spend their points to reduce what they pay. It builds directly on `,_jsx(_components.a,{href:`/installation-guides/v3/pos/track-orders`,children:`Track Orders`}),`: you add a `,_jsx(_components.strong,{children:`hold`}),` step that locks the points, then submit the `,_jsx(_components.strong,{children:`same order call`}),` with a reference to that hold. The hold prevents double-spending and guarantees the points are reserved for this transaction only.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`If you haven’t implemented `,_jsx(_components.a,{href:`/installation-guides/v3/pos/track-orders`,children:`Track Orders`}),` yet, do that first. Redemption is the order call plus one extra step.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`the-redemption-flow`,children:`The Redemption Flow`}),`\n`,_jsx(Mermaid,{chart:`sequenceDiagram\n participant C as Cashier / POS\n participant G as Gameball API\n C->>G: GET balance\n G-->>C: availablePointsBalance\n C->>G: POST hold points\n G-->>C: holdReference (locked, time-limited)\n C->>G: POST order + holdReference\n G-->>C: pointsRedeemed, rewardedPoints`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Check the balance`,children:_jsxs(_components.p,{children:[`Retrieve the customer’s `,_jsx(_components.a,{href:`/installation-guides/v3/pos/customer-balance`,children:`balance`}),` to confirm they have enough points to redeem.`]})}),_jsx(Step,{title:`Hold the points`,children:_jsxs(_components.p,{children:[`Reserve the redemption amount with the Hold Points API. This returns a `,_jsx(_components.code,{children:`holdReference`}),`.`]})}),_jsx(Step,{title:`Submit the order with the hold reference`,children:_jsxs(_components.p,{children:[`Place the order using the `,_jsx(_components.a,{href:`/installation-guides/v3/pos/track-orders`,children:`Track Orders`}),` call, adding a `,_jsx(_components.code,{children:`redemption`}),` block that references the hold.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-hold-the-points`,children:`Step 1: Hold the Points`}),`\n`,_jsx(_components.p,{children:`This reserves the points temporarily before checkout completes:`}),`\n`,`\n`,`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Holds are `,_jsx(_components.strong,{children:`time-limited`}),` (typically 10 minutes). If the order isn’t completed in time, the points are automatically released back to the customer. Don’t reuse or delay using a `,_jsx(_components.code,{children:`holdReference`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`step-2-submit-the-order-with-the-redemption`,children:`Step 2: Submit the Order with the Redemption`}),`\n`,_jsxs(_components.p,{children:[`This is the standard `,_jsx(_components.a,{href:`/installation-guides/v3/pos/track-orders`,children:`Track Orders`}),` call with one addition, a `,_jsx(_components.code,{children:`redemption`}),` block carrying the hold reference. Note that `,_jsx(_components.code,{children:`totalPaid`}),` reflects the discounted amount:`]}),`\n`,`\n`,`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Behind the scenes`}),`, Gameball verifies the hold reference, deducts the redeemed points, and rewards new points based on the amount actually paid after redemption, then updates the customer’s redemption and earning history.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`tips-\u0026-gotchas`,children:`Tips \u0026 Gotchas`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`totalPaid`}),` must reflect the discounted value `,_jsx(_components.strong,{children:`after`}),` applying the held points.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`totalPrice`}),` should always be the original order value `,_jsx(_components.strong,{children:`before`}),` discounts.`]}),`\n`,_jsx(_components.li,{children:`If the customer cancels or abandons the transaction, release the hold using the Release Hold API.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`redemption-methods`,children:`Redemption Methods`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Standard`,id:`standard`,children:_jsxs(_components.p,{children:[`The flow above, where the customer is identified by `,_jsx(_components.code,{children:`customerId`}),` (mobile number, email, or CRM ID) and you hold then redeem against their balance.`]})}),_jsxs(Tab,{title:`QR Code`,id:`qr-code`,\"data-child-heading-ids\":`[\"how-it-works\",\"anatomy-of-the-scanned-value\",\"hold-points-with-the-hash\"]`,children:[_jsxs(_components.p,{children:[`Instead of typing a phone number, the cashier scans a QR code the customer shows from their `,_jsx(_components.strong,{children:`Gameball widget/app`}),` or their `,_jsx(_components.strong,{children:`Virtual Pass`}),`. The QR encodes both `,_jsx(_components.em,{children:`who`}),` the customer is and a `,_jsx(_components.em,{children:`one-time security token`}),`, so the customer is identified and verified in a single scan, no separate lookup needed.`]}),_jsx(Heading,{level:`4`,id:`how-it-works`,children:`How it works`}),_jsx(Mermaid,{chart:`flowchart TD\n A[Customer shows QR code] --> B[POS scans and reads the value]\n B --> C[Split the value into\u003cbr/>customerId and hash]\n C --> D[POST hold points with the hash]\n D --> E[POST order with the holdReference]`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Scan the QR code`,children:_jsx(_components.p,{children:`The scanned value is a single string that joins the customer ID and a rotating 6-digit hash.`})}),_jsx(Step,{title:`Split the value`,children:_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`last 6 digits are always the hash`}),`. Everything before them is the `,_jsx(_components.code,{children:`customerId`}),`. There’s no separator, so split by position.`]})}),_jsx(Step,{title:`Hold points with the hash`,children:_jsxs(_components.p,{children:[`Pass both the parsed `,_jsx(_components.code,{children:`customerId`}),` and the `,_jsx(_components.code,{children:`hash`}),` to the Hold Points call. The hash proves the request is genuine.`]})}),_jsx(Step,{title:`Submit the order`,children:_jsxs(_components.p,{children:[`Complete the order with the returned `,_jsx(_components.code,{children:`holdReference`}),`, exactly like the Standard flow.`]})})]}),_jsx(Heading,{level:`4`,id:`anatomy-of-the-scanned-value`,children:`Anatomy of the scanned value`}),_jsxs(_components.p,{children:[`Take the example value `,_jsx(_components.code,{children:`mobile_966500001234123456`}),`:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Part`}),_jsx(_components.th,{children:`Value`}),_jsx(_components.th,{children:`How to extract it`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`customerId`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`mobile_966500001234`})}),_jsxs(_components.td,{children:[`Everything `,_jsx(_components.strong,{children:`except`}),` the last 6 characters`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`hash`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`123456`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.strong,{children:`last 6 characters`})]})]})]})]}),_jsx(Heading,{level:`4`,id:`hold-points-with-the-hash`,children:`Hold points with the hash`}),_jsxs(_components.p,{children:[`Add the `,_jsx(_components.code,{children:`hash`}),` field to the Hold Points request:`]}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`The hash is a `,_jsx(_components.strong,{children:`rotating, single-use security token`}),`, it changes regularly and expires. Only send it in the Hold Points call, and never store or reuse an old hash. If a scan fails validation, ask the customer to refresh their QR code and scan again.`]})}),_jsx(Tip,{children:_jsxs(_components.p,{children:[`The same hash can also be generated server-side via the `,_jsx(_components.a,{href:`/api-reference/customers/management/get-customer-hash`,children:`Get Customer Hash API`}),` if you need to validate a customer without a live scan.`]})})]}),_jsxs(Tab,{title:`Virtual Pass`,id:`virtual-pass`,children:[_jsx(_components.p,{children:`Gameball Virtual Pass lets customers use QR codes without a mobile app. The pass lives in Apple Wallet (iOS) or PassWallet (Android) and behaves exactly like an app-based QR code.`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`No additional API integration needed, use the same QR flow above.`}),`\n`,_jsx(_components.li,{children:`Ensure your POS scanners can read digital screens and long string formats.`}),`\n`]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"How Do I Redeem Points at Checkout with Gameball POS (v3)?","sidebarTitle":"Redeem Points at Checkout","description":"Let customers apply their loyalty points as a discount at checkout","href":"/installation-guides/v3/pos/integrate-redemption"}}},"mdxSourceWithNoJs":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,em:`em`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Info,Mermaid,Note,RequestExample,ResponseExample,Step,Steps,Tab,Table,Tabs,Tip,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Mermaid)_missingMdxReference(`Mermaid`,true);if(!Note)_missingMdxReference(`Note`,true);if(!RequestExample)_missingMdxReference(`RequestExample`,true);if(!ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Tab)_missingMdxReference(`Tab`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tabs)_missingMdxReference(`Tabs`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Redemption lets a customer spend their points to reduce what they pay. It builds directly on `,_jsx(_components.a,{href:`/installation-guides/v3/pos/track-orders`,children:`Track Orders`}),`: you add a `,_jsx(_components.strong,{children:`hold`}),` step that locks the points, then submit the `,_jsx(_components.strong,{children:`same order call`}),` with a reference to that hold. The hold prevents double-spending and guarantees the points are reserved for this transaction only.`]}),`\n`,_jsx(Info,{children:_jsxs(_components.p,{children:[`If you haven’t implemented `,_jsx(_components.a,{href:`/installation-guides/v3/pos/track-orders`,children:`Track Orders`}),` yet, do that first. Redemption is the order call plus one extra step.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`the-redemption-flow`,children:`The Redemption Flow`}),`\n`,_jsx(Mermaid,{chart:`sequenceDiagram\n participant C as Cashier / POS\n participant G as Gameball API\n C->>G: GET balance\n G-->>C: availablePointsBalance\n C->>G: POST hold points\n G-->>C: holdReference (locked, time-limited)\n C->>G: POST order + holdReference\n G-->>C: pointsRedeemed, rewardedPoints`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Check the balance`,children:_jsxs(_components.p,{children:[`Retrieve the customer’s `,_jsx(_components.a,{href:`/installation-guides/v3/pos/customer-balance`,children:`balance`}),` to confirm they have enough points to redeem.`]})}),_jsx(Step,{title:`Hold the points`,children:_jsxs(_components.p,{children:[`Reserve the redemption amount with the Hold Points API. This returns a `,_jsx(_components.code,{children:`holdReference`}),`.`]})}),_jsx(Step,{title:`Submit the order with the hold reference`,children:_jsxs(_components.p,{children:[`Place the order using the `,_jsx(_components.a,{href:`/installation-guides/v3/pos/track-orders`,children:`Track Orders`}),` call, adding a `,_jsx(_components.code,{children:`redemption`}),` block that references the hold.`]})})]}),`\n`,_jsx(Heading,{level:`2`,id:`step-1-hold-the-points`,children:`Step 1: Hold the Points`}),`\n`,_jsx(_components.p,{children:`This reserves the points temporarily before checkout completes:`}),`\n`,_jsx(RequestExample,{children:_jsx(CodeBlock,{filename:`cURL`,numberOfLines:`9`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.gameball.co/api/v4.0/integrations/transactions/hold'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'APIKey: YOUR_API_KEY'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'SecretKey: YOUR_SECRET_KEY'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"customerId\": \"12345\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"transactionTime\": \"2025-10-19T12:00:00Z\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"pointsToHold\": 100`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})})}),`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:`Success`,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"customerId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"12345\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"holdAmount\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"10.00\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"holdEquivalentPoints\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`100`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"holdReference\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"HOLD-abc123\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Holds are `,_jsx(_components.strong,{children:`time-limited`}),` (typically 10 minutes). If the order isn’t completed in time, the points are automatically released back to the customer. Don’t reuse or delay using a `,_jsx(_components.code,{children:`holdReference`}),`.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`step-2-submit-the-order-with-the-redemption`,children:`Step 2: Submit the Order with the Redemption`}),`\n`,_jsxs(_components.p,{children:[`This is the standard `,_jsx(_components.a,{href:`/installation-guides/v3/pos/track-orders`,children:`Track Orders`}),` call with one addition, a `,_jsx(_components.code,{children:`redemption`}),` block carrying the hold reference. Note that `,_jsx(_components.code,{children:`totalPaid`}),` reflects the discounted amount:`]}),`\n`,_jsx(RequestExample,{children:_jsx(CodeBlock,{filename:`cURL`,numberOfLines:`14`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`14`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.gameball.co/api/v4.0/integrations/orders'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'APIKey: YOUR_API_KEY'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'SecretKey: YOUR_SECRET_KEY'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"customerId\": \"12345\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"orderId\": \"ORD000123\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"orderDate\": \"2025-10-19T12:10:00Z\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"totalPaid\": 90.00,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"totalPrice\": 100.00,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"redemption\": {`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"pointsHoldReference\": \"HOLD-abc123\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})})}),`\n`,_jsx(ResponseExample,{children:_jsx(CodeBlock,{filename:`Success`,numberOfLines:`8`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"orderId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"ORD000123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"customerId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"12345\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"pointsRedeemed\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`100`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"pointsEarned\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`9`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"rewardedPoints\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`9`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"completed\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Behind the scenes`}),`, Gameball verifies the hold reference, deducts the redeemed points, and rewards new points based on the amount actually paid after redemption, then updates the customer’s redemption and earning history.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`tips-\u0026-gotchas`,children:`Tips \u0026 Gotchas`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`totalPaid`}),` must reflect the discounted value `,_jsx(_components.strong,{children:`after`}),` applying the held points.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`totalPrice`}),` should always be the original order value `,_jsx(_components.strong,{children:`before`}),` discounts.`]}),`\n`,_jsx(_components.li,{children:`If the customer cancels or abandons the transaction, release the hold using the Release Hold API.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`redemption-methods`,children:`Redemption Methods`}),`\n`,_jsxs(Tabs,{children:[_jsx(Tab,{title:`Standard`,id:`standard`,children:_jsxs(_components.p,{children:[`The flow above, where the customer is identified by `,_jsx(_components.code,{children:`customerId`}),` (mobile number, email, or CRM ID) and you hold then redeem against their balance.`]})}),_jsxs(Tab,{title:`QR Code`,id:`qr-code`,\"data-child-heading-ids\":`[\"how-it-works\",\"anatomy-of-the-scanned-value\",\"hold-points-with-the-hash\"]`,children:[_jsxs(_components.p,{children:[`Instead of typing a phone number, the cashier scans a QR code the customer shows from their `,_jsx(_components.strong,{children:`Gameball widget/app`}),` or their `,_jsx(_components.strong,{children:`Virtual Pass`}),`. The QR encodes both `,_jsx(_components.em,{children:`who`}),` the customer is and a `,_jsx(_components.em,{children:`one-time security token`}),`, so the customer is identified and verified in a single scan, no separate lookup needed.`]}),_jsx(Heading,{level:`4`,id:`how-it-works`,children:`How it works`}),_jsx(Mermaid,{chart:`flowchart TD\n A[Customer shows QR code] --> B[POS scans and reads the value]\n B --> C[Split the value into\u003cbr/>customerId and hash]\n C --> D[POST hold points with the hash]\n D --> E[POST order with the holdReference]`}),_jsxs(Steps,{children:[_jsx(Step,{title:`Scan the QR code`,children:_jsx(_components.p,{children:`The scanned value is a single string that joins the customer ID and a rotating 6-digit hash.`})}),_jsx(Step,{title:`Split the value`,children:_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`last 6 digits are always the hash`}),`. Everything before them is the `,_jsx(_components.code,{children:`customerId`}),`. There’s no separator, so split by position.`]})}),_jsx(Step,{title:`Hold points with the hash`,children:_jsxs(_components.p,{children:[`Pass both the parsed `,_jsx(_components.code,{children:`customerId`}),` and the `,_jsx(_components.code,{children:`hash`}),` to the Hold Points call. The hash proves the request is genuine.`]})}),_jsx(Step,{title:`Submit the order`,children:_jsxs(_components.p,{children:[`Complete the order with the returned `,_jsx(_components.code,{children:`holdReference`}),`, exactly like the Standard flow.`]})})]}),_jsx(Heading,{level:`4`,id:`anatomy-of-the-scanned-value`,children:`Anatomy of the scanned value`}),_jsxs(_components.p,{children:[`Take the example value `,_jsx(_components.code,{children:`mobile_966500001234123456`}),`:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Part`}),_jsx(_components.th,{children:`Value`}),_jsx(_components.th,{children:`How to extract it`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`customerId`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`mobile_966500001234`})}),_jsxs(_components.td,{children:[`Everything `,_jsx(_components.strong,{children:`except`}),` the last 6 characters`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`hash`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`123456`})}),_jsxs(_components.td,{children:[`The `,_jsx(_components.strong,{children:`last 6 characters`})]})]})]})]}),_jsx(Heading,{level:`4`,id:`hold-points-with-the-hash`,children:`Hold points with the hash`}),_jsxs(_components.p,{children:[`Add the `,_jsx(_components.code,{children:`hash`}),` field to the Hold Points request:`]}),_jsx(RequestExample,{children:_jsx(CodeBlock,{filename:`cURL`,numberOfLines:`10`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'https://api.gameball.co/api/v4.0/integrations/transactions/hold'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'Content-Type: application/json'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'APIKey: YOUR_API_KEY'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'SecretKey: YOUR_SECRET_KEY'`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '{`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"customerId\": \"mobile_966500001234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"transactionTime\": \"2025-10-19T12:00:00Z\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"pointsToHold\": 1000,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"hash\": \"123456\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})})}),_jsx(Warning,{children:_jsxs(_components.p,{children:[`The hash is a `,_jsx(_components.strong,{children:`rotating, single-use security token`}),`, it changes regularly and expires. Only send it in the Hold Points call, and never store or reuse an old hash. If a scan fails validation, ask the customer to refresh their QR code and scan again.`]})}),_jsx(Tip,{children:_jsxs(_components.p,{children:[`The same hash can also be generated server-side via the `,_jsx(_components.a,{href:`/api-reference/customers/management/get-customer-hash`,children:`Get Customer Hash API`}),` if you need to validate a customer without a live scan.`]})})]}),_jsxs(Tab,{title:`Virtual Pass`,id:`virtual-pass`,children:[_jsx(_components.p,{children:`Gameball Virtual Pass lets customers use QR codes without a mobile app. The pass lives in Apple Wallet (iOS) or PassWallet (Android) and behaves exactly like an app-based QR code.`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`No additional API integration needed, use the same QR flow above.`}),`\n`,_jsx(_components.li,{children:`Ensure your POS scanners can read digital screens and long string formats.`}),`\n`]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"How Do I Redeem Points at Checkout with Gameball POS (v3)?","sidebarTitle":"Redeem Points at Checkout","description":"Let customers apply their loyalty points as a discount at checkout","href":"/installation-guides/v3/pos/integrate-redemption"}}}},"mdxExtracts":{"tableOfContents":[{"title":"The Redemption Flow","slug":"the-redemption-flow","depth":2,"children":[]},{"title":"Step 1: Hold the Points","slug":"step-1-hold-the-points","depth":2,"children":[]},{"title":"Step 2: Submit the Order with the Redemption","slug":"step-2-submit-the-order-with-the-redemption","depth":2,"children":[]},{"title":"Tips \u0026 Gotchas","slug":"tips-\u0026-gotchas","depth":2,"children":[]},{"title":"Redemption Methods","slug":"redemption-methods","depth":2,"children":[{"title":"How it works","slug":"how-it-works","depth":4,"children":[],"tabId":"qr-code"},{"title":"Anatomy of the scanned value","slug":"anatomy-of-the-scanned-value","depth":4,"children":[],"tabId":"qr-code"},{"title":"Hold points with the hash","slug":"hold-points-with-the-hash","depth":4,"children":[],"tabId":"qr-code"}]}],"codeExamples":{"request":{"type":"RequestExample","children":[{"filename":"cURL","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"shellscript\">\u003ccode language=\"shellscript\" numberOfLines=\"9\">\u003cspan class=\"line\">\u003cspan style=\"color:#953800;--shiki-dark:#DCDCAA\">curl\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -X\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> POST\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> 'https://api.gameball.co/api/v4.0/integrations/transactions/hold'\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> 'Content-Type: application/json'\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> 'APIKey: YOUR_API_KEY'\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> 'SecretKey: YOUR_SECRET_KEY'\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -d\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> '{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"customerId\": \"12345\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"transactionTime\": \"2025-10-19T12:00:00Z\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"pointsToHold\": 100\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> }'\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]},"response":{"type":"ResponseExample","children":[{"filename":"Success","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"6\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"customerId\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"12345\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"holdAmount\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"10.00\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"holdEquivalentPoints\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">100\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"holdReference\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"HOLD-abc123\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]}}},"jsLinks":[],"subdomain":"gameball","siteName":"Gameball Docs","title":"How Do I Redeem Points at Checkout with Gameball POS (v3)? - Gameball Docs","navMaps":{"firstHrefInVersion":{"SDK v3":{"href":"/installation-guides/v3/pos/integrate-redemption","matchLevel":0},"SDK v2":{"href":"/installation-guides/v2/pos/integrate-redemption","matchLevel":1},"v4.0":{"href":"/api-reference/introduction","matchLevel":4},"v4.1":{"href":"/api-reference/introduction-v4.1","matchLevel":4}},"firstHrefInLanguage":{}},"lastModified":"2026-07-13T13:17:45.458Z","originalFileLocation":"installation-guides/v3/pos/integrate-redemption.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Let customers apply their loyalty points as a discount at checkout\">\u003cmeta data-mint-head name=\"application-name\" content=\"Gameball 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/gameball/Ree8Ef_QV2s4xScJ/_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/gameball/Ree8Ef_QV2s4xScJ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/gameball/Ree8Ef_QV2s4xScJ/_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/gameball/Ree8Ef_QV2s4xScJ/_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/gameball/Ree8Ef_QV2s4xScJ/_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/gameball/Ree8Ef_QV2s4xScJ/_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/gameball/Ree8Ef_QV2s4xScJ/_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/gameball/Ree8Ef_QV2s4xScJ/_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/gameball/Ree8Ef_QV2s4xScJ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"How Do I Redeem Points at Checkout with Gameball POS (v3)? - Gameball Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Let customers apply their loyalty points as a discount at checkout\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Gameball Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.gameball.co/installation-guides/v3/pos/integrate-redemption\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://gameball.mintlify.app/_mintlify/api/og/v2?division=POS\u0026amp;title=How+Do+I+Redeem+Points+at+Checkout+with+Gameball+POS+%28v3%29%3F\u0026amp;description=Let+customers+apply+their+loyalty+points+as+a+discount+at+checkout\u0026amp;theme=4e778c65cbfcf077808b5cd6\u0026amp;signature=f5b034e0633271cac92389f40df4ebd8a4c381d5e0d071d95758c06c809816ee\">\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=\"How Do I Redeem Points at Checkout with Gameball POS (v3)? - Gameball Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Let customers apply their loyalty points as a discount at checkout\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://gameball.mintlify.app/_mintlify/api/og/v2?division=POS\u0026amp;title=How+Do+I+Redeem+Points+at+Checkout+with+Gameball+POS+%28v3%29%3F\u0026amp;description=Let+customers+apply+their+loyalty+points+as+a+discount+at+checkout\u0026amp;theme=4e778c65cbfcf077808b5cd6\u0026amp;signature=f5b034e0633271cac92389f40df4ebd8a4c381d5e0d071d95758c06c809816ee\">\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/gameball/Ree8Ef_QV2s4xScJ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Gameball Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FB5819\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.gameball.co/installation-guides/v3/pos/integrate-redemption\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/installation-guides/v3/pos/integrate-redemption.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.gameball.co/#organization\",\"name\":\"Gameball Docs\",\"url\":\"https://docs.gameball.co\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/gameball/G3Do1BW89krXAJ48/logo/light.svg?fit=max\u0026auto=format\u0026n=G3Do1BW89krXAJ48\u0026q=85\u0026s=aecb464405fc6a468704d3da3cedc5ae\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.gameball.co#website\",\"name\":\"Gameball Docs\",\"url\":\"https://docs.gameball.co\",\"publisher\":{\"@id\":\"https://docs.gameball.co/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.gameball.co/installation-guides/v3/pos/integrate-redemption#webpage\",\"url\":\"https://docs.gameball.co/installation-guides/v3/pos/integrate-redemption\",\"name\":\"How Do I Redeem Points at Checkout with Gameball POS (v3)?\",\"description\":\"Let customers apply their loyalty points as a discount at checkout\",\"dateModified\":\"2026-07-13T13:17:45.458Z\",\"isPartOf\":{\"@id\":\"https://docs.gameball.co#website\"},\"breadcrumb\":{\"@id\":\"https://docs.gameball.co/installation-guides/v3/pos/integrate-redemption#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.gameball.co/installation-guides/v3/pos/integrate-redemption#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Web \u0026 POS Integration\",\"item\":\"https://docs.gameball.co/installation-guides/v3/web/index\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"POS\",\"item\":\"https://docs.gameball.co/installation-guides/v3/pos/index\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How Do I Redeem Points at Checkout with Gameball POS (v3)?\",\"item\":\"https://docs.gameball.co/installation-guides/v3/pos/integrate-redemption\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.gameball.co/installation-guides/v3/pos/integrate-redemption#article\",\"headline\":\"How Do I Redeem Points at Checkout with Gameball POS (v3)?\",\"name\":\"How Do I Redeem Points at Checkout with Gameball POS (v3)?\",\"description\":\"Let customers apply their loyalty points as a discount at checkout\",\"url\":\"https://docs.gameball.co/installation-guides/v3/pos/integrate-redemption\",\"mainEntityOfPage\":{\"@id\":\"https://docs.gameball.co/installation-guides/v3/pos/integrate-redemption#webpage\"},\"dateModified\":\"2026-07-13T13:17:45.458Z\",\"publisher\":{\"@id\":\"https://docs.gameball.co/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.gameball.co#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Gameball Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Gameball Docs","nav":{"global":{"anchors":[{"anchor":"Gameball Website","icon":"globe","href":"https://gameball.co/"},{"anchor":"Blog","icon":"newspaper","href":"https://www.gameball.co/blog"},{"anchor":"Case Studies","icon":"briefcase","href":"https://www.gameball.co/case-study"}]},"tabs":[{"tab":"Product Docs","pages":[{"title":"Product Docs","href":"/product-documentation/getting-started/what-is-gameball"}]},{"tab":"Installation","versions":[{"version":"SDK v3","default":true,"groups":[{"group":"Overview","pages":[{"title":"Installation Guide (SDK v3)","href":"/installation-guides/v3"}]},{"group":"Web \u0026 POS Integration","pages":[{"group":"Web","pages":[{"title":"Web SDK Integration (v3)","sidebarTitle":"Overview","href":"/installation-guides/v3/web/index"},{"title":"How Do I Get Started with the Web SDK (v3)?","sidebarTitle":"Getting Started","href":"/installation-guides/v3/web/getting-started"},{"title":"How Do I Initialize the Customer Widget in the Web SDK (v3)?","sidebarTitle":"Initialize Gameball Customer Widget","href":"/installation-guides/v3/web/initialize-widget"},{"title":"How Do I Manage Customers with the Web SDK (v3)?","sidebarTitle":"Customer Management","href":"/installation-guides/v3/web/customer-management"},{"title":"How Do I Track Customer Events with the Web SDK (v3)?","sidebarTitle":"Track Customer Events","href":"/installation-guides/v3/web/track-events"},{"title":"How Do I Track Orders and Reward Cashback with the Web SDK (v3)?","sidebarTitle":"Track Orders \u0026 Cashback Reward","href":"/installation-guides/v3/web/track-orders"},{"title":"How Do I Integrate Points Redemption with the Web SDK (v3)?","sidebarTitle":"Integrate Redemption","href":"/installation-guides/v3/web/integrate-redemption"},{"title":"How Do I Track Referrals with the Web SDK (v3)?","sidebarTitle":"Track Referrals","href":"/installation-guides/v3/web/track-referrals"},{"title":"How Do I Set Up In-App Messaging in the Web SDK (v3)?","sidebarTitle":"In-App Messaging","href":"/installation-guides/v3/web/in-app-messaging"},{"title":"How Do I Complete the Go-Live Checklist for the Web SDK (v3)?","sidebarTitle":"Go-Live Checklist","href":"/installation-guides/v3/web/go-live-checklist"}]},{"group":"POS","pages":[{"title":"Gameball POS Integration (v3)","sidebarTitle":"Overview","href":"/installation-guides/v3/pos/index"},{"title":"How Do I Get Started and Set Up the API for Gameball POS (v3)?","sidebarTitle":"Getting Started \u0026 API Setup","href":"/installation-guides/v3/pos/getting-started"},{"title":"How Do I Identify the Customer with Gameball POS (v3)?","sidebarTitle":"Identify the Customer","href":"/installation-guides/v3/pos/customer-management"},{"title":"How Do I Show the Customer Balance with Gameball POS (v3)?","sidebarTitle":"Show Customer Balance","href":"/installation-guides/v3/pos/customer-balance"},{"title":"How Do I Track Orders and Earn Points with Gameball POS (v3)?","sidebarTitle":"Track Orders \u0026 Earn Points","description":"Submit in-store orders to Gameball so customers earn loyalty points","href":"/installation-guides/v3/pos/track-orders"},{"title":"How Do I Redeem Points at Checkout with Gameball POS (v3)?","sidebarTitle":"Redeem Points at Checkout","href":"/installation-guides/v3/pos/integrate-redemption"},{"title":"How Do I Refund an Order with Gameball POS (v3)?","sidebarTitle":"Refund Order","description":"Refund or cancel orders and automatically restore customer points","href":"/installation-guides/v3/pos/refund-order"},{"title":"How Do I Fetch Order Details with Gameball POS (v3)?","sidebarTitle":"Fetch Order Details","href":"/installation-guides/v3/pos/fetch-order-details"},{"title":"How Do I Track Events with Gameball POS (v3)?","sidebarTitle":"Track Events","href":"/installation-guides/v3/pos/track-events"},{"title":"How Do I Track Referrals with Gameball POS (v3)?","sidebarTitle":"Track Referrals","href":"/installation-guides/v3/pos/track-referrals"},{"title":"How Do I Complete the Go-Live Checklist for Gameball POS (v3)?","sidebarTitle":"Go-Live Checklist","href":"/installation-guides/v3/pos/go-live-checklist"}]}]},{"group":"Mobile Integration","pages":[{"group":"iOS","pages":[{"group":"Overview \u0026 Setup","pages":[{"title":"iOS SDK Integration (v3)","sidebarTitle":"Overview","href":"/installation-guides/v3/ios/index"},{"title":"How Do I Get Started with the iOS SDK (v3)?","sidebarTitle":"Getting Started","href":"/installation-guides/v3/ios/getting-started"},{"title":"How Do I Initialize the iOS SDK (v3)?","sidebarTitle":"SDK Initialization","href":"/installation-guides/v3/ios/initialize-sdk"},{"title":"How Do I Initialize the Customer Profile in the iOS SDK (v3)?","sidebarTitle":"Initialize Customer Profile","href":"/installation-guides/v3/ios/initialize-profile"}]},{"group":"Core SDK Capabilities","pages":[{"title":"How Do I Show the Profile Widget in the iOS SDK (v3)?","sidebarTitle":"Show Profile Widget","href":"/installation-guides/v3/ios/show-profile"},{"title":"How Do I Track Customer Events with the iOS SDK (v3)?","sidebarTitle":"Track Events","href":"/installation-guides/v3/ios/track-events"}]},{"group":"Extended Features","pages":[{"title":"How Do I Set Up Push Notifications in the iOS SDK (v3)?","sidebarTitle":"Push Notifications","href":"/installation-guides/v3/ios/push-notifications"},{"title":"How Do I Track Referrals with the iOS SDK (v3)?","sidebarTitle":"Track Referrals","href":"/installation-guides/v3/ios/track-referrals"},{"title":"How Do I Set Up In-App Messaging in the iOS SDK (v3)?","sidebarTitle":"In-App Messaging","href":"/installation-guides/v3/ios/in-app-messaging"}]},{"group":"Deployment \u0026 Maintenance","pages":[{"title":"How Do I Complete the Go-Live Checklist for the iOS SDK (v3)?","sidebarTitle":"Go-Live Checklist","href":"/installation-guides/v3/ios/go-live-checklist"},{"title":"How Do I Migrate to the iOS SDK v4?","sidebarTitle":"Migration Notes","href":"/installation-guides/v3/ios/migration-notes"}]}]},{"group":"Android","pages":[{"group":"Overview \u0026 Setup","pages":[{"title":"Android SDK Integration (v3)","sidebarTitle":"Overview","href":"/installation-guides/v3/android/index"},{"title":"How Do I Get Started with the Android SDK (v3)?","sidebarTitle":"Getting Started","href":"/installation-guides/v3/android/getting-started"},{"title":"How Do I Initialize the Android SDK (v3)?","sidebarTitle":"Initialize SDK","href":"/installation-guides/v3/android/initialize-sdk"},{"title":"How Do I Initialize the Customer Profile in the Android SDK (v3)?","sidebarTitle":"Initialize Customer Profile","href":"/installation-guides/v3/android/initialize-profile"}]},{"group":"Core SDK Capabilities","pages":[{"title":"How Do I Show the Profile Widget in the Android SDK (v3)?","sidebarTitle":"Show Profile Widget","href":"/installation-guides/v3/android/show-profile"},{"title":"How Do I Track Customer Events with the Android SDK (v3)?","sidebarTitle":"Track Customer Events","href":"/installation-guides/v3/android/track-events"}]},{"group":"Extended Features","pages":[{"title":"How Do I Set Up Push Notifications in the Android SDK (v3)?","sidebarTitle":"Push Notifications","href":"/installation-guides/v3/android/push-notifications"},{"title":"How Do I Track Referrals with the Android SDK (v3)?","sidebarTitle":"Track Referrals","href":"/installation-guides/v3/android/track-referrals"},{"title":"How Do I Set Up In-App Messaging in the Android SDK (v3)?","sidebarTitle":"In-App Messaging","href":"/installation-guides/v3/android/in-app-messaging"}]},{"group":"Deployment \u0026 Maintenance","pages":[{"title":"How Do I Complete the Go-Live Checklist for the Android SDK (v3)?","sidebarTitle":"Go-Live Checklist","href":"/installation-guides/v3/android/go-live-checklist"},{"title":"How Do I Migrate to the Android SDK v4?","sidebarTitle":"Migration Notes","href":"/installation-guides/v3/android/migration-notes"}]}]},{"group":"Flutter","pages":[{"group":"Overview \u0026 Setup","pages":[{"title":"Flutter SDK Integration (v3)","sidebarTitle":"Overview","href":"/installation-guides/v3/flutter/index"},{"title":"How Do I Get Started with the Flutter SDK (v3)?","sidebarTitle":"Getting Started","href":"/installation-guides/v3/flutter/getting-started"},{"title":"How Do I Initialize the Flutter SDK (v3)?","sidebarTitle":"Initialize SDK","href":"/installation-guides/v3/flutter/initialize-sdk"},{"title":"How Do I Initialize the Customer Profile in the Flutter SDK (v3)?","sidebarTitle":"Initialize Customer Profile","href":"/installation-guides/v3/flutter/initialize-profile"}]},{"group":"Core SDK Capabilities","pages":[{"title":"How Do I Show the Profile Widget in the Flutter SDK (v3)?","sidebarTitle":"Show Profile Widget","href":"/installation-guides/v3/flutter/show-profile"},{"title":"How Do I Track Customer Events with the Flutter SDK (v3)?","sidebarTitle":"Track Customer Events","href":"/installation-guides/v3/flutter/track-events"}]},{"group":"Extended Features","pages":[{"title":"How Do I Track Referrals with the Flutter SDK (v3)?","sidebarTitle":"Track Referrals","href":"/installation-guides/v3/flutter/track-referrals"},{"title":"How Do I Set Up Push Notifications in the Flutter SDK (v3)?","sidebarTitle":"Push Notifications","href":"/installation-guides/v3/flutter/push-notifications"},{"title":"How Do I Set Up In-App Messaging in the Flutter SDK (v3)?","sidebarTitle":"In-App Messaging","href":"/installation-guides/v3/flutter/in-app-messaging"}]},{"group":"Deployment \u0026 Maintenance","pages":[{"title":"How Do I Complete the Go-Live Checklist for the Flutter SDK (v3)?","sidebarTitle":"Go-Live Checklist","href":"/installation-guides/v3/flutter/go-live-checklist"},{"title":"How Do I Migrate to the Flutter SDK v4?","sidebarTitle":"Migration Notes","href":"/installation-guides/v3/flutter/migration-notes"}]}]},{"group":"React Native","pages":[{"group":"Overview \u0026 Setup","pages":[{"title":"React Native SDK Integration (v3)","sidebarTitle":"Overview","href":"/installation-guides/v3/react-native/index"},{"title":"How Do I Get Started with the React Native SDK (v3)?","sidebarTitle":"Getting Started","href":"/installation-guides/v3/react-native/getting-started"},{"title":"How Do I Initialize the React Native SDK (v3)?","sidebarTitle":"Initialize SDK","href":"/installation-guides/v3/react-native/initialize-sdk"},{"title":"How Do I Initialize the Customer Profile in the React Native SDK (v3)?","sidebarTitle":"Initialize Customer Profile","href":"/installation-guides/v3/react-native/initialize-profile"}]},{"group":"Core SDK Capabilities","pages":[{"title":"How Do I Show the Profile Widget in the React Native SDK (v3)?","sidebarTitle":"Show Profile Widget","href":"/installation-guides/v3/react-native/show-profile"},{"title":"How Do I Track Customer Events with the React Native SDK (v3)?","sidebarTitle":"Track Customer Events","href":"/installation-guides/v3/react-native/track-events"}]},{"group":"Extended Features","pages":[{"title":"How Do I Track Referrals with the React Native SDK (v3)?","sidebarTitle":"Track Referrals","href":"/installation-guides/v3/react-native/track-referrals"},{"title":"How Do I Set Up Push Notifications in the React Native SDK (v3)?","sidebarTitle":"Push Notifications","href":"/installation-guides/v3/react-native/push-notifications"},{"title":"How Do I Set Up In-App Messaging in the React Native SDK (v3)?","sidebarTitle":"In-App Messaging","href":"/installation-guides/v3/react-native/in-app-messaging"}]},{"group":"Deployment \u0026 Maintenance","pages":[{"title":"How Do I Complete the Go-Live Checklist for the React Native SDK (v3)?","sidebarTitle":"Go-Live Checklist","href":"/installation-guides/v3/react-native/go-live-checklist"},{"title":"How Do I Migrate to the React Native SDK v4?","sidebarTitle":"Migration Notes","href":"/installation-guides/v3/react-native/migration-notes"}]}]}]}]},{"version":"SDK v2","pages":[{"title":"SDK v2","href":"/installation-guides/v2/pos/integrate-redemption"}]}]},{"tab":"Technical Tutorials","pages":[{"title":"Technical Tutorials","href":"/tutorials/general/welcome"}]},{"tab":"API reference","versions":[{"version":"v4.0","groups":[{"group":"API documentation","pages":[{"title":"Introduction","href":"/api-reference/introduction"},{"group":"Overview","pages":[{"title":"What's New in V4.0","href":"/api-reference/overview/whats-new"},{"title":"Authentication","href":"/api-reference/overview/authentication"},{"title":"Rate Limiting","href":"/api-reference/overview/rate-limiting"},{"title":"Status and Error Codes","href":"/api-reference/overview/status-error-codes"}]},{"group":"Customers","pages":[{"title":null,"href":"/api-reference/customers/customers"},{"group":"Management","pages":[{"title":"Create/Update Customer","openapi":"POST /api/v4.0/integrations/customers","href":"/api-reference/customers/management/create-customer"},{"title":"Get Customer","openapi":"GET /api/v4.0/integrations/customers/{customerId}","href":"/api-reference/customers/management/get-customer"},{"title":"Get Customer Details","openapi":"GET /api/v4.0/integrations/customers/{customerId}/details","href":"/api-reference/customers/management/get-customer-details"},{"title":"Get Customer Coupons","openapi":"GET /api/v4.0/integrations/customers/{customerId}/coupons","href":"/api-reference/customers/management/get-customer-coupons"},{"title":"Update Customer Activation","openapi":"PUT /api/v4.0/integrations/customers/{customerId}/activate","href":"/api-reference/customers/management/update-customer-activation"},{"title":"Delete Customer","openapi":"DELETE /api/v4.0/integrations/customers/{customerId}","href":"/api-reference/customers/management/delete-customer"},{"title":"Get Customer Hash","openapi":"GET /api/v4.0/integrations/customers/{customerId}/hash","href":"/api-reference/customers/management/get-customer-hash"},{"title":"Validate Referrer Code","openapi":"GET /api/v4.0/integrations/referrals/validate","href":"/api-reference/customers/management/validate-referrer-code"},{"title":"Achieve Social Campaign","openapi":"POST /api/v4.0/integrations/customers/social-challenges","href":"/api-reference/customers/management/achieve-social-campaign"}]},{"group":"Progress","pages":[{"title":"Customer Balance","openapi":"GET /api/v4.0/integrations/customers/{customerId}/balance","href":"/api-reference/customers/progress/get-customer-balance"},{"title":"Customer Tier Progress","openapi":"GET /api/v4.0/integrations/customers/{customerId}/tier-progress","href":"/api-reference/customers/progress/get-customer-progress"},{"title":"Customer Campaigns Progress","openapi":"GET /api/v4.0/integrations/customers/{customerId}/reward-campaigns-progress","href":"/api-reference/customers/progress/get-customer-campaigns-progress"},{"title":"Customer Referrals","openapi":"GET /api/v4.0/integrations/customers/{customerId}/referrals","href":"/api-reference/customers/progress/get-customer-referrals"},{"title":"Customer Referrals Count","openapi":"GET /api/v4.0/integrations/customers/{customerId}/referrals/count","href":"/api-reference/customers/progress/get-customer-referrals-count"},{"title":"Customer Activities","openapi":"GET /api/v4.0/integrations/customers/{customerId}/activities","href":"/api-reference/customers/progress/get-customer-activities"},{"title":"Customer Activities Count","openapi":"GET /api/v4.0/integrations/customers/{customerId}/activities/count","href":"/api-reference/customers/progress/get-customer-activities-count"},{"title":"Customer Automation Campaigns","openapi":"GET /api/v4.0/integrations/customers/{customerId}/automation","href":"/api-reference/customers/progress/get-customer-automation-campaigns"},{"title":"Customer Stamps Progress","openapi":"GET /api/v4.0/integrations/customers/{customerId}/stamps/{challengeId}","href":"/api-reference/customers/progress/get-customer-action-streak-progress"},{"title":"Customer Daily Streak Progress","openapi":"GET /api/v4.0/integrations/customers/{customerId}/streaks/{campaignId}","href":"/api-reference/customers/progress/get-customer-daily-streak-progress"}]},{"group":"Tags","pages":[{"title":"Attach Customer Tags","openapi":"POST /api/v4.0/integrations/customers/{customerId}/tags","href":"/api-reference/customers/tags/attach-customer-tags"},{"title":"Remove Customer Tags","openapi":"DELETE /api/v4.0/integrations/customers/{customerId}/tags","href":"/api-reference/customers/tags/remove-customer-tag"}]},{"group":"Notifications","pages":[{"title":"Customer Notifications","openapi":"GET /api/v4.0/integrations/customers/{customerId}/notifications","href":"/api-reference/customers/notifications/list-customer-notifications"},{"title":"Customer Notifications Count","openapi":"GET /api/v4.0/integrations/customers/{customerId}/notifications/count","href":"/api-reference/customers/notifications/get-customer-notifications-count"},{"title":"Mark Notifications Read","openapi":"PUT /api/v4.0/integrations/customers/{customerId}/notifications/read","href":"/api-reference/customers/notifications/mark-notifications-read"}]}]},{"group":"Events","pages":[{"title":"Send Events","openapi":"POST /api/v4.0/integrations/events","href":"/api-reference/events/send-events"},{"title":"Preview Event Rewards","openapi":"POST /api/v4.0/integrations/events/reward-preview","href":"/api-reference/events/preview-event-rewards"}]},{"group":"Order","pages":[{"title":"Order","href":"/api-reference/order/order"},{"title":"Order Tracking","openapi":"POST /api/v4.0/integrations/orders","href":"/api-reference/order/order-tracking"},{"group":"Order Rewards \u0026 History","pages":[{"title":"Calculate Order Cashback","openapi":"POST /api/v4.0/integrations/orders/cashback","href":"/api-reference/order/calculate-order-cashback"},{"title":"Preview Order Rewards","openapi":"POST /api/v4.0/integrations/orders/reward-preview","href":"/api-reference/order/preview-order-rewards"},{"title":"Order Points Breakdown","openapi":"GET /api/v4.0/integrations/orders/{orderId}/points-breakdown","href":"/api-reference/order/order-points-breakdown"},{"title":"Order Transactions","openapi":"GET /api/v4.0/integrations/orders/{orderId}/transactions","href":"/api-reference/order/order-transactions"}]}]},{"group":"Payment","pages":[{"title":"Payment","href":"/api-reference/payment/payment"},{"title":"Payment Tracking","openapi":"POST /api/v4.0/integrations/payments","href":"/api-reference/payment/payment-tracking"},{"group":"Payment Rewards \u0026 History","pages":[{"title":"Calculate Payment Cashback","openapi":"POST /api/v4.0/integrations/payments/cashback","href":"/api-reference/payment/calculate-payment-cashback"}]}]},{"group":"Transactions","pages":[{"title":"Transactions","href":"/api-reference/transactions/transactions"},{"group":"Cashback \u0026 Redemptions","pages":[{"title":"Cashback \u0026 Redemptions","href":"/api-reference/transactions/cashback-and-redemptions/index"},{"title":"Redeem Points","openapi":"POST /api/v4.0/integrations/transactions/redeem","href":"/api-reference/transactions/cashback-and-redemptions/redeem"},{"title":"Cashback","openapi":"POST /api/v4.0/integrations/transactions/cashback","href":"/api-reference/transactions/cashback-and-redemptions/cashback"},{"title":"Refund","openapi":"POST /api/v4.0/integrations/transactions/refund","href":"/api-reference/transactions/cashback-and-redemptions/refund"}]},{"group":"Hold Management","pages":[{"title":"Hold Management","href":"/api-reference/transactions/hold-management/index"},{"title":"Hold Points","openapi":"POST /api/v4.0/integrations/transactions/hold","href":"/api-reference/transactions/hold-management/hold"},{"title":"Release Hold","openapi":"DELETE /api/v4.0/integrations/transactions/hold/{holdReferenceId}","href":"/api-reference/transactions/hold-management/release"},{"title":"Get Hold Details","openapi":"GET /api/v4.0/integrations/transactions/hold/{holdReferenceId}","href":"/api-reference/transactions/hold-management/get-hold"}]},{"group":"Transaction Management","pages":[{"title":"Transaction Management","href":"/api-reference/transactions/transaction-management/index"},{"title":"List Transactions","openapi":"GET /api/v4.0/integrations/transactions","href":"/api-reference/transactions/transaction-management/list-transactions"},{"title":"Transactions with Customer Data","openapi":"GET /api/v4.0/integrations/transactions/customer-view","href":"/api-reference/transactions/transaction-management/customer-view"},{"title":"Transaction Count","openapi":"GET /api/v4.0/integrations/transactions/count","href":"/api-reference/transactions/transaction-management/count"},{"title":"Add Manual Transaction","openapi":"POST /api/v4.0/integrations/transactions/manual","href":"/api-reference/transactions/transaction-management/manual-transaction"},{"title":"Activate Transaction","openapi":"PUT /api/v4.0/integrations/transactions/{transactionId}/activate","href":"/api-reference/transactions/transaction-management/activate"}]},{"group":"Transaction Validation","pages":[{"title":"Transaction Validation","href":"/api-reference/transactions/transaction-validation/index"},{"title":"Generate OTP","openapi":"POST /api/v4.0/integrations/transactions/otp","href":"/api-reference/transactions/transaction-validation/generate-otp"}]}]},{"group":"Coupons","pages":[{"title":"Coupons API","sidebarTitle":"Coupons","href":"/api-reference/coupons/coupons"},{"title":"Generate Coupon","openapi":"POST /api/v4.0/integrations/coupons/predefined","href":"/api-reference/coupons/generate-coupon"},{"title":"Validate Single Coupon","openapi":"POST /api/v4.0/integrations/coupons/{code}/validate","href":"/api-reference/coupons/validate-single-coupon"},{"title":"Validate Multiple Coupons","openapi":"POST /api/v4.0/integrations/coupons/validate","href":"/api-reference/coupons/validate-multiple-coupons"},{"title":"Burn Coupon","openapi":"POST /api/v4.0/integrations/coupons/burn","href":"/api-reference/coupons/burn-coupon"},{"title":"Release Coupons","openapi":"DELETE /api/v4.0/integrations/coupons/{lockReference}","href":"/api-reference/coupons/release-coupons"},{"title":"Automatic Coupons","openapi":"POST /api/v4.0/integrations/coupons/automatic","href":"/api-reference/coupons/automatic-coupons"}]},{"group":"Configurations","pages":[{"title":"Configurations","href":"/api-reference/configurations/configurations"},{"group":"Reward Configurations","pages":[{"title":"Reward Configurations","href":"/api-reference/configurations/reward-configurations/index"},{"title":"Cashback Configurations","openapi":"GET /api/v4.0/integrations/configurations/cashback","href":"/api-reference/configurations/reward-configurations/cashback-settings"},{"title":"Redemption Configurations","openapi":"GET /api/v4.0/integrations/configurations/redemption","href":"/api-reference/configurations/reward-configurations/redemption-settings"},{"title":"Coupon Configurations","openapi":"GET /api/v4.0/integrations/configurations/coupon","href":"/api-reference/configurations/reward-configurations/coupon-settings"},{"title":"Update Coupon Configurations","openapi":"PUT /api/v4.0/integrations/configurations/coupon","href":"/api-reference/configurations/reward-configurations/update-coupon-settings"}]},{"group":"Program Configurations","pages":[{"title":"Program Configurations","href":"/api-reference/configurations/program-configurations/index"},{"title":"Campaigns Configurations","openapi":"GET /api/v4.0/integrations/configurations/reward-campaigns","href":"/api-reference/configurations/program-configurations/campaigns"},{"title":"Tiers Configurations","openapi":"GET /api/v4.0/integrations/configurations/tiers","href":"/api-reference/configurations/program-configurations/vip-tiers"},{"title":"Referrals Configurations","openapi":"GET /api/v4.0/integrations/configurations/referrals","href":"/api-reference/configurations/program-configurations/referral-settings"}]},{"title":"Get Widget Configurations","openapi":"GET /api/v4.0/integrations/configurations/widget","href":"/api-reference/configurations/widget-configuration/index"}]},{"group":"Leaderboard","pages":[{"title":"Customer Leaderboard","openapi":"GET /api/v4.0/integrations/leaderboard","href":"/api-reference/leaderboard/customer-leaderboard"}]},{"group":"Batches","pages":[{"title":"Batches","href":"/api-reference/batches/batches"},{"group":"Batch Creation","pages":[{"title":"Batch Creation","href":"/api-reference/batches/batch-creation/index"},{"title":"Create Customers Batch Job","openapi":"POST /api/v4.0/integrations/batch/customers","href":"/api-reference/batches/batch-creation/customer-data"},{"title":"Track Orders Batch Job","openapi":"POST /api/v4.0/integrations/batch/orders","href":"/api-reference/batches/batch-creation/orders"},{"title":"Order Transactions Batch Job","openapi":"POST /api/v4.0/integrations/batch/orders/transactions","href":"/api-reference/batches/batch-creation/order-transactions"},{"title":"Balance Inquiry Batch Job","openapi":"POST /api/v4.0/integrations/batch/balance-inquiry","href":"/api-reference/batches/batch-creation/balance-inquiries"},{"title":"Balance Adjustment Batch Job","openapi":"POST /api/v4.0/integrations/batch/balance-adjustment","href":"/api-reference/batches/batch-creation/adjustments"},{"title":"Reward Cashback Batch Job","openapi":"POST /api/v4.0/integrations/batch/cashback","href":"/api-reference/batches/batch-creation/cashback-rewards"},{"title":"Redeem Batch Job","openapi":"POST /api/v4.0/integrations/batch/redeem","href":"/api-reference/batches/batch-creation/redemptions"},{"title":"Send Events Batch Job","openapi":"POST /api/v4.0/integrations/batch/events","href":"/api-reference/batches/batch-creation/events"}]},{"group":"Batch Management","pages":[{"title":"Batch Management","href":"/api-reference/batches/batch-management/index"},{"title":"Check Batch Status","openapi":"GET /api/v4.0/integrations/batches/{batchId}/status","href":"/api-reference/batches/batch-management/check-status"},{"title":"Stop Batch Execution","openapi":"POST /api/v4.0/integrations/batches/{batchId}/stop","href":"/api-reference/batches/batch-management/stop-execution"}]}]}]},{"group":"Webhooks","pages":[{"title":"Overview","href":"/api-reference/webhooks/overview"},{"title":"Subscribing to Webhooks","href":"/api-reference/webhooks/subscribing"},{"group":"Webhook Topics","pages":[{"title":"Webhook Topics","href":"/api-reference/webhooks/webhook-topics"},{"title":"Customer Notifications Webhook","sidebarTitle":"Customer Notifications","href":"/api-reference/webhooks/webhook-topics/notifications"},{"title":"Customer Profile Updates","href":"/api-reference/webhooks/webhook-topics/profile-updates"}]}]}]},{"version":"v4.1","pages":[{"title":"v4.1","href":"/api-reference/introduction-v4.1"}]}]},{"tab":"Updates","pages":[{"title":"Updates","href":"/changelog/updates"}]}]},"basePath":"","title":"How Do I Redeem Points at Checkout with Gameball POS (v3)? - Gameball Docs","buildId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","deploymentId":"dpl_DeHjVRGfFnhYQwHnfC2pjeXXv8h9","dynamics":["2b790eda92"],"chunks":["ApiExamples-D5rWArI6.js","utils-DDTCYAF2.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","cloneDeep-izs3Hzxb.js","utils-De8ttokP.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-O2i12wsz.js","shallow-DV8xABTt.js","snippetPresets-DtAN0nWx.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","getApiPlaygroundDisplay-DBZ0B5Jx.js","CodeSnippet-BVi0tPUX.js","CodeSnippets-CqASbIwY.js"]}