Skip to content

A till or POS

Look a customer up by phone, issue a voucher, confirm it at the counter.

Updated 2026-09-22

A counter or phone-order till has no cart integration and often no email — just a customer standing there with a phone number. This recipe needs a key with the read and act scopes.

1. Look the customer up

Any member id in the API accepts phone:<number>, so a till never needs to store our ids (URL-encode the + as %2B; the number is matched in E.164 form):

By phone
curl https://stickytier.com/v1/members/phone:%2B919876543210 \
  -H "Authorization: Bearer $KEY"

Show balances.spendable_cents (the amount usable now) and tier.name. A 404 means they are not a member yet — offer to enrol them:

Enrol at the counter
curl -X POST https://stickytier.com/v1/members \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -H "Idempotency-Key: till-7-enrol-919876543210" \
  -d '{ "phone": "+919876543210", "email": "asked@example.com", "accepted_terms_version": "2026-01" }'

If you cannot collect an email, use POST /v1/members/resolve with just the phone: it creates a prospect who accrues points and can complete registration later on the rewards page.

2. Redeem: issue a voucher

The voucher flow fits a till because the debit happens immediately and the code can be printed or read aloud:

Issue
curl -X POST https://stickytier.com/v1/members/phone:%2B919876543210/redemptions \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -H "Idempotency-Key: till-7-sale-88213" \
  -d '{ "amount_cents": 20000 }'
Response
{ "data": { "id": "RD-…", "code": "RWD-7K2M-Q9XA", "amount_cents": 20000, "status": "created", "mode": "voucher", "expires_at": "…" } }

Apply ₹200 to the sale. If the API answers 422 balance-insufficient or 422 rule-ineligible, ask for a quote first — POST /v1/redemption-quotes returns the allowed range for that customer and cart.

3. Confirm when the sale completes — or void

Confirm
curl -X POST https://stickytier.com/v1/redemptions/RD-…/confirm \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{ "order_ref": "TILL7-88213" }'

If the customer walks away, POST /v1/redemptions/RD-…/void returns the points. An issued voucher you never confirm returns its points itself when it expires, so a crashed till costs the customer nothing.

4. Earn on the sale

Send the sale as an order so the customer earns on it, identified by phone:

order.paid
curl -X POST https://stickytier.com/v1/events \
  -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{ "type": "order.paid", "order_ref": "TILL7-88213", "gross_cents": 149900,
        "customer": { "phone": "+919876543210" }, "occurred_at": "2026-09-22T10:31:00Z" }'

Send gross_cents as the amount the customer actually paid after the voucher; earning is computed from it by the programme's rules, not by the till.

A printed voucher from somewhere else

A code on paper, issued by the web store, presented at the counter: GET /v1/redemptions?code=RWD-7K2M-Q9XA tells you whether it is valid, for how much and for whom. Confirm it the same way.

A till or POS — StickyTier API