Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
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.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/qualified-com:qualified-com-leads-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
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 Leads 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: Leads
description: Create, update, and read lead (person) records and their custom field values.
paths:
/v2/leads:
get:
summary: List leads
operationId: listLeads
description: 'Returns known, emailed leads, newest first, with their custom field values. Window with `updated_after`/`updated_before` to catch new and changed leads, or `created_after`/`created_before` for new leads only. Pass `email` to look one person up by address. Anonymous (email-less) people are not returned here; their activity carries a `visitorId`, which joins to a lead through `visitorIds` once they are identified. Leads become available in this list 30 minutes after they are created.
**Scope:** `lead:view`'
tags:
- Leads
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/Email'
responses:
'200':
description: A page of leads.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Lead'
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'
post:
summary: Create or update a lead
operationId: upsertLead
description: 'Creates a lead or updates the existing one matched by `email`. Only the field values you send are written; others are left untouched. Returns the lead.
Note: the upsert response returns the lead object at the top level, not wrapped in a `data` envelope.
**Scope:** `lead:manage`'
tags:
- Leads
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- email
properties:
email:
type: string
description: Lead email address. Used to match an existing lead.
fields:
type: object
description: Custom field values keyed by field API name.
responses:
'200':
description: Existing lead updated.
content:
application/json:
schema:
$ref: '#/components/schemas/Lead'
'201':
description: New lead created.
content:
application/json:
schema:
$ref: '#/components/schemas/Lead'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'403':
$ref: '#/components/responses/Forbidden'
'422':
$ref: '#/components/responses/UnprocessableEntity'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/v2/leads/fields:
get:
summary: List lead fields
operationId: listLeadFields
description: 'Returns the custom field definitions for leads (person category), so you can map API names to types when ingesting the `fields` object.
**Scope:** none beyond a valid token.'
tags:
- Leads
responses:
'200':
description: Lead field definitions.
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
$ref: '#/components/schemas/Field'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
'500':
$ref: '#/components/responses/InternalServerError'
/v2/leads/{id}:
get:
summary: Get a lead
operationId: getLead
description: 'Returns a single lead by id. Lead ids come from `/v2/leads`, from an email''s `leadId`, or from matching an activity''s `visitorId` against a lead''s `visitorIds`. Only identified people have leads. See Identity.
**Scope:** `lead:view`'
tags:
- Leads
parameters:
- name: id
in: path
required: true
description: Encoded lead id.
schema:
type: string
responses:
'200':
description: The lead.
content:
application/json:
schema:
type: object
properties:
data:
$ref: '#/components/schemas/Lead'
'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:
CodeErrorResponse:
type: object
properties:
code:
type: string
description: Machine-readable error code.
message:
type: string
description: Human-readable error message.
ValidationErrorResponse:
type: object
properties:
error:
type: string
description: Human-readable error message.
details:
type: object
description: Structured context identifying what was rejected, for example the offending field under `failed_field`. Keys vary by failure.
additionalProperties: true
Field:
type: object
description: A custom field definition.
properties:
id:
type: string
description: Encoded field identifier.
label:
type: string
description: Human-readable field label.
type:
type: string
description: 'Field data type: `string`, `text`, `decimal`, `boolean`, `email`, `phone`, `name`, `company`, `picklist`, `multi_picklist`, or `text_array`. Numeric fields are `decimal` — there is no `number` type. `multi_picklist` and `text_array` are returned only for teams with multi-select fields enabled.'
name:
type: string
description: Field API name, the key used in the `fields` object.
options:
type: array
description: Picklist options. Present only when `type` is `picklist`.
items:
type: object
properties:
value:
type: string
description: Stored option value.
label:
type: string
description: Option display label.
createdAt:
type: string
format: date-time
description: When the field was created.
updatedAt:
type: string
format: date-time
description: When the field was last updated.
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.
ErrorResponse:
type: object
properties:
error:
type: string
description: Human-readable error message.
Lead:
type: object
description: A lead (person) record, keyed on email, with its custom field values.
properties:
id:
type: string
description: Encoded lead identifier.
email:
type: string
description: Lead email address.
fields:
type: object
description: 'Custom field values keyed by field API name. Includes fields hidden in the Qualified UI. Values are typed by field: booleans for checkboxes, numbers for numeric fields, arrays of strings for multi-select fields, otherwise strings. An unset field is `null`.
'
additionalProperties: true
createdAt:
type: string
format: date-time
description: When the lead was created.
updatedAt:
type: string
format: date-time
description: When the lead was last updated. Advances on email changes, custom field-value changes, when a new visitor is associated with the lead, and when a company write changes an account-level field this lead inherits.
visitorIds:
type: array
items:
type: string
description: Encoded ids of the visitors that belong to this lead, one per browser or device the person has been seen on. This is how sessions, conversations, and meetings resolve to a person. Match an activity's `visitorId` against this array, which also attaches activity recorded before the visitor was identified. Returned as an empty array (never null) when there are none.
salesforceLeadId:
type:
- string
- 'null'
description: Salesforce Lead ID, returned verbatim (not encoded). Sourced from the lead's most recent session attributes; may briefly lag the source system.
salesforceContactId:
type:
- string
- 'null'
description: Salesforce Contact ID, returned verbatim.
pardotProspectId:
type:
- string
- 'null'
description: Pardot Prospect ID, returned verbatim.
marketoLeadId:
type:
- string
- 'null'
description: Marketo Lead ID, returned verbatim.
hubspotContactId:
type:
- string
- 'null'
description: HubSpot Contact ID, returned verbatim.
eloquaContactId:
type:
- string
- 'null'
description: Eloqua Contact ID, returned verbatim.
parameters:
Email:
name: email
in: query
required: false
description: Return only the lead with this email address. Exact match, case-insensitive, with surrounding whitespace ignored.
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
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
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
After:
name: after
in: query
required: false
description: Cursor for forward pagination. Pass the `endCursor` from the previous response.
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
responses:
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'
BadRequest:
description: Malformed request, such as an invalid date or cursor.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
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
InternalServerError:
description: Unexpected server error.
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error: Internal server error
UnprocessableEntity:
description: The write was rejected, for example an unknown field, an invalid value, or a malformed batch.
content:
application/json:
schema:
$ref: '#/components/schemas/ValidationErrorResponse'
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