Stripe users in the United States can receive checks directly from customers using Sources—a single integration path for creating payments using any supported method. Customers can make check payments using USD only, and they must be tied to an invoice.
Upon invoice creation, a source object is created, and your customer is provided with a post office (P.O.) box address and mailing instructions on their invoices and hosted invoice pages. Your customer uses the invoice number and P.O. box address to write and send by mail using the USPS (U.S. Postal Service) a check to your specific lockbox.
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 sent 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.
Limitations and caveats
The following requirements must be met when using checks:
- You must be based in the United States.
- Checks payments must be in USD.
- Customers should mail checks via USPS. P.O. boxes don’t accept deliveries from other couriers, such as FedEx or UPS.
You can activate the Checks payment method from the Dashboard. Click the button beside Checks to request a beta invite. Stripe will review your request and, if approved, we’ll assign you a lockbox where your customers can mail Check payments.
Enabling checks as a default invoice payment method
You can configure check payments as a default payment method for all invoices sent to customers for manual payment. To do so, in the Dashboard’s Invoice template settings, click Manage and enable checks.
Accepting checks on an ad-hoc basis
If you want to accept checks for only a limited set of your customers, you can enable check payments for a specific invoice. When creating or editing the invoice, follow these steps to allow your customers to pay via check:
- Set the Billing method to Email invoice to the customer to pay manually.
- Click Manage and enable checks.
Stripe attempts to automatically reconcile every check to an invoice and pay the invoice. We use the same process for ACH and wire transfers, however the
type of the source is
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 U.S. 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 the amount received exceeds the amount due. In these cases, the invoices associated with the check payment is paid, and the remaining funds are held on a source of type
paper_check. You can create a charge against this source, as you would with any other source.
An underpayment occurs when the amount received is less than the amount due. If the check is associated with multiple invoices, Stripe attempts to pay the invoices—oldest first—until an invoice can’t be paid in full. Stripe then notifies you, at which point you can do one of the following:
- 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 Dashboard or the API. Check payments are refunded via ACH. Stripe won’t issue a check as a refund. When a refund is initiated, the customer must specify the account the funds should be returned to. Stripe automatically contacts 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
Creating an invoice that accepts Checks as a payment method triggers the creation of a customer source of type
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 rendering the invoice PDF and 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: deposit, settlement, and bounce or return. 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||paper_check.automatic_reconciliation_failed||The |
|Returned (before settlement)||source.transaction.updated||The |
|Returned (after settlement)||charge.dispute.created||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