Retorio API (1.0.0)

Download OpenAPI specification:

Every endpoint a Retorio integration calls: managing cohorts and the users in them, configuring webhooks, and the single sign-on calls the coaching app makes. The base URL is https://api.retorio.com/be/v2.

Authentication, the errors every endpoint shares and a guide for each topic: Getting started.

Cohorts

Coaching users in Retorio are organized in cohorts, each permanently either email (invited by address) or token (invited with a generated, anonymous access token handed to the coaching user directly). These endpoints create and manage cohorts, and invite, list, disable, and remove the people in them.

List cohorts

Lists your organization's cohorts with aggregate participant and token counts. It is the usual first call before inviting or removing anyone, to find the cohort id and type you need.

Authorizations:
accessKey
query Parameters
includeBenchmarkingCohorts
string

true returns only benchmarking cohorts and any other non-empty value only the others. Absent or empty returns both.

includeRecordingSessions
string

true adds programs to each cohort and computes recordingSessions. Any other value or none omits programs and leaves recordingSessions at 0.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Create a cohort

Creates an empty cohort. type is fixed for the lifetime of the cohort: create an email cohort to invite users by address, or a token cohort to generate anonymous access tokens.

Authorizations:
accessKey
Request Body schema: application/json
required
name
required
string >= 3 characters

The name of the cohort.

type
required
string
Enum: "email" "token"

Fixed at creation and never changes. An email cohort is invited by address. A token cohort is invited with a generated, anonymous access token.

isForBenchmarking
boolean

Whether this cohort is used for benchmark profiling. Programs are assigned to it like any other cohort, and its coaching users’ attempts in them feed the benchmark profiles.

Responses

Request samples

Content type
application/json
{
  • "name": "Sales onboarding 2026",
  • "type": "email",
  • "isForBenchmarking": true
}

Response samples

Content type
application/json
{
  • "extId": "string",
  • "name": "string",
  • "createdAt": "2019-08-24T14:15:22Z"
}

List all email participants

Every cohort membership of the email-invited users across the whole organization, not scoped to one cohort: one row per user and cohort, removed memberships included (state: REMOVED). Useful for mapping users from your HR system by email address without knowing each person's cohort ahead of time.

Authorizations:
accessKey

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Remove users from the organization

The offboarding call: deletes the given users from your Retorio organization entirely, across every cohort they belong to (both token and email users). Every id must belong to a coaching user in your organization, or the call fails as a whole and nothing is deleted. Their recordings and results are deleted with them. Inviting the same address again later restores the account rather than creating a duplicate, but not those recordings and results.

Authorizations:
accessKey
Request Body schema: application/json
required
userExtIds
required
Array of strings [ 1 .. 200 ] items

List of user ext ids

Responses

Request samples

Content type
application/json
{
  • "userExtIds": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "message": "string",
  • "status": "string",
  • "details": null
}

Preview a resend

What an organization-wide resend would actually reach right now, broken down by cohort: only email cohorts (excluding benchmarking ones), and only the addresses currently eligible for a resend.

Authorizations:
accessKey

Responses

Response samples

Content type
application/json
{
  • "cohorts": [
    ]
}

Get a cohort

One cohort of your organization, by its ext id: its name, type, creation time, whether it is used for benchmarking, and how many participants it has.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02

Responses

Response samples

Content type
application/json
{
  • "extId": "string",
  • "name": "string",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "isForBenchmarking": true,
  • "type": "email",
  • "participants": 0,
  • "activeTokens": 0,
  • "availableTokens": 0,
  • "programs": 0,
  • "recordingSessions": 0,
  • "activeEmails": 0
}

Rename a cohort

Changes the cohort’s name and nothing else: its type, participants and assigned programs stay as they are.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
Request Body schema: application/json
required
name
required
string >= 3 characters

The new name of the cohort.

Responses

Request samples

Content type
application/json
{
  • "name": "Sales onboarding 2027"
}

Response samples

Content type
application/json
{
  • "extId": "string",
  • "name": "string",
  • "createdAt": "2019-08-24T14:15:22Z"
}

Delete a cohort

Deletes the cohort and its program assignments. For an email cohort this does not remove the users in it from your organization (use DELETE /cohorts/participants for that). For a token cohort, its token users and their tokens are deleted with it, and a token user who had signed up can no longer sign in.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "status": "string",
  • "details": null
}

List a cohort’s participants

Lists the participants of one cohort. For a token cohort, each row carries the generated token and its status. For an email cohort, token and status are both null (use emailParticipants below for the full email-invite status instead). Add onlyTokens and onlyAvailableTokens (presence of the query param is enough, any value) to keep only tokens with status AVAILABLE, so not redeemed and not reserved (onlyAvailableTokens has no effect without onlyTokens), and format=xlsx with both of those to download that list as a spreadsheet instead of JSON.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
query Parameters
onlyTokens
string

Presence flag: the filter is on whenever the key is present, whatever its value (false included).

onlyAvailableTokens
string

Presence flag: the filter is on whenever the key is present, whatever its value (false included).

format
string

xlsx, sent together with onlyTokens and onlyAvailableTokens, returns the list as a spreadsheet instead of JSON. Ignored otherwise.

Responses

Response samples

Content type
[
  • {
    }
]

Remove participants from a cohort

Removes the given users from one email cohort, keeping their account and their membership in any other cohort. To remove a user from the organization entirely, see DELETE /cohorts/participants instead.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
Request Body schema: application/json
required
userExtIds
required
Array of strings [ 1 .. 200 ] items

List of user ext ids

Responses

Request samples

Content type
application/json
{
  • "userExtIds": [
    ]
}

Response samples

Content type
application/json
Example
{
  • "message": "string",
  • "status": "string",
  • "details": null
}

List an email cohort’s invite status

The cohort's email participants with their full invite lifecycle (INVITED, ACTIVATED, DISABLED, REMOVED) rather than the bare participant row participants above returns. One row per user, from their most recent membership in this cohort. Meant for email cohorts: a token cohort is not refused, and lists its token users the same way.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Invite users by email

Adds each address to an email-type cohort and sends an invitation email, in one call. An address that already exists in your organization is added to this cohort rather than duplicated, and a previously deleted user is restored into this cohort. Only users who have not signed up yet are emailed, and an existing one only if they are not disabled and their last invitation is more than 24 hours old. Not idempotent: an address that is already in this cohort fails the whole call with 400, so diff against the participant list before re-sending a batch. Invitations expire after 60 days: the coaching app then refuses to start sign-up.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
Request Body schema: application/json
required
emails
required
Array of strings [ 1 .. 200 ] items [ items [ 1 .. 255 ] characters ^[A-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[A-Z0-9.-]+\.[... ]

List of emails to invite into cohort

language
required
string (languageEnum)
Enum: "en-US" "fr-FR" "de-DE" "es-ES" "it-IT" "pt-PT" "cs-CZ" "ru-RU" "el-GR" "nl-NL" "bg-BG" "ko-KR" "tr-TR" "pl-PL"

Responses

Request samples

Content type
application/json
{
  • "emails": [
    ],
  • "language": "en-US"
}

Response samples

Content type
application/json
Example
{
  • "message": "string",
  • "status": "string",
  • "details": null
}

Resend invitation emails

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.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
Request Body schema: application/json
required
Any of
userExtIds
required
Array of strings [ 1 .. 200 ] items

List of user ext ids

Responses

Request samples

Content type
application/json
{
  • "select": "next"
}

Response samples

Content type
application/json
{
  • "sent": 0,
  • "remaining": 0
}

Generate tokens

Generates new access tokens for a token-type cohort, to hand to coaching users directly instead of inviting them by email: through your own LMS, HR system, or in person. The response has no body: fetch the generated tokens with GET /cohorts/{id}/participants right after. A token is meant to be redeemed once and does not expire on its own. Redeeming it replaces the token value, so the participant list then shows a different token for that user than the one handed out. Match on userId, not on the token. Each token has its own user (userId in the participant list). Removing that user with DELETE /cohorts/participants revokes the token.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
Request Body schema: application/json
required
numberTokens
required
integer [ 1 .. 200 ]

How many new tokens to generate, 1 to 200 per call.

Responses

Request samples

Content type
application/json
{
  • "numberTokens": 25
}

Response samples

Content type
application/json
Example
{
  • "message": "string",
  • "status": "string",
  • "details": null
}

Enable or disable a participant

Enables or disables a user, addressed through an email cohort. The flag belongs to the user, so it applies across every cohort they are in. The coaching app does not let a disabled user who has not signed up yet start sign-up. One who already has can still sign in, but none of their programs can be started. Re-enabling a user who never registered sends them a fresh invitation email, subject to the same 24-hour throttle as POST /cohorts/{id}/participants/emails.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
userExtId
required
string
Example: 6f1c0a2e_9b41_4d0c_8a7e_2f5b8c1d0e93
Request Body schema: application/json
required
isDisabled
required
boolean

Responses

Request samples

Content type
application/json
{
  • "isDisabled": true
}

Response samples

Content type
application/json
Example
{
  • "message": "string",
  • "status": "string",
  • "details": null
}

List a cohort’s assigned programs

Lists the programs assigned to this cohort, with each assignment’s window, status and per-scenario publish counts, ordered the way the admin app shows them.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Assign programs to a cohort

Assigns one or more programs to this cohort for the given window. Fails the whole call if any of the programs already holds a live assignment in this cohort.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
Request Body schema: application/json
required
startDate
required
string

When every assigned program becomes visible to the cohort.

endDate
string or null

When the assigned programs stop accepting new attempts. A coaching user keeps seeing an ended assignment they have attempts in. Omit or send null for no end date.

programExtIds
required
Array of strings

Programs to assign, by ext id. A program already holding a live assignment in this cohort fails the whole call. Unassign it first to re-assign with a new period.

Responses

Request samples

Content type
application/json
{
  • "startDate": "2026-12-01T00:00:00.000Z",
  • "endDate": "2027-03-31T23:59:59.000Z",
  • "programExtIds": [
    ]
}

Response samples

Content type
application/json
[
  • {
    }
]

Reorder a cohort’s assigned programs

Sets the display order of this cohort’s assignments. Send exactly one entry per assignment, with order values covering 0 to n - 1. An unknown or repeated ext id, a different number of entries than assignments, or order values that are not exactly 0 to n - 1 (a gap or a repeat) fails the whole call.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
Request Body schema: application/json
required
Array (non-empty)
extId
required
string

The cohort-program assignment ext id.

order
required
integer

Responses

Request samples

Content type
application/json
[
  • {
    }
]

Response samples

Content type
application/json
Example
{
  • "message": "string",
  • "status": "string",
  • "details": null
}

List programs not yet assigned to a cohort

Lists the organization’s programs holding no assignment in this cohort: the picker for POST /cohorts/{id}/programs. A program whose assignment here has ended does not appear: an ended assignment is edited, not repeated.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get one cohort-program assignment

One program assigned to the cohort: the program, its period and position, whether it is upcoming, active or finished, and its scenarios counted by publish status.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
cohortProgramExtId
required
string
Example: e90f3b7c_1a26_44d5_b8c1_0d94e7f25a63

Responses

Response samples

Content type
application/json
{
  • "createdAt": "2019-08-24T14:15:22Z",
  • "extId": "string",
  • "startDate": "2019-08-24T14:15:22Z",
  • "endDate": "2019-08-24T14:15:22Z",
  • "order": 0,
  • "programId": "string",
  • "title": "string",
  • "scenarioStatusCounts": {
    },
  • "cohortProgramStatus": "upcoming"
}

Change an assignment’s window

Changes the startDate/endDate of an existing assignment.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
cohortProgramExtId
required
string
Example: e90f3b7c_1a26_44d5_b8c1_0d94e7f25a63
Request Body schema: application/json
required
startDate
required
string
endDate
required
string or null

Responses

Request samples

Content type
application/json
{
  • "startDate": "2026-12-01T00:00:00.000Z",
  • "endDate": "2027-03-31T23:59:59.000Z"
}

Response samples

Content type
application/json
{
  • "createdAt": "2019-08-24T14:15:22Z",
  • "extId": "string",
  • "startDate": "2019-08-24T14:15:22Z",
  • "endDate": "2019-08-24T14:15:22Z",
  • "order": 0,
  • "programId": "string",
  • "title": "string",
  • "scenarioStatusCounts": {
    },
  • "cohortProgramStatus": "upcoming"
}

Unassign a program from a cohort

Removes the assignment and compacts the remaining assignments’ order values. The program itself, and any data already recorded under it, is unaffected.

Authorizations:
accessKey
path Parameters
id
required
string
Example: b2d7e4a1_55c3_4f28_9e10_7a3d6c4b8f02
cohortProgramExtId
required
string
Example: e90f3b7c_1a26_44d5_b8c1_0d94e7f25a63

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "status": "string",
  • "details": null
}

Webhooks

Configure outbound event delivery to your own systems. Delivery, signatures and retries: Webhooks. The request and response shapes below cover configuring and inspecting webhooks themselves.

List webhooks

Lists the webhooks configured for your organization, up to the limit of 5. No secret value is returned here: custom headers are listed by name only, and the signing secret is returned only by create and by an update that rotates it.

Authorizations:
accessKey

Responses

Response samples

Content type
application/json
{
  • "organizationWebhooks": [
    ]
}

Create a webhook

Creates a webhook and its first configuration version. The response includes the signingSecret in plaintext (returned only here and by an update that rotates it), so store it immediately: it is required to verify the X-Retorio-Signature header on every delivery. An organization may have at most 5 webhooks, disabled ones included.

Authorizations:
accessKey
Request Body schema: application/json
required
name
required
string [ 1 .. 255 ] characters

Shown in the webhook list. Must contain at least one letter, digit, punctuation mark or symbol.

url
required
string <= 2048 characters ^https:\/\/

Your endpoint. It must use https, be at most 2048 characters and carry no credentials (no user name or password).

subscribedEvents
required
Array of strings (subscribableWebhookEventType) non-empty
Items Value: "coaching.result.available"
Array of objects (webhookCustomHeaderEntry) <= 10 items

At most 10 headers, sent with every delivery. Together they may take at most 8192 bytes, counting each as <name>: <value>\r\n, stored values included.

isEnabled
boolean
Default: true

Responses

Callbacks

Request samples

Content type
application/json
{
  • "name": "CRM sync",
  • "subscribedEvents": [
    ],
  • "customHeaders": [
    ],
  • "isEnabled": true
}

Response samples

Content type
application/json
{
  • "extId": "string",
  • "isEnabled": true,
  • "name": "string",
  • "url": "string",
  • "customHeaderNames": [
    ],
  • "customHeadersUnreadable": true,
  • "subscribedEvents": [
    ],
  • "lastChangedAt": "2019-08-24T14:15:22Z",
  • "lastChangedBy": "string",
  • "hasBeenEdited": true,
  • "signingSecret": "string"
}

Callback payload samples

Callback
POST: A subscribed event is delivered to your endpoint
Content type
application/json
{
  • "version": 1,
  • "eventId": "string",
  • "occurredAt": "2019-08-24T14:15:22Z",
  • "organization": {
    },
  • "eventType": "webhook.test",
  • "data": {
    }
}

Update a webhook

Updates a webhook by appending a new configuration version. The full configuration is restated on every update, not patched: customHeaders omitted keeps the stored set (credential included), [] removes every custom header, and an array that is sent is the whole set going forward. Inside a sent array, an entry with a name and no value keeps the value stored under that name, so you can keep a credential you cannot read back. An entry with no value whose name is not stored is a 400. Pass expectedLastChangedAt (the lastChangedAt you last read) to get a 409 instead of overwriting an edit made since you read it. A 409 can also answer an update that collides with a concurrent one. rotateSigningSecret: true replaces the signing secret and returns the new one once. Every receiver verifying with the old one then fails until updated.

Authorizations:
accessKey
path Parameters
extId
required
string
Example: 9d4e2b71_3c8a_4f05_b6e2_1a7c5d9e0f38
Request Body schema: application/json
required
name
required
string [ 1 .. 255 ] characters

Shown in the webhook list. Must contain at least one letter, digit, punctuation mark or symbol.

url
required
string <= 2048 characters ^https:\/\/

Your endpoint. It must use https, be at most 2048 characters and carry no credentials (no user name or password).

subscribedEvents
required
Array of strings (subscribableWebhookEventType) non-empty
Items Value: "coaching.result.available"
Array of objects (webhookCustomHeaderEntry) <= 10 items

At most 10 headers, sent with every delivery. Together they may take at most 8192 bytes, counting each as <name>: <value>\r\n, stored values included.

rotateSigningSecret
boolean
Default: false
isEnabled
boolean
expectedLastChangedAt
string <date-time>

Responses

Request samples

Content type
application/json
{
  • "name": "CRM sync",
  • "subscribedEvents": [
    ],
  • "customHeaders": [
    ],
  • "rotateSigningSecret": false,
  • "isEnabled": true,
  • "expectedLastChangedAt": "2019-08-24T14:15:22Z"
}

Response samples

Content type
application/json
{
  • "extId": "string",
  • "isEnabled": true,
  • "name": "string",
  • "url": "string",
  • "customHeaderNames": [
    ],
  • "customHeadersUnreadable": true,
  • "subscribedEvents": [
    ],
  • "lastChangedAt": "2019-08-24T14:15:22Z",
  • "lastChangedBy": "string",
  • "hasBeenEdited": true,
  • "signingSecret": "string"
}

Delete a webhook

Soft-deletes a webhook and every configuration version it has had. No further retries are sent: each pending delivery is cancelled when it next comes due, and only a request already on its way at the moment of deletion can still arrive. Its delivery records are retained but no longer readable through this API: GET /organization_webhooks/{extId}/deliveries answers 404 once the webhook is deleted.

Authorizations:
accessKey
path Parameters
extId
required
string
Example: 9d4e2b71_3c8a_4f05_b6e2_1a7c5d9e0f38

Responses

Response samples

Content type
application/json
{
  • "message": "string",
  • "status": "string",
  • "details": null
}

List recent deliveries

The webhook's most recent deliveries (up to 50), newest first, across every configuration version it has ever had. One row per event, summarizing its attempts (attemptCount, lastStatusCode, lastError), useful for diagnosing a receiver that is failing or has gone quiet. lastError holds at most 500 characters. On a cancelled row, and on a failed row Retorio settled without recording a send (a delivery Retorio stopped retrying for its own reasons, a stored event that no longer validates, a test whose outcome could not be recorded), it holds Retorio's reason, which replaces the last error text, while lastStatusCode keeps the code of the last recorded attempt. updatedAt is the creation time and does not track status changes: read status and deliveredAt instead.

Authorizations:
accessKey
path Parameters
extId
required
string
Example: 9d4e2b71_3c8a_4f05_b6e2_1a7c5d9e0f38

Responses

Response samples

Content type
application/json
{
  • "deliveries": [
    ]
}

Send a test event

Sends a synchronous webhook.test event to the webhook, signed exactly like a real delivery, so you can verify your receiver end to end. Sent even when the webhook is disabled, so you can create it with isEnabled: false, test it, then enable it: a webhook created enabled receives its subscribed events right away. Recorded as a delivery, so it also shows up in the delivery log. It is never retried.

Authorizations:
accessKey
path Parameters
extId
required
string
Example: 9d4e2b71_3c8a_4f05_b6e2_1a7c5d9e0f38

Responses

Response samples

Content type
application/json
{
  • "succeeded": true,
  • "statusCode": 0,
  • "error": "string"
}

Single sign-on

The SSO endpoints of this API, called by the Retorio coaching app during sign-in and sign-up, not by an integration. The end-to-end flow and how to set it up: Single sign-on.

Look up sign-in method for an organization

Public, unauthenticated lookup used by a login page before the user has signed in: given an organization's name, it says whether that organization signs in by SSO or by email and password, and returns the organization and company name and the logo to render on the sign-in screen, plus, for an SSO organization, the tenant id and (for a SAML or OIDC provider) the provider id the login page starts sign-in with. The organization's privacy policy is not part of this response. This is a read of existing configuration. How single sign-on is set up: Single sign-on.

query Parameters
organizationName
required
string [ 1 .. 255 ] characters
Example: organizationName=customer

Responses

Response samples

Content type
application/json
{
  • "organizationName": "string",
  • "organizationExtId": "string",
  • "companyName": "string",
  • "logoUrl": null,
  • "samlProviderId": null,
  • "tenantId": null,
  • "SSOType": "google"
}

Finalize sign-up for an SSO user

Called by the coaching app after your identity provider authenticates an invited user who has not completed sign-up yet, to record their name and consent and mark them registered. When Retorio is configured to read the name from your IdP's attributes and the token carries one, that name is used instead of displayedName. legalConsent and privacyPolicyConsent must be true. A user whose invitation has expired is refused and must be invited again. The user itself already exists from the cohort invite. There is nothing for an integrator to call here directly: a user reaches this only by signing in through the coaching app once they have been invited into a cohort with the email their IdP asserts.

Authorizations:
coachingUserToken
Request Body schema: application/json
required
displayedName
string or null [ 1 .. 255 ] characters
Default: null
legalConsent
required
boolean
privacyPolicyConsent
required
boolean
contactConsent
required
boolean

Responses

Request samples

Content type
application/json
{
  • "displayedName": "Maria Schmidt",
  • "legalConsent": true,
  • "privacyPolicyConsent": true,
  • "contactConsent": true
}

Response samples

Content type
application/json
Example
{
  • "message": "string",
  • "status": "string",
  • "details": null
}