Skip to content

Integrations & API

Every way an order reaches the board.

Three ways in, and you can use any mix. Any register works today with two-second manual entry. Square connects in a few clicks. And anything that can make an HTTP request can post an order directly.

MANUALLive

Manual entry on any register

Lightspeed, Shopify POS, a cash drawer: it doesn't matter. Staff add each order on the same phone they use to mark it ready. Name, ticket number or automatic daily number.

See manual entry →

CONNECTSquareAvailable now

Square

Connect once from your dashboard through Square's standard authorization. Every eligible order lands on the board the moment it's rung up, with the customer name and items. Any Square account; no Restaurants plan, no KDS.

Multiple locations route to their own boards. Square texts vs a board →

CONNECTCloverToastComing soon

Clover and Toast

Direct connections are in progress. Until they ship, shops on Clover or Toast run the board with manual entry: type a name or ticket number, press Enter, two seconds.

Tell us your register and you'll hear first when it's live.

For your developer

One POST puts an order on the board.

Your website, a kiosk, a spreadsheet with a Zapier automation. Send a name or ticket number and it appears instantly. Staff mark it ready like any other order.

EndpointPOST https://pickupsignal.com/api/ingest-order
AuthAuthorization: Bearer psk_your_key
KeyDashboard → Order sources → Custom integration → Generate key. Shown once; a new key replaces the old one immediately.
Limit60 requests/minute per shop. Over it: 429 with Retry-After: 30.

Request

curl -X POST https://pickupsignal.com/api/ingest-order \
  -H "Authorization: Bearer psk_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
        "shopId": "your-shop-id",
        "name":   "Priya",
        "drink":  "Taro Milk Tea",
        "source": "online",
        "id":     "order-47"
      }'

Response · 200

{"num": 47, "orderId": "i2a91cf6b8d4e4a2b9f7d3c1a5e6b8f90"}

Numbers-only board? Send ticket (0–999999) instead of name.

Fields, errors, retries.

Every body needs shopId and at least one of name or ticket. Everything else is optional.

Idempotency. Send id and the same order can never be created twice: a repeat on the same business day returns the original. Zapier and Make retry webhooks automatically, so map id to something unique from your trigger.

FieldTypeNotes
shopIdstringRequired. Shown next to your key in the Custom integration panel.
namestringName or ticket required. Up to 120 characters; whitespace collapsed.
ticketinteger0–999999. For numbered boards. If both are sent the ticket wins for numbering; the name is kept.
drinkstringOptional, up to 120 characters. Shown beside the name or ticket.
idstringRecommended, up to 128 characters. Your unique reference; makes retries safe.
sourcestringinstore, online or app. Defaults to online.
CodeErrorMeaning
200createdReturns num (board number) and orderId.
400invalid-bodyMissing shopId, or neither name nor ticket.
401unauthorizedBad or missing key. Regenerate from the dashboard.
405method-not-allowedSomething other than POST.
429rate limitedOver 60/minute for this shop. Wait the Retry-After seconds.
500service-unavailableRetry later. Do not regenerate your key; a 500 is on our side.

A Zapier or Make recipe, no code needed.

  1. 1TriggerA new row, a new online order, a new form submission.
  2. 2ActionWebhooks by Zapier or Make's HTTP module, POST to the endpoint.
  3. 3HeadersAuthorization: Bearer psk_… and Content-Type: application/json.
  4. 4Map fieldsshopId, name or ticket, and id from something unique in the trigger.
  5. 5Test safelySend "Test Order" once, watch it land, remove it from the staff page, then switch it on.

Your key is two clicks away.

Start free, open Order sources, generate a key. Or connect Square and skip the code entirely.

Start 30 days freeAsk Tien firstNo card · $19.99/mo per location after