[{"data":1,"prerenderedAt":1890},["ShallowReactive",2],{"navigation":3,"external-navigation":214,"external_core:\u002Fcore\u002Fprocessors\u002Fincomm":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":1887},{"id":445,"title":397,"body":446,"config":1882,"description":452,"extension":1883,"meta":1884,"navigation":15,"path":398,"seo":1885,"stem":399,"__hash__":1886},"external_core\u002Fcore\u002Fprocessors\u002Fincomm.md",{"type":447,"value":448,"toc":1869},"minimark",[449,453,458,472,585,610,614,691,699,712,716,719,936,942,959,962,1067,1089,1093,1110,1138,1154,1158,1270,1284,1288,1291,1408,1415,1419,1425,1535,1548,1552,1721,1725,1777,1781,1784,1788,1865],[450,451,452],"p",{},"This reference describes the active asynchronous InComm issuer and the deprecated synchronous issuer that can still appear in historical sales. It covers the provider calls, card mapping, retry states, configuration, audit evidence, and operational tools implemented in the repository.",[454,455,457],"h2",{"id":456},"processor-modes-and-scope","Processor modes and scope",[450,459,460,464,465,468,469,471],{},[461,462,463],"code",{},"InCommAsyncProcessor"," is the active issuer. The issuer migration marks it as asynchronous, and a later migration moves brands from ",[461,466,467],{},"InCommSyncProcessor"," to it. ",[461,470,467],{}," is marked deprecated and is retained because its side effects are not known.",[473,474,475,491],"table",{},[476,477,478],"thead",{},[479,480,481,485,488],"tr",{},[482,483,484],"th",{},"Capability",[482,486,487],{},"Async issuer",[482,489,490],{},"Legacy sync issuer",[492,493,494,510,527,547,558,568],"tbody",{},[479,495,496,500,505],{},[497,498,499],"td",{},"Create call",[497,501,502],{},[461,503,504],{},"POST \u002Forders",[497,506,507],{},[461,508,509],{},"POST \u002Forders\u002Fimmediate",[479,511,512,515,521],{},[497,513,514],{},"Card retrieval",[497,516,517,518],{},"Queue-driven ",[461,519,520],{},"getByOrder(orderUri)",[497,522,523,524],{},"In-process polling of ",[461,525,526],{},"\u002Forders\u002F{orderUri}\u002Fcards",[479,528,529,532,542],{},[497,530,531],{},"Processor reference",[497,533,534,537,538,541],{},[461,535,536],{},"orderUri"," from the ",[461,539,540],{},"Location"," header",[497,543,544,546],{},[461,545,536],{}," from the create response",[479,548,549,552,555],{},[497,550,551],{},"Balance",[497,553,554],{},"Supported; requires a PIN at the processor interface",[497,556,557],{},"Supported",[479,559,560,563,566],{},[497,561,562],{},"Cancellation",[497,564,565],{},"Supported through card lookup and void",[497,567,565],{},[479,569,570,573,576],{},[497,571,572],{},"Cashout",[497,574,575],{},"No implementation in the async class",[497,577,578,581,582],{},[461,579,580],{},"cashoutGC()"," returns ",[461,583,584],{},"false",[450,586,587,588,591,592,591,595,598,599,602,603,591,605,598,607,609],{},"The HTTP client accepts ",[461,589,590],{},"CAD",", ",[461,593,594],{},"USD",[461,596,597],{},"AUD",", and ",[461,600,601],{},"NZD"," environments. The legacy constructor resolves program IDs for ",[461,604,590],{},[461,606,594],{},[461,608,597],{},"; the active async constructor resolves all four.",[454,611,613],{"id":612},"async-lifecycle","Async lifecycle",[615,616,617,624,642,659,671,681],"ol",{},[618,619,620,621,623],"li",{},"The sale is assigned to ",[461,622,463],{}," and the processor resolves the SKU from the brand and face value.",[618,625,626,629,630,633,634,637,638,641],{},[461,627,628],{},"requestCode()"," sends an order with the sale UUID as both ",[461,631,632],{},"customerorderid"," and ",[461,635,636],{},"purchaseordernumber",". The partner database ID is included in JSON ",[461,639,640],{},"metadata",".",[618,643,644,645,648,649,651,652,654,655,658],{},"InComm normally returns ",[461,646,647],{},"202 Accepted"," with a ",[461,650,540],{}," header. The wrapper extracts the final path segment as ",[461,653,536],{},", stores it as ",[461,656,657],{},"processor_ref",", and returns a pending card.",[618,660,661,662,665,666,668,669,641],{},"A returned card with a provider reference is handed to ",[461,663,664],{},"AsyncFetchCode","; a pending card without a usable reference is requeued for another issue attempt. A duplicate response for the same customer order supplies the existing ",[461,667,536],{},", after which the job schedules ",[461,670,664],{},[618,672,673,676,677,680],{},[461,674,675],{},"retrieveCode()"," calls ",[461,678,679],{},"GET \u002Fcards\u002Forder\u002F{orderUri}"," and uses the first returned card. A successful response is mapped to the application card and completes the sale.",[618,682,683,684,687,688,641],{},"Balance lookup first finds the original sale by gift-card code, retrieves its order card, then calls ",[461,685,686],{},"GET \u002Fcards\u002F{cardUri}\u002Fbalance",". Cancellation retrieves the card URI and calls ",[461,689,690],{},"POST \u002FCards\u002F{cardUri}\u002Fvoid",[450,692,693,694,696,697,641],{},"The legacy sync path calls the provider create operation and then polls ",[461,695,526],{}," up to 10 times, sleeping one second between attempts. It maps the first returned card in the same call rather than handing retrieval to ",[461,698,664],{},[700,701,702],"blockquote",{},[450,703,704,708,709,711],{},[705,706,707],"span",{},"!WARNING","\nDo not create a replacement order while the sale is pending. A request timeout can occur after InComm accepts the order, and a replacement can create a second provider purchase unless the existing ",[461,710,536],{}," is checked first.",[454,713,715],{"id":714},"redacted-request-and-response-examples","Redacted request and response examples",[450,717,718],{},"The async request is JSON. Values below are synthetic or redacted; they are not suitable for a live order.",[720,721,726],"pre",{"className":722,"code":723,"language":724,"meta":725,"style":725},"language-json shiki shiki-themes github-dark github-light","{\n  \"customerorderid\": \"sale-uuid-example\",\n  \"purchaseordernumber\": \"sale-uuid-example\",\n  \"metadata\": \"{\\\"partner_id\\\":12345}\",\n  \"recipients\": [\n    {\n      \"firstname\": \"Application\",\n      \"lastname\": \"Gift Card\",\n      \"emailaddress\": \"redacted@example.invalid\",\n      \"deliveremail\": false,\n      \"products\": [\n        {\n          \"sku\": \"SKU-EXAMPLE\",\n          \"quantity\": 1,\n          \"value\": 25\n        }\n      ]\n    }\n  ]\n}\n","json","",[461,727,728,736,753,765,789,798,804,817,830,843,855,863,869,882,895,906,912,918,924,930],{"__ignoreMap":725},[705,729,732],{"class":730,"line":731},"line",1,[705,733,735],{"class":734},"sQ3_J","{\n",[705,737,739,743,746,750],{"class":730,"line":738},2,[705,740,742],{"class":741},"s0DvM","  \"customerorderid\"",[705,744,745],{"class":734},": ",[705,747,749],{"class":748},"sg6BJ","\"sale-uuid-example\"",[705,751,752],{"class":734},",\n",[705,754,756,759,761,763],{"class":730,"line":755},3,[705,757,758],{"class":741},"  \"purchaseordernumber\"",[705,760,745],{"class":734},[705,762,749],{"class":748},[705,764,752],{"class":734},[705,766,768,771,773,776,779,782,784,787],{"class":730,"line":767},4,[705,769,770],{"class":741},"  \"metadata\"",[705,772,745],{"class":734},[705,774,775],{"class":748},"\"{",[705,777,778],{"class":741},"\\\"",[705,780,781],{"class":748},"partner_id",[705,783,778],{"class":741},[705,785,786],{"class":748},":12345}\"",[705,788,752],{"class":734},[705,790,792,795],{"class":730,"line":791},5,[705,793,794],{"class":741},"  \"recipients\"",[705,796,797],{"class":734},": [\n",[705,799,801],{"class":730,"line":800},6,[705,802,803],{"class":734},"    {\n",[705,805,807,810,812,815],{"class":730,"line":806},7,[705,808,809],{"class":741},"      \"firstname\"",[705,811,745],{"class":734},[705,813,814],{"class":748},"\"Application\"",[705,816,752],{"class":734},[705,818,820,823,825,828],{"class":730,"line":819},8,[705,821,822],{"class":741},"      \"lastname\"",[705,824,745],{"class":734},[705,826,827],{"class":748},"\"Gift Card\"",[705,829,752],{"class":734},[705,831,833,836,838,841],{"class":730,"line":832},9,[705,834,835],{"class":741},"      \"emailaddress\"",[705,837,745],{"class":734},[705,839,840],{"class":748},"\"redacted@example.invalid\"",[705,842,752],{"class":734},[705,844,846,849,851,853],{"class":730,"line":845},10,[705,847,848],{"class":741},"      \"deliveremail\"",[705,850,745],{"class":734},[705,852,584],{"class":741},[705,854,752],{"class":734},[705,856,858,861],{"class":730,"line":857},11,[705,859,860],{"class":741},"      \"products\"",[705,862,797],{"class":734},[705,864,866],{"class":730,"line":865},12,[705,867,868],{"class":734},"        {\n",[705,870,872,875,877,880],{"class":730,"line":871},13,[705,873,874],{"class":741},"          \"sku\"",[705,876,745],{"class":734},[705,878,879],{"class":748},"\"SKU-EXAMPLE\"",[705,881,752],{"class":734},[705,883,885,888,890,893],{"class":730,"line":884},14,[705,886,887],{"class":741},"          \"quantity\"",[705,889,745],{"class":734},[705,891,892],{"class":741},"1",[705,894,752],{"class":734},[705,896,898,901,903],{"class":730,"line":897},15,[705,899,900],{"class":741},"          \"value\"",[705,902,745],{"class":734},[705,904,905],{"class":741},"25\n",[705,907,909],{"class":730,"line":908},16,[705,910,911],{"class":734},"        }\n",[705,913,915],{"class":730,"line":914},17,[705,916,917],{"class":734},"      ]\n",[705,919,921],{"class":730,"line":920},18,[705,922,923],{"class":734},"    }\n",[705,925,927],{"class":730,"line":926},19,[705,928,929],{"class":734},"  ]\n",[705,931,933],{"class":730,"line":932},20,[705,934,935],{"class":734},"}\n",[450,937,938,939,941],{},"For ",[461,940,647],{},", the provider response used by the wrapper is represented by its relevant header:",[720,943,947],{"className":944,"code":945,"language":946,"meta":725,"style":725},"language-http shiki shiki-themes github-dark github-light","HTTP\u002F1.1 202 Accepted\nLocation: https:\u002F\u002Fprovider.example\u002Forders\u002Forder-uri-example\n","http",[461,948,949,954],{"__ignoreMap":725},[705,950,951],{"class":730,"line":731},[705,952,953],{},"HTTP\u002F1.1 202 Accepted\n",[705,955,956],{"class":730,"line":738},[705,957,958],{},"Location: https:\u002F\u002Fprovider.example\u002Forders\u002Forder-uri-example\n",[450,960,961],{},"The card lookup returns an array. The processor consumes the first item and maps the relevant fields as follows:",[720,963,965],{"className":722,"code":964,"language":724,"meta":725,"style":725},"[\n  {\n    \"CertificateLink\": \"https:\u002F\u002Fprovider.example\u002Fcert\u002Fredacted\",\n    \"CardNumber\": \"[REDACTED]\",\n    \"Pin\": \"[REDACTED]\",\n    \"Auxiliary\": \"[REDACTED]\",\n    \"ExpirationDate\": \"2030-12-31T23:59:59Z\",\n    \"CardUri\": \"card-uri-example\",\n    \"Sku\": \"SKU-EXAMPLE\"\n  }\n]\n",[461,966,967,972,977,989,1001,1012,1023,1035,1047,1057,1062],{"__ignoreMap":725},[705,968,969],{"class":730,"line":731},[705,970,971],{"class":734},"[\n",[705,973,974],{"class":730,"line":738},[705,975,976],{"class":734},"  {\n",[705,978,979,982,984,987],{"class":730,"line":755},[705,980,981],{"class":741},"    \"CertificateLink\"",[705,983,745],{"class":734},[705,985,986],{"class":748},"\"https:\u002F\u002Fprovider.example\u002Fcert\u002Fredacted\"",[705,988,752],{"class":734},[705,990,991,994,996,999],{"class":730,"line":767},[705,992,993],{"class":741},"    \"CardNumber\"",[705,995,745],{"class":734},[705,997,998],{"class":748},"\"[REDACTED]\"",[705,1000,752],{"class":734},[705,1002,1003,1006,1008,1010],{"class":730,"line":791},[705,1004,1005],{"class":741},"    \"Pin\"",[705,1007,745],{"class":734},[705,1009,998],{"class":748},[705,1011,752],{"class":734},[705,1013,1014,1017,1019,1021],{"class":730,"line":800},[705,1015,1016],{"class":741},"    \"Auxiliary\"",[705,1018,745],{"class":734},[705,1020,998],{"class":748},[705,1022,752],{"class":734},[705,1024,1025,1028,1030,1033],{"class":730,"line":806},[705,1026,1027],{"class":741},"    \"ExpirationDate\"",[705,1029,745],{"class":734},[705,1031,1032],{"class":748},"\"2030-12-31T23:59:59Z\"",[705,1034,752],{"class":734},[705,1036,1037,1040,1042,1045],{"class":730,"line":819},[705,1038,1039],{"class":741},"    \"CardUri\"",[705,1041,745],{"class":734},[705,1043,1044],{"class":748},"\"card-uri-example\"",[705,1046,752],{"class":734},[705,1048,1049,1052,1054],{"class":730,"line":832},[705,1050,1051],{"class":741},"    \"Sku\"",[705,1053,745],{"class":734},[705,1055,1056],{"class":748},"\"SKU-EXAMPLE\"\n",[705,1058,1059],{"class":730,"line":845},[705,1060,1061],{"class":734},"  }\n",[705,1063,1064],{"class":730,"line":857},[705,1065,1066],{"class":734},"]\n",[450,1068,1069,1072,1073,1076,1077,1080,1081,1084,1085,1088],{},[461,1070,1071],{},"CardNumber"," becomes the application code, ",[461,1074,1075],{},"Pin"," becomes the PIN, ",[461,1078,1079],{},"ExpirationDate"," is formatted as an ISO-8601 string, and ",[461,1082,1083],{},"CertificateLink"," becomes the third-party URL. ",[461,1086,1087],{},"CardUri"," is required for balance and void operations. Card numbers, PINs, auxiliary values, and certificate links must be redacted in tickets and examples.",[454,1090,1092],{"id":1091},"response-mapping-and-validation","Response mapping and validation",[450,1094,1095,1096,1099,1100,1102,1103,1106,1107,1109],{},"The async create response is considered successful only when the provider wrapper receives ",[461,1097,1098],{},"202","; the body exposed to the processor contains the extracted ",[461,1101,536],{},". A ",[461,1104,1105],{},"409 Conflict"," is not treated as a new order: the wrapper extracts the existing order URI from ",[461,1108,540],{}," into response headers, and the processor records the sale as requested so retrieval can continue.",[450,1111,1112,1113,1116,1117,591,1120,591,1123,598,1126,1129,1130,1133,1134,1137],{},"The retrieval response must be a successful card array with a first card. The processor sets application status to ",[461,1114,1115],{},"success",", then maps ",[461,1118,1119],{},"cardNumber",[461,1121,1122],{},"pin",[461,1124,1125],{},"expirationDate",[461,1127,1128],{},"certificateLink",". If the brand has ",[461,1131,1132],{},"use_auxiliary_as_barcode_string"," and a barcode URL was generated, ",[461,1135,1136],{},"auxiliary"," replaces the barcode string and a new barcode URL is generated.",[450,1139,1140,1141,591,1144,591,1147,591,1150,1153],{},"The provider resource also exposes ",[461,1142,1143],{},"orderStatus",[461,1145,1146],{},"programId",[461,1148,1149],{},"customerOrderId",[461,1151,1152],{},"totalFaceValue",", and related order fields, but the async issue path stores the extracted order URI and the first card fields rather than interpreting a separate order-state field. A missing SKU fails before the provider request. An empty or malformed provider response can fail during card selection or mapping and must remain an error, not be presented as a successful card.",[454,1155,1157],{"id":1156},"provider-outcomes-retries-and-duplicate-risk","Provider outcomes, retries, and duplicate risk",[473,1159,1160,1173],{},[476,1161,1162],{},[479,1163,1164,1167,1170],{},[482,1165,1166],{},"Provider outcome",[482,1168,1169],{},"Async handling",[482,1171,1172],{},"Operational meaning",[492,1174,1175,1190,1208,1229,1248,1259],{},[479,1176,1177,1181,1187],{},[497,1178,1179],{},[461,1180,647],{},[497,1182,1183,1184,1186],{},"Store ",[461,1185,536],{},"; leave the card requested\u002Fpending",[497,1188,1189],{},"The order was accepted, but card details are obtained separately",[479,1191,1192,1196,1205],{},[497,1193,1194],{},[461,1195,1105],{},[497,1197,1198,1199,1201,1202,1204],{},"Read the existing ",[461,1200,536],{}," from ",[461,1203,540],{},"; continue to retrieval",[497,1206,1207],{},"The customer order ID already exists; do not create another order",[479,1209,1210,1223,1226],{},[497,1211,1212,1215,1216,1219,1220],{},[461,1213,1214],{},"400","–",[461,1217,1218],{},"499",", except ",[461,1221,1222],{},"409",[497,1224,1225],{},"The processor raises an API error instead of returning a retry card; outer job handling leaves the sale retryable",[497,1227,1228],{},"Check SKU, authorization, program access, URI, inventory, and reseller balance",[479,1230,1231,1239,1245],{},[497,1232,1233,1215,1236],{},[461,1234,1235],{},"500",[461,1237,1238],{},"599",[497,1240,1241,1242],{},"Retry the issue job with a five-minute step and a five-hour maximum delay, up to ",[461,1243,1244],{},"MAX_RETRIES",[497,1246,1247],{},"Treat as a provider or gateway failure, while checking whether the original order was accepted",[479,1249,1250,1253,1256],{},[497,1251,1252],{},"Other issue failure",[497,1254,1255],{},"Retry with the processor backoff and a five-minute maximum delay while attempts remain",[497,1257,1258],{},"Inspect the recorded status and response",[479,1260,1261,1264,1267],{},[497,1262,1263],{},"Retrieval failure",[497,1265,1266],{},"Keep the card pending and retry with retrieval backoff while attempts remain",[497,1268,1269],{},"Card details are not yet available or the lookup failed",[450,1271,1272,1273,1275,1276,591,1279,598,1281,1283],{},"The async processor sets ",[461,1274,1244],{}," to 10. Issue attempts and retrieval attempts use separate card metadata counters. The queue job also avoids processing a sale already marked successful. These controls reduce duplicate work, but they cannot prove that a network failure happened before or after provider acceptance; ",[461,1277,1278],{},"sale UUID",[461,1280,636],{},[461,1282,536],{}," are the idempotency investigation keys.",[454,1285,1287],{"id":1286},"audit-and-reconciliation-fields","Audit and reconciliation fields",[450,1289,1290],{},"Compare the following fields without copying sensitive card data into a ticket:",[473,1292,1293,1303],{},[476,1294,1295],{},[479,1296,1297,1300],{},[482,1298,1299],{},"Local or audit field",[482,1301,1302],{},"InComm value to compare",[492,1304,1305,1317,1327,1338,1350,1365,1376,1389,1400],{},[479,1306,1307,1310],{},[497,1308,1309],{},"Sale UUID",[497,1311,1312,1314,1315],{},[461,1313,632],{},"; also async ",[461,1316,636],{},[479,1318,1319,1322],{},[497,1320,1321],{},"Legacy client request ID",[497,1323,1324,1325],{},"Sync ",[461,1326,636],{},[479,1328,1329,1332],{},[497,1330,1331],{},"Partner ID",[497,1333,1334,1335],{},"JSON ",[461,1336,1337],{},"metadata.partner_id",[479,1339,1340,1343],{},[497,1341,1342],{},"Face value and currency",[497,1344,1345,1346,1349],{},"Product ",[461,1347,1348],{},"value"," and the selected currency environment",[479,1351,1352,1355],{},[497,1353,1354],{},"Brand mapping",[497,1356,1345,1357,1360,1361,1364],{},[461,1358,1359],{},"sku"," and the matching ",[461,1362,1363],{},"incomm-sku"," attribute",[479,1366,1367,1370],{},[497,1368,1369],{},"Entity\u002Fprogram context",[497,1371,1372,1375],{},[461,1373,1374],{},"ProgramId"," request header and the resolved currency\u002Fentity program ID",[479,1377,1378,1380],{},[497,1379,531],{},[497,1381,1382,1201,1384,1386,1387],{},[461,1383,536],{},[461,1385,540],{},", stored as ",[461,1388,657],{},[479,1390,1391,1394],{},[497,1392,1393],{},"Card identity",[497,1395,1396,1399],{},[461,1397,1398],{},"cardUri","; compare only a masked card number or last four digits if policy permits",[479,1401,1402,1405],{},[497,1403,1404],{},"Completion data",[497,1406,1407],{},"Expiry, presence of PIN, certificate-link presence, and barcode source",[450,1409,1410,1411,1414],{},"For provider calls that return or throw an InComm response, the async client records each request\u002Fresponse sequence in its API history and labels authentication traffic separately for ",[461,1412,1413],{},"\u002Fauth\u002Ftoken",". The sync implementation records only the last request and response for each call. Processor interaction logs and the sale audit record therefore need to be read together, especially after a retry or duplicate response.",[454,1416,1418],{"id":1417},"settings-and-brand-mappings","Settings and brand mappings",[450,1420,1421,1424],{},[461,1422,1423],{},"config\u002Fincomm.php"," reads these environment-backed settings:",[473,1426,1427,1440],{},[476,1428,1429],{},[479,1430,1431,1434,1437],{},[482,1432,1433],{},"Setting",[482,1435,1436],{},"Environment variable",[482,1438,1439],{},"Purpose",[492,1441,1442,1455,1468,1484,1506,1522],{},[479,1443,1444,1447,1452],{},[497,1445,1446],{},"Application base URL",[497,1448,1449],{},[461,1450,1451],{},"INCOMM_APP_URL",[497,1453,1454],{},"Base URI for program and catalogue calls",[479,1456,1457,1460,1465],{},[497,1458,1459],{},"API base URL",[497,1461,1462],{},[461,1463,1464],{},"INCOMM_API_URL",[497,1466,1467],{},"Base URI for order and card calls",[479,1469,1470,1473,1481],{},[497,1471,1472],{},"Shared client credentials",[497,1474,1475,591,1478],{},[461,1476,1477],{},"INCOMM_CLIENT_ID",[461,1479,1480],{},"INCOMM_CLIENT_SECRET",[497,1482,1483],{},"Client identity and secret",[479,1485,1486,1489,1503],{},[497,1487,1488],{},"Reward Cloud program IDs",[497,1490,1491,591,1494,591,1497,591,1500],{},[461,1492,1493],{},"INCOMM_CAD_PROGRAM_ID",[461,1495,1496],{},"INCOMM_USD_PROGRAM_ID",[461,1498,1499],{},"INCOMM_AUD_PROGRAM_ID",[461,1501,1502],{},"INCOMM_NZD_PROGRAM_ID",[497,1504,1505],{},"Default program per currency",[479,1507,1508,1511,1516],{},[497,1509,1510],{},"Tillo entity overrides",[497,1512,1513],{},[461,1514,1515],{},"INCOMM_*_TILLOINC_PROGRAM_ID",[497,1517,1518,1521],{},[461,1519,1520],{},"tilloinc"," program per currency",[479,1523,1524,1527,1532],{},[497,1525,1526],{},"Asset-update notification",[497,1528,1529],{},[461,1530,1531],{},"SLACK_INCOMM_CARD_IMAGE_UPDATE_WEBHOOK",[497,1533,1534],{},"Slack destination for changed card images",[450,1536,1537,1538,1540,1541,1544,1545,1547],{},"The processor first resolves a program for the sale owner’s Tillo entity and currency, then falls back to the Reward Cloud program for that currency when the override is empty. Each brand uses ",[461,1539,1363],{}," for an open-value product or ",[461,1542,1543],{},"incomm-sku-\u003Cdenomination>"," for a fixed-denomination product. The fixed-denomination key uses the denomination formatted as a float. ",[461,1546,1132],{}," is optional and affects barcode generation only.",[454,1549,1551],{"id":1550},"api-operations-and-operational-tools","API operations and operational tools",[473,1553,1554,1567],{},[476,1555,1556],{},[479,1557,1558,1561,1564],{},[482,1559,1560],{},"Operation",[482,1562,1563],{},"Endpoint or command",[482,1565,1566],{},"Use",[492,1568,1569,1591,1608,1620,1632,1645,1657,1669,1682,1695,1708],{},[479,1570,1571,1574,1579],{},[497,1572,1573],{},"Authenticate",[497,1575,1576],{},[461,1577,1578],{},"POST \u002Fauth\u002Ftoken",[497,1580,1581,1582,591,1585,598,1588],{},"Client-credentials token; form fields include ",[461,1583,1584],{},"client_id",[461,1586,1587],{},"client_secret",[461,1589,1590],{},"grant_type",[479,1592,1593,1596,1600],{},[497,1594,1595],{},"Async order",[497,1597,1598],{},[461,1599,504],{},[497,1601,1602,1603,1605,1606],{},"Create the provider order; ",[461,1604,1098],{}," uses ",[461,1607,540],{},[479,1609,1610,1613,1617],{},[497,1611,1612],{},"Legacy sync order",[497,1614,1615],{},[461,1616,509],{},[497,1618,1619],{},"Create and return an order with card links in the synchronous flow",[479,1621,1622,1625,1629],{},[497,1623,1624],{},"Async order cards",[497,1626,1627],{},[461,1628,679],{},[497,1630,1631],{},"Retrieve cards for async completion and balance lookup",[479,1633,1634,1637,1642],{},[497,1635,1636],{},"Legacy order cards",[497,1638,1639],{},[461,1640,1641],{},"GET \u002Forders\u002F{orderUri}\u002Fcards",[497,1643,1644],{},"Poll cards in the sync flow and find a card for cancellation",[479,1646,1647,1650,1654],{},[497,1648,1649],{},"Card balance",[497,1651,1652],{},[461,1653,686],{},[497,1655,1656],{},"Retrieve current balance",[479,1658,1659,1662,1666],{},[497,1660,1661],{},"Card void",[497,1663,1664],{},[461,1665,690],{},[497,1667,1668],{},"Deactivate a card",[479,1670,1671,1674,1679],{},[497,1672,1673],{},"Programs",[497,1675,1676],{},[461,1677,1678],{},"GET \u002Fprograms\u002Fprograms",[497,1680,1681],{},"List programs for a currency environment",[479,1683,1684,1687,1692],{},[497,1685,1686],{},"Catalogues",[497,1688,1689],{},[461,1690,1691],{},"GET \u002Fprograms\u002Fprograms\u002F{programId}\u002Fcatalogs",[497,1693,1694],{},"List program catalogues",[479,1696,1697,1700,1705],{},[497,1698,1699],{},"Catalogue assets",[497,1701,1702],{},[461,1703,1704],{},"GET \u002Fprograms\u002Fprograms\u002F{programId}\u002Fcatalogs\u002F{catalogId}\u002Fassets",[497,1706,1707],{},"Refresh retailer assets",[479,1709,1710,1713,1718],{},[497,1711,1712],{},"Retailer refresh",[497,1714,1715],{},[461,1716,1717],{},"php artisan rewardcloud:check-incomm-retailers",[497,1719,1720],{},"Update redemption instructions, terms, descriptions, and recent card-image attributes for matching SKUs",[454,1722,1724],{"id":1723},"investigation-checklist","Investigation checklist",[615,1726,1727,1738,1743,1746,1755,1758,1764,1771,1774],{},[618,1728,1729,1730,1733,1734,1737],{},"Confirm the issuer: ",[461,1731,1732],{},"incomm-async"," for current issuance or ",[461,1735,1736],{},"incomm-sync"," for a historical sale.",[618,1739,1740,1741,641],{},"Record the sale UUID, client request ID, sale status, currency, amount, delivery method, brand slug, and ",[461,1742,657],{},[618,1744,1745],{},"Confirm the selected SKU and program ID, including the owner’s Tillo entity and the Reward Cloud fallback.",[618,1747,1748,1749,1751,1752,1754],{},"Compare the audited create request with the provider status and ",[461,1750,540],{}," header. For ",[461,1753,1222],{},", use the existing order URI rather than a new order.",[618,1756,1757],{},"Follow the order URI through the card lookup and check the first card’s card URI, expiry, PIN presence, certificate-link presence, and barcode source without exposing the raw values.",[618,1759,1760,1761,641],{},"For balance, verify that the original sale was found by code and that the order lookup returned a card URI before checking ",[461,1762,1763],{},"\u002Fbalance",[618,1765,1766,1767,1770],{},"For cancellation, verify the original processor reference, the cancellation sale’s partner audit context, and the ",[461,1768,1769],{},"\u002Fvoid"," response.",[618,1772,1773],{},"Check async authentication, request, response, and exception audit records; for sync calls, check the last request\u002Fresponse pair.",[618,1775,1776],{},"Check retry metadata and whether a timeout could have occurred after provider acceptance.",[454,1778,1780],{"id":1779},"limitations-and-support","Limitations and support",[450,1782,1783],{},"The active async issuer does not expose a cashout operation. Balance lookup is provider-card based and requires a code and PIN at the processor interface. The repository’s InComm issuer onboarding migration does not define a support-contact attribute, so no InComm email address is documented here. Use the approved internal processor escalation route and include identifiers, timestamps, status codes, safe field comparisons, and audit evidence; never include credentials, full card numbers, PINs, auxiliary values, or live certificate links.",[454,1785,1787],{"id":1786},"related-code","Related code",[1789,1790,1791,1797,1803,1809,1821,1827,1833,1838,1844,1853,1859],"ul",{},[618,1792,1793,1796],{},[461,1794,1795],{},"app\u002FProcessors\u002FInCommAsyncProcessor.php"," — active async issue, retrieval, balance, cancellation, mapping, and retry handling.",[618,1798,1799,1802],{},[461,1800,1801],{},"app\u002FProcessors\u002FInCommSyncProcessor.php"," — deprecated synchronous issue, polling, balance, and cancellation behavior.",[618,1804,1805,1808],{},[461,1806,1807],{},"app\u002FProcessors\u002FApi\u002FInComm\u002FInComm.php"," — selects program, order, card, and fulfilment API resources.",[618,1810,1811,1814,1815,6,1817,1820],{},[461,1812,1813],{},"app\u002FProcessors\u002FApi\u002FInComm\u002FHttp\u002FOrder.php"," — async and sync order endpoints and ",[461,1816,540],{},[461,1818,1819],{},"Link"," extraction.",[618,1822,1823,1826],{},[461,1824,1825],{},"app\u002FProcessors\u002FApi\u002FInComm\u002FHttp\u002FCard.php"," — card retrieval, balance, and void endpoints.",[618,1828,1829,1832],{},[461,1830,1831],{},"app\u002FProcessors\u002FApi\u002FInComm\u002FHttp\u002FHttpClient.php"," — currency environments, token caching, program headers, and API history.",[618,1834,1835,1837],{},[461,1836,1423],{}," — API URLs, credentials, program IDs, and Slack notification configuration.",[618,1839,1840,1843],{},[461,1841,1842],{},"app\u002FConsole\u002FCommands\u002FUpdateInCommRetailersCommand.php"," — retailer asset and metadata refresh.",[618,1845,1846,633,1849,1852],{},[461,1847,1848],{},"app\u002FJobs\u002FAsyncProcessRequest.php",[461,1850,1851],{},"app\u002FJobs\u002FAsyncFetchCode.php"," — pending, duplicate, and retrieval queue transitions.",[618,1854,1855,1858],{},[461,1856,1857],{},"tests\u002FFeature\u002FProcessors\u002FIncommAsyncProcessorTest.php"," — async accepted, conflict, authentication, retrieval, barcode, balance, and audit scenarios.",[618,1860,1861,1864],{},[461,1862,1863],{},"database\u002Fmigrations\u002F2021_11_01_122948_r_c_c-9119-move-incomm-sync-brands-to-async.php"," — migration of existing brands to the async issuer.",[1866,1867,1868],"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":725,"searchDepth":755,"depth":755,"links":1870},[1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881],{"id":456,"depth":738,"text":457},{"id":612,"depth":738,"text":613},{"id":714,"depth":738,"text":715},{"id":1091,"depth":738,"text":1092},{"id":1156,"depth":738,"text":1157},{"id":1286,"depth":738,"text":1287},{"id":1417,"depth":738,"text":1418},{"id":1550,"depth":738,"text":1551},{"id":1723,"depth":738,"text":1724},{"id":1779,"depth":738,"text":1780},{"id":1786,"depth":738,"text":1787},{},"md",{},{"title":397,"description":452},"rA7kGr1YYjulz48CzA2EkxnstAtEvqSiQ_5kcBOoJIY",[1888,1889],{"title":393,"path":394,"stem":395,"children":-1},{"title":401,"path":402,"stem":403,"children":-1},1789777549074]