Upsert a partner user
Idempotently provisions or updates a consumer from the partner backend. Keyed by (partner_id, externalUserId). If the user was previously anonymised via DELETE, calling this again revives the row and clears anonymizedAt. PII fields that are omitted are left unchanged; passing an explicit null clears them.
Authorizations
Stripe-style HMAC signature over ${timestamp}.${rawBody} using your partner secret. Format: t=<unix-seconds>,v1=<hex-hmac-sha256>. Also requires the x-partner-slug header to identify your account.
Headers
Your partner slug, assigned at onboarding (e.g. acme).
Body
Your stable identifier for this user (typically your DB primary key). Treated as opaque — we never decode it. Used as the JWT sub claim and in every outbound webhook payload to link your records to ours.
1 - 255User email. Pass null to clear; omit to leave unchanged.
320Shown in our admin views and (absent a JWT override) in the webview.
200E.164 recommended but not enforced. Used only for support lookups.
40ISO 3166-1 alpha-2. Auto-uppercased server-side.
2BCP-47 locale tag (e.g. en-SG). Currently informational.
16