[{"data":1,"prerenderedAt":2253},["ShallowReactive",2],{"navigation":3,"external-navigation":214,"external_core:\u002Fcore\u002Fprocessors\u002Fyou-got-a-gift":443},[4,8,201],{"title":5,"path":6,"stem":7},"Documentation","\u002F","README",{"title":9,"path":10,"stem":11,"children":12},"EOS","\u002Feos","eos\u002FREADME",[13,44,121,181],{"title":14,"collapsed":15,"path":16,"stem":17,"children":18,"page":43},"Adrs",true,"\u002Feos\u002Fadrs","eos\u002Fadrs",[19,23,27,31,35,39],{"title":20,"path":21,"stem":22},"Use Turborepo for the EOS monorepo","\u002Feos\u002Fadrs\u002F0001-use-turborepo-for-eos","eos\u002Fadrs\u002F0001-use-turborepo-for-eos",{"title":24,"path":25,"stem":26},"Use Oxc for linting and formatting","\u002Feos\u002Fadrs\u002F0003-use-oxc-for-linting-and-formatting","eos\u002Fadrs\u002F0003-use-oxc-for-linting-and-formatting",{"title":28,"path":29,"stem":30},"Lint Markdown and validate links in CI","\u002Feos\u002Fadrs\u002F0004-lint-markdown-in-ci","eos\u002Fadrs\u002F0004-lint-markdown-in-ci",{"title":32,"path":33,"stem":34},"Use Lefthook for repository-managed Git hooks","\u002Feos\u002Fadrs\u002F0005-use-lefthook-for-repository-git-hooks","eos\u002Fadrs\u002F0005-use-lefthook-for-repository-git-hooks",{"title":36,"path":37,"stem":38},"Use Commitlint's conventional configuration","\u002Feos\u002Fadrs\u002F0006-use-commitlint-conventional-configuration","eos\u002Fadrs\u002F0006-use-commitlint-conventional-configuration",{"title":40,"path":41,"stem":42},"Use Nx for EOS task execution","\u002Feos\u002Fadrs\u002F0007-use-nx-for-eos","eos\u002Fadrs\u002F0007-use-nx-for-eos",false,{"title":45,"path":46,"stem":47,"children":48},"Harbourmaster","\u002Feos\u002Fharbourmaster","eos\u002Fharbourmaster\u002FREADME",[49,58,71,96],{"title":50,"path":51,"stem":52,"children":53,"page":43},"Decisions","\u002Feos\u002Fharbourmaster\u002Fdecisions","eos\u002Fharbourmaster\u002Fdecisions",[54],{"title":55,"path":56,"stem":57},"AI-50: GitHub auth and fork pull request policy","\u002Feos\u002Fharbourmaster\u002Fdecisions\u002Fai-50-auth-and-fork-policy","eos\u002Fharbourmaster\u002Fdecisions\u002Fai-50-auth-and-fork-policy",{"title":59,"path":60,"stem":61,"children":62,"page":43},"Explanation","\u002Feos\u002Fharbourmaster\u002Fexplanation","eos\u002Fharbourmaster\u002Fexplanation",[63,67],{"title":64,"path":65,"stem":66},"The Harbourmaster review pipeline","\u002Feos\u002Fharbourmaster\u002Fexplanation\u002Freview-pipeline","eos\u002Fharbourmaster\u002Fexplanation\u002Freview-pipeline",{"title":68,"path":69,"stem":70},"The Harbourmaster shared-action trust boundary","\u002Feos\u002Fharbourmaster\u002Fexplanation\u002Fshared-action-trust-boundary","eos\u002Fharbourmaster\u002Fexplanation\u002Fshared-action-trust-boundary",{"title":72,"path":73,"stem":74,"children":75,"page":43},"How To","\u002Feos\u002Fharbourmaster\u002Fhow-to","eos\u002Fharbourmaster\u002Fhow-to",[76,80,84,88,92],{"title":77,"path":78,"stem":79},"How to add Harbourmaster reviews to a repository","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Fadd-harbourmaster-to-a-repository","eos\u002Fharbourmaster\u002Fhow-to\u002Fadd-harbourmaster-to-a-repository",{"title":81,"path":82,"stem":83},"How to build a pilot dashboard","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Fbuild-pilot-dashboard","eos\u002Fharbourmaster\u002Fhow-to\u002Fbuild-pilot-dashboard",{"title":85,"path":86,"stem":87},"How to configure model routing","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Fconfigure-model-routing","eos\u002Fharbourmaster\u002Fhow-to\u002Fconfigure-model-routing",{"title":89,"path":90,"stem":91},"How to request a Harbourmaster review","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Frequest-a-review","eos\u002Fharbourmaster\u002Fhow-to\u002Frequest-a-review",{"title":93,"path":94,"stem":95},"How to diagnose a Harbourmaster review failure","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Ftroubleshoot-a-review","eos\u002Fharbourmaster\u002Fhow-to\u002Ftroubleshoot-a-review",{"title":97,"path":98,"stem":99,"children":100,"page":43},"Reference","\u002Feos\u002Fharbourmaster\u002Freference","eos\u002Fharbourmaster\u002Freference",[101,105,109,113,117],{"title":102,"path":103,"stem":104},"Harbourmaster command-line interface","\u002Feos\u002Fharbourmaster\u002Freference\u002Fcli","eos\u002Fharbourmaster\u002Freference\u002Fcli",{"title":106,"path":107,"stem":108},"Harbourmaster configuration","\u002Feos\u002Fharbourmaster\u002Freference\u002Fconfiguration","eos\u002Fharbourmaster\u002Freference\u002Fconfiguration",{"title":110,"path":111,"stem":112},"Harbourmaster GitHub Action","\u002Feos\u002Fharbourmaster\u002Freference\u002Fgithub-action","eos\u002Fharbourmaster\u002Freference\u002Fgithub-action",{"title":114,"path":115,"stem":116},"Harbourmaster review behavior","\u002Feos\u002Fharbourmaster\u002Freference\u002Freview-behavior","eos\u002Fharbourmaster\u002Freference\u002Freview-behavior",{"title":118,"path":119,"stem":120},"Harbourmaster telemetry","\u002Feos\u002Fharbourmaster\u002Freference\u002Ftelemetry","eos\u002Fharbourmaster\u002Freference\u002Ftelemetry",{"title":72,"path":122,"stem":123,"children":124,"page":43},"\u002Feos\u002Fhow-to","eos\u002Fhow-to",[125,129,133,137,141,145,149,153,157,161,165,169,173,177],{"title":126,"path":127,"stem":128},"How to add an external documentation source","\u002Feos\u002Fhow-to\u002Fadd-external-documentation-source","eos\u002Fhow-to\u002Fadd-external-documentation-source",{"title":130,"path":131,"stem":132},"How to connect SDLC integrations","\u002Feos\u002Fhow-to\u002Fconnect-sdlc-integrations","eos\u002Fhow-to\u002Fconnect-sdlc-integrations",{"title":134,"path":135,"stem":136},"How to consume the EOS plugin marketplace","\u002Feos\u002Fhow-to\u002Fconsume-eos-marketplace","eos\u002Fhow-to\u002Fconsume-eos-marketplace",{"title":138,"path":139,"stem":140},"How to create a spike ticket","\u002Feos\u002Fhow-to\u002Fcreate-spike-ticket","eos\u002Fhow-to\u002Fcreate-spike-ticket",{"title":142,"path":143,"stem":144},"How to finalise a repository change","\u002Feos\u002Fhow-to\u002Ffinalise-change","eos\u002Fhow-to\u002Ffinalise-change",{"title":146,"path":147,"stem":148},"How to install the EOS Docs MCP server","\u002Feos\u002Fhow-to\u002Finstall-eos-docs-mcp","eos\u002Fhow-to\u002Finstall-eos-docs-mcp",{"title":150,"path":151,"stem":152},"How to resolve a spike ticket","\u002Feos\u002Fhow-to\u002Fresolve-spike-ticket","eos\u002Fhow-to\u002Fresolve-spike-ticket",{"title":154,"path":155,"stem":156},"How to run Git hook checks","\u002Feos\u002Fhow-to\u002Frun-git-hook-checks","eos\u002Fhow-to\u002Frun-git-hook-checks",{"title":158,"path":159,"stem":160},"How to use the AI-enabled SDLC","\u002Feos\u002Fhow-to\u002Fuse-ai-enabled-sdlc","eos\u002Fhow-to\u002Fuse-ai-enabled-sdlc",{"title":162,"path":163,"stem":164},"Use the Aikido plugin","\u002Feos\u002Fhow-to\u002Fuse-aikido-plugin","eos\u002Fhow-to\u002Fuse-aikido-plugin",{"title":166,"path":167,"stem":168},"How to use Compass","\u002Feos\u002Fhow-to\u002Fuse-compass","eos\u002Fhow-to\u002Fuse-compass",{"title":170,"path":171,"stem":172},"How to use Fallow","\u002Feos\u002Fhow-to\u002Fuse-fallow","eos\u002Fhow-to\u002Fuse-fallow",{"title":174,"path":175,"stem":176},"How to use incremental mutation tests","\u002Feos\u002Fhow-to\u002Fuse-incremental-mutation-tests","eos\u002Fhow-to\u002Fuse-incremental-mutation-tests",{"title":178,"path":179,"stem":180},"How to use Scout","\u002Feos\u002Fhow-to\u002Fuse-scout","eos\u002Fhow-to\u002Fuse-scout",{"title":97,"path":182,"stem":183,"children":184,"page":43},"\u002Feos\u002Freference","eos\u002Freference",[185,189,193,197],{"title":186,"path":187,"stem":188},"Compass CLI","\u002Feos\u002Freference\u002Fcompass-cli","eos\u002Freference\u002Fcompass-cli",{"title":190,"path":191,"stem":192},"EOS marketplace skills","\u002Feos\u002Freference\u002Fmarketplace-skills","eos\u002Freference\u002Fmarketplace-skills",{"title":194,"path":195,"stem":196},"Nx task execution and cache","\u002Feos\u002Freference\u002Fnx-task-execution","eos\u002Freference\u002Fnx-task-execution",{"title":198,"path":199,"stem":200},"Scout CLI","\u002Feos\u002Freference\u002Fscout-cli","eos\u002Freference\u002Fscout-cli",{"title":202,"path":203,"stem":204,"children":205},"Product engineering","\u002Fproduct-engineering","product-engineering\u002FREADME",[206],{"title":14,"collapsed":15,"path":207,"stem":208,"children":209,"page":43},"\u002Fproduct-engineering\u002Fadrs","product-engineering\u002Fadrs",[210],{"title":211,"path":212,"stem":213},"Codify Engineering Standards as Skills","\u002Fproduct-engineering\u002Fadrs\u002F0002-codify-engineering-standards-as-skills","product-engineering\u002Fadrs\u002F0002-codify-engineering-standards-as-skills",[215,268],{"nav":216,"source":265},[217],{"title":218,"path":219,"stem":220,"children":221},"Ember","\u002Fember","ember",[222,225,257,261],{"title":223,"path":219,"stem":224},"StoreFront Documentation","ember\u002Findex",{"title":14,"path":226,"stem":227,"children":228,"page":43},"\u002Fember\u002Fadrs","ember\u002Fadrs",[229,233,237,241,245,249,253],{"title":230,"path":231,"stem":232},"Add Infection as a non-blocking mutation testing tool for Ember","\u002Fember\u002Fadrs\u002F0001-infection-mutation-testing","ember\u002Fadrs\u002F0001-infection-mutation-testing",{"title":234,"path":235,"stem":236},"Process DELETE scheduled changes before CREATE_UPDATE at the same instant","\u002Fember\u002Fadrs\u002F0002-scheduled-change-processing-order","ember\u002Fadrs\u002F0002-scheduled-change-processing-order",{"title":238,"path":239,"stem":240},"Standard rate scheduling is permanent until overridden","\u002Fember\u002Fadrs\u002F0003-standard-rate-scheduling-is-permanent","ember\u002Fadrs\u002F0003-standard-rate-scheduling-is-permanent",{"title":242,"path":243,"stem":244},"Promotions require an existing standard rate","\u002Fember\u002Fadrs\u002F0004-promotions-require-existing-standard-rate","ember\u002Fadrs\u002F0004-promotions-require-existing-standard-rate",{"title":246,"path":247,"stem":248},"UTC datetime contract between Storefront and Hub","\u002Fember\u002Fadrs\u002F0005-utc-datetime-contract-between-storefront-and-hub","ember\u002Fadrs\u002F0005-utc-datetime-contract-between-storefront-and-hub",{"title":250,"path":251,"stem":252},"Elapsed unprocessed scheduled changes do not block rate changes","\u002Fember\u002Fadrs\u002F0006-stale-scheduler-rows-do-not-block-rate-changes","ember\u002Fadrs\u002F0006-stale-scheduler-rows-do-not-block-rate-changes",{"title":254,"path":255,"stem":256},"ADR-0007: Delete ConfigureTenantAuth routing command once OIDC setup migrates to Hub","\u002Fember\u002Fadrs\u002F0007-delete-configure-tenant-auth-routing-command","ember\u002Fadrs\u002F0007-delete-configure-tenant-auth-routing-command",{"title":258,"path":259,"stem":260},"Domain Overview","\u002Fember\u002Fdomain_overview","ember\u002Fdomain_overview",{"title":262,"path":263,"stem":264},"Main Flows","\u002Fember\u002Fkey_flows","ember\u002Fkey_flows",{"collectionName":266,"label":267,"prefix":220},"external_ember","StoreFront (Ember)",{"nav":269,"source":441},[270],{"title":271,"path":272,"stem":273,"children":274},"Core","\u002Fcore","core",[275,278,306,310,332,336,346,363,420,424],{"title":276,"path":272,"stem":277},"Documentation Index","core\u002Findex",{"title":14,"path":279,"stem":280,"children":281,"page":43},"\u002Fcore\u002Fadrs","core\u002Fadrs",[282,286,290,294,298,302],{"title":283,"path":284,"stem":285},"ADR-XXXX: Short, descriptive title","\u002Fcore\u002Fadrs\u002F0000-template","core\u002Fadrs\u002F0000-template",{"title":287,"path":288,"stem":289},"ADR-1: Promotions endpoint","\u002Fcore\u002Fadrs\u002F0001-add-promotions-endpoint","core\u002Fadrs\u002F0001-add-promotions-endpoint",{"title":291,"path":292,"stem":293},"ADR-2: EOM partner report job dispatch","\u002Fcore\u002Fadrs\u002F0002-eom-report-job-dispatch","core\u002Fadrs\u002F0002-eom-report-job-dispatch",{"title":295,"path":296,"stem":297},"ADR-3: Replace PB fee waive flag with a Zero scheme override","\u002Fcore\u002Fadrs\u002F0003-replace-pb-fee-waive-with-zero-scheme","core\u002Fadrs\u002F0003-replace-pb-fee-waive-with-zero-scheme",{"title":299,"path":300,"stem":301},"ADR-4: No processor Digital Top-up capability gate in Reloadable Commercials","\u002Fcore\u002Fadrs\u002F0004-no-processor-top-up-capability-gate","core\u002Fadrs\u002F0004-no-processor-top-up-capability-gate",{"title":303,"path":304,"stem":305},"ADR-5: Sparse polymorphic sale fee override reason stamp","\u002Fcore\u002Fadrs\u002F0005-sale-fee-override-reason-stamp","core\u002Fadrs\u002F0005-sale-fee-override-reason-stamp",{"title":307,"path":308,"stem":309},"Agent Workflow","\u002Fcore\u002Fai-workflow","core\u002Fai-workflow",{"title":311,"path":312,"stem":313,"children":314},"Backend Guide","\u002Fcore\u002Fbackend","core\u002Fbackend\u002Findex",[315,316,320,324,328],{"title":311,"path":312,"stem":313},{"title":317,"path":318,"stem":319},"Backend AI Tooling","\u002Fcore\u002Fbackend\u002Fai-tooling","core\u002Fbackend\u002Fai-tooling",{"title":321,"path":322,"stem":323},"Backend Linting and Formatting","\u002Fcore\u002Fbackend\u002Flinting-and-formatting","core\u002Fbackend\u002Flinting-and-formatting",{"title":325,"path":326,"stem":327},"Backend Setup","\u002Fcore\u002Fbackend\u002Fsetup","core\u002Fbackend\u002Fsetup",{"title":329,"path":330,"stem":331},"Backend Testing","\u002Fcore\u002Fbackend\u002Ftesting","core\u002Fbackend\u002Ftesting",{"title":333,"path":334,"stem":335},"Documentation Health","\u002Fcore\u002Fdoc-health","core\u002Fdoc-health",{"title":337,"path":338,"stem":339,"children":340},"Frontend Guide","\u002Fcore\u002Ffrontend","core\u002Ffrontend\u002Findex",[341,342],{"title":337,"path":338,"stem":339},{"title":343,"path":344,"stem":345},"Frontend Development","\u002Fcore\u002Ffrontend\u002Fdevelopment","core\u002Ffrontend\u002Fdevelopment",{"title":347,"path":348,"stem":349,"children":350,"page":43},"Modules","\u002Fcore\u002Fmodules","core\u002Fmodules",[351,355],{"title":352,"path":353,"stem":354},"Connect API","\u002Fcore\u002Fmodules\u002Fconnect-api","core\u002Fmodules\u002Fconnect-api",{"title":356,"path":357,"stem":358,"children":359,"page":43},"Secure Links","\u002Fcore\u002Fmodules\u002Fsecure-links","core\u002Fmodules\u002Fsecure-links",[360],{"title":356,"path":361,"stem":362},"\u002Fcore\u002Fmodules\u002Fsecure-links\u002Fsecure-links","core\u002Fmodules\u002Fsecure-links\u002Fsecure-links",{"title":364,"path":365,"stem":366,"children":367,"page":43},"Processors","\u002Fcore\u002Fprocessors","core\u002Fprocessors",[368,372,376,380,384,388,392,396,400,404,408,412,416],{"title":369,"path":370,"stem":371},"Amazon Processor and API","\u002Fcore\u002Fprocessors\u002Famazon","core\u002Fprocessors\u002Famazon",{"title":373,"path":374,"stem":375},"Amilon Processor and API","\u002Fcore\u002Fprocessors\u002Familon","core\u002Fprocessors\u002Familon",{"title":377,"path":378,"stem":379},"Cadooz Processor and API","\u002Fcore\u002Fprocessors\u002Fcadooz","core\u002Fprocessors\u002Fcadooz",{"title":381,"path":382,"stem":383},"Choice Digital Processor and API","\u002Fcore\u002Fprocessors\u002Fchoice-digital","core\u002Fprocessors\u002Fchoice-digital",{"title":385,"path":386,"stem":387},"Diggecard processor reference","\u002Fcore\u002Fprocessors\u002Fdiggecard","core\u002Fprocessors\u002Fdiggecard",{"title":389,"path":390,"stem":391},"ePay Processor and API","\u002Fcore\u002Fprocessors\u002Fepay","core\u002Fprocessors\u002Fepay",{"title":393,"path":394,"stem":395},"GoGift v2 Processor and API","\u002Fcore\u002Fprocessors\u002Fgo-gift-v2","core\u002Fprocessors\u002Fgo-gift-v2",{"title":397,"path":398,"stem":399},"InComm Processor and API","\u002Fcore\u002Fprocessors\u002Fincomm","core\u002Fprocessors\u002Fincomm",{"title":401,"path":402,"stem":403},"Ogloba Processor and API","\u002Fcore\u002Fprocessors\u002Fogloba","core\u002Fprocessors\u002Fogloba",{"title":405,"path":406,"stem":407},"SVSECard Processor and API","\u002Fcore\u002Fprocessors\u002Fsvs-ecard","core\u002Fprocessors\u002Fsvs-ecard",{"title":409,"path":410,"stem":411},"Vananam Processor and API","\u002Fcore\u002Fprocessors\u002Fvananam","core\u002Fprocessors\u002Fvananam",{"title":413,"path":414,"stem":415},"Vouchers Depot processor reference","\u002Fcore\u002Fprocessors\u002Fvouchers-depot","core\u002Fprocessors\u002Fvouchers-depot",{"title":417,"path":418,"stem":419},"You Got a Gift Processor and API","\u002Fcore\u002Fprocessors\u002Fyou-got-a-gift","core\u002Fprocessors\u002Fyou-got-a-gift",{"title":421,"path":422,"stem":423},"Development Quickstart","\u002Fcore\u002Fsetup","core\u002Fsetup",{"title":425,"path":426,"stem":427,"children":428,"page":43},"Workflows","\u002Fcore\u002Fworkflows","core\u002Fworkflows",[429,433,437],{"title":430,"path":431,"stem":432},"Hub Endpoint Workflow","\u002Fcore\u002Fworkflows\u002Fhub-endpoints","core\u002Fworkflows\u002Fhub-endpoints",{"title":434,"path":435,"stem":436},"OpenAPI Tooling","\u002Fcore\u002Fworkflows\u002Fopenapi-tooling","core\u002Fworkflows\u002Fopenapi-tooling",{"title":438,"path":439,"stem":440},"Processor Integration Workflow","\u002Fcore\u002Fworkflows\u002Fprocessors","core\u002Fworkflows\u002Fprocessors",{"collectionName":442,"label":271,"prefix":273},"external_core",{"page":444,"surround":2250},{"id":445,"title":417,"body":446,"config":2245,"description":452,"extension":2246,"meta":2247,"navigation":15,"path":418,"seo":2248,"stem":419,"__hash__":2249},"external_core\u002Fcore\u002Fprocessors\u002Fyou-got-a-gift.md",{"type":447,"value":448,"toc":2224},"minimark",[449,453,458,461,472,551,555,608,615,619,622,627,634,738,749,753,756,957,960,1029,1033,1036,1044,1052,1056,1059,1173,1180,1183,1212,1216,1219,1395,1398,1631,1635,1639,1646,1689,1700,1704,1707,1857,1860,1864,1870,1876,1880,1934,1940,1944,1947,2084,2090,2094,2097,2122,2125,2160,2164,2167,2171,2220],[450,451,452],"p",{},"This page explains the You Got a Gift integration from an operations and customer-service perspective: how an order moves through the system, which settings control it, and what evidence is useful when investigating a failed or delayed gift-card order.",[454,455,457],"h2",{"id":456},"what-you-got-a-gift-does","What You Got a Gift does",[450,459,460],{},"You Got a Gift is an asynchronous, SKU-per-product order processor with catalogue support. The application creates a provider order using the configured brand product code, parses the returned voucher payload, and can retrieve the same order again by its provider order ID.",[450,462,463,464,468,469,471],{},"The platform treats the integration as asynchronous, but the current interaction validates voucher data on both create and retrieve responses. A response with only an order ID and no usable ",[465,466,467],"code",{},"url"," or ",[465,470,465],{}," is therefore a response-validation failure in the current implementation rather than a normal pending response.",[473,474,475,488],"table",{},[476,477,478],"thead",{},[479,480,481,485],"tr",{},[482,483,484],"th",{},"Property",[482,486,487],{},"Behaviour",[489,490,491,500,508,516,524,531],"tbody",{},[479,492,493,497],{},[494,495,496],"td",{},"Processor type",[494,498,499],{},"SKU per product; brand product mapping is required",[479,501,502,505],{},[494,503,504],{},"Processing",[494,506,507],{},"Asynchronous order creation with order retrieval",[479,509,510,513],{},[494,511,512],{},"Delivery",[494,514,515],{},"Digital voucher\u002Fcode or URL",[479,517,518,521],{},[494,519,520],{},"Balance lookup",[494,522,523],{},"Unsupported",[479,525,526,529],{},[494,527,528],{},"Cancellation",[494,530,523],{},[479,532,533,536],{},[494,534,535],{},"Order completion rule",[494,537,538,539,542,543,546,547,468,549],{},"Response contains ",[465,540,541],{},"order_id",", ",[465,544,545],{},"gift_voucher",", and a usable ",[465,548,467],{},[465,550,465],{},[454,552,554],{"id":553},"order-lifecycle","Order lifecycle",[556,557,558,562,565,576,582,599,605],"ol",{},[559,560,561],"li",{},"A partner orders a You Got a Gift-enabled brand.",[559,563,564],{},"The processor reads the brand's You Got a Gift product\u002FSKU mapping, the requested amount, currency, and the internal sale UUID.",[559,566,567,568,571,572,575],{},"The currency selects the provider credentials and is converted to the provider country code: for example, ",[465,569,570],{},"AED"," maps to ",[465,573,574],{},"AE",".",[559,577,578,579,575],{},"The client creates the provider order with the internal transaction reference and ",[465,580,581],{},"notify: 0",[559,583,584,585,587,588,590,591,542,593,595,596,575],{},"The interaction requires ",[465,586,541],{}," and ",[465,589,545],{}," in the response, then extracts the recognised voucher labels: ",[465,592,467],{},[465,594,465],{},", and ",[465,597,598],{},"pin",[559,600,601,602,604],{},"The provider ",[465,603,541],{}," becomes the processor reference. The application stores the returned voucher data and marks the sale successful.",[559,606,607],{},"If retrieval is requested, the client calls the provider with the stored order ID and parses the same response shape again.",[450,609,610,611,614],{},"The provider's ",[465,612,613],{},"state"," and ordered amount may be present in the response and are useful for diagnostics, but they are not the success rule used by the processor. A usable voucher value is required by the parser.",[454,616,618],{"id":617},"example-api-order-flow","Example API order flow",[450,620,621],{},"The following examples are illustrative and contain no real credentials or voucher values.",[623,624,626],"h3",{"id":625},"create-order-request","Create order request",[450,628,629,630,633],{},"The request is sent as JSON to ",[465,631,632],{},"POST \u002Forders\u002F"," relative to the configured base URI:",[635,636,641],"pre",{"className":637,"code":638,"language":639,"meta":640,"style":640},"language-json shiki shiki-themes github-dark github-light","{\n  \"reference_id\": \"sale-123e4567-e89b-12d3-a456-426614174000\",\n  \"notify\": 0,\n  \"brand_code\": \"ABC12\",\n  \"currency\": \"AED\",\n  \"amount\": 65.0,\n  \"country\": \"AE\"\n}\n","json","",[465,642,643,652,669,682,695,708,721,732],{"__ignoreMap":640},[644,645,648],"span",{"class":646,"line":647},"line",1,[644,649,651],{"class":650},"sQ3_J","{\n",[644,653,655,659,662,666],{"class":646,"line":654},2,[644,656,658],{"class":657},"s0DvM","  \"reference_id\"",[644,660,661],{"class":650},": ",[644,663,665],{"class":664},"sg6BJ","\"sale-123e4567-e89b-12d3-a456-426614174000\"",[644,667,668],{"class":650},",\n",[644,670,672,675,677,680],{"class":646,"line":671},3,[644,673,674],{"class":657},"  \"notify\"",[644,676,661],{"class":650},[644,678,679],{"class":657},"0",[644,681,668],{"class":650},[644,683,685,688,690,693],{"class":646,"line":684},4,[644,686,687],{"class":657},"  \"brand_code\"",[644,689,661],{"class":650},[644,691,692],{"class":664},"\"ABC12\"",[644,694,668],{"class":650},[644,696,698,701,703,706],{"class":646,"line":697},5,[644,699,700],{"class":657},"  \"currency\"",[644,702,661],{"class":650},[644,704,705],{"class":664},"\"AED\"",[644,707,668],{"class":650},[644,709,711,714,716,719],{"class":646,"line":710},6,[644,712,713],{"class":657},"  \"amount\"",[644,715,661],{"class":650},[644,717,718],{"class":657},"65.0",[644,720,668],{"class":650},[644,722,724,727,729],{"class":646,"line":723},7,[644,725,726],{"class":657},"  \"country\"",[644,728,661],{"class":650},[644,730,731],{"class":664},"\"AE\"\n",[644,733,735],{"class":646,"line":734},8,[644,736,737],{"class":650},"}\n",[450,739,740,741,744,745,748],{},"The ",[465,742,743],{},"reference_id"," is the internal transaction reference, while ",[465,746,747],{},"brand_code"," is the provider product code configured for the brand. Authentication headers are generated from the currency-specific API key and secret and must not be copied into support tickets.",[623,750,752],{"id":751},"create-order-response","Create order response",[450,754,755],{},"An order that can be completed by the current parser has this general shape:",[635,757,759],{"className":637,"code":758,"language":639,"meta":640,"style":640},"{\n  \"reference_id\": \"sale-123e4567-e89b-12d3-a456-426614174000\",\n  \"order_id\": 12345,\n  \"state\": 1,\n  \"notify\": 0,\n  \"ordered_amount\": {\n    \"currency\": \"AED\",\n    \"amount\": 65\n  },\n  \"barcode\": \"https:\u002F\u002F[redacted]\u002Fbarcode\",\n  \"gift_voucher\": [\n    {\n      \"label\": \"code\",\n      \"value\": \"1234567890\"\n    },\n    {\n      \"label\": \"pin\",\n      \"value\": \"0987 654 321\"\n    }\n  ],\n  \"expiry_date\": \"2026-08-02\"\n}\n",[465,760,761,765,775,787,799,809,817,828,838,844,857,866,872,885,896,902,907,919,929,935,941,952],{"__ignoreMap":640},[644,762,763],{"class":646,"line":647},[644,764,651],{"class":650},[644,766,767,769,771,773],{"class":646,"line":654},[644,768,658],{"class":657},[644,770,661],{"class":650},[644,772,665],{"class":664},[644,774,668],{"class":650},[644,776,777,780,782,785],{"class":646,"line":671},[644,778,779],{"class":657},"  \"order_id\"",[644,781,661],{"class":650},[644,783,784],{"class":657},"12345",[644,786,668],{"class":650},[644,788,789,792,794,797],{"class":646,"line":684},[644,790,791],{"class":657},"  \"state\"",[644,793,661],{"class":650},[644,795,796],{"class":657},"1",[644,798,668],{"class":650},[644,800,801,803,805,807],{"class":646,"line":697},[644,802,674],{"class":657},[644,804,661],{"class":650},[644,806,679],{"class":657},[644,808,668],{"class":650},[644,810,811,814],{"class":646,"line":710},[644,812,813],{"class":657},"  \"ordered_amount\"",[644,815,816],{"class":650},": {\n",[644,818,819,822,824,826],{"class":646,"line":723},[644,820,821],{"class":657},"    \"currency\"",[644,823,661],{"class":650},[644,825,705],{"class":664},[644,827,668],{"class":650},[644,829,830,833,835],{"class":646,"line":734},[644,831,832],{"class":657},"    \"amount\"",[644,834,661],{"class":650},[644,836,837],{"class":657},"65\n",[644,839,841],{"class":646,"line":840},9,[644,842,843],{"class":650},"  },\n",[644,845,847,850,852,855],{"class":646,"line":846},10,[644,848,849],{"class":657},"  \"barcode\"",[644,851,661],{"class":650},[644,853,854],{"class":664},"\"https:\u002F\u002F[redacted]\u002Fbarcode\"",[644,856,668],{"class":650},[644,858,860,863],{"class":646,"line":859},11,[644,861,862],{"class":657},"  \"gift_voucher\"",[644,864,865],{"class":650},": [\n",[644,867,869],{"class":646,"line":868},12,[644,870,871],{"class":650},"    {\n",[644,873,875,878,880,883],{"class":646,"line":874},13,[644,876,877],{"class":657},"      \"label\"",[644,879,661],{"class":650},[644,881,882],{"class":664},"\"code\"",[644,884,668],{"class":650},[644,886,888,891,893],{"class":646,"line":887},14,[644,889,890],{"class":657},"      \"value\"",[644,892,661],{"class":650},[644,894,895],{"class":664},"\"1234567890\"\n",[644,897,899],{"class":646,"line":898},15,[644,900,901],{"class":650},"    },\n",[644,903,905],{"class":646,"line":904},16,[644,906,871],{"class":650},[644,908,910,912,914,917],{"class":646,"line":909},17,[644,911,877],{"class":657},[644,913,661],{"class":650},[644,915,916],{"class":664},"\"pin\"",[644,918,668],{"class":650},[644,920,922,924,926],{"class":646,"line":921},18,[644,923,890],{"class":657},[644,925,661],{"class":650},[644,927,928],{"class":664},"\"0987 654 321\"\n",[644,930,932],{"class":646,"line":931},19,[644,933,934],{"class":650},"    }\n",[644,936,938],{"class":646,"line":937},20,[644,939,940],{"class":650},"  ],\n",[644,942,944,947,949],{"class":646,"line":943},21,[644,945,946],{"class":657},"  \"expiry_date\"",[644,948,661],{"class":650},[644,950,951],{"class":664},"\"2026-08-02\"\n",[644,953,955],{"class":646,"line":954},22,[644,956,737],{"class":650},[450,958,959],{},"The provider may return a URL instead of a code:",[635,961,963],{"className":637,"code":962,"language":639,"meta":640,"style":640},"{\n  \"order_id\": 12345,\n  \"gift_voucher\": [\n    {\n      \"label\": \"url\",\n      \"value\": \"https:\u002F\u002F[redacted]\u002Fvoucher\u002F[redacted]\"\n    }\n  ],\n  \"expiry_date\": \"2026-08-02\"\n}\n",[465,964,965,969,979,985,989,1000,1009,1013,1017,1025],{"__ignoreMap":640},[644,966,967],{"class":646,"line":647},[644,968,651],{"class":650},[644,970,971,973,975,977],{"class":646,"line":654},[644,972,779],{"class":657},[644,974,661],{"class":650},[644,976,784],{"class":657},[644,978,668],{"class":650},[644,980,981,983],{"class":646,"line":671},[644,982,862],{"class":657},[644,984,865],{"class":650},[644,986,987],{"class":646,"line":684},[644,988,871],{"class":650},[644,990,991,993,995,998],{"class":646,"line":697},[644,992,877],{"class":657},[644,994,661],{"class":650},[644,996,997],{"class":664},"\"url\"",[644,999,668],{"class":650},[644,1001,1002,1004,1006],{"class":646,"line":710},[644,1003,890],{"class":657},[644,1005,661],{"class":650},[644,1007,1008],{"class":664},"\"https:\u002F\u002F[redacted]\u002Fvoucher\u002F[redacted]\"\n",[644,1010,1011],{"class":646,"line":723},[644,1012,934],{"class":650},[644,1014,1015],{"class":646,"line":734},[644,1016,940],{"class":650},[644,1018,1019,1021,1023],{"class":646,"line":840},[644,1020,946],{"class":657},[644,1022,661],{"class":650},[644,1024,951],{"class":664},[644,1026,1027],{"class":646,"line":846},[644,1028,737],{"class":650},[623,1030,1032],{"id":1031},"retrieve-order-request-and-response","Retrieve order request and response",[450,1034,1035],{},"Retrieval uses the provider order ID stored as the processor reference:",[635,1037,1042],{"className":1038,"code":1040,"language":1041,"meta":640},[1039],"language-text","GET \u002Forders\u002F12345\u002F\n","text",[465,1043,1040],{"__ignoreMap":640},[450,1045,1046,1047,587,1049,1051],{},"The retrieval request has no JSON body. The currency is used to select the correct provider credentials and is included in the internal request data, while the provider order ID is carried in the URL. The response uses the same ",[465,1048,541],{},[465,1050,545],{}," structure as the create response.",[454,1053,1055],{"id":1054},"response-mapping-and-validation","Response mapping and validation",[450,1057,1058],{},"The interaction maps provider fields to the internal card as follows:",[473,1060,1061,1074],{},[476,1062,1063],{},[479,1064,1065,1068,1071],{},[482,1066,1067],{},"Provider field or condition",[482,1069,1070],{},"Internal result",[482,1072,1073],{},"Operational meaning",[489,1075,1076,1091,1104,1117,1130,1143,1157],{},[479,1077,1078,1082,1088],{},[494,1079,1080],{},[465,1081,541],{},[494,1083,1084,1087],{},[465,1085,1086],{},"processor_reference"," as a string",[494,1089,1090],{},"Identifier used for later retrieval and reconciliation",[479,1092,1093,1098,1101],{},[494,1094,1095],{},[465,1096,1097],{},"gift_voucher[].label = url",[494,1099,1100],{},"Third-party URL",[494,1102,1103],{},"Valid delivery value when no code is returned",[479,1105,1106,1111,1114],{},[494,1107,1108],{},[465,1109,1110],{},"gift_voucher[].label = code",[494,1112,1113],{},"Card code",[494,1115,1116],{},"Valid delivery value; the original code is retained",[479,1118,1119,1124,1127],{},[494,1120,1121],{},[465,1122,1123],{},"gift_voucher[].label = pin",[494,1125,1126],{},"Card PIN",[494,1128,1129],{},"Spaces are removed before storing the PIN",[479,1131,1132,1137,1140],{},[494,1133,1134],{},[465,1135,1136],{},"expiry_date",[494,1138,1139],{},"Expiration date in ISO format",[494,1141,1142],{},"Parsed when present",[479,1144,1145,1151,1154],{},[494,1146,1147,1150],{},[465,1148,1149],{},"barcode"," plus a code",[494,1152,1153],{},"C128 barcode fields generated by Wrappr",[494,1155,1156],{},"No barcode is generated for URL-only responses",[479,1158,1159,1162,1165],{},[494,1160,1161],{},"Unknown voucher label",[494,1163,1164],{},"Ignored",[494,1166,1167,1168,6,1170,1172],{},"It does not satisfy the ",[465,1169,467],{},[465,1171,465],{}," requirement",[450,1174,1175,1176,1179],{},"For codes containing spaces, the stored code remains the provider value, while the generated barcode string encodes spaces as ",[465,1177,1178],{},"%20",". If a response contains a URL and a PIN but no code, the order remains usable through the URL and an error is logged because the combination is unusual.",[450,1181,1182],{},"The following conditions are validation failures:",[1184,1185,1186,1191,1195,1204],"ul",{},[559,1187,1188,1190],{},[465,1189,541],{}," is missing or empty.",[559,1192,1193,1190],{},[465,1194,545],{},[559,1196,1197,1198,468,1201,575],{},"A voucher entry has no ",[465,1199,1200],{},"label",[465,1202,1203],{},"value",[559,1205,1206,1207,468,1209,1211],{},"No recognised ",[465,1208,467],{},[465,1210,465],{}," is returned.",[454,1213,1215],{"id":1214},"audit-comparison-fields","Audit comparison fields",[450,1217,1218],{},"Compare create and retrieve interaction audits as a sequence. The application request and response timestamps come from the processor interaction audit; the provider does not supply equivalent application timing fields in the documented request data.",[473,1220,1221,1237],{},[476,1222,1223],{},[479,1224,1225,1228,1231,1234],{},[482,1226,1227],{},"Field",[482,1229,1230],{},"Create order",[482,1232,1233],{},"Retrieve order",[482,1235,1236],{},"What to verify",[489,1238,1239,1256,1272,1285,1301,1316,1336,1351,1376],{},[479,1240,1241,1244,1248,1253],{},[494,1242,1243],{},"Operation",[494,1245,1246],{},[465,1247,632],{},[494,1249,1250],{},[465,1251,1252],{},"GET \u002Forders\u002F{order_id}\u002F",[494,1254,1255],{},"A new sale starts with create; retrieval reuses the existing provider order",[479,1257,1258,1261,1266,1269],{},[494,1259,1260],{},"Audit transaction reference",[494,1262,1263,1264],{},"Internal sale UUID sent as ",[465,1265,743],{},[494,1267,1268],{},"Retrieval transaction reference from the service request",[494,1270,1271],{},"Both audits belong to the expected sale\u002Fworkflow",[479,1273,1274,1277,1280,1282],{},[494,1275,1276],{},"Request\u002Fresponse timestamps",[494,1278,1279],{},"Audit request and response times",[494,1281,1279],{},[494,1283,1284],{},"The response follows its matching request and the sequence is chronological",[479,1286,1287,1290,1293,1298],{},[494,1288,1289],{},"Provider reference",[494,1291,1292],{},"Not available until response",[494,1294,1295,1297],{},[465,1296,541],{}," from the original create response",[494,1299,1300],{},"The retrieval path uses the stored order ID, not a newly generated order",[479,1302,1303,1306,1310,1313],{},[494,1304,1305],{},"Brand product",[494,1307,1308],{},[465,1309,747],{},[494,1311,1312],{},"Not sent in the retrieval URL",[494,1314,1315],{},"The create value matches the configured provider product",[479,1317,1318,1321,1330,1333],{},[494,1319,1320],{},"Currency\u002Fcountry",[494,1322,1323,1326,1327],{},[465,1324,1325],{},"currency"," and derived ",[465,1328,1329],{},"country",[494,1331,1332],{},"Currency selects credentials",[494,1334,1335],{},"Currency is supported and the expected credential set was used",[479,1337,1338,1341,1346,1348],{},[494,1339,1340],{},"Amount",[494,1342,1343],{},[465,1344,1345],{},"amount",[494,1347,1312],{},[494,1349,1350],{},"The requested amount matches the sale",[479,1352,1353,1356,1365,1368],{},[494,1354,1355],{},"Voucher data",[494,1357,1358,1360,1361,542,1363],{},[465,1359,545],{},", optional ",[465,1362,1149],{},[465,1364,1136],{},[494,1366,1367],{},"Same response fields",[494,1369,1370,1371,468,1373,1375],{},"A usable ",[465,1372,467],{},[465,1374,465],{}," is present before completion",[479,1377,1378,1381,1386,1389],{},[494,1379,1380],{},"Response state",[494,1382,1383,1385],{},[465,1384,613],{}," may be present",[494,1387,1388],{},"Provider response field if present",[494,1390,1391,1392,1394],{},"Do not use ",[465,1393,613],{}," alone as the application success criterion",[450,1396,1397],{},"A redacted comparison record can be represented as follows:",[635,1399,1401],{"className":637,"code":1400,"language":639,"meta":640,"style":640},"{\n  \"create\": {\n    \"operation\": \"POST \u002Forders\u002F\",\n    \"requestTimestamp\": \"2026-08-17T17:16:04Z\",\n    \"responseTimestamp\": \"2026-08-17T17:16:05Z\",\n    \"saleId\": \"sale-123e4567-e89b-12d3-a456-426614174000\",\n    \"referenceId\": \"sale-123e4567-e89b-12d3-a456-426614174000\",\n    \"brandCode\": \"ABC12\",\n    \"currency\": \"AED\",\n    \"country\": \"AE\",\n    \"amount\": 65.0,\n    \"orderId\": \"12345\",\n    \"cardDataPresent\": true\n  },\n  \"retrieve\": {\n    \"operation\": \"GET \u002Forders\u002F12345\u002F\",\n    \"requestTimestamp\": \"2026-08-17T17:18:22Z\",\n    \"responseTimestamp\": \"2026-08-17T17:18:23Z\",\n    \"saleId\": \"sale-123e4567-e89b-12d3-a456-426614174000\",\n    \"processorReference\": \"12345\",\n    \"orderId\": \"12345\",\n    \"cardDataPresent\": true\n  }\n}\n",[465,1402,1403,1407,1414,1426,1438,1450,1461,1472,1483,1493,1505,1515,1527,1537,1541,1548,1559,1570,1581,1591,1602,1612,1620,1626],{"__ignoreMap":640},[644,1404,1405],{"class":646,"line":647},[644,1406,651],{"class":650},[644,1408,1409,1412],{"class":646,"line":654},[644,1410,1411],{"class":657},"  \"create\"",[644,1413,816],{"class":650},[644,1415,1416,1419,1421,1424],{"class":646,"line":671},[644,1417,1418],{"class":657},"    \"operation\"",[644,1420,661],{"class":650},[644,1422,1423],{"class":664},"\"POST \u002Forders\u002F\"",[644,1425,668],{"class":650},[644,1427,1428,1431,1433,1436],{"class":646,"line":684},[644,1429,1430],{"class":657},"    \"requestTimestamp\"",[644,1432,661],{"class":650},[644,1434,1435],{"class":664},"\"2026-08-17T17:16:04Z\"",[644,1437,668],{"class":650},[644,1439,1440,1443,1445,1448],{"class":646,"line":697},[644,1441,1442],{"class":657},"    \"responseTimestamp\"",[644,1444,661],{"class":650},[644,1446,1447],{"class":664},"\"2026-08-17T17:16:05Z\"",[644,1449,668],{"class":650},[644,1451,1452,1455,1457,1459],{"class":646,"line":710},[644,1453,1454],{"class":657},"    \"saleId\"",[644,1456,661],{"class":650},[644,1458,665],{"class":664},[644,1460,668],{"class":650},[644,1462,1463,1466,1468,1470],{"class":646,"line":723},[644,1464,1465],{"class":657},"    \"referenceId\"",[644,1467,661],{"class":650},[644,1469,665],{"class":664},[644,1471,668],{"class":650},[644,1473,1474,1477,1479,1481],{"class":646,"line":734},[644,1475,1476],{"class":657},"    \"brandCode\"",[644,1478,661],{"class":650},[644,1480,692],{"class":664},[644,1482,668],{"class":650},[644,1484,1485,1487,1489,1491],{"class":646,"line":840},[644,1486,821],{"class":657},[644,1488,661],{"class":650},[644,1490,705],{"class":664},[644,1492,668],{"class":650},[644,1494,1495,1498,1500,1503],{"class":646,"line":846},[644,1496,1497],{"class":657},"    \"country\"",[644,1499,661],{"class":650},[644,1501,1502],{"class":664},"\"AE\"",[644,1504,668],{"class":650},[644,1506,1507,1509,1511,1513],{"class":646,"line":859},[644,1508,832],{"class":657},[644,1510,661],{"class":650},[644,1512,718],{"class":657},[644,1514,668],{"class":650},[644,1516,1517,1520,1522,1525],{"class":646,"line":868},[644,1518,1519],{"class":657},"    \"orderId\"",[644,1521,661],{"class":650},[644,1523,1524],{"class":664},"\"12345\"",[644,1526,668],{"class":650},[644,1528,1529,1532,1534],{"class":646,"line":874},[644,1530,1531],{"class":657},"    \"cardDataPresent\"",[644,1533,661],{"class":650},[644,1535,1536],{"class":657},"true\n",[644,1538,1539],{"class":646,"line":887},[644,1540,843],{"class":650},[644,1542,1543,1546],{"class":646,"line":898},[644,1544,1545],{"class":657},"  \"retrieve\"",[644,1547,816],{"class":650},[644,1549,1550,1552,1554,1557],{"class":646,"line":904},[644,1551,1418],{"class":657},[644,1553,661],{"class":650},[644,1555,1556],{"class":664},"\"GET \u002Forders\u002F12345\u002F\"",[644,1558,668],{"class":650},[644,1560,1561,1563,1565,1568],{"class":646,"line":909},[644,1562,1430],{"class":657},[644,1564,661],{"class":650},[644,1566,1567],{"class":664},"\"2026-08-17T17:18:22Z\"",[644,1569,668],{"class":650},[644,1571,1572,1574,1576,1579],{"class":646,"line":921},[644,1573,1442],{"class":657},[644,1575,661],{"class":650},[644,1577,1578],{"class":664},"\"2026-08-17T17:18:23Z\"",[644,1580,668],{"class":650},[644,1582,1583,1585,1587,1589],{"class":646,"line":931},[644,1584,1454],{"class":657},[644,1586,661],{"class":650},[644,1588,665],{"class":664},[644,1590,668],{"class":650},[644,1592,1593,1596,1598,1600],{"class":646,"line":937},[644,1594,1595],{"class":657},"    \"processorReference\"",[644,1597,661],{"class":650},[644,1599,1524],{"class":664},[644,1601,668],{"class":650},[644,1603,1604,1606,1608,1610],{"class":646,"line":943},[644,1605,1519],{"class":657},[644,1607,661],{"class":650},[644,1609,1524],{"class":664},[644,1611,668],{"class":650},[644,1613,1614,1616,1618],{"class":646,"line":954},[644,1615,1531],{"class":657},[644,1617,661],{"class":650},[644,1619,1536],{"class":657},[644,1621,1623],{"class":646,"line":1622},23,[644,1624,1625],{"class":650},"  }\n",[644,1627,1629],{"class":646,"line":1628},24,[644,1630,737],{"class":650},[454,1632,1634],{"id":1633},"settings","Settings",[623,1636,1638],{"id":1637},"processor-settings","Processor settings",[450,1640,1641,1642,1645],{},"The processor-level settings are environment-backed values in ",[465,1643,1644],{},"config\u002Fyou-got-a-gift.php",":",[473,1647,1648,1661],{},[476,1649,1650],{},[479,1651,1652,1655,1658],{},[482,1653,1654],{},"Setting",[482,1656,1657],{},"Environment variable",[482,1659,1660],{},"Purpose",[489,1662,1663,1676],{},[479,1664,1665,1668,1673],{},[494,1666,1667],{},"Base URI",[494,1669,1670],{},[465,1671,1672],{},"YOUGOTAGIFT_BASE_URI",[494,1674,1675],{},"Base URL for create, retrieve, and catalogue calls",[479,1677,1678,1681,1686],{},[494,1679,1680],{},"Timeout",[494,1682,1683],{},[465,1684,1685],{},"YOUGOTAGIFT_TIMEOUT",[494,1687,1688],{},"HTTP client timeout",[450,1690,1691,1692,1695,1696,1699],{},"The client creates an HMAC-SHA256 ",[465,1693,1694],{},"Signature"," authorization header from the selected currency's API secret and sends the API key in both the signature key ID and ",[465,1697,1698],{},"x-api-key"," header. Do not log or include the API key, secret, or generated authorization header in support evidence.",[623,1701,1703],{"id":1702},"currency-credentials-and-country-mapping","Currency credentials and country mapping",[450,1705,1706],{},"Credentials are selected from the order currency. The supported currencies and derived provider country codes are:",[473,1708,1709,1725],{},[476,1710,1711],{},[479,1712,1713,1716,1719,1722],{},[482,1714,1715],{},"Currency",[482,1717,1718],{},"Country",[482,1720,1721],{},"API key environment variable",[482,1723,1724],{},"API secret environment variable",[489,1726,1727,1747,1769,1791,1813,1835],{},[479,1728,1729,1733,1737,1742],{},[494,1730,1731],{},[465,1732,570],{},[494,1734,1735],{},[465,1736,574],{},[494,1738,1739],{},[465,1740,1741],{},"YOUGOTAGIFT_AED_API_KEY",[494,1743,1744],{},[465,1745,1746],{},"YOUGOTAGIFT_AED_API_SECRET",[479,1748,1749,1754,1759,1764],{},[494,1750,1751],{},[465,1752,1753],{},"SAR",[494,1755,1756],{},[465,1757,1758],{},"SA",[494,1760,1761],{},[465,1762,1763],{},"YOUGOTAGIFT_SAR_API_KEY",[494,1765,1766],{},[465,1767,1768],{},"YOUGOTAGIFT_SAR_API_SECRET",[479,1770,1771,1776,1781,1786],{},[494,1772,1773],{},[465,1774,1775],{},"OMR",[494,1777,1778],{},[465,1779,1780],{},"OM",[494,1782,1783],{},[465,1784,1785],{},"YOUGOTAGIFT_OMR_API_KEY",[494,1787,1788],{},[465,1789,1790],{},"YOUGOTAGIFT_OMR_API_SECRET",[479,1792,1793,1798,1803,1808],{},[494,1794,1795],{},[465,1796,1797],{},"KWD",[494,1799,1800],{},[465,1801,1802],{},"KW",[494,1804,1805],{},[465,1806,1807],{},"YOUGOTAGIFT_KWD_API_KEY",[494,1809,1810],{},[465,1811,1812],{},"YOUGOTAGIFT_KWD_API_SECRET",[479,1814,1815,1820,1825,1830],{},[494,1816,1817],{},[465,1818,1819],{},"QAR",[494,1821,1822],{},[465,1823,1824],{},"QA",[494,1826,1827],{},[465,1828,1829],{},"YOUGOTAGIFT_QAR_API_KEY",[494,1831,1832],{},[465,1833,1834],{},"YOUGOTAGIFT_QAR_API_SECRET",[479,1836,1837,1842,1847,1852],{},[494,1838,1839],{},[465,1840,1841],{},"BHD",[494,1843,1844],{},[465,1845,1846],{},"BH",[494,1848,1849],{},[465,1850,1851],{},"YOUGOTAGIFT_BHD_API_KEY",[494,1853,1854],{},[465,1855,1856],{},"YOUGOTAGIFT_BHD_API_SECRET",[450,1858,1859],{},"Both credentials must be present for the order currency. An unsupported currency fails before the provider request because no currency-to-country mapping exists.",[623,1861,1863],{"id":1862},"brand-settings","Brand settings",[450,1865,1866,1867,1869],{},"Each enabled brand must have the You Got a Gift product\u002FSKU mapping used by the ",[465,1868,747],{}," field. The mapping is stored in the brand attributes using the issuer's standard SKU attribute format; it is not taken from the order amount at runtime for this processor. A wrong, missing, or stale mapping can create an order for the wrong provider product or cause the provider to reject the request.",[450,1871,1872,1873,1875],{},"Catalogue imports provide the provider's ",[465,1874,747],{},", accepted currency, and denomination information. Confirm that the imported product is associated with the intended brand and currency before enabling sales.",[454,1877,1879],{"id":1878},"api-operations-and-rate-limits","API operations and rate limits",[473,1881,1882,1894],{},[476,1883,1884],{},[479,1885,1886,1888,1891],{},[482,1887,1243],{},[482,1889,1890],{},"Method and path",[482,1892,1893],{},"Use",[489,1895,1896,1907,1918],{},[479,1897,1898,1900,1904],{},[494,1899,1230],{},[494,1901,1902],{},[465,1903,632],{},[494,1905,1906],{},"Start a provider order",[479,1908,1909,1911,1915],{},[494,1910,1233],{},[494,1912,1913],{},[465,1914,1252],{},[494,1916,1917],{},"Retrieve the voucher for an existing provider order",[479,1919,1920,1923,1931],{},[494,1921,1922],{},"Brands",[494,1924,1925,468,1928],{},[465,1926,1927],{},"GET \u002Fbrands\u002F",[465,1929,1930],{},"GET \u002Fbrands\u002F?page={page}",[494,1932,1933],{},"Import provider catalogue data",[450,1935,1936,1937,1939],{},"The catalogue endpoint uses the ",[465,1938,570],{}," credential set by default. Production limits are two calls per day to the catalogue endpoint, and each page may be called twice per day. Avoid repeated manual catalogue requests while investigating an individual sale.",[454,1941,1943],{"id":1942},"failure-and-retry-behaviour","Failure and retry behaviour",[450,1945,1946],{},"The client maps provider failures into interaction exceptions. The platform retries transient failures but does not retry configuration, authentication, or duplicate-order failures automatically:",[473,1948,1949,1962],{},[476,1950,1951],{},[479,1952,1953,1956,1959],{},[482,1954,1955],{},"Provider condition",[482,1957,1958],{},"Interaction result",[482,1960,1961],{},"Retry behaviour",[489,1963,1964,1977,1992,2006,2022,2040,2055,2071],{},[479,1965,1966,1969,1974],{},[494,1967,1968],{},"Network failure or timeout",[494,1970,1971],{},[465,1972,1973],{},"RetryableRequestException",[494,1975,1976],{},"Retryable",[479,1978,1979,1986,1990],{},[494,1980,1981,1982,1985],{},"HTTP ",[465,1983,1984],{},"429"," too many requests",[494,1987,1988],{},[465,1989,1973],{},[494,1991,1976],{},[479,1993,1994,2000,2004],{},[494,1995,1981,1996,1999],{},[465,1997,1998],{},"5xx"," server error",[494,2001,2002],{},[465,2003,1973],{},[494,2005,1976],{},[479,2007,2008,2014,2019],{},[494,2009,1981,2010,2013],{},[465,2011,2012],{},"400"," malformed request",[494,2015,2016],{},[465,2017,2018],{},"ProcessorInteractionException",[494,2020,2021],{},"Not retryable without correction",[479,2023,2024,2033,2037],{},[494,2025,1981,2026,6,2029,2032],{},[465,2027,2028],{},"401",[465,2030,2031],{},"403"," authentication failure",[494,2034,2035],{},[465,2036,2018],{},[494,2038,2039],{},"Not retryable without credential correction",[479,2041,2042,2048,2052],{},[494,2043,1981,2044,2047],{},[465,2045,2046],{},"404"," resource not found",[494,2049,2050],{},[465,2051,2018],{},[494,2053,2054],{},"Not retryable; verify order ID or catalogue page",[479,2056,2057,2063,2068],{},[494,2058,1981,2059,2062],{},[465,2060,2061],{},"409"," resource exists",[494,2064,2065],{},[465,2066,2067],{},"ResourceExistsException",[494,2069,2070],{},"Not a new-order retry; reconcile the existing order",[479,2072,2073,2076,2081],{},[494,2074,2075],{},"Invalid response shape or missing voucher value",[494,2077,2078],{},[465,2079,2080],{},"ResponseValidationException",[494,2082,2083],{},"Not retryable until the provider response or configuration is understood",[450,2085,2086,2087,2089],{},"For a duplicate create response or ",[465,2088,2061],{},", do not submit another create request immediately. Check the create audit and use the existing provider order reference for retrieval or escalation.",[454,2091,2093],{"id":2092},"customer-service-investigation","Customer-service investigation",[450,2095,2096],{},"For a failed or delayed order, collect the following before re-ordering:",[556,2098,2099,2102,2105,2110,2116,2119],{},[559,2100,2101],{},"Internal sale UUID and transaction reference.",[559,2103,2104],{},"Brand slug, requested amount, delivery method, and currency.",[559,2106,2107,2108,575],{},"The configured brand product\u002FSKU mapping and expected ",[465,2109,747],{},[559,2111,2112,2113,2115],{},"The create-order audit, including request and response timestamps, endpoint, redacted request fields, HTTP result, ",[465,2114,541],{},", and voucher labels.",[559,2117,2118],{},"Any retrieve-order audits and the processor reference used in the path.",[559,2120,2121],{},"The currency-specific credential configuration status, without exposing secrets.",[450,2123,2124],{},"Use the first provider operation to classify the problem:",[1184,2126,2127,2136,2139,2145,2148],{},[559,2128,2129,2130,2132,2133,2135],{},"If ",[465,2131,632],{}," succeeded and returned an ",[465,2134,541],{},", retrieve that order rather than creating another one.",[559,2137,2138],{},"If create returned an order ID but no usable voucher, treat it as a response-validation or provider-completion issue; do not assume the order is safe to repeat.",[559,2140,2141,2142,2144],{},"If only ",[465,2143,1252],{}," appears, verify that the processor reference came from the original create flow and that the retrieval belongs to the same sale.",[559,2146,2147],{},"If no provider audit exists, investigate processor selection, currency support, brand SKU resolution, and request dispatch before contacting the provider.",[559,2149,2150,2151,542,2153,542,2155,595,2157,2159],{},"If the provider rejected the create request, compare ",[465,2152,747],{},[465,2154,1325],{},[465,2156,1329],{},[465,2158,1345],{}," with the sale and catalogue record.",[454,2161,2163],{"id":2162},"limitations-and-escalation-evidence","Limitations and escalation evidence",[450,2165,2166],{},"You Got a Gift balance checks and cancellations are not implemented by this processor. Escalations should include the internal sale identifier, provider order ID if available, currency, timestamps, operation and endpoint, HTTP status or mapped exception, and redacted response structure. Never include API secrets, authorization headers, or unredacted voucher codes and PINs in a ticket.",[454,2168,2170],{"id":2169},"related-code","Related code",[1184,2172,2173,2179,2185,2191,2197,2203,2209,2214],{},[559,2174,2175,2178],{},[465,2176,2177],{},"app\u002FProcessors\u002FYouGotAGift\u002FYouGotAGiftProcessor.php"," — asynchronous processor wrapper.",[559,2180,2181,2184],{},[465,2182,2183],{},"app\u002FProcessors\u002FInteraction\u002FIntegrations\u002FYouGotAGift\u002FYouGotAGiftProcessorInteraction.php"," — create\u002Fretrieve request construction, response parsing, and exception classification.",[559,2186,2187,2190],{},[465,2188,2189],{},"app\u002FHttp\u002FClients\u002FYouGotAGift\u002FYouGotAGiftApi.php"," — provider transport, authentication headers, endpoint paths, and HTTP error mapping.",[559,2192,2193,2196],{},[465,2194,2195],{},"app\u002FHttp\u002FClients\u002FYouGotAGift\u002FRequests\u002FCreateOrderRequestData.php"," — create request payload.",[559,2198,2199,2202],{},[465,2200,2201],{},"app\u002FHttp\u002FClients\u002FYouGotAGift\u002FRequests\u002FRetrieveOrderRequestData.php"," — retrieve request data.",[559,2204,2205,2208],{},[465,2206,2207],{},"app\u002FCatalogueService\u002FJobs\u002FYouGotAGiftPageCollector.php"," — provider catalogue import and validation.",[559,2210,2211,2213],{},[465,2212,1644],{}," — processor environment settings.",[559,2215,2216,2219],{},[465,2217,2218],{},"tests\u002FUnit\u002FProcessors\u002FInteraction\u002FIntegrations\u002FYouGotAGift\u002FYouGotAGiftProcessorInteractionTest.php"," — request mapping, voucher parsing, validation, and retry scenarios.",[2221,2222,2223],"style",{},"html pre.shiki code .sQ3_J, html code.shiki .sQ3_J{--shiki-dark:#E1E4E8;--shiki-default:#24292E}html pre.shiki code .s0DvM, html code.shiki .s0DvM{--shiki-dark:#79B8FF;--shiki-default:#005CC5}html pre.shiki code .sg6BJ, html code.shiki .sg6BJ{--shiki-dark:#9ECBFF;--shiki-default:#032F62}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":640,"searchDepth":671,"depth":671,"links":2225},[2226,2227,2228,2233,2234,2235,2240,2241,2242,2243,2244],{"id":456,"depth":654,"text":457},{"id":553,"depth":654,"text":554},{"id":617,"depth":654,"text":618,"children":2229},[2230,2231,2232],{"id":625,"depth":671,"text":626},{"id":751,"depth":671,"text":752},{"id":1031,"depth":671,"text":1032},{"id":1054,"depth":654,"text":1055},{"id":1214,"depth":654,"text":1215},{"id":1633,"depth":654,"text":1634,"children":2236},[2237,2238,2239],{"id":1637,"depth":671,"text":1638},{"id":1702,"depth":671,"text":1703},{"id":1862,"depth":671,"text":1863},{"id":1878,"depth":654,"text":1879},{"id":1942,"depth":654,"text":1943},{"id":2092,"depth":654,"text":2093},{"id":2162,"depth":654,"text":2163},{"id":2169,"depth":654,"text":2170},{},"md",{},{"title":417,"description":452},"TxLNN1d8wsF4ljZ1tO__ZEXfs62K3lfzS07vzS3nM2I",[2251,2252],{"title":413,"path":414,"stem":415,"children":-1},{"title":421,"path":422,"stem":423,"children":-1},1789777549235]