> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dmly.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Collect bank transfers in chat

> Let a Paystack pay link open on a one-time bank account so a client in Nigeria or Ghana pays by transfer from their banking app, or send your own account details with an I've paid button.

On a workspace with Paystack connected, a pay link can open straight onto a bank account instead
of a card form. The client copies the account number into their banking app, sends the exact
amount, and Paystack watches for it: when the transfer lands, Paystack tells DMLY and the invoice
settles on its own, exactly as a card payment would. Paystack calls this **Pay with Transfer**, and
it is available in Nigeria and Ghana only.

This page covers the transfer route. The general rules (how a pay link is minted, what each payment
status means, what a missed webhook looks like) are the same for every gateway and live in
[Connect a payment gateway](/finance/payments-and-gateways). If you would rather clients pay into
your own bank account and confirm each transfer yourself, skip to
[Use your own bank account instead](#use-your-own-bank-account-instead).

## Turn it on

Two of the three steps happen in the Paystack dashboard, because Paystack decides which payment
methods its checkout offers. DMLY only decides which of those a given link is allowed to use.

<Steps>
  <Step title="Tick Bank Transfer in Paystack">
    In the Paystack dashboard, go to **Settings → Preferences → Accept payments via** and tick
    **Bank Transfer**. It is a self-service checkbox and it applies to your whole Paystack account:
    once it is on, every Paystack checkout offers transfer alongside card. Untick it later and every
    transfer-only link from DMLY stops working, so leave it on.
  </Step>

  <Step title="Request a Trading Name">
    Still in Paystack, go to **Settings → Preferences → Virtual Accounts** and request a **Trading
    Name**. Until Paystack approves one, the account your client transfers to is named **PAYSTACK
    CHECKOUT**, which is confusing for someone expecting to pay your business. Approval takes time,
    so ask early; transfers work either way.
  </Step>

  <Step title="Pick Bank transfer only on the step">
    In DMLY, open the flow in the builder and select a **Request Payment** or **Send Payment Link**
    step (both sit in the **Finance** group, and both carry the same picker). Set **Payment
    method** to **Bank transfer only**. The option is only offered when the step will mint on
    Paystack, so if your default gateway is something else, pick Paystack under **Gateway** first.
    Set **Currency** to the one your Paystack account settles in: NGN in Nigeria, GHS in Ghana.

    Leave **Payment method** on **Any enabled method** and the link opens Paystack's normal
    checkout, where the client chooses between card and transfer. **Bank transfer only** removes
    the choice and opens the page on the account details directly.
  </Step>
</Steps>

<Note>
  The picker lives on those two automation steps only. An invoice's own **Payment link & QR**, the
  **Request payment** action in the inbox and a booking's payment link all open Paystack's normal
  checkout. Once Bank Transfer is ticked the client can choose **Transfer** there too; they are
  simply not held to it.
</Note>

<Tip>
  The template library ships this wired up as **Collect a deposit by bank transfer**: it fires
  when an appointment is booked and sends the deposit as a transfer-only link. Install it from
  [Start from a template](/automation/templates), then set the deposit amount and currency.
</Tip>

## What the client sees

On WhatsApp the step sends your **Message** (or, if you leave it blank, a short line offering a
secure link to pay the amount by bank transfer) with a **Pay by transfer** button; rename it under
**Button text** if you like. Tapping the button opens a Paystack page that already shows the bank
name, the account number and the amount, each with a copy button. The client switches to their
banking app, pastes the details, sends the money and comes back. The page confirms the payment
within seconds of the transfer landing, and the invoice in DMLY flips to **Paid** at the same
moment. Under **Finance → Payments** the payment shows its method as **Bank transfer**.

Three things about that account matter, and they are worth telling a client who has not paid
this way before:

* **It exists for this one payment.** Paystack issues a fresh account number per transaction. A
  client who saves it and sends a later bill to the same number is paying an account that no
  longer exists, and that money is refunded to them.
* **It expires 30 minutes after the page is opened.** The clock starts when the client opens the
  link, not when you send it, so the link can sit in the thread until they are ready. A transfer
  that arrives after the window is refunded, and the client needs a fresh link; for an invoice,
  share its pay link again and it is re-minted for whatever is still owed.
* **The amount must match exactly.** Paystack accepts the amount on the page and nothing else.

## Wrong amount, late or duplicate

Paystack accepts a transfer only when it matches the amount on the page exactly and arrives before
the account expires. Anything else (short, over, late, or a second transfer to an account that has
already been paid) is refunded to the sender automatically, within 24 hours. The client learns this
on the page itself: a message that the amount was wrong and a refund is on its way, and a **Retry**
button that lets them try again on the same page.

Nothing changes in DMLY when that happens. The payment stays **Pending**, the invoice stays unpaid
until an exact transfer lands, and no partial amount is recorded, so there is nothing for you to
reconcile or refund. If the client insists they paid, the money is on its way back to them; it is
not sitting with you or with Paystack.

## Use your own bank account instead

Not every business can take Paystack transfers. Your Paystack account may still be under review,
you may be outside Nigeria and Ghana, or you may simply want the money landing straight in your own
account. For that, DMLY sends your bank details in the chat and lets you confirm each transfer
yourself. This is the manual route: nothing confirms the money except you.

<Steps>
  <Step title="Save your bank details">
    Go to **Finance → Settings → Gateways** and fill in **Bank account for manual transfers**:
    switch it on, then enter **Bank name**, **Account number** and **Account name**.
    **Instructions** is optional and is added to the end of every message, for example how long
    you hold a slot while waiting. Save. No gateway needs to be connected for this to work.
  </Step>

  <Step title="Pick Bank details in chat on the step">
    On a **Request Payment** or **Send Payment Link** step, set **Payment method** to **Bank details in chat (manual)**. **Gateway** can stay empty.
  </Step>

  <Step title="The client gets your details and an I've paid button">
    The message shows the amount, your bank, the account number on a line of its own so it can be
    long-pressed and copied, the account name, and a reference beginning `BT-` for the client to
    quote on the transfer. Below it is an **I've paid** button (rename it under **Button text**).
    The flow waits there. When the client taps the button, or replies *paid*, DMLY thanks them,
    says you will confirm shortly, and moves on.
  </Step>

  <Step title="Confirm or reject under Finance → Payments">
    The payment appears under **Finance → Payments** as **Awaiting transfer**, changing to
    **Customer says paid** once the client taps the button, and your team gets a **Transfer
    claimed** notification. Find the reference on your bank statement, then open the row's menu and
    choose **Confirm transfer** or **Reject transfer**. Both need the same permission as recording a payment.

    **Confirm transfer** marks the payment **Succeeded**, settles the invoice and fires the **Payment
    succeeded** trigger, so the client gets the same receipt and follow-ups as any other payment.
    **Reject transfer** marks it **Failed** and leaves the invoice open; add a note for your own records,
    then message the client or send a fresh request.
  </Step>
</Steps>

<Warning>
  **Never record the same transfer twice.** Confirming under **Finance → Payments** is the
  recording. If you also use **Record payment** on the invoice for the same money, the invoice adds
  up both and the client shows as having paid twice.
</Warning>

<Tip>
  For invoices there is a ready-made flow: **Send bank details for a new invoice** fires on
  **Invoice sent** and messages your account details for the amount due, with the **I've paid**
  button. Install it from [Start from a template](/automation/templates).
</Tip>

## When something looks wrong

<Accordion title="The link opens a card form instead of the account details">
  Two causes. Either **Bank Transfer** is not ticked under **Settings → Preferences → Accept
  payments via** in the Paystack dashboard, or the link was not minted on Paystack at all:
  **Bank transfer only** is a Paystack feature, so a step whose **Gateway** resolves to Stripe,
  PayPal or another provider mints that provider's ordinary checkout. Check the step's **Gateway**
  and the default gateway under **Finance → Settings → Gateways**.

  With the box unticked, Paystack either ignores the restriction and offers card, or refuses to
  mint the link. In the second case the Paystack tile under **Configurations → Integrations** shows
  the error Paystack returned, and the flow leaves the step through its **FAILED** output, so wire
  that output to a human rather than leaving the client at a dead end.
</Accordion>

<Accordion title="The client says they paid but nothing arrived">
  Three things to check, in order. Did they pay within 30 minutes of opening the page? A later
  transfer is refunded. Did they send the exact amount? Anything else is refunded, and the page told
  them so with a **Retry** button. Then look under **Transactions** in the Paystack dashboard: a
  successful transfer appears there within seconds, and if it is there but not in DMLY you have a
  webhook problem, covered in
  [What a failed webhook means](/finance/payments-and-gateways#what-a-failed-webhook-means).

  Whatever the cause, don't record the payment by hand while you wait. If the transfer did
  succeed, the webhook will record it, and the client would then show as having paid twice.
</Accordion>

<Accordion title="The account is named PAYSTACK CHECKOUT, not after us">
  That is the name Paystack puts on every checkout account until you have an approved **Trading
  Name**. Request one under **Settings → Preferences → Virtual Accounts** in the Paystack
  dashboard. Nothing in DMLY changes it, and the money reaches your Paystack balance either way;
  only the name the client sees is affected.
</Accordion>

## Related

<Columns cols={2}>
  <Card title="Payments and gateways" icon="credit-card" href="/finance/payments-and-gateways">
    Connect Paystack, pay links, payment statuses and what a failed webhook means.
  </Card>

  <Card title="Invoices" icon="file-invoice" href="/finance/invoices">
    Send an invoice and share its pay link on WhatsApp.
  </Card>

  <Card title="Sell on WhatsApp" icon="bag-shopping" href="/automation/sell-on-whatsapp">
    The Request Payment step end to end, from cart to cash.
  </Card>

  <Card title="Finance settings" icon="gear" href="/finance/settings">
    Default currency, due days, numbering and the Gateways tab.
  </Card>
</Columns>
