Creates a WorkspaceMember resource.
const url = 'https://api.facteur.local/workspaces/example/members';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"userId":"a1b2c3d4e5"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://api.facteur.local/workspaces/example/members \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "userId": "a1b2c3d4e5" }'Creates a WorkspaceMember resource.
Authorizations
Section titled “Authorizations”- bearerAuthorg:write
Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”WorkspaceMember identifier
Request Bodyrequired
Section titled “Request Bodyrequired”The new WorkspaceMember resource
A person with a row in a workspace.
object
The Logto id of the person, who must already be a member of the organization.
Example
a1b2c3d4e5Responses
Section titled “Responses”WorkspaceMember resource created
A person with a row in a workspace.
object
The address of the person at the identity provider; absent when the account has none.
How the identity provider calls the person; absent when the account has no name. Never the identifier.
The Logto id of the person.
Examplegenerated
{ "createdAt": "2026-04-15T12:00:00Z", "email": "example", "name": "example", "userId": "example"}Invalid input
A refusal, as RFC 9457 application/problem+json with the code of the register. A code adds the members its rule needs (retryAfter, permission…), so more members than these may come.
object
The stable code of the refusal. It never changes once shipped.
English prose for the person who reads the answer. It may be reworded: branch on code.
The HTTP status.
The name of the HTTP status.
The address of the problem: /errors/<code>.
On a body that fails validation, one entry per field.
object
Example
{ "code": "BAD_REQUEST", "status": 404, "title": "Not Found", "type": "/errors/INBOX_NOT_FOUND", "violations": [ { "code": "BAD_REQUEST" } ]}No key, or a key that is refused. WWW-Authenticate says where to read how to present one.
A refusal, as RFC 9457 application/problem+json with the code of the register. A code adds the members its rule needs (retryAfter, permission…), so more members than these may come.
object
The stable code of the refusal. It never changes once shipped.
English prose for the person who reads the answer. It may be reworded: branch on code.
The HTTP status.
The name of the HTTP status.
The address of the problem: /errors/<code>.
On a body that fails validation, one entry per field.
object
Example
{ "code": "BAD_REQUEST", "status": 404, "title": "Not Found", "type": "/errors/INBOX_NOT_FOUND", "violations": [ { "code": "BAD_REQUEST" } ]}The key does not hold the permission of the operation, or the operation refuses every key.
A refusal, as RFC 9457 application/problem+json with the code of the register. A code adds the members its rule needs (retryAfter, permission…), so more members than these may come.
object
The stable code of the refusal. It never changes once shipped.
English prose for the person who reads the answer. It may be reworded: branch on code.
The HTTP status.
The name of the HTTP status.
The address of the problem: /errors/<code>.
On a body that fails validation, one entry per field.
object
Example
{ "code": "BAD_REQUEST", "status": 404, "title": "Not Found", "type": "/errors/INBOX_NOT_FOUND", "violations": [ { "code": "BAD_REQUEST" } ]}There is none of this identifier in the reach of the key. The answer is the same for another organization or a workspace the key does not name.
A refusal, as RFC 9457 application/problem+json with the code of the register. A code adds the members its rule needs (retryAfter, permission…), so more members than these may come.
object
The stable code of the refusal. It never changes once shipped.
English prose for the person who reads the answer. It may be reworded: branch on code.
The HTTP status.
The name of the HTTP status.
The address of the problem: /errors/<code>.
On a body that fails validation, one entry per field.
object
Example
{ "code": "BAD_REQUEST", "status": 404, "title": "Not Found", "type": "/errors/INBOX_NOT_FOUND", "violations": [ { "code": "BAD_REQUEST" } ]}More calls than the key may make in a minute. Retry-After says when to try again.
A refusal, as RFC 9457 application/problem+json with the code of the register. A code adds the members its rule needs (retryAfter, permission…), so more members than these may come.
object
The stable code of the refusal. It never changes once shipped.
English prose for the person who reads the answer. It may be reworded: branch on code.
The HTTP status.
The name of the HTTP status.
The address of the problem: /errors/<code>.
On a body that fails validation, one entry per field.
object
Example
{ "code": "BAD_REQUEST", "status": 404, "title": "Not Found", "type": "/errors/INBOX_NOT_FOUND", "violations": [ { "code": "BAD_REQUEST" } ]}default
Section titled “default”Any refusal: an application/problem+json body whose code says which.
A refusal, as RFC 9457 application/problem+json with the code of the register. A code adds the members its rule needs (retryAfter, permission…), so more members than these may come.
object
The stable code of the refusal. It never changes once shipped.
English prose for the person who reads the answer. It may be reworded: branch on code.
The HTTP status.
The name of the HTTP status.
The address of the problem: /errors/<code>.
On a body that fails validation, one entry per field.
object
Example
{ "code": "BAD_REQUEST", "status": 404, "title": "Not Found", "type": "/errors/INBOX_NOT_FOUND", "violations": [ { "code": "BAD_REQUEST" } ]}