Applies to: Checkout API | Orders API | Payments API
This guide addresses the most common issues developers encounter when implementing the Checkout API, particularly around payment link behavior, Dashboard visibility, and order management.
Important
Payment links created through the Square Dashboard and those created via the Checkout API behave very differently. Mixing up these two types is a common source of confusion.
| Creation Method | URL Pattern | Reusability | Dashboard Visible |
|---|---|---|---|
| Square Dashboard | /checkout/{CHECKOUT_ID} | Multiple uses | ✅ Yes |
| Checkout API | /order/{ORDER_ID} | Single use only | ❌ No |
- Customer confusion: Expecting API links to work multiple times leads to failed payments
- Seller confusion: Sellers looking for API-generated links in Dashboard won't find them
- Integration issues: Treating these as interchangeable breaks payment flows
API-generated payment links (CreatePaymentLink) are single-use only. After successful payment, the link shows a thank you page and cannot process another payment.
- Create a new payment link for each transaction
- Never share the same API-generated link with multiple customers
- If you need reusable links, direct sellers to create them via Square Dashboard
Sellers expect to see all payment links in their Square Dashboard, but API-generated links are never visible there by design.
Build your own management interface if sellers need to:
- View active payment links
- Track payment link usage
- Cancel unused links
- API links are meant for programmatic, one-time transactions
- Showing thousands of single-use links would clutter the Dashboard
- Dashboard links serve a different purpose (reusable, seller-managed)
Common pitfall #3: Orders stuck in OPEN status
Orders with fulfillments created via payment links remain in OPEN status even after successful payment. They never automatically transition to COMPLETED.
- Customer pays successfully → Payment status:
COMPLETED✅ - Order status remains:
OPEN⚠️ - Fulfillment cannot be updated programmatically ❌
Current Limitation: Orders must be manually completed in Square Dashboard's Orders Manager.
Workaround options:
- Educate sellers: Train them to manually complete orders in Orders Manager
- Track separately: Maintain order completion status in your own system
Note
This is a known limitation. Square currently doesn't support programmatic fulfillment updates for DIGITAL type fulfillments created through payment links.
Deleting payment links has different effects depending on timing, which can lead to unintended data loss or orphaned orders.
| When Deleted | Payment Link | Order Status | Payment | Use Case |
|---|---|---|---|---|
| Before payment | Deleted | CANCELED | None exists | Abandon cart cleanup |
| After payment | Deleted | OPEN | COMPLETED | Clean up used links |
When orders created from payment links don't include customer_id, it's hard to associate orders with customers.
- Check for customer ID on order
- If not on order, retrieve associated payment
- Read customer ID on payment
| Feature | Square Dashboard | Checkout API |
|---|---|---|
| Link Reusability | ✅ Multiple uses | ❌ Single use only |
| Creation Method | Manual via UI | Programmatic via API |
| Dashboard Visibility | ✅ Fully visible | ❌ Never visible |
| Best For | Reusable products, donations | Dynamic orders, sessions |
| Fulfillment Updates | ✅ Supported | ⚠️ Manual only |
If your integration isn't working as expected, follow these debugging steps to find the most likely cause:
- Check the URL pattern - Is it
/checkout(Dashboard) or/order(API)? - Verify single use - Has this payment link already been used?
- Check Dashboard expectations - Are you looking for API links in Dashboard?
- Review order status - Are you expecting automatic completion with fulfillments?
- Examine deletion timing - Are you deleting before or after payment?
✅ DO:
- Create new payment links for each transaction
- Build your own tracking system for API-generated links
- Handle order completion manually or track separately
- Delete payment links after successful payment (if desired)
- Retrieve customer info from payments, not orders
❌ DON'T:
- Expect API payment links to be reusable
- Look for API links in Square Dashboard
- Expect orders with fulfillments to auto-complete
- Assume Dashboard and API links work the same way
Warning
If you delete a payment link while a buyer is actively completing checkout, they will receive an error message and cannot complete their payment. The underlying order is automatically canceled.
- Checkout API Overview - Complete API introduction
- Manage Checkout - CRUD operations for payment links
- Square Order Checkout - Working with orders
- Guidelines and Limitations - Complete limitations reference