Qualified Emails API
Outbound email activity sent from Qualified, with engagement timestamps.
Outbound email activity sent from Qualified, with engagement timestamps.
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-emails-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 Emails 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: Emails
description: Outbound email activity sent from Qualified, with engagement timestamps.
paths:
/v2/emails:
get:
summary: List emails
operationId: listEmails
description: 'Returns outbound email activity, newest first; only sent and bounced mailings are included. Window with `updated_after`/`updated_before`, which surfaces post-send engagement because `updatedAt` advances when an open, click, reply, or bounce is recorded, or `created_after`/`created_before` for new sends only. Emails become available in this list 30 minutes after they are created.
**Scope:** `email:view`'
tags:
- Emails
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/LeadId'
responses:
'200':
description: A page of emails.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Email'
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/emails/{id}:
get:
summary: Get an email
operationId: getEmail
description: 'Returns a single email activity by id.
**Scope:** `email:view`'
tags:
- Emails
parameters:
- name: id
in: path
required: true
description: Encoded email id.
schema:
type: string
responses:
'200':
description: The email.
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Email'
'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.
Email:
type: object
description: An outbound email activity associated with a lead.
properties:
id:
type: string
description: Encoded email identifier.
parentEmailId:
type:
- string
- 'null'
description: Encoded id of the parent email in the thread.
subject:
type: string
description: Email subject line.
provider:
type: string
description: Sending provider.
status:
type: string
description: Delivery status. Only sent and bounced mailings are returned.
leadId:
type:
- string
- 'null'
description: Encoded id of the lead this email was sent to, or null if unresolved. Emails are addressed to a person rather than a browser, so `leadId` is the identity key here and there is no `visitorId`.
campaignName:
type:
- string
- 'null'
description: Campaign name, if part of a campaign.
senderEmail:
type:
- string
- 'null'
description: Sender email address.
recipientEmail:
type:
- string
- 'null'
description: Recipient email address.
body:
type:
- string
- 'null'
description: Email body content.
mailingType:
type:
- string
- 'null'
description: Type of mailing.
sentAt:
type:
- string
- 'null'
format: date-time
description: When the email was sent.
openedAt:
type:
- string
- 'null'
format: date-time
description: When the email was most recently opened.
repliedAt:
type:
- string
- 'null'
format: date-time
description: When the email was most recently replied to.
clickedAt:
type:
- string
- 'null'
format: date-time
description: When a link in the email was most recently clicked.
bouncedAt:
type:
- string
- 'null'
format: date-time
description: When the bounce was reported.
bounceType:
type:
- string
- 'null'
enum:
- soft_bounce
- hard_bounce
description: Type of bounce.
createdAt:
type: string
format: date-time
description: When the email record was created.
updatedAt:
type: string
format: date-time
description: When the email was last updated. Advances on opens, clicks, replies, and bounces.
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
LeadId:
name: lead_id
in: query
required: false
description: Return only emails for this lead.
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
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
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