Create or update a user
const url = 'https://app.mondochat.io/v1/server/users/example';const options = { method: 'PUT', headers: { 'Mondochat-App-Id': '<Mondochat-App-Id>', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"avatar":"https://example.test/alice.jpg","lang":"en","name":"Alice","role":"member"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PUT \ --url https://app.mondochat.io/v1/server/users/example \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Mondochat-App-Id: <Mondochat-App-Id>' \ --data '{ "avatar": "https://example.test/alice.jpg", "lang": "en", "name": "Alice", "role": "member" }'Creates the user with this external id or updates their profile, without opening a session. Server route: send the server secret as a bearer token with Mondochat-App-Id. tier must be a key of workspace.tiers; null clears it and leaving it out keeps the stored one.
Errors: 422 validation for an unknown role or tier or a reserved external id; 403 forbidden while a test app already has 50 users.
Guide: Users.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”A user’s profile, as your server sets it.
object
Display name.
Per-user overrides carried in the perms claim; a null field changes nothing.
object
Responses
Section titled “Responses”Successful Response
A user of the app, as your server and the chat see them.
object
The user’s id on your site, the sub claim.
The user’s id in mondochat.
member for a user your server signed in, guest for an anonymous one.
Display name.
A role key from the app’s roles.
Example
{ "avatar": "https://example.test/alice.jpg", "external_id": "alice", "id": "0199d6a0-1000-7000-8000-000000000001", "kind": "member", "name": "Alice", "role": "member"}Problem
An RFC 9457 problem: the body of every error answer.
object
The stable error code to branch on, such as policy_denied.
What went wrong this time, when there is more to say.
For validation, one entry per invalid field.
One invalid field.
object
The path to the field.
What is wrong with it.
The path of the request.
For policy_denied and limit_reached, the rule or limit that refused the request; for forbidden, a short cause such as you_blocked; for banned, temporary when the ban expires.
The HTTP status code.
A short summary of the problem.
A URL that names the problem, https://app.mondochat.io/problems/<code>.
Example
{ "code": "policy_denied", "detail": null, "instance": "/v1/conversations/0199d6a0-2000-7000-8000-000000000001", "reason": "pins", "status": 403, "title": "Policy denied", "type": "https://app.mondochat.io/problems/policy_denied"}