Going live
Before we issue live keys, we review a run of your integration in the sandbox against this checklist. Work through it, then send it to support. The review takes about 2 business days.
Available at launch
Checklist#
Each item links to the guide that explains it. We check every one in the review.
Credentials#
- The secret key lives only on your server, in a secrets manager or environment variable. It isn't in your app binary, your web bundle, your logs or your repo. See Authentication.
- Your app gets member tokens from your server, which checks the guest's own session before calling
POST /v1/member_tokens. - Your app handles
401 token_expiredby asking your server for a new token and retrying once. - Sign out forgets the token and removes the device with
DELETE /v1/members/me/devices/{device_id}. - You know how to rotate a key and who emails support if one leaks.
Members#
- Sign-up creates the member with your user id as
external_id, and you store the returned memberid. See Members and sign-in. - You send
phone_verified: trueonly for phone numbers you verified by SMS code. - Your app has an in-app account deletion option that calls
DELETE /v1/members/me(or your server callsDELETE /v1/members/{id}). Apple and Google both require it.
Checkout and orders#
- You show only rewards and codes from the preview's
applicablelist as tappable, and show themessagefor the rest. See Checkout and orders. - Every value-moving call sends an
Idempotency-Key:POST /v1/members,/v1/redemptions,/v1/orders,/v1/orders/{id}/refundsand/v1/members/{id}/points_adjustments. Retries reuse the same key. - Every order carries your own
external_order_id, the same one you use in your order system. - You post the order after payment is captured, not before.
- Abandoned checkouts cancel their redemption with
POST /v1/redemptions/{id}/cancel. - You handle a redemption that expired before payment finished.
- Refunds and partial refunds in your order system call
POST /v1/orders/{id}/refunds.
Webhooks#
- Your endpoint verifies
webhook-signatureagainst the raw body, rejects timestamps more than 5 minutes off, and compares in constant time. See Webhooks. - It dedupes on
webhook-id, answers 2xx within 10 seconds and processes the event afterwards. - It doesn't assume events arrive in order.
Push and in-app#
- Support has your production Firebase and APNs credentials, bundle id, package name, deep link scheme and link domain. See Push and in-app messages.
- Your app registers its device on every start and when the token, permission or signed-in member changes.
- Your app reads the push payload keys, creates the Android channels
marketingandtransactional, and ships the iOS Notification Service Extension. - In-app messages never show during checkout.
Errors and limits#
- You retry
429and5xxwith backoff and the same Idempotency-Key, honorRetry-After, and don't retry other4xxerrors. See Errors. - You log the
Request-Idheader of every failed call. - Your peak traffic fits the rate limits: 50 requests a second per secret key, 10 per member token, and 20 previews a second per key. If not, ask support for more before launch.
- Checkout still works if the loyalty API is down: the guest can pay without a reward, and you post the order once the API is back.
Run the sandbox test#
We review a real run in your sandbox brand, so do one end to end from your app or website on the build you plan to ship:
- Sign up a new guest. Use a test phone number from
+15005550100to+15005550199. - Place an order with a reward or a code. Preview, redeem, pay, and post the order.
- Refund part of that order. Then refund the rest.
- Abandon a checkout after choosing a reward, so we see the cancel.
- Delete the account from inside the app.
Write down the Request-Id of each step and the external_order_id values you used.
Send it to support#
Email support@unplugdining.com with the subject "Go-live: your brand name" and include:
- This checklist, with any item you skipped and why.
- Your sandbox brand name and the Request-Ids and order ids from your test run.
- Your planned launch date and the platforms launching (iOS, Android, web).
- Your technical contact for production, and a second person for security notices.
- Server egress IPs, if you want an IP allowlist on the live key.
What happens next#
- We review your run. About 2 business days. If something needs fixing, we reply with the item and the Request-Id that showed it.
- We issue live keys. You get a
uk_live_key forhttps://api.unplugdining.com/v1, with the scopes you asked for. - You set up production. Register your production webhook endpoint with the live key and confirm it with
POST /v1/webhook_endpoints/{id}/test. Map your production location ids fromGET /v1/locations. - You launch. Guests who already earn at your registers are linked when they sign up with a verified phone, so their points are waiting.
Warning Live keys move real points and rewards. Never point a test script or a load test at production.