{"componentChunkName":"component---src-templates-article-template-tsx","path":"/co/en/apm/bre-b-payments","result":{"data":{"article":{"title":"Accept Bre-B payments","subtitle":null,"fullWidth":null,"hero":null,"heroTextColor":null,"heroImg":null,"content":[{"body":{"childMdx":{"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {};\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\nvar Aside = makeShortcode(\"Aside\");\nvar CodeTabs = makeShortcode(\"CodeTabs\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(Aside, {\n    type: \"danger\",\n    title: \"\\uD83D\\uDEA7 Early Release \\u2014 Beta\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"This product is in early access\"), \". Parameters, response structures and behaviors may change without prior notice. \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Do not\"), \" use this version in production without first coordinating with the Kushki integrations team.\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Bre-B\"), \" is one of the APM (alternative payment methods) processors in Colombia: instead of asking for the payer\\u2019s bank details and redirecting them to their bank, Kushki generates a QR code that the user scans from their banking app to authorize the payment in real time.\"), mdx(\"p\", null, \"Which processors your merchant has is answered by the configuration endpoint (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GET /transfer/v1/config\"), \") \\u2014 the full model is in \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.kushki.com/co/apm/overview\"\n  }, \"How do APM payments work?\"), \". Existing ACH integrations do not change: they keep following their \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.kushki.com/co/transfer-payments/accept-a-payment\"\n  }, \"bank transfer guide\"), \".\"), mdx(Aside, {\n    type: \"danger\",\n    title: \"Important\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, \"Available exclusively for Colombia with the Bre-B processor configured in your MID. To enable it, contact your account executive.\")), mdx(\"h2\", {\n    \"id\": \"what-your-customers-payment-experience-looks-like\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#what-your-customers-payment-experience-looks-like\",\n    \"aria-label\": \"what your customers payment experience looks like permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"What your customer\\u2019s payment experience looks like\"), mdx(\"p\", null, \"Your store shows the QR code at checkout, the customer scans it from their bank\\u2019s app, reviews the amount and confirms, and the payment is approved in real time.\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"maxWidth\": \"1200px\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\"\n    }\n  }, \"\\n        \", mdx(\"span\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"60.317460317460316%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAYCAIAAAAH5iiXAAAFiElEQVRIx4VWW49cRxH+qrpPn5nZmdldz168s47XNvJFliw7IsE8hItASLwhJAQP+Sf8BXhFQvwDJBBRkheIFPkhClYsLgkCAtYCvuzV2fXeZudyuuvj4eyOZ8e7Tj8czZnuOl9V9Vf1lXT7kWSMSVQACEACgKhYMoICURXnHM5eBErbM7ZePIbLCxBTera1TaP3LhnNTESyzMciEhCg2aw36hMAydOBh5AiGDsjI48jfAKAB6Dq6vVmvZarCkkRKf0TQFVLvGR20OlP1ILKKYGVx8y4d9CvVTMVHfqhqjh2ucSnAKSHoNcv/v5w8+ZXWikVZkfAALxzjcaECLzz/Wj//M+z60tTlmIyc05JyLH/k416yPOU7B/Lz64sNlIcGAmgkueNem2YqCzLVFUAiki3H8t//3j/wfu//8ipEyGYAFA8CYA//uH37ty+ZWZ/+uvn79x7qKICY7EPQLIGoUb7wbevfu31GzFxc2NdQOddjHF9Y9PMzs/PhRAsWRHTQrtdBuYBiIhZ+u17937x898Bk7jc/u4b86r6wa+XgefA5tzM1J3btwT8w8fLP/vN/q03J69O5f1Cq5mGLPx5o/v5g/1qWH7jznWAKcUrl5fKYBbbCySzLCtfHz1+EmMsX6XbjyKIMd2//0mlUlMVEXVOAcQYjbRkZLp7903SPvzo0yj1kKmqkBARAZLZoDDPg++8dZvE+trq5UsXT+Xg4ydPp8/NlMAeAAmSN65dmZ2bTcnyEFTlpMGKmZG8dGF6YaFtoIEeCiDCFKKQtbXVUX586fJH1UbElL7Y2okxmSVAatV8brZV7pql4x9MibvsqUhTKwAObGDkpFTM+FKtggABfQVwSbTWTIvGXj8WMRHY7QzyzOlIaZIkWJdAs0ePn4jK3PyszzKWOydXj+nd/YcHxeBH0zeaGs4CBgCv2k8FYE5FVGjJKN75MRsnWqS0srpRxNhqnauEYKd1lh3r/WTtb4i9bzRea4azgUXEKR7+e3lnZw+Ceq22d9Bpn5+7fu3y2M0VTFBZWloUUR/8gMnjiBSj52Zc7d7i3S7ia6H5ilQfrcPDXuewG0L4Ynun2+3PtqbLDB/2ijxzAgFwyAKKdvs8gF3rgakpOYFur8jzrHSSpBf5Vv3i8I5EZNSxceBms05wstk4OOiELNNjbVARERAkUUcgULJpAplAhrpSNsWiiKvrz2JMmXdFTGWbW1yYHU3cOOM6ne5//7eSUtp+vvdkZSPFVN5CJfciIiLea/Au9y7zmnkNzmdOnRMRqQSvKgSzzE9NNswspjQoisNur1rNQ8hGmTAecX8wyPPgnWvUa1vbu63W1HG5gWQ195lYTMmpkjRjJQ+1agXA7lZGcqhBk816pRLKrACoVnKclMZx4IsXFmZb0z7z83OtS0uLjfrE0XECgFNRlaDeOUeSZMiO7sK58daRv8Tk08lVFuL5+ZloScraNwul8UiKUook8+C9D18izq/cGY84z8N2Z7efIoCJLK8f9/ehYbc7EJVa9cxvq0gRU7dXCKQUzlL9q5UwWpb+ZdvZWoMkBHqSeqXV9l5/v9N/vldUK3mZpJSsVg1D11Tlk8+evv3Lv7SCfHVxgsSna4dPe+lXb998/WrjzFQD8KJj6RpuFUX68MHmx//avnmhQcCpFMk+e7T3zRvnvv/12TKglOzWtfkPfvqWiDgVCFIiyZnpiYP9rRdhlIMAydWVlRC8qp7o9FKKo7TbbZLra2udw76V7B1xSxUTtXxhoQ1gfX3Nq2TBj02BKaZePw4HASmnTDOSNiiKF9cyAh5CJiIEQMYYh5PUiQbu/NGwRhZFcTqTfVYKLktgM+sPBiIKUEXL9qTHXzlSNxKkqIioCEKWjTXwUXU6S5WHZwj+H7+V9sp1ijZgAAAAAElFTkSuQmCC')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }, \"\\n          \", mdx(\"picture\", {\n    parentName: \"span\"\n  }, \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"https://images.ctfassets.net/mmjbm94f6iyd/3gnDT89ItgXrsVXDPjol7u/2136e3d3d1a3106bb64c1f565be5bdc6/breb_EN.png?w=315&fm=webp 315w\", \"https://images.ctfassets.net/mmjbm94f6iyd/3gnDT89ItgXrsVXDPjol7u/2136e3d3d1a3106bb64c1f565be5bdc6/breb_EN.png?w=630&fm=webp 630w\", \"https://images.ctfassets.net/mmjbm94f6iyd/3gnDT89ItgXrsVXDPjol7u/2136e3d3d1a3106bb64c1f565be5bdc6/breb_EN.png?w=1260&fm=webp 1260w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\",\n    \"type\": \"image/webp\"\n  }), \"\\n          \", mdx(\"source\", {\n    parentName: \"picture\",\n    \"srcSet\": [\"https://images.ctfassets.net/mmjbm94f6iyd/3gnDT89ItgXrsVXDPjol7u/2136e3d3d1a3106bb64c1f565be5bdc6/breb_EN.png?w=315 315w\", \"https://images.ctfassets.net/mmjbm94f6iyd/3gnDT89ItgXrsVXDPjol7u/2136e3d3d1a3106bb64c1f565be5bdc6/breb_EN.png?w=630 630w\", \"https://images.ctfassets.net/mmjbm94f6iyd/3gnDT89ItgXrsVXDPjol7u/2136e3d3d1a3106bb64c1f565be5bdc6/breb_EN.png?w=1260 1260w\"],\n    \"sizes\": \"(max-width: 1200px) 100vw, 1200px\"\n  }), \"\\n          \", mdx(\"img\", {\n    parentName: \"picture\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\",\n      \"boxShadow\": \"inset 0px 0px 0px 400px transparent\"\n    },\n    \"alt\": \"breb EN\",\n    \"title\": \"\",\n    \"src\": \"https://images.ctfassets.net/mmjbm94f6iyd/3gnDT89ItgXrsVXDPjol7u/2136e3d3d1a3106bb64c1f565be5bdc6/breb_EN.png\",\n    \"loading\": \"lazy\"\n  }), \"\\n        \"), \"\\n        \"), \"\\n      \")), mdx(\"h2\", {\n    \"id\": \"operation-details\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#operation-details\",\n    \"aria-label\": \"operation details permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Operation details\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Parameter\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Detail\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Currency\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"COP\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Integration type\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"100% API\"), \" \\u2014 the token is requested from your backend. Kajita and Kushki.js do not support this flow yet.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Additional required field\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"The \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"processor\"), \" object (\", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"name\"), \" + \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"flowType\"), \") in the token body\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Bank list query\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Not required for this flow\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Init result\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"QR code (base64 PNG) for payment from banking app\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"QR validity\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"10 minutes. After this time the QR becomes invalid and a new token and init must be generated.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Processing time\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Real time\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Cancellation\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"PATCH /transfer/v1/cancel/{token}\"), \" \\u2014 available while the transaction does not have a final status. Returns HTTP 204 No Content.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Webhook\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"No changes compared to the ACH flow\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Error codes\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"See section \", mdx(\"strong\", {\n    parentName: \"td\"\n  }, \"7. API errors\"), \" of this guide\")))), mdx(\"h2\", {\n    \"id\": \"1-check-your-processors\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#1-check-your-processors\",\n    \"aria-label\": \"1 check your processors permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"1. Check your processors\"), mdx(\"p\", null, \"This step is optional if Bre-B is your only processor, but always recommended: it will be the rule as more processors and flows are enabled. Before tokenizing, call \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Get Transfer In configuration\"), \" (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"GET /transfer/v1/config\"), \") with your public credential. The Bre-B entry comes with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"supportedFlows\"), \": copy its \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"name\"), \" and the flow \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"type\"), \" into the token\\u2019s \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"processor\"), \" object.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"{\\n  \\\"processors\\\": [\\n    { \\\"name\\\": \\\"Pse Processor\\\", \\\"currency\\\": \\\"COP\\\" },\\n    {\\n      \\\"name\\\": \\\"Bre-B Credibanco Processor\\\",\\n      \\\"currency\\\": \\\"COP\\\",\\n      \\\"supportedFlows\\\": [\\n        { \\\"type\\\": \\\"QR\\\", \\\"name\\\": \\\"QR Code\\\", \\\"description\\\": \\\"QR code payment\\\" }\\n      ]\\n    }\\n  ]\\n}\\n\")), mdx(\"h2\", {\n    \"id\": \"2-create-the-token\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#2-create-the-token\",\n    \"aria-label\": \"2 create the token permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"2. Create the token\"), mdx(\"p\", null, \"Make the token request using the same endpoint as the ACH flow. To activate the Bre-B flow, include the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"processor\"), \" object with the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"name\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"flowType\"), \" properties, copied exactly from the processor query response. You do not need to query the bank list before this step.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Required fields\")), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Field\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Type\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Description\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"amount.subtotalIva0\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Transaction amount (without VAT)\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"amount.subtotalIva\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Transaction amount (with VAT). Equal to subtotalIva0 if iva = 0\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"amount.iva\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"number\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"VAT value (0 if not applicable)\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"currency\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Currency. Must be \\u201CCOP\\u201D\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"processor.name\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"NEW required field. Must be \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"\\\"Bre-B Credibanco Processor\\\"\"), \", exactly as returned by the processor query \\u2014 no short aliases\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"processor.flowType\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"string\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"NEW required field. Must be \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"\\\"QR\\\"\"), \". It has no default value\")))), mdx(\"p\", null, \"The \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"processor\"), \" object does not allow additional properties: any other property returns \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"400\"), \".\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Optional fields\")), mdx(\"p\", null, mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"callbackUrl\"), \" \\xB7 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"userType\"), \" \\xB7 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"documentType\"), \" \\xB7 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"documentNumber\"), \" \\xB7 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"paymentDescription\"), \" \\xB7 \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"email\")), mdx(\"p\", null, \"The \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"bankId\"), \" field does not apply to this flow.\"), mdx(\"p\", null, \"If you send \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"userType\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"documentType\"), \" or \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"documentNumber\"), \", the \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"conditional rules for COP\"), \" apply \\u2014 see \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.kushki.com/co/apm/overview\"\n  }, \"How do APM payments work?\"), \".\"), mdx(CodeTabs, {\n    group: \"backend\",\n    mdxType: \"CodeTabs\"\n  }, mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-javascript\"\n  }, \"var options = {\\n  'method': 'POST',\\n  'url': 'https://api-uat.kushkipagos.com/transfer/v1/tokens',\\n  'headers': { 'Public-Merchant-Id': '', 'Content-Type': 'application/json' },\\n  body: JSON.stringify({\\n    \\\"amount\\\": { \\\"subtotalIva0\\\": 1000, \\\"subtotalIva\\\": 1000, \\\"iva\\\": 0 },\\n    \\\"currency\\\": \\\"COP\\\",\\n    \\\"processor\\\":{\\n        \\\"name\\\":\\\"Bre-B Credibanco Processor\\\",\\n        \\\"flowType\\\":\\\"QR\\\"\\n    }\\n  })\\n};\\nrequest(options, function(error, response) {\\n  var data = JSON.parse(response.body);\\n  console.log('token:', data.token);\\n});\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"payload = json.dumps({\\n  \\\"amount\\\": { \\\"subtotalIva0\\\": 1000, \\\"subtotalIva\\\": 1000, \\\"iva\\\": 0 },\\n  \\\"currency\\\": \\\"COP\\\",\\n  \\\"processor\\\":{\\n        \\\"name\\\":\\\"Bre-B Credibanco Processor\\\",\\n        \\\"flowType\\\":\\\"QR\\\"\\n    }\\n})\\nheaders = {'Public-Merchant-Id': '', 'Content-Type': 'application/json'}\\nresponse = requests.post('https://api-uat.kushkipagos.com/transfer/v1/tokens',\\n                          headers=headers, data=payload)\\nprint('token:', response.json()['token'])\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-php\"\n  }, \"$body->append(json_encode([\\n  \\\"amount\\\" => [\\\"subtotalIva0\\\" => 1000, \\\"subtotalIva\\\" => 1000, \\\"iva\\\" => 0],\\n  \\\"currency\\\" => \\\"COP\\\",\\n  \\\"processor\\\" => [\\n        \\\"name\\\" => \\\"Bre-B Credibanco Processor\\\",\\n        \\\"flowType\\\" => \\\"QR\\\"\\n    ]\\n]));\\n// POST to /transfer/v1/tokens with Public-Merchant-Id\\necho json_decode($client->getResponse()->getBody(), true)['token'];\\n\"))), mdx(\"h2\", {\n    \"id\": \"3-generate-the-qr-code\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#3-generate-the-qr-code\",\n    \"aria-label\": \"3 generate the qr code permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"3. Generate the QR code\"), mdx(\"p\", null, \"With the obtained token, initialize the transaction. Kushki returns a QR code in base64 format that you must show to the user so they can scan it from their banking app.\"), mdx(CodeTabs, {\n    group: \"backend\",\n    mdxType: \"CodeTabs\"\n  }, mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-javascript\"\n  }, \"var options = {\\n  'method': 'POST',\\n  'url': 'https://api-uat.kushkipagos.com/transfer/v1/init',\\n  'headers': { 'Private-Merchant-Id': '', 'Content-Type': 'application/json' },\\n  body: JSON.stringify({\\n    \\\"token\\\": \\\"{{token}}\\\",\\n    \\\"amount\\\": { \\\"subtotalIva\\\": 0, \\\"subtotalIva0\\\": 1000, \\\"iva\\\": 0 },\\n    // \\\"fullResponse\\\": \\\"v2\\\"  // optional \\u2014 includes the details object in the response\\n  })\\n};\\nrequest(options, function(error, response) {\\n  var data = JSON.parse(response.body);\\n  console.log('qr:', data.qr);\\n  console.log('ref:', data.transactionReference);\\n});\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"payload = json.dumps({\\n  \\\"token\\\": \\\"{{token}}\\\",\\n  \\\"amount\\\": { \\\"subtotalIva\\\": 0, \\\"subtotalIva0\\\": 1000, \\\"iva\\\": 0 },\\n  # \\\"fullResponse\\\": \\\"v2\\\"  # optional \\u2014 includes the details object in the response\\n})\\nheaders = {'Private-Merchant-Id': '', 'Content-Type': 'application/json'}\\ndata = requests.post('https://api-uat.kushkipagos.com/transfer/v1/init',\\n                      headers=headers, data=payload).json()\\nprint('qr:', data['qr'])\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-php\"\n  }, \"$body->append(json_encode([\\n  \\\"token\\\" => \\\"{{token}}\\\",\\n  \\\"amount\\\" => [\\\"subtotalIva\\\" => 0, \\\"subtotalIva0\\\" => 1000, \\\"iva\\\" => 0],\\n  // \\\"fullResponse\\\" => \\\"v2\\\"  // optional\\n]));\\n// POST to /transfer/v1/init with Private-Merchant-Id\\n$data = json_decode($client->getResponse()->getBody(), true);\\necho $data['qr'];\\n\"))), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Response example \\u2014 without fullResponse\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"{\\n  \\\"qr\\\": \\\"data:image/png;base64,iVBORw0KGgoAAAANS...\\\",\\n  \\\"transactionReference\\\": \\\"f2110170-8eec-4214-b2d0-38970d44f8e1\\\"\\n}\\n\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Response example \\u2014 with fullResponse: \\u201Cv2\\u201D\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"{\\n  \\\"qr\\\": \\\"data:image/png;base64,iVBORw0KGgoAAAANS...\\\",\\n  \\\"transactionReference\\\": \\\"f2110170-8eec-4214-b2d0-38970d44f8e1\\\",\\n  \\\"details\\\": {\\n    \\\"status\\\": \\\"initializedTransaction\\\",\\n    \\\"amount\\\": { \\\"currency\\\": \\\"COP\\\", \\\"iva\\\": 0, \\\"subtotalIva\\\": 1000, \\\"subtotalIva0\\\": 1000 },\\n    \\\"created\\\": 1784125900901,\\n    \\\"merchantId\\\": \\\"20000000106921087000\\\",\\n    \\\"merchantName\\\": \\\"My Merchant Colombia\\\"\\n  }\\n}\\n\")), mdx(\"h3\", {\n    \"id\": \"how-to-render-the-qr-field\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h3\",\n    \"href\": \"#how-to-render-the-qr-field\",\n    \"aria-label\": \"how to render the qr field permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"How to render the qr field\"), mdx(\"p\", null, \"The \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"qr\"), \" field contains a complete Data URI string (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"data:image/png;base64,...\"), \"). To show it on the web:\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-html\"\n  }, \"<img src=\\\"{qr}\\\" alt=\\\"Scan to pay\\\" width=\\\"250\\\" />\\n\")), mdx(\"p\", null, \"In native apps, decode the base64 and render the bitmap with your platform\\u2019s image component.\"), mdx(\"h2\", {\n    \"id\": \"4-show-the-qr-to-the-user-and-wait-for-payment\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#4-show-the-qr-to-the-user-and-wait-for-payment\",\n    \"aria-label\": \"4 show the qr to the user and wait for payment permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"4. Show the QR to the user and wait for payment\"), mdx(\"p\", null, \"The user scans the QR from their banking app and authorizes the payment. Kushki notifies the result asynchronously.\\nThe QR expires in 10 minutes. If the user does not scan within that time, you must generate a new token and init.\\nTo monitor the result: configure a webhook (see step 6) or query Get Status manually.\\nWhile the payment is pending, you can cancel the transaction (see step 5).\"), mdx(\"h2\", {\n    \"id\": \"5-cancel-the-transaction-optional\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#5-cancel-the-transaction-optional\",\n    \"aria-label\": \"5 cancel the transaction optional permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"5. Cancel the transaction (optional)\"), mdx(\"p\", null, \"If the user cannot complete the payment or you need to invalidate the active QR, cancel the transaction before it reaches a final status.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"When to use cancellation\"), \"\\nUse this endpoint when the user enters an incorrect amount, decides not to complete the payment, or you need to issue a new QR before the original QR expires (10 minutes validity). This is only possible if the transaction does not yet have a final status.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Endpoint\"), \"\\n\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"PATCH https://{api-url}/transfer/v1/cancel/{token}\")), mdx(\"p\", null, \"Where \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"{token}\"), \" is the token obtained in step 2.\"), mdx(Aside, {\n    type: \"info\",\n    title: \"Technical reference\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, \"For more details on the cancellation behavior, refer to the internal mapping document:\\n\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.google.com/document/d/1sjtz4S_872jMiudGpTinsK5d50xLpNpLCpJorkTReV4\"\n  }, \"Cancellation \\u2014 Technical reference\"))), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Successful response (HTTP 204 No Content)\"), \"\\nA successful cancellation returns HTTP 204 with no body in the response.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Error \\u2014 transaction with final status (HTTP 400)\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-json\"\n  }, \"{\\n  \\\"code\\\": \\\"T023\\\",\\n  \\\"message\\\": \\\"Transaction has a final status.\\\"\\n}\\n\")), mdx(\"h2\", {\n    \"id\": \"6-check-the-transaction-status\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#6-check-the-transaction-status\",\n    \"aria-label\": \"6 check the transaction status permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"6. Check the transaction status\"), mdx(\"p\", null, \"The final payment status arrives asynchronously. You can receive it in two ways:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Webhook:\"), \" Kushki automatically notifies when the payment is approved or declined. No changes compared to the ACH flow.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Get Status:\"), \" Manually query the status using the token in the path.\")), mdx(CodeTabs, {\n    group: \"backend\",\n    mdxType: \"CodeTabs\"\n  }, mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-javascript\"\n  }, \"var options = {\\n  'method': 'GET',\\n  'url': 'https://api-uat.kushkipagos.com/transfer/v1/status/{{token}}', // token from step 2\\n  'headers': { 'Private-Merchant-Id': '' }\\n};\\nrequest(options, function(error, response) {\\n  console.log(response.body);\\n});\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-python\"\n  }, \"token = '{{token}}'  # token obtained in step 2\\nurl = f'https://api-uat.kushkipagos.com/transfer/v1/status/{token}'\\nheaders = {'Private-Merchant-Id': ''}\\nresponse = requests.get(url, headers=headers)\\nprint(response.text)\\n\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-php\"\n  }, \"$token = '{{token}}';  // token from step 2\\n$request->setRequestUrl(\\\"https://api-uat.kushkipagos.com/transfer/v1/status/{$token}\\\");\\n$request->setRequestMethod('GET');\\n$request->setHeaders(['Private-Merchant-Id' => '']);\\n$client->enqueue($request)->send();\\necho $client->getResponse()->getBody();\\n\"))), mdx(Aside, {\n    type: \"info\",\n    title: \"No changes in the webhook\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, \"The webhook structure is identical to the existing ACH flow.\")), mdx(\"h2\", {\n    \"id\": \"7-api-errors\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#7-api-errors\",\n    \"aria-label\": \"7 api errors permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"7. API errors\"), mdx(\"p\", null, \"When operating with the multiprocessor flow you may receive API errors when querying processors, tokenizing, or initializing the transaction. The error response fields are \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"code\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"message\"), \".\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Endpoint\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"HTTP\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Code\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"When does it happen?\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"What should the merchant do?\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"GET /transfer/v1/config\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"500\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"E002\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Error querying the merchant configuration. Message: \\xABHa ocurrido un error inesperado.\\xBB\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Retry; if it persists, contact support.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"POST /transfer/v1/tokens\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"400\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u2014\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"The body does not meet the contract: missing required field, value outside the enumeration (\", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"processor.name\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"processor.flowType\"), \") or a property not allowed inside \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"processor\"), \".\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Fix the body according to the processor query and the contract of the chosen flow.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"POST /transfer/v1/init\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"422\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"E046\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"The token is not compatible with the resolved processor.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Check the processor query and regenerate the token with the correct processor.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"POST /transfer/v1/init\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"404\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"E049\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"The merchant has no Bre-B processor configured (no keys).\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Verify the processor configuration with Kushki.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"All\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"401\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u2014\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Invalid or missing public credential.\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Check the \", mdx(\"inlineCode\", {\n    parentName: \"td\"\n  }, \"Public-Merchant-Id\"), \".\")))), mdx(\"p\", null, \"ACH bank transfer errors are in \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.kushki.com/co/transfer-payments/error-codes\"\n  }, \"Error codes for transfers\"), \".\"), mdx(\"h2\", {\n    \"id\": \"8-test-your-integration\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#8-test-your-integration\",\n    \"aria-label\": \"8 test your integration permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"8. Test your integration\"), mdx(\"p\", null, \"The UAT environment simulates scenarios using the \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"transaction_amount\"), \" value, which corresponds to the sum of all fields in the amount object in the request (\", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"subtotalIva0\"), \" + \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"subtotalIva\"), \" + \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"iva\"), \"). For example, to activate scenario \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"10000\"), \", send \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"subtotalIva0: 5000, subtotalIva: 5000, iva: 0\"), \". If the sum does not match any value in the table, the response is generically successful without a webhook.\"), mdx(Aside, {\n    type: \"danger\",\n    title: \"Simulations only\",\n    mdxType: \"Aside\"\n  }, mdx(\"p\", null, \"These amounts are scenario identifiers in the sandbox. They have no economic meaning. Do not use them in production.\")), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"transaction_amount\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"HTTP status\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Status\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Webhook\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Note\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"10000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"201\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"SUCCESS\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Triggers \\u2192 PAID\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Happy path with webhook\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"9999\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"201\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"SUCCESS\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Does not trigger\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"The transaction remains initialized\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"11000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"500\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"ERROR\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Does not trigger\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"QR-CODE-0001\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"12000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"201\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"SUCCESS\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Triggers \\u2192 rejected\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Declined transaction\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"13000\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"\\u2014\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"TIMEOUT\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Does not trigger\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"The transaction is left initialized. Reuses the existing DELAY_MS.\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"99999999\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"400\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"ERROR\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Does not trigger\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"QR-CODE-0059 \\u2014 out of range amount\")), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Any other\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"201\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"SUCCESS\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Does not trigger\"), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"left\"\n  }, \"Generic successful response\")))), mdx(\"h2\", {\n    \"id\": \"9-prepare-your-certification\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#9-prepare-your-certification\",\n    \"aria-label\": \"9 prepare your certification permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"9. Prepare your certification\"), mdx(\"p\", null, \"Consider the following guidelines to pass the technical certification:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Amount calculations are correct (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"subtotalIva\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"subtotalIva0\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"iva\"), \").\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"processor\"), \" object is sent with \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"name: \\\"Bre-B Credibanco Processor\\\"\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"flowType: \\\"QR\\\"\"), \" in the token request.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The QR code is correctly shown to the user from the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"qr\"), \" field in the init response.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The cancellation endpoint is implemented for flows where the user does not complete the payment.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"On-screen messages are displayed according to Kushki\\u2019s responses.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"If webhook notifications are received, respond with HTTP 200.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The payment button is disabled after the first click to prevent double submission.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"All Kushki responses are saved and logged (required for support).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The Kushki logo is visible. Download it at \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://s3.amazonaws.com/kushki-cdn-production/docs/Logo+Kushki.zip\"\n  }, \"s3.amazonaws.com/kushki-cdn-production/docs/Logo+Kushki.zip\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"All required fields are sent according to the API reference.\")), mdx(\"h2\", {\n    \"id\": \"related-articles\",\n    \"style\": {\n      \"position\": \"relative\"\n    }\n  }, mdx(\"a\", {\n    parentName: \"h2\",\n    \"href\": \"#related-articles\",\n    \"aria-label\": \"related articles permalink\",\n    \"className\": \"anchor before\"\n  }, mdx(\"svg\", {\n    parentName: \"a\",\n    \"aria-hidden\": \"true\",\n    \"focusable\": \"false\",\n    \"height\": \"16\",\n    \"version\": \"1.1\",\n    \"viewBox\": \"0 0 16 16\",\n    \"width\": \"16\"\n  }, mdx(\"path\", {\n    parentName: \"svg\",\n    \"fillRule\": \"evenodd\",\n    \"d\": \"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"\n  }))), \"Related articles\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.kushki.com/co/transfer-payments/accept-a-payment\"\n  }, mdx(\"strong\", {\n    parentName: \"a\"\n  }, \"Accept transfer payments (ACH)\")), \"\\nReceive Wire Transfers\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.kushki.com/co/notifications/one-time-payments/webhook-transfer-in\"\n  }, mdx(\"strong\", {\n    parentName: \"a\"\n  }, \"Configure webhooks\")), \"\\nReceive notifications about your payment status.\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"p\", {\n    parentName: \"li\"\n  }, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://docs.google.com/document/d/1sjtz4S_872jMiudGpTinsK5d50xLpNpLCpJorkTReV4\"\n  }, mdx(\"strong\", {\n    parentName: \"a\"\n  }, \"Cancellation \\u2014 Technical reference\")), \"\\nCancellation\"))));\n}\n;\nMDXContent.isMDXComponent = true;","excerpt":"This product is in early access . Parameters, response structures and behaviors may change without prior notice.  Do not  use this version…","timeToRead":3,"tableOfContents":{"items":[{"url":"#what-your-customers-payment-experience-looks-like","title":"What your customer's payment experience looks like"},{"url":"#operation-details","title":"Operation details"},{"url":"#1-check-your-processors","title":"1. Check your processors"},{"url":"#2-create-the-token","title":"2. Create the token"},{"url":"#3-generate-the-qr-code","title":"3. Generate the QR code","items":[{"url":"#how-to-render-the-qr-field","title":"How to render the qr field"}]},{"url":"#4-show-the-qr-to-the-user-and-wait-for-payment","title":"4. Show the QR to the user and wait for payment"},{"url":"#5-cancel-the-transaction-optional","title":"5. Cancel the transaction (optional)"},{"url":"#6-check-the-transaction-status","title":"6. Check the transaction status"},{"url":"#7-api-errors","title":"7. API errors"},{"url":"#8-test-your-integration","title":"8. Test your integration"},{"url":"#9-prepare-your-certification","title":"9. Prepare your certification"},{"url":"#related-articles","title":"Related articles"}]}}},"updatedAt":"October 16, 2026","tabTitle":null}]}},"pageContext":{"country":"co","id":"2690e0e3-a970-5f4d-a569-e28fa55a627d","locale":"en","localeDateFormat":"MMMM DD, YYYY"}},"staticQueryHashes":["1632712422","2408418099","63159454"]}