Skip to content

Resend invitation emails

POST
/cohorts/{id}/participants/resendEmails
curl --request POST \
--url https://api.retorio.com/be/v2/cohorts/b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02/participants/resendEmails \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "userExtIds": [ "6f1c0a2e_9b41_4d0c_8a7e_2f5b8c1d0e93" ] }'

Re-sends the invitation email in an email cohort, in one of two ways. Send { "userExtIds": [...] } to name specific not-yet-registered recipients yourself: this is all-or-nothing, so one ineligible id refuses the whole request before anything is sent, and a successful call returns 204 with no body. Send { "select": "next" } instead to let Retorio pick whoever is next eligible and send to them. That form returns 200 with how many were just sent and how many eligible recipients remain, so you can call it again to work through a large cohort in batches. Both forms reach only users whose last invitation is more than 24 hours old. A user with no recorded invitation is not eligible. Disabled users are never eligible. Each { "select": "next" } call sends at most 20.

Auth
Access key
Roles
Owner / Admin / Custom
id
required
string

Example

b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
Media typeapplication/json
Any of:
object
userExtIds
required

List of user ext ids

Array<string>
>= 1 items <= 200 items

Example

[
"6f1c0a2e_9b41_4d0c_8a7e_2f5b8c1d0e93"
]

Sent the next eligible batch (the { "select": "next" } form only).

Media typeapplication/json
object
sent
required

How many invitation emails this call sent.

integer
remaining
required

How many users in the cohort are still eligible for a resend. Call again until it is 0.

integer

Example generated

{
"sent": 1,
"remaining": 1
}

Resent (the userExtIds form only).

The request body is not valid, the cohort is not of type email, or (userExtIds form only) a named user does not exist or is not eligible. Also answered when the request body is not valid JSON.

Media typeapplication/json
Any of:
object
message
required
string
status
required

Canonical error name, e.g. INVALID_ARGUMENT.

string
details
nullable

Example generated

{
"message": "example",
"status": "example",
"details": "example"
}

Not authenticated: the bearer token is missing, malformed, expired or revoked, its sign-in method does not match your organization’s configuration, the user it belongs to was removed, or your organization is deactivated.

Media typeapplication/json
object
message
required
string
status
required

Canonical error name, e.g. INVALID_ARGUMENT.

string
details
nullable

Example generated

{
"message": "example",
"status": "example",
"details": "example"
}

Refused: the token does not belong to an admin, or your organization does not have the coaching product, or the admin’s roles do not grant coaching-users:manage.

Media typeapplication/json
Any of:
object
message
required
string
status
required

Canonical error name, e.g. INVALID_ARGUMENT.

string
details
nullable

Example generated

{
"message": "example",
"status": "example",
"details": "example"
}

No cohort with this id in your organization.

Media typeapplication/json
object
message
required
string
status
required

Canonical error name, e.g. INVALID_ARGUMENT.

string
details
nullable

Example generated

{
"message": "example",
"status": "example",
"details": "example"
}

The request body is larger than 10 MB.

Media typeapplication/json
object
statusCode
required
integer
message
required
string
error
required

The HTTP reason phrase, e.g. Bad Request.

string

Example generated

{
"statusCode": 1,
"message": "example",
"error": "example"
}

The Content-Type charset or the Content-Encoding is one the API cannot decode. Send UTF-8 JSON without a content encoding.

Media typeapplication/json
object
statusCode
required
integer
message
required
string
error
required

The HTTP reason phrase, e.g. Bad Request.

string

Example generated

{
"statusCode": 1,
"message": "example",
"error": "example"
}

Internal Server Error

Media typeapplication/json
object
key
additional properties
nullable

Example generated

{
"additionalProperty": "example"
}

Retorio is GDPR and DSGVO compliant, EU AI Act aligned, ISO 27001 certified, and hosted on Google Cloud with EU data residency. For anything specific to your rollout, ask your Retorio contact.