Work with this as data
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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/instantly-ai-analytics-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 Specification
openapi: 3.2.0
info:
title: Explorer Analytics API
description: The entire API V2 documentation is interactive and can be tested here. To the right side of every endpoint you will see a box with an example request. You can click on the "Try it" button to send a request to the server right from the docs. You will need to provide an API key by clicking the `ApiKeyAuth_token` blue text.
version: 2.0.0
servers:
- url: https://api.instantly.ai
description: Instantly API Server
security:
- ApiKeyAuth: []
tags:
- name: Analytics
description: Endpoints related to analytics
x-group: Analytics
paths:
/api/v2/accounts/warmup-analytics:
post:
operationId: getWarmupAnalytics
summary: Get warmup analytics
tags:
- Analytics
description: 'Requires one of the following scopes: `accounts:read`, `accounts:all`, `all:read`, `all:all`'
requestBody:
content:
application/json:
schema:
type: object
properties:
emails:
type: array
items:
type: string
example: user@example.com
maxItems: 100
minItems: 1
description: List of emails to get warmup analytics for. The emails should be attached to accounts in your workspace.
required:
- emails
required: true
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
email_date_data:
type: object
additionalProperties:
type: object
additionalProperties:
type: object
properties:
sent:
type: number
example: 100
landed_inbox:
type: number
example: 50
landed_spam:
type: number
example: 10
received:
type: number
example: 100
aggregate_data:
type: object
additionalProperties:
type: object
properties:
sent:
type: number
examples:
- 100
example: 100
received:
type: number
examples:
- 100
example: 100
landed_inbox:
type: number
examples:
- 50
example: 50
landed_spam:
type: number
examples:
- 10
example: 10
health_score_label:
type: string
examples:
- Good
example: Good
health_score:
type: number
examples:
- 90
example: 90
example:
email_date_data:
example1@example.com:
'2023-10-01':
sent: 10
landed_inbox: 8
landed_spam: 2
received: 10
'2023-10-02':
sent: 5
landed_inbox: 5
received: 5
example2@example.com:
'2023-10-01':
sent: 7
landed_inbox: 7
received: 7
aggregate_data:
example1@example.com:
sent: 15
landed_inbox: 13
landed_spam: 2
received: 15
health_score_label: 87%
health_score: 87
example2@example.com:
sent: 7
landed_inbox: 7
health_score_label: 100%
health_score: 100
'401':
description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked)
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 401
examples:
- 401
example: 401
error:
type: string
enum:
- Unauthorized
examples:
- Unauthorized
example: Unauthorized
message:
type: string
examples:
- Missing Authorization header
example: Missing Authorization header
required:
- statusCode
- error
- message
'402':
description: This request cannot be fulfilled because the workspace does not have an active paid plan
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 402
examples:
- 402
example: 402
error:
type: string
enum:
- Payment Required
examples:
- Payment Required
example: Payment Required
message:
type: string
examples:
- Workspace does not have an active paid plan
example: Workspace does not have an active paid plan
required:
- statusCode
- error
- message
'404':
description: The requested resource was not found
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 404
examples:
- 404
example: 404
error:
type: string
enum:
- Not Found
examples:
- Not Found
example: Not Found
message:
type: string
examples:
- Resource not found
example: Resource not found
required:
- statusCode
- error
- message
'429':
description: You have exceeded the rate limit. Please check the rate limit docs for more information.
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 429
examples:
- 429
example: 429
error:
type: string
enum:
- Too Many Requests
examples:
- Too Many Requests
example: Too Many Requests
message:
type: string
examples:
- Rate limit exceeded
example: Rate limit exceeded
required:
- statusCode
- error
- message
/api/v2/accounts/analytics/daily:
get:
operationId: getDailyAccountAnalytics
summary: Get daily account analytics
tags:
- Analytics
description: Get daily account analytics showing the number of emails sent per day for each email account. Useful for tracking daily sending activity across your accounts.
parameters:
- schema:
type: string
example: '2024-01-01'
examples:
'2024-01-01':
value: '2024-01-01'
'2024-01-01T00:00:00.000Z':
value: '2024-01-01T00:00:00.000Z'
in: query
name: start_date
required: false
description: Start date for the analytics period. Defaults to a 30-day window ending at end_date. The maximum range is 31 days.
- schema:
type: string
example: '2024-01-31'
examples:
'2024-01-31':
value: '2024-01-31'
'2024-01-31T00:00:00.000Z':
value: '2024-01-31T00:00:00.000Z'
in: query
name: end_date
required: false
description: End date for the analytics period. Defaults to the current date.
- schema:
type: array
minItems: 1
maxItems: 200
items:
type: string
examples:
- user@example.com
example: user@example.com
in: query
name: emails
required: false
description: Email accounts to include. This filter is required and accepts at most 200 unique accounts.
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: array
items:
type: object
properties:
date:
type: string
description: The date of the analytics entry, in YYYY-MM-DD format
example: '2024-01-15'
email_account:
type: string
description: The email account that sent the emails
example: user@example.com
sent:
type: integer
description: The total number of campaign emails sent on this date by this account, including emails for subsequences
example: 150
bounced:
type: integer
description: The number of emails that bounced on this date for this account for campaigns - including subsequences
example: 3
contacted:
type: integer
description: The total number of unique contacts who received an email on this date from this account
example: 120
new_leads_contacted:
type: integer
description: The total number of new leads contacted on this date from this account
example: 50
opened:
type: integer
description: The total number of opened emails on this date for this account
example: 99
unique_opened:
type: integer
description: The total number of unique opened emails on this date for this account
example: 60
replies:
type: integer
description: The total number of replies received on this date for this account
example: 8
unique_replies:
type: integer
description: The total number of unique replies received on this date for this account
example: 7
replies_automatic:
type: integer
description: The total number of automatic replies detected on this date for this account
example: 2
unique_replies_automatic:
type: integer
description: The total number of unique automatic replies detected on this date for this account
example: 1
clicks:
type: integer
description: The total number of links clicked on this date for this account
example: 30
unique_clicks:
type: integer
description: The total number of unique links clicked on this date for this account. Unique meaning from unique leads, not unique links
example: 20
required:
- date
- email_account
- sent
- bounced
- contacted
- new_leads_contacted
- opened
- unique_opened
- replies
- unique_replies
- replies_automatic
- unique_replies_automatic
- clicks
- unique_clicks
'400':
description: Default Response
content:
application/json:
schema:
type: object
properties:
message:
type: string
description: The error message
example: Start Date must be earlier than End Date
'401':
description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked)
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 401
examples:
- 401
example: 401
error:
type: string
enum:
- Unauthorized
examples:
- Unauthorized
example: Unauthorized
message:
type: string
examples:
- Missing Authorization header
example: Missing Authorization header
required:
- statusCode
- error
- message
'402':
description: This request cannot be fulfilled because the workspace does not have an active paid plan
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 402
examples:
- 402
example: 402
error:
type: string
enum:
- Payment Required
examples:
- Payment Required
example: Payment Required
message:
type: string
examples:
- Workspace does not have an active paid plan
example: Workspace does not have an active paid plan
required:
- statusCode
- error
- message
'404':
description: The requested resource was not found
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 404
examples:
- 404
example: 404
error:
type: string
enum:
- Not Found
examples:
- Not Found
example: Not Found
message:
type: string
examples:
- Resource not found
example: Resource not found
required:
- statusCode
- error
- message
'413':
description: The analytics request is too large for the requested workspace or date range.
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 413
examples:
- 413
example: 413
error:
type: string
enum:
- Payload Too Large
examples:
- Payload Too Large
example: Payload Too Large
message:
type: string
examples:
- Analytics request is too large for this workspace. Add an emails filter or request a smaller date range.
example: Analytics request is too large for this workspace. Add an emails filter or request a smaller date range.
required:
- statusCode
- error
- message
'429':
description: You have exceeded the rate limit. Please check the rate limit docs for more information.
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 429
examples:
- 429
example: 429
error:
type: string
enum:
- Too Many Requests
examples:
- Too Many Requests
example: Too Many Requests
message:
type: string
examples:
- Rate limit exceeded
example: Rate limit exceeded
required:
- statusCode
- error
- message
/api/v2/accounts/test/vitals:
post:
operationId: testAccountVitals
summary: Test account vitals
tags:
- Analytics
description: 'Requires one of the following scopes: `accounts:read`, `accounts:all`, `all:read`, `all:all`'
requestBody:
content:
application/json:
schema:
type: object
properties:
accounts:
type: array
items:
type: string
example: user@example.com
required: []
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: object
properties:
status:
type: string
example: success
success_list:
type: array
items:
type: object
properties:
domain:
type: string
example: example.com
allPass:
type: boolean
example: true
mx:
type: boolean
example: true
spf:
type: boolean
example: true
dkim:
type: boolean
example: true
dmarc:
type: boolean
example: true
failure_list:
type: array
items:
type: object
properties:
domain:
type: string
example: example.com
allPass:
type: boolean
example: false
mx:
type: boolean
example: false
spf:
type: boolean
example: false
dkim:
type: boolean
example: false
dmarc:
type: boolean
example: false
'400':
description: Default Response
content:
application/json:
schema:
type: object
properties:
error:
type: string
example: Bad request - no emails sent
'401':
description: This request is unauthorized (either the Authorization header is missing or invalid, or the API key has been revoked)
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 401
examples:
- 401
example: 401
error:
type: string
enum:
- Unauthorized
examples:
- Unauthorized
example: Unauthorized
message:
type: string
examples:
- Missing Authorization header
example: Missing Authorization header
required:
- statusCode
- error
- message
'402':
description: This request cannot be fulfilled because the workspace does not have an active paid plan
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 402
examples:
- 402
example: 402
error:
type: string
enum:
- Payment Required
examples:
- Payment Required
example: Payment Required
message:
type: string
examples:
- Workspace does not have an active paid plan
example: Workspace does not have an active paid plan
required:
- statusCode
- error
- message
'404':
description: The requested resource was not found
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 404
examples:
- 404
example: 404
error:
type: string
enum:
- Not Found
examples:
- Not Found
example: Not Found
message:
type: string
examples:
- Resource not found
example: Resource not found
required:
- statusCode
- error
- message
'429':
description: You have exceeded the rate limit. Please check the rate limit docs for more information.
content:
application/json:
schema:
type: object
properties:
statusCode:
type: number
enum:
- 429
examples:
- 429
example: 429
error:
type: string
enum:
- Too Many Requests
examples:
- Too Many Requests
example: Too Many Requests
message:
type: string
examples:
- Rate limit exceeded
example: Rate limit exceeded
required:
- statusCode
- error
- message
/api/v2/campaigns/analytics:
get:
operationId: getCampaignAnalytics
summary: Get campaign(s) analytics
tags:
- Analytics
description: Get analytics for one or multiple campaigns. Specify the `id` field to get the analytics for a single campaign, or leave it empty to get the analytics for all campaigns
parameters:
- schema:
type: string
format: uuid
example: 019ffad2-9ba1-7bc9-8d59-2dbf9cad03cd
example: 019ffad2-9ba1-7bc9-8d59-2dbf9cad03cd
in: query
name: id
required: false
description: A campaign ID to get the analytics for. Leave this field empty to get the analytics for all campaigns
- schema:
type: array
items:
type: string
description: 'A list of campaign IDs to get the analytics for. Leave this field empty to get the analytics for all campaigns. You can specify multiple IDs by adding the same parameter multiple times, for instance: `/campaigns/analytics?ids=123&ids=456`'
format: uuid
examples:
- 019ffad2-9ba1-7bc9-8d59-2dc06bc9bc75
example: 019ffad2-9ba1-7bc9-8d59-2dc06bc9bc75
in: query
name: ids
required: false
- schema:
type: string
example: '2024-01-01'
examples:
'2024-01-01':
value: '2024-01-01'
'2024-01-01T00:00:00.000Z':
value: '2024-01-01T00:00:00.000Z'
in: query
name: start_date
required: false
description: Start of the analytics range. Accepts a date-only value (`YYYY-MM-DD`) or a full ISO 8601 timestamp. Date-only values are interpreted as UTC midnight — e.g. `2026-04-07` is treated as `2026-04-07T00:00:00.000Z`.
- schema:
type: string
example: '2024-01-01'
examples:
'2024-01-01':
value: '2024-01-01'
'2024-01-01T00:00:00.000Z':
value: '2024-01-01T00:00:00.000Z'
in: query
name: end_date
required: false
description: End of the analytics range. Accepts a date-only value (`YYYY-MM-DD`) or a full ISO 8601 timestamp. Date-only values are interpreted as UTC midnight — e.g. `2026-04-07` is treated as `2026-04-07T00:00:00.000Z`.
- schema:
type: boolean
default: false
example: true
example: true
in: query
name: exclude_total_leads_count
required: false
description: Exclude the total leads from the result. Setting this to true will considerably decrease the response time
responses:
'200':
description: Default Response
content:
application/json:
schema:
type: array
items:
type: object
properties:
campaign_name:
type: string
description: The name of the campaign
example: My Test Campaign
campaign_id:
type: string
description: The ID of the campaign
format: uuid
example: 019ffad2-9ba1-7bc9-8d59-2dc1d3f0cbdd
campaign_status:
type: number
description: The campaign status
x-enumDescriptions:
'0': Draft
'1': Active
'2': Paused
'3': Completed
'4': Running Subsequences
'-99': Account Suspended
'-1': Accounts Unhealthy
'-2': Bounce Protect
example: 1
campaign_is_evergreen:
type: boolean
description: Whether the campaign is evergreen
example: true
leads_count:
type: integer
description: The total number of leads
example: 1500
contacted_count:
type: integer
description: Number of leads for whom the sequence has started
example: 1200
emails_sent_count:
type: integer
description: The total number of sent emails
example: 5000
new_leads_contacted_count:
type: integer
description: The total number of new leads contacted
example: 200
open_count:
type: integer
description: The number of leads that opened at least one email
example: 800
open_count_unique:
type: integer
description: The number of unique email opens (first open per lead)
example: 750
open_count_unique_by_step:
type: integer
description: The number of unique email opens per step (first open per lead per step)
example: 900
reply_count:
type: integer
description: The total number of replies received (if a lead replies multiple times, each reply is counted)
example: 300
reply_count_unique:
type: integer
description: The number of unique replies (first reply per lead). Excludes automatic replies.
example: 280
reply_count_unique_by_step:
type: integer
description: The number of unique replies per step (first reply per lead per step). Excludes automatic replies.
example: 350
reply_count_automatic:
type: integer
description: The total number of automatic replies detected
example: 15
reply_count_automatic_unique:
type: integer
description: The number of unique automatic replies (first automatic reply per lead)
example: 12
reply_count_au
# --- truncated at 32 KB (82 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/instantly-ai/refs/heads/main/openapi/instantly-ai-analytics-api-openapi.yml