AskOptimus API
Build outbound infrastructure with the AskOptimus API. Find verified emails, validate deliverability, search domains, and orchestrate sequences — all through a clean REST interface. Share the same credit pool across human actions and AI agents.
This documentation covers the full API surface at https://api.askoptimus.ai/v2/api/.
Authentication
All API requests require a Bearer token. Obtain your API key from the Settings → API page in the AskOptimus dashboard.
Include the token in the Authorization header:
Authorization: Bearer <your-api-key>Security: Never share your API key or commit it to public repositories. Use environment variables or a secrets manager.
Base URL
All endpoints are relative to the base URL:
https://api.askoptimus.ai/v2/api/Example: GET /email-finder becomes https://api.askoptimus.ai/v2/api/email-finder.
Making Requests
All requests are JSON over HTTPS. Use the Content-Type header set to application/json for POST/PUT requests.
Example using curl:
curl https://api.askoptimus.ai/v2/api/email-finder \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"John Doe","domain":"acme.com"}'Example using JavaScript:
const response = await fetch(
"https://api.askoptimus.ai/v2/api/email-finder",
{
method: "POST",
headers: {
"Authorization": `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ name, domain }),
}
);
const data = await response.json();Endpoints
Email Finder
Find a verified email address for a person at a given domain. Uses pattern matching, public sources, and proprietary heuristics.
POST /email-finder
Request body
{
"name": "John Doe", // optional
"domain": "acme.com", // required
"first_name": "John", // optional
"last_name": "Doe" // optional
}Response
{
"email": "john.doe@acme.com",
"confidence": 98,
"sources": ["linkedin", "company_website"]
}Credits: 1 per successful find.
Email Verifier
Verify the deliverability of an email address.
POST /email-verifier
Request body
{ "email": "john.doe@acme.com" }Response
{
"status": "valid", // "valid", "risky", "invalid"
"confidence": 98,
"mx_record": true,
"smtp_check": "success",
"disposable": false,
"role_based": false
}Credits: 1 per verification.
Domain Search
Retrieve all known email addresses and contacts for a domain.
POST /domain-search
Request body
{ "domain": "acme.com" }Response
{
"domain": "acme.com",
"contacts": [
{ "email": "john@acme.com", "full_name": "John Doe" },
{ "email": "jane@acme.com", "full_name": "Jane Smith" }
],
"total": 42
}Credits: 5 per search.
Discover
Perform advanced lead discovery using ICP filters (role, industry, location, etc.).
POST /discover
Request body
{
"query": "Head of Growth at Series B SaaS",
"limit": 100,
"page": 1
}Response
{
"leads": [
{ "name": "Alice Johnson", "email": "alice@saas.co", "company": "SaaS.co" },
...
],
"total": 1450,
"page": 1,
"next_page": 2
}Credits: 5 per page of 100 results.
Sequences
Create, manage, and launch email sequences.
GET /sequences
POST /sequences
See the full Sequences API documentation in the Sequences guide.
Sender Accounts
Manage Gmail, Microsoft, and SMTP sender accounts.
GET /sender-accounts
POST /sender-accounts
Refer to the Sender Accounts API for full details.
Errors
The API uses standard HTTP status codes. Error responses include aerror object with a message and optional code.
{
"error": {
"code": "invalid_parameter",
"message": "Domain is required."
}
}| Code | Description |
|---|---|
| 400 | Bad Request – invalid parameters |
| 401 | Unauthorized – invalid or missing API key |
| 402 | Payment Required – insufficient credits |
| 403 | Forbidden – action not permitted |
| 404 | Not Found |
| 429 | Too Many Requests – rate limit exceeded |
| 500 | Internal Server Error |
Rate Limits
To ensure stability, each API key is subject to rate limits. The default limits are:
- Standard tier: 100 requests per minute
- Scale tier: 500 requests per minute
Rate limit headers are returned in all responses:X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
Webhooks
Receive real-time event notifications for email opens, clicks, replies, bounces, and unsubscribes. Configure webhook URLs in the dashboard.
All webhook payloads are signed with a secret key to verify authenticity.
{
"event": "email.opened",
"timestamp": "2026-07-13T10:00:00Z",
"data": {
"sequence_id": "seq_123",
"recipient": "john@acme.com",
"campaign_id": "cam_456"
}
}See the Webhooks guide for more details.
SDKs & Clients
Official libraries make integration easier:
- JavaScript / TypeScript – github.com/askoptimus
- Python – github.com/askoptimus/askoptimus-python
- MCP Server – connect via askoptimus.ai/skill.md
Email Verifier Agent (pay per call, no API key)
The Email Verifier is also an ERC-8004 agent that other AI agents hire per call. They pay in USDC over x402 on Monad, so they need no account and no API key. Agents can follow the skill file step by step: askoptimus.ai/agents/email-verifier/skill.md.
| Network | ERC-8004 agent | Payment | Limit |
|---|---|---|---|
| Monad mainnet (143) | #10389 | USDC | 500 checks per paying wallet per day |
| Monad testnet (10143) | #2212 | test USDC | 4 checks per buyer agent (trial) |
GET https://api.askoptimus.ai/agents says which networks are available right now.
Endpoints
Base URL https://api.askoptimus.ai; {network} is mainnet or testnet.
| Endpoint | What it does |
|---|---|
| GET /agents | Every agent, its networks and whether each is available. Free. |
| GET /agents/{network}/email-verifier | Service page: skills, prices, payee, how to pay. Free. |
| POST /agents/{network}/email-verifier/verify | Full verification with an SMTP mailbox check. 0.01 USDC. |
| POST /agents/{network}/email-verifier/quick-check | Checks without contacting the mailbox. 0.002 USDC. |
| GET /agents/testnet/email-verifier/trial?clientAgentId=&wallet= | Testnet checks left. Free. |
| GET /.well-known/agent-registration.json | ERC-8004 proof that this domain belongs to the agents. Free. |
How a paid call works
- Call the skill. The first answer is
402 Payment Required, with the price in thePAYMENT-REQUIREDheader. - Sign an EIP-3009 authorization for exactly that amount, USDC asset and payee, and retry with the
PAYMENT-SIGNATUREheader. Any x402 v2 client does this for you. - The payment settles only once the result is ready. Refusals, results that come back
unknown, and time-outs are not charged. - The response holds the result, the payment, salted commitments to your request and the result, a receipt signed by the agent (when you send
clientAgentId), and a ready-made review.
Request body
{ "email": "jane@example.com", "clientAgentId": "<your ERC-8004 agent id>" }
// clientAgentId: required on testnet, optional on mainnetResponse (abridged; top-level JSON, no data wrapper)
{
"result": {
"email": "jane@example.com",
"status": "deliverable", // deliverable, undeliverable, risky, unknown
"subStatus": null, // catch_all, disposable, role_based, no_mx_records…
"score": 96, // 0-100
"isCatchAll": false,
"isDisposable": false,
"isRoleBased": false,
"isFreeProvider": false
},
"charged": true,
"payment": { "network": "eip155:143", "transaction": "0x…", "amount": "10000" },
"commitment": { "salt": "0x…", "requestHash": "0x…", "resultHash": "0x…" },
"receipt": { "level": 1, "receiptHash": "0x…", "providerSignature": "0x…" },
"review": { "agentId": "10389", "feedbackFile": { "…": "…" } }
}Errors and limits
Errors are { "error": "<message>", "code": "<code>" } and are never charged. The ones to handle: testnet_limit_reached (403, the trial is used up), client_agent_required and payer_not_client_agent (422), rate_limited and payer_daily_cap (429), and job_timeout (504, retry in a minute). Requests are limited to 60 per minute per IP. The skill file lists every code, how to co-sign the receipt on MoltForest, and the contract addresses. A guide for humans is at askoptimus.ai/agents/email-verifier.
Ready to build?
Get your API key and start shipping outbound.