{"info":{"_postman_id":"2ce543a4-66d8-448a-9f7d-5e560a40032b","name":"Payments (Lango sandbox)","description":"Generated from the Payments API group. Run \"Get a token\" first — every other request reads {{token}}.","schema":"https://schema.getpostman.com/json/collection/v2.1.0/collection.json"},"item":[{"name":"Get a token","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/x-www-form-urlencoded"}],"url":{"raw":"{{baseUrl}}/oauth/v1/token","host":["{{baseUrl}}"],"path":["oauth","v1","token"]},"auth":{"type":"basic","basic":[{"key":"username","value":"{{consumerKey}}","type":"string"},{"key":"password","value":"{{consumerSecret}}","type":"string"}]},"body":{"mode":"urlencoded","urlencoded":[{"key":"grant_type","value":"client_credentials","type":"text"}]}},"event":[{"listen":"test","script":{"type":"text/javascript","exec":["const data = pm.response.json();","pm.collectionVariables.set('token', data.access_token);"]}}]},{"name":"Collect","item":[{"name":"Send a payment prompt","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/collect/v1/push","host":["{{baseUrl}}"],"path":["collect","v1","push"],"variable":[],"query":[]},"description":"Starts a payment. The response only confirms the prompt was sent. The final result arrives on `callbackUrl` a few seconds later.","body":{"mode":"raw","raw":"{\n  \"shortCode\": \"600100\",\n  \"amount\": 1500,\n  \"currency\": \"KES\",\n  \"phoneNumber\": \"254712345678\",\n  \"reference\": \"INV-2041\",\n  \"description\": \"Order 2041\",\n  \"callbackUrl\": \"https://example.com/hooks/lango\"\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Customer pays","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/collect/v1/push","host":["{{baseUrl}}"],"path":["collect","v1","push"],"variable":[],"query":[]},"description":"Starts a payment. The response only confirms the prompt was sent. The final result arrives on `callbackUrl` a few seconds later.","body":{"mode":"raw","raw":"{\n  \"shortCode\": \"600100\",\n  \"amount\": 1500,\n  \"currency\": \"KES\",\n  \"phoneNumber\": \"254712345678\",\n  \"reference\": \"INV-2041\",\n  \"description\": \"Order 2041\",\n  \"callbackUrl\": \"https://example.com/hooks/lango\"\n}","options":{"raw":{"language":"json"}}}},"status":"Accepted","code":202,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"checkoutId\": \"chk_5mtxbjzr\",\n  \"status\": \"PENDING\",\n  \"customerMessage\": \"Enter your PIN on your phone to pay KES 1500.\"\n}"},{"name":"Insufficient funds","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/collect/v1/push","host":["{{baseUrl}}"],"path":["collect","v1","push"],"variable":[],"query":[]},"description":"Starts a payment. The response only confirms the prompt was sent. The final result arrives on `callbackUrl` a few seconds later.","body":{"mode":"raw","raw":"{\n  \"shortCode\": \"600100\",\n  \"amount\": 1500,\n  \"currency\": \"KES\",\n  \"phoneNumber\": \"254712345678\",\n  \"reference\": \"INV-2041\",\n  \"description\": \"Order 2041\",\n  \"callbackUrl\": \"https://example.com/hooks/lango\"\n}","options":{"raw":{"language":"json"}}}},"status":"Accepted","code":202,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"checkoutId\": \"chk_ky0pze5r\",\n  \"status\": \"PENDING\",\n  \"customerMessage\": \"Enter your PIN on your phone to pay KES 1500.\"\n}"},{"name":"Customer cancels the prompt","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/collect/v1/push","host":["{{baseUrl}}"],"path":["collect","v1","push"],"variable":[],"query":[]},"description":"Starts a payment. The response only confirms the prompt was sent. The final result arrives on `callbackUrl` a few seconds later.","body":{"mode":"raw","raw":"{\n  \"shortCode\": \"600100\",\n  \"amount\": 1500,\n  \"currency\": \"KES\",\n  \"phoneNumber\": \"254712345678\",\n  \"reference\": \"INV-2041\",\n  \"description\": \"Order 2041\",\n  \"callbackUrl\": \"https://example.com/hooks/lango\"\n}","options":{"raw":{"language":"json"}}}},"status":"Accepted","code":202,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"checkoutId\": \"chk_azwz33e2\",\n  \"status\": \"PENDING\",\n  \"customerMessage\": \"Enter your PIN on your phone to pay KES 1500.\"\n}"},{"name":"Customer never responds","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/collect/v1/push","host":["{{baseUrl}}"],"path":["collect","v1","push"],"variable":[],"query":[]},"description":"Starts a payment. The response only confirms the prompt was sent. The final result arrives on `callbackUrl` a few seconds later.","body":{"mode":"raw","raw":"{\n  \"shortCode\": \"600100\",\n  \"amount\": 1500,\n  \"currency\": \"KES\",\n  \"phoneNumber\": \"254712345678\",\n  \"reference\": \"INV-2041\",\n  \"description\": \"Order 2041\",\n  \"callbackUrl\": \"https://example.com/hooks/lango\"\n}","options":{"raw":{"language":"json"}}}},"status":"Accepted","code":202,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"checkoutId\": \"chk_hgprv202\",\n  \"status\": \"PENDING\",\n  \"customerMessage\": \"Enter your PIN on your phone to pay KES 1500.\"\n}"},{"name":"Invalid phone number","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/collect/v1/push","host":["{{baseUrl}}"],"path":["collect","v1","push"],"variable":[],"query":[]},"description":"Starts a payment. The response only confirms the prompt was sent. The final result arrives on `callbackUrl` a few seconds later.","body":{"mode":"raw","raw":"{\n  \"shortCode\": \"600100\",\n  \"amount\": 1500,\n  \"currency\": \"KES\",\n  \"phoneNumber\": \"254712345678\",\n  \"reference\": \"INV-2041\",\n  \"description\": \"Order 2041\",\n  \"callbackUrl\": \"https://example.com/hooks/lango\"\n}","options":{"raw":{"language":"json"}}}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": \"INVALID_PHONE_NUMBER\",\n  \"message\": \"phoneNumber must be a reachable mobile number in international format.\",\n  \"requestId\": \"req_eges1pms\"\n}"}]},{"name":"Check a payment prompt","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/collect/v1/push/:checkoutId","host":["{{baseUrl}}"],"path":["collect","v1","push",":checkoutId"],"variable":[{"key":"checkoutId","value":"chk_8f2k1m9x"}],"query":[]},"description":"Use this when a callback has not arrived and you need the current state."},"response":[{"name":"Completed","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/collect/v1/push/:checkoutId","host":["{{baseUrl}}"],"path":["collect","v1","push",":checkoutId"],"variable":[{"key":"checkoutId","value":"chk_8f2k1m9x"}],"query":[]},"description":"Use this when a callback has not arrived and you need the current state."},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"checkoutId\": \"chk_8f2k1m9x\",\n  \"status\": \"COMPLETED\",\n  \"resultCode\": 0,\n  \"amount\": 1500,\n  \"receipt\": \"RCT_3r931ajb\"\n}"},{"name":"Unknown id","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/collect/v1/push/:checkoutId","host":["{{baseUrl}}"],"path":["collect","v1","push",":checkoutId"],"variable":[{"key":"checkoutId","value":"chk_8f2k1m9x"}],"query":[]},"description":"Use this when a callback has not arrived and you need the current state."},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": \"NOT_FOUND\",\n  \"message\": \"No payment prompt with that id.\",\n  \"requestId\": \"req_mz4335gr\"\n}"}]}]},{"name":"Payouts","item":[{"name":"Send a payout","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/payouts/v1/send","host":["{{baseUrl}}"],"path":["payouts","v1","send"],"variable":[],"query":[]},"description":"Moves money out of your float. Each `reference` can be used once.","body":{"mode":"raw","raw":"{\n  \"amount\": 25000,\n  \"currency\": \"KES\",\n  \"destination\": {\n    \"type\": \"mobile\",\n    \"phoneNumber\": \"254712345678\"\n  },\n  \"reference\": \"PAYRUN-0917-044\",\n  \"reason\": \"Salary\",\n  \"callbackUrl\": \"https://example.com/hooks/lango\"\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Payout succeeds","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/payouts/v1/send","host":["{{baseUrl}}"],"path":["payouts","v1","send"],"variable":[],"query":[]},"description":"Moves money out of your float. Each `reference` can be used once.","body":{"mode":"raw","raw":"{\n  \"amount\": 25000,\n  \"currency\": \"KES\",\n  \"destination\": {\n    \"type\": \"mobile\",\n    \"phoneNumber\": \"254712345678\"\n  },\n  \"reference\": \"PAYRUN-0917-044\",\n  \"reason\": \"Salary\",\n  \"callbackUrl\": \"https://example.com/hooks/lango\"\n}","options":{"raw":{"language":"json"}}}},"status":"Accepted","code":202,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"payoutId\": \"pay_mv8awjx6\",\n  \"status\": \"QUEUED\"\n}"},{"name":"Float too low","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/payouts/v1/send","host":["{{baseUrl}}"],"path":["payouts","v1","send"],"variable":[],"query":[]},"description":"Moves money out of your float. Each `reference` can be used once.","body":{"mode":"raw","raw":"{\n  \"amount\": 25000,\n  \"currency\": \"KES\",\n  \"destination\": {\n    \"type\": \"mobile\",\n    \"phoneNumber\": \"254712345678\"\n  },\n  \"reference\": \"PAYRUN-0917-044\",\n  \"reason\": \"Salary\",\n  \"callbackUrl\": \"https://example.com/hooks/lango\"\n}","options":{"raw":{"language":"json"}}}},"status":"Accepted","code":202,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"payoutId\": \"pay_05q2kj69\",\n  \"status\": \"QUEUED\"\n}"},{"name":"Duplicate reference","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/payouts/v1/send","host":["{{baseUrl}}"],"path":["payouts","v1","send"],"variable":[],"query":[]},"description":"Moves money out of your float. Each `reference` can be used once.","body":{"mode":"raw","raw":"{\n  \"amount\": 25000,\n  \"currency\": \"KES\",\n  \"destination\": {\n    \"type\": \"mobile\",\n    \"phoneNumber\": \"254712345678\"\n  },\n  \"reference\": \"PAYRUN-0917-044\",\n  \"reason\": \"Salary\",\n  \"callbackUrl\": \"https://example.com/hooks/lango\"\n}","options":{"raw":{"language":"json"}}}},"status":"Conflict","code":409,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": \"DUPLICATE_REFERENCE\",\n  \"message\": \"A payout with this reference already exists.\",\n  \"requestId\": \"req_n6xp5s3h\"\n}"}]},{"name":"Check a payout","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/payouts/v1/:payoutId","host":["{{baseUrl}}"],"path":["payouts","v1",":payoutId"],"variable":[{"key":"payoutId","value":"pay_3n7c2q8d"}],"query":[]},"description":"Check a payout"},"response":[{"name":"Delivered","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/payouts/v1/:payoutId","host":["{{baseUrl}}"],"path":["payouts","v1",":payoutId"],"variable":[{"key":"payoutId","value":"pay_3n7c2q8d"}],"query":[]},"description":"Check a payout"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"payoutId\": \"pay_3n7c2q8d\",\n  \"status\": \"DELIVERED\",\n  \"amount\": 25000,\n  \"receipt\": \"RCT_fzsh1x73\"\n}"}]}]},{"name":"Ledger","item":[{"name":"Look up a transaction","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/ledger/v2/transactions/:transactionId","host":["{{baseUrl}}"],"path":["ledger","v2","transactions",":transactionId"],"variable":[{"key":"transactionId","value":"RCT_5h1v9k2b"}],"query":[]},"description":"Look up a transaction"},"response":[{"name":"Found","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/ledger/v2/transactions/:transactionId","host":["{{baseUrl}}"],"path":["ledger","v2","transactions",":transactionId"],"variable":[{"key":"transactionId","value":"RCT_5h1v9k2b"}],"query":[]},"description":"Look up a transaction"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"transactionId\": \"RCT_5h1v9k2b\",\n  \"type\": \"COLLECTION\",\n  \"status\": \"COMPLETED\",\n  \"amount\": 1500,\n  \"currency\": \"KES\",\n  \"counterparty\": \"254712345678\",\n  \"reference\": \"INV-2041\",\n  \"completedAt\": \"2026-09-28T11:00:55.499Z\"\n}"},{"name":"Unknown receipt","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/ledger/v2/transactions/:transactionId","host":["{{baseUrl}}"],"path":["ledger","v2","transactions",":transactionId"],"variable":[{"key":"transactionId","value":"RCT_5h1v9k2b"}],"query":[]},"description":"Look up a transaction"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"error\": \"NOT_FOUND\",\n  \"message\": \"No transaction with that receipt number.\",\n  \"requestId\": \"req_2pkz23j9\"\n}"}]},{"name":"Reverse a transaction","request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/ledger/v2/transactions/:transactionId/reversal","host":["{{baseUrl}}"],"path":["ledger","v2","transactions",":transactionId","reversal"],"variable":[{"key":"transactionId","value":"RCT_5h1v9k2b"}],"query":[]},"description":"Returns the money to the payer. Only completed collections can be reversed, once.","body":{"mode":"raw","raw":"{\n  \"reason\": \"Customer paid twice\",\n  \"callbackUrl\": \"https://example.com/hooks/lango\"\n}","options":{"raw":{"language":"json"}}}},"response":[{"name":"Reversal succeeds","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"url":{"raw":"{{baseUrl}}/ledger/v2/transactions/:transactionId/reversal","host":["{{baseUrl}}"],"path":["ledger","v2","transactions",":transactionId","reversal"],"variable":[{"key":"transactionId","value":"RCT_5h1v9k2b"}],"query":[]},"description":"Returns the money to the payer. Only completed collections can be reversed, once.","body":{"mode":"raw","raw":"{\n  \"reason\": \"Customer paid twice\",\n  \"callbackUrl\": \"https://example.com/hooks/lango\"\n}","options":{"raw":{"language":"json"}}}},"status":"Accepted","code":202,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"reversalId\": \"rev_xn7p2r78\",\n  \"status\": \"QUEUED\"\n}"}]},{"name":"Read your balances","request":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/ledger/v2/balance?shortCode=600100","host":["{{baseUrl}}"],"path":["ledger","v2","balance"],"variable":[],"query":[{"key":"shortCode","value":"600100"}]},"description":"Read your balances"},"response":[{"name":"Healthy float","originalRequest":{"method":"GET","header":[],"url":{"raw":"{{baseUrl}}/ledger/v2/balance?shortCode=600100","host":["{{baseUrl}}"],"path":["ledger","v2","balance"],"variable":[],"query":[{"key":"shortCode","value":"600100"}]},"description":"Read your balances"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"body":"{\n  \"shortCode\": \"600100\",\n  \"currency\": \"KES\",\n  \"available\": 1284500,\n  \"reserved\": 25000,\n  \"asOf\": \"2026-09-28T11:00:55.500Z\"\n}"}]}]}],"auth":{"type":"bearer","bearer":[{"key":"token","value":"{{token}}","type":"string"}]},"variable":[{"key":"baseUrl","value":"https://devportal.softwaregroup.com/api/sandbox","type":"string"},{"key":"consumerKey","value":"","type":"string"},{"key":"consumerSecret","value":"","type":"string"},{"key":"token","value":"","type":"string"}]}