Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Argorant Account API
version: 1.0.0
summary: 'Argorant is a complete B2B outreach platform that a script or an AI agent can run from start to finish: find the right people, get their checked work emails and phone numbers, find one email from a name and a company domain, check your own lists, run campaigns with a personal line for each contact, answer replies in the same thread, and order new sending mailboxes on new domains.'
description: 'Argorant is a complete B2B outreach platform that a script or an AI agent can run from start to finish. Find the companies and people that fit your offer among 630.7M+ contacts in 202 countries. Get their work emails, checked right before you receive them, and their phone numbers. Find one person''s email from a name and a company domain. Check the emails on your own lists. Write a campaign with a personal line for every contact, send it from your own Google Workspace or Microsoft 365 mailboxes or from new mailboxes we set up on new domains for you, and answer the replies in the same thread.
The REST API, the command line tool (`npx argorant`) and the MCP server for AI agents (`https://mcp.argorant.com/mcp`) share one account, one credit balance and the same rules, so anything you do here works the same in a script, a pipeline or a chat with Claude, ChatGPT or Codex.
**The cheapest way to get validated contacts.** Argorant is the cheapest way to get validated B2B contacts. With pay as you go, 100,000 credits cost $499, which is under half a cent per validated contact. On Hyperscale, 200,000 credits a month cost $649, about a third of a cent each. An email that fails the check costs nothing. Compare the prices on our comparison pages, for example against ZoomInfo, Cognism, Hunter and LeadIQ.
**What it costs.** Searching, counting and previewing are free. One credit buys one validated contact; an email that does not pass the check is left out and costs nothing. Checking an email from your own list costs half a credit. A phone number costs 10 credits and only when one is returned. Finding one email costs 1 credit when found and 0.25 when nothing is found. Campaign emails come with your plan and never use credits. Pay as you go from $17.50 for 500 credits to $499 for 100,000, or pick a plan from $99 a month.
**How to start.** Create an API key at app.argorant.com/profile and send it as `Authorization: Bearer `. Call `GET /api/v1/account` to see your plan, credits and limits. Every answer carries an `X-Request-Id`; every error has the same shape with a stable `error.code`.
**Limits.** Each key may send a set number of requests a minute: Starter $99 a month (5,000 credits, 100,000 campaign emails, 60 requests a minute); Pro $249 a month (25,000 credits, 300,000 campaign emails, 240 requests a minute); Scale $449 a month (100,000 credits, 600,000 campaign emails, 600 requests a minute); Hyperscale $649 a month (200,000 credits, 1,000,000 campaign emails, 1200 requests a minute). The 7-day trial and pay-as-you-go accounts get 30 a minute (60 through an AI assistant). On a plan there are no daily limits apart from the email finder. During the trial the account has daily limits that reset at midnight UTC: 500 counts and 500 preview rows (1000 and 1000 through an AI assistant), and each key 100 revealed people and 50,000 export rows. For bigger numbers use saved lists, exports and campaigns. Pay-as-you-go packs: 500 credits for $17.50, 5,000 credits for $69, 25,000 credits for $199, 100,000 credits for $499, valid 365 days.
**Errors.** Every error has the same shape: `{"error": {"code", "message", "details"}, "request_id", "detail"}`. The code is stable; the message is a plain sentence. Every answer carries `X-Request-Id`, and answers to key calls carry `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset`.
**Retries and pages.** Send an `Idempotency-Key` header on any write and a retry within 24 hours returns the first answer instead of doing the work twice. Lists take `limit` and `cursor` (or `offset`) and answer with `total`, `next_cursor` and `has_more`.'
contact:
name: Argorant support
url: https://help.argorant.com
termsOfService: https://argorant.com/terms
servers:
- url: https://app.argorant.com
description: Production
security:
- BearerAuth: []
tags:
- name: Account
description: Who the key acts as, the plan, the credit balance, the request limits and the scopes. Free to call.
paths:
/api/v1:
get:
tags:
- Account
operationId: api-index
summary: API index
description: 'The name and version of the API, links to these docs and the OpenAPI document, and every public operation as method and path. Works without a key, so an agent can find its way around before it signs in.
| Cost | What it does | Key scopes |
| --- | --- | --- |
| Free | Reads only | none |'
parameters:
- $ref: '#/components/parameters/RequestId'
responses:
'200':
description: OK
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
type: object
properties:
name:
type: string
version:
type: string
docs:
type: string
openapi:
type: string
authentication:
type: string
operations:
type: array
items:
type: object
properties:
method:
type: string
path:
type: string
operation_count:
type: integer
example:
name: Argorant API
version: '1'
docs: https://docs.argorant.com
openapi: https://docs.argorant.com/openapi.json
authentication: 'Send your API key as Authorization: Bearer <key>. Create one at https://app.argorant.com/profile.'
operations:
- method: GET
path: /api/v1/account
- method: GET
path: /api/v1/people/count
operation_count: 2
'429':
description: 429 Too many requests. `rate_limited` when too many requests this minute.
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
Retry-After:
$ref: '#/components/headers/Retry-After'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
examples:
rate_limited:
summary: rate_limited (too many requests this minute)
value:
error:
code: rate_limited
message: Too many requests this minute.
details: {}
request_id: req_8f2c1d9e0b7a4c3e9f1a2b3c4d5e6f70
detail: Too many requests this minute.
x-cost: Free
x-side-effect: none
x-scopes: []
x-idempotent: false
x-paginated: false
security: []
/api/v1/me:
get:
tags:
- Account
operationId: get-me
summary: Who am I
description: 'The account this key acts as, its workspace and your role in that workspace (owner, admin, manager or member).
| Cost | What it does | Key scopes |
| --- | --- | --- |
| Free | Reads only | none |'
parameters:
- $ref: '#/components/parameters/RequestId'
responses:
'200':
description: OK
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
type: object
properties:
email:
type: string
workspace_role:
type: string
workspace_name:
type: string
workspace_id:
type: integer
example:
email: maria@northgate-advisory.com
workspace_role: owner
workspace_name: Northgate Advisory
workspace_id: 1042
'401':
description: 401 Unauthorized. `unauthorized` when the API key is missing, wrong or revoked.
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
examples:
unauthorized:
summary: unauthorized (the API key is missing, wrong or revoked)
value:
error:
code: unauthorized
message: The API key is missing, wrong or revoked.
details: {}
request_id: req_8f2c1d9e0b7a4c3e9f1a2b3c4d5e6f70
detail: The API key is missing, wrong or revoked.
'429':
description: 429 Too many requests. `rate_limited` when too many requests this minute.
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
Retry-After:
$ref: '#/components/headers/Retry-After'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
examples:
rate_limited:
summary: rate_limited (too many requests this minute)
value:
error:
code: rate_limited
message: Too many requests this minute.
details: {}
request_id: req_8f2c1d9e0b7a4c3e9f1a2b3c4d5e6f70
detail: Too many requests this minute.
x-cost: Free
x-side-effect: none
x-scopes: []
x-idempotent: false
x-paginated: false
/api/v1/account:
get:
tags:
- Account
operationId: get-account
summary: Account, credits and limits
description: 'Everything an agent should know before it spends: the plan, the credits available now and where they come from, this month''s campaign email allowance, the requests per minute and per 10 seconds this key may send, the searches and counts a minute the account may run (shared by all its keys) and, during the trial, a day, the other daily limits per key, and the key''s scopes. Call it before a large reveal, export or campaign.
| Cost | What it does | Key scopes |
| --- | --- | --- |
| Free | Reads only | none |'
parameters:
- $ref: '#/components/parameters/RequestId'
responses:
'200':
description: OK
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
content:
application/json:
schema:
$ref: '#/components/schemas/Account'
example:
email: maria@northgate-advisory.com
workspace:
id: 1042
name: Northgate Advisory
role: owner
plan:
name: Pro
status: active
billing_interval: month
renews_at: '2026-11-01T00:00:00+00:00'
cancels_at_period_end: false
credits:
available: 23140
from_plan: 22140
pay_as_you_go: 1000
free: 0
rules: 1 credit per validated contact (invalid ones cost nothing), 0.5 credit per email check, 10 credits per phone number returned.
limits:
requests_per_minute: 240
burst_per_10_seconds: 60
searches_and_counts_per_minute: 60
daily:
counts:
limit: null
used_today: 12
remaining_today: null
search_rows:
limit: null
used_today: 30
remaining_today: null
reveals:
limit: 100
used_today: 0
remaining_today: 100
export_rows:
limit: 50000
used_today: 500
remaining_today: 49500
email_finds:
limit: 2000
used_today: 4
remaining_today: 1996
email_checks:
limit: 200
used_today: 0
remaining_today: 200
per_call:
search_rows: 10
reveals: 25
resets: daily limits reset at midnight UTC; the per-minute window every minute; the burst window every 10 seconds
shared: counts, search rows and searches a minute are shared by every key of the account; requests a minute and the other daily limits are per key
scopes:
- argorant:read_counts
- argorant:search_segments
- argorant:manage_lists
- argorant:create_exports
- argorant:unlock_contacts
- argorant:verify_emails
campaign_emails:
unlimited: false
allowance: 300000
used: 41210
remaining: 258790
period: month
resets_on: '2026-11-01'
'401':
description: 401 Unauthorized. `unauthorized` when the API key is missing, wrong or revoked.
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
examples:
unauthorized:
summary: unauthorized (the API key is missing, wrong or revoked)
value:
error:
code: unauthorized
message: The API key is missing, wrong or revoked.
details: {}
request_id: req_8f2c1d9e0b7a4c3e9f1a2b3c4d5e6f70
detail: The API key is missing, wrong or revoked.
'429':
description: 429 Too many requests. `rate_limited` when too many requests this minute.
headers:
X-Request-Id:
$ref: '#/components/headers/X-Request-Id'
X-RateLimit-Limit:
$ref: '#/components/headers/X-RateLimit-Limit'
X-RateLimit-Remaining:
$ref: '#/components/headers/X-RateLimit-Remaining'
X-RateLimit-Reset:
$ref: '#/components/headers/X-RateLimit-Reset'
Retry-After:
$ref: '#/components/headers/Retry-After'
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorEnvelope'
examples:
rate_limited:
summary: rate_limited (too many requests this minute)
value:
error:
code: rate_limited
message: Too many requests this minute.
details: {}
request_id: req_8f2c1d9e0b7a4c3e9f1a2b3c4d5e6f70
detail: Too many requests this minute.
x-cost: Free
x-side-effect: none
x-scopes: []
x-idempotent: false
x-paginated: false
components:
schemas:
ErrorCode:
type: string
description: Stable error code. New codes may be added; treat unknown codes by their HTTP status.
enum:
- invalid_request
- launch_blocked
- unauthorized
- api_key_required
- plan_required
- insufficient_credits
- scope_missing
- permission_missing
- forbidden
- not_found
- route_not_found
- method_not_allowed
- conflict
- idempotency_conflict
- idempotency_in_progress
- gone
- quote_expired
- validation_error
- access_key_activation_required
- rate_limited
- daily_limit_reached
- internal_error
- unavailable
- confirmation_required
- invalid_webhook_url
- phones_not_in_plan
- card_not_charged
- owner_only
- quote_not_found
- charge_in_progress
- not_enough_names
- not_paid
- reason_required
- not_connected
- unsupported_tool
- tool_key_rejected
- price_mismatch
- quote_other_session
- export_failed
- sign_in_failed
ErrorEnvelope:
type: object
required:
- error
- request_id
properties:
error:
$ref: '#/components/schemas/Error'
request_id:
type: string
description: The id of this request, also in the X-Request-Id header. Quote it when you contact support.
example: req_8f2c1d9e0b7a4c3e9f1a2b3c4d5e6f70
detail:
description: The older error field, kept for clients written before the envelope. Read error instead.
Account:
type: object
properties:
email:
type: string
description: The account the key acts as.
format: email
workspace:
type: object
description: id, name and your role in it.
additionalProperties: true
plan:
type: object
description: name, status and renewal date.
additionalProperties: true
credits:
type: object
description: available now, from the plan, pay as you go and free credits.
additionalProperties: true
campaign_emails:
type: object
description: 'This month''s campaign email allowance: allowance, used, remaining, resets_on.'
additionalProperties: true
rate_limit:
type: object
description: requests_per_minute and burst_per_10_seconds for this key, searches_and_counts_per_minute and the daily counts and search rows for the account, the other daily limits per key.
additionalProperties: true
scopes:
type: array
description: Scopes of this key.
items:
type: string
Error:
type: object
required:
- code
- message
properties:
code:
$ref: '#/components/schemas/ErrorCode'
message:
type: string
description: One plain sentence that says what happened and what to do.
details:
type: object
description: Extra facts for this error, for example needed and balance for insufficient_credits, fields for validation_error, blockers for launch_blocked.
additionalProperties: true
headers:
Retry-After:
description: Seconds to wait before the next try.
schema:
type: integer
X-Request-Id:
description: The id of this request. Quote it when you contact support.
schema:
type: string
X-RateLimit-Remaining:
description: Requests left in the current minute.
schema:
type: integer
X-RateLimit-Limit:
description: Requests this key may send per minute.
schema:
type: integer
X-RateLimit-Reset:
description: Seconds until the minute window starts again.
schema:
type: integer
parameters:
RequestId:
name: X-Request-Id
in: header
required: false
description: Your own id for this request, 8 to 64 letters, digits, dot, dash or underscore. Returned as X-Request-Id; one is made for you when you send none.
schema:
type: string
pattern: ^[A-Za-z0-9._-]{8,64}$
securitySchemes:
BearerAuth:
type: http
scheme: bearer
bearerFormat: ag_live_...
description: 'Your API key from app.argorant.com/profile, sent as `Authorization: Bearer <key>`. A connector sign-in token (ag_mcp_...) works the same way.'
externalDocs:
description: Guides, the CLI and the MCP server for AI agents
url: https://docs.argorant.com/docs