---
title: "Squad Integration"
description: "Squad 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."
url: https://flowrunner.ai/integrations/squad
date_modified: 2026-09-04T14:51:36-07:00
---

# Squad

[Payments](https://flowrunner.ai/integrations/category/finance-accounting)

Squad 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.

[Verified](https://flowrunner.ai/integrations/verified "What does verified mean?") · 61 actions · API key · available

[Squad website](https://squadco.com/) · [Platform Documentation](https://docs.squadco.com/) · Capability data verified 2026-08-25

1.  A new chargeback appears in the dispute queue
2.  Agent pulls the order, the delivery record, and the transaction behind the disputed reference
3.  Verify Transaction confirms the payment genuinely succeeded rather than trusting a checkout redirect
4.  Get Dispute Upload URL returns a one-off destination and the agent uploads the evidence file to it
5.  The finance owner receives the assembled evidence, the amount, and the time remaining
6.  The finance owner judges whether the evidence is strong enough to reject, because a weak rejection ends the same way as accepting

## 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](https://flowrunner.ai/concepts/human-in-the-loop) belongs at the door that does not reopen.

### Without FlowRunner

**Disputes worked by whoever notices**: An unattended queue turns into accepted chargebacks without anyone deciding to accept them

**Payment confirmed by the browser**: The customer's redirect back from the checkout is treated as proof that money moved

**Missed payment notices lost**: A notification your endpoint never acknowledged is gone once the delivery attempts stop

### With FlowRunner

**Disputes worked as a queue with a clock**: Every open dispute carries its evidence, its amount, and the time left before the default outcome applies

**Payment confirmed by the platform**: Squad's own answer decides, and only one of its four transaction statuses means money was taken

**Missed notices recovered and cleared**: The error log is read, each entry reconciled, and then deleted so newer misses are not hidden behind old ones

## 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](https://flowrunner.ai/integrations/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](https://flowrunner.ai/integrations/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 processes routinely

Detects exception requiring judgment

Clear match Continues automatically

Ambiguous Routes to human via preferred channel

Human decides

Agent resumes with decision

## Agent Capabilities

61 actions

### Payments

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.

**Work at Squad?** This integration exposes Squad to AI agents on every FlowRunner plan, including through MCP, at no cost to you. [See what FlowRunner offers integration partners](https://flowrunner.ai/integrations/partners), including how to keep this page current.

---
Markdown version of https://flowrunner.ai/integrations/squad. Site index: https://flowrunner.ai/llms.txt
