Square Terminal Gateway
The Square Terminal gateway lets you collect WooCommerce order payments on Square Terminal hardware directly from WCPOS. A payment is requested from WooCommerce and completed on a paired Square Terminal device, and the result is written back to the order.
Features
Hardware Integration
Send payments to paired Square Terminal devices and collect card-present payments
Easy Pairing
Pair terminals from WooCommerce using a short-lived Square Device Code
Webhook-Confirmed
Verified Square webhooks confirm completion, with live status while you wait
Secure Transactions
PCI-compliant, card-present processing handled on Square hardware
Sandbox & Production
Validate against the Square Sandbox before switching to live payments
How It Works
Unlike browser-SDK gateways, Square Terminal uses Square's server-side Terminal API. When you start a payment, WooCommerce creates a Terminal Checkout for the order and Square pushes it to the paired device. The customer pays on the terminal, and Square notifies your site with a signed webhook. The webhook is the authoritative completion signal; the POS also polls so the status updates while you wait.
This means the Square Terminal device must be online and signed in to the same Square account and location, and your site must be publicly reachable over HTTPS so Square can deliver webhooks.
Installation
Install Square Terminal for WooCommerce
Install from WP Admin > POS > Settings > Extensions, or download the latest plugin zip asset (not the GitHub source-code zip or tarball) from the GitHub releases page and upload it via Plugins > Add New > Upload Plugin.
Configure Square Settings
- Navigate to
WP Admin > WooCommerce > Settings > Payments - Find Square Terminal in the payment methods list and click it to open the settings
- Choose the Environment (
Sandboxfor testing,Productionfor live payments) - Enter your Access Token for the selected environment (Sandbox or Production), available from the Square Developer Dashboard
- Enter your Location ID — the Square location where Terminal payments are taken
- Enter your Webhook Signature Key and Webhook Notification URL (see the next step)
- Click Validate Settings to confirm the credentials work, then save
You do not need to enable the Square Terminal gateway in WooCommerce settings. It will be enabled specifically for the POS in a later step.
Set Up Webhooks in Square
Square sends a signed webhook when a Terminal payment finishes, and this is what marks the order as paid.
- In the Square Developer Dashboard, open your application and go to the Webhooks section
- Add a subscription for the
terminal.checkout.updatedevent - Set the notification URL to the Webhook Notification URL shown in the plugin settings — it must match exactly
- Copy the Webhook Signature Key into the plugin settings so incoming events can be verified
The Webhook Notification URL in Square must exactly match the value in the plugin settings, and the Webhook Signature Key must be correct. If they don't match, Square payments will complete on the device but the WooCommerce order will not update.
Pair Your Square Terminal
- On the same settings page, click Create Device Code
- A pairing code is generated and shown to you
- On your Square Terminal, sign in and enter the code on the device-pairing screen
- Once paired, the terminal is linked to your configured location. Note its Device ID — you'll enter this when taking a payment
The terminal must be successfully paired and online before you can process payments. Make sure pairing is complete before proceeding.
Enable in WCPOS
- Go to
WP Admin > POS > Settings > Checkout - Find the Square Terminal gateway in the list
- Enable the gateway for use in the POS
- Save your settings
Usage
Processing Payments
- Add Items: Add products to your cart in the POS
- Select Gateway: Choose "Square Terminal" as the payment method
- Choose Device: Enter the Terminal Device ID of the paired terminal that should take the payment
- Start Payment: Click Start Payment — Square pushes the checkout to the device
- Customer Payment: The customer taps, inserts, or swipes their card on the Square Terminal
- Automatic Completion: When Square's verified webhook confirms the payment, the order is marked paid. The live status updates while you wait.
Payment Controls
When using the Square Terminal gateway, you have the following options:
- Start Payment: Send a new payment request to the selected terminal
- Cancel Payment: Cancel a payment that is currently in progress on the terminal
- Payment Status: A live status area shows the current state of the payment
- Payment Log: A per-order log records each meaningful Square step and outcome
Order Management
- Webhook-Authoritative Completion: Orders are marked paid only when a verified Square webhook confirms the Terminal payment
- Payment Tracking: Square identifiers and a payment log are stored on the order, and key steps are written to order notes
- Receipt Generation: Standard POS receipts are generated after successful payments
Requirements
Hardware Compatibility
Square Terminal uses Square's server-side Terminal API: the checkout is created by your site and delivered to the paired device by Square. The terminal must be online and signed in to the same Square account and location, and your site must receive Square webhooks over HTTPS for orders to update.
Supported Terminals
- Square Terminal ✅ — Square's dedicated countertop card terminal
Scope & Limitations
- This early release is focused on POS / order-pay flows. Availability on the customer-facing storefront checkout is off by default and must be explicitly enabled.
- It collects payments only — refunds are not yet supported. Square identifiers are stored on the order so refund support can be added later.
Troubleshooting
Common Issues
Device won't pair
- Make sure you entered the Device Code before it expired — generate a fresh one with Create Device Code if needed
- Confirm the terminal is online and signed in to the same Square account and Location ID as the plugin
- Check that the Environment (Sandbox/Production) and Access Token match the account the terminal is signed in to
Validate Settings fails
- Verify the Access Token matches the selected Environment (a Sandbox token won't work in Production, and vice versa)
- Confirm the Location ID belongs to that account
- Re-copy the token from the Square Developer Dashboard in case of stray characters
Payment completes on the terminal but the order doesn't update
- The Webhook Notification URL in Square must match the plugin setting exactly
- Make sure the
terminal.checkout.updatedevent is subscribed in the Square Developer Dashboard - Confirm the Webhook Signature Key in the plugin matches the one in Square
- Ensure your site is publicly reachable over HTTPS; check webhook delivery attempts in the Square Dashboard
Payment won't start
- Confirm a valid Terminal Device ID is entered and the device is paired and online
- Check that the device is signed in to the configured Location ID
- Review the Payment Log and WordPress error logs for Square API messages
Getting Help
For technical support:
- Visit the GitHub repository to report issues
- Check the Square Terminal API documentation for hardware and API guidance
- Contact Square support for account and hardware issues
Screenshots
Screenshots will be added in a future update to show:
- Square credentials, webhook, and device-pairing configuration
- Gateway enablement in WCPOS settings
- Payment processing workflow in the POS checkout