create_user
Create an end user, or return/update the existing one (email-first lookup, then external_id, so no duplicates). Returns created: true for a new user. Signup attribution is first-touch and optional: signup_url (else the connection's x-app-origin header) is recorded on a new user, or on an existing user that has none. Costs 1 CRD (platform credit) per call, charged even when the call is then rejected (a 429 RATE_LIMITED costs nothing). Error results include request_id; quote it to support.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Display name | |
| No | User email | ||
| api_key | No | Cred API key (optional if set via the x-api-key header) | |
| metadata | No | Arbitrary metadata; stripe_account_id is Cred-only: a value you send is silently dropped | |
| project_id | No | Cred project ID (optional; the API key already identifies the project) | |
| signup_url | No | App/page URL the user signed up from, e.g. https://app1.example.com/signup | |
| external_id | Yes | Your user ID | |
| x402_payment | No | Base64 x402 PaymentPayload, only when a previous call failed with an x402 PaymentRequired because the account is out of CRD | |
| wallet_address | No | 0x EVM address to record as asserted (not verified) | |
| signup_credit_type_id | No | Credit type the user signed up for (cross-app attribution) |