Cash
How to record cash payments with PCE for reporting and reconciliation.
Cash is a supported tender type in the Checkout API. It doesn’t move money through a processor, but it lets merchants record cash payments in PCE so that reports and balances reflect all the ways customers pay in-store.
Prerequisites and limitations
- Prerequisites: Access to the PCE
/paymentAPI and a merchant account configured for Checkout. - Limitations: Cash transactions are for reporting and reconciliation only. PCE does not deposit cash into the merchant’s bank account — the merchant must handle the physical cash and bank deposits manually.
When to Use Cash Payments
Cash tender is useful when:
- Merchants want to offer additional payment methods, including cash, alongside cards and ACH.
- The business wants a single view of all tender types in reports (for example, card, ACH, cash) for end-of-day reconciliation.
- Staff are taking in-person payments and need to log cash sales in the same POS or virtual terminal workflow as card payments.
Even if most customers pay with cards, having a Cash tender type available ensures the merchant can capture all payment types cleanly in PCE.
Things to Keep in Mind
- Reporting-only tender: Cash payments recorded via the API don’t trigger any settlement. The merchant must physically deposit the cash to their bank.
- Cleaner reconciliation: Using Cash tender in PCE helps keep totals aligned between drawer counts, PCE reports, and accounting records.
- Simple payload:
Cash payments don’t require card or bank details — just core fields like
merchantId,tenderType, andamount.
Make a Cash Payment Request
Cash transactions are created by posting to the /payment endpoint with tenderType set to "Cash".
Endpoint
| Method | Path | Description |
|---|---|---|
| POST | /payment | Record a new cash sale/payment. |
Steps
-
Set up the HTTP request
- Use the
POSTmethod. - Call the
/paymentendpoint in the appropriate environment (sandbox or production).
- Use the
-
Add authentication and headers
-
Send your username and password in the
Authorizationheader using Basic auth.- Encode
username:passwordas Base-64 and prefix withBasic.
- Encode
-
Set the
Content-Typeheader toapplication/json.
-
-
Send a cash payment payload
Use a minimal JSON body like this:
{ "merchantId": "4xxx0", "tenderType": "Cash", "amount": "0.01" }merchantId: Your merchant identifier.tenderType: Set to"Cash".amount: The cash amount collected from the customer.
-
Verify the response
- A successful cash transaction returns HTTP 201 Created.
- The payment object’s
statusfield should beApprovedwhen the record is created successfully.
Updated about 1 month ago