By Eric Lawson, payments integration analyst with 8 years of experience documenting ACH APIs and transaction-support workflows
Last reviewed: July 21, 2026
Dwolla is an account-to-account payment platform for businesses that need to collect funds, issue payouts, verify customers, and track bank-transfer events inside their own software. Its API supports ACH and real-time payment use cases, but the available transfer types, limits, and settlement speed depend on the customer record, payment rail, financial institution, and client configuration.
This independent guide is not operated by or affiliated with Dwolla.
The main implementation mistake is starting with an API endpoint before defining the movement of funds. Map the source, destination, customer type, verification requirement, transfer direction, and failure process first. The API becomes easier to understand once those decisions are fixed.
What is the Dwolla API?
The Dwolla API is a set of developer tools for creating payment customers, connecting funding sources, initiating account-to-account transfers, and monitoring payment activity. Dwolla describes the platform as a unified integration for ACH and real-time bank payments, aimed at platforms and enterprises processing payments at scale.
A transfer resource represents money moving from a source to a destination. Dwolla documents use cases that include pay-ins, payouts, payments between platform users, and transfers between accounts belonging to the same user.
The API does not remove the need for an internal ledger or customer-support record. A business still needs to associate each Dwolla resource with its own user, order, invoice, payout, or account-funding event.
That is the operational layer competitors often explain poorly. Calling the transfer endpoint is one step. Reconstructing what happened weeks later is the harder task.
How should a Dwolla integration be planned?
Start with a simple funds-flow diagram.
Identify the person or business providing the money, the party receiving it, and whether the transaction is a debit or credit. Then document which side has a connected bank account, whether a Dwolla Balance is involved, and what must happen when the payment fails or is returned.
Dwolla’s funding-source documentation describes a funding source as a payment account associated with the main account or a customer. A balance funding source can hold U.S. dollar funds through Dwolla’s financial institution partners and may be preloaded for outgoing transfers when the account setup supports that function.
The application should also decide which system owns each status. Dwolla may report a transfer as pending, while the platform displays “payment submitted.” Those labels are not necessarily identical.
Build a translation layer deliberately. Do not let front-end developers invent payment language independently from the operations team.
Which Dwolla customer type should you create?
Dwolla supports several customer configurations, and the choice affects what that customer can do.
An unverified customer requires a relatively small set of basic information. Dwolla’s current developer documentation says an unverified customer has a default sending limit of $5,000 per week, with the week measured from Monday through Sunday in UTC. It can transact only with verified customers or the platform’s Dwolla main account.
Verified customer records support broader functionality. The correct verification route depends on whether the customer is a person or business and how the platform intends to move money.
Do not choose the lightest onboarding option only because it reduces friction. A simpler customer type may not support the intended transaction path, balance functionality, or payment volume.
The priority is capability fit. Skip premature optimization of the signup form.
What transfer limits apply?
There is no single Dwolla limit that covers every account and payment rail.
Dwolla support documentation states that a personal Verified Customer Record has a default transaction send limit of $10,000. Business verified records may have limits determined through the client’s account configuration and underwriting process.
Unverified customers have the separate $5,000 weekly sending limit documented in the developer portal. That weekly period follows UTC, which can create edge cases for applications displaying a local time zone.
Same Day ACH follows network-level rules as well. Dwolla says it supports the $1 million per-transaction limit established by Nacha for Same Day ACH credits and debits, although access to the feature and any account-specific restriction must still be confirmed for the client.
Real-time payment limits vary by network, institution, and account terms. Dwolla’s account terms prohibit sending an RTP transaction above applicable RTP rules or any lower limit imposed on the specific account.
Never place a large-payment promise in product copy based only on a network maximum. Check the customer limit, client limit, rail limit, and receiving-bank eligibility.
How is a transfer created?
A Dwolla transfer identifies a source funding source and a destination funding source. The API then creates a resource representing the requested movement of funds.
A single transfer request may trigger several later events. Dwolla’s receive-money guide notes that the number and type of transfer-related webhooks can vary according to the payment flow. The application therefore needs to treat transfer creation as the beginning of a lifecycle, not the end of an action.
Store Dwolla’s resource location or identifier together with your own payment reference. Dwolla also supports correlation IDs intended to improve tracing between a company’s internal records, transfer activity, and webhooks.
An operations agent should be able to search one customer-visible payment number and reach the corresponding Dwolla transfer. Without that bridge, every support case becomes a manual investigation across unrelated systems.
What do Dwolla transfer statuses mean?
Dwolla’s transfer lifecycle records changes as a payment advances. Primary status concepts include pending, processed, cancelled, and failed.
A pending transfer has not reached a final result. A processed transfer reached the completed state defined for that payment path. Cancelled means processing was stopped, while failed means the payment could not complete.
Those labels need context.
For ACH payments, a later bank return may require another status update or operational response. Dwolla’s standard ACH settlement approach is roughly three to four business days, partly because many ACH returns arrive during the first two business days.
Do not display “irreversible” merely because the API reported processed. That wording overstates what a lifecycle event proves.
How do Dwolla webhooks work?
Dwolla creates event resources when supported objects change state. When an active webhook subscription exists, the platform attempts to deliver the event to the subscribed URL.
Webhook payloads are intentionally lightweight. The receiving application may need to use information from the event to retrieve the related resource and obtain the current details.
Three implementation details matter:
- Webhooks are asynchronous.
- Delivery order is not guaranteed.
- Duplicate events must be handled safely.
Dwolla explicitly recommends idempotent event processing because the same event may be delivered more than once. It also records delivery attempts, including the request and response associated with each attempt.
The webhook-subscription documentation warns that high event volume may arrive in bursts of up to 10 concurrent requests. Dwolla recommends doing minimal work in the handler, validating the message, and moving heavier processing into an internal queue or asynchronous workflow.
Acknowledge quickly. Process afterward.
What should a webhook handler validate?
A webhook subscription requires a destination URL and a secret used for webhook validation.
The receiving service should verify that the request is associated with the expected subscription, reject invalid requests, and avoid updating payment records solely from untrusted body content. It should then store enough event information to make retries and duplicate handling visible.
Dwolla’s working-with-webhooks guide assumes a pattern involving an endpoint and asynchronous processing tools such as a queue. The exact cloud service is optional; the architectural separation is the useful part.
Keep the public endpoint small. Move reconciliation, notifications, accounting updates, and customer messaging into internal jobs.
That design also makes outages easier to recover from. Events can be replayed or reprocessed without submitting a new payment.
How should API errors be handled?
Dwolla provides structured API errors based on standard HTTP statuses, Dwolla error codes, and embedded errors for requests containing multiple validation problems.
Do not show raw API responses directly to customers. Translate them into a safe message that explains the action the customer can take, while retaining the original code in internal logs.
For example, a malformed request is an engineering issue. A bank connection rejected because the institution reports invalid credentials is an end-user correction. A locked online-banking profile must usually be resolved through the bank.
Dwolla’s MX testing documentation includes specific states for invalid credentials, locked profiles, and disabled connections. Its displayed locked-account message directs the user to the appropriate bank website to resolve the restriction.
These cases should not all produce “bank connection failed.” That message gives support staff nothing useful.
How long do Dwolla payments take?
Dwolla’s standard ACH settlement time is described as approximately three to four business days. Actual timing can vary because of submission windows, weekends, banking holidays, returns, client settings, and participating financial institutions.
Same Day ACH can move eligible credits or debits faster, subject to approval and applicable processing windows. Dwolla’s support materials cite the Nacha limit of up to $1 million per Same Day ACH transaction.
RTP and FedNow are designed for faster credit payments, but they do not serve every bank account or collection scenario. Dwolla’s comparison materials identify ACH as supporting credit and debit transactions, while RTP and FedNow are credit-only payment methods in the described use cases.
Use Standard ACH as the default expectation unless the application has confirmed a faster rail for that specific transaction.
How should the sandbox be used?
Dwolla offers a sandbox for developers to test customer creation, funding sources, transfer requests, webhooks, and error handling without using production funds. The sandbox provides API credentials used to obtain an OAuth access token.
A useful test plan goes beyond one successful transfer.
Create verified and unverified customer scenarios. Test a customer reaching a send limit. Trigger invalid fields, duplicate webhook deliveries, delayed processing, bank-connection errors, and transfer failures. Confirm that the application records each event once and displays an accurate customer-facing status.
Then test recovery. A payment system is not production-ready until failed and delayed transactions can be located, explained, and corrected without editing database records by hand.
Frequently asked questions
Does Dwolla have a public login?
Yes. Dwolla maintains an account login page with email and password fields, plus a password-recovery option. Customers using a Dwolla-enabled third-party application may need to sign in through that application instead.
Is Dwolla only an ACH API?
No. Its current platform supports ACH and real-time account-to-account payment options.
Can unverified customers send money?
Yes, within the supported customer flow. Dwolla currently documents a default sending limit of $5,000 per week for unverified customers.
Are webhooks delivered in order?
No. Build for duplicates and out-of-order delivery.
Should a webhook perform the full payment update?
It should perform minimal validation and hand off heavier processing to an internal asynchronous system, particularly because Dwolla may send concurrent bursts of webhook requests.
What is a correlation ID used for?
It connects a transfer to the platform’s internal record, improving traceability across API requests, webhooks, reconciliation, and support investigations.
Can every Dwolla transfer use Same Day ACH?
No. Availability depends on the client’s approval, account setup, transaction eligibility, submission timing, and applicable limits.
How do clients access Dwolla support?
Dwolla documents a separate support portal. A client without an existing portal account is instructed to email Dwolla support and request access.