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/prospectapis:prospectapis-messaging-reads-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
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: ProspectAPIs Messaging reads API
summary: Funding signals and cited prospect research over one REST API.
description: 'The REST contract for ProspectAPIs: funding rounds you can filter and page, cited prospect research briefs, and funding watchlists that push new matches to a webhook. Built for sales teams and the AI agents that work for them.
Authentication is a bearer API key (`Authorization: Bearer pa_live_`), created in the dashboard. `GET /pricing`, `GET /health` and `GET /v1/version` need no key.
Every account starts with a one-time free balance (`signup_credit_usd` in `GET /pricing`), and every paid call draws from it at its own price: `GET /v1/funding` per returned record (a no-match is free), `POST /v1/email/verify` per valid or invalid result, `POST /v1/research` per completed brief. Paid responses carry `X-Credits-Remaining`. The live price list is `GET /pricing`; a key''s balance is `GET /v1/account`. This document describes shapes, not prices.'
version: 0.1.0
contact:
name: ProspectAPIs
url: https://prospectapis.com
email: emma@prospectapis.com
license:
name: Proprietary
url: https://prospectapis.com/terms
termsOfService: https://prospectapis.com/terms
servers:
- url: https://api.prospectapis.com
description: Production
security:
- bearerAuth: []
tags:
- name: Messaging reads
description: Read your connected account's conversations and threads. One published price per read.
paths:
/v1/messages:
get:
tags:
- Messaging reads
summary: List conversations (live)
description: Read your connected account's recent conversations, incremental by `since`/`cursor`. $0.01 per read. Billed per call once the messaging reads are live; while they are not yet on sale the call is free (`GET /pricing` reports `messaging_reads.available`).
operationId: listMessages
parameters:
- name: since
in: query
required: false
schema:
type: string
maxLength: 4000
description: Read only what changed after this value from a previous read.
- name: cursor
in: query
required: false
schema:
type: string
maxLength: 4000
description: Opaque cursor from the previous page.
- name: count
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 20
description: Conversations per page, 1 to 20.
responses:
'200':
description: The conversations, read fresh, with coverage.
content:
application/json:
schema:
$ref: '#/components/schemas/PeopleReadResult'
example:
data: {}
coverage:
filled: 1
of: 1
headers:
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'429':
$ref: '#/components/responses/RateLimited'
'503':
description: This read is temporarily unavailable. Nothing was charged.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-price-usd: 0.01
x-agentic-access:
action-class: connected
consequence: read-billed
subject: required
token:
max-ttl: 3600
audit: billing-ledger
/v1/messages/inmail-credits:
get:
tags:
- Messaging reads
summary: Remaining message credits
description: 'Your connected account''s remaining credits for messages to people outside its network (`credits_remaining`), the credits POST /v1/messages with `inmail: true` spends. Free. Until this read is switched on it answers 503 `temporarily_unavailable` (`GET /pricing` lists it nowhere, as it has no price).'
operationId: getMessageCredits
parameters: []
responses:
'200':
description: The remaining credits.
content:
application/json:
schema:
$ref: '#/components/schemas/PeopleReadResult'
example:
data:
credits_remaining: 3
coverage:
filled: 1
of: 1
headers:
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
'503':
description: This read is temporarily unavailable. Nothing was charged.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-agentic-access:
action-class: connected
consequence: read
subject: required
token:
max-ttl: 3600
audit: none
/v1/messages/thread:
get:
tags:
- Messaging reads
summary: Read a conversation thread (live)
description: Read the messages of one conversation thread, incremental by `since`/`cursor`. $0.01 per read. Billed per call once the messaging reads are live; while they are not yet on sale the call is free (`GET /pricing` reports `messaging_reads.available`).
operationId: readMessageThread
parameters:
- name: thread_id
in: query
required: true
schema:
type: string
maxLength: 4000
description: The thread id from GET /v1/messages.
- name: since
in: query
required: false
schema:
type: string
maxLength: 4000
description: Read only what changed after this value from a previous read.
- name: cursor
in: query
required: false
schema:
type: string
maxLength: 4000
description: Opaque cursor from the previous page.
- name: count
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 50
description: Messages per page, 1 to 50.
responses:
'200':
description: The thread's messages, read fresh, with coverage.
content:
application/json:
schema:
$ref: '#/components/schemas/PeopleReadResult'
example:
data: {}
coverage:
filled: 1
of: 1
headers:
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'429':
$ref: '#/components/responses/RateLimited'
'503':
description: This read is temporarily unavailable. Nothing was charged.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-price-usd: 0.01
x-agentic-access:
action-class: connected
consequence: read-billed
subject: required
token:
max-ttl: 3600
audit: billing-ledger
/v1/connections:
get:
tags:
- Messaging reads
summary: List your connections (live)
description: Read your connected account's first-degree connections, newest first, each with name, headline, profile_ref, person_ref and connected_at. $0.01 per read. Billed per call once the messaging reads are live; while they are not yet on sale the call is free (`GET /pricing` reports `messaging_reads.available`).
operationId: listConnections
parameters:
- name: start
in: query
required: false
schema:
type: integer
minimum: 0
maximum: 10000
description: 0-based position of the first connection.
- name: count
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 40
description: Connections per page, 1 to 40.
- name: cursor
in: query
required: false
schema:
type: string
maxLength: 4000
description: Opaque cursor from the previous page.
responses:
'200':
description: The connections, read fresh, with coverage. `page.cursor` reads the next page.
content:
application/json:
schema:
$ref: '#/components/schemas/PeopleReadResult'
example:
data: {}
coverage:
filled: 1
of: 1
headers:
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'409':
description: No account is connected. Connect one with POST /v1/accounts/session, then retry.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: The connected account is signed out. Connect it again, then retry.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
$ref: '#/components/responses/RateLimited'
'503':
description: This read is temporarily unavailable. Nothing was charged.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-price-usd: 0.01
x-agentic-access:
action-class: connected
consequence: read-billed
subject: required
token:
max-ttl: 3600
audit: billing-ledger
/v1/invitations/received:
get:
tags:
- Messaging reads
summary: List received invitations (live)
description: Read the connection invitations waiting on your connected account, each with an `invitation_id`, the sender as a person (name, headline, profile_ref, person_ref), the optional message and sent_at. Answer one with POST /v1/invitations/accept or /decline. $0.01 per read. Billed per call once the messaging reads are live; while they are not yet on sale the call is free (`GET /pricing` reports `messaging_reads.available`).
operationId: listReceivedInvitations
parameters:
- name: count
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 20
description: Invitations per page, 1 to 20.
- name: cursor
in: query
required: false
schema:
type: string
maxLength: 4000
description: Opaque cursor from the previous page.
responses:
'200':
description: The invitations, read fresh, with coverage.
content:
application/json:
schema:
$ref: '#/components/schemas/PeopleReadResult'
example:
data: {}
coverage:
filled: 1
of: 1
headers:
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'409':
description: No account is connected. Connect one with POST /v1/accounts/session, then retry.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: The connected account is signed out. Connect it again, then retry.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
$ref: '#/components/responses/RateLimited'
'503':
description: This read is temporarily unavailable. Nothing was charged.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-price-usd: 0.01
x-agentic-access:
action-class: connected
consequence: read-billed
subject: required
token:
max-ttl: 3600
audit: billing-ledger
/v1/invitations/sent:
get:
tags:
- Messaging reads
summary: List sent invitations (live)
description: Read the connection invitations your connected account sent, each with status (`pending`, or `accepted` or `withdrawn` where known), the invitee as a person and sent_at. $0.01 per read. Billed per call once the messaging reads are live; while they are not yet on sale the call is free (`GET /pricing` reports `messaging_reads.available`).
operationId: listSentInvitations
parameters:
- name: count
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 20
description: Invitations per page, 1 to 20.
- name: cursor
in: query
required: false
schema:
type: string
maxLength: 4000
description: Opaque cursor from the previous page.
responses:
'200':
description: The invitations, read fresh, with coverage.
content:
application/json:
schema:
$ref: '#/components/schemas/PeopleReadResult'
example:
data: {}
coverage:
filled: 1
of: 1
headers:
RateLimit-Limit:
$ref: '#/components/headers/RateLimit-Limit'
RateLimit-Remaining:
$ref: '#/components/headers/RateLimit-Remaining'
RateLimit-Reset:
$ref: '#/components/headers/RateLimit-Reset'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthorized'
'402':
$ref: '#/components/responses/PaymentRequired'
'409':
description: No account is connected. Connect one with POST /v1/accounts/session, then retry.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'422':
description: The connected account is signed out. Connect it again, then retry.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'429':
$ref: '#/components/responses/RateLimited'
'503':
description: This read is temporarily unavailable. Nothing was charged.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
x-price-usd: 0.01
x-agentic-access:
action-class: connected
consequence: read-billed
subject: required
token:
max-ttl: 3600
audit: billing-ledger
components:
responses:
Unauthorized:
description: The API key is missing or invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
PaymentRequired:
description: Out of credits. The body carries `top_up_url`; nothing was charged.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
RateLimited:
description: Too many requests; retry after the window.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
BadRequest:
description: The request was invalid (e.g. a bad filter or input); nothing was charged.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
PeopleReadResult:
type: object
description: A live read's result. `data` is the person, page or result list read fresh at request time; `coverage` reports how many fields of the expected set were present on the source.
required:
- data
- coverage
properties:
data:
type: object
additionalProperties: true
description: The read result. For search, posts, engagers and followers this is `{ items, page }`; for a profile it is the profile object.
coverage:
type: object
description: How complete the source was.
properties:
filled:
type: integer
of:
type: integer
Error:
type: object
required:
- error
description: Every error answers with this shape. `error` is a human-readable message; `code` is a stable machine code when present.
properties:
error:
type: string
code:
type: string
description: A stable error code, e.g. INVALID_FILTER, INVALID_INPUT, INVALID_ID, NOT_FOUND, INSUFFICIENT_CREDITS, WATCHLIST_LIMIT, RATE_LIMITED.
message:
type: string
description: Extra guidance on some errors (401, 402).
field:
type: string
description: The offending field, on some 400s.
top_up_url:
type: string
format: uri
description: Where to add credits, on a 402.
additionalProperties: true
headers:
RateLimit-Limit:
description: Requests this API key may make per minute.
schema:
type: integer
RateLimit-Reset:
description: Seconds until the current window resets.
schema:
type: integer
RateLimit-Remaining:
description: Requests left in the current one-minute window.
schema:
type: integer
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: 'Your API key as a bearer token: `Authorization: Bearer pa_live_<48 hex>`. Create and manage keys in the dashboard at https://prospectapis.com.'
externalDocs:
description: API reference and quickstart
url: https://prospectapis.com/docs