Skip to content

MentPass API reference

Mentees, questionnaires, tasks, decisions and webhooks for your workspace.

Version
1.0.0 (OpenAPI 3.1.0)
Base URL
https://app.mentpass.com
Scopes
decisions:read, decisions:write, mentees:read, mentees:write, questionnaires:read, assignments:write, tasks:read, tasks:write, webhooks:write, workflows:read, workflows:run

Guides

Authentication and scopes

Send an API key created in API & integrations as Authorization: Bearer mpk_…. Mentors and mentees can create keys when the workspace plan includes API access. Cookies are never used. Keys expire, can be rotated with a grace period, and can be revoked; a revoked or expired key fails the next request with 401 invalid_credentials.

Each operation needs the scope shown next to it. A key without it gets 403 insufficient_scope. Mentor keys act inside the issuer’s workspace. Mentee keys are permanently bound to their own profile: collection reads automatically contain only their data, and another person’s profile, decision, task or meeting ID returns 404, even within the same workspace.

Personal keys allow mentees:read, decisions:read, decisions:write, tasks:read and tasks:write only. They cannot create mentees, assign questionnaires, discover or run workflows, or manage webhooks. Only the owning mentee can list, rotate or revoke a personal key. Account deactivation, a locked profile or a changed role invalidates it.

Private fields

Some fields are private, for example mentor notes, recording summaries, transcripts and routing emails. They are included only when the key was created with private access, and are omitted (not set to null) otherwise. Recording content is also withheld for recordings captured through another mentor's provider connection.

Mentee keys cannot request private access. Mentor notes, decision review/source provenance and routing emails remain omitted. An authenticated mentee may read summaries, recordings and paginated transcripts of their own meetings, as in the web app, without a mentor private-access grant.

Errors

Errors use one envelope: {"error": {"code", "message", "requestId"}} plus fieldErrors (validation_failed), resetAt (quota_exhausted) or conflict (mentee conflicts). Branch on code, not on message. The table below lists every code the API returns and its status. 410 Gone is not used.

New error codes may be added within v1; treat an unknown code by its HTTP status.

Pagination

List responses are {"data": [...], "nextCursor": string|null}. Pass nextCursor as cursor to get the next page; null means the last page. Cursors are opaque and only valid with the filters they were issued for (otherwise 422 validation_failed). Page sizes are set with limit within each operation's maximum.

Meeting transcripts page separately with transcriptCursor; if the transcript changed meanwhile the response is 409 revision_conflict and you restart without a cursor.

Rate limits and metering

Requests are limited per minute and per month for the workspace's plan. Successful and error responses after authentication carry RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset (seconds). Above the minute limit the response is 429 rate_limited; when the monthly allowance is used it is 429 quota_exhausted with resetAt. Both carry Retry-After.

Requests are counted after authentication, scope and rate checks, including 4xx responses. 5xx responses, idempotent replays and webhook delivery replays are not counted, and neither are 429 responses.

Idempotency

Every write (POST, PATCH, DELETE) needs an Idempotency-Key header (16 to 128 letters, digits, - or _); without it the response is 400 idempotency_key_required. Retrying with the same key and the same request returns the stored result with Idempotent-Replayed: true and changes nothing. Reusing a key for a different request is 409 idempotency_conflict. Keys are kept for 30 days per API key lineage.

Concurrency (If-Match)

PATCH /api/v1/tasks/{taskId} needs If-Match with the revision you read (for example "3"). If the task changed in the meantime, on the web or by another integration, the response is 409 revision_conflict and nothing is written. Fetch the task again and retry.

Webhooks

Webhooks follow Standard Webhooks. Each POST carries webhook-id, webhook-timestamp and webhook-signature. Verify the signature over the raw body before parsing, reject timestamps more than 5 minutes old, and deduplicate on webhook-id: delivery is at least once and unordered (order by data.revision).

Payloads contain identifiers and non-private fields only, built when each attempt is sent with the endpoint key's current scopes and private access. origin carries the channel and the operationId/correlationId returned in your write receipts (never a credential id); skip events whose origin.operationId is one of your own writes. A decision event whose decision is no longer visible to the key is cancelled with EVENT_NOT_VISIBLE and not sent.

Failed deliveries are retried with exponential backoff and jitter, up to 8 attempts. An endpoint that keeps failing is disabled after at least 15 consecutive failures over 24 hours. If the workspace loses API access, deliveries wait and expire after the normal retry window (about 64 minutes). Replay any logged delivery with the same webhook-id.

Versioning and deprecation

The major version is in the path (/api/v1). Within v1, changes are additive only: new operations, new optional request fields, new response fields, new event types, new enum values and new error codes. Build clients that ignore unknown fields and handle unknown enum values.

Breaking changes ship only in a new major version. No v1 operation is deprecated today, and Deprecation and Sunset headers are not sent.

Workflow runs

Starting a run needs two scopes: workflows:run and mentees:read. Reading a run needs workflows:read and mentees:read. A key holding only one of the pair gets 403 insufficient_scope, and that refusal is not counted against the request allowance.

Send an Idempotency-Key. The same key with the same body returns the stored result: 200 with Idempotent-Replayed for an admitted request, or the same 409 workflow_not_admitted for one that admitted nobody. The same key with a different body is 409 idempotency_conflict. Invalid requests (422) are never stored, so you may correct and retry them under the same key. Repeated mentee ids in one request are refused rather than merged, and the list is sorted before it is compared, so [b, a] and [a, b] are the same request.

A request that is valid but admits nobody - the workflow is paused, the selection is over the fan-out limit, or the workflow run allowance is used up - returns 409 workflow_not_admitted with the reason and the recorded invocationId. No mentee ids, counts, caps or allowance figures are returned.

Runs execute under the authority of the mentor who turned the workflow on. Revoking or rotating the key does not cancel a run that was already admitted; cancel it in the app. Run status never returns names, message text, condition operands, fact names or the ids of the people who authored or authorised the workflow.

Error codes

Error codes and HTTP statuses
CodeHTTP status
idempotency_key_required400
invalid_credentials401
client_limit_reached403
feature_unavailable403
forbidden403
insufficient_scope403
plan_required403
not_found404
conflict409
idempotency_conflict409
revision_conflict409
workflow_not_admitted409
validation_failed422
precondition_required428
quota_exhausted429
rate_limited429
internal_error500
retry_later503

Mentees

Find or list mentees

get/api/v1/mentees

Find a mentee by externalId or email (not both), or page the workspace's mentees, newest first.

Operation
mentee.list
Scope
mentees:read
Idempotency-Key
Not used

Parameters

Parameters of mentee.list
NameInTypeRequiredNotes
externalIdquerystringNoExact external id. Length 0 to 128.
emailquerystringNoCase-insensitive email. Length 0 to 320.
cursorquerystringNonextCursor from the previous page. Opaque; only valid with the same filters. Length 0 to 512.
limitqueryintegerNoPage size, 1 to 100 (default 25). Range 1 to 100. Default 25.

Response 200

Schema: MenteePage

Response of mentee.list
FieldTypeRequiredNotes
dataarray of MenteeSummaryYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to the filters it was issued with.

Errors

Create a mentee

post/api/v1/mentees

Creates a mentee (client), optionally assigns published questionnaires and, with sendInvite, queues one invitation. An existing externalId or email is a 409 conflict, never an update.

Operation
mentee.create
Scope
mentees:write
Also needs
assignments:write when questionnaires non-empty
Idempotency-Key
Required

Parameters

Parameters of mentee.create
NameInTypeRequiredNotes
Idempotency-KeyheaderstringYesUnique per logical write. Retrying with the same key and body returns the original result; the same key with a different body is 409 idempotency_conflict. Keys are scoped to the API key lineage and kept for 30 days. Pattern ^[A-Za-z0-9_-]{16,128}$.

Request body

Schema: MenteeCreateRequest

Request body of mentee.create
FieldTypeRequiredNotes
namestringYesLength 1 to 200.
emailstring (email)Yes
companystring or nullNoLength 0 to 200.
websitestring or nullNoLength 0 to 2000.
phonestring or nullNoLength 0 to 100.
tidycalBookingUrlstring or nullNoLength 0 to 2000.
timeZonestringNoDefault "UTC".
sendInvitebooleanYesRequired. true queues one invitation email to the mentee.
questionnairesarray of QuestionnaireSelectionYesNon-empty needs assignments:write as well. Items 0 to 20.
externalIdstringNoYour system's id (for example a CRM contact id). Unique per workspace. Pattern ^[A-Za-z0-9._:@|/-]{1,128}$.

Response 201

Schema: MenteeCreateReceiptResponse

Response of mentee.create
FieldTypeRequiredNotes
dataMenteeCreateReceiptYes

Errors

Get a mentee

get/api/v1/mentees/{menteeProfileId}

One mentee. privateNotes needs private access.

Operation
mentee.get
Scope
mentees:read
Idempotency-Key
Not used

Parameters

Parameters of mentee.get
NameInTypeRequiredNotes
menteeProfileIdpathstringYesMentee (client) profile id. Pattern ^[A-Za-z0-9_-]{1,128}$.

Response 200

Schema: MenteeResponse

Response of mentee.get
FieldTypeRequiredNotes
dataMenteeDetailYes

Errors

List a mentee's meetings

get/api/v1/mentees/{menteeProfileId}/meetings

Meetings of one mentee, newest first. Recording fields need private access and are withheld for another mentor's recordings. Mentee keys can read their own meeting content without a private-access grant.

Operation
mentee.meeting.list
Scope
mentees:read
Idempotency-Key
Not used

Parameters

Parameters of mentee.meeting.list
NameInTypeRequiredNotes
menteeProfileIdpathstringYesMentee (client) profile id. Pattern ^[A-Za-z0-9_-]{1,128}$.
cursorquerystringNonextCursor from the previous page. Opaque; only valid with the same filters. Length 0 to 512.
limitqueryintegerNoPage size, 1 to 50 (default 20). Range 1 to 50. Default 20.

Response 200

Schema: MeetingPage

Response of mentee.meeting.list
FieldTypeRequiredNotes
dataarray of MeetingYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to the filters it was issued with.

Errors

Get a meeting

get/api/v1/mentees/{menteeProfileId}/meetings/{meetingId}

One meeting with (private access) its summary on the first page and one bounded transcript page. Mentee keys can read their own meeting content without a private-access grant.

Operation
mentee.meeting.get
Scope
mentees:read
Idempotency-Key
Not used

Parameters

Parameters of mentee.meeting.get
NameInTypeRequiredNotes
menteeProfileIdpathstringYesMentee (client) profile id. Pattern ^[A-Za-z0-9_-]{1,128}$.
meetingIdpathstringYesMeeting id. Pattern ^[A-Za-z0-9_-]{1,128}$.
transcriptCursorquerystringNotranscript.nextCursor from the previous page. Length 0 to 1024.
transcriptLimitqueryintegerNoSegments per page, 1 to 500 (default 200). Range 1 to 500. Default 200.

Response 200

Schema: MeetingResponse

Response of mentee.meeting.get
FieldTypeRequiredNotes
dataMeetingDetailYes

Errors

Questionnaires

Assign questionnaires

post/api/v1/mentees/{menteeProfileId}/questionnaire-assignments

Assigns published questionnaire versions to a mentee. An already open assignment is reported in reusedAssignmentIds, not duplicated.

Operation
assignment.create
Scope
assignments:write
Idempotency-Key
Required

Parameters

Parameters of assignment.create
NameInTypeRequiredNotes
menteeProfileIdpathstringYesMentee (client) profile id. Pattern ^[A-Za-z0-9_-]{1,128}$.
Idempotency-KeyheaderstringYesUnique per logical write. Retrying with the same key and body returns the original result; the same key with a different body is 409 idempotency_conflict. Keys are scoped to the API key lineage and kept for 30 days. Pattern ^[A-Za-z0-9_-]{16,128}$.

Request body

Schema: AssignmentRequest

Request body of assignment.create
FieldTypeRequiredNotes
questionnairesarray of QuestionnaireSelectionYesItems 1 to 20.

Response 201

Schema: AssignmentReceiptResponse

Response of assignment.create
FieldTypeRequiredNotes
dataAssignmentReceiptYes

Errors

List published questionnaires

get/api/v1/questionnaires

Currently published questionnaires with the version ids to assign.

Operation
questionnaire.list
Scope
questionnaires:read
Idempotency-Key
Not used

Parameters

Parameters of questionnaire.list
NameInTypeRequiredNotes
cursorquerystringNonextCursor from the previous page. Opaque; only valid with the same filters. Length 0 to 512.
limitqueryintegerNoPage size, 1 to 100 (default 50). Range 1 to 100. Default 50.

Response 200

Schema: QuestionnairePage

Response of questionnaire.list
FieldTypeRequiredNotes
dataarray of PublishedQuestionnaireYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to the filters it was issued with.

Errors

Tasks

List tasks

get/api/v1/tasks

Tasks (action items) of the workspace's mentees, newest first, every status by default.

Operation
task.list
Scope
tasks:read
Idempotency-Key
Not used

Parameters

Parameters of task.list
NameInTypeRequiredNotes
menteeProfileIdquerystringNoOnly this mentee's tasks. Pattern ^[A-Za-z0-9_-]{1,128}$.
statusquerystringNoOnly this status. One of: SUGGESTED, ACTIVE, ARCHIVED, DISMISSED.
cursorquerystringNonextCursor from the previous page. Opaque; only valid with the same filters. Length 0 to 512.
limitqueryintegerNoPage size, 1 to 100 (default 25). Range 1 to 100. Default 25.

Response 200

Schema: TaskPage

Response of task.list
FieldTypeRequiredNotes
dataarray of TaskYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to the filters it was issued with.

Errors

Create a task

post/api/v1/tasks

Creates an ACTIVE manual task for a mentee, as on the web.

Operation
task.create
Scope
tasks:write
Idempotency-Key
Required

Parameters

Parameters of task.create
NameInTypeRequiredNotes
Idempotency-KeyheaderstringYesUnique per logical write. Retrying with the same key and body returns the original result; the same key with a different body is 409 idempotency_conflict. Keys are scoped to the API key lineage and kept for 30 days. Pattern ^[A-Za-z0-9_-]{16,128}$.

Request body

Schema: TaskCreateRequest

Request body of task.create
FieldTypeRequiredNotes
menteeProfileIdstringYesPattern ^[A-Za-z0-9_-]{1,128}$.
titlestringYesLength 1 to 1000.
detailsstring or nullNoAt most 10,000 characters after trimming.
assigneeTargetstringNoOne of: MENTEE, MENTOR, UNASSIGNED. Default "UNASSIGNED".
deadlinestring or nullNoYYYY-MM-DD or an ISO 8601 date-time with a time zone. Length 0 to 40.
meetingIdstring or nullNo
isFocusbooleanNoDefault false.

Response 201

Schema: TaskReceiptResponse

Response of task.create
FieldTypeRequiredNotes
dataTaskReceiptYes

Errors

Get a task

get/api/v1/tasks/{taskId}

One task. assigneeEmail needs private access.

Operation
task.get
Scope
tasks:read
Idempotency-Key
Not used

Parameters

Parameters of task.get
NameInTypeRequiredNotes
taskIdpathstringYesTask id. Pattern ^[A-Za-z0-9_-]{1,128}$.

Response 200

Schema: TaskResponse

Response of task.get
FieldTypeRequiredNotes
dataTaskYes

Errors

Update a task

patch/api/v1/tasks/{taskId}

Changes a task only if it is still at the revision named in If-Match (else 409 revision_conflict, nothing written).

Operation
task.update
Scope
tasks:write
Idempotency-Key
Required

Parameters

Parameters of task.update
NameInTypeRequiredNotes
taskIdpathstringYesTask id. Pattern ^[A-Za-z0-9_-]{1,128}$.
Idempotency-KeyheaderstringYesUnique per logical write. Retrying with the same key and body returns the original result; the same key with a different body is 409 idempotency_conflict. Keys are scoped to the API key lineage and kept for 30 days. Pattern ^[A-Za-z0-9_-]{16,128}$.
If-MatchheaderstringYesThe task revision you last read, as a quoted entity tag, for example "3". Missing: 428 precondition_required; malformed: 422. Pattern ^"[1-9][0-9]{0,8}"$.

Request body

Schema: TaskUpdateRequest

Request body of task.update
FieldTypeRequiredNotes
titlestringNoLength 1 to 1000.
detailsstring or nullNo
assigneeTargetstringNoOne of: MENTEE, MENTOR, UNASSIGNED.
deadlinestring or nullNoYYYY-MM-DD or an ISO 8601 date-time with a time zone. Length 0 to 40.
isFocusbooleanNo
isCompletedbooleanNo
statusstringNoOne of: SUGGESTED, ACTIVE, ARCHIVED, DISMISSED.

Response 200

Schema: TaskReceiptResponse

Response of task.update
FieldTypeRequiredNotes
dataTaskReceiptYes

Errors

Decisions

List decisions

get/api/v1/decisions

Active decisions of the workspace, newest first. Private fields need private access.

Operation
decision.list
Scope
decisions:read
Idempotency-Key
Not used

Parameters

Parameters of decision.list
NameInTypeRequiredNotes
menteeProfileIdquerystringNoOnly this mentee's decisions. Pattern ^[A-Za-z0-9_-]{1,128}$.
cursorquerystringNonextCursor from the previous page. Opaque; only valid with the same filters. Length 0 to 512.
limitqueryintegerNoPage size, 1 to 100 (default 25). Range 1 to 100. Default 25.

Response 200

Schema: DecisionPage

Response of decision.list
FieldTypeRequiredNotes
dataarray of DecisionYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to the filters it was issued with.

Errors

Create a decision

post/api/v1/decisions

Records an agreed decision. The issuing account is the author; a mentee key may create decisions only for its own profile.

Operation
decision.create
Scope
decisions:write
Idempotency-Key
Required

Parameters

Parameters of decision.create
NameInTypeRequiredNotes
Idempotency-KeyheaderstringYesUnique per logical write. Retrying with the same key and body returns the original result; the same key with a different body is 409 idempotency_conflict. Keys are scoped to the API key lineage and kept for 30 days. Pattern ^[A-Za-z0-9_-]{16,128}$.

Request body

Schema: DecisionCreateRequest

Request body of decision.create
FieldTypeRequiredNotes
menteeProfileIdstringYesPattern ^[A-Za-z0-9_-]{1,128}$.
titlestringYesLength 1 to 200.
bodystringYesLength 0 to 10000.
agreedOnstring (date)Yes

Response 201

Schema: DecisionReceiptResponse

Response of decision.create
FieldTypeRequiredNotes
dataDecisionReceiptYes

Errors

Get a decision

get/api/v1/decisions/{decisionId}

One decision. With private access: review state, sources and (for recordings not bound to another mentor) passages and provider links.

Operation
decision.get
Scope
decisions:read
Idempotency-Key
Not used

Parameters

Parameters of decision.get
NameInTypeRequiredNotes
decisionIdpathstringYesDecision id. Pattern ^[A-Za-z0-9_-]{1,128}$.

Response 200

Schema: DecisionResponse

Response of decision.get
FieldTypeRequiredNotes
dataDecisionYes

Errors

Webhooks

List webhook endpoints

get/api/v1/webhooks

Endpoints created by this key's lineage (the key and its rotated successors).

Operation
webhook.list
Scope
webhooks:write
Idempotency-Key
Not used

Response 200

Schema: WebhookEndpointList

Response of webhook.list
FieldTypeRequiredNotes
dataarray of WebhookEndpointYes

Errors

Create a webhook endpoint

post/api/v1/webhooks

Subscribes a public https URL to event types. Each event type needs its read scope. The signing secret is returned once.

Operation
webhook.create
Scope
webhooks:write
Idempotency-Key
Required

Parameters

Parameters of webhook.create
NameInTypeRequiredNotes
Idempotency-KeyheaderstringYesUnique per logical write. Retrying with the same key and body returns the original result; the same key with a different body is 409 idempotency_conflict. Keys are scoped to the API key lineage and kept for 30 days. Pattern ^[A-Za-z0-9_-]{16,128}$.

Request body

Schema: WebhookEndpointCreateRequest

Request body of webhook.create
FieldTypeRequiredNotes
urlstringYesPublic https URL; no credentials, fragment, private host or private IP. Length 0 to 2048.
eventTypesarray of WebhookEventTypeYesEach type needs its read scope on the key. Items 1 to 7.
descriptionstring or nullNoLength 0 to 200.

Response 201

Schema: WebhookEndpointReceiptResponse

Response of webhook.create
FieldTypeRequiredNotes
dataWebhookEndpointReceiptYes

Errors

Get a webhook endpoint

get/api/v1/webhooks/{endpointId}

One endpoint of this key's lineage.

Operation
webhook.get
Scope
webhooks:write
Idempotency-Key
Not used

Parameters

Parameters of webhook.get
NameInTypeRequiredNotes
endpointIdpathstringYesWebhook endpoint id. Pattern ^[A-Za-z0-9_-]{1,128}$.

Response 200

Schema: WebhookEndpointResponse

Response of webhook.get
FieldTypeRequiredNotes
dataWebhookEndpointYes

Errors

Update a webhook endpoint

patch/api/v1/webhooks/{endpointId}

Changes url, eventTypes or description, or disables/re-enables the endpoint.

Operation
webhook.update
Scope
webhooks:write
Idempotency-Key
Required

Parameters

Parameters of webhook.update
NameInTypeRequiredNotes
endpointIdpathstringYesWebhook endpoint id. Pattern ^[A-Za-z0-9_-]{1,128}$.
Idempotency-KeyheaderstringYesUnique per logical write. Retrying with the same key and body returns the original result; the same key with a different body is 409 idempotency_conflict. Keys are scoped to the API key lineage and kept for 30 days. Pattern ^[A-Za-z0-9_-]{16,128}$.

Request body

Schema: WebhookEndpointUpdateRequest

Request body of webhook.update
FieldTypeRequiredNotes
urlstringNoLength 0 to 2048.
eventTypesarray of WebhookEventTypeNoItems 1 to 7.
descriptionstring or nullNoLength 0 to 200.
enabledbooleanNofalse disables (MANUAL); true re-enables MANUAL or FAILURES and clears the failure streak.

Response 200

Schema: WebhookEndpointReceiptResponse

Response of webhook.update
FieldTypeRequiredNotes
dataWebhookEndpointReceiptYes

Errors

Delete a webhook endpoint

delete/api/v1/webhooks/{endpointId}

Deletes the endpoint, its secrets and its pending deliveries. Finished delivery logs are kept until retention removes them (30 days).

Operation
webhook.delete
Scope
webhooks:write
Idempotency-Key
Required

Parameters

Parameters of webhook.delete
NameInTypeRequiredNotes
endpointIdpathstringYesWebhook endpoint id. Pattern ^[A-Za-z0-9_-]{1,128}$.
Idempotency-KeyheaderstringYesUnique per logical write. Retrying with the same key and body returns the original result; the same key with a different body is 409 idempotency_conflict. Keys are scoped to the API key lineage and kept for 30 days. Pattern ^[A-Za-z0-9_-]{16,128}$.

Response 200

Schema: WebhookEndpointReceiptResponse

Response of webhook.delete
FieldTypeRequiredNotes
dataWebhookEndpointReceiptYes

Errors

Rotate the signing secret

post/api/v1/webhooks/{endpointId}/rotate-secret

Issues a new secret (returned once). Older secrets stay valid for overlapHours; during the overlap every delivery is signed with each.

Operation
webhook.secret.rotate
Scope
webhooks:write
Idempotency-Key
Required

Parameters

Parameters of webhook.secret.rotate
NameInTypeRequiredNotes
endpointIdpathstringYesWebhook endpoint id. Pattern ^[A-Za-z0-9_-]{1,128}$.
Idempotency-KeyheaderstringYesUnique per logical write. Retrying with the same key and body returns the original result; the same key with a different body is 409 idempotency_conflict. Keys are scoped to the API key lineage and kept for 30 days. Pattern ^[A-Za-z0-9_-]{16,128}$.

Request body (optional)

Schema: WebhookRotateSecretRequest

Request body of webhook.secret.rotate
FieldTypeRequiredNotes
overlapHoursintegerNoRange 0 to 24. Default 24.

Response 200

Schema: WebhookEndpointReceiptResponse

Response of webhook.secret.rotate
FieldTypeRequiredNotes
dataWebhookEndpointReceiptYes

Errors

List deliveries

get/api/v1/webhooks/{endpointId}/deliveries

Delivery log, newest first: state, attempts, status code, latency and error class only (never payloads).

Operation
webhook.delivery.list
Scope
webhooks:write
Idempotency-Key
Not used

Parameters

Parameters of webhook.delivery.list
NameInTypeRequiredNotes
endpointIdpathstringYesWebhook endpoint id. Pattern ^[A-Za-z0-9_-]{1,128}$.
statequerystringNoOnly this state. One of: PENDING, LEASED, SUCCEEDED, FAILED, CANCELLED, EXPIRED.
cursorquerystringNonextCursor from the previous page. Opaque; only valid with the same filters. Length 0 to 512.
limitqueryintegerNoPage size, 1 to 100 (default 25). Range 1 to 100. Default 25.

Response 200

Schema: WebhookDeliveryPage

Response of webhook.delivery.list
FieldTypeRequiredNotes
dataarray of WebhookDeliveryYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to the filters it was issued with.

Errors

Replay a delivery

post/api/v1/webhooks/{endpointId}/deliveries/{deliveryId}/replay

Sends a logged delivery again with the same webhook-id. Free. A delivery that is already scheduled is not scheduled twice.

Operation
webhook.delivery.replay
Scope
webhooks:write
Idempotency-Key
Required
Metering
Free (not counted)

Parameters

Parameters of webhook.delivery.replay
NameInTypeRequiredNotes
endpointIdpathstringYesWebhook endpoint id. Pattern ^[A-Za-z0-9_-]{1,128}$.
deliveryIdpathstringYesDelivery id. Pattern ^[A-Za-z0-9_-]{1,128}$.
Idempotency-KeyheaderstringYesUnique per logical write. Retrying with the same key and body returns the original result; the same key with a different body is 409 idempotency_conflict. Keys are scoped to the API key lineage and kept for 30 days. Pattern ^[A-Za-z0-9_-]{16,128}$.

Response 202

Schema: WebhookReplayReceiptResponse

Response of webhook.delivery.replay
FieldTypeRequiredNotes
dataWebhookReplayReceiptYes

Errors

Workflows

List workflows

get/api/v1/workflows

Workflows this key can start runs of, most recently changed first: not archived, metered, and whose active version has a manual trigger. No mentee data is returned, so workflows:read alone is enough.

Operation
workflow.list
Scope
workflows:read
Idempotency-Key
Not used

Parameters

Parameters of workflow.list
NameInTypeRequiredNotes
cursorquerystringNonextCursor from the previous page. Opaque; only valid with the same filters. Length 0 to 512.
limitqueryintegerNoPage size, 1 to 100 (default 25). Range 1 to 100. Default 25.

Response 200

Schema: WorkflowPage

Response of workflow.list
FieldTypeRequiredNotes
dataarray of WorkflowSummaryYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to this operation.

Errors

Start a workflow run

post/api/v1/workflows/{workflowId}/runs

Starts the workflow's manual run for the chosen mentees, exactly as a mentor does in the app. The workflow must be on, metered and set to start manually; the run executes under the authority of the mentor who turned it on, so revoking this key later does not cancel a run it already started. Each run counts against the workspace's workflow run allowance. Admission is all or none.

Operation
workflow.run.start
Scope
workflows:run, mentees:read
Idempotency-Key
Required

Parameters

Parameters of workflow.run.start
NameInTypeRequiredNotes
workflowIdpathstringYesWorkflow id. Pattern ^[A-Za-z0-9_-]{1,128}$.
Idempotency-KeyheaderstringYesUnique per logical write. Retrying with the same key and body returns the original result; the same key with a different body is 409 idempotency_conflict. Keys are scoped to the API key lineage and kept for 30 days. Pattern ^[A-Za-z0-9_-]{16,128}$.

Request body

Schema: WorkflowRunStartRequest

Request body of workflow.run.start
FieldTypeRequiredNotes
menteeProfileIdsarray of stringYesThe mentees to start a run for. Between 1 and 100 DIFFERENT ids: a repeated id is refused with 422 validation_failed (INVALID_SELECTION), never de-duplicated. Order does not matter - the list is sorted before it is hashed, so [b, a] and [a, b] are the same request under one Idempotency-Key. Items 1 to 100.

Response 200

Schema: WorkflowRunReceiptResponse

Response of workflow.run.start
FieldTypeRequiredNotes
dataWorkflowRunReceiptYes

Errors

Get a workflow run

get/api/v1/workflows/{workflowId}/runs/{runId}

One run of the workflow, whatever started it. A run of a workflow that reads questionnaire answers, or that is started by a questionnaire event, is returned in the redacted shape unless the key has private access.

Operation
workflow.run.get
Scope
workflows:read, mentees:read
Idempotency-Key
Not used

Parameters

Parameters of workflow.run.get
NameInTypeRequiredNotes
workflowIdpathstringYesWorkflow id. Pattern ^[A-Za-z0-9_-]{1,128}$.
runIdpathstringYesRun id. Pattern ^[A-Za-z0-9_-]{1,128}$.

Response 200

Schema: WorkflowRunResponse

Response of workflow.run.get
FieldTypeRequiredNotes
dataWorkflowRunYes

Errors

Webhook events

Each event is a POST to your endpoint with the WebhookEvent body and these headers.

  • decision.created
  • decision.updated
  • mentee.created
  • questionnaire.assignment.created
  • questionnaire.assignment.submitted
  • task.created
  • task.updated
  • workflow.run.ended
Webhook request headers
HeaderNotes
webhook-idEvent id. Identical across retries and replays: deduplicate on it.
webhook-timestampUnix seconds when this attempt was signed. Reject if more than 5 minutes from your clock.
webhook-signatureSpace-separated v1,<base64 HMAC-SHA256> values, one per active secret, over webhook-id.webhook-timestamp.body with the base64-decoded part of whsec_…

Schemas

ErrorCode

Stable machine-readable error code. See x-error-catalog for the HTTP status of each code.

string One of: client_limit_reached, conflict, feature_unavailable, forbidden, idempotency_conflict, idempotency_key_required, insufficient_scope, internal_error, invalid_credentials, not_found, plan_required, precondition_required, quota_exhausted, rate_limited, retry_later, revision_conflict, validation_failed, workflow_not_admitted.

Error

Fields of Error
FieldTypeRequiredNotes
errorobjectYes

DecisionReview

Fields of DecisionReview
FieldTypeRequiredNotes
statusstringYesOne of: NOT_REVIEWED, REVIEWED.
reviewedContentRevisioninteger or nullYes
reviewedAtstring (date-time) or nullYes
reviewerUserIdstring or nullYes

DecisionPassage

Fields of DecisionPassage
FieldTypeRequiredNotes
segmentIndexintegerYes
startOffsetintegerYes
endOffsetintegerYes
quotestringYes
speakerstring or nullYes
startSecondsnumber or nullYes

DecisionSource

Fields of DecisionSource
FieldTypeRequiredNotes
rolestringYesOne of: ORIGIN, CORROBORATION.
providerstringYes
meetingTitlestringYes
sourceDatestring or nullYes
sourceDateKindstring or nullYes
linkedAtstring (date-time)Yes
sourceUrlstring or nullNoPrivate.Private field: present only when the API key has private access, on the detail read only, and never for a recording bound to another mentor's connection.
passagesarray of DecisionPassageNoPrivate.Private field: present only when the API key has private access, on the detail read only, and never for a recording bound to another mentor's connection.

Decision

Fields of Decision
FieldTypeRequiredNotes
idstringYes
menteeProfileIdstringYes
titlestringYes
bodystringYes
agreedOnstring (date) or nullYes
sourceKindstringYesOne of: MANUAL, AI_EXTRACTED.
revisionintegerYesRange 1 to any.
chronologyDatestring (date)NoPrivate.Present when the date is the agreed date; a date derived from an imported source is private.
chronologyBasisstringNoPrivate.Omitted together with chronologyDate. One of: AGREED_ON, SOURCE_DATE, IMPORTED_DATE.
addedAtstring (date-time)Yes
updatedAtstring (date-time)Yes
createdByUserIdstringYes
reviewDecisionReview or any or nullNoPrivate.Private field: present only when the API key has private access.
sourcesarray of DecisionSourceNoPrivate.Private field: present only when the API key has private access.

DecisionCreateRequest

Fields of DecisionCreateRequest
FieldTypeRequiredNotes
menteeProfileIdstringYesPattern ^[A-Za-z0-9_-]{1,128}$.
titlestringYesLength 1 to 200.
bodystringYesLength 0 to 10000.
agreedOnstring (date)Yes

DecisionReceipt

Fields of DecisionReceipt
FieldTypeRequiredNotes
idstringYes
menteeProfileIdstringYes
revisionintegerYes
statusstringYesOne of: ACTIVE.
operationIdstringYes
createdAtstring (date-time)Yes

DecisionPage

Fields of DecisionPage
FieldTypeRequiredNotes
dataarray of DecisionYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to the filters it was issued with.

DecisionResponse

Fields of DecisionResponse
FieldTypeRequiredNotes
dataDecisionYes

DecisionReceiptResponse

Fields of DecisionReceiptResponse
FieldTypeRequiredNotes
dataDecisionReceiptYes

MenteeSummary

Fields of MenteeSummary
FieldTypeRequiredNotes
idstringYes
externalIdstring or nullYes
namestringYes
emailstringYes
statusstringYesOne of: ACTIVE, PAUSED, ARCHIVED, LOCKED.
companystring or nullYes
websitestring or nullYes
phonestring or nullYes
timeZonestring or nullYes
engagementStartstring (date-time) or nullYes
accountActivebooleanYes
accountSetUpbooleanYes
createdAtstring (date-time)Yes

MenteeDetail

Fields of MenteeDetail
FieldTypeRequiredNotes
idstringYes
externalIdstring or nullYes
namestringYes
emailstringYes
statusstringYesOne of: ACTIVE, PAUSED, ARCHIVED, LOCKED.
companystring or nullYes
websitestring or nullYes
phonestring or nullYes
timeZonestring or nullYes
engagementStartstring (date-time) or nullYes
accountActivebooleanYes
accountSetUpbooleanYes
createdAtstring (date-time)Yes
tidycalBookingUrlstring or nullYes
nextCallDatestring (date-time) or nullYes
invitedAtstring (date-time) or nullYes
sharedGoalobjectYes
privateNotesstring or nullNoPrivate.Private field: present only when the API key has private access (mentor notes).

QuestionnaireSelection

Fields of QuestionnaireSelection
FieldTypeRequiredNotes
templateIdstringYesPattern ^[A-Za-z0-9_-]{1,128}$.
publishedVersionIdstringYesPattern ^[A-Za-z0-9_-]{1,128}$.
dueobject or any or nullNoDefault null.
expiresAtstring (date-time) or nullNoDefault null.
messagestring or nullNoLength 0 to 10000. Default null.

MenteeCreateRequest

Fields of MenteeCreateRequest
FieldTypeRequiredNotes
namestringYesLength 1 to 200.
emailstring (email)Yes
companystring or nullNoLength 0 to 200.
websitestring or nullNoLength 0 to 2000.
phonestring or nullNoLength 0 to 100.
tidycalBookingUrlstring or nullNoLength 0 to 2000.
timeZonestringNoDefault "UTC".
sendInvitebooleanYesRequired. true queues one invitation email to the mentee.
questionnairesarray of QuestionnaireSelectionYesNon-empty needs assignments:write as well. Items 0 to 20.
externalIdstringNoYour system's id (for example a CRM contact id). Unique per workspace. Pattern ^[A-Za-z0-9._:@|/-]{1,128}$.

MenteeCreateReceipt

Fields of MenteeCreateReceipt
FieldTypeRequiredNotes
menteeProfileIdstringYes
externalIdstring or nullYes
assignmentIdsarray of stringYes
issuedAssignmentIdsarray of stringYes
reusedAssignmentIdsarray of stringYes
invitationobject or any or nullYes
operationIdstringYes
createdAtstring (date-time)Yes

MenteePage

Fields of MenteePage
FieldTypeRequiredNotes
dataarray of MenteeSummaryYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to the filters it was issued with.

MenteeResponse

Fields of MenteeResponse
FieldTypeRequiredNotes
dataMenteeDetailYes

MenteeCreateReceiptResponse

Fields of MenteeCreateReceiptResponse
FieldTypeRequiredNotes
dataMenteeCreateReceiptYes

TranscriptSegment

Fields of TranscriptSegment
FieldTypeRequiredNotes
indexintegerYes
speakerstring or nullYesLength 0 to 256.
timestampstring or nullYesLength 0 to 64.
startTimenumber or nullYes
textOffsetintegerYesUTF-16 offset of text within the segment.
textstringYes
continuesbooleanYesMore text of this segment follows on the next page.

TranscriptPage

Fields of TranscriptPage
FieldTypeRequiredNotes
segmentsarray of TranscriptSegmentYes
nextCursorstring or nullYesPass as transcriptCursor.

Meeting

Fields of Meeting
FieldTypeRequiredNotes
idstringYes
menteeProfileIdstringYes
titlestringYes
datestring (date-time)Yes
durationinteger or nullYes
providerstring or nullYes
summaryOneLinerstring or nullNoPrivate.Private field: present only when the API key has private access, never for another mentor's recording. Also available to a mentee key for that mentee’s own meetings.
recordingUrlstring or nullNoPrivate.Private field: present only when the API key has private access, never for another mentor's recording. Also available to a mentee key for that mentee’s own meetings.

MeetingDetail

Fields of MeetingDetail
FieldTypeRequiredNotes
idstringYes
menteeProfileIdstringYes
titlestringYes
datestring (date-time)Yes
durationinteger or nullYes
providerstring or nullYes
summaryOneLinerstring or nullNoPrivate.Private field: present only when the API key has private access, never for another mentor's recording. Also available to a mentee key for that mentee’s own meetings.
recordingUrlstring or nullNoPrivate.Private field: present only when the API key has private access, never for another mentor's recording. Also available to a mentee key for that mentee’s own meetings.
summarystring or nullNoPrivate.Private field: present only when the API key has private access. First page only (no transcriptCursor); at most 16,000 UTF-8 bytes. Also available to a mentee key for that mentee’s own meetings.
summaryTruncatedbooleanNoPrivate.Private field: present only when the API key has private access. First page only. Also available to a mentee key for that mentee’s own meetings.
transcriptTranscriptPage or any or nullNoPrivate.Private field: present only when the API key has private access. One bounded page (segments at most 64,000 UTF-8 bytes including the summary). Also available to a mentee key for that mentee’s own meetings.

MeetingPage

Fields of MeetingPage
FieldTypeRequiredNotes
dataarray of MeetingYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to the filters it was issued with.

MeetingResponse

Fields of MeetingResponse
FieldTypeRequiredNotes
dataMeetingDetailYes

PublishedQuestionnaire

Fields of PublishedQuestionnaire
FieldTypeRequiredNotes
templateIdstringYes
publishedVersionIdstringYes
titlestringYes
versionintegerYes
publishedAtstring (date-time)Yes
onboardingDefaultbooleanYes

QuestionnairePage

Fields of QuestionnairePage
FieldTypeRequiredNotes
dataarray of PublishedQuestionnaireYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to the filters it was issued with.

AssignmentRequest

Fields of AssignmentRequest
FieldTypeRequiredNotes
questionnairesarray of QuestionnaireSelectionYesItems 1 to 20.

AssignmentReceipt

Fields of AssignmentReceipt
FieldTypeRequiredNotes
menteeProfileIdstringYes
assignmentIdsarray of stringYes
issuedAssignmentIdsarray of stringYes
reusedAssignmentIdsarray of stringYesAlready open ordinary assignments; nothing duplicated.
operationIdstringYes
createdAtstring (date-time)Yes

AssignmentReceiptResponse

Fields of AssignmentReceiptResponse
FieldTypeRequiredNotes
dataAssignmentReceiptYes

Task

Fields of Task
FieldTypeRequiredNotes
idstringYes
menteeProfileIdstringYes
titlestringYes
detailsstring or nullYes
assigneestring or nullYes
statusstringYesOne of: SUGGESTED, ACTIVE, ARCHIVED, DISMISSED.
isCompletedbooleanYes
completedAtstring (date-time) or nullYes
deadlinestring (date-time) or nullYes
isFocusbooleanYes
sourcestringYes
meetingobject or any or nullYes
archivedAtstring (date-time) or nullYes
revisionintegerYesRange 1 to any.
createdAtstring (date-time)Yes
updatedAtstring (date-time)Yes
assigneeEmailstring or nullNoPrivate.Private field: present only when the API key has private access; withheld for a task imported from another mentor's recording.

TaskCreateRequest

Fields of TaskCreateRequest
FieldTypeRequiredNotes
menteeProfileIdstringYesPattern ^[A-Za-z0-9_-]{1,128}$.
titlestringYesLength 1 to 1000.
detailsstring or nullNoAt most 10,000 characters after trimming.
assigneeTargetstringNoOne of: MENTEE, MENTOR, UNASSIGNED. Default "UNASSIGNED".
deadlinestring or nullNoYYYY-MM-DD or an ISO 8601 date-time with a time zone. Length 0 to 40.
meetingIdstring or nullNo
isFocusbooleanNoDefault false.

TaskUpdateRequest

Fields of TaskUpdateRequest
FieldTypeRequiredNotes
titlestringNoLength 1 to 1000.
detailsstring or nullNo
assigneeTargetstringNoOne of: MENTEE, MENTOR, UNASSIGNED.
deadlinestring or nullNoYYYY-MM-DD or an ISO 8601 date-time with a time zone. Length 0 to 40.
isFocusbooleanNo
isCompletedbooleanNo
statusstringNoOne of: SUGGESTED, ACTIVE, ARCHIVED, DISMISSED.

TaskReceipt

Fields of TaskReceipt
FieldTypeRequiredNotes
idstringYes
menteeProfileIdstringYes
revisionintegerYes
statusstringYesOne of: SUGGESTED, ACTIVE, ARCHIVED, DISMISSED.
operationIdstringYes
completedAtstring (date-time) or nullYes

TaskPage

Fields of TaskPage
FieldTypeRequiredNotes
dataarray of TaskYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to the filters it was issued with.

TaskResponse

Fields of TaskResponse
FieldTypeRequiredNotes
dataTaskYes

TaskReceiptResponse

Fields of TaskReceiptResponse
FieldTypeRequiredNotes
dataTaskReceiptYes

WebhookEventType

string One of: decision.created, decision.updated, mentee.created, questionnaire.assignment.created, questionnaire.assignment.submitted, task.created, task.updated, workflow.run.ended.

WebhookEndpoint

Fields of WebhookEndpoint
FieldTypeRequiredNotes
idstringYes
urlstring (uri)Yes
descriptionstring or nullYes
eventTypesarray of WebhookEventTypeYes
statusstringYesOne of: ACTIVE, DISABLED.
disabledReasonstring or nullYesOne of: MANUAL, CREDENTIAL_REVOKED, CREDENTIAL_EXPIRED, FAILURES, null.
disabledAtstring (date-time) or nullYes
consecutiveFailuresintegerYes
revisionintegerYes
createdAtstring (date-time)Yes
updatedAtstring (date-time)Yes
secretsarray of objectYesUnexpired signing secrets (metadata only; never the secret).

WebhookEndpointCreateRequest

Fields of WebhookEndpointCreateRequest
FieldTypeRequiredNotes
urlstringYesPublic https URL; no credentials, fragment, private host or private IP. Length 0 to 2048.
eventTypesarray of WebhookEventTypeYesEach type needs its read scope on the key. Items 1 to 7.
descriptionstring or nullNoLength 0 to 200.

WebhookEndpointUpdateRequest

Fields of WebhookEndpointUpdateRequest
FieldTypeRequiredNotes
urlstringNoLength 0 to 2048.
eventTypesarray of WebhookEventTypeNoItems 1 to 7.
descriptionstring or nullNoLength 0 to 200.
enabledbooleanNofalse disables (MANUAL); true re-enables MANUAL or FAILURES and clears the failure streak.

WebhookRotateSecretRequest

Fields of WebhookRotateSecretRequest
FieldTypeRequiredNotes
overlapHoursintegerNoRange 0 to 24. Default 24.

WebhookEndpointReceipt

Fields of WebhookEndpointReceipt
FieldTypeRequiredNotes
idstringYes
statusstringYesOne of: ACTIVE, UPDATED, ROTATED, DELETED.
revisionintegerYes
operationIdstringYes
secretstring or nullNocreate and rotate-secret only: the whsec_ signing secret, shown once; null on an idempotent replay.

WebhookDelivery

Fields of WebhookDelivery
FieldTypeRequiredNotes
idstringYes
webhookIdstringYesThe webhook-id header value (the event id); stable across retries and replays.
eventTypeWebhookEventTypeYes
statestringYesOne of: PENDING, LEASED, SUCCEEDED, FAILED, CANCELLED, EXPIRED.
attemptsintegerYes
replayCountintegerYes
lastStatusCodeinteger or nullYes
lastErrorClassstring or nullYes
lastLatencyMsinteger or nullYes
deliveredAtstring (date-time) or nullYes
nextAttemptAtstring (date-time) or nullYes
createdAtstring (date-time)Yes
logarray of objectYesItems 0 to 20.

WebhookReplayReceipt

Fields of WebhookReplayReceipt
FieldTypeRequiredNotes
deliveryIdstringYes
webhookIdstringYes
statestringYesOne of: PENDING, LEASED, SUCCEEDED, FAILED, CANCELLED, EXPIRED.
replayCountintegerYes
operationIdstringYes

WebhookEndpointList

Fields of WebhookEndpointList
FieldTypeRequiredNotes
dataarray of WebhookEndpointYes

WebhookEndpointResponse

Fields of WebhookEndpointResponse
FieldTypeRequiredNotes
dataWebhookEndpointYes

WebhookEndpointReceiptResponse

Fields of WebhookEndpointReceiptResponse
FieldTypeRequiredNotes
dataWebhookEndpointReceiptYes

WebhookDeliveryPage

Fields of WebhookDeliveryPage
FieldTypeRequiredNotes
dataarray of WebhookDeliveryYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to the filters it was issued with.

WebhookReplayReceiptResponse

Fields of WebhookReplayReceiptResponse
FieldTypeRequiredNotes
dataWebhookReplayReceiptYes

WebhookEvent

Webhook request body (POSTed to your endpoint). Not an API response.

Fields of WebhookEvent
FieldTypeRequiredNotes
idstringYesEquals the webhook-id header.
typeWebhookEventTypeYes
timestampstring (date-time)Yes
workspaceIdstringYes
routinebooleanYesfalse when the event comes from checking a client's past calls (historical extraction), true for live work. Non-routine events never trigger workflows.
dataobjectYes
originobjectYes

WorkflowRunStartRequest

Unknown fields are refused with 422 validation_failed.

Fields of WorkflowRunStartRequest
FieldTypeRequiredNotes
menteeProfileIdsarray of stringYesThe mentees to start a run for. Between 1 and 100 DIFFERENT ids: a repeated id is refused with 422 validation_failed (INVALID_SELECTION), never de-duplicated. Order does not matter - the list is sorted before it is hashed, so [b, a] and [a, b] are the same request under one Idempotency-Key. Items 1 to 100.

WorkflowRunReceipt

Fields of WorkflowRunReceipt
FieldTypeRequiredNotes
invocationIdstringYesThe recorded trigger instance for this request.
workflowIdstringYesThe workflow that was started.
outcomestringYesAdmission is all or none. A request that admitted nobody is 409 workflow_not_admitted, not a receipt. One of: ADMITTED.
admittedCountintegerYesNumber of runs created (equal to the number of ids sent).
runsarray of objectYes

WorkflowRunReceiptResponse

Fields of WorkflowRunReceiptResponse
FieldTypeRequiredNotes
dataWorkflowRunReceiptYes

WorkflowRunState

Run state. Treat an unlisted value as a new state rather than an error.

string One of: ADMITTED, ACTIVE, PAUSED_REAUTHORIZE, SUCCEEDED, SKIPPED, FAILED, CANCELLED, NOT_STARTED.

WorkflowRunRedactedState

Redacted run state. ADMITTED, ACTIVE and PAUSED_REAUTHORIZE all read IN_PROGRESS; every ended run reads ENDED.

string One of: IN_PROGRESS, ENDED.

WorkflowRunStep

Fields of WorkflowRunStep
FieldTypeRequiredNotes
idstringYesStep execution id.
positionintegerYesPosition in the workflow (the start step is -1).
kindstringYesOne of: start, condition, delay, action.
actionTypestring or nullYesAction steps only. Never the action's settings, message text or referenced record.
statestringYesStep state.
outcomeCodestring or nullYesStable outcome code. Never a condition operand, fact name or value.
wakeAtstring (date-time) or nullYes
completedAtstring (date-time) or nullYes
retryCountintegerYes
suspendedbooleanYes

WorkflowRunFull

Fields of WorkflowRunFull
FieldTypeRequiredNotes
idstringYesRun id.
workflowIdstringYesThe workflow this run belongs to.
invocationIdstringYesThe trigger instance that admitted this run.
menteeProfileIdstringYesThe mentee this run is for.
stateWorkflowRunStateYes
outcomeCodestring or nullYesStable outcome code for an ended run.
versionNumberinteger or nullYesThe workflow version this run is pinned to.
startedViastring or nullYesHow this run was started. Null only if the originating trigger instance no longer exists. One of: WEB, BACKGROUND, EXTERNAL, null.
createdAtstring (date-time)Yes
startedAtstring (date-time) or nullYes
endedAtstring (date-time) or nullYes
revisionintegerYes
stepsarray of WorkflowRunStepYes

WorkflowRunRedacted

Returned for a run whose workflow reads questionnaire answers, to a key without private access.

Fields of WorkflowRunRedacted
FieldTypeRequiredNotes
idstringYesRun id.
workflowIdstringYesThe workflow this run belongs to.
invocationIdstringYesThe trigger instance that admitted this run.
menteeProfileIdstringYesThe mentee this run is for.
stateWorkflowRunRedactedStateYes
startedViastring or nullYesHow this run was started. Null only if the originating trigger instance no longer exists. One of: WEB, BACKGROUND, EXTERNAL, null.
createdAtstring (date-time)Yes

WorkflowRun

Full or redacted, decided per request. A run is redacted when the workflow version it is pinned to either uses a questionnaire condition (questionnaire status, submitted, score or a readable answer) or is started by a questionnaire event, AND the key does not have private access. Tell them apart by the state value: a redacted run reports only IN_PROGRESS or ENDED.

WorkflowRunFull or WorkflowRunRedacted

WorkflowRunResponse

Fields of WorkflowRunResponse
FieldTypeRequiredNotes
dataWorkflowRunYes

WorkflowSummary

A workflow this API key can start runs of: not archived, metered, and with a manual-trigger active version.

Fields of WorkflowSummary
FieldTypeRequiredNotes
idstringYesWorkflow id.
namestringYesThe workflow name as the mentor wrote it.
statestringYesACTIVE accepts run requests; PAUSED is listed but refuses them with 409 workflow_not_admitted. One of: ACTIVE, PAUSED.
manualRunAvailablebooleanYesTrue when POST /api/v1/workflows/{workflowId}/runs can admit a run right now.
fanOutCapintegerYesMaximum number of mentees one run request may select on this plan.
updatedAtstring (date-time)YesWhen the workflow was last changed.

WorkflowPage

Fields of WorkflowPage
FieldTypeRequiredNotes
dataarray of WorkflowSummaryYes
nextCursorstring or nullYesOpaque cursor for the next page, or null on the last page. Bound to this operation.

WorkflowRunEvent

Fields of WorkflowRunEvent
FieldTypeRequiredNotes
workflowIdstringYes
invocationIdstringYes
statestringYes
outcomeCodestring or nullYes
startedViastring or nullYesOne of: WEB, BACKGROUND, EXTERNAL, null.
createdAtstring (date-time)Yes
startedAtstring (date-time) or nullYes
endedAtstring (date-time) or nullYes
API reference | MentPass