curl --request POST \
--url https://api.pomerado.ai/v1/team/invitations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "<string>",
"invitations": [
{
"email": "<string>"
}
],
"csv": "<string>"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({email: '<string>', invitations: [{email: '<string>'}], csv: '<string>'})
};
fetch('https://api.pomerado.ai/v1/team/invitations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.pomerado.ai/v1/team/invitations"
payload = {
"email": "<string>",
"invitations": [{ "email": "<string>" }],
"csv": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"results": [
{
"index": 123,
"email": "<string>",
"invitation": {
"id": "<string>",
"email": "<string>",
"role": "owner",
"status": "pending",
"invited_by": "<string>",
"created_at": "<string>",
"expires_at": "<string>"
},
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>"
}
}
]
}{
"id": "<string>",
"email": "<string>",
"role": "owner",
"status": "pending",
"invited_by": "<string>",
"created_at": "<string>",
"expires_at": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}Invite people to the team
Invite people by email: one address (email, with an optional role), or up to 500 at once as invitations or as a CSV file’s text (csv). WorkOS emails each invitation, which lasts 7 days. An address already on the team, in another team or repeated in the request is refused on its own row; one already invited answers its pending invitation. Only an owner invites an owner. With an Idempotency-Key, a repeat of the same request answers as the first did.
curl --request POST \
--url https://api.pomerado.ai/v1/team/invitations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"email": "<string>",
"invitations": [
{
"email": "<string>"
}
],
"csv": "<string>"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({email: '<string>', invitations: [{email: '<string>'}], csv: '<string>'})
};
fetch('https://api.pomerado.ai/v1/team/invitations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.pomerado.ai/v1/team/invitations"
payload = {
"email": "<string>",
"invitations": [{ "email": "<string>" }],
"csv": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"results": [
{
"index": 123,
"email": "<string>",
"invitation": {
"id": "<string>",
"email": "<string>",
"role": "owner",
"status": "pending",
"invited_by": "<string>",
"created_at": "<string>",
"expires_at": "<string>"
},
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>"
}
}
]
}{
"id": "<string>",
"email": "<string>",
"role": "owner",
"status": "pending",
"invited_by": "<string>",
"created_at": "<string>",
"expires_at": "<string>"
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}{
"error": {
"code": "<string>",
"message": "<string>",
"retryable": true,
"docs_url": "<string>",
"details": {}
}
}Authorization: Bearer <token> with Dashboard session, Pomerado MCP OAuth token, API key.
Permission: team:manage; an API key also needs team:manage.
Effect: Write: creates or changes something in your account.
Errors: invalid_request (400), invalid_email (400), unauthorized (401), reauthentication_required (401), role_not_allowed (403), forbidden (403), team_unavailable (403), already_member (409), already_invited (409), in_another_team (409), idempotency_conflict (409), request_too_large (413), internal_error (500), acceptance_unknown (503), temporarily_unavailable (503). Every error has the same envelope.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Repeat a request safely: the same key and body answer the first request's job again with Idempotent-Replayed: true; the same key with a different body answers idempotency_conflict. 1 to 200 letters, digits, _ or -, such as a UUID
^[A-Za-z0-9_-]{1,200}$Body
One address to invite; answers its Invitation
320With email: its role (default member)
owner, admin, member Up to 500 addresses, each with an optional role; answers each row's result
Show child attributes
Show child attributes
A CSV file's text: an email column and an optional role column, with or without a header row, up to 500 rows; answers each row's result
Response
With invitations or csv: each row's invitation or error, by index
Show child attributes
Show child attributes