[{"data":1,"prerenderedAt":1181},["ShallowReactive",2],{"navigation":3,"external-navigation":214,"external_core:\u002Fcore\u002Fprocessors\u002Famazon":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":1178},{"id":445,"title":369,"body":446,"config":1173,"description":452,"extension":1174,"meta":1175,"navigation":15,"path":370,"seo":1176,"stem":371,"__hash__":1177},"external_core\u002Fcore\u002Fprocessors\u002Famazon.md",{"type":447,"value":448,"toc":1154},"minimark",[449,453,458,470,473,571,575,655,668,672,677,682,738,763,823,837,841,844,847,881,888,903,906,921,930,934,937,1014,1021,1025,1028,1068,1074,1083,1087,1090,1093,1097],[450,451,452],"p",{},"This page explains the Amazon Gift Card On Demand integration from an operations and customer-service perspective: how Amazon orders are issued, which settings control each regional brand, and what evidence to gather before escalating a failed issue or cancellation.",[454,455,457],"h2",{"id":456},"what-amazon-does","What Amazon does",[450,459,460,461,465,466,469],{},"Amazon is a synchronous processor for digital gift cards, but it is not always a single-attempt flow. The application submits an AGCOD request directly to Amazon, retries temporary ",[462,463,464],"code",{},"RESEND"," responses automatically, and stores Amazon's ",[462,467,468],{},"creationRequestId"," as the processor reference when a code is issued successfully.",[450,471,472],{},"The processor is configured as:",[474,475,476,489],"table",{},[477,478,479],"thead",{},[480,481,482,486],"tr",{},[483,484,485],"th",{},"Property",[483,487,488],{},"Behaviour",[490,491,492,503,511,519,527,535,545,554],"tbody",{},[480,493,494,498],{},[495,496,497],"td",{},"Processor type",[495,499,500],{},[462,501,502],{},"SKU_IN_ENV",[480,504,505,508],{},[495,506,507],{},"Processing",[495,509,510],{},"Synchronous with automatic retry on temporary issue failures",[480,512,513,516],{},[495,514,515],{},"Delivery",[495,517,518],{},"Digital code plus wrapped URL\u002Fbarcode generation",[480,520,521,524],{},[495,522,523],{},"Balance lookup",[495,525,526],{},"Unsupported",[480,528,529,532],{},[495,530,531],{},"Cancellation",[495,533,534],{},"Supported",[480,536,537,540],{},[495,538,539],{},"Issue success state",[495,541,542],{},[462,543,544],{},"SUCCESS",[480,546,547,550],{},[495,548,549],{},"Retry state",[495,551,552],{},[462,553,464],{},[480,555,556,559],{},[495,557,558],{},"Common failure examples",[495,560,561,564,565,564,568],{},[462,562,563],{},"FAILURE",", ",[462,566,567],{},"F300 \u002F InsufficientFunds",[462,569,570],{},"F200 \u002F CancelRequestArrivedAfterTimeLimit",[454,572,574],{"id":573},"order-lifecycle","Order lifecycle",[576,577,578,582,589,607,621,634,639],"ol",{},[579,580,581],"li",{},"A partner orders an Amazon brand and amount through the normal gift-card API.",[579,583,584,585,588],{},"The processor selects credentials from ",[462,586,587],{},"config\u002Famazon.php"," for the current brand slug and, when present, the partner's Tillo entity override.",[579,590,591,592,595,596,598,599,602,603,606],{},"The issue payload uses Amazon's ",[462,593,594],{},"CreateGiftCard"," operation. It sends a generated ",[462,597,468],{},", the Amazon ",[462,600,601],{},"partnerId",", the requested amount and currency, and the internal sale UUID as ",[462,604,605],{},"externalReference",".",[579,608,609,610,613,614,617,618,620],{},"If the brand config enables ",[462,611,612],{},"sendProgramID",", the payload also includes a ",[462,615,616],{},"programId",". This is the partner's slug, but if there has been an agreement with Amazon can be overridden with ",[462,619,616],{}," partner attribute when one is configured.",[579,622,623,624,626,627,629,630,633],{},"When Amazon responds with ",[462,625,544],{},", the application stores the returned ",[462,628,468],{}," as the processor reference, stores the ",[462,631,632],{},"gcClaimCode",", formats the expiry timestamp, creates the delivery URL\u002Fbarcode, and marks the card successful.",[579,635,623,636,638],{},[462,637,464],{},", the processor retries automatically up to three total attempts with short backoff delays.",[579,640,641,642,644,645,648,649,651,652,606],{},"If all issue attempts still end in ",[462,643,464],{},", the issue fails and the application dispatches an ",[462,646,647],{},"AmazonCancellation"," job that waits for the code to become issuable and then attempts to cancel the original Amazon request using the returned ",[462,650,468],{}," and ",[462,653,654],{},"gcId",[656,657,658],"blockquote",{},[450,659,660,664,665,667],{},[661,662,663],"span",{},"!IMPORTANT","\nDo not manually place a second Amazon order while a ",[462,666,464],{}," case or queued cancellation is still unresolved. The original request may still complete successfully, and a manual re-order can create a duplicate purchase.",[454,669,671],{"id":670},"settings","Settings",[673,674,676],"h3",{"id":675},"processor-settings","Processor settings",[450,678,679,680,606],{},"The processor-level settings are environment-backed values in ",[462,681,587],{},[474,683,684,697],{},[477,685,686],{},[480,687,688,691,694],{},[483,689,690],{},"Setting",[483,692,693],{},"Environment variable",[483,695,696],{},"Purpose",[490,698,699,712,725],{},[480,700,701,704,709],{},[495,702,703],{},"Global throttling enabled",[495,705,706],{},[462,707,708],{},"AGCOD_THROTTLING_ENABLED",[495,710,711],{},"Enables request-rate limiting for Amazon traffic",[480,713,714,717,722],{},[495,715,716],{},"Global throttling request limit",[495,718,719],{},[462,720,721],{},"AGCOD_THROTTLING_RATE_LIMIT",[495,723,724],{},"Maximum requests allowed in the configured period",[480,726,727,730,735],{},[495,728,729],{},"Global throttling period",[495,731,732],{},[462,733,734],{},"AGCOD_THROTTLING_RATE_PERIOD",[495,736,737],{},"Time window for the throttling limit",[450,739,740,741,744,745,748,749,752,753,564,756,759,760,606],{},"Each supported brand slug then has its own regional AGCOD configuration, including ",[462,742,743],{},"endpoint",", AWS ",[462,746,747],{},"region",", and a default ",[462,750,751],{},"discountStandard"," credential set with ",[462,754,755],{},"accessKey",[462,757,758],{},"secretKey",", and ",[462,761,762],{},"partnerID",[450,764,765,766,564,769,564,772,564,775,564,778,564,781,564,784,564,787,564,790,564,793,564,796,564,799,564,802,564,805,564,808,564,811,564,814,564,817,759,820,606],{},"The repository currently defines separate brand entries for ",[462,767,768],{},"amazon",[462,770,771],{},"amazon-rewards",[462,773,774],{},"amazon-vb",[462,776,777],{},"amazon-de",[462,779,780],{},"amazon-fr",[462,782,783],{},"amazon-it",[462,785,786],{},"amazon-es",[462,788,789],{},"amazon-nl",[462,791,792],{},"amazon-se",[462,794,795],{},"amazon-usa",[462,797,798],{},"amazon-ca",[462,800,801],{},"amazon-au",[462,803,804],{},"amazon-at",[462,806,807],{},"amazon-be",[462,809,810],{},"amazon-pl",[462,812,813],{},"amazon-eb-uk",[462,815,816],{},"amazon-pt",[462,818,819],{},"amazon-ie",[462,821,822],{},"amazon-rewards-ie",[450,824,825,826,828,829,832,833,836],{},"Some brand entries have extra credential variants. For example, ",[462,827,795],{}," defines both ",[462,830,831],{},"discountStandardBackup"," credentials and a ",[462,834,835],{},"tilloinc"," credential override. The processor also checks for entity-specific credentials using the current partner's Tillo entity slug, so the same Amazon brand can route through different AGCOD accounts depending on the partner setup.",[673,838,840],{"id":839},"brand-settings","Brand settings",[450,842,843],{},"Amazon orders by amount rather than by a per-denomination provider SKU. The repository does not define Amazon brand-to-SKU mappings like the asynchronous processor guides do.",[450,845,846],{},"Brand setup still matters in three places:",[576,848,849,852,866],{},[579,850,851],{},"The brand slug must match the correct regional config entry so the processor uses the right endpoint, region, and AGCOD account.",[579,853,854,855,858,859,862,863,606],{},"The brand's enabled denominations must allow the requested value. The original Amazon UK brand was seeded with fixed values from ",[462,856,857],{},"£5"," to ",[462,860,861],{},"£100"," plus ",[462,864,865],{},"open-value",[579,867,868,869,871,872,874,875,877,878,880],{},"If ",[462,870,612],{}," is enabled for that brand, the partner slug is forwarded to Amazon as ",[462,873,616],{},". If a non-empty partner attribute named ",[462,876,616],{}," set is forwarded to Amazon as ",[462,879,616],{}," instead. This supports partners that need an alternative Amazon program identifier.",[882,883,885,886],"h4",{"id":884},"alternative-programid","Alternative ",[462,887,616],{},[450,889,890,891,893,894,896,897,899,900,902],{},"Use the partner attribute named ",[462,892,616],{}," when Amazon requires a program identifier that differs from the partner slug. The override applies only when the Amazon brand configuration has ",[462,895,612],{}," enabled; it is sent on the ",[462,898,594],{}," request and does not change the credentials or ",[462,901,601],{}," used for the request.",[450,904,905],{},"For an order using an owner with:",[907,908,909,915],"ul",{},[579,910,911,914],{},[462,912,913],{},"sendProgramID: true","; and",[579,916,917,918,920],{},"a non-empty ",[462,919,616],{}," partner attribute;",[450,922,923,924,926,927,929],{},"Amazon receives that attribute value. Without a non-empty attribute, Amazon receives the owner's slug. When investigating a program-routing issue, check both the brand's ",[462,925,612],{}," setting and the owner's ",[462,928,616],{}," partner attribute before treating the value as incorrect.",[454,931,933],{"id":932},"api-operations","API operations",[450,935,936],{},"Amazon requests are JSON payloads signed with AWS Signature Version 4 and sent to the configured AGCOD endpoint. The processor uses these named operations:",[474,938,939,952],{},[477,940,941],{},[480,942,943,946,949],{},[483,944,945],{},"Operation",[483,947,948],{},"Use",[483,950,951],{},"Important fields",[490,953,954,977,996],{},[480,955,956,960,963],{},[495,957,958],{},[462,959,594],{},[495,961,962],{},"Issue a new Amazon gift card",[495,964,965,564,967,564,969,564,972,974,975],{},[462,966,468],{},[462,968,601],{},[462,970,971],{},"value",[462,973,605],{},", optional ",[462,976,616],{},[480,978,979,984,987],{},[495,980,981],{},[462,982,983],{},"CancelGiftCard",[495,985,986],{},"Cancel a previously issued or pending Amazon request",[495,988,989,990,564,992,564,994],{},"Original ",[462,991,468],{},[462,993,601],{},[462,995,654],{},[480,997,998,1003,1006],{},[495,999,1000],{},[462,1001,1002],{},"GetGiftCardActivityPage",[495,1004,1005],{},"Build activity-query payloads for AGCOD request history",[495,1007,1008,564,1011,1013],{},[462,1009,1010],{},"requestId",[462,1012,601],{},", UTC date range, paging fields",[450,1015,1016,1017,1020],{},"The processor class also defines a ",[462,1018,1019],{},"GetGiftCard"," operation constant, but the documented business flow in this repository is issue and cancel rather than customer-service balance checking.",[454,1022,1024],{"id":1023},"customer-service-investigation","Customer-service investigation",[450,1026,1027],{},"When an Amazon order or cancellation needs investigation, check these values in order:",[576,1029,1030,1033,1036,1041,1046,1049,1059],{},[579,1031,1032],{},"The Amazon brand slug, currency, and requested amount.",[579,1034,1035],{},"Whether the partner's Tillo entity should have used default credentials or an entity-specific Amazon account.",[579,1037,1038,1039,606],{},"The sale UUID, which is sent to Amazon as ",[462,1040,605],{},[579,1042,1043,1044,606],{},"The sale's processor reference, which is Amazon's ",[462,1045,468],{},[579,1047,1048],{},"The processor interaction audit request and response for the relevant sale.",[579,1050,1051,1052,564,1054,1056,1057,606],{},"Whether the last issue response was ",[462,1053,544],{},[462,1055,464],{},", or ",[462,1058,563],{},[579,1060,1061,1062,651,1065,1067],{},"For cancellations, the original audit record's ",[462,1063,1064],{},"requestID",[462,1066,654],{},", because the cancellation payload is built from those values rather than from the displayed gift code.",[450,1069,1070,1071,1073],{},"Returned ",[462,1072,632],{}," values are hashed before processor interaction responses are stored, so support should rely on the sale record, processor reference, and audit metadata rather than expecting to retrieve the raw code from the interaction log.",[450,1075,1076,1077,1079,1080,1082],{},"If the issue failed with ",[462,1078,567],{},", treat it as a processor funding problem rather than a customer-input problem. If cancellation failed with ",[462,1081,570],{},", the repository treats that as a warning-level late-cancellation case, which means the code was already too old for Amazon's cancellation window.",[454,1084,1086],{"id":1085},"limitations-and-support-contacts","Limitations and support contacts",[450,1088,1089],{},"The repository does not implement Amazon balance lookup as a customer-service operation. Cancellation is implemented, but it is time-sensitive and can return a late-arrival warning once the request is older than 15 minutes.",[450,1091,1092],{},"When escalating, include the sale UUID, processor reference, partner slug, timestamps, brand slug, and relevant request\u002Fresponse evidence. Do not include raw credentials, and do not assume the visible gift code in the customer journey is available in stored processor interaction logs.",[454,1094,1096],{"id":1095},"related-code","Related code",[907,1098,1099,1105,1111,1116,1122,1128,1136,1142,1148],{},[579,1100,1101,1104],{},[462,1102,1103],{},"app\u002FProcessors\u002FAmazonProcessor.php"," — issue, cancellation, retry, credential selection, and audit logging.",[579,1106,1107,1110],{},[462,1108,1109],{},"app\u002FJobs\u002FAmazon\u002FAmazonCancellation.php"," — queued cancellation recovery after repeated temporary issue failures.",[579,1112,1113,1115],{},[462,1114,587],{}," — global throttling, regional endpoints, and brand credential sets.",[579,1117,1118,1121],{},[462,1119,1120],{},"database\u002Fmigrations\u002F2018_03_16_163107_RCC-2572_add_issuer_attributes.php"," — Amazon support and commercial contacts.",[579,1123,1124,1127],{},[462,1125,1126],{},"database\u002Fmigrations\u002F2016_08_03_091949_add_denominations_for_amazon_brand.php"," — original Amazon denomination setup.",[579,1129,1130,1133,1134,606],{},[462,1131,1132],{},"database\u002Fmigrations\u002F2024_01_11_092649_r_c_c-13432_update_amazon_park_processor_types.php"," — processor type update to ",[462,1135,502],{},[579,1137,1138,1141],{},[462,1139,1140],{},"tests\u002FCharacterisation\u002FUnit\u002FProcessors\u002FAmazonProcessorTest.php"," — successful issue and cancellation behaviour, credential overrides, and audit expectations.",[579,1143,1144,1147],{},[462,1145,1146],{},"tests\u002FFeature\u002FProcessors\u002FAmazonProcessorTest.php"," — insufficient-funds handling and operational logging.",[579,1149,1150,1153],{},[462,1151,1152],{},"tests\u002FUnit\u002FApp\u002FJobs\u002FAmazonCancellationTest.php"," — cancellation job logging and retry flow.",{"title":1155,"searchDepth":1156,"depth":1156,"links":1157},"",3,[1158,1160,1161,1169,1170,1171,1172],{"id":456,"depth":1159,"text":457},2,{"id":573,"depth":1159,"text":574},{"id":670,"depth":1159,"text":671,"children":1162},[1163,1164],{"id":675,"depth":1156,"text":676},{"id":839,"depth":1156,"text":840,"children":1165},[1166],{"id":884,"depth":1167,"text":1168},4,"Alternative programId",{"id":932,"depth":1159,"text":933},{"id":1023,"depth":1159,"text":1024},{"id":1085,"depth":1159,"text":1086},{"id":1095,"depth":1159,"text":1096},{},"md",{},{"title":369,"description":452},"7nH015eaNAG_RZRfW5sMbnCa81x_dpaCkCAaWgGWyS4",[1179,1180],{"title":356,"path":361,"stem":362,"children":-1},{"title":373,"path":374,"stem":375,"children":-1},1789777548843]