Note
This feature is currently in beta and subject to change. It also requires additional activation steps. To learn more about the Beta program for this feature and about activating it for your program, contact your Marqeta representative.
This feature is currently in beta and subject to change. It also requires additional activation steps. To learn more about the Beta program for this feature and about activating it for your program, contact your Marqeta representative.
- What ACH origination is, and some common ways to use it.
- The ACH origination end-to-end processing flow for credits and debits.
About ACH
ACH is managed by an organization called NACHA, the National Automated Clearing House Association. In addition to NACHA, completing an ACH transaction requires the involvement of several other participants:- Originator: The originating program which agrees to initiate ACH entries into the payment system, according to an explicit arrangement with a receiver. As a participant in the ACH payments system, originators are required to follow the rules for originators in NACHA’s ACH Operating Rules book.
- ODFI: The Originating Depository Financial Institution, which receives payment instructions from the originator and forwards the entries to the ACH Operator. Working with an ODFI, Marqeta takes care of generating the NACHA file that is delivered to the Federal Reserve for settlement.
- ACH Operator: This is typically the Federal Reserve, although private ACH operators do exist.
- RDFI: The Receiving Depository Financial Institution. The RDFI receives ACH entries from the ACH Operator and posts the entries to the accounts of the receiver.
- Receiver: The receiving company or individual which has authorized an originator to initiate the ACH entry.
- Third-Party Service Provider: An entity other than the Originator, ODFI, or RDFI that performs any function on behalf of the Originator, ODFI, or RDFI with respect to the processing of ACH entries. A function of ACH processing can include, for example, the creation of ACH files on behalf of an Originator or ODFI.
ACH on the Marqeta platform
With ACH, your account holders can pay for transactions by debiting their account directly instead of paying with a credit card. This functionality might be part of a banking portal experience that you develop. Use the Marqeta platform’s ACH origination for consumers functionality to process your cardholders’ requests to pull/push funds to their Marqeta account:- To fund their Marqeta account, account holders authorize an external bank account from which they want to pull funds.
- Account holders also have the option of pushing funds from their Marqeta account to an external bank account.
Cardholder account funding via ACH origination
Newly onboarded cardholders must add funds to their Marqeta account before they can begin spending. Cardholders can also push funds from their Marqeta account to an external account if they need to, in order to manage their finances across multiple bank accounts, or transfer funds to friends, family members, or payees. The sections below add a new user to the Marqeta platform, then move money between their Marqeta account and their external funding source account.Add a new user to the Marqeta platform
2
Create a deposit account on the Marqeta platform using the
/depositaccounts/ endpoint. This account can be either a Demand Deposit Account (DDA) or a digital account and will be tied to the user or business created in Step 1.3
Add the cardholder’s external funding source account to the Marqeta platform by sending a
POST request to the /fundingsources/ach endpoint.Verify the cardholder’s bank account
In all situations, the cardholder’s external funding source account must be verified in order to send or receive ACH payments. Account verification also helps you minimize costly returns. You can integrate with our partner Plaid to verify external bank accounts on the Marqeta platform. Seamlessly verifying via Plaid enables you to optimize user conversion, as well as shorten wait times to verify the external funding source.Pull funds to the Marqeta platform
Use ACH origination to pull the cardholder’s funds from the external account to the Marqeta account. Create an ACH transfer by sending aPOST request to the /banktransfers/ach endpoint when you onboard a new cardholder and they want to add funds to their Marqeta account in order to begin spending. Ensure that the type field of your request is set to pull. For more information, as well as sample requests and responses, see the Create ACH transfer section of the Funding via ACH API reference page.
Faster ACH pull to the Marqeta platform
When you use ACH origination to pull the cardholder’s funds from their external bank account to their Marqeta account, it can take up to three days for the transaction to clear and the funds to be available to spend in the cardholder’s Marqeta account. If you determine that the cardholder’s risk level is low, and that the associated ACH transfer is unlikely to be subject to return, you can give the cardholder faster access to their funds using the/banktransfers/ach/earlyfunds endpoint. This endpoint is available only for pull-type ACH transfers.
The response to a POST /banktransfers/ach/earlyfunds request is similar to the response to a GET /banktransfers API call.
Marqeta sends a transaction webhook with the transaction event ach.early.funds when the faster funds ACH transfer is successful, and ach.early.funds.reversed when the original ACH transfer is settled and the faster funds are reversed.
To enable this feature for your card program, contact your Marqeta representative.
For more information, as well as sample requests and responses, see the Perform faster funds ACH transfer section of the Funding via ACH API reference page.
Push funds to an external account
You can also use ACH origination to push the cardholder’s funds from the Marqeta account to an external account. This is the use case for closing out an account or refunding the cardholder, or when a cardholder on the Marqeta platform wants to perform a me-to-me transfer (money out). Create an ACH transfer by sending aPOST request to the /banktransfers/ach endpoint, ensuring that the type field of your request is set to push. For more information, as well as sample requests and responses, see the Create ACH transfer section of the Funding via ACH API reference page.
Program funding via ACH origination
Program funding accounts supply funds for the cardholder account at Marqeta, from which your cardholders can make card payments. Programs must maintain the established minimum required balance in their Marqeta account for the purposes of funding the cardholder account. Once you have linked an external program funding source (as explained in Add a program funding source below), you are ready to pull or push funds using ACH origination.Add a program funding source
Use the/fundingsources/program/ach endpoint to add an external account to fund your program account for ACH payments. For more information, as well as sample requests and responses, see the Account Holder Funding Sources API reference page.
Pull program funds
To add funds to their program funding account on the Marqeta platform, programs can pull from a linked external account. The minimum required balance for a program funding account varies, depending on the program’s spend. Send aPOST request to the /banktransfers/ach endpoint to create this kind of ACH transfer, ensuring that the type field of your request is set to pull. Upon successful completion of the transfer, the Marqeta platform transitions its status to COMPLETED. For more information, as well as sample requests and responses, see the Create ACH transfer section of the Funding via ACH API reference page.
Push program funds
Programs might occasionally have to move funds from the program funding account on the Marqeta platform to an external program account in a me-to-me transfer (money out). For example, an expense management platform might be unable to facilitate a card payment to a given vendor and needs to move funds dedicated for spend off the Marqeta platform in order to use another payment method. Send aPOST request to the /banktransfers/ach endpoint to create this kind of ACH transfer, as described in the Create ACH transfer section of the Funding via ACH API reference page. Ensure that the type field of your request is set to push. Upon successful completion of the transfer, the Marqeta platform transitions its status to COMPLETED.
Pushed payments fail if the transfer amount exceeds the available balance. The maximum allowable amount for a program funding transfer is currently $999,999.99, but might be configurable based on your program. For more information, contact your Marqeta representative.
Cancelling a recent ACH transfer
It is possible to cancel an ACH transfer, but only within a limited timeframe (i.e., before the transfer has been submitted to the ACH network). You can only cancel an ACH transfer that your program initiated. Send aPOST request to the /banktransfers/ach/transition endpoint to cancel an ACH transfer. Ensure the status field of your request is set to CANCELLED. For more information, as well as sample requests and responses, see the Create an ACH transfer transition section of the Funding via ACH API reference page.
Cancelling is only permitted for transfers currently in the PENDING state. No other states can transition to CANCELLED. The state of an ACH transfer is provided in the status field of the response. To learn the state of a transfer, either poll manually by sending a GET request to the /banktransfers/ach/{token} endpoint or set up the appropriate ACH webhook. For details on the various supported transfer states, see Viewing status updates and transitions.
Processing and viewing returned items
ACH transactions can be returned via the ACH network within the two-day RDFI return window. Items can be returned for any of the reasons listed in the reason codes table. Incoming ACH returns will be communicated to you on a daily basis, as they happen, if you set up the appropriate ACH webhook. For more information about creating webhooks, as well as sample requests and responses, see the Webhooks API reference page. In the event of a returned ACH transfer, you can reinitiate the transaction, by sending anotherPOST request to the /banktransfers/ach endpoint, as described in the Create ACH transfer section of the Funding via ACH API reference page. RETURNED is a terminal state for ACH transfers; you cannot correct and resend an existing ACH transfer in that state.
Viewing status updates and transitions
To view details of a specific ACH transfer, including its current status, send aGET request to the /banktransfers/ach/{token} endpoint. For more information, as well as sample requests and responses, see the Retrieve ACH transfer section of the Funding via ACH API reference page.
You can also subscribe to webhooks to receive a notification whenever the status of an ACH transfer changes.
The following diagram shows the status lifecycle flow for ACH transfers:
ACH webhooks
Webhooks are real-time notifications about API events, sent as they occur to the endpoint you specify. You can subscribe to webhooks for ACH origination bank transfer transition events, such as when funds post to an account. Doing so will allow you to update your implementation and keep your cardholders informed. Similarly, webhooks have been enabled for ACH transaction events to help you manage your ledger. The samplestatus.completed webhook below indicates that the specified ACH transfer completed successfully.
JSON
NACHA ACH return codes
An ACH transaction can be returned to the ODFI for any of the reasons given below. The value in the column on the left populates thereturn_code field of the create an ACH transfer transition endpoint.
For more information about return reason codes, see NACHA’s Return Reason Code Guide & NOC Booklet. https://www.nacha.org/products/return-reason-code-guide-noc-booklet
Note
The Marqeta platform only supports a subset of these return codes. For the list of return codes supported by Marqeta, see the reason code table in the ACHR Return Reason Codes Guide.
The Marqeta platform only supports a subset of these return codes. For the list of return codes supported by Marqeta, see the reason code table in the ACHR Return Reason Codes Guide.