Skip to content

List meetings

GET
/meetings
curl --request GET \
--url 'https://api.usesonora.com/v1/meetings?limit=25' \
--header 'Authorization: Bearer <token>'

Meetings with your customers, most recent first. Personal and internal meetings — ones with no customer — are never listed, and neither are deleted or archived ones.

Requires the meetings:read scope.

customerId
string format: uuid

Only this customer’s meetings, by Sonora id. To name the customer by your own system’s id, use GET /customers/{customerId}/meetings.

startAfter
string format: date-time

Meetings starting at or after this instant. A meeting with no start time goes by when Sonora recorded it.

startBefore
string format: date-time

Meetings starting before this instant.

limit
integer
default: 25 >= 1 <= 100

Page size, 1–100.

cursor
string
<= 200 characters

The previous page’s nextCursor, unchanged. Omit for the first page.

include
string

Comma-separated optional parts of the response: totalCount.

A page of meetings.

Media typeapplication/json
object
data
required
Array<object>

A meeting with a customer.

object
id
required
string
customer
required

The customer a record belongs to; GET /customers/{customerId} has the rest of it.

object
id
required
string
name
required
string
title
required
string | null
startTime
required
Any of:
string format: date-time
endTime
required
Any of:
string format: date-time
durationSeconds
required
Any of:
integer
summary
required

What was discussed: your call recorder’s summary, or Sonora’s own from the transcript.

string | null
nextSteps
required

The next steps the summary drew from the meeting.

string | null
owner
required
Any of:

A person on your team.

object
name
required
string | null
email
required

Null for a name typed in by hand or synced without a user.

string | null
attendees
required

Organizer first.

Array<object>

Someone invited to a meeting.

object
name
required
string | null
email
required
string
isOrganizer
required
boolean
contactId
required

The Sonora contact this attendee is; null for your own team and anyone unmatched.

string | null
createdAt
required
string format: date-time
updatedAt
required
string format: date-time
links
required
object
self
required

This resource’s canonical URL on the API host.

string
totalCount

Only with ?include=totalCount: every match under the same filters.

integer
nextCursor
required

Pass as cursor for the next page; null on the last page.

string | null
Examplegenerated
{
"data": [
{
"id": "example",
"customer": {
"id": "example",
"name": "example"
},
"title": "example",
"startTime": "2026-04-15T12:00:00Z",
"endTime": "2026-04-15T12:00:00Z",
"durationSeconds": 1,
"summary": "example",
"nextSteps": "example",
"owner": {
"name": "example",
"email": "example"
},
"attendees": [
{
"name": "example",
"email": "example",
"isOrganizer": true,
"contactId": "example"
}
],
"createdAt": "2026-04-15T12:00:00Z",
"updatedAt": "2026-04-15T12:00:00Z",
"links": {
"self": "example"
}
}
],
"totalCount": 1,
"nextCursor": "example"
}

invalid_request: A parameter or body field is missing, malformed or unknown; details.issues names each.

Media typeapplication/json

The one error shape every endpoint answers with.

object
error
required
object
code
required

Stable snake_case code to branch on; see the error table.

string
message
required

For humans; may change.

string
details
object
key
additional properties
requestId
required

Quote it when asking for help.

string | null
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {
"additionalProperty": "example"
},
"requestId": "example"
}
}

unauthorized: The Authorization header is missing, or the key is invalid, revoked or expired.

Media typeapplication/json

The one error shape every endpoint answers with.

object
error
required
object
code
required

Stable snake_case code to branch on; see the error table.

string
message
required

For humans; may change.

string
details
object
key
additional properties
requestId
required

Quote it when asking for help.

string | null
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {
"additionalProperty": "example"
},
"requestId": "example"
}
}

insufficient_scope: The key or token lacks the scope this endpoint needs, and details.required names it; or an OAuth access token called an endpoint only an API key can.

Media typeapplication/json

The one error shape every endpoint answers with.

object
error
required
object
code
required

Stable snake_case code to branch on; see the error table.

string
message
required

For humans; may change.

string
details
object
key
additional properties
requestId
required

Quote it when asking for help.

string | null
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {
"additionalProperty": "example"
},
"requestId": "example"
}
}

rate_limited: Too many requests for this key; retry after Retry-After seconds.

Media typeapplication/json

The one error shape every endpoint answers with.

object
error
required
object
code
required

Stable snake_case code to branch on; see the error table.

string
message
required

For humans; may change.

string
details
object
key
additional properties
requestId
required

Quote it when asking for help.

string | null
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {
"additionalProperty": "example"
},
"requestId": "example"
}
}

internal_error: Something went wrong on Sonora’s side. Retry, and quote requestId if it persists.

Media typeapplication/json

The one error shape every endpoint answers with.

object
error
required
object
code
required

Stable snake_case code to branch on; see the error table.

string
message
required

For humans; may change.

string
details
object
key
additional properties
requestId
required

Quote it when asking for help.

string | null
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {
"additionalProperty": "example"
},
"requestId": "example"
}
}

Try it

Run this request against your own Sonora workspace. Sign in, pick the workspace, and the page gets an access token that only reads, only what your role covers, for an hour.

GEThttps://api.usesonora.com/v1/meetings

As curl

$SONORA_TOKEN is your access token or an API key; the page never shows the token.