Guides · Square
Get a Mac notification for every Square payment
Square posts an event the moment a card is taken at the counter, an online order is paid, an invoice is settled or a refund goes out. Point a webhook subscription at EventBar and each one pops up in your menu bar, with today's count of sales a glance away.
Needs: the free EventBar app on your Mac, an EventBar account, and a Square seller account and an application in the free Square Developer Console, where Square's webhooks live. About five minutes. Square preset, signature verified.
Steps
- Create the webhook URL. In the EventBar dashboard, open the Webhooks tab, pick the group this belongs to (one group per site or app is the usual shape), choose the provider Square, name it, and press Create. Copy the URL; it stays visible and can be rotated any time.
- Paste it into Square. In the Square Developer Console: open your application, choose Production at the top (Sandbox for a dry run), then Webhooks, then Subscriptions, then Add subscription. Give it a name, paste the URL exactly as EventBar shows it, and tick
payment.created,refund.created,invoice.payment_madeor whatever you want to hear about. Save, open the subscription, press Show under Signature Key and paste the key into the hook card in EventBar. Send test event on the same page is the quickest first delivery. - Trigger one. Most services offer a test delivery; otherwise do the real thing once. It shows up in the dashboard's Events tab within a second and in the menu bar, as an undefined type named after the event. That first one is your proof the wiring works.
- Make it read well. Press Define on the new type and give it a title and a body template. Fields come from the payload, nested ones with dots. The table below is a starting point.
This preset is on Plus and Pro. Free can do the same with a Generic JSON hook and a type field of type, without the signature check.
What you'll see
| Type | Title | Body template |
|---|---|---|
payment.created | Payment | {data.object.payment.amount_money.amount} {data.object.payment.amount_money.currency} · {data.object.payment.source_type} |
refund.created | Refund | {data.object.refund.amount_money.amount} {data.object.refund.amount_money.currency} |
invoice.payment_made | Invoice paid | {data.object.invoice.invoice_number} · {data.object.invoice.title} · {data.object.invoice.primary_recipient.email_address} |
customer.created | New customer | {data.object.customer.given_name} {data.object.customer.family_name} · {data.object.customer.email_address} |
Every type has its own switch in the menu bar, so a noisy one can be quiet on this Mac and still counted. Counts cover the last hour, 24 hours, 7 days, 30 days and all time.
Worth knowing
- Amounts are in the smallest unit (
1000is 10.00 USD), as Square sends them; a template can't divide. payment.createdfires once per payment.payment.updatedfires again each time the payment moves (approved, then completed, for instance), so leave it unticked or mute it from the menu bar if you only want one notification per sale.- Square signs the notification URL together with the body (
x-square-hmacsha256-signature, a base64 HMAC-SHA256 with the subscription's signature key). Paste the URL exactly as EventBar shows it, with no trailing slash; if you rotate it in EventBar, update the subscription's URL in Square too. - Sandbox and Production are separate subscriptions with separate signature keys. Make two hooks in two groups if you want both. Duplicates are dropped by
event_id, so Square's retries (for up to 24 hours) never count twice.
The full contract, including how each preset reads a payload and what the answers mean, is in the API docs. Something about Square's payload changed? Tell us and we'll fix the guide.