Hello Square Developer Team,
I’m developing Carlin’s Garden, a web-based point-of-sale system for a small family bakery.
Our Register integrates with the existing Square Point of Sale app on an iPhone using the square-commerce-v1://payment/create URL scheme.
The intended workflow is:
-
Our web Register creates a sale and opens the Square app with the payment amount.
-
The customer completes payment using Tap to Pay on iPhone or another supported card payment method.
-
Square returns to our website through a callback URL.
-
Our backend verifies the Square transaction and marks the sale as paid.
-
The cashier proceeds to the next customer.
We’ve experienced an occasional problem where Square appears to process the payment successfully, but our Register becomes stuck during the return/confirmation process.
We’re improving our payment recovery and duplicate-charge protections, but we need clarification about how Square handles previously issued POS API deep links.
Our questions:
1. Deep-link reuse after payment
If a square-commerce-v1://payment/create URL has already been used to complete a successful payment, can that exact same URL be opened again and initiate another payment?
Or does Square automatically prevent it from being reused?
2. Request ID and duplicate-payment protection
Does the POS API’s request_id provide any Square-enforced idempotency or replay protection?
For example, if the same request_id and payment deep link are submitted twice, will Square prevent a second charge?
Or is request_id only intended to correlate the original request with the callback response?
3. Expiration or invalidation
Do POS API payment deep links have a documented expiration or single-use guarantee?
Is there any supported method to invalidate an issued payment URL?
4. Cancelled or interrupted payments
If the cashier opens Square but cancels the payment, closes the app, loses internet connectivity, or never returns to our Register, how can our application authoritatively determine that the previous deep link can no longer initiate a charge?
5. Payment verification and recovery
If Square successfully processes the card but the callback is lost or our website fails to restore correctly, what is the recommended way to identify and recover that completed payment without initiating another charge?
6. Consecutive customer transactions
What is Square’s recommended integration pattern for a mobile-web Register that needs to process multiple consecutive payments throughout the day?
We want the cashier to complete one payment and safely begin the next transaction without older payment links creating a duplicate-charge risk.
Our backend independently verifies payment status and transaction identity, but successful verification alone doesn’t necessarily establish whether an older payment link remains usable.
We’re specifically asking about the Square Point of Sale API for iOS, not the Online Checkout Payment Links API.
Could someone from the Square Developer team clarify the provider-enforced behavior of these POS deep links, especially regarding request_id, replay protection, and their lifecycle after payment completion or cancellation?
Any official documentation or recommended implementation guidance would be greatly appreciated.
Thank you!