Qualified Messages API
Individual messages, either across all conversations or within one.
Individual messages, either across all conversations or within one.
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-messages-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 Messages 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: Messages
description: Individual messages, either across all conversations or within one.
paths:
/v2/messages:
get:
summary: List messages
operationId: listMessages
description: 'Returns messages across all engaged conversations, newest first. Window with `created_after`/`created_before`; because messages are immutable, `updated_after`/`updated_before` here behave identically. `event`-type messages are excluded. Messages become available in this list 30 minutes after their session ends.
**Scope:** `conversation:view`'
tags:
- Messages
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'
responses:
'200':
description: A page of messages.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Message'
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/messages/{id}:
get:
summary: Get a message
operationId: getMessage
description: 'Returns a single message by id. `event`-type messages return `404`.
**Scope:** `conversation:view`'
tags:
- Messages
parameters:
- name: id
in: path
required: true
description: Encoded message id.
schema:
type: string
responses:
'200':
description: The message.
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Message'
'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.
Message:
type: object
description: A single message within a conversation. Messages are immutable.
properties:
id:
type: string
description: Encoded message identifier.
type:
type: string
description: Message type, e.g. text. `event`-type messages are never returned.
text:
type: string
description: Message text.
createdAt:
type: string
format: date-time
description: When the message was sent.
senderType:
type:
- string
- 'null'
enum:
- user
- visitor
- experience
- ai_profile
description: Who sent the message. Null if the sender cannot be resolved.
senderName:
type:
- string
- 'null'
description: Display name of the sender. Null for visitors and where no name is available.
conversationId:
type: string
description: Encoded id of the conversation this message belongs to.
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
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