{"info":{"_postman_id":"0ef54ff5-df1c-479d-bbff-81897238977c","name":"AfribaPAY API Documentation","description":"<html><head></head><body><p>AfribaPAY provides two API environments: a production endpoint for live transactions and a sandbox endpoint, which also supports real payments, allowing you to test all available methods within your applications.</p>\n<h3 id=\"payment-api-overview\">Payment API Overview</h3>\n<p>The AfribaPAY API allows merchants to easily integrate payment capabilities into their systems. It supports key operations such as transaction processing, querying payment statuses, and receiving notifications on transaction updates. This ensures smooth and efficient payment flows, enhancing the overall user experience in your applications.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"18594422","collectionId":"0ef54ff5-df1c-479d-bbff-81897238977c","publishedId":"2sAXjSz8sm","public":true,"customColor":{"top-bar":"f9f9f9","right-sidebar":"f9f9f9","highlight":"E90E2B"},"publishDate":"2024-09-24T20:08:56.000Z"},"item":[{"name":"Access TOKEN","item":[{"name":"TOKEN","id":"1726f41e-ce3e-4437-8b22-6e9c7465e26f","protocolProfileBehavior":{"disableBodyPruning":true,"protocolVersion":"auto","followOriginalHttpMethod":true,"followAuthorizationHeader":true},"request":{"auth":{"type":"basic","basic":{"password":"Rf9wcMcA5w9v1yY7","username":"8a52bc2a-bba7-46c1-958a-f74ade6a7a0e"},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://api-sandbox.afribapay.com/v1/token","description":"<p>You can obtain your API user (<strong>username</strong>) and API key (<strong>password</strong>) from your AfribaPAY merchant account or the email we sent you. Please note that API keys for the Sandbox environment are valid only in the Sandbox, while Production keys are exclusively valid for the Production environment.</p>\n<p>The generated token will remain valid for all supported countries until it expires, typically within 24 hours.</p>\n","urlObject":{"path":["v1","token"],"host":["https://api-sandbox.afribapay.com"],"query":[],"variable":[]}},"response":[{"id":"a3a3a2e3-4ba8-4683-b2b7-512445a3c335","name":"TOKEN","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Basic base64(api_user:api_key) //  Api_user and Api_key from your merchand account","type":"text"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://api-sandbox.afribapay.com/v1/token"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"request_id\": \"24122604123627632385460792477073\",\n    \"request_time\": 1735230936.189682,\n    \"request_ip\": \"100.100.000.237\",\n    \"data\": {\n        \"access_token\": \"eyJhbGciOiJzaGEyNTYiLCJ0eXBlIjoiSldUIiwiaWF0IjoiMjAyNC0xMi0yNiAxNjozNTozNiIsImV4cCI6IjIwMjQtMTItMjcgMTc6MzU6MzYiLCJuYW1lIjoiQVBNMzE5MjM2MTMiLCJhcGlfa2V5Ijoic2tfTkEyNHhoTmtvN045NlhKUVp6QmQzMzdXMzNsNUZmNXE0alN2MTkwN20ifWQwYjI5NzcyY2I3MmI1YjlhMDkwYTVlN2IyMjg2NGQ0OWYzZWE3MjY5OGQ4N2E0OGEyYzUxM2MzNTk0Njc1ZTc=\",\n        \"token_type\": \"bearer\",\n        \"expires_in\": 90000\n    }\n}"}],"_postman_id":"1726f41e-ce3e-4437-8b22-6e9c7465e26f"}],"id":"e81c97f9-65fb-4665-966b-7f98f501d2b8","description":"<p>All transactions conducted on AfribaPAY require a valid security token to identify and connect the client to our APIs.</p>\n","auth":{"type":"noauth","isInherited":false},"event":[{"listen":"prerequest","script":{"id":"31ba264a-c717-485e-a4fb-44b10ca3ef5e","type":"text/javascript","packages":{},"exec":[""]}},{"listen":"test","script":{"id":"85ec8b08-515a-48c7-a955-a127ff84277a","type":"text/javascript","packages":{},"exec":[""]}}],"_postman_id":"e81c97f9-65fb-4665-966b-7f98f501d2b8"},{"name":"PAYMENTS","item":[{"name":"AfribaPAY-IN","item":[{"name":"PAYIN","event":[{"listen":"test","script":{"id":"6cd60913-b4fd-4399-9587-85df354d1c67","exec":["",""],"type":"text/javascript","packages":{}}}],"id":"d41c0241-14da-4bdd-bc26-3ed3fededa1f","protocolProfileBehavior":{"disableBodyPruning":true,"followOriginalHttpMethod":true,"followAuthorizationHeader":true,"disabledSystemHeaders":{}},"request":{"auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"method":"POST","header":[{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"}],"body":{"mode":"raw","raw":"{\r\n\"operator\":\"orange\",\r\n\"country\":\"CM\",\r\n\"phone_number\":\"656000000\",\r\n\"amount\":100,\r\n\"currency\":\"XAF\",\r\n\"order_id\":\"order-1775293718\",\r\n\"merchant_key\": \"1\",\r\n\"reference_id\":\"Your reference\",\r\n\"lang\":\"fr\",\r\n\"return_url\" : \"https://example.com/success\",\r\n\"cancel_url\" : \"https://example.com/cancel\",\r\n\"notify_url\" : \"https://example.com/notification_ipn_webhook\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://api-sandbox.afribapay.com/v1/pay/payin","description":"<p>AfribaPAY-IN or PAYIN uses the POST method to initiate the process of receiving payments or deposits. In this process, a request is sent to the AfribaPAY API with the necessary details (such as the payer’s mobile wallet information, amount, and currency), which then processes the transaction, allowing the user to fund an account or complete a payment through mobile money platforms.</p>\n","urlObject":{"path":["v1","pay","payin"],"host":["https://api-sandbox.afribapay.com"],"query":[],"variable":[]}},"response":[{"id":"ce7d4a89-1df4-4186-9e56-e44cab7eff3c","name":"PAYIN","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"}],"body":{"mode":"raw","raw":"{\r\n\"operator\":\"orange\",\r\n\"country\":\"CM\",\r\n\"phone_number\":\"656000000\",\r\n\"amount\":100,\r\n\"currency\":\"XAF\",\r\n\"order_id\":\"order-1726027212\",\r\n\"merchant_key\": \"KS9n3tAgKeBpd50csSozsUXLK\",\r\n\"reference_id\":\"ref-Banana-House\",\r\n\"lang\":\"fr\",\r\n\"return_url\" : \"https://example.com/success\",\r\n\"cancel_url\" : \"https://example.com/cancel\",\r\n\"notify_url\" : \"https://example.com/notification_ipn_webhook\"\r\n}","options":{"raw":{"language":"json"}}},"url":"api-sandbox.afribapay.com/v1/pay/payin"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"request_id\": \"653810413592270502278287982745\",\n    \"request_time\": 1725999303.60694,\n    \"request_ip\": \"180.126.205.237\",\n    \"data\": {\n        \"transaction_id\": \"PIM241023212688248577\",\n        \"order_id\": \"order-1725999299\",\n        \"operator\": \"orange\",\n        \"phone_number\": \"237656000000\",\n        \"amount\": 100,\n        \"taxes\": 1,\n        \"fees\": 2,\n        \"fees_taxes_ttc\": 3,\n        \"amount_total\": 103,\n        \"currency\": \"XAF\",\n        \"status\": \"PENDING\",\n        \"country\": \"CM\",\n        \"lang\": \"fr\",\n        \"reference_id\": \"Your reference\",\n        \"provider_id\": \"241023212688248577\",\n        \"date_created\": \"2024-09-10 21:15:03\"\n    }\n}"}],"_postman_id":"d41c0241-14da-4bdd-bc26-3ed3fededa1f"},{"name":"PAYIN with OPT","event":[{"listen":"test","script":{"id":"6cd60913-b4fd-4399-9587-85df354d1c67","exec":["pm.test(\"Response status code is 200\", function () {","  pm.response.to.have.status(200);","});","","","pm.test(\"Response time is less than 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});","","","pm.test(\"Data object structure is valid\", function () {","    const responseData = pm.response.json();","    ","    pm.expect(responseData).to.be.an('object');","    pm.expect(responseData.data).to.exist.and.to.be.an('object');","    pm.expect(responseData.data.transaction_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.order_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.operator).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.phone_number).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.amount).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.taxes).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.fees).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.fees_taxes_ttc).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.amount_total).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.currency).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.status).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.country).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.lang).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.reference_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.provider_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.date_created).to.exist.and.to.be.a('string');","});","","","pm.test(\"All required fields are present in the 'data' object\", function () {","    const responseData = pm.response.json();","    ","    pm.expect(responseData.data).to.be.an('object');","    pm.expect(responseData.data).to.include.all.keys(","        'transaction_id', 'order_id', 'operator', 'phone_number',","        'amount', 'taxes', 'fees', 'fees_taxes_ttc', 'amount_total',","        'currency', 'status', 'country', 'lang', 'reference_id',","        'provider_id', 'date_created'","    );","});","","","pm.test(\"Request time is a non-negative integer and in a valid timestamp format\", function () {","    const responseData = pm.response.json();","    ","    pm.expect(responseData).to.be.an('object');","    pm.expect(responseData.request_time).to.be.a('number').and.to.be.at.least(0, \"Request time should be non-negative\");","    pm.expect(responseData.request_time).to.satisfy(time => new Date(time).getTime() > 0, \"Request time should be in a valid timestamp format\");","});",""],"type":"text/javascript","packages":{}}}],"id":"5e40282d-149c-4d49-9191-a0fda6bba7ec","protocolProfileBehavior":{"disableBodyPruning":true,"followOriginalHttpMethod":true,"followAuthorizationHeader":true},"request":{"auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n\"operator\":\"orange\",\r\n\"otp_code\":\"123456\",\r\n\"country\":\"SN\",\r\n\"phone_number\":\"7723400000\",\r\n\"amount\":100,\r\n\"currency\":\"XOF\",\r\n\"order_id\":\"order-1775293718\",\r\n\"merchant_key\": \"KS9n3tAgKeBpd50csSozsUXLK\",\r\n\"reference_id\":\"Your reference\",\r\n\"lang\":\"fr\",\r\n\"return_url\" : \"https://example.com/success\",\r\n\"cancel_url\" : \"https://example.com/cancel\",\r\n\"notify_url\" : \"https://example.com/notification_ipn_webhook\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://api-sandbox.afribapay.com/v1/pay/payin","description":"<p>AfribaPAY-IN or PAYIN uses the POST method to initiate the process of receiving payments or deposits. In this process, a request is sent to the AfribaPAY API with the necessary details (such as the payer’s mobile wallet information, <strong>otp_code</strong> if required, amount, and currency), which then processes the transaction, allowing the user to fund an account or complete a payment through mobile money platforms.</p>\n<p>Orange in some countries requires the OTP code before processing any transactions. Please refer to the list below for details.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Country</strong></th>\n<th><strong>Country Code</strong></th>\n<th><strong>Operator</strong></th>\n<th><strong>otp_code</strong></th>\n<th><strong>Phone Code</strong></th>\n<th><strong>Payment Method</strong></th>\n<th><strong>Payin</strong></th>\n<th><strong>Payout</strong></th>\n<th><strong>Available</strong></th>\n<th><strong>Currency</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Côte d'Ivoire</td>\n<td>CI</td>\n<td>Orange</td>\n<td>Required</td>\n<td>+225</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Burkina Faso</td>\n<td>BF</td>\n<td>Orange</td>\n<td>Required</td>\n<td>+226</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Mali</td>\n<td>ML</td>\n<td>Orange</td>\n<td>No</td>\n<td>+223</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Senegal</td>\n<td>SN</td>\n<td>Orange</td>\n<td>Required</td>\n<td>+221</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Guinea</td>\n<td>GN</td>\n<td>Orange</td>\n<td>Required</td>\n<td>+224</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>GNF</td>\n</tr>\n<tr>\n<td>Cameroon</td>\n<td>CM</td>\n<td>Orange</td>\n<td>No</td>\n<td>+237</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XAF</td>\n</tr>\n<tr>\n<td>DR Congo</td>\n<td>CD</td>\n<td>Orange</td>\n<td>No</td>\n<td>+243</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>CDF</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["v1","pay","payin"],"host":["https://api-sandbox.afribapay.com"],"query":[],"variable":[]}},"response":[{"id":"9ce7cb90-42f5-41c4-9feb-1c76d706470b","name":"PAYIN With OTP","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"}],"body":{"mode":"raw","raw":"{\r\n\"operator\":\"orange\",\r\n\"otp_code\":\"123456\",\r\n\"country\":\"SN\",\r\n\"phone_number\":\"773400000\",\r\n\"amount\":100,\r\n\"currency\":\"XOF\",\r\n\"order_id\":\"order-1729006692\",\r\n\"merchant_key\": \"KS9n3tAgKeBpd50csSozsUXLK\",\r\n\"reference_id\":\"ref-Banana-House\",\r\n\"lang\":\"fr\",\r\n\"return_url\" : \"https://example.com/success\",\r\n\"cancel_url\" : \"https://example.com/cancel\",\r\n\"notify_url\" : \"https://example.com/notification_ipn_webhook\"\r\n}","options":{"raw":{"language":"json"}}},"url":"api-sandbox.afribapay.com/v1/pay/payin"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"request_id\": \"450740137233435197455807862801\",\n    \"request_time\": 1726384058.946038,\n    \"request_ip\": \"180.126.205.237\",\n    \"data\": {\n        \"transaction_id\": \"PIM241556273854362876\",\n        \"order_id\": \"order-1726384055\",\n        \"operator\": \"orange\",\n        \"phone_number\": \"221770000000\",\n        \"amount\": 97,\n        \"taxes\": 1,\n        \"fees\": 2,\n        \"fees_taxes_ttc\": 3,\n        \"amount_total\": 100,\n        \"currency\": \"XOF\",\n        \"status\": \"PENDING\",\n        \"country\": \"SN\",\n        \"lang\": \"fr\",\n        \"reference_id\": \"Your reference\",\n        \"provider_id\": \"241556273854362876\",\n        \"date_created\": \"2024-09-15 08:07:38\"\n    }\n}"}],"_postman_id":"5e40282d-149c-4d49-9191-a0fda6bba7ec"},{"name":"PAYIN Wave","event":[{"listen":"test","script":{"id":"6cd60913-b4fd-4399-9587-85df354d1c67","exec":["pm.test(\"Response status code is 200\", function () {","  pm.response.to.have.status(200);","});","","","pm.test(\"Response time is less than 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});","","","pm.test(\"Data object structure is valid\", function () {","    const responseData = pm.response.json();","    ","    pm.expect(responseData).to.be.an('object');","    pm.expect(responseData.data).to.exist.and.to.be.an('object');","    pm.expect(responseData.data.transaction_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.order_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.operator).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.phone_number).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.amount).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.taxes).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.fees).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.fees_taxes_ttc).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.amount_total).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.currency).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.status).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.country).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.lang).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.reference_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.provider_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.date_created).to.exist.and.to.be.a('string');","});","","","pm.test(\"All required fields are present in the 'data' object\", function () {","    const responseData = pm.response.json();","    ","    pm.expect(responseData.data).to.be.an('object');","    pm.expect(responseData.data).to.include.all.keys(","        'transaction_id', 'order_id', 'operator', 'phone_number',","        'amount', 'taxes', 'fees', 'fees_taxes_ttc', 'amount_total',","        'currency', 'status', 'country', 'lang', 'reference_id',","        'provider_id', 'date_created'","    );","});","","","pm.test(\"Request time is a non-negative integer and in a valid timestamp format\", function () {","    const responseData = pm.response.json();","    ","    pm.expect(responseData).to.be.an('object');","    pm.expect(responseData.request_time).to.be.a('number').and.to.be.at.least(0, \"Request time should be non-negative\");","    pm.expect(responseData.request_time).to.satisfy(time => new Date(time).getTime() > 0, \"Request time should be in a valid timestamp format\");","});",""],"type":"text/javascript","packages":{}}}],"id":"bb4ee0e4-9a4d-40b7-9a0a-524dbf247840","protocolProfileBehavior":{"disableBodyPruning":true,"followOriginalHttpMethod":true,"followAuthorizationHeader":true},"request":{"auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n\"operator\":\"wave\",\r\n\"country\":\"SN\",\r\n\"phone_number\":\"770000000\",\r\n\"amount\":100,\r\n\"currency\":\"XOF\",\r\n\"order_id\":\"order-1775293718\",\r\n\"merchant_key\": \"1\",\r\n\"reference_id\":\"Your reference\",\r\n\"lang\":\"fr\",\r\n\"return_url\" : \"https://example.com/success\",\r\n\"cancel_url\" : \"https://example.com/cancel\",\r\n\"notify_url\" : \"https://example.com/notification_ipn_webhook\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://api-sandbox.afribapay.com/v1/pay/payin","description":"<p>With Wave Money, using our API, you need to redirect your customers to the payment link provided by the AfribaPAY API (<strong>provider_link</strong>), allowing them to scan and pay directly through their application, as shown in the example below.</p>\n","urlObject":{"path":["v1","pay","payin"],"host":["https://api-sandbox.afribapay.com"],"query":[],"variable":[]}},"response":[{"id":"ff095692-9b7e-4dc8-afd7-70ce8bfdeb1d","name":"PAYIN-Wave","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"}],"body":{"mode":"raw","raw":"{\r\n\"operator\":\"wave\",\r\n\"country\":\"SN\",\r\n\"phone_number\":\"770000000\",\r\n\"amount\":100,\r\n\"currency\":\"XOF\",\r\n\"order_id\":\"order-1729006692\",\r\n\"merchant_key\": \"KS9n3tAgKeBpd50csSozsUXLK\",\r\n\"reference_id\":\"ref-Banana-House\",\r\n\"lang\":\"fr\",\r\n\"return_url\" : \"https://example.com/success\",\r\n\"cancel_url\" : \"https://example.com/cancel\",\r\n\"notify_url\" : \"https://example.com/notification_ipn_webhook\"\r\n}","options":{"raw":{"language":"json"}}},"url":"api-sandbox.afribapay.com/v1/pay/payin"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"request_id\": \"107875321646083277270959605666\",\n    \"request_time\": 1726238913.176919,\n    \"request_ip\": \"180.126.205.237\",\n    \"data\": {\n        \"transaction_id\": \"PIM241315378778438124\",\n        \"order_id\": \"order-1726238911\",\n        \"operator\": \"wave\",\n        \"phone_number\": \"2217700000000\",\n        \"amount\": 97,\n        \"taxes\": 1,\n        \"fees\": 2,\n        \"fees_taxes_ttc\": 3,\n        \"amount_total\": 100,\n        \"currency\": \"XOF\",\n        \"status\": \"PENDING\",\n        \"country\": \"SN\",\n        \"lang\": \"fr\",\n        \"reference_id\": \"Your reference\",\n        \"provider_id\": \"241315378778438124\",\n        \"provider_link\": \"https://pay.wave.com/c/cos-1rjj40wkr11pa?a=100&c=XOF&m=AfribaPAY%20%2A%20OTH%20\",\n        \"date_created\": \"2024-09-13 15:48:33\"\n    }\n}"}],"_postman_id":"bb4ee0e4-9a4d-40b7-9a0a-524dbf247840"}],"id":"38cb9212-ec86-4db5-88af-16653f608a0a","description":"<p>AfribaPAY-IN or AfribaPAY Mobile Money PAYIN refers to the process of receiving payments or deposits from customers via mobile money platforms. It enables users to fund an account or make payments using their mobile wallets.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Type</th>\n<th>Amount</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Min</td>\n<td>100</td>\n</tr>\n<tr>\n<td>Max</td>\n<td>2 000 000</td>\n</tr>\n</tbody>\n</table>\n</div>","auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"event":[{"listen":"prerequest","script":{"id":"f8f8d37c-72b6-49f7-a775-576b1029e379","type":"text/javascript","packages":{},"exec":[""]}},{"listen":"test","script":{"id":"cb2feecc-d722-4a21-822d-7269c1475437","type":"text/javascript","packages":{},"exec":[""]}}],"_postman_id":"38cb9212-ec86-4db5-88af-16653f608a0a"},{"name":"AfribaPAY-IN-WALLET","item":[{"name":"OTP For Wallet","event":[{"listen":"test","script":{"id":"6cd60913-b4fd-4399-9587-85df354d1c67","exec":["pm.test(\"Response status code is 200\", function () {","  pm.response.to.have.status(200);","});","","","pm.test(\"Response time is less than 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});","","","pm.test(\"Data object structure is valid\", function () {","    const responseData = pm.response.json();","    ","    pm.expect(responseData).to.be.an('object');","    pm.expect(responseData.data).to.exist.and.to.be.an('object');","    pm.expect(responseData.data.transaction_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.order_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.operator).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.phone_number).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.amount).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.taxes).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.fees).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.fees_taxes_ttc).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.amount_total).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.currency).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.status).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.country).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.lang).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.reference_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.provider_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.date_created).to.exist.and.to.be.a('string');","});","","","pm.test(\"All required fields are present in the 'data' object\", function () {","    const responseData = pm.response.json();","    ","    pm.expect(responseData.data).to.be.an('object');","    pm.expect(responseData.data).to.include.all.keys(","        'transaction_id', 'order_id', 'operator', 'phone_number',","        'amount', 'taxes', 'fees', 'fees_taxes_ttc', 'amount_total',","        'currency', 'status', 'country', 'lang', 'reference_id',","        'provider_id', 'date_created'","    );","});","","","pm.test(\"Request time is a non-negative integer and in a valid timestamp format\", function () {","    const responseData = pm.response.json();","    ","    pm.expect(responseData).to.be.an('object');","    pm.expect(responseData.request_time).to.be.a('number').and.to.be.at.least(0, \"Request time should be non-negative\");","    pm.expect(responseData.request_time).to.satisfy(time => new Date(time).getTime() > 0, \"Request time should be in a valid timestamp format\");","});",""],"type":"text/javascript","packages":{}}}],"id":"d39da1da-2a1f-4fa8-b496-9a27919ac491","protocolProfileBehavior":{"disableBodyPruning":true,"followOriginalHttpMethod":true,"followAuthorizationHeader":true},"request":{"auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n\"operator\":\"wligdicash\",\r\n\"country\":\"BF\",\r\n\"phone_number\":\"04090000\",\r\n\"amount\":100,\r\n\"currency\":\"XOF\",\r\n\"merchant_key\": \"1\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://api-sandbox.afribapay.com/v1/pay/otp","description":"<p>To access our wallet, you must first generate an OTP code following the example below. The customer will receive the OTP via SMS (or through another pre-configured notification channel), and that OTP is then used to complete the payin.</p>\n","urlObject":{"path":["v1","pay","otp"],"host":["https://api-sandbox.afribapay.com"],"query":[],"variable":[]}},"response":[{"id":"0bc28727-024d-4e9d-8a29-0b70dffad4c7","name":"OTP","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"}],"body":{"mode":"raw","raw":"{\r\n\"operator\":\"wligdicash\", // Same value should be used in the payin\r\n\"country\":\"BF\", // Same value should be used in the payin\r\n\"phone_number\":\"04090000\", // Same value should be used in the payin\r\n\"amount\":100, // Same value should be used in the payin\r\n\"currency\":\"XOF\", // Same value should be used in the payin\r\n\"merchant_key\": \"mk_sandbox_8ORoB612502220\"\r\n}","options":{"raw":{"language":"json"}}},"url":"api-sandbox.afribapay.com/v1/pay/otp"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"request_id\": \"25022204023181269512\",\n    \"request_time\": 1740243571.0784,\n    \"request_ip\": \"107.181.178.87\",\n    \"data\": {\n        \"message\": \"OTP sent. Please check your phone.\",\n        \"status\": \"SUCCESS\",\n        \"code\": 200\n    }\n}"}],"_postman_id":"d39da1da-2a1f-4fa8-b496-9a27919ac491"},{"name":"PAYIN with Wallet OTP","event":[{"listen":"test","script":{"id":"6cd60913-b4fd-4399-9587-85df354d1c67","exec":["pm.test(\"Response status code is 200\", function () {","  pm.response.to.have.status(200);","});","","","pm.test(\"Response time is less than 200ms\", function () {","  pm.expect(pm.response.responseTime).to.be.below(200);","});","","","pm.test(\"Data object structure is valid\", function () {","    const responseData = pm.response.json();","    ","    pm.expect(responseData).to.be.an('object');","    pm.expect(responseData.data).to.exist.and.to.be.an('object');","    pm.expect(responseData.data.transaction_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.order_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.operator).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.phone_number).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.amount).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.taxes).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.fees).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.fees_taxes_ttc).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.amount_total).to.exist.and.to.be.a('number');","    pm.expect(responseData.data.currency).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.status).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.country).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.lang).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.reference_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.provider_id).to.exist.and.to.be.a('string');","    pm.expect(responseData.data.date_created).to.exist.and.to.be.a('string');","});","","","pm.test(\"All required fields are present in the 'data' object\", function () {","    const responseData = pm.response.json();","    ","    pm.expect(responseData.data).to.be.an('object');","    pm.expect(responseData.data).to.include.all.keys(","        'transaction_id', 'order_id', 'operator', 'phone_number',","        'amount', 'taxes', 'fees', 'fees_taxes_ttc', 'amount_total',","        'currency', 'status', 'country', 'lang', 'reference_id',","        'provider_id', 'date_created'","    );","});","","","pm.test(\"Request time is a non-negative integer and in a valid timestamp format\", function () {","    const responseData = pm.response.json();","    ","    pm.expect(responseData).to.be.an('object');","    pm.expect(responseData.request_time).to.be.a('number').and.to.be.at.least(0, \"Request time should be non-negative\");","    pm.expect(responseData.request_time).to.satisfy(time => new Date(time).getTime() > 0, \"Request time should be in a valid timestamp format\");","});",""],"type":"text/javascript","packages":{}}}],"id":"055b52c2-057e-4068-a87f-c8113447956c","protocolProfileBehavior":{"disableBodyPruning":true,"followOriginalHttpMethod":true,"followAuthorizationHeader":true},"request":{"auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n\"operator\":\"wligdicash\",\r\n\"country\":\"BF\",\r\n\"phone_number\":\"04097777\",\r\n\"otp_code\":\"123456\",\r\n\"amount\":100,\r\n\"currency\":\"XOF\",\r\n\"order_id\":\"order-1775293718\",\r\n\"merchant_key\": \"mk_sandbox_8ORoB612502220\",\r\n\"reference_id\":\"Payment with Wallet using OTP\",\r\n\"lang\":\"fr\",\r\n\"return_url\" : \"https://example.com/success\",\r\n\"cancel_url\" : \"https://example.com/cancel\",\r\n\"notify_url\" : \"https://example.com/notification_ipn_webhook\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://api-sandbox.afribapay.com/v1/pay/payin","description":"<p>Once the OTP is generated, you can use it to complete the payin, as demonstrated in the example below.</p>\n","urlObject":{"path":["v1","pay","payin"],"host":["https://api-sandbox.afribapay.com"],"query":[],"variable":[]}},"response":[{"id":"564258a7-5c94-406d-b1ac-a840808d1523","name":"Wallet","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"}],"body":{"mode":"raw","raw":"{\r\n\"operator\":\"wligdicash\", //Should be the exact same while getting the OTP endpoint /v1/pay/otp\r\n\"country\":\"BF\", //Should be the exact same while getting the OTP endpoint /v1/pay/otp\r\n\"phone_number\":\"04090000\", //Should be the exact same while getting the OTP endpoint /v1/pay/otp\r\n\"otp_code\":\"123456\", //obtain from endpoint /v1/pay/otp\r\n\"amount\":100,  //Should be the exact same amount while getting the OTP endpoint /v1/pay/otp\r\n\"currency\":\"XOF\", //Should be the exact same while getting the OTP endpoint /v1/pay/otp\r\n\"order_id\":\"order-1740244438\",\r\n\"merchant_key\": \"mk_sandbox_8ORoB612502220\",\r\n\"reference_id\":\"Payment with Wallet using OTP\",\r\n\"lang\":\"fr\",\r\n\"return_url\" : \"https://example.com/success\",\r\n\"cancel_url\" : \"https://example.com/cancel\",\r\n\"notify_url\" : \"https://example.com/notification_ipn_webhook\"\r\n}","options":{"raw":{"language":"json"}}},"url":"api-sandbox.afribapay.com/v1/pay/payin"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"request_id\": \"450740137233435197455807862801\",\n    \"request_time\": 1726384058.946038,\n    \"request_ip\": \"180.126.205.237\",\n    \"data\": {\n        \"transaction_id\": \"PIM241556273854362876\",\n        \"order_id\": \"order-1726384055\",\n        \"operator\": \"wallet-ligdicash\",\n        \"phone_number\": \"22604090000\",\n        \"amount\": 99,\n        \"taxes\": 0,\n        \"fees\": 1,\n        \"fees_taxes_ttc\": 1,\n        \"amount_total\": 100,\n        \"currency\": \"XOF\",\n        \"status\": \"PENDING\",\n        \"country\": \"BF\",\n        \"lang\": \"fr\",\n        \"reference_id\": \"Payment with Wallet using OTP\",\n        \"provider_id\": \"241556273854362876\",\n        \"date_created\": \"2025-02-22 08:07:38\"\n    }\n}"}],"_postman_id":"055b52c2-057e-4068-a87f-c8113447956c"}],"id":"a054be90-ee5e-44f9-8374-0bbf89d6c869","description":"<p><strong>AfribaPAY-IN</strong> supports partner <strong>wallets</strong> in several countries, regardless of the mobile carrier used. This capability allows users to fund accounts or make payments using mobile wallets that aren't tied to any specific phone operator.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Type</th>\n<th>Amount</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Min</td>\n<td>100</td>\n</tr>\n<tr>\n<td>Max</td>\n<td>2 000 000</td>\n</tr>\n</tbody>\n</table>\n</div>","auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"event":[{"listen":"prerequest","script":{"id":"f8f8d37c-72b6-49f7-a775-576b1029e379","type":"text/javascript","packages":{},"exec":[""]}},{"listen":"test","script":{"id":"cb2feecc-d722-4a21-822d-7269c1475437","type":"text/javascript","packages":{},"exec":[""]}}],"_postman_id":"a054be90-ee5e-44f9-8374-0bbf89d6c869"},{"name":"AfribaPAY-OUT","item":[{"name":"PAYOUT","event":[{"listen":"test","script":{"id":"cc1f143e-ae89-431d-9469-ee534550aa27","exec":[""],"type":"text/javascript","packages":{}}}],"id":"12de0d95-0e0e-4555-95a7-b936ceff0847","protocolProfileBehavior":{"disableBodyPruning":true,"followOriginalHttpMethod":true},"request":{"auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"method":"POST","header":[],"body":{"mode":"raw","raw":"{\r\n\"operator\":\"wave\",\r\n\"country\":\"SN\",\r\n\"phone_number\":\"770000000\",\r\n\"amount\":100,\r\n\"currency\":\"X0F\",\r\n\"order_id\":\"payout-1775293718\",\r\n\"merchant_key\": \"1\",\r\n\"reference_id\":\"Your reference\",\r\n\"lang\":\"en\",\r\n\"return_url\" : \"https://example.com/success\",\r\n\"cancel_url\" : \"https://example.com/cancel\",\r\n\"notify_url\" : \"https://example.com/notification_ipn_webhook\"\r\n}","options":{"raw":{"language":"json"}}},"url":"https://api-payout-sandbox.afribapay.com/v1/pay/payout","description":"<p>AfribaPAY-OUT or PAYOUT uses the POST method to initiate the process of disbursing funds. This typically involves sending a request with the necessary payment details (such as the recipient's mobile wallet or bank account information, amount, and currency) to the AfribaPAY API, which then processes the transaction and transfers the funds to the designated recipient.</p>\n","urlObject":{"path":["v1","pay","payout"],"host":["https://api-payout-sandbox.afribapay.com"],"query":[],"variable":[]}},"response":[{"id":"7fc22d1c-469a-472e-bd28-8aaffb5a1d82","name":"PAYOUT","originalRequest":{"method":"POST","header":[{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n\"operator\":\"orange\",\r\n\"country\":\"CM\",\r\n\"phone_number\":\"660000001\",\r\n\"amount\":150,\r\n\"currency\":\"XAF\",\r\n\"order_id\":\"payout-1726027213\",\r\n\"merchant_key\": \"KS9n3tAgKeBpd50csSozsUXLK\",\r\n\"reference_id\":\"ref1726027213\",\r\n\"lang\":\"en\",\r\n\"return_url\" : \"https://example.com/success\",\r\n\"cancel_url\" : \"https://example.com/cancel\",\r\n\"notify_url\" : \"https://example.com/notification_ipn_webhook\"\r\n}","options":{"raw":{"language":"json"}}},"url":"api-payout-sandbox.afribapay.com/v1/pay/payout"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"request_id\": \"24121603125086346805948144210917\",\n    \"request_time\": 1734363290.804397,\n    \"request_ip\": \"199.100.205.000\",\n    \"data\": {\n        \"status\": \"PENDING\",\n        \"transaction_id\": \"POM241216153449831031\",\n        \"order_id\": \"Test-oct-20241734363289\",\n        \"operator\": \"wave\",\n        \"phone_number\": \"221770000000\",\n        \"original_amount\": 100,\n        \"amount\": 100,\n        \"taxes\": 0.18,\n        \"fees\": 1,\n        \"fees_taxes_ttc\": 1.18,\n        \"amount_total\": 102,\n        \"currency\": \"XOF\",\n        \"country\": \"SN\",\n        \"lang\": \"en\",\n        \"reference_id\": \"Your reference\",\n        \"provider_id\": \"pt-1tf343fvr11nt\",\n        \"date_created\": \"2024-12-16 15:34:50\"\n    }\n}"}],"_postman_id":"12de0d95-0e0e-4555-95a7-b936ceff0847"}],"id":"2b087a5b-6c9c-4868-904b-d3f75e40ddf5","description":"<p>AfribaPAY-OUT or PAYOUT refers to the process of disbursing funds from an account to customers or beneficiaries through various payment methods, including mobile money platforms, bank transfers, or other electronic payment systems. It allows businesses or individuals to send money to recipients' mobile wallets or bank accounts efficiently and securely.</p>\n","auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"event":[{"listen":"prerequest","script":{"id":"7735c417-4bd5-42fa-8bea-6c2e1d650c86","type":"text/javascript","packages":{},"exec":[""]}},{"listen":"test","script":{"id":"8186d7cd-fb93-4b08-b7dc-7eef9568ced4","type":"text/javascript","packages":{},"exec":[""]}}],"_postman_id":"2b087a5b-6c9c-4868-904b-d3f75e40ddf5"}],"id":"fa0867ad-33f5-44b4-b3fa-1fc5a1832fac","description":"<p>The request body must be in JSON format and should include the following properties. These properties are applicable for AfribaPAY-IN (PAYIN), AfribaPAY-OUT (PAYOUT), and AfribaPAY-BANK (Bank Transfer).</p>\n<p>Here is the rewritten table structure using Markdown:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Type</th>\n<th>Required</th>\n<th>Description</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>operator</code></td>\n<td>Yes</td>\n<td>Mobile money operator like Wave, Orange, MTN, Moov, etc.</td>\n</tr>\n<tr>\n<td><code>phone_number</code></td>\n<td>Yes</td>\n<td>Customer's phone number.</td>\n</tr>\n<tr>\n<td><code>otp_code</code></td>\n<td>No</td>\n<td>OTP code for payment validation. Minimum 4 characters, maximum 6 characters (depending on the payment method and the country).</td>\n</tr>\n<tr>\n<td><code>country</code></td>\n<td>Yes</td>\n<td>Country of the payment (CI, BF, ML, SN, TG, GN, CM, BJ, CD, NE, TD, CG, CF...)</td>\n</tr>\n<tr>\n<td><code>amount</code></td>\n<td>Yes</td>\n<td>Payment amount (Min of 100 XOF and max of 2.500.000 XOF).</td>\n</tr>\n<tr>\n<td><code>currency</code></td>\n<td>Yes</td>\n<td>Payment currency. Possible values are: XOF, XAF, GNF, CDF.</td>\n</tr>\n<tr>\n<td><code>merchant_key</code></td>\n<td>Yes</td>\n<td>This can be obtained from your merchant account along with the API User and API Key.</td>\n</tr>\n<tr>\n<td><code>order_id</code></td>\n<td>No</td>\n<td>Merchant Order ID (must be a unique numeric or alphanumeric value with no space for each transaction).</td>\n</tr>\n<tr>\n<td><code>reference_id</code></td>\n<td>No</td>\n<td>An optional reference ID for your payment.</td>\n</tr>\n<tr>\n<td><code>notify_url</code></td>\n<td>No</td>\n<td>The notification URL is used by the web payment backend to inform the merchant's backend about the status of a payment transaction. This notification is only triggered when the payment process is confirmed and ends with a 'SUCCESS' or 'FAILED' status.</td>\n</tr>\n<tr>\n<td><code>return_url</code></td>\n<td>No</td>\n<td>The URL where the client will be redirected when the payment is successful and the client decides to return to your website.</td>\n</tr>\n<tr>\n<td><code>cancel_url</code></td>\n<td>No</td>\n<td>The URL where the client will be redirected if the payment fails and the client decides to return to your website.</td>\n</tr>\n<tr>\n<td><code>lang</code></td>\n<td>No</td>\n<td>Language. Possible values are \"fr\" and \"en\".</td>\n</tr>\n</tbody>\n</table>\n</div><p>This Markdown version of the table is easy to read and can be used in most Markdown editors.</p>\n<p><strong>Note:</strong></p>\n<p>The <code>order_id</code> field must be unique within the system for each transaction.</p>\n<p>Your merchant account will be valid for all countries, but you must set the appropriate currency for each transaction based on the country. The generated token will remain valid across all countries until it expires.</p>\n","_postman_id":"fa0867ad-33f5-44b4-b3fa-1fc5a1832fac"},{"name":"TRANSACTIONS","item":[{"name":"Notification AfribaPAY","item":[{"name":"AfribaPAY Signature","item":[],"id":"c1c00b70-0f34-4162-ab12-9c4f54339071","description":"<h3 id=\"verifying-webhook-signature-from-afribapay\">Verifying Webhook Signature from AfribaPAY</h3>\n<p>To verify that the webhook received is genuinely from the AfribaPAY API, it's important to validate the signature of the payload (body).</p>\n<h4 id=\"1-sign-the-payload\">1. Sign the Payload</h4>\n<p>Retrieve the body content from the POST request sent by AfribaPAY without making any modifications. This will give you a string that must be signed using HMAC256 and your <strong>API_KEY</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-php\">// Example with PHP\nfunction afribapay_sign($json, $api_key) {\n    $hash = hash_hmac('sha256', $json, $api_key);\n    return $hash;\n}\n\n</code></pre>\n<p>The request body should be in JSON format. Depending on the framework you're using, it may already return a JSON string. If not, you'll need to convert it into JSON using a function like <code>json_encode()</code> in PHP.</p>\n<h4 id=\"2-check-the-signature\">2. Check the Signature</h4>\n<p>The signature computed using the payload (without any modification) must be compared to the signature provided by AfribaPAY in the POST request headers.</p>\n<p>You can retrieve the AfribaPAY signature from the request headers like this:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-php\">// Retrieve AfribaPAY signature from headers\n$afribaPaySignature = $_SERVER['HTTP_AFRIBAPAY_SIGN'];\n\n</code></pre>\n<p>For example, the header might look like this:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-plaintext\">Afribapay-Sign: ABCD1223333425v3v345\n\n</code></pre>\n<h4 id=\"3-confirm-afribapay-signature\">3. Confirm AfribaPAY Signature</h4>\n<p>Finally, compare the computed signature (from step 1) with the signature received in the headers. If both signatures match, the webhook is indeed coming from AfribaPAY.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-php\">// Get the raw body of the request\n$payload = file_get_contents('php://input');  \n// Sign the payload using your api_key\n$computedSignature = afribapay_sign($payload, $api_key);  \nif (hash_equals($computedSignature, $afribaPaySignature)) {\n    // Signature is valid, the webhook is from AfribaPAY servers\n    echo \"Valid webhook\";\n} else {\n    // Signature mismatch, possibly not from AfribaPAY servers\n    echo \"Invalid webhook\";\n}\n\n</code></pre>\n<p>In this example, the webhook is confirmed as <strong>valid if the signatures match</strong>. If not, it could be an unauthorized request.</p>\n<p>This is an example of a header to retrieve the AfribaPAY signature.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Array\n(\n    [HTTP_CONTENT_LENGTH] =&gt; 520\n    [HTTP_AFRIBAPAY_SIGN] =&gt; 4112666a21fba58854785ba8e27373e0808f923cfece6cfc8a961b2d5eac6509\n    [HTTP_CONTENT_TYPE] =&gt; application/json\n    [HTTP_ACCEPT] =&gt; */*\n    [HTTP_HOST] =&gt; api-sandbox.afripayba.com\n    [SERVER_NAME] =&gt; api-sandbox.afribapay.com\n    [SERVER_PORT] =&gt; 443\n    [SERVER_ADDR] =&gt; 10.18.0.24\n    [REQUEST_SCHEME] =&gt; https\n    ....\n)\n\n</code></pre>","_postman_id":"c1c00b70-0f34-4162-ab12-9c4f54339071","auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":true,"source":{"_postman_id":"fe3f7f87-774d-4c11-a6f9-f2d5e0f20c77","id":"fe3f7f87-774d-4c11-a6f9-f2d5e0f20c77","name":"TRANSACTIONS","type":"folder"}}}],"id":"ee5f09fe-4f5b-41d7-a1f8-69fdf69c55f1","description":"<p>The notification system is a mechanism designed to automatically synchronize payment updates with your merchant site with <strong>POST</strong> method. AfribaPAY will call this link after each status update to inform you of changes during a transaction. At the completion of a payment, AfribaPAY will automatically call the notification URL (notify_url) associated with the service. This call informs the merchant of the transaction status, allowing them to validate the order if the payment has been successfully verified or if it concludes with a status of SUCCESS or FAILED.</p>\n<p>Here's an example of a basic webhook implementation in PHP using</p>\n<p><code>$payload = file_get_contents(\"php://input\");</code></p>\n<p>and decoding the JSON data using <code>json_decode()</code>:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-php\">// This is sent to your notify_url with either SUCCESS or FAILED status for your transaction\n// Capture the raw POST data from the request body (Sent from AfribaPAY Servers)\n$payload = file_get_contents(\"php://input\");\n// Decode the JSON payload into a PHP associative array\n$data = json_decode($payload, true);\n// Check if the payload was successfully decoded\nif ($data === null) {\n    // Handle the error if the JSON could not be decoded\n    http_response_code(400); // Respond with a 400 Bad Request status\n    echo \"Invalid JSON received.\"; // Output error message\n    exit; // Stop further execution\n}\n// START Signature Verification\n// Retrieve AfribaPAY signature from headers\n$afribaPaySignature = $_SERVER['HTTP_AFRIBAPAY_SIGN'] ?? null;\n// Sign the payload using the merchant key (replace $api_key with your actual key)\n$computedSignature = afribapay_sign($payload, $api_key);  \n// Compare the signature received with the computed one\nif (hash_equals($computedSignature, $afribaPaySignature)) {\n    // Signature is valid, meaning the webhook is from AfribaPAY\n    echo \"Valid webhook\";\n} else {\n    // Signature mismatch, possibly indicating that the request did not originate from AfribaPAY\n    http_response_code(403); // Respond with a 403 Forbidden status\n    echo \"Invalid webhook\"; \n    exit; // Stop further execution\n}\n// END Signature Verification\n// Extract important data from the decoded payload\n$orderId = $data['order_id'] ?? null;\n$status = $data['status'] ?? null;\n// Optional: Log the data for troubleshooting or record-keeping purposes\nfile_put_contents(\"webhook_log.txt\", date('Y-m-d H:i:s') . \" - Received webhook: \" . json_encode($data) . PHP_EOL, FILE_APPEND);\n// Process the transaction status\nif ($status === 'SUCCESS') {\n    // Handle successful transaction (e.g., update order status in your database)\n    http_response_code(200); // Respond with a 200 OK status\n    echo \"Transaction successful!\";\n} elseif ($status === 'FAILED') {\n    // Handle failed transaction\n    http_response_code(200); // Respond with a 200 OK status\n    echo \"Transaction failed.\";\n} else {\n    // Handle any unexpected statuses\n    http_response_code(400); // Respond with a 400 Bad Request status\n    echo \"Unknown status.\";\n}\n// Helper function to compute the AfribaPAY signature\nfunction afribapay_sign($json, $api_key) {\n    // Generate an HMAC SHA-256 hash of the JSON payload using your API KEY\n    return hash_hmac('sha256', $json, $api_key);\n}\n?&gt;\n\n</code></pre>\n<h3 id=\"explanation\">Explanation:</h3>\n<ul>\n<li><p><strong><code>file_get_contents(\"php://input\")</code></strong>: This captures the raw POST data from AfribaPAY servers.</p>\n</li>\n<li><p><strong><code>json_decode($payload, true)</code></strong>: Decodes the JSON payload into a PHP associative array.</p>\n</li>\n<li><p><strong>Transaction Handling</strong>: It checks the status of the transaction (e.g., SUCCESS or FAILED) and processes it accordingly. You can customize this part to fit your specific application logic.</p>\n</li>\n<li><p><strong>Logging (Optional)</strong>: The <code>file_put_contents()</code> function writes the received data into a log file (<code>webhook_log.txt</code>), which can be helpful for debugging or tracking incoming webhooks.</p>\n</li>\n<li><p><strong>Response Codes</strong>: Sends HTTP response codes like 200 for success and 400 for errors.</p>\n</li>\n</ul>\n<p>Make sure your webhook URL is set up correctly in your payment provider's system.</p>\n<p>This is an example of a transaction result from the AfribaPAY webhook.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-php\">Array\n(\n    [transaction_id] =&gt; PIM241190483336653177\n    [order_id] =&gt; CI_trans_t1726014523\n    [operator] =&gt; orange\n    [phone_number] =&gt; 225070000\n    [amount] =&gt; 10100\n    [taxes] =&gt; 22\n    [fees] =&gt; 122\n    [fees_taxes_ttc] =&gt; 144\n    [amount_total] =&gt; 10244\n    [currency] =&gt; XOF\n    [status] =&gt; SUCCESS\n    [country] =&gt; CI\n    [lang] =&gt; fr\n    [reference_id] =&gt; CI_U7000_10100_XOF_fr\n    [provider_id] =&gt; 241190483336653177\n    [date_created] =&gt; 2024-09-11 01:30:54\n    [operator_id] =&gt; MP240911.0030.A23232\n    [status_date] =&gt; 2024-09-11 01:30:59\n)\n\n</code></pre>\n","_postman_id":"ee5f09fe-4f5b-41d7-a1f8-69fdf69c55f1","auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":true,"source":{"_postman_id":"fe3f7f87-774d-4c11-a6f9-f2d5e0f20c77","id":"fe3f7f87-774d-4c11-a6f9-f2d5e0f20c77","name":"TRANSACTIONS","type":"folder"}}},{"name":"STATUS with oder_id","id":"f62be2cb-060d-4b47-9ef8-d285411d6322","protocolProfileBehavior":{"disableBodyPruning":true,"followAuthorizationHeader":true,"followOriginalHttpMethod":true},"request":{"auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"method":"GET","header":[],"url":"https://api-sandbox.afribapay.com/v1/status?order_id=order-1725999299","description":"<p>This feature enables real-time tracking of a transaction's status. By using either the <strong>transaction_id</strong> (generated by our system) or the <strong>order_id</strong> (provided during your transaction), you can query the API to check whether the transaction is PENDING, SUCCESS, or FAILED. This is helpful for monitoring payment flows and ensuring successful processing.</p>\n<p>In addition to the Transaction Notification, you can use the Transaction Status feature to check the current status of a payment in real-time. This is particularly useful in cases where notifications are not received (for any reason).</p>\n","urlObject":{"path":["v1","status"],"host":["https://api-sandbox.afribapay.com"],"query":[{"key":"order_id","value":"order-1725999299"}],"variable":[]}},"response":[{"id":"d12afd96-bd94-42c8-87f1-4c4c2ee77ef5","name":"STATUS","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"url":{"raw":"api-sandbox.afribapay.com/v1/status?order_id=order-CM-1725925171","host":["api-sandbox","afribapay","com"],"path":["v1","status"],"query":[{"key":"order_id","value":"order-CM-1725925171"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"request_id\": \"709359203351500241383913700505\",\n    \"request_time\": 1725999387.504259,\n    \"request_ip\": \"180.126.205.237\",\n    \"data\": {\n        \"transaction_id\": \"PIM241023212688248577\",\n        \"order_id\": \"order-1725999299\",\n        \"operator\": \"orange\",\n        \"phone_number\": \"237656000000\",\n        \"amount\": \"100\",\n        \"taxes\": 1,\n        \"fees\": 2,\n        \"fees_taxes_ttc\": 3,\n        \"amount_total\": 103,\n        \"currency\": \"XAF\",\n        \"status\": \"SUCCESS\",\n        \"country\": \"CM\",\n        \"lang\": \"fr\",\n        \"reference_id\": \"ref-Banana-House\",\n        \"provider_id\": \"241023212688248577\",\n        \"return_url\": \"https://mywebsite.com/callbacks\",\n        \"date_created\": \"2024-09-10 21:15:00\",\n        \"operator_id\": \"MP240910.2115.B03852\",\n        \"status_date\": \"2024-09-10 21:16:01\"\n    }\n}"}],"_postman_id":"f62be2cb-060d-4b47-9ef8-d285411d6322"},{"name":"STATUS with transaction_id","id":"cd03a564-72e0-42b6-bce9-bd02403b1a28","protocolProfileBehavior":{"disableBodyPruning":true,"followAuthorizationHeader":true,"followOriginalHttpMethod":true},"request":{"auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"method":"GET","header":[],"url":"https://api-sandbox.afribapay.com/v1/status?transaction_id=PIM241023212688248577","description":"<p>This feature enables real-time tracking of a transaction's status. By using either the <strong>transaction_id</strong> (generated by our system) or the <strong>order_id</strong> (provided during your transaction), you can query the API to check whether the transaction is PENDING, SUCCESS, or FAILED. This is helpful for monitoring payment flows and ensuring successful processing.</p>\n<p>In addition to the Transaction Notification, you can use the Transaction Status feature to check the current status of a payment in real-time. This is particularly useful in cases where notifications are not received (for any reason).</p>\n","urlObject":{"path":["v1","status"],"host":["https://api-sandbox.afribapay.com"],"query":[{"key":"transaction_id","value":"PIM241023212688248577"}],"variable":[]}},"response":[{"id":"48d4bcec-4fd6-4d83-81c0-1ca95ed72b75","name":"STATUS","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"url":{"raw":"api-sandbox.afribapay.com/v1/status?order_id=order-CM-1725925171","host":["api-sandbox","afribapay","com"],"path":["v1","status"],"query":[{"key":"order_id","value":"order-CM-1725925171"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"request_id\": \"709359203351500241383913700505\",\n    \"request_time\": 1725999387.504259,\n    \"request_ip\": \"180.126.205.237\",\n    \"data\": {\n        \"transaction_id\": \"PIM241023212688248577\",\n        \"order_id\": \"order-1725999299\",\n        \"operator\": \"orange\",\n        \"phone_number\": \"237656000000\",\n        \"amount\": \"100\",\n        \"taxes\": 1,\n        \"fees\": 2,\n        \"fees_taxes_ttc\": 3,\n        \"amount_total\": 103,\n        \"currency\": \"XAF\",\n        \"status\": \"SUCCESS\",\n        \"country\": \"CM\",\n        \"lang\": \"fr\",\n        \"reference_id\": \"ref-Banana-House\",\n        \"provider_id\": \"241023212688248577\",\n        \"return_url\": \"https://mywebsite.com/callbacks\",\n        \"date_created\": \"2024-09-10 21:15:00\",\n        \"operator_id\": \"MP240910.2115.B03852\",\n        \"status_date\": \"2024-09-10 21:16:01\"\n    }\n}"}],"_postman_id":"cd03a564-72e0-42b6-bce9-bd02403b1a28"},{"name":"BALANCE","id":"6f107ef3-9754-440b-b411-887c8def58f1","protocolProfileBehavior":{"disableBodyPruning":true,"followAuthorizationHeader":true,"followOriginalHttpMethod":true},"request":{"auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"method":"GET","header":[],"url":"https://api-sandbox.afribapay.com/v1/balance","description":"<p>The <strong>Get Balance</strong> feature enables you to check the available balance in your AfribaPAY account. This balance can represent the amount of funds available for withdrawals, transfers, or other operations. The request is typically made using the AfribaPAY API, allowing real-time access to account balances.</p>\n","urlObject":{"path":["v1","balance"],"host":["https://api-sandbox.afribapay.com"],"query":[],"variable":[]}},"response":[{"id":"d527c2fa-7ace-4894-b2e4-d891462abdad","name":"BALANCE","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"url":"api-sandbox.afribapay.com/v1/balance"},"_postman_previewlanguage":null,"header":null,"cookie":[],"responseTime":null,"body":"{\n    \"request_id\": \"24110603110068548304402510211573\",\n    \"request_time\": 1730864760.670289,\n    \"request_ip\": \"180.100.205.237\",\n    \"data\": [\n        {\n            \"service\": \"payin\",\n            \"country_code\": \"CI\",\n            \"currency\": \"XOF\",\n            \"balance\": 4082,\n            \"balance_available\": 4082,\n            \"account_number\": \"CIXOF-INAPM31923613\",\n            \"country_name\": \"Côte d'Ivoire\"\n        },\n        {\n            \"service\": \"payin\",\n            \"country_code\": \"SN\",\n            \"currency\": \"XOF\",\n            \"balance\": 3228,\n            \"balance_available\": 3228,\n            \"account_number\": \"SNXOF-INAPM31923613\",\n            \"country_name\": \"Senegal\"\n        },\n        {\n            \"service\": \"payout\",\n            \"country_code\": \"CM\",\n            \"currency\": \"XAF\",\n            \"balance\": 2676,\n            \"balance_available\": 2676,\n            \"account_number\": \"CMXAF-OUTAPM31923613\",\n            \"country_name\": \"Cameroon\"\n        },\n        {\n            \"service\": \"payin\",\n            \"country_code\": \"ML\",\n            \"currency\": \"XOF\",\n            \"balance\": 1474,\n            \"balance_available\": 1474,\n            \"account_number\": \"MLXOF-INAPM31923613\",\n            \"country_name\": \"Mali\"\n        },\n        {\n            \"service\": \"payin\",\n            \"country_code\": \"BJ\",\n            \"currency\": \"XOF\",\n            \"balance\": 588,\n            \"balance_available\": 588,\n            \"account_number\": \"BJXOF-INAPM31923613\",\n            \"country_name\": \"Benin\"\n        },\n        {\n            \"service\": \"payout\",\n            \"country_code\": \"BJ\",\n            \"currency\": \"XOF\",\n            \"balance\": 500,\n            \"balance_available\": 500,\n            \"account_number\": \"BJXOF-OUTAPM31923613\",\n            \"country_name\": \"Benin\"\n        },\n        {\n            \"service\": \"payin\",\n            \"country_code\": \"TG\",\n            \"currency\": \"XOF\",\n            \"balance\": 484,\n            \"balance_available\": 484,\n            \"account_number\": \"TGXOF-INAPM31923613\",\n            \"country_name\": \"Togo\"\n        },\n        {\n            \"service\": \"payin\",\n            \"country_code\": \"BF\",\n            \"currency\": \"XOF\",\n            \"balance\": 389,\n            \"balance_available\": 389,\n            \"account_number\": \"BFXOF-INAPM31923613\",\n            \"country_name\": \"Burkina Faso\"\n        },\n        {\n            \"service\": \"payin\",\n            \"country_code\": \"NE\",\n            \"currency\": \"XOF\",\n            \"balance\": 300,\n            \"balance_available\": 300,\n            \"account_number\": \"NEXOF-INAPM31923613\",\n            \"country_name\": \"Niger\"\n        },\n        {\n            \"service\": \"payin\",\n            \"country_code\": \"CM\",\n            \"currency\": \"XAF\",\n            \"balance\": 291,\n            \"balance_available\": 291,\n            \"account_number\": \"CMXAF-INAPM31923613\",\n            \"country_name\": \"Cameroon\"\n        },\n        {\n            \"service\": \"payout\",\n            \"country_code\": \"ML\",\n            \"currency\": \"XOF\",\n            \"balance\": 200,\n            \"balance_available\": 200,\n            \"account_number\": \"MLXOF-OUTAPM31923613\",\n            \"country_name\": \"Mali\"\n        },\n        {\n            \"service\": \"payin\",\n            \"country_code\": \"CD\",\n            \"currency\": \"CDF\",\n            \"balance\": 100,\n            \"balance_available\": 100,\n            \"account_number\": \"CDCDF-INAPM31923613\",\n            \"country_name\": \"R.D.C\"\n        },\n        {\n            \"service\": \"payout\",\n            \"country_code\": \"SN\",\n            \"currency\": \"XOF\",\n            \"balance\": 0,\n            \"balance_available\": 0,\n            \"account_number\": \"SNXOF-OUTAPM31923613\",\n            \"country_name\": \"Senegal\"\n        },\n        {\n            \"service\": \"payout\",\n            \"country_code\": \"BJ\",\n            \"currency\": \"GNF\",\n            \"balance\": 0,\n            \"balance_available\": 0,\n            \"account_number\": \"BJGNF-OUTAPM31923613\",\n            \"country_name\": \"Benin\"\n        },\n        {\n            \"service\": \"payin\",\n            \"country_code\": \"BJ\",\n            \"currency\": \"GNF\",\n            \"balance\": 0,\n            \"balance_available\": 0,\n            \"account_number\": \"BJGNF-INAPM31923613\",\n            \"country_name\": \"Benin\"\n        },\n        {\n            \"service\": \"payout\",\n            \"country_code\": \"CD\",\n            \"currency\": \"USD\",\n            \"balance\": 0,\n            \"balance_available\": 0,\n            \"account_number\": \"CDUSD-OUTAPM31923613\",\n            \"country_name\": \"R.D.C\"\n        },\n        {\n            \"service\": \"payin\",\n            \"country_code\": \"CD\",\n            \"currency\": \"USD\",\n            \"balance\": 0,\n            \"balance_available\": 0,\n            \"account_number\": \"CDUSD-INAPM31923613\",\n            \"country_name\": \"R.D.C\"\n        },\n        {\n            \"service\": \"payout\",\n            \"country_code\": \"TG\",\n            \"currency\": \"XOF\",\n            \"balance\": 0,\n            \"balance_available\": 0,\n            \"account_number\": \"TGXOF-OUTAPM31923613\",\n            \"country_name\": \"Togo\"\n        },\n        {\n            \"service\": \"payout\",\n            \"country_code\": \"NE\",\n            \"currency\": \"XOF\",\n            \"balance\": 0,\n            \"balance_available\": 0,\n            \"account_number\": \"NEXOF-OUTAPM31923613\",\n            \"country_name\": \"Niger\"\n        },\n        {\n            \"service\": \"payout\",\n            \"country_code\": \"BF\",\n            \"currency\": \"XOF\",\n            \"balance\": 0,\n            \"balance_available\": 0,\n            \"account_number\": \"BFXOF-OUTAPM31923613\",\n            \"country_name\": \"Burkina Faso\"\n        },\n        {\n            \"service\": \"payout\",\n            \"country_code\": \"GN\",\n            \"currency\": \"GNF\",\n            \"balance\": 0,\n            \"balance_available\": 0,\n            \"account_number\": \"GNGNF-OUTAPM31923613\",\n            \"country_name\": \"Guinea Conakry\"\n        },\n        {\n            \"service\": \"payin\",\n            \"country_code\": \"GN\",\n            \"currency\": \"GNF\",\n            \"balance\": 0,\n            \"balance_available\": 0,\n            \"account_number\": \"GNGNF-INAPM31923613\",\n            \"country_name\": \"Guinea Conakry\"\n        },\n        {\n            \"service\": \"payout\",\n            \"country_code\": \"CI\",\n            \"currency\": \"XOF\",\n            \"balance\": 0,\n            \"balance_available\": 0,\n            \"account_number\": \"CIXOF-OUTAPM31923613\",\n            \"country_name\": \"Côte d'Ivoire\"\n        },\n        {\n            \"service\": \"payout\",\n            \"country_code\": \"CD\",\n            \"currency\": \"CDF\",\n            \"balance\": 0,\n            \"balance_available\": 0,\n            \"account_number\": \"CDCDF-OUTAPM31923613\",\n            \"country_name\": \"R.D.C\"\n        }\n    ]\n}"}],"_postman_id":"6f107ef3-9754-440b-b411-887c8def58f1"},{"name":"HISTORY","id":"a7280d23-73d6-4c43-8177-001a3a476379","protocolProfileBehavior":{"disableBodyPruning":true,"followAuthorizationHeader":true,"followOriginalHttpMethod":true},"request":{"auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"method":"GET","header":[],"url":"https://api-sandbox.afribapay.com/v1/history?size=100&date_start=2008-12-10&date_end=2024-12-10","description":"<h2 id=\"transaction-history\">Transaction History</h2>\n<p>AfribaPAY’s <strong>Transaction History</strong> feature enables businesses to retrieve a complete log of all past transactions processed through the platform.<br />Each transaction record includes key details such as:</p>\n<ul>\n<li><p><strong>Transaction Date</strong></p>\n</li>\n<li><p><strong>Amount</strong></p>\n</li>\n<li><p><strong>Currency</strong></p>\n</li>\n<li><p><strong>Recipient / Phone Number</strong></p>\n</li>\n<li><p><strong>Transaction ID / Order ID / Reference ID</strong></p>\n</li>\n<li><p><strong>Status</strong> (SUCCESS, FAILED, PENDING, etc.)</p>\n</li>\n</ul>\n<p>This history helps merchants <strong>keep accurate records</strong>, <strong>monitor payments</strong>, and <strong>analyze transaction activity over time</strong> for reporting and reconciliation.</p>\n<hr />\n<h2 id=\"request-filters-optional\">Request Filters (Optional)</h2>\n<p>You can filter the transaction history using any of the following parameters:</p>\n<h3 id=\"date-range-recommended\">Date Range (Recommended)</h3>\n<ul>\n<li><p><code>date_start</code> <em>(YYYY-MM-DD)</em> → Start date (inclusive)<br />  <strong>Default:</strong> today - 3 months</p>\n</li>\n<li><p><code>date_end</code> <em>(YYYY-MM-DD)</em> → End date (inclusive)<br />  <strong>Default:</strong> today<br />  ✅ <strong>Maximum allowed window:</strong> <strong>6 months</strong></p>\n</li>\n</ul>\n<h3 id=\"exact-match-filters\">Exact Match Filters</h3>\n<ul>\n<li><p><code>transaction_id</code> → Exact match</p>\n</li>\n<li><p><code>order_id</code> → Exact match</p>\n</li>\n</ul>\n<h3 id=\"phone-number-filter\">Phone Number Filter</h3>\n<ul>\n<li><code>phone_number</code> → Partial match (digits-only search)<br />  Example: <code>\"7701\"</code> can match <code>\"221770112233\"</code></li>\n</ul>\n<h3 id=\"type-filter\">Type Filter</h3>\n<ul>\n<li><code>type</code> → Allowed values: <code>payin</code> | <code>payout</code><br />  This maps internally to the transaction <strong>account_type</strong>.</li>\n</ul>\n<h3 id=\"quick-search-q\">Quick Search (<code>q</code>)</h3>\n<ul>\n<li><p><code>q</code> → Global quick search value<br />  It supports:</p>\n</li>\n<li><p>✅ <strong>Exact match</strong> on: <code>transaction_id</code>, <code>order_id</code>, <code>reference_id</code></p>\n</li>\n<li><p>🔍 <strong>Partial match</strong> on: <code>phone_number</code> (digits-only)</p>\n</li>\n</ul>\n<hr />\n<h2 id=\"examples\">Examples</h2>\n<h3 id=\"example-1--get-latest-transactions-default-last-3-months\">Example 1 — Get latest transactions (default last 3 months)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /v1/history\n\n</code></pre><hr />\n<h3 id=\"example-2--filter-by-date-range\">Example 2 — Filter by date range</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /v1/history?date_start=2025-01-01&amp;date_end=2025-01-31\n\n</code></pre><hr />\n<h3 id=\"example-3--search-a-specific-transaction-exact-match\">Example 3 — Search a specific transaction (exact match)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /v1/history?transaction_id=PIM20250101000001\n\n</code></pre><hr />\n<h3 id=\"example-4--search-by-order-id-exact-match\">Example 4 — Search by order ID (exact match)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /v1/history?order_id=ORD-839392\n\n</code></pre><hr />\n<h3 id=\"example-5--filter-by-transaction-type-payin-only\">Example 5 — Filter by transaction type (payin only)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /v1/history?type=payin\n\n</code></pre><hr />\n<h3 id=\"example-6--search-by-phone-number-partial-match\">Example 6 — Search by phone number (partial match)</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /v1/history?phone_number=7701\n\n</code></pre><hr />\n<h3 id=\"example-7--quick-search-using-q-recommended\">Example 7 — Quick search using <code>q</code> (recommended)</h3>\n<p>✅ Search by transaction_id / order_id / reference_id (exact)<br />🔍 Also supports partial phone search</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /v1/history?q=PIM20250101000001\n\n</code></pre><p>Or:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /v1/history?q=ORD-839392\n\n</code></pre><p>Or:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /v1/history?q=7701\n\n</code></pre>","urlObject":{"path":["v1","history"],"host":["https://api-sandbox.afribapay.com"],"query":[{"key":"size","value":"100"},{"description":{"content":"<p>date au format  Y-m-d</p>\n","type":"text/plain"},"key":"date_start","value":"2008-12-10"},{"key":"date_end","value":"2024-12-10"}],"variable":[]}},"response":[{"id":"ac06cc46-1732-4e5f-a10b-3a678451e256","name":"HISTORY","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"url":{"raw":"api-sandbox.afribapay.com/v1/history?size=100&date_start=2024-09-10&date_end=2024-12-10","host":["api-sandbox","afribapay","com"],"path":["v1","history"],"query":[{"key":"size","value":"100"},{"key":"date_start","value":"2024-09-10","description":"date au format  Y-m-d"},{"key":"date_end","value":"2024-12-10"}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"request_id\": \"964086613304194319197078798194\",\n    \"request_time\": 1726019987.8014,\n    \"request_ip\": \"66.115.149.27\",\n    \"data\": {\n        \"0\": {\n            \"transaction_id\": \"PIM240691437168115461\",\n            \"reference_id\": \"ref-CM-1725607255\",\n            \"order_id\": \"order-CM-1725607255\",\n            \"date_created\": \"2024-09-06 08:20:56\",\n            \"date_payment\": \"2024-09-06 08:23:33\",\n            \"status\": \"SUCCESS\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"1\": {\n            \"transaction_id\": \"PIM240950095748188598\",\n            \"reference_id\": \"ref-CM-1725862578\",\n            \"order_id\": \"order-CM-1725862578\",\n            \"date_created\": \"2024-09-09 07:16:19\",\n            \"date_payment\": \"2024-09-09 07:17:03\",\n            \"status\": \"SUCCESS\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"2\": {\n            \"transaction_id\": \"PIM240943742074067232\",\n            \"reference_id\": \"ref-1725862784\",\n            \"order_id\": \"order-1725862784\",\n            \"date_created\": \"2024-09-09 07:19:45\",\n            \"date_payment\": \"2024-09-09 07:21:03\",\n            \"status\": \"FAILED\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"3\": {\n            \"transaction_id\": \"PIM240916301159665995\",\n            \"reference_id\": \"ref-1725899894\",\n            \"order_id\": \"order-1725899894\",\n            \"date_created\": \"2024-09-09 17:38:15\",\n            \"date_payment\": \"2024-09-09 17:40:01\",\n            \"status\": \"FAILED\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"4\": {\n            \"transaction_id\": \"PIM240914040274280266\",\n            \"reference_id\": \"ref-1725899898\",\n            \"order_id\": \"order-1725899898\",\n            \"date_created\": \"2024-09-09 17:38:18\",\n            \"date_payment\": \"2024-09-09 17:39:02\",\n            \"status\": \"FAILED\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"5\": {\n            \"transaction_id\": \"PIM240968123669670020\",\n            \"reference_id\": \"ref-1725925171\",\n            \"order_id\": \"order-1725925171\",\n            \"date_created\": \"2024-09-10 00:39:32\",\n            \"date_payment\": \"2024-09-10 00:40:02\",\n            \"status\": \"SUCCESS\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"6\": {\n            \"transaction_id\": \"PIM241055876712137432\",\n            \"reference_id\": \"ref-1725942528\",\n            \"order_id\": \"order-1725942528\",\n            \"date_created\": \"2024-09-10 05:28:49\",\n            \"date_payment\": \"2024-09-10 05:44:04\",\n            \"status\": \"FAILED\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"7\": {\n            \"transaction_id\": \"PIM241041919765971835\",\n            \"reference_id\": \"ref-Banana-House\",\n            \"order_id\": \"order-1725942683\",\n            \"date_created\": \"2024-09-10 05:31:24\",\n            \"date_payment\": \"2024-09-10 05:47:04\",\n            \"status\": \"FAILED\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"8\": {\n            \"transaction_id\": \"PIM241096802725286078\",\n            \"reference_id\": \"ref-Banana-House\",\n            \"order_id\": \"order-1725943741\",\n            \"date_created\": \"2024-09-10 05:49:03\",\n            \"date_payment\": \"2024-09-10 06:05:02\",\n            \"status\": \"FAILED\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"9\": {\n            \"transaction_id\": \"PIM241055598758740283\",\n            \"reference_id\": \"ref-Banana-House\",\n            \"order_id\": \"order-1725987215\",\n            \"date_created\": \"2024-09-10 17:53:36\",\n            \"date_payment\": \"2024-09-10 18:11:04\",\n            \"status\": \"FAILED\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"10\": {\n            \"transaction_id\": \"PIM241036281053611407\",\n            \"reference_id\": \"ref-Banana-House\",\n            \"order_id\": \"order-1725987820\",\n            \"date_created\": \"2024-09-10 18:03:40\",\n            \"date_payment\": \"2024-09-10 18:26:03\",\n            \"status\": \"FAILED\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"11\": {\n            \"transaction_id\": \"PIM241073918515974298\",\n            \"reference_id\": \"ref-Banana-House\",\n            \"order_id\": \"order-1725992569\",\n            \"date_created\": \"2024-09-10 19:22:51\",\n            \"date_payment\": \"2024-09-10 19:42:02\",\n            \"status\": \"FAILED\",\n            \"amount\": \"200\",\n            \"fees\": 3,\n            \"taxes\": 1,\n            \"amount_total\": 204,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"12\": {\n            \"transaction_id\": \"PIM241014873354857646\",\n            \"reference_id\": \"ref-Banana-House\",\n            \"order_id\": \"order-1725998336\",\n            \"date_created\": \"2024-09-10 20:58:58\",\n            \"date_payment\": \"2024-09-10 21:16:10\",\n            \"status\": \"FAILED\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"13\": {\n            \"transaction_id\": \"PIM241060373904783563\",\n            \"reference_id\": \"ref-Banana-House\",\n            \"order_id\": \"order-1725998648\",\n            \"date_created\": \"2024-09-10 21:04:09\",\n            \"date_payment\": \"2024-09-10 21:25:20\",\n            \"status\": \"FAILED\",\n            \"amount\": \"200\",\n            \"fees\": 3,\n            \"taxes\": 1,\n            \"amount_total\": 204,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"14\": {\n            \"transaction_id\": \"PIM241048728079857209\",\n            \"reference_id\": \"ref-Banana-House\",\n            \"order_id\": \"order-1725998715\",\n            \"date_created\": \"2024-09-10 21:05:17\",\n            \"date_payment\": \"2024-09-10 21:24:07\",\n            \"status\": \"FAILED\",\n            \"amount\": \"200\",\n            \"fees\": 3,\n            \"taxes\": 1,\n            \"amount_total\": 204,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"15\": {\n            \"transaction_id\": \"PIM241029453279611650\",\n            \"reference_id\": \"ref-Banana-House\",\n            \"order_id\": \"order-1725998803\",\n            \"date_created\": \"2024-09-10 21:06:44\",\n            \"date_payment\": \"0000-00-00 00:00:00\",\n            \"status\": \"FAILED\",\n            \"amount\": \"200\",\n            \"fees\": 3,\n            \"taxes\": 1,\n            \"amount_total\": 204,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"16\": {\n            \"transaction_id\": \"PIM241030072450728821\",\n            \"reference_id\": \"ref-Banana-House\",\n            \"order_id\": \"order-1725998825\",\n            \"date_created\": \"2024-09-10 21:07:07\",\n            \"date_payment\": \"0000-00-00 00:00:00\",\n            \"status\": \"FAILED\",\n            \"amount\": \"200\",\n            \"fees\": 3,\n            \"taxes\": 1,\n            \"amount_total\": 204,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"17\": {\n            \"transaction_id\": \"PIM241057052067154556\",\n            \"reference_id\": \"ref-Banana-House\",\n            \"order_id\": \"order-1725998885\",\n            \"date_created\": \"2024-09-10 21:08:06\",\n            \"date_payment\": \"2024-09-10 21:25:01\",\n            \"status\": \"FAILED\",\n            \"amount\": \"200\",\n            \"fees\": 3,\n            \"taxes\": 1,\n            \"amount_total\": 204,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"18\": {\n            \"transaction_id\": \"POM241076818110652734\",\n            \"reference_id\": \"ref1725999087\",\n            \"order_id\": \"payout-1725999087\",\n            \"date_created\": \"2024-09-10 21:11:28\",\n            \"date_payment\": \"0000-00-00 00:00:00\",\n            \"status\": \"FAILED\",\n            \"amount\": \"150\",\n            \"fees\": 1,\n            \"taxes\": 1,\n            \"amount_total\": 152,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"19\": {\n            \"transaction_id\": \"POM241097702096999681\",\n            \"reference_id\": \"ref1725999104\",\n            \"order_id\": \"payout-1725999104\",\n            \"date_created\": \"2024-09-10 21:11:46\",\n            \"date_payment\": \"0000-00-00 00:00:00\",\n            \"status\": \"FAILED\",\n            \"amount\": \"100\",\n            \"fees\": 1,\n            \"taxes\": 1,\n            \"amount_total\": 102,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"20\": {\n            \"transaction_id\": \"POM241068907798449321\",\n            \"reference_id\": \"ref1725999116\",\n            \"order_id\": \"payout-1725999116\",\n            \"date_created\": \"2024-09-10 21:11:57\",\n            \"date_payment\": \"0000-00-00 00:00:00\",\n            \"status\": \"FAILED\",\n            \"amount\": \"1000\",\n            \"fees\": 5,\n            \"taxes\": 1,\n            \"amount_total\": 1006,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        },\n        \"21\": {\n            \"transaction_id\": \"PIM241023212688248577\",\n            \"reference_id\": \"ref-Banana-House\",\n            \"order_id\": \"order-1725999299\",\n            \"date_created\": \"2024-09-10 21:15:00\",\n            \"date_payment\": \"2024-09-10 21:16:01\",\n            \"status\": \"SUCCESS\",\n            \"amount\": \"100\",\n            \"fees\": 2,\n            \"taxes\": 1,\n            \"amount_total\": 103,\n            \"ip_from\": \"199.126.205.237\",\n            \"recipient_number\": \"237656901110\"\n        }\n    }\n}"}],"_postman_id":"a7280d23-73d6-4c43-8177-001a3a476379"}],"id":"fe3f7f87-774d-4c11-a6f9-f2d5e0f20c77","description":"<p>AfribaPAY provides various features for managing and tracking transactions, including getting transaction information, checking balances, viewing transaction status, and retrieving transaction history. Here's a brief overview of each:</p>\n","auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"event":[{"listen":"prerequest","script":{"id":"d0b87674-fba5-4969-8d17-d528585ab259","type":"text/javascript","packages":{},"exec":[""]}},{"listen":"test","script":{"id":"04f805d9-f768-411a-9b09-bc8f57d23a63","type":"text/javascript","packages":{},"exec":[""]}}],"_postman_id":"fe3f7f87-774d-4c11-a6f9-f2d5e0f20c77"},{"name":"ACCOUNT","item":[{"name":"INFOS","id":"1db5c275-0a6e-4c14-86c6-45a74f15fd6f","protocolProfileBehavior":{"disableBodyPruning":true,"followAuthorizationHeader":true},"request":{"auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"method":"GET","header":[],"url":"https://api-sandbox.afribapay.com/v1/infos","description":"<p>AfribaPAY's <strong>Get Account Info</strong> feature allows users to retrieve key details about their account</p>\n","urlObject":{"path":["v1","infos"],"host":["https://api-sandbox.afribapay.com"],"query":[],"variable":[]}},"response":[{"id":"0b9fc81d-0d51-4cf3-b80a-f39f02e29b90","name":"INFOS","originalRequest":{"method":"GET","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"api-sandbox.afribapay.com/v1/infos"},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\n    \"request_id\": \"768351794093512244736092484552\",\n    \"request_time\": 1726020090.918289,\n    \"request_ip\": \"66.115.149.27\",\n    \"data\": {\n        \"business_name\": \"AFRIBAPAY BI Inc\",\n        \"neighborhood\": \"California\",\n        \"phone_number\": \"+14XXXXX\",\n        \"business_id\": \"APM30000\"\n    }\n}"}],"_postman_id":"1db5c275-0a6e-4c14-86c6-45a74f15fd6f"}],"id":"d99f0ae1-1d2d-4644-ae86-3ce319e56f47","auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"event":[{"listen":"prerequest","script":{"id":"2ccbdd44-608a-41b8-b694-c869d254f3b9","type":"text/javascript","packages":{},"exec":[""]}},{"listen":"test","script":{"id":"262935a9-a01c-4b38-8e45-02004b802ca6","type":"text/javascript","packages":{},"exec":[""]}}],"_postman_id":"d99f0ae1-1d2d-4644-ae86-3ce319e56f47","description":""},{"name":"STATUS CODES","item":[],"id":"fe1d0fce-9093-47cb-943a-91d5bb040b29","description":"<p>This table outlines various HTTP status codes and their corresponding messages related to transaction outcomes used by <strong>AfribaPAY</strong>. It indicates whether a transaction was successfully processed, failed, or is still pending, along with specific failure reasons.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Code</strong></th>\n<th><strong>Status</strong></th>\n<th><strong>Message</strong></th>\n<th><strong>Final Status</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>200</td>\n<td><strong>SUCCESS</strong></td>\n<td>Transaction successfully processed</td>\n<td>Yes</td>\n</tr>\n<tr>\n<td>200</td>\n<td><strong>FAILED</strong></td>\n<td>Transaction Failed</td>\n<td>Yes</td>\n</tr>\n<tr>\n<td>200</td>\n<td><strong>PENDING</strong></td>\n<td>Transaction in process</td>\n<td>No</td>\n</tr>\n<tr>\n<td>400</td>\n<td>FAILED</td>\n<td>Bad Request</td>\n<td>No</td>\n</tr>\n<tr>\n<td>401</td>\n<td>FAILED</td>\n<td>invalid credentials</td>\n<td>No</td>\n</tr>\n<tr>\n<td>403</td>\n<td>FAILED</td>\n<td>Unauthorized</td>\n<td>No</td>\n</tr>\n<tr>\n<td>404</td>\n<td>FAILED</td>\n<td>Not Found</td>\n<td>No</td>\n</tr>\n<tr>\n<td>405</td>\n<td>FAILED</td>\n<td>Method Not Allowed</td>\n<td>No</td>\n</tr>\n<tr>\n<td>408</td>\n<td>FAILED</td>\n<td>Request Timeout</td>\n<td>No</td>\n</tr>\n<tr>\n<td>429</td>\n<td>FAILED</td>\n<td>Too Many Requests</td>\n<td>No</td>\n</tr>\n<tr>\n<td>451</td>\n<td>FAILED</td>\n<td>Unavailable Due to Legal Reasons</td>\n<td>No</td>\n</tr>\n<tr>\n<td>500</td>\n<td>FAILED</td>\n<td>Internal Server Error</td>\n<td>No</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"fe1d0fce-9093-47cb-943a-91d5bb040b29"},{"name":"PAYMENT METHODS","item":[],"id":"31e46708-d721-4715-a576-c5c249bce9a1","description":"<p>This table provides an overview of mobile payment services used by <strong>AfribaPAY</strong> available across various African countries, including the supported operators, phone codes, and payment methods. It lists whether payin (deposit) and payout (withdrawal) services are available for each operator and their associated payment method (e.g., Orange, MTN, Moov), along with the currency used in each country. The table also notes upcoming services marked as \"Soon\" for certain regions.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th><strong>Country</strong></th>\n<th><strong>Country Code</strong></th>\n<th><strong>Operator</strong></th>\n<th><strong>Phone Code</strong></th>\n<th><strong>Payment Method</strong></th>\n<th><strong>Payin</strong></th>\n<th><strong>Payout</strong></th>\n<th><strong>Available</strong></th>\n<th><strong>Currency</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Côte d'Ivoire</td>\n<td>CI</td>\n<td>Orange</td>\n<td>+225</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Côte d'Ivoire</td>\n<td>CI</td>\n<td>Moov</td>\n<td>+225</td>\n<td>moov</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Côte d'Ivoire</td>\n<td>CI</td>\n<td>MTN</td>\n<td>+225</td>\n<td>mtn</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Côte d'Ivoire</td>\n<td>CI</td>\n<td>Wave</td>\n<td>+225</td>\n<td>wave</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Burkina Faso</td>\n<td>BF</td>\n<td>Orange</td>\n<td>+226</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Burkina Faso</td>\n<td>BF</td>\n<td>Moov</td>\n<td>+226</td>\n<td>moov</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Burkina Faso</td>\n<td>BF</td>\n<td>Wave</td>\n<td>+226</td>\n<td>wave</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Mali</td>\n<td>ML</td>\n<td>Orange</td>\n<td>+223</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Mali</td>\n<td>ML</td>\n<td>Moov</td>\n<td>+223</td>\n<td>moov</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Senegal</td>\n<td>SN</td>\n<td>Orange</td>\n<td>+221</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Senegal</td>\n<td>SN</td>\n<td>Free</td>\n<td>+221</td>\n<td>free</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Senegal</td>\n<td>SN</td>\n<td>Expresso</td>\n<td>+221</td>\n<td>expresso</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Senegal</td>\n<td>SN</td>\n<td>Wave</td>\n<td>+221</td>\n<td>wave</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Togo</td>\n<td>TG</td>\n<td>Moov</td>\n<td>+228</td>\n<td>moov</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Togo</td>\n<td>TG</td>\n<td>Togocell</td>\n<td>+228</td>\n<td>tmoney</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Guinea</td>\n<td>GN</td>\n<td>Orange</td>\n<td>+224</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>GNF</td>\n</tr>\n<tr>\n<td>Guinea</td>\n<td>GN</td>\n<td>MTN</td>\n<td>+224</td>\n<td>mtn</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>GNF</td>\n</tr>\n<tr>\n<td>Cameroon</td>\n<td>CM</td>\n<td>Orange</td>\n<td>+237</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XAF</td>\n</tr>\n<tr>\n<td>Cameroon</td>\n<td>CM</td>\n<td>MTN</td>\n<td>+237</td>\n<td>mtn</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XAF</td>\n</tr>\n<tr>\n<td>Benin</td>\n<td>BJ</td>\n<td>Moov</td>\n<td>+229</td>\n<td>moov</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Benin</td>\n<td>BJ</td>\n<td>MTN</td>\n<td>+229</td>\n<td>mtn</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>DR Congo</td>\n<td>CD</td>\n<td>Orange</td>\n<td>+243</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>CDF</td>\n</tr>\n<tr>\n<td>DR Congo</td>\n<td>CD</td>\n<td>Airtel</td>\n<td>+243</td>\n<td>airtel</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>CDF</td>\n</tr>\n<tr>\n<td>DR Congo</td>\n<td>CD</td>\n<td>Mpesa</td>\n<td>+243</td>\n<td>mpesa</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>CDF</td>\n</tr>\n<tr>\n<td>DR Congo</td>\n<td>CD</td>\n<td>Africel</td>\n<td>+243</td>\n<td>africell</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>CDF</td>\n</tr>\n<tr>\n<td>Niger</td>\n<td>NE</td>\n<td>Airtel</td>\n<td>+227</td>\n<td>airtel</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XOF</td>\n</tr>\n<tr>\n<td>Chad</td>\n<td>TD</td>\n<td>Airtel</td>\n<td>+235</td>\n<td>airtel</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XAF</td>\n</tr>\n<tr>\n<td>Chad</td>\n<td>TD</td>\n<td>Moov</td>\n<td>+235</td>\n<td>moov</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XAF</td>\n</tr>\n<tr>\n<td>Congo</td>\n<td>CG</td>\n<td>Airtel</td>\n<td>+242</td>\n<td>airtel</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XAF</td>\n</tr>\n<tr>\n<td>Congo</td>\n<td>CG</td>\n<td>MTN</td>\n<td>+242</td>\n<td>mtn</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XAF</td>\n</tr>\n<tr>\n<td>Central African Republic</td>\n<td>CF</td>\n<td>Orange</td>\n<td>+236</td>\n<td>orange</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XAF</td>\n</tr>\n<tr>\n<td>Central African Republic</td>\n<td>CF</td>\n<td>Telecel</td>\n<td>+236</td>\n<td>telecel</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XAF</td>\n</tr>\n<tr>\n<td>Gabon</td>\n<td>GA</td>\n<td>Airtel</td>\n<td>+241</td>\n<td>airtel</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XAF</td>\n</tr>\n<tr>\n<td>Gabon</td>\n<td>GA</td>\n<td>Moov</td>\n<td>+241</td>\n<td>moov</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>Yes</td>\n<td>XAF</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"31e46708-d721-4715-a576-c5c249bce9a1"},{"name":"COUNTRIES","item":[{"name":"COUNTRIES","id":"128dd450-b2d8-483d-8d81-c9d3e38695d7","protocolProfileBehavior":{"disableBodyPruning":true,"followAuthorizationHeader":true},"request":{"auth":{"type":"bearer","bearer":{"token":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj"},"isInherited":false},"method":"GET","header":[],"url":"https://api-sandbox.afribapay.com/v1/countries","description":"<p>Data about countries, their currencies, and mobile operators within those countries usied by AfribaPAY. The specific information being selected includes:</p>\n<ul>\n<li><p><code>country_code</code>: The unique code identifying the country.</p>\n</li>\n<li><p><code>country_name</code>: The name of the country.</p>\n</li>\n<li><p><code>currency</code>: The currency used in the country.</p>\n</li>\n<li><p><code>prefix</code>: The telephone prefix for the country.</p>\n</li>\n<li><p><code>taxes</code>: The tax rate or information related to the country.</p>\n</li>\n<li><p><code>operator_code</code>: The code of the mobile operator within the country.</p>\n</li>\n<li><p><code>operator_name</code>: The name of the mobile operator.</p>\n</li>\n<li><p><code>otp_required</code>: A flag indicating whether the operator supports OTP (One-Time Password) services.</p>\n</li>\n<li><p><code>ussd_code</code>: The text message sent as part of the OTP process or simply the USSD to validate the transaction.</p>\n</li>\n</ul>\n","urlObject":{"path":["v1","countries"],"host":["https://api-sandbox.afribapay.com"],"query":[{"disabled":true,"key":"","value":""}],"variable":[]}},"response":[{"id":"2d13b391-ce87-4913-b509-099bd5f82e21","name":"COUNTRIES","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"Bearer <your_token_here> // Add the Bearer token here","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"url":{"raw":"https://api-sandbox.afribapay.com/v1/countries","protocol":"https","host":["api-sandbox","afribapay","com"],"path":["v1","countries"],"query":[{"key":"","value":"","disabled":true}]}},"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json","description":"","type":"text"}],"cookie":[],"responseTime":null,"body":"{\"request_id\":\"25030103035817068574\",\"request_time\":1740843958.79002,\"request_ip\":\"199.126.205.237\",\"data\":{\"BF\":{\"country_code\":\"BF\",\"country_name\":\"Burkina Faso\",\"country_flag\":\"🇧🇫\",\"prefix\":\"226\",\"taxes\":18,\"currencies\":{\"XOF\":{\"currency\":\"XOF\",\"operators\":[{\"operator_code\":\"moov\",\"operator_name\":\"Moov Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"orange\",\"operator_name\":\"Orange Money\",\"otp_required\":1,\"ussd_code\":\"*144*4*6*montant#\"},{\"operator_code\":\"wligdicash\",\"operator_name\":\"Wallet LigdiCash\",\"otp_required\":1,\"ussd_code\":\"Get OTP from endpoint ...\\/pay\\/otp\"}]}}},\"CD\":{\"country_code\":\"CD\",\"country_name\":\"R.D.C\",\"country_flag\":\"🇨🇩\",\"prefix\":\"243\",\"taxes\":16,\"currencies\":{\"CDF\":{\"currency\":\"CDF\",\"operators\":[{\"operator_code\":\"airtel\",\"operator_name\":\"Airtel Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"mpesa\",\"operator_name\":\"Mpesa Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"orange\",\"operator_name\":\"Orange Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"afrimoney\",\"operator_name\":\"Afri Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"vodacom\",\"operator_name\":\"Vodacom\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"vodacom\",\"operator_name\":\"Vodacom\",\"otp_required\":0,\"ussd_code\":\"\"}]},\"USD\":{\"currency\":\"USD\",\"operators\":[{\"operator_code\":\"airtel\",\"operator_name\":\"Airtel Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"mpesa\",\"operator_name\":\"Mpesa Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"orange\",\"operator_name\":\"Orange Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"afrimoney\",\"operator_name\":\"Afri Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"vodacom\",\"operator_name\":\"Vodacom\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"vodacom\",\"operator_name\":\"Vodacom\",\"otp_required\":0,\"ussd_code\":\"\"}]}}},\"CI\":{\"country_code\":\"CI\",\"country_name\":\"Côte d'Ivoire\",\"country_flag\":\"🇨🇮\",\"prefix\":\"225\",\"taxes\":18,\"currencies\":{\"XOF\":{\"currency\":\"XOF\",\"operators\":[{\"operator_code\":\"moov\",\"operator_name\":\"Moov Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"mtn\",\"operator_name\":\"MTN Money\",\"otp_required\":0,\"ussd_code\":\"*133#\"},{\"operator_code\":\"orange\",\"operator_name\":\"Orange Money\",\"otp_required\":1,\"ussd_code\":\"#144*82#\"},{\"operator_code\":\"wave\",\"operator_name\":\"Wave Money\",\"otp_required\":0,\"ussd_code\":\"\"}]}}},\"CM\":{\"country_code\":\"CM\",\"country_name\":\"Cameroon\",\"country_flag\":\"🇨🇲\",\"prefix\":\"237\",\"taxes\":19.25,\"currencies\":{\"XAF\":{\"currency\":\"XAF\",\"operators\":[{\"operator_code\":\"mtn\",\"operator_name\":\"MTN Money\",\"otp_required\":0,\"ussd_code\":\"*126#\"},{\"operator_code\":\"orange\",\"operator_name\":\"Orange Money\",\"otp_required\":0,\"ussd_code\":\"#150*50#\"}]}}},\"GA\":{\"country_code\":\"GA\",\"country_name\":\"Gabon\",\"country_flag\":\"🇬🇦\",\"prefix\":\"241\",\"taxes\":18,\"currencies\":{\"XAF\":{\"currency\":\"XAF\",\"operators\":[{\"operator_code\":\"airtel\",\"operator_name\":\"Airtel Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"moov\",\"operator_name\":\"Moov Money\",\"otp_required\":0,\"ussd_code\":\"\"}]}}},\"GN\":{\"country_code\":\"GN\",\"country_name\":\"Guinea Conakry\",\"country_flag\":\"🇬🇳\",\"prefix\":\"224\",\"taxes\":18,\"currencies\":{\"GNF\":{\"currency\":\"GNF\",\"operators\":[{\"operator_code\":\"mtn\",\"operator_name\":\"MTN Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"orange\",\"operator_name\":\"Orange Money\",\"otp_required\":0,\"ussd_code\":\"*144*4*2*1#\"}]}}},\"ML\":{\"country_code\":\"ML\",\"country_name\":\"Mali\",\"country_flag\":\"🇲🇱\",\"prefix\":\"223\",\"taxes\":18,\"currencies\":{\"XOF\":{\"currency\":\"XOF\",\"operators\":[{\"operator_code\":\"moov\",\"operator_name\":\"Moov Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"orange\",\"operator_name\":\"Orange Money\",\"otp_required\":0,\"ussd_code\":\"#144#37#\"}]}}},\"NE\":{\"country_code\":\"NE\",\"country_name\":\"Niger\",\"country_flag\":\"🇳🇪\",\"prefix\":\"227\",\"taxes\":18,\"currencies\":{\"XOF\":{\"currency\":\"XOF\",\"operators\":[{\"operator_code\":\"airtel\",\"operator_name\":\"Airtel Money\",\"otp_required\":0,\"ussd_code\":\"\"}]}}},\"SN\":{\"country_code\":\"SN\",\"country_name\":\"Senegal\",\"country_flag\":\"🇸🇳\",\"prefix\":\"221\",\"taxes\":18,\"currencies\":{\"XOF\":{\"currency\":\"XOF\",\"operators\":[{\"operator_code\":\"expresso\",\"operator_name\":\"E-money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"free\",\"operator_name\":\"Free Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"orange\",\"operator_name\":\"Orange Money\",\"otp_required\":1,\"ussd_code\":\"#144*391#\"},{\"operator_code\":\"wave\",\"operator_name\":\"Wave Money\",\"otp_required\":0,\"ussd_code\":\"\"}]}}},\"TG\":{\"country_code\":\"TG\",\"country_name\":\"Togo\",\"country_flag\":\"🇹🇬\",\"prefix\":\"228\",\"taxes\":18,\"currencies\":{\"XOF\":{\"currency\":\"XOF\",\"operators\":[{\"operator_code\":\"moov\",\"operator_name\":\"Moov Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"tmoney\",\"operator_name\":\"T-Money\",\"otp_required\":0,\"ussd_code\":\"\"}]}}},\"BJ\":{\"country_code\":\"BJ\",\"country_name\":\"Benin\",\"country_flag\":\"🇧🇯\",\"prefix\":\"229\",\"taxes\":18,\"currencies\":{\"XOF\":{\"currency\":\"XOF\",\"operators\":[{\"operator_code\":\"moov\",\"operator_name\":\"Moov Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"mtn\",\"operator_name\":\"MTN Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"celtiis\",\"operator_name\":\"Celtiis Money\",\"otp_required\":0,\"ussd_code\":\"\"},{\"operator_code\":\"coris\",\"operator_name\":\"Coris Money\",\"otp_required\":0,\"ussd_code\":\"\"}]}}}}}"}],"_postman_id":"128dd450-b2d8-483d-8d81-c9d3e38695d7"}],"id":"ff18037a-262c-4873-85da-864492ce7148","description":"<p>This data is used to manage and support mobile payment services through AfribaPAY.</p>\n","_postman_id":"ff18037a-262c-4873-85da-864492ce7148"},{"name":"TEST PHONE NUMBERS","item":[],"id":"f88c0c55-7a1f-4756-876d-5e1f0cceeb60","description":"<p>This is the list of phone numbers and currencies for AfribaPay sandbox, along with their respective statuses.</p>\n<h1 id=\"currency-and-test-information\">Currency and Test Information</h1>\n<h2 id=\"1-currency-xof\">1. Currency: <strong>XOF</strong></h2>\n<h3 id=\"test-country-ivory-coast\">Test Country: <strong>Ivory Coast</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Phone Number</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>2252100000001</code></td>\n<td>SUCCESS</td>\n</tr>\n<tr>\n<td><code>2252100000002</code></td>\n<td>PENDING</td>\n</tr>\n<tr>\n<td><code>2252100000003</code></td>\n<td>FAILED</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h2 id=\"2-currency-xaf\">2. Currency: <strong>XAF</strong></h2>\n<h3 id=\"test-country-cameroon\">Test Country: <strong>Cameroon</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Phone Number</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>237660000001</td>\n<td>SUCCESS</td>\n</tr>\n<tr>\n<td>237660000002</td>\n<td>PENDING</td>\n</tr>\n<tr>\n<td>237660000003</td>\n<td>FAILED</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h2 id=\"3-currency-gnf\">3. Currency: <strong>GNF</strong></h2>\n<h3 id=\"test-country-guinea-conakry\">Test Country: <strong>Guinea Conakry</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Phone Number</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>224600000001</code></td>\n<td>SUCCESS</td>\n</tr>\n<tr>\n<td><code>224600000002</code></td>\n<td>PENDING</td>\n</tr>\n<tr>\n<td><code>224600000003</code></td>\n<td>FAILED</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h2 id=\"4-currency-usd\">4. Currency: <strong>USD</strong></h2>\n<h3 id=\"test-country-rdc\">Test Country: <strong>RDC</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Phone Number</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>243120000001</code></td>\n<td>SUCCESS</td>\n</tr>\n<tr>\n<td><code>243120000002</code></td>\n<td>PENDING</td>\n</tr>\n<tr>\n<td><code>243120000003</code></td>\n<td>FAILED</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h2 id=\"5-currency-cdf\">5. Currency: <strong>CDF</strong></h2>\n<h3 id=\"test-country-rdc-1\">Test Country: <strong>RDC</strong></h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Phone Number</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>243120000011</code></td>\n<td>SUCCESS</td>\n</tr>\n<tr>\n<td><code>243120000012</code></td>\n<td>PENDING</td>\n</tr>\n<tr>\n<td><code>243120000013</code></td>\n<td>FAILED</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h2 id=\"6-currency-xof\">6. Currency: XOF</h2>\n<h3 id=\"test-country-sn\">Test Country: SN</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Phone Number</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>221700000001</code></td>\n<td>SUCCESS</td>\n</tr>\n<tr>\n<td><code>221700000002</code></td>\n<td>PENDING</td>\n</tr>\n<tr>\n<td><code>221700000003</code></td>\n<td>FAILED</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<h2 id=\"7-currency-xof\">7. Currency: XOF</h2>\n<h3 id=\"test-country-bf\">Test Country: BF</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Phone Number</th>\n<th>Status</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>22660000001</code></td>\n<td>SUCCESS</td>\n</tr>\n<tr>\n<td><code>22660000002</code></td>\n<td>PENDING</td>\n</tr>\n<tr>\n<td><code>22660000003</code></td>\n<td>FAILED</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n","_postman_id":"f88c0c55-7a1f-4756-876d-5e1f0cceeb60"},{"name":"OTP Verification","item":[],"id":"6e206d97-62f6-4017-91da-664b2ba41788","description":"<hr />\n<h2 id=\"otp-verification--sandbox-overview\">OTP Verification – Sandbox Overview</h2>\n<p>Some providers require an OTP (One-Time Password) after you initiate a transaction.</p>\n<p>In <strong>sandbox mode</strong>, you can enter <strong>any 6-digit code</strong> to simulate a successful verification — <strong>except</strong> for a reserved set of test codes that always return a <strong>FAILED</strong> status.</p>\n<p>This allows you to test both <strong>happy paths</strong> (OTP success) and <strong>negative scenarios</strong> (OTP failure).</p>\n<hr />\n<h2 id=\"test-failed-otp-codes\">Test FAILED OTP Codes</h2>\n<p>When using the following codes, the API will always respond with <strong>FAILED</strong>:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Test Country</th>\n<th>Phone Number</th>\n<th>OTP Code</th>\n<th>Result</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Any country with OTP</td>\n<td>Any</td>\n<td><code>000000</code></td>\n<td>FAILED</td>\n</tr>\n<tr>\n<td>Any country with OTP</td>\n<td>Any</td>\n<td><code>111111</code></td>\n<td>FAILED</td>\n</tr>\n<tr>\n<td>Any country with OTP</td>\n<td>Any</td>\n<td><code>222222</code></td>\n<td>FAILED</td>\n</tr>\n<tr>\n<td>Any country with OTP</td>\n<td>Any</td>\n<td><code>333333</code></td>\n<td>FAILED</td>\n</tr>\n<tr>\n<td>Any country with OTP</td>\n<td>Any</td>\n<td><code>444444</code></td>\n<td>FAILED</td>\n</tr>\n</tbody>\n</table>\n</div><hr />\n<p>❌ <strong>Reserved failure codes</strong> (<code>000000</code> → <code>444444</code>) guarantee a deterministic <strong>FAILED</strong> response.</p>\n<p>✅ <strong>All other 6-digit codes (e.g.</strong> <strong><code>123456</code></strong>, <strong><code>987654</code></strong>) will succeed (status=SUCCESS).</p>\n","_postman_id":"6e206d97-62f6-4017-91da-664b2ba41788"}],"event":[{"listen":"prerequest","script":{"id":"a5b63a77-d36a-4a72-a0ab-d87d5d87eacc","type":"text/javascript","packages":{},"exec":["\r","var key = pm.variables.get(\"API_USER\");\r","var secret = pm.variables.get(\"API_SECRET\");\r","var url = pm.variables.get(\"API_URL\");\r","var version = pm.variables.get(\"API_VERSION\");\r","pm.globals.set(\"API_URL\",url+'/v'+version+'');\r","let keys = key + \":\" + secret;\r","let base64 = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Utf8.parse(keys));\r","\r","pm.sendRequest({\r","    url: url+'/token',\r","    method: 'POST',\r","    header: {\r","        'Authorization':'Basic '+base64,\r","        'content-type': 'application/json'\r","    }\r","}, function (err, res) {\r","    \r","    \r","    if(err)\r","    {\r","        switch(err.code)\r","        {\r","            case 'ENOTFOUND':\r","                console.log(\"Incorrect URL or connection problem.\");\r","            break;\r","            default:\r","                console.log(\"Correct the error in the base variables or check the connection\");\r","        }\r","    }\r","    else if(res)\r","    {\r","       \r","        pm.globals.set(\"API_TOKEN\",\"\" );\r"," \r","        if(res.json().error)\r","        {\r","            console.log(res.json().error.message);\r","        } \r","        else if(res.json().data)\r","        {\r","            var token = res.json().data.access_token;\r","            pm.globals.set(\"API_TOKEN\",token );\r","        }\r","    }\r","    else\r","    {\r","        console.log(\"Bad Request!\");\r","    }\r","    \r","    \r","    \r","});\r","\r","\r","\r","\r","\r","\r"," \r",""]}},{"listen":"test","script":{"id":"604a3432-4e54-4682-bef3-d21d98351223","type":"text/javascript","packages":{},"exec":[""]}}],"variable":[{"key":"API_URL","value":"https://api-sandbox.afribapay.com","type":"string"},{"key":"API_PAYOUT_URL","value":"https://api-payout-sandbox.afribapay.com","type":"string"},{"key":"API_USER","value":"8a52bc2a-bba7-46c1-958a-f74ade6a7a0e","type":"string"},{"key":"API_KEY","value":"Rf9wcMcA5w9v1yY7","type":"string"},{"key":"API_MERCHANT_KEY","value":"1","type":"string"},{"key":"API_TOKEN","value":"Ib6UTX1s17vxBOx683446nCwO6VhCTAHS4oP0TlyvU1xktuY42RREX1plj","type":"string"}]}