Stripe users in the United States can receive checks directly from customers by using the Sources API—a single integration path for creating payments with any supported method. Customers must make check payments in USD only and tie them to an invoice.
Upon invoice creation, Stripe creates a source object and provides a post office (PO) box address. Stripe also provides your customer with mailing instructions on their invoices and Hosted Invoice Pages. Your customer uses the Stripe-provided invoice number and PO box address to send a check to your specific lockbox—using the US Postal Service (USPS).
After you receive the check, your integration uses the source to determine when the check has arrived. When the check clears the three-day processing period, Stripe automatically matches the mailed check to the amount owed on the invoice. Stripe then marks the corresponding invoice as paid, and charges the source automatically.
Checks are a push-based and reusable method of payment. This means that your customer must take action to send funds to you. The funds can take a few days to arrive, especially due to the mailing times associated with checks. When the funds arrive, asynchronous confirmation occurs for any charge request made due to the check clearing period.
You can activate the Checks payment method from the Dashboard. In your Payment method settings, click Request invite to the right of Checks (Beta). Stripe reviews your request and, if approved, assigns you a lockbox where your customers can mail check payments.
Enable checks as a default invoice payment method
You can configure check payments as the default payment method for all of the invoices you send to customers. In the Invoice template, select Manage and enable checks.
Accept checks on an ad hoc basis
If you want to accept checks for only a limited set of customers, you can enable check payments for a specific invoice. When you create or edit an invoice, follow these steps to allow your customers to pay with a check:
In the Invoice template, click Manage and enable checks.
During invoice creation, set the payment method to Email invoice to the customer to pay manually.
Limitations and caveats
The following requirements must be met when using checks:
- You must be based in the United States.
- Check payments must be in USD.
- Customers must mail checks through USPS. (P.O. boxes don’t accept deliveries from other couriers, such as FedEx or UPS.)
Stripe attempts to automatically reconcile every check to an invoice and pay the invoice. We use the same process as ACH and wire transfers.
If Stripe can’t automatically reconcile the check to an invoice, we notify you through email and request that you manually reconcile the check to an invoice in the Dashboard.
Settlement and returned checks
Deposited funds are held for three US business days before being added to the customer’s source and used to pay reconciled invoices. This hold is to mitigate risks associated with fraudulent checks. This hold also mitigates issues that arise from returned or bounced checks.
If a check is returned during this settlement period, the invoice won’t be paid. Ask your customer to send another check or pay the invoice with a different payment method. If a check is returned after the settlement period, any related payments are marked as disputed. No process exists for contesting returned checks, so you must work with your customer to recover the lost revenue. Unused funds are deducted from the source.
Overpayments and underpayments
An overpayment occurs when you receive an amount that exceeds the amount due. In these cases, the invoices associated with the check payment is paid, and the remaining funds are held on the source type of paper_check. You can create a charge against this source, as you would with any other source.
An underpayment occurs when you receive an amount less than the amount due. If the check is associated with multiple invoices, Stripe attempts to pay the invoices (the oldest first) until an invoice can’t be paid in full. At this point, Stripe notifies you and gives you the following options:
- Partially pay an invoice, and forgive the remaining amount.
- Refund the payment, and create a new invoice for the complete amount.
- Use the funds for another charge or invoice.
You can refund check payments through either the Payments page or the API. Stripe refunds check payments through ACH. Stripe won’t issue a check as a refund. When a refund is initiated, the customer must specify the account the funds must be returned to. We automatically contact the customer at the email address provided. After the customer provides us with their account information, we process the refund automatically.
The refund’s initial status is
pending. If the refund fails, the
charge.refund.updated event is sent, and the refund’s status transitions to
failed. This means that Stripe is unable to process the refund, and you must return the funds to your customer outside of Stripe. This is a rare occurrence, which can happen if the refund is being sent to an account that has been frozen. Refunds that have been completed have the status
Use the API
Use the Stripe API to retrieve a
source, listen for check-related actions, and test deposits.
Creating an invoice that accepts checks as a payment method triggers the creation of a customer
source type of
paper_check (if one doesn’t already exist). The receiver.address field contains the address where the customer can send a paper check. Stripe uses this data when generating the invoice PDF and for the Hosted Invoice Page. The code sample below demonstrates an API call that you can use to retrieve a source:
You can use webhooks to listen for certain checks-related actions. These events are only sent if a check has been reconciled to an invoice. Stripe doesn’t yet support sending events for reconciliation failure.
|Reconciliation failed||The |
|Returned||The check bounced and has been returned.|
|Returned (before settlement)||The |
|Returned (after settlement)||Expand |
The following table outlines the paper checks endpoints:
|GET /v1/paper_checks/:id||Get a list of all paper checks|
|GET /v1/paper_checks/:id||Get a paper check’s details|
|POST /v1/paper_checks/:id/reconcile||Reconcile a paper check|
Stripe doesn’t offer lockboxes for testing mailed checks. However, you can test successful deposits by generating source transactions on test mode sources. This example creates a
SourceTransaction for the specified source, with the
amount property set to