Qualified Meetings API
Meetings offered or booked with a visitor.
Meetings offered or booked with a visitor.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/qualified-com-meetings-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Qualified Enterprise Meetings API
version: '2.0'
description: '# Overview
_Last updated: August 9, 2026_
The Qualified Enterprise API connects your Qualified data to your warehouse, CDP, and downstream systems.'
servers:
- url: https://api.qualified.com
description: Production
security:
- bearerToken: []
tags:
- name: Meetings
description: Meetings offered or booked with a visitor.
paths:
/v2/meetings:
get:
summary: List meetings
operationId: listMeetings
description: 'Returns meetings, newest first. Window results with `created_after`/`created_before`, `updated_after`/`updated_before`, or both. Meetings become available in this list 24 hours after they are created, and that hold applies on either filter, so lag your sync window by a day. Use `/v2/meetings/{id}` for a real-time read.
**Scope:** `meeting:view`'
tags:
- Meetings
parameters:
- $ref: '#/components/parameters/After'
- $ref: '#/components/parameters/Before'
- $ref: '#/components/parameters/CreatedAfter'
- $ref: '#/components/parameters/CreatedBefore'
- $ref: '#/components/parameters/UpdatedAfter'
- $ref: '#/components/parameters/UpdatedBefore'
- $ref: '#/components/parameters/VisitorId'
responses:
'200':
description: A page of meetings.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Meeting'
pageInfo:
$ref: '#/components/schemas/PageInfo'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/v2/meetings/{id}:
get:
summary: Get a meeting
operationId: getMeeting
description: 'Returns a single meeting by id. A by-id read is not subject to the list hold-back and returns the latest data.
**Scope:** `meeting:view`'
tags:
- Meetings
parameters:
- name: id
in: path
required: true
description: Encoded meeting id.
schema:
type: string
responses:
'200':
description: The meeting.
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Meeting'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'404':
$ref: '#/components/responses/NotFound'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
components:
schemas:
PageInfo:
type: object
description: Cursor-based pagination metadata.
properties:
hasNextPage:
type: boolean
description: Whether more results exist after `endCursor`.
hasPreviousPage:
type: boolean
description: Whether more results exist before `startCursor`.
startCursor:
type:
- string
- 'null'
description: Cursor for the first item on this page.
endCursor:
type:
- string
- 'null'
description: Cursor for the last item on this page.
Meeting:
type: object
description: A meeting offered or booked with a visitor.
properties:
id:
type: string
description: Encoded meeting identifier.
sessionId:
type:
- string
- 'null'
description: Encoded id of the parent session. Null when the parent session is not exposed on `/v2/sessions`, such as a live-booking session or a session reached through a meeting link (including routed meeting links).
conversationId:
type:
- string
- 'null'
description: Encoded id of the parent conversation. Null when the meeting is not tied to an engaged conversation, such as a meeting booked through a direct or routed meeting link, or via live booking.
visitorId:
type: string
description: Encoded id of the visitor the meeting belongs to. Always present and immutable, including for meetings booked outside a website session, such as through a direct or routed meeting link or via live booking. Match it against a lead's `visitorIds` to resolve the meeting to a person.
attendees:
type: array
description: Meeting attendees.
items:
type: object
properties:
name:
type: string
description: Attendee name.
email:
type: string
description: Attendee email.
organizer:
type: boolean
description: Whether this attendee is the organizer.
owner:
type: boolean
description: Whether this attendee is the owner.
meetingTypeName:
type:
- string
- 'null'
description: Name of the meeting type.
createdAt:
type: string
format: date-time
description: When the meeting was created.
updatedAt:
type: string
format: date-time
description: When the meeting was last updated. Reflects reschedule, cancel, and no-show transitions.
status:
type: string
enum:
- offered
- booked
- rescheduled
- canceled
- no_show
description: Current meeting status.
channel:
type:
- string
- 'null'
description: 'Human-readable label for how the meeting was offered, or null when it cannot be determined. Current values: `Direct Meeting Links`, `Routed Meeting Links`, `Conversation with Rep`, `Live Booker`, `Smart Form Experiences`, `Smart Button Experiences`, `Manual Experiences`, `Automatic Experiences`. Treat it as a display string rather than a fixed code, since new labels may appear. `Live Booker` corresponds to live booking, and `Direct Meeting Links` / `Routed Meeting Links` to direct and routed meeting links.'
ErrorResponse:
type: object
properties:
error:
type: string
description: Human-readable error message.
CodeErrorResponse:
type: object
properties:
code:
type: string
description: Machine-readable error code.
message:
type: string
description: Human-readable error message.
parameters:
Before:
name: before
in: query
required: false
description: Cursor for backward pagination. Pass the `startCursor` from the previous response.
schema:
type: string
UpdatedAfter:
name: updated_after
in: query
required: false
description: Return records updated at or after this time. Interpreted as UTC unless an offset is given. A bare date (`YYYY-MM-DD`) means midnight UTC at the start of that day.
schema:
type: string
VisitorId:
name: visitor_id
in: query
required: false
description: Return only records for this visitor, including activity recorded before the visitor was identified. To pull everything for one person, read the lead's `visitorIds` and query each in turn.
schema:
type: string
UpdatedBefore:
name: updated_before
in: query
required: false
description: Return records updated at or before this time. Interpreted as UTC unless an offset is given. A bare date (`YYYY-MM-DD`) means midnight UTC at the start of that day, so pass the next day's date to include a whole day.
schema:
type: string
CreatedAfter:
name: created_after
in: query
required: false
description: Return records created at or after this time. Accepts an ISO-8601 timestamp, interpreted as UTC unless it carries an offset. A bare date (`YYYY-MM-DD`) means midnight UTC at the start of that day.
schema:
type: string
CreatedBefore:
name: created_before
in: query
required: false
description: Return records created at or before this time. Accepts an ISO-8601 timestamp, interpreted as UTC unless it carries an offset. A bare date (`YYYY-MM-DD`) means midnight UTC at the start of that day, so pass the next day's date to include a whole day.
schema:
type: string
After:
name: after
in: query
required: false
description: Cursor for forward pagination. Pass the `endCursor` from the previous response.
schema:
type: string
responses:
BadRequest:
description: Malformed request, such as an invalid date or cursor.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
InternalServerError:
description: Unexpected server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error: Internal server error
NotFound:
description: The record was not found, or the id could not be decoded.
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/ErrorResponse'
- $ref: '#/components/schemas/CodeErrorResponse'
Unauthorized:
description: Missing or invalid token, or the API is not enabled for the team.
content:
application/json:
schema:
$ref: '#/components/schemas/CodeErrorResponse'
example:
code: invalid_token
TooManyRequests:
description: A rate limit was exceeded. The three time-window limits set a `Retry-After` header; the concurrency limit does not, so treat its absence as "retry once an in-flight request finishes".
content:
application/json:
schema:
$ref: '#/components/schemas/CodeErrorResponse'
example:
code: rate_limited
message: Enterprise API rate limit exceeded
Forbidden:
description: The token lacks the required OAuth scope.
content:
application/json:
schema:
$ref: '#/components/schemas/CodeErrorResponse'
example:
code: insufficient_scope
securitySchemes:
bearerToken:
type: http
scheme: bearer
bearerFormat: Token
x-tagGroups:
- name: Write APIs
tags:
- Leads
- Companies
- Bulk
- name: Activity APIs
tags:
- Sessions
- Conversations
- Messages
- Meetings
- Emails
- name: Utility APIs
tags:
- Cancel Meeting
- GDPR
- name: Legacy Reporting API
tags:
- Bot Conversations
- Rep Conversations