Cashier — Finding or registering a participant
Two global routes (wallet-control-api), with no eventId because
identity is global — balance/wallet live in the region:
| Endpoint | What it does |
|---|---|
GET /v1/cashier/participants/by-phone/{phone} | Read-only lookup, never creates anything. 404 PARTICIPANT_NOT_FOUND if the phone has no profile yet. |
POST /v1/cashier/participants | Finds or creates by phone. If new, creates the profile without auth_user_id (they haven't installed the app or confirmed an OTP yet — that happens later, automatically, the first time they confirm an OTP for the same phone). Always returns an activationAuthorization: a signed, single-use authorization valid only for this participant and the cashier's event. |
- curl
- JavaScript
- Python
curl -X POST http://127.0.0.1:8787/v1/cashier/participants \
-H "Authorization: Bearer <cashier accessToken>" \
-H "Content-Type: application/json" \
-d '{ "phone": "+5511999999999" }'
const response = await fetch("http://127.0.0.1:8787/v1/cashier/participants", {
method: "POST",
headers: {
Authorization: `Bearer ${cashierAccessToken}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ phone: "+5511999999999" }),
});
const { userId, displayName, profileComplete, activationAuthorization } = await response.json();
import requests
response = requests.post(
"http://127.0.0.1:8787/v1/cashier/participants",
headers={"Authorization": f"Bearer {cashier_access_token}"},
json={"phone": "+5511999999999"},
)
participant = response.json()