Skip to content
AXOWLDevelopers
Quickstart

Guest order lookup

Many stores let people order without signing up and later look the order up with order number + email or order number + mobile number. Guest order lookup adds that form to your hosted login page. Axowl proves the shopper owns the email or phone; your app decides whether that contact placed that order.

  • No account is created. The shopper does not become an end user and does not count toward MAU.
  • Axowl stores no order data. The order number and contact live in a short-lived link or code (10 min email, 5 min text, 90 s hand-off), nothing else.
  • Plan: Pro+ and above. On a lower plan the switch cannot be turned on, and if you downgrade the form disappears on its own (your saved setting comes back when you upgrade).
  • Texts cost credit. Each code sent by text is charged at the SMS rate to your organization’s prepaid credit. Email is free.

Dashboard → Applications → your app group → Login methods → Guest order lookup.

Then link to the hosted login page with the page that should show the order as redirect_url. That URL must be one of the application’s Callback URLs — without it the form stays hidden, because there is nowhere to send the result.

https://login.axowl.com/login/{applicationKey}?redirect_url=https://shop.example.com/orders/guest

By email

  1. The shopper enters the order number and email on the hosted login page.
  2. Axowl emails a link (valid 10 minutes, single use), branded with your app name.
  3. The link opens the portal, which trades it for a one-time code and sends the shopper to redirect_url?guest_order_code=….

By text

  1. The shopper enters the order number and mobile number (Korean local numbers like 010-… are accepted; others need +country).
  2. Axowl texts a 6-digit code (valid 5 minutes) from your app name. US and Canadian numbers get “Reply STOP to opt out.”
  3. The shopper types the code on the same page; the portal sends them to redirect_url?guest_order_code=….

Then, either way

  1. Your server exchanges the code and gets back the confirmed contact and the order number. Do it in the request that receives ?guest_order_code= — the code lives 90 seconds and works once — then redirect to a clean URL so the code does not stay in browser history or leak through Referer.
  2. Look the order up in your own database. Show it only if the order’s email (or phone) matches.

Endpoints — /api/public/apps/{applicationKey}/guest-order

Section titled “Endpoints — /api/public/apps/{applicationKey}/guest-order”
Method · RouteCalled byPurpose
POST /sendHosted portalEmail the confirmation link
POST /verifyHosted portalLink token → one-time code (90 s)
POST /sms/sendHosted portalText a 6-digit code → { requestId } (billed per message)
POST /sms/verifyHosted portal{ requestId, code } → one-time code (90 s). 5 wrong tries ends the request
POST /exchangeYour serverOne-time code → result below (single use)
FieldMeaning
emailWhere the link is sent.
orderNumberWhat the shopper typed, up to 64 characters. Shown in the email. Not checked by Axowl.
redirectUrlWhere the link lands — the portal’s /login/{applicationKey}/verify route. Same rules as magic link.
postSignInRedirectUrlYour order page. Must match a registered Callback URL (exact or same origin).
turnstileTokenCloudflare Turnstile token when bot protection is on.
FieldMeaning
phoneE.164 (+821012345678) or a Korean local number (010-1234-5678). Only supported countries.
orderNumberAs above. Not included in the text.
turnstileTokenCloudflare Turnstile token when bot protection is on.
Terminal window
curl -X POST https://api.axowl.com/api/public/apps/$APP_KEY/guest-order/exchange \
-H 'Content-Type: application/json' \
-d '{"code":"<guest_order_code from the query string>"}'
{ "email": "[email protected]", "phone": null, "channel": "email", "orderNumber": "20261021-0042", "applicationKey": "client_…", "verifiedAt": "2026-10-21T09:12:03Z" }

channel is email or sms. Exactly one of email / phone (E.164) is filled.

Status · codeWhen
400 GUEST_ORDER_DISABLEDSwitch is off, or the org is below Pro+
400 INVALID_EMAIL / INVALID_PHONE / INVALID_ORDER_NUMBEREmpty, too long, unreadable, or control characters
400 SMS_REGION_NOT_SUPPORTEDThe number’s country is not on the SMS list
400 TURNSTILE_REQUIREDBot protection is on and the token is missing or failed
400 GUEST_ORDER_WAITSame email or phone asked within the last minute
429 GUEST_ORDER_THROTTLEDToo many requests from one IP (5 per 10 min, 20 per day), one app group (120 per 10 min), or one phone (5 per day; fewer for higher-risk countries)
502 SMS_SEND_FAILEDThe text could not be sent — including when the organization’s credit is empty (the owner gets an email)
400 GUEST_ORDER_CODE_INCORRECTWrong text code — attemptsLeft says how many tries remain
400 GUEST_ORDER_CODE_EXPIREDText code expired or used up — request a new one
400 on /verifyLink expired, already used, or issued for another application — the shopper requests a new one
404Unknown applicationKey
401 on /exchangeCode expired (90 s), already used, or for another app
429 GUEST_ORDER_THROTTLED on /exchangeMore than 600 exchange calls from one server IP in 10 minutes