[{"data":1,"prerenderedAt":2162},["ShallowReactive",2],{"navigation":3,"external-navigation":214,"external_core:\u002Fcore\u002Fprocessors\u002Fsvs-ecard":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":2159},{"id":445,"title":405,"body":446,"config":2154,"description":452,"extension":2155,"meta":2156,"navigation":15,"path":406,"seo":2157,"stem":407,"__hash__":2158},"external_core\u002Fcore\u002Fprocessors\u002Fsvs-ecard.md",{"type":447,"value":448,"toc":2135},"minimark",[449,453,458,461,464,536,540,570,576,580,583,593,616,621,628,782,785,866,892,921,925,928,1033,1036,1124,1135,1139,1149,1325,1328,1599,1603,1607,1617,1803,1806,1810,1813,1854,1857,1861,1864,1954,1961,1965,1968,1996,1999,2003,2006,2009,2013,2016,2088,2092,2095,2101,2105,2131],[450,451,452],"p",{},"This page explains the SVSECard 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-svsecard-does","What SVSECard does",[450,459,460],{},"SVSECard is a synchronous SVS-backed e-card processor. It issues a digital card immediately, supports balance checks, reloads, and cancellations, and stores SVS transaction identifiers needed for later reconciliation or support investigation.",[450,462,463],{},"The processor is configured as:",[465,466,467,480],"table",{},[468,469,470],"thead",{},[471,472,473,477],"tr",{},[474,475,476],"th",{},"Property",[474,478,479],{},"Behaviour",[481,482,483,492,500,508,516,523],"tbody",{},[471,484,485,489],{},[486,487,488],"td",{},"Processor type",[486,490,491],{},"Brand settings plus processor credentials",[471,493,494,497],{},[486,495,496],{},"Processing",[486,498,499],{},"Synchronous",[471,501,502,505],{},[486,503,504],{},"Delivery",[486,506,507],{},"Secure-link e-card",[471,509,510,513],{},[486,511,512],{},"Balance lookup",[486,514,515],{},"Supported",[471,517,518,521],{},[486,519,520],{},"Cancellation",[486,522,515],{},[471,524,525,528],{},[486,526,527],{},"Order completion rule",[486,529,530,531,535],{},"Approval response code ",[532,533,534],"code",{},"1"," and returned card data",[454,537,539],{"id":538},"order-lifecycle","Order lifecycle",[541,542,543,547,558,561,564,567],"ol",{},[544,545,546],"li",{},"A partner orders an SVSECard-backed brand through the normal gift-card API.",[544,548,549,550,553,554,557],{},"The application resolves the required brand attributes, including ",[532,551,552],{},"store_number",", ",[532,555,556],{},"merchant_id",", and any configured card image.",[544,559,560],{},"The processor generates the transaction metadata used by SVS. The invoice number and STAN are sent to SVS; the transaction ID is retained internally for reconciliation.",[544,562,563],{},"The processor sends the issue request through the SVSECard API client.",[544,565,566],{},"When SVSECard returns an approved response with card data, the application stores the card number, PIN, expiry, and processor reference and marks the card successful.",[544,568,569],{},"Later balance, reload, or cancellation requests reuse the stored card details and provider transaction metadata.",[450,571,572,573,575],{},"Provider approval code ",[532,574,534],{}," is treated as success. Network failures, rejected response codes, missing card data, or inconsistent transaction metadata should be investigated using the processor interaction audit records.",[454,577,579],{"id":578},"example-api-order-flow","Example API order flow",[450,581,582],{},"The following example shows the provider calls behind one successful issue and a later cancellation. Values are illustrative and sensitive card data is redacted.",[584,585,591],"pre",{"className":586,"code":588,"language":589,"meta":590},[587],"language-text","Gift-card order (sale ID: sale-issue-123)\n  -> POST \u002Fv1\u002Fissue-gift-secure-link\n  \u003C- responseCode 1, cardProxy present, eCardHostLink present\n  -> store the card and the SVS reconciliation identifiers\n\nCancellation request (sale ID: sale-cancel-456, linked to sale-issue-123)\n  -> POST \u002Fv1\u002Fcashout-card-proxy\n  \u003C- responseCode 1, no new card data expected\n","text","",[532,592,588],{"__ignoreMap":590},[450,594,595,596,599,600,603,604,607,608,611,612,615],{},"For a new card, ",[532,597,598],{},"Issue secure link"," is the expected first provider operation. In the current processor cancellation path, a follow-up cancellation calls ",[532,601,602],{},"cashoutCardProxy",", which sends a request to ",[532,605,606],{},"\u002Fv1\u002Fcashout-card-proxy","; it is not a second issue request. The separate ",[532,609,610],{},"cancelCardProxy"," client method exists, but the ",[532,613,614],{},"SVSECardProcessor"," cancellation branch does not select it.",[617,618,620],"h3",{"id":619},"issue-request-and-response","Issue request and response",[450,622,623,624,627],{},"The issue request is sent as JSON to ",[532,625,626],{},"\u002Fv1\u002Fissue-gift-secure-link",":",[584,629,633],{"className":630,"code":631,"language":632,"meta":590,"style":590},"language-json shiki shiki-themes github-dark github-light","{\n  \"merchantId\": \"900918\",\n  \"virtualInventoryId\": \"67215\",\n  \"storeNumber\": \"0000000000\",\n  \"invoiceNumber\": \"00123456\",\n  \"stan\": \"123456\",\n  \"currencyCode\": \"GBP\",\n  \"amount\": \"10.00\",\n  \"posTime\": \"17:16:04\",\n  \"posDate\": \"2026-08-17\",\n  \"option\": \"CARD\"\n}\n","json",[532,634,635,644,661,674,687,700,713,726,739,752,765,776],{"__ignoreMap":590},[636,637,640],"span",{"class":638,"line":639},"line",1,[636,641,643],{"class":642},"sQ3_J","{\n",[636,645,647,651,654,658],{"class":638,"line":646},2,[636,648,650],{"class":649},"s0DvM","  \"merchantId\"",[636,652,653],{"class":642},": ",[636,655,657],{"class":656},"sg6BJ","\"900918\"",[636,659,660],{"class":642},",\n",[636,662,664,667,669,672],{"class":638,"line":663},3,[636,665,666],{"class":649},"  \"virtualInventoryId\"",[636,668,653],{"class":642},[636,670,671],{"class":656},"\"67215\"",[636,673,660],{"class":642},[636,675,677,680,682,685],{"class":638,"line":676},4,[636,678,679],{"class":649},"  \"storeNumber\"",[636,681,653],{"class":642},[636,683,684],{"class":656},"\"0000000000\"",[636,686,660],{"class":642},[636,688,690,693,695,698],{"class":638,"line":689},5,[636,691,692],{"class":649},"  \"invoiceNumber\"",[636,694,653],{"class":642},[636,696,697],{"class":656},"\"00123456\"",[636,699,660],{"class":642},[636,701,703,706,708,711],{"class":638,"line":702},6,[636,704,705],{"class":649},"  \"stan\"",[636,707,653],{"class":642},[636,709,710],{"class":656},"\"123456\"",[636,712,660],{"class":642},[636,714,716,719,721,724],{"class":638,"line":715},7,[636,717,718],{"class":649},"  \"currencyCode\"",[636,720,653],{"class":642},[636,722,723],{"class":656},"\"GBP\"",[636,725,660],{"class":642},[636,727,729,732,734,737],{"class":638,"line":728},8,[636,730,731],{"class":649},"  \"amount\"",[636,733,653],{"class":642},[636,735,736],{"class":656},"\"10.00\"",[636,738,660],{"class":642},[636,740,742,745,747,750],{"class":638,"line":741},9,[636,743,744],{"class":649},"  \"posTime\"",[636,746,653],{"class":642},[636,748,749],{"class":656},"\"17:16:04\"",[636,751,660],{"class":642},[636,753,755,758,760,763],{"class":638,"line":754},10,[636,756,757],{"class":649},"  \"posDate\"",[636,759,653],{"class":642},[636,761,762],{"class":656},"\"2026-08-17\"",[636,764,660],{"class":642},[636,766,768,771,773],{"class":638,"line":767},11,[636,769,770],{"class":649},"  \"option\"",[636,772,653],{"class":642},[636,774,775],{"class":656},"\"CARD\"\n",[636,777,779],{"class":638,"line":778},12,[636,780,781],{"class":642},"}\n",[450,783,784],{},"An approved issue response contains the approval code and the data required to deliver the secure-link card:",[584,786,788],{"className":630,"code":787,"language":632,"meta":590,"style":590},"{\n  \"responseCode\": \"1\",\n  \"cardProxy\": \"[redacted]\",\n  \"cardBalance\": \"10.00\",\n  \"eovDate\": \"20711201T0500Z\",\n  \"optionalData\": \"[redacted]\",\n  \"eCardHostLink\": \"https:\u002F\u002F[redacted]\u002Fclaim\u002F[redacted]\"\n}\n",[532,789,790,794,806,818,829,841,852,862],{"__ignoreMap":590},[636,791,792],{"class":638,"line":639},[636,793,643],{"class":642},[636,795,796,799,801,804],{"class":638,"line":646},[636,797,798],{"class":649},"  \"responseCode\"",[636,800,653],{"class":642},[636,802,803],{"class":656},"\"1\"",[636,805,660],{"class":642},[636,807,808,811,813,816],{"class":638,"line":663},[636,809,810],{"class":649},"  \"cardProxy\"",[636,812,653],{"class":642},[636,814,815],{"class":656},"\"[redacted]\"",[636,817,660],{"class":642},[636,819,820,823,825,827],{"class":638,"line":676},[636,821,822],{"class":649},"  \"cardBalance\"",[636,824,653],{"class":642},[636,826,736],{"class":656},[636,828,660],{"class":642},[636,830,831,834,836,839],{"class":638,"line":689},[636,832,833],{"class":649},"  \"eovDate\"",[636,835,653],{"class":642},[636,837,838],{"class":656},"\"20711201T0500Z\"",[636,840,660],{"class":642},[636,842,843,846,848,850],{"class":638,"line":702},[636,844,845],{"class":649},"  \"optionalData\"",[636,847,653],{"class":642},[636,849,815],{"class":656},[636,851,660],{"class":642},[636,853,854,857,859],{"class":638,"line":715},[636,855,856],{"class":649},"  \"eCardHostLink\"",[636,858,653],{"class":642},[636,860,861],{"class":656},"\"https:\u002F\u002F[redacted]\u002Fclaim\u002F[redacted]\"\n",[636,863,864],{"class":638,"line":728},[636,865,781],{"class":642},[450,867,868,869,872,873,875,876,879,880,883,884,887,888,891],{},"Treat ",[532,870,871],{},"responseCode"," ",[532,874,534],{}," or ",[532,877,878],{},"01"," as the approved response after normalising the provider representation. For an issue, ",[532,881,882],{},"cardProxy"," and ",[532,885,886],{},"eCardHostLink"," must be present; the application uses the returned link for the secure-link card and retains the processor reference derived from ",[532,889,890],{},"invoiceNumber",".",[893,894,895],"blockquote",{},[450,896,897,900,901,904,905,908,909,911,912,914,915,917,918,920],{},[636,898,899],{},"!ERROR","\nProcessor will fail for all other ",[902,903,871],"strong",{}," with this pattern of error message\n\"",[636,906,907],{},"%s"," method ",[636,910,907],{}," failed to create a Gift Card from ",[636,913,907],{}," for sale UUID ",[636,916,907],{},": Response code ",[636,919,907],{}," was not valid\"",[617,922,924],{"id":923},"cancellation-request-and-response","Cancellation request and response",[450,926,927],{},"The current processor creates a new cancellation transaction, reuses the original issue invoice number, and sends the returned card proxy to the cashout-proxy endpoint:",[584,929,931],{"className":630,"code":930,"language":632,"meta":590,"style":590},"{\n  \"cardProxy\": \"[redacted]\",\n  \"merchantId\": \"900918\",\n  \"storeNumber\": \"0000000000\",\n  \"invoiceNumber\": \"00123456\",\n  \"stan\": \"654321\",\n  \"currencyCode\": \"GBP\",\n  \"amount\": 0.5,\n  \"posTime\": \"17:18:22\",\n  \"posDate\": \"2026-08-17\"\n}\n",[532,932,933,937,947,957,967,977,988,998,1009,1020,1029],{"__ignoreMap":590},[636,934,935],{"class":638,"line":639},[636,936,643],{"class":642},[636,938,939,941,943,945],{"class":638,"line":646},[636,940,810],{"class":649},[636,942,653],{"class":642},[636,944,815],{"class":656},[636,946,660],{"class":642},[636,948,949,951,953,955],{"class":638,"line":663},[636,950,650],{"class":649},[636,952,653],{"class":642},[636,954,657],{"class":656},[636,956,660],{"class":642},[636,958,959,961,963,965],{"class":638,"line":676},[636,960,679],{"class":649},[636,962,653],{"class":642},[636,964,684],{"class":656},[636,966,660],{"class":642},[636,968,969,971,973,975],{"class":638,"line":689},[636,970,692],{"class":649},[636,972,653],{"class":642},[636,974,697],{"class":656},[636,976,660],{"class":642},[636,978,979,981,983,986],{"class":638,"line":702},[636,980,705],{"class":649},[636,982,653],{"class":642},[636,984,985],{"class":656},"\"654321\"",[636,987,660],{"class":642},[636,989,990,992,994,996],{"class":638,"line":715},[636,991,718],{"class":649},[636,993,653],{"class":642},[636,995,723],{"class":656},[636,997,660],{"class":642},[636,999,1000,1002,1004,1007],{"class":638,"line":728},[636,1001,731],{"class":649},[636,1003,653],{"class":642},[636,1005,1006],{"class":649},"0.5",[636,1008,660],{"class":642},[636,1010,1011,1013,1015,1018],{"class":638,"line":741},[636,1012,744],{"class":649},[636,1014,653],{"class":642},[636,1016,1017],{"class":656},"\"17:18:22\"",[636,1019,660],{"class":642},[636,1021,1022,1024,1026],{"class":638,"line":754},[636,1023,757],{"class":649},[636,1025,653],{"class":642},[636,1027,1028],{"class":656},"\"2026-08-17\"\n",[636,1030,1031],{"class":638,"line":767},[636,1032,781],{"class":642},[450,1034,1035],{},"An approved cancellation confirms the reversal, not the creation of another card:",[584,1037,1039],{"className":630,"code":1038,"language":632,"meta":590,"style":590},"{\n  \"responseCode\": \"1\",\n  \"approvedAmount\": 10.0,\n  \"cardBalance\": 0,\n  \"currencyCode\": \"GBP\",\n  \"conversionRate\": \"61000000\",\n  \"cardCurrencyCode\": \"GBP\",\n  \"eovDate\": \"20711101T0400Z\"\n}\n",[532,1040,1041,1045,1055,1067,1078,1088,1100,1111,1120],{"__ignoreMap":590},[636,1042,1043],{"class":638,"line":639},[636,1044,643],{"class":642},[636,1046,1047,1049,1051,1053],{"class":638,"line":646},[636,1048,798],{"class":649},[636,1050,653],{"class":642},[636,1052,803],{"class":656},[636,1054,660],{"class":642},[636,1056,1057,1060,1062,1065],{"class":638,"line":663},[636,1058,1059],{"class":649},"  \"approvedAmount\"",[636,1061,653],{"class":642},[636,1063,1064],{"class":649},"10.0",[636,1066,660],{"class":642},[636,1068,1069,1071,1073,1076],{"class":638,"line":676},[636,1070,822],{"class":649},[636,1072,653],{"class":642},[636,1074,1075],{"class":649},"0",[636,1077,660],{"class":642},[636,1079,1080,1082,1084,1086],{"class":638,"line":689},[636,1081,718],{"class":649},[636,1083,653],{"class":642},[636,1085,723],{"class":656},[636,1087,660],{"class":642},[636,1089,1090,1093,1095,1098],{"class":638,"line":702},[636,1091,1092],{"class":649},"  \"conversionRate\"",[636,1094,653],{"class":642},[636,1096,1097],{"class":656},"\"61000000\"",[636,1099,660],{"class":642},[636,1101,1102,1105,1107,1109],{"class":638,"line":715},[636,1103,1104],{"class":649},"  \"cardCurrencyCode\"",[636,1106,653],{"class":642},[636,1108,723],{"class":656},[636,1110,660],{"class":642},[636,1112,1113,1115,1117],{"class":638,"line":728},[636,1114,833],{"class":649},[636,1116,653],{"class":642},[636,1118,1119],{"class":656},"\"20711101T0400Z\"\n",[636,1121,1122],{"class":638,"line":741},[636,1123,781],{"class":642},[893,1125,1126],{},[450,1127,1128,1131,1132,1134],{},[636,1129,1130],{},"!WARNING","\nA cancellation request without a preceding issue audit record, matching invoice number, and returned ",[532,1133,882],{}," is not the normal recovery flow. Reconcile the original sale before attempting another issue.",[454,1136,1138],{"id":1137},"audit-comparison-fields","Audit comparison fields",[450,1140,1141,1142,883,1145,1148],{},"Compare the issue and any follow-up cancellation as a sequence of audit records. The provider's ",[532,1143,1144],{},"posDate",[532,1146,1147],{},"posTime"," identify the transaction time sent in the payload; request and response timestamps identify when the application exchanged messages and must be taken from the processor interaction audit.",[465,1150,1151,1167],{},[468,1152,1153],{},[471,1154,1155,1158,1161,1164],{},[474,1156,1157],{},"Field",[474,1159,1160],{},"Issue record",[474,1162,1163],{},"Cancellation record",[474,1165,1166],{},"What to verify",[481,1168,1169,1189,1202,1216,1232,1246,1262,1281,1304],{},[471,1170,1171,1174,1181,1186],{},[486,1172,1173],{},"Operation type",[486,1175,1176,1178,1179],{},[532,1177,598],{}," \u002F ",[532,1180,626],{},[486,1182,1183,1184],{},"Processor cancellation \u002F ",[532,1185,606],{},[486,1187,1188],{},"A new sale must start with issue, not cancellation.",[471,1190,1191,1194,1197,1199],{},[486,1192,1193],{},"Request\u002Fresponse timestamps",[486,1195,1196],{},"Audit request and response times",[486,1198,1196],{},[486,1200,1201],{},"The response follows the matching request and the sequence is chronologically valid.",[471,1203,1204,1207,1210,1213],{},[486,1205,1206],{},"Sale ID",[486,1208,1209],{},"Original sale ID",[486,1211,1212],{},"Follow-up cancellation sale ID",[486,1214,1215],{},"The cancellation points to the original sale; it is not silently replacing the issue record.",[471,1217,1218,1221,1226,1229],{},[486,1219,1220],{},"Processor reference",[486,1222,1223,1224],{},"Derived from the issue ",[532,1225,890],{},[486,1227,1228],{},"Reuses the original issue invoice number",[486,1230,1231],{},"Both records identify the same original provider transaction.",[471,1233,1234,1237,1240,1243],{},[486,1235,1236],{},"Transaction ID",[486,1238,1239],{},"Internal SVS reconciliation transaction ID",[486,1241,1242],{},"New internal transaction ID for the cancellation",[486,1244,1245],{},"Compare the reconciliation records; this value is not a field in the provider JSON payload.",[471,1247,1248,1251,1256,1259],{},[486,1249,1250],{},"Invoice number",[486,1252,1253,1255],{},[532,1254,890],{}," in the issue request",[486,1257,1258],{},"Original issue invoice number",[486,1260,1261],{},"The values match unless the provider explicitly documents another relationship.",[471,1263,1264,1267,1272,1278],{},[486,1265,1266],{},"STAN",[486,1268,1269,1255],{},[532,1270,1271],{},"stan",[486,1273,1274,1275,1277],{},"New ",[532,1276,1271],{}," generated for the cancellation",[486,1279,1280],{},"Do not require the cancellation STAN to equal the issue STAN.",[471,1282,1283,1286,1295,1301],{},[486,1284,1285],{},"Approval code",[486,1287,1288,1290,1291,875,1293],{},[532,1289,871],{}," must be ",[532,1292,534],{},[532,1294,878],{},[486,1296,1297,1290,1299],{},[532,1298,871],{},[532,1300,534],{},[486,1302,1303],{},"An approved cancellation does not prove that a new card was created.",[471,1305,1306,1309,1316,1322],{},[486,1307,1308],{},"Card-data presence",[486,1310,1311,883,1313,1315],{},[532,1312,882],{},[532,1314,886],{}," expected",[486,1317,1318,1319,1321],{},"No new card data expected; the original ",[532,1320,882],{}," is sent in the request",[486,1323,1324],{},"Missing issue card data is a failure or partial-processing signal; missing cancellation card data is normal.",[450,1326,1327],{},"A redacted comparison record can be represented as follows:",[584,1329,1331],{"className":630,"code":1330,"language":632,"meta":590,"style":590},"{\n  \"issue\": {\n    \"operationType\": \"Issue secure link\",\n    \"requestTimestamp\": \"2026-08-17T17:16:04Z\",\n    \"responseTimestamp\": \"2026-08-17T17:16:05Z\",\n    \"saleId\": \"sale-issue-123\",\n    \"processorReference\": \"00123456\",\n    \"transactionId\": \"[internal-reconciliation-id]\",\n    \"invoiceNumber\": \"00123456\",\n    \"stan\": \"123456\",\n    \"approvalCode\": \"01\",\n    \"cardDataPresent\": true\n  },\n  \"cancellation\": {\n    \"operationType\": \"Cashout card proxy\",\n    \"requestTimestamp\": \"2026-08-17T17:18:22Z\",\n    \"responseTimestamp\": \"2026-08-17T17:18:23Z\",\n    \"saleId\": \"sale-cancel-456\",\n    \"processorReference\": \"00123456\",\n    \"transactionId\": \"[internal-cancellation-reconciliation-id]\",\n    \"invoiceNumber\": \"00123456\",\n    \"stan\": \"654321\",\n    \"approvalCode\": \"1\",\n    \"cardDataPresent\": false\n  }\n}\n",[532,1332,1333,1337,1345,1357,1369,1381,1393,1404,1416,1427,1438,1450,1460,1466,1474,1486,1498,1510,1522,1533,1545,1556,1567,1578,1588,1594],{"__ignoreMap":590},[636,1334,1335],{"class":638,"line":639},[636,1336,643],{"class":642},[636,1338,1339,1342],{"class":638,"line":646},[636,1340,1341],{"class":649},"  \"issue\"",[636,1343,1344],{"class":642},": {\n",[636,1346,1347,1350,1352,1355],{"class":638,"line":663},[636,1348,1349],{"class":649},"    \"operationType\"",[636,1351,653],{"class":642},[636,1353,1354],{"class":656},"\"Issue secure link\"",[636,1356,660],{"class":642},[636,1358,1359,1362,1364,1367],{"class":638,"line":676},[636,1360,1361],{"class":649},"    \"requestTimestamp\"",[636,1363,653],{"class":642},[636,1365,1366],{"class":656},"\"2026-08-17T17:16:04Z\"",[636,1368,660],{"class":642},[636,1370,1371,1374,1376,1379],{"class":638,"line":689},[636,1372,1373],{"class":649},"    \"responseTimestamp\"",[636,1375,653],{"class":642},[636,1377,1378],{"class":656},"\"2026-08-17T17:16:05Z\"",[636,1380,660],{"class":642},[636,1382,1383,1386,1388,1391],{"class":638,"line":702},[636,1384,1385],{"class":649},"    \"saleId\"",[636,1387,653],{"class":642},[636,1389,1390],{"class":656},"\"sale-issue-123\"",[636,1392,660],{"class":642},[636,1394,1395,1398,1400,1402],{"class":638,"line":715},[636,1396,1397],{"class":649},"    \"processorReference\"",[636,1399,653],{"class":642},[636,1401,697],{"class":656},[636,1403,660],{"class":642},[636,1405,1406,1409,1411,1414],{"class":638,"line":728},[636,1407,1408],{"class":649},"    \"transactionId\"",[636,1410,653],{"class":642},[636,1412,1413],{"class":656},"\"[internal-reconciliation-id]\"",[636,1415,660],{"class":642},[636,1417,1418,1421,1423,1425],{"class":638,"line":741},[636,1419,1420],{"class":649},"    \"invoiceNumber\"",[636,1422,653],{"class":642},[636,1424,697],{"class":656},[636,1426,660],{"class":642},[636,1428,1429,1432,1434,1436],{"class":638,"line":754},[636,1430,1431],{"class":649},"    \"stan\"",[636,1433,653],{"class":642},[636,1435,710],{"class":656},[636,1437,660],{"class":642},[636,1439,1440,1443,1445,1448],{"class":638,"line":767},[636,1441,1442],{"class":649},"    \"approvalCode\"",[636,1444,653],{"class":642},[636,1446,1447],{"class":656},"\"01\"",[636,1449,660],{"class":642},[636,1451,1452,1455,1457],{"class":638,"line":778},[636,1453,1454],{"class":649},"    \"cardDataPresent\"",[636,1456,653],{"class":642},[636,1458,1459],{"class":649},"true\n",[636,1461,1463],{"class":638,"line":1462},13,[636,1464,1465],{"class":642},"  },\n",[636,1467,1469,1472],{"class":638,"line":1468},14,[636,1470,1471],{"class":649},"  \"cancellation\"",[636,1473,1344],{"class":642},[636,1475,1477,1479,1481,1484],{"class":638,"line":1476},15,[636,1478,1349],{"class":649},[636,1480,653],{"class":642},[636,1482,1483],{"class":656},"\"Cashout card proxy\"",[636,1485,660],{"class":642},[636,1487,1489,1491,1493,1496],{"class":638,"line":1488},16,[636,1490,1361],{"class":649},[636,1492,653],{"class":642},[636,1494,1495],{"class":656},"\"2026-08-17T17:18:22Z\"",[636,1497,660],{"class":642},[636,1499,1501,1503,1505,1508],{"class":638,"line":1500},17,[636,1502,1373],{"class":649},[636,1504,653],{"class":642},[636,1506,1507],{"class":656},"\"2026-08-17T17:18:23Z\"",[636,1509,660],{"class":642},[636,1511,1513,1515,1517,1520],{"class":638,"line":1512},18,[636,1514,1385],{"class":649},[636,1516,653],{"class":642},[636,1518,1519],{"class":656},"\"sale-cancel-456\"",[636,1521,660],{"class":642},[636,1523,1525,1527,1529,1531],{"class":638,"line":1524},19,[636,1526,1397],{"class":649},[636,1528,653],{"class":642},[636,1530,697],{"class":656},[636,1532,660],{"class":642},[636,1534,1536,1538,1540,1543],{"class":638,"line":1535},20,[636,1537,1408],{"class":649},[636,1539,653],{"class":642},[636,1541,1542],{"class":656},"\"[internal-cancellation-reconciliation-id]\"",[636,1544,660],{"class":642},[636,1546,1548,1550,1552,1554],{"class":638,"line":1547},21,[636,1549,1420],{"class":649},[636,1551,653],{"class":642},[636,1553,697],{"class":656},[636,1555,660],{"class":642},[636,1557,1559,1561,1563,1565],{"class":638,"line":1558},22,[636,1560,1431],{"class":649},[636,1562,653],{"class":642},[636,1564,985],{"class":656},[636,1566,660],{"class":642},[636,1568,1570,1572,1574,1576],{"class":638,"line":1569},23,[636,1571,1442],{"class":649},[636,1573,653],{"class":642},[636,1575,803],{"class":656},[636,1577,660],{"class":642},[636,1579,1581,1583,1585],{"class":638,"line":1580},24,[636,1582,1454],{"class":649},[636,1584,653],{"class":642},[636,1586,1587],{"class":649},"false\n",[636,1589,1591],{"class":638,"line":1590},25,[636,1592,1593],{"class":642},"  }\n",[636,1595,1597],{"class":638,"line":1596},26,[636,1598,781],{"class":642},[454,1600,1602],{"id":1601},"settings","Settings",[617,1604,1606],{"id":1605},"processor-settings","Processor settings",[450,1608,1609,1610,1613,1614,627],{},"The processor-level settings are environment-backed values in ",[532,1611,1612],{},"config\u002Fsvsecard.php"," under ",[532,1615,1616],{},"global",[465,1618,1619,1632],{},[468,1620,1621],{},[471,1622,1623,1626,1629],{},[474,1624,1625],{},"Setting",[474,1627,1628],{},"Environment variable",[474,1630,1631],{},"Purpose",[481,1633,1634,1647,1660,1673,1686,1699,1712,1725,1738,1751,1764,1777,1790],{},[471,1635,1636,1639,1644],{},[486,1637,1638],{},"API endpoint",[486,1640,1641],{},[532,1642,1643],{},"SVS_ECARD_URL",[486,1645,1646],{},"Provider endpoint used for SVSECard requests",[471,1648,1649,1652,1657],{},[486,1650,1651],{},"Auth ID",[486,1653,1654],{},[532,1655,1656],{},"SVS_ECARD_AUTH_ID",[486,1658,1659],{},"Provider authentication identifier",[471,1661,1662,1665,1670],{},[486,1663,1664],{},"Username",[486,1666,1667],{},[532,1668,1669],{},"SVS_ECARD_USERNAME",[486,1671,1672],{},"Provider authentication username",[471,1674,1675,1678,1683],{},[486,1676,1677],{},"Password",[486,1679,1680],{},[532,1681,1682],{},"SVS_ECARD_PASSWORD",[486,1684,1685],{},"Provider authentication password",[471,1687,1688,1691,1696],{},[486,1689,1690],{},"Key name",[486,1692,1693],{},[532,1694,1695],{},"SVS_ECARD_KEY_NAME",[486,1697,1698],{},"Additional request-header key name",[471,1700,1701,1704,1709],{},[486,1702,1703],{},"Key value",[486,1705,1706],{},[532,1707,1708],{},"SVS_ECARD_KEY_VALUE",[486,1710,1711],{},"Additional request-header key value",[471,1713,1714,1717,1722],{},[486,1715,1716],{},"Merchant name",[486,1718,1719],{},[532,1720,1721],{},"SVS_ECARD_MERCHANT_NAME",[486,1723,1724],{},"Merchant identity sent in requests",[471,1726,1727,1730,1735],{},[486,1728,1729],{},"Store number",[486,1731,1732],{},[532,1733,1734],{},"SVS_ECARD_STORE_NUMBER",[486,1736,1737],{},"Default store number",[471,1739,1740,1743,1748],{},[486,1741,1742],{},"Division",[486,1744,1745],{},[532,1746,1747],{},"SVS_ECARD_DIVISION",[486,1749,1750],{},"Division code for routing",[471,1752,1753,1756,1761],{},[486,1754,1755],{},"Client ID",[486,1757,1758],{},[532,1759,1760],{},"SVS_ECARD_CLIENT_ID",[486,1762,1763],{},"Provider client identifier",[471,1765,1766,1769,1774],{},[486,1767,1768],{},"Timeout",[486,1770,1771],{},[532,1772,1773],{},"SVS_ECARD_TIMEOUT",[486,1775,1776],{},"HTTP client timeout",[471,1778,1779,1782,1787],{},[486,1780,1781],{},"Increment prefix",[486,1783,1784],{},[532,1785,1786],{},"SVS_ECARD_TRANSACTION_INCREMENT_ID_PREFIX",[486,1788,1789],{},"Prefix for generated transaction IDs",[471,1791,1792,1795,1800],{},[486,1793,1794],{},"Digital MIDs",[486,1796,1797],{},[532,1798,1799],{},"SVS_ECARD_DIGITAL_MID_*",[486,1801,1802],{},"Currency-specific merchant IDs",[450,1804,1805],{},"These settings control authentication, routing, and provider-side identification. They should not be duplicated in brand notes or support responses.",[617,1807,1809],{"id":1808},"brand-settings","Brand settings",[450,1811,1812],{},"Each SVSECard-enabled brand must provide these attributes:",[465,1814,1815,1824],{},[468,1816,1817],{},[471,1818,1819,1822],{},[474,1820,1821],{},"Attribute",[474,1823,1631],{},[481,1825,1826,1835,1844],{},[471,1827,1828,1832],{},[486,1829,1830],{},[532,1831,552],{},[486,1833,1834],{},"Store identifier sent to the provider",[471,1836,1837,1841],{},[486,1838,1839],{},[532,1840,556],{},[486,1842,1843],{},"Merchant identifier used in the request",[471,1845,1846,1851],{},[486,1847,1848],{},[532,1849,1850],{},"card_image",[486,1852,1853],{},"Image asset used for the delivered e-card experience",[450,1855,1856],{},"If the store number or merchant ID is wrong or missing, SVSECard may reject the request or issue against the wrong merchant configuration.",[454,1858,1860],{"id":1859},"api-operations","API operations",[450,1862,1863],{},"The SVSECard client supports several operational request types:",[465,1865,1866,1879],{},[468,1867,1868],{},[471,1869,1870,1873,1876],{},[474,1871,1872],{},"Operation",[474,1874,1875],{},"Use",[474,1877,1878],{},"Required data",[481,1880,1881,1891,1902,1913,1929,1940],{},[471,1882,1883,1885,1888],{},[486,1884,598],{},[486,1886,1887],{},"Create and deliver a digital card",[486,1889,1890],{},"Brand merchant settings, amount, transaction identifiers",[471,1892,1893,1896,1899],{},[486,1894,1895],{},"Balance inquiry",[486,1897,1898],{},"Check stored-value balance",[486,1900,1901],{},"Card number and PIN",[471,1903,1904,1907,1910],{},[486,1905,1906],{},"Reload",[486,1908,1909],{},"Add value to an existing card",[486,1911,1912],{},"Card details and amount",[471,1914,1915,1918,1921],{},[486,1916,1917],{},"Processor cancellation",[486,1919,1920],{},"Cancel or reverse an existing issue",[486,1922,1923,1924,1926,1927],{},"Original processor reference, returned ",[532,1925,882],{},", and transaction details; currently uses ",[532,1928,606],{},[471,1930,1931,1934,1937],{},[486,1932,1933],{},"Cancel card proxy",[486,1935,1936],{},"Client-supported provider operation",[486,1938,1939],{},"Original processor reference and transaction details; not selected by the current processor cancellation branch",[471,1941,1942,1945,1948],{},[486,1943,1944],{},"Cashout card proxy",[486,1946,1947],{},"Provider operation used by the current processor cancellation branch",[486,1949,1950,1951,1953],{},"Returned ",[532,1952,882],{}," and cancellation transaction details",[450,1955,1956,1957,1960],{},"All requests are audit-logged, and the processor keeps the generated transaction metadata so later support and reconciliation work can tie back to the original issue call. In the current processor implementation, cancellation uses the ",[532,1958,1959],{},"cashout-card-proxy"," operation shown above.",[454,1962,1964],{"id":1963},"customer-service-investigation","Customer-service investigation",[450,1966,1967],{},"When an order or follow-up request fails, check these values in order:",[541,1969,1970,1973,1981,1984,1987,1993],{},[544,1971,1972],{},"The requested brand, currency, and face value.",[544,1974,1975,1976,883,1978,1980],{},"The brand's ",[532,1977,552],{},[532,1979,556],{}," attributes.",[544,1982,1983],{},"The sale's processor reference and stored SVS transaction identifiers.",[544,1985,1986],{},"The processor interaction audit request and response.",[544,1988,1989,1990,1992],{},"Whether the response returned approval code ",[532,1991,534],{}," and the expected card data.",[544,1994,1995],{},"Whether a later balance, reload, or cancellation request is using the correct original card and transaction identifiers.",[450,1997,1998],{},"Do not manually reissue a card until the first request has been reviewed. A second issue request can create an additional e-card even if the first response was only partially processed internally.",[454,2000,2002],{"id":2001},"limitations","Limitations",[450,2004,2005],{},"SVSECard supports more follow-up operations than processors that only issue vouchers, but customer-service actions still need to follow the approved refund, reconciliation, and data-handling procedures. Stored card numbers, PINs, and credentials should not be included in routine support communications.",[450,2007,2008],{},"Use the internal sale identifier, processor reference, timestamps, and audit evidence when escalating provider issues.",[454,2010,2012],{"id":2011},"appendix-http-status-codes","Appendix: HTTP Status Codes",[450,2014,2015],{},"A normal response will have a 200 ok response with the defined payload. Other http response codes\ndenote an error condition and will have text message in the payload.\n200 OK",[2017,2018,2019,2022,2025,2028,2031,2034,2037,2040,2043,2046,2049,2052,2055,2058,2061,2064,2067,2070,2073,2076,2079,2082,2085],"ul",{},[544,2020,2021],{},"Response Payload\n400 Bad Request",[544,2023,2024],{},"Malformed Payload Message",[544,2026,2027],{},"Missing Card Proxy",[544,2029,2030],{},"Missing Store Number",[544,2032,2033],{},"Missing Invoice Number",[544,2035,2036],{},"Missing Amount",[544,2038,2039],{},"Missing POS Time",[544,2041,2042],{},"Missing POS Date",[544,2044,2045],{},"Empty Card Proxy",[544,2047,2048],{},"Empty Store Number",[544,2050,2051],{},"Empty Invoice Number",[544,2053,2054],{},"Empty Currency Code",[544,2056,2057],{},"Empty POS Time",[544,2059,2060],{},"Empty POS Date",[544,2062,2063],{},"Invalid POS Time",[544,2065,2066],{},"Invalid POS Date",[544,2068,2069],{},"Invalid Merchant Id",[544,2071,2072],{},"Invalid Stan",[544,2074,2075],{},"Invalid Virtual Inventory Id\n500 Internal Server Error",[544,2077,2078],{},"Internal Server Error\n401 Unauthorized",[544,2080,2081],{},"User does not have access privileges\n409 Conflict",[544,2083,2084],{},"Unable to process request\n403 Forbidden",[544,2086,2087],{},"HTTP Status 403 – Forbidden (content-type:text\u002Fhtml)",[454,2089,2091],{"id":2090},"appendix-response-codes","Appendix Response Codes",[450,2093,2094],{},"SVS Response Codes (Authorisation Server Response Codes) are passed to field 39.\nResponse",[450,2096,2097,2100],{},[902,2098,2099],{},"Code - Indication - Definition","\n1 Approval Transaction was successful\n2 Inactive card Card in database but not an active status\n3 Invalid card number Card Not valid for the merchant or the card\ndoes not pass MOD-10 algorithm\n4 Invalid transaction code Transaction code is not in valid range\n5 Insufficient funds Card working balance is insufficient\n6 No previous authorizations Transaction to cancel not found\n7 Invalid message Table locked or unrecoverable error (retry\ntransaction)\n8 No card found Card number not found in SVS Transaction History\n9 Insufficient funds due to outstanding preauthorization.\nCard working balance minus outstanding\nauthorization amount is insufficient\n10 Denial - No previous authorization Pre-authorization completion fails due to no\npre-authorization\n11 Not used Not used\n12 Not used Not used\n13 Maximum single reload exceeded Maximum amount for a single reload\nexceeded\n14 Maximum working balance exceeded Reload would increase card working balance\nover limit\n15 Shut down Authorization server is shut down\n16 Invalid card status Card activation attempted on status other than\ninactive\n17 Unknown dealer\u002Fstore code – Special edit Store number not valid for merchant\n18 Maximum number of reloads exceeded Number of reload over limit\n19 Invalid card verification value Invalid Card Verification Value (CVV) or Secondary Security Code (SSC)\n20 Invalid PIN number Invalid PIN Number or PIN Locked\n21 Card already issued Issue Gift Card Transaction used on a card that has already been reloaded\n22 Card not issued Card Reload Transaction used on a card that\nhas not been issued\n23 Card already used Reversal\u002FCancel Transaction attempted on\nIssue gift card after card has been used\n24 Manual transaction not allowed Manual transactions (no CVV) not allowed on\nthis BIN Range\n25 Mag stripe read not valid Non manual transactions (valid CVV) not\nallowed on this BIN range\n26 Transaction type unknown Transaction type has not been set up on this\nBIN Range\n27 Invalid tender type Tender type submitted was not valid\n28 Invalid customer type Customer type submitted was not valid\n29 PIN locked PIN has been locked due to a velocity check\n30 Max number of redemptions exceeded Transaction will exceed the maximum number\nof redemptions allowed for this card\n31 Invalid currency code Currency code provided is not supported\n32 Invalid Server ID Restaurant only. Restaurant server ID code\ninvalid.\n33 Frozen The card has been flagged as frozen.\n34 Invalid Amount The transaction amount requested does not\nmatch the pre-valued card dollar amount.\n35 Not Used\n36 Invalid source Transaction rejected – invalid transaction\npromotion-wide or invalid for originating\nmerchant and store. (DPS)\n37 Invalid\u002Fmerchant\u002Fstore Transaction rejected – invalid merchant and\nstore combination for promotion. (DPS)\n43 Basket Required Transaction declined – basket info required.\n(DPS)\n47 Product Based Card This card is only good for specific products\n98 Time Out Returned when SVS is switching request to a third party for authorization and they do not response in time. This code should be handled as if no response is received form SVS.",[454,2102,2104],{"id":2103},"related-code","Related code",[2017,2106,2107,2113,2119,2125],{},[544,2108,2109,2112],{},[532,2110,2111],{},"app\u002FProcessors\u002FSVSECardProcessor.php"," — issue, balance, reload, cancel, and secure-link handling.",[544,2114,2115,2118],{},[532,2116,2117],{},"app\u002FHttp\u002FClients\u002FSVSECard\u002FSVSECardApi.php"," — provider transport.",[544,2120,2121,2124],{},[532,2122,2123],{},"app\u002FHttp\u002FClients\u002FSVSECard\u002FRequests\u002F"," — issue, balance, reload, cancel, and cashout request payloads.",[544,2126,2127,2130],{},[532,2128,2129],{},"tests\u002FFeature\u002FProcessors\u002FSVSECard\u002FSVSECardProcessorTest.php"," — processor behaviour and approval\u002Ffailure scenarios.",[2132,2133,2134],"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":590,"searchDepth":663,"depth":663,"links":2136},[2137,2138,2139,2143,2144,2148,2149,2150,2151,2152,2153],{"id":456,"depth":646,"text":457},{"id":538,"depth":646,"text":539},{"id":578,"depth":646,"text":579,"children":2140},[2141,2142],{"id":619,"depth":663,"text":620},{"id":923,"depth":663,"text":924},{"id":1137,"depth":646,"text":1138},{"id":1601,"depth":646,"text":1602,"children":2145},[2146,2147],{"id":1605,"depth":663,"text":1606},{"id":1808,"depth":663,"text":1809},{"id":1859,"depth":646,"text":1860},{"id":1963,"depth":646,"text":1964},{"id":2001,"depth":646,"text":2002},{"id":2011,"depth":646,"text":2012},{"id":2090,"depth":646,"text":2091},{"id":2103,"depth":646,"text":2104},{},"md",{},{"title":405,"description":452},"0-ELePC_nhkn0QcUgG7INtQuW12aK0cIDrkgNyL7TMQ",[2160,2161],{"title":401,"path":402,"stem":403,"children":-1},{"title":409,"path":410,"stem":411,"children":-1},1789777549156]