Squad
PaymentsSquad by HabariPay is a Nigerian payment gateway. Agents initiate and verify checkout payments, charge cards, bank accounts, and USSD, run direct-debit mandates, issue refunds, manage disputes and virtual accounts, send payouts, and sell airtime and data.
What This Integration Enables
Squad, by HabariPay, is a Nigerian payment gateway with a much wider surface than the word gateway implies. Alongside checkout, card, bank, and USSD collection, it runs direct debit mandates against a customer's bank account, issues permanent and per-transaction virtual account numbers, moves money out to bank accounts, and sells airtime, mobile data, and prepaid electricity. FlowRunner agents can run all of it, which means a single flow can collect from a customer, reconcile the deposit to their record, and settle a supplier, without three separate integrations.
Working with it well means respecting two things the API is honest about. Units are not uniform: almost everything is denominated in kobo, the airtime route is the single exception and takes naira, and the electricity route spends your balance to produce a token that is delivered to a phone number. And several routes report an outcome that is not the outcome, with the vendor telling you plainly to re-query rather than trust a status code. FlowRunner agents can carry those rules every time, which is the boring part. The part that stops and asks is where money leaves irreversibly, because human-in-the-loop belongs at the door that does not reopen.
Without FlowRunner
With FlowRunner
Use Case Scenarios
-
Virtual account reconciliation that does not lose a payment
Each customer gets a permanent virtual account number, so anything they transfer is attributed to them automatically. The agent listens for the incoming payment notification, resolves the ten-digit account back to the customer, and posts the receipt to Xero against their open invoice. Then it does the part most integrations skip: it reads the webhook error log, which holds notifications Squad tried to deliver and never got an acknowledgement for. Each entry is reconciled and then deleted, because an undeleted entry keeps reappearing in the capped list and eventually hides every newer miss behind it. A daily count of unreconciled entries goes to Slack, where zero is the expected number.
-
Prepaid utilities bought against the right meter
A customer wants electricity credit. The agent reads the provider list, then resolves the meter number, which returns the name the meter is registered to and the reference every purchase must carry. Showing that name back to the customer before spending anything is what catches a mistyped digit, and it is the only human-readable check between a typo and a stranger's meter. Airtime and data run alongside it, with the agent holding the unit rule explicitly, since the airtime route is the one place in this API where the amount is naira rather than kobo and a flow that forgets sends a hundredth of what was intended.
-
Direct debit that is not assumed to be live
A subscription customer authorizes a mandate. Creating it is not authorizing it: the response carries a session token, the customer gets a one-time code, and only after that code is validated does the mandate report that it is ready to debit. The agent checks that field before every debit rather than treating the existence of a mandate id as permission, and it respects the mandate total as the real ceiling, since debiting past it is refused outright. When the customer cancels, the agent cancels the mandate and records that a new one will need their code again, so nobody assumes the arrangement can be quietly resumed.
Human-in-Loop Highlight
Resolve Dispute has two settings with an asymmetry that makes it a genuinely hard call. Accepting deducts the money from your payouts and returns it to the customer, and it is irreversible. Rejecting requires evidence uploaded first, and Squad states that insufficient evidence results in the chargeback being accepted anyway. So a rejection that a reviewer would call thin does not fail safely, it produces the same outcome as accepting while burning the response window. Leaving the dispute alone produces that outcome too.
The agent can do everything up to the judgment. It ties the disputed reference to the order, confirms the payment status from Squad rather than from a redirect, gathers the delivery record and the customer's own messages, and uploads the file. Then it stops: "Dispute DSP-2026-00184, 145,000 kobo, raised 3 days ago. Evidence attached: signed delivery confirmation, two customer messages acknowledging receipt, no return request on file. Reject with this evidence, or accept?" Whether that pack is strong enough to hold is a judgment about how a bank will read it, not a rule an agent can apply. So a person makes it, and the agent runs their answer once.
Agent Capabilities
61 actionsPayments
6- Initiate Payment Creates a checkout and returns the URL to send the customer to. Amounts are in kobo, the reference must be unique, and the callback destination is where the customer lands rather than where the confirmation goes.
- Verify Transaction Asks Squad the status of one transaction. This is the operation that confirms a payment, since the checkout redirect is a claim made by a browser, and only one of its four statuses means money was taken.
- List Transactions Lists transactions in a date window. Both dates are compulsory and the window is capped, so a call without them fails rather than defaulting.
- Charge Tokenized Card Charges a card Squad already tokenized. The token arrives on the first payment's webhook rather than in its response, so a flow that ignores webhooks can never obtain one.
- Cancel Card Token Deactivates a tokenized card. There is no route to re-enable it, so the customer has to pay through the checkout again to produce a new one.
- Refund Transaction Refunds a completed transaction in full or in part. It needs both your reference and the gateway's own, and the refund starts as a request rather than an instant reversal.
Direct API
5- Charge Card Charges card details you collected yourself, which requires certification and puts raw card numbers through your flow. The charge is not finished when it returns.
- Authorize Payment Supplies the PIN or one-time code that finishes a direct card charge. Which one is required is decided by the previous response, and a card can demand both in sequence.
- Charge Bank Account Debits a bank account directly rather than a card, currently for one bank, and returns the authorization model that decides how the payer confirms.
- Validate Bank Payment Supplies the token or code that completes a direct bank debit.
- Initiate USSD Payment Generates a code the customer dials on their phone. It expires in minutes, so it is shown immediately rather than emailed, and nothing is charged until they complete the dial.
Direct Debit
6- Create Mandate Creates a mandate authorizing you to debit an account up to a total over a period. Creating it does not authorize it, and the customer's details must match their bank identity record exactly.
- Validate Mandate OTP Confirms a mandate with the code sent to the customer. The ready-to-debit field in the response is what matters, not the existence of a mandate id.
- Resend Mandate OTP Sends the confirmation code again, while the session is still alive.
- Debit Mandate Takes money from an account you hold an approved mandate over, without asking the customer. The mandate total is the only ceiling, and debiting past it is refused.
- Cancel Mandate Cancels one or more mandates. It takes a list and answers per mandate, and afterwards a new mandate needs the customer's code again.
- Get Mandates Searches mandates by status, reference, account, customer, amount, type, and date. The ready-to-debit field here is the check that belongs before every debit.
Disputes
3- List Disputes Returns every dispute and chargeback raised. An unattended queue is money leaving, because insufficient evidence means the chargeback goes through.
- Get Dispute Upload URL Returns a one-off destination for uploading proof that you delivered what the customer paid for. You upload to that URL yourself, and it is only needed when rejecting.
- Resolve Dispute Accepts or rejects a chargeback. Accepting is irreversible, and rejecting without sufficient evidence ends the same way, which is why this page's human gate sits here.
Merchant
2- Create Sub-Merchant Creates a sub-merchant under an aggregator account with its own settlement bank account, so payments and settlement route to that business while you keep using your own keys.
- Get Ledger Balance Returns your wallet balance, in kobo, for naira only. The check that belongs before a transfer, since a transfer beyond the balance fails at execution rather than being refused up front.
POS
2- Create POS Payment Request Pushes a payment to one of your card terminals, which then takes the card in person. Nothing happens until someone taps.
- Requery POS Payment Asks whether a terminal request completed. Success, pending, and failure all arrive with the same response code, so the body decides.
Transfers
4- Account Lookup Resolves a bank account number to the name it is registered under. The vendor states it is not liable for money sent to the wrong account, and the transfer route requires the name this returns.
- Fund Transfer Moves money from your wallet to a bank account. The reference must begin with your merchant id, and a timeout is not a failure, so an uncertain result is re-queried rather than resent.
- Requery Transfer Asks Squad the true outcome of a transfer. This is what the vendor tells you to call after an uncertain result, because resending would pay the recipient twice.
- List Transfers Returns the transfers made out of your wallet.
Virtual Accounts
11- Create Customer Virtual Account Creates a permanent account number for an individual, so transfers to it are attributed automatically. The bank identity record is validated strictly, which is the usual cause of failure here.
- Create Business Virtual Account Creates a permanent account for a business customer. It needs separate approval from the individual route and answers a refusal until that is granted.
- Get Virtual Account By Number Returns the customer behind a ten-digit account number, which is the lookup an incoming payment notification needs.
- Get Virtual Account By Customer Identifier Returns the account tied to your own customer identifier, for showing a customer where to pay.
- List Virtual Accounts Returns every virtual account you have created.
- Query Customer Transactions Returns the payments into one customer's virtual account, which is the per-person statement.
- Query All Virtual Account Transactions Returns every payment into any of your virtual accounts, with no filters at all.
- Search Virtual Account Transactions Searches payments into your virtual accounts by account, customer, date range, reference, or session id. Its date format differs from the listing route, and a wrong one returns the wrong month rather than an error.
- Simulate Virtual Account Payment Pretends a customer transferred money in, so a notification fires and a flow can be tested end to end without moving real money.
- Get Webhook Error Log Returns the notifications Squad tried to deliver and never got an acknowledgement for. This is the recovery mechanism for missed payments, and it is capped, so a backlog hides newer misses.
- Delete Webhook Error Log Removes one entry once its payment has been recorded. Not optional housekeeping, because an entry left in place keeps returning and crowds the list.
Dynamic Virtual Accounts
4- Create Dynamic Virtual Account Adds one account to a pool Squad assigns per transaction rather than per customer. Every account in the pool must carry the same name, since the pick is random.
- Initiate Dynamic Virtual Account Transaction Ties a pooled account to one expected payment, an exact amount inside an exact window. Anything else is a mismatch, and the default behavior refunds the customer rather than crediting you.
- Requery Dynamic Virtual Account Returns every payment attempt against one dynamic transaction as an array, because a customer may pay wrongly and then correctly, and reading only the first entry gets the wrong answer.
- Update Dynamic Virtual Account Changes the amount expected or the time remaining on a transaction already in flight, which is the alternative to expiring it and starting again.
SMS
11- Create SMS Bucket Creates a named list of recipients. The numbers are not uploaded here: the response carries a destination you upload your file to, and a bucket never populated sends nothing.
- List SMS Buckets Returns your buckets, which is where a campaign's audience reference comes from.
- Delete SMS Bucket Removes a bucket and its numbers. Campaigns pointing at it lose their audience.
- Send SMS Sends messages immediately without a bucket or campaign, with per-recipient text in one call. An unapproved sender id shows up as undelivered messages rather than an error.
- Create SMS Campaign Sends a template to a whole bucket, now or at a scheduled time. The vendor's schedule field is misspelled in its own documentation, so verify the first scheduled campaign fires when expected.
- List SMS Campaigns Returns campaigns filtered by status, name, direction, or date.
- Delete SMS Campaign Removes a campaign.
- Create SMS Template Creates a reusable message body, which a campaign references rather than carrying raw text.
- List SMS Templates Returns your templates, which is where a campaign's template reference comes from.
- Update SMS Template Changes a template's text or name. Campaigns not yet sent will use the new text, so editing one scheduled for tomorrow changes what tomorrow's recipients read.
- Delete SMS Template Removes a template. Campaigns still pointing at it lose their message body.
Value Added Services
7- List Electricity Providers Returns the distribution companies Squad can vend for, each covering particular states.
- Lookup Meter Resolves a meter number to the customer registered against it, and returns the reference a purchase requires. It is also the only place a customer sees the name on the meter before paying.
- Vend Electricity Buys electricity against a looked-up meter and sends the prepaid token to the customer. The value comes out of your balance, and the reference must come from the lookup.
- Vend Airtime Tops up a phone number. The amount here is in naira rather than kobo, which is the one route in this API where that is true.
- Vend Data Buys a mobile data bundle. It takes a network-specific plan code rather than an amount.
- Get Data Bundles Returns the plans available on one network with their codes and prices, which change, so they are read rather than hard-coded.
- List Vending Transactions Returns your airtime, data, and electricity purchases, or verifies one when a reference is supplied.
Frequently Asked Questions
What can FlowRunner do with Squad?
FlowRunner agents can run Initiate Payment, Verify Transaction, and List Transactions in Squad, plus 58 more actions.
Does connecting Squad to FlowRunner require OAuth?
No. Squad connects to FlowRunner with an API key, no OAuth flow required.
Can Squad trigger a FlowRunner workflow automatically?
Squad doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.
Start building with Squad
Free plan, no card required. Connect in minutes.