curl --request POST \
--url https://api.studio.prisme.ai/v2/orgs/{orgSlug}/members \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"users": [
{
"userId": "<string>",
"email": "<string>",
"roleSlug": "<string>",
"groups": [
"<string>"
]
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
users: [
{
userId: '<string>',
email: '<string>',
roleSlug: '<string>',
groups: ['<string>']
}
]
})
};
fetch('https://api.studio.prisme.ai/v2/orgs/{orgSlug}/members', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.studio.prisme.ai/v2/orgs/{orgSlug}/members"
payload = { "users": [
{
"userId": "<string>",
"email": "<string>",
"roleSlug": "<string>",
"groups": ["<string>"]
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)[
{
"orgSlug": "<string>",
"userId": "<string>",
"status": "active",
"id": "<string>",
"roleSlug": "<string>",
"invitedBy": "<string>",
"invitedAt": "<string>",
"inviteEmail": "<string>",
"inviteToken": "<string>",
"joinedAt": "<string>",
"joinedVia": "direct",
"groups": [
"<string>"
],
"pendingGroups": [
"<string>"
],
"createdBy": "<string>",
"updatedBy": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
}
]{
"error": "AuthenticationError",
"message": "Unauthenticated"
}{
"error": "ForbiddenError",
"message": "Forbidden"
}Add Org Members
Add members to an organization in bulk. Each entry must carry exactly one of userId or email, with optional per-entry roleSlug and groups[]. Known emails become active members; unknown emails become pending invites. Groups are auto-created if they don’t exist yet.
curl --request POST \
--url https://api.studio.prisme.ai/v2/orgs/{orgSlug}/members \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"users": [
{
"userId": "<string>",
"email": "<string>",
"roleSlug": "<string>",
"groups": [
"<string>"
]
}
]
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
users: [
{
userId: '<string>',
email: '<string>',
roleSlug: '<string>',
groups: ['<string>']
}
]
})
};
fetch('https://api.studio.prisme.ai/v2/orgs/{orgSlug}/members', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.studio.prisme.ai/v2/orgs/{orgSlug}/members"
payload = { "users": [
{
"userId": "<string>",
"email": "<string>",
"roleSlug": "<string>",
"groups": ["<string>"]
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)[
{
"orgSlug": "<string>",
"userId": "<string>",
"status": "active",
"id": "<string>",
"roleSlug": "<string>",
"invitedBy": "<string>",
"invitedAt": "<string>",
"inviteEmail": "<string>",
"inviteToken": "<string>",
"joinedAt": "<string>",
"joinedVia": "direct",
"groups": [
"<string>"
],
"pendingGroups": [
"<string>"
],
"createdBy": "<string>",
"updatedBy": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>"
}
]{
"error": "AuthenticationError",
"message": "Unauthenticated"
}{
"error": "ForbiddenError",
"message": "Forbidden"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Body
Members to add. Each entry carries its own role and groups.
Hide child attributes
Hide child attributes
Existing platform user id. Mutually exclusive with email.
Email of the user to add. Mutually exclusive with userId. Unknown emails create a pending invite.
Role slug to assign. Defaults to the org defaultRole when omitted.
Group slugs to add the user to. Groups are auto-created if missing.
When true, members already in the org are silently skipped instead of triggering a 409. Useful for idempotent bulk imports / round-tripping a CSV export. Returns only the actually created memberships.
When false, suppresses the automatic OrgInvite email for unknown emails. Defaults to true. Useful for bulk imports where email notifications are not desired.
Response
Members added
active, invited, suspended direct, invite-code, invite-email, auto-join, join-rule Org group slugs the user belongs to. Only populated on listOrgMembers when includeGroups=true.
Group slugs to add the user to once they accept their invite. Set at import time for pending/invited members; cleared and applied as real group memberships when the invite is claimed.
Was this page helpful?