Skip to main content

Meetings

12 operations in the Tolvi API, version 1. Paths are relative to https://api.tolvi.co.uk. Every amount is integer pence.

List meetings

GET/api/v1/meetings

Scopes
meetings:read

Newest first (up to 200). Filter by client to see the meetings filed against it, by words in the title or client name, by status, or to the ones you sent. Part of the meetings product: the firm must have it and you must have access to it.

Parameters

Parameters for GET /api/v1/meetings
NameInTypeDescription
minequerystring

true: only the meetings you sent a note-taker to.

One of: true, false

statusquerystring (MeetingStatusGroup)

upcoming (scheduling, scheduled), in_progress (joining to processing), ready, not_recorded (failed or cancelled).

One of: upcoming, in_progress, ready, not_recorded

qquerystring

Words in the meeting’s title or its client’s name.

up to 100 characters

clientIdquerystring (uuid)

Responses

200 OK, application/json

Body: array of MeetingSummary.

A meeting a note-taker was sent to.

200 OK response for GET /api/v1/meetings
FieldTypeDescription
[].​idrequiredstring (uuid)
[].​titlerequiredstring
[].​clientIdrequiredstring (uuid)nullable
[].​clientNamerequiredstringnullable
[].​platformrequiredstring (MeetingPlatform)nullable

One of: zoom, google_meet, microsoft_teams, webex, goto_meeting

[].​meetingUrlrequiredstring (uri)
[].​joinAtrequiredstring (date-time)
[].​sourcerequiredstring (MeetingSource)

link: pasted on the Meetings page. calendar: ticked on the Calendar page.

One of: link, calendar

[].​statusrequiredstring (MeetingStatus)

scheduling: being sent to Recall. scheduled: will join at joinAt. joining, waiting_room (someone must admit it), in_call, recording. processing: the call ended; the transcript and summary are on their way. ready: transcript and summary filed. failed: see statusDetail. cancelled.

One of: scheduling, scheduled, joining, waiting_room, in_call, recording, processing, ready, failed, cancelled

[].​statusDetailrequiredstringnullable

Why it failed or is held up, in words.

[].​startedAtrequiredstring (date-time)nullable
[].​endedAtrequiredstring (date-time)nullable
[].​createdByIdrequiredstring (uuid)nullable
[].​createdByNamerequiredstringnullable
[].​outputStatusrequiredstring (MeetingOutputStatus)

One of: pending, transcribing, summarising, ready, failed

[].​actionCountrequiredinteger

at least 0

[].​openActionCountrequiredinteger

Next steps not yet sorted with Create follow-ups (made into a review point or a client request, or skipped).

at least 0

[].​recordingDeletedAtrequiredstring (date-time)nullable

When the recording (audio and video) was deleted at Recall. Tolvi keeps only the transcript and summary.

[].​billableMinutesrequiredintegernullable

Minutes this meeting counts against the firm’s monthly allowance: the recording’s length, rounded up. Null until it ends.

at least 0

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 429 Too many requests, as problem details (application/problem+json).

Send a note-taker to a meeting

POST/api/v1/meetings

Scopes
meetings:write
Retries
Send an Idempotency-Key to make retries safe.

Recall.ai joins the meeting at joinAt (now if left out) as a visible participant, posts a notice that it is recording, and records it. After the call Tolvi files the transcript and Tolvi AI’s summary and actions against the meeting (charged to you as AI tokens). 409 if someone in the firm already sent one to the same meeting; 502 if Recall refused it. Part of the meetings product: the firm must have it and you must have access to it.

Parameters

Parameters for POST /api/v1/meetings
NameInTypeDescription
Idempotency-Keyheaderstring

A unique key (1-255 visible characters) to make retries safe. Replayed for 24 hours.

1 to 255 characters

Request body

Required. application/json: object (LaunchMeetingRequest).

Request body for POST /api/v1/meetings
FieldTypeDescription
meetingUrlrequiredstring (uri)

A Zoom, Google Meet, Microsoft Teams, Webex or GoTo Meeting link.

example "https://teams.microsoft.com/l/meetup-join/…"

titlestring

up to 200 characters

clientIdstring (uuid)nullable

The client to file it against.

joinAtstring (date-time)

When to join. Now if left out.

Responses

201 Created, application/json

Body: object (MeetingDetail).

A meeting with its transcript and the Tolvi AI write-up: summary, takeaways, next steps, open questions and a draft follow-up email.

201 Created response for POST /api/v1/meetings
FieldTypeDescription
idrequiredstring (uuid)
titlerequiredstring
clientIdrequiredstring (uuid)nullable
clientNamerequiredstringnullable
platformrequiredstring (MeetingPlatform)nullable

One of: zoom, google_meet, microsoft_teams, webex, goto_meeting

meetingUrlrequiredstring (uri)
joinAtrequiredstring (date-time)
sourcerequiredstring (MeetingSource)

link: pasted on the Meetings page. calendar: ticked on the Calendar page.

One of: link, calendar

statusrequiredstring (MeetingStatus)

scheduling: being sent to Recall. scheduled: will join at joinAt. joining, waiting_room (someone must admit it), in_call, recording. processing: the call ended; the transcript and summary are on their way. ready: transcript and summary filed. failed: see statusDetail. cancelled.

One of: scheduling, scheduled, joining, waiting_room, in_call, recording, processing, ready, failed, cancelled

statusDetailrequiredstringnullable

Why it failed or is held up, in words.

startedAtrequiredstring (date-time)nullable
endedAtrequiredstring (date-time)nullable
createdByIdrequiredstring (uuid)nullable
createdByNamerequiredstringnullable
outputStatusrequiredstring (MeetingOutputStatus)

One of: pending, transcribing, summarising, ready, failed

actionCountrequiredinteger

at least 0

openActionCountrequiredinteger

Next steps not yet sorted with Create follow-ups (made into a review point or a client request, or skipped).

at least 0

recordingDeletedAtrequiredstring (date-time)nullable

When the recording (audio and video) was deleted at Recall. Tolvi keeps only the transcript and summary.

billableMinutesrequiredintegernullable

Minutes this meeting counts against the firm’s monthly allowance: the recording’s length, rounded up. Null until it ends.

at least 0

summaryrequiredstringnullable
keyPointsrequiredarray of string

Takeaways: facts, figures and decisions worth keeping on the client file.

actionsrequiredarray of MeetingAction

Next steps: what each side agreed to do.

actions[].​textrequiredstring
actions[].​ownerrequiredstringnullable

As named in the meeting.

actions[].​siderequiredstring (MeetingActionSide)

One of: firm, client, unclear

actions[].​duerequiredstringnullable

As said in the meeting, e.g. "by Friday".

openQuestionsrequiredarray of string

Questions raised in the meeting that were not settled. Empty for meetings summarised before 25 Oct 2026.

followUpEmailrequiredobject (MeetingFollowUpEmail)nullable

A draft email to the client recapping the meeting, with any client requests from Create follow-ups listed before the sign-off; null if nothing was agreed. Tolvi never sends it.

followUpEmail.​subjectrequiredstring
followUpEmail.​bodyrequiredstring

Plain text.

transcriptrequiredarray of MeetingTurn
transcript[].​speakerrequiredstring
transcript[].​startSecondsrequiredinteger

Seconds from the start of the recording.

at least 0

transcript[].​textrequiredstring
aiTokensrequiredintegernullable

Tolvi AI tokens the summary used.

at least 0

outputFailurerequiredstringnullable
followUpsrequiredarray of MeetingFollowUp

What each next step became (Create follow-ups), by its position in actions.

followUps[].​actionIndexrequiredinteger

The next step’s position in actions (from 0).

at least 0

followUps[].​kindrequiredstring (MeetingFollowUpKind)

One of: review_point, client_request, skip

followUps[].​engagementIdrequiredstring (uuid)nullable
followUps[].​reviewPointIdrequiredstring (uuid)nullable
followUps[].​sectionCoderequiredstringnullable

The W/P section the review point is on (null: the engagement as a whole).

followUps[].​textrequiredstringnullable

Client requests: the line added to the follow-up email.

followUps[].​createdAtrequiredstring (date-time)
followUps[].​createdByIdrequiredstring (uuid)nullable

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 409 Conflict, 422 Unprocessable content, 429 Too many requests, as problem details (application/problem+json).

Get this month’s recorded minutes against the firm’s allowance

GET/api/v1/meetings/usage

Scopes
meetings:read

Each meeting counts its recording’s length, rounded up to the minute, in the month it started. Part of the meetings product: the firm must have it and you must have access to it.

Responses

200 OK, application/json

Body: object (MeetingsUsage).

Recorded minutes this month against the firm’s Meetings allowance.

200 OK response for GET /api/v1/meetings/usage
FieldTypeDescription
monthrequiredstring

The calendar month (UTC).

example "2026-10"

minutesUsedrequiredinteger

at least 0

planIdrequiredstringnullable

Null on a trial (300 minutes).

example "meetings_team"

allowancerequiredinteger

at least 0

remainingrequiredinteger

at least 0

overageMinutesrequiredinteger

Minutes beyond the allowance; billed at 3p each on a paid plan. Recording never stops.

at least 0

thresholdsReachedrequiredarray of number

80 and 100 once reached.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 429 Too many requests, as problem details (application/problem+json).

Get a meeting with its transcript, summary and actions

GET/api/v1/meetings/{id}

Scopes
meetings:read

Part of the meetings product: the firm must have it and you must have access to it.

Parameters

Parameters for GET /api/v1/meetings/{id}
NameInTypeDescription
idrequiredpathstring (uuid)

Responses

200 OK, application/json

Body: object (MeetingDetail).

A meeting with its transcript and the Tolvi AI write-up: summary, takeaways, next steps, open questions and a draft follow-up email.

The fields are as shown above.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 404 Not found, 429 Too many requests, as problem details (application/problem+json).

Rename a meeting or file it against a client

PATCH/api/v1/meetings/{id}

Scopes
meetings:write

Part of the meetings product: the firm must have it and you must have access to it.

Parameters

Parameters for PATCH /api/v1/meetings/{id}
NameInTypeDescription
idrequiredpathstring (uuid)

Request body

Required. application/json: object (UpdateMeetingRequest).

Request body for PATCH /api/v1/meetings/{id}
FieldTypeDescription
titlestring

up to 200 characters

clientIdstring (uuid)nullable

Responses

200 OK, application/json

Body: object (MeetingDetail).

A meeting with its transcript and the Tolvi AI write-up: summary, takeaways, next steps, open questions and a draft follow-up email.

The fields are as shown above.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 404 Not found, 429 Too many requests, as problem details (application/problem+json).

Turn next steps into follow-ups

POST/api/v1/meetings/{id}/follow-ups

Scopes
meetings:write
Retries
Send an Idempotency-Key to make retries safe.

For a filed meeting with a ready write-up: each chosen next step becomes a review point on one of the client’s engagements (needs a reviewer, manager or partner, the review:write scope and Working Papers), a request listed in the follow-up email, or is skipped. Review points are raised exactly as in the engagement, with the meeting as their source. A step already sorted the same way is left alone; sorting it differently is refused (409). Nothing is signed off. Part of the meetings product: the firm must have it and you must have access to it.

Parameters

Parameters for POST /api/v1/meetings/{id}/follow-ups
NameInTypeDescription
idrequiredpathstring (uuid)
Idempotency-Keyheaderstring

A unique key (1-255 visible characters) to make retries safe. Replayed for 24 hours.

1 to 255 characters

Request body

Required. application/json: object (CreateMeetingFollowUpsRequest).

Request body for POST /api/v1/meetings/{id}/follow-ups
FieldTypeDescription
engagementIdstring (uuid)

The engagement the review points go on: one of the filed client’s. Required when any item is a review_point.

itemsrequiredarray of MeetingFollowUpItem

1 to 50 items

items[].​actionIndexrequiredinteger

The next step’s position in the meeting’s actions (from 0).

at least 0

items[].​kindrequiredstring (MeetingFollowUpKind)

review_point: raised on the engagement (reviewers, managers and partners). client_request: listed in the follow-up email. skip: nothing, but the step counts as sorted.

One of: review_point, client_request, skip

items[].​sectionCodestringnullable

review_point: the W/P section; null or left out for the engagement as a whole.

example "J"

items[].​textstring

The wording to use instead of the next step’s own.

up to 2000 characters

items[].​duestringnullable

When it is due, in words; added to the point or request.

up to 100 characters; example "by Friday"

items[].​mentionUserIdstring (uuid)nullable

review_point: a person to @mention on it.

Responses

200 OK, application/json

Body: object (MeetingDetail).

A meeting with its transcript and the Tolvi AI write-up: summary, takeaways, next steps, open questions and a draft follow-up email.

The fields are as shown above.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 404 Not found, 409 Conflict, 422 Unprocessable content, 429 Too many requests, as problem details (application/problem+json).

Stop the note-taker

POST/api/v1/meetings/{id}/cancel

Scopes
meetings:write

Before it joins, it is cancelled. In the call, it leaves and what it recorded so far is still transcribed. Part of the meetings product: the firm must have it and you must have access to it.

Parameters

Parameters for POST /api/v1/meetings/{id}/cancel
NameInTypeDescription
idrequiredpathstring (uuid)

Responses

200 OK, application/json

Body: object (MeetingDetail).

A meeting with its transcript and the Tolvi AI write-up: summary, takeaways, next steps, open questions and a draft follow-up email.

The fields are as shown above.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 404 Not found, 429 Too many requests, as problem details (application/problem+json).

Get your connected calendar and its upcoming meetings

GET/api/v1/me/calendar

Scopes
meetings:read

The next 28 days. A note-taker joins only the meetings you tick. Each event says if a colleague already sent a note-taker to it, and suggests a client whose name is in its title. Part of the meetings product: the firm must have it and you must have access to it.

Responses

200 OK, application/json

Body: object (MyCalendar).

Your connected calendar and its upcoming meetings.

200 OK response for GET /api/v1/me/calendar
FieldTypeDescription
availablerequiredboolean
connectedrequiredboolean
statusrequiredstringnullable

connecting, connected or disconnected.

platformrequiredstring (CalendarPlatform)nullable

One of: microsoft_outlook

emailrequiredstringnullable
eventsrequiredarray of CalendarEvent
events[].​idrequiredstring
events[].​titlerequiredstring
events[].​startTimerequiredstring (date-time)
events[].​endTimerequiredstring (date-time)
events[].​meetingUrlrequiredstringnullable
events[].​platformrequiredstring (MeetingPlatform)nullable

One of: zoom, google_meet, microsoft_teams, webex, goto_meeting

events[].​notetakerrequiredboolean

A note-taker will join: you ticked it.

events[].​meetingIdrequiredstring (uuid)nullable
events[].​clientIdrequiredstring (uuid)nullable
events[].​clientNamestringnullable

The name of the client the meeting is filed against.

events[].​takenByrequiredstringnullable

A colleague already sent a note-taker to this meeting: their name.

events[].​suggestedClientIdstring (uuid)nullable

A client whose name is in the meeting’s title: a suggestion for filing it.

events[].​suggestedClientNamestringnullable

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 429 Too many requests, as problem details (application/problem+json).

Disconnect your calendar

DELETE/api/v1/me/calendar

Scopes
meetings:write
Access
A signed-in Tolvi session only, never an API token.

Note-takers scheduled from it are cancelled. Part of the meetings product: the firm must have it and you must have access to it.

Responses

204 No content

Disconnected.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 429 Too many requests, as problem details (application/problem+json).

Start connecting your Outlook calendar

POST/api/v1/me/calendar/connect

Scopes
meetings:write
Access
A signed-in Tolvi session only, never an API token.

Returns Microsoft’s sign-in URL. Tolvi asks only to read your calendar. Part of the meetings product: the firm must have it and you must have access to it.

Responses

200 OK, application/json

Body: object (CalendarConnectStart).

200 OK response for POST /api/v1/me/calendar/connect
FieldTypeDescription
authorizeUrlrequiredstring (uri)

Send the browser here to sign in to Microsoft.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 429 Too many requests, as problem details (application/problem+json).

Send a note-taker to a calendar meeting

PUT/api/v1/me/calendar/events/{eventId}/notetaker

Scopes
meetings:write

It joins when the meeting starts and follows the meeting if it moves. Part of the meetings product: the firm must have it and you must have access to it.

Parameters

Parameters for PUT /api/v1/me/calendar/events/{eventId}/notetaker
NameInTypeDescription
eventIdrequiredpathstring (uuid)

The calendar event id from GET /me/calendar.

Request body

Required. application/json: object (CalendarNotetakerRequest).

Request body for PUT /api/v1/me/calendar/events/{eventId}/notetaker
FieldTypeDescription
clientIdstring (uuid)nullable

The client to file it against.

Responses

200 OK, application/json

Body: object (MeetingDetail).

A meeting with its transcript and the Tolvi AI write-up: summary, takeaways, next steps, open questions and a draft follow-up email.

The fields are as shown above.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 404 Not found, 429 Too many requests, as problem details (application/problem+json).

Stop sending a note-taker to a calendar meeting

DELETE/api/v1/me/calendar/events/{eventId}/notetaker

Scopes
meetings:write

Part of the meetings product: the firm must have it and you must have access to it.

Parameters

Parameters for DELETE /api/v1/me/calendar/events/{eventId}/notetaker
NameInTypeDescription
eventIdrequiredpathstring (uuid)

The calendar event id from GET /me/calendar.

Responses

204 No content

It won’t join.

Errors: 400 Bad request, 401 Unauthorised, 403 Forbidden, 404 Not found, 429 Too many requests, as problem details (application/problem+json).