Update a user's profile
Updates whitelisted profile fields. The endpoint intentionally does not accept identity-bound fields — `email`, `clerkUserID`, and the canonical `id` are owned by Clerk and cannot be changed through the API. Unknown fields in the body are silently ignored.
Authorization
bearerAuth Salfio API tokens start with the literal prefix sk_live_ followed
by 32 base62 characters (≈190 bits of entropy). Tokens are hashed
at rest with argon2id and shown to the user only once at creation.
In: header
Path Parameters
User UUID.
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X PUT "https://api.salfio.com/v1/users/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{}'{
"meta": {
"cursor": "string",
"hasMore": true
},
"data": {
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
"firstName": "Alice",
"lastName": "Morgan",
"email": "alice@acme.com",
"imageUrl": "http://example.com",
"createdAt": "2019-08-24T14:15:22Z",
"updatedAt": "2019-08-24T14:15:22Z"
}
}{
"error": {
"code": "invalid_argument",
"message": "limit must be an integer between 1 and 100"
}
}{
"error": {
"code": "unauthorized",
"message": "Authentication required"
}
}{
"error": {
"code": "not_found",
"message": "client not found"
}
}{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded",
"details": {
"retry_after_seconds": 30
}
}
}Get a user
Fetch a single user by UUID. Users that don't belong to the caller's organization return `404 not_found` — existence is never leaked across tenants.
Get the caller's organization
Returns the organization associated with the bearer token. Singleton endpoint — there is no `{organizationId}` in the path and there is no way for a caller to read a different organization's record. **Spec-vs-implementation note (SAL-232).** The spec exposes `plan` and `rateLimits.*` fields; today the organization model does not carry a per-org plan or rate-limit override. The response stubs `plan` to `"free"` and populates `rateLimits` with the system-wide defaults (100 requests/min per org, 50 requests/min per endpoint). When per-org overrides land (SAL-220 follow-up #7) the same wire fields will start reflecting per-org values — the response shape is designed to be forwards-compatible.