Skip to main content

Platform Users API

Platform user routes let operators provision users across tenants, resolve identity records, and attach immutable tenant-scoped wallet external IDs. They require a platform key and route scopes when scoped platform keys are enabled.

Platform User Object

Wallet external IDs are write-once per user and tenant. Once assigned, the value cannot be changed to a different external ID for that same user in that tenant.

Create or Pre-Provision User

Creates a user record without sending email or requiring an interactive login. If the email already exists, Steward returns the existing user with isNew: false.
Auth: Platform key with platform:user:write Request Body:
When walletExternalId is supplied, tenantId is required. Steward links the user into that tenant and assigns the immutable wallet external ID in the same operation.
Response:

Lookup User

Looks up a user by a supported identity. walletExternalId lookup requires tenantId because external IDs are tenant-scoped.
Auth: Platform key with platform:user:read Query Parameters:
Response:

Lookup Aliases

These POST aliases accept JSON bodies and return the same shape as GET /platform/users/lookup.

Assign Wallet External ID

Assigns a write-once wallet external ID to an existing user in a tenant.
Auth: Platform key with platform:user:write
Conflicts return 409 when the external ID belongs to another user in the same tenant or when the target user already has a different external ID in that tenant.

Resolve Wallet External ID

Resolves a tenant-scoped wallet external ID.
Auth: Platform key with platform:user:read

Connect or Create by Wallet External ID

Resolves a wallet external ID to an existing user. If no mapping exists, Steward can create a user or connect an existing email user to the tenant, then assign the external ID.
Auth: Platform key with platform:user:write
Response:

Search Tenant Users by External ID

Tenant-scoped user search supports direct wallet external ID filtering.
Auth: Platform key with platform:tenant-user:read
Tenant admins with a user session can use the same filter through the user-authenticated directory route:
SDK

Third-Party Wallet Policy Violations

When restrictToOneThirdPartyWallet is enabled after existing users already linked multiple EVM/Solana third-party wallets, tenant admins can review the violation report and remove one selected wallet from a tenant member.
Auth: User bearer token for a tenant admin, with recent MFA.
Response:
The report is read-only. Use the remediation endpoint below when an owner/admin has chosen the wallet identity to remove.

Remediate a Violation

Auth: User bearer token for a tenant owner/admin, with recent MFA and a session scoped to the tenant. The endpoint only removes linked EVM/Solana third-party wallets, refuses to remove the user’s last remaining login method, revokes the remediated user’s refresh tokens, writes authorized and final audit events, and sends a redacted user.unlinked_account webhook.
Response:

Bulk Remediate Violations

Auth: User bearer token for a tenant owner/admin, with recent MFA and a session scoped to the tenant. The request accepts up to 50 selected wallet accounts. Each item is processed with the same checks as the single-wallet endpoint: tenant membership, EVM or Solana wallet provider, last-login-method protection, refresh-token revocation, authorized/final audit events, and redacted user.unlinked_account webhooks. The response is intentionally per-item so operators can retry only failed selections.
Response:

Wallet External ID Rules

  • tenantId is required for wallet external ID lookup and assignment.
  • External IDs are trimmed, validated, and tenant-scoped.
  • The same external ID cannot belong to multiple users in one tenant.
  • A user cannot replace an existing wallet external ID with a different value in the same tenant.
  • The reserved backing provider used to store wallet external IDs is hidden from linkedAccounts and exposed through walletExternalIds.