Eaglecross API & MCP
Research B2B leads and write personalized cold-email icebreakers from ChatGPT, Claude, your own code, or automation tools.
Overview
Give Eaglecross a list of prospects (company, website, and ideally a contact name and title). For each lead it finds recent buying signals (hiring, funding, launches, news, tech-stack changes) with their sources, scores the lead against your Ideal Customer Profile preset, flags it reach (contact now) or skip, and writes an email subject and opening line for reach leads. It's the same engine, credits, presets, and templates as the web app.
Research is asynchronous: start a job, check its progress, then read its leads. A batch of leads takes about 30-90 seconds.
Connect an AI assistant (MCP)
The Eaglecross MCP server works with any client that supports remote MCP servers. You sign in with your Eaglecross account when connecting (OAuth), on every plan. Server URL:
https://api.eaglecross.xyz/mcp| Client | How to connect |
|---|---|
| Claude (web & desktop) | Settings → Connectors → Add custom connector → paste the URL → Connect, then sign in to Eaglecross. |
| ChatGPT | Settings → Apps & Connectors → enable Developer mode (Advanced settings) → Create → paste the URL, authentication OAuth, then sign in. |
| Claude Code | |
| Gemini CLI | |
| Grok | grok.com → Connectors → add a custom connector with the URL, then sign in to Eaglecross. |
| Cursor, VS Code, others | Add a remote (streamable HTTP) MCP server with the URL. Clients without OAuth can send an API key header: Authorization: Bearer ec_live_… |
Then ask, for example:
Research these 5 founders and tell me who to email this week, with the opener for each:
- Jane Doe, CEO, Acme (acme.com)
- ...MCP tools
| Tool | What it does | Type |
|---|---|---|
get_account | Plan, credits left, default ICP preset. | read |
list_icp_presets | ICP presets and the signals each one prioritizes. | read |
research_leads | Research up to 100 leads, or a pasted CSV of up to 500 (uses credits). | write, web |
get_job | Job progress: leads done, reach/skip counts. | read |
list_jobs | Recent jobs, including ones from the web app. | read |
get_job_leads | Scored leads with icebreakers and top signals. | read |
get_lead | All signals with sources and dates for one lead. | read |
rewrite_icebreaker | Rewrite one lead's subject + opener (1 credit). | write |
cancel_job | Stop a running job; finished leads are kept. | destructive |
get_export_link | 1-hour CSV download link for a job's results. | write |
get_settings | Default preset, templates, instructions, analysis options. | read |
update_settings | Change those defaults (shared with the web app). | write |
Assistants are told to confirm with you before researching more than 20 leads. Eaglecross never sees your conversations.
API authentication
Create an API key in the web app under Settings → API & MCP (every plan). Keys start with ec_live_, are shown once, and can be revoked anytime. Send it on every request:
Authorization: Bearer ec_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxBase URL: https://api.eaglecross.xyz. Interactive reference with every schema: https://api.eaglecross.xyz/docs (OpenAPI: /openapi.json).
API quickstart
1. Start a job:
curl -X POST https://api.eaglecross.xyz/v1/jobs \
-H "Authorization: Bearer $EAGLECROSS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Fintech founders - Oct",
"preset": "b2b_saas",
"leads": [
{"name": "Jane Doe", "title": "CEO", "company": "Acme", "website": "acme.com"},
{"name": "Sam Lee", "title": "Head of Growth", "company": "Beta", "website": "https://beta.io"}
]
}'2. Poll until "status": "done" (every 15-30 seconds is plenty):
curl https://api.eaglecross.xyz/v1/jobs/$JOB_ID -H "Authorization: Bearer $EAGLECROSS_API_KEY"3. Read the leads worth contacting, or export everything as CSV:
curl "https://api.eaglecross.xyz/v1/jobs/$JOB_ID/leads?reach_flag=reach" -H "Authorization: Bearer $EAGLECROSS_API_KEY"
curl -o leads.csv https://api.eaglecross.xyz/v1/jobs/$JOB_ID/leads.csv -H "Authorization: Bearer $EAGLECROSS_API_KEY"Already have a CSV? Upload it directly (same columns as the web app: name, company, website, plus optional title, linkedin_url, company_description, location, industry):
curl -X POST https://api.eaglecross.xyz/v1/jobs/csv \
-H "Authorization: Bearer $EAGLECROSS_API_KEY" \
-F "file=@leads.csv" -F "preset=lead_gen_agency"Endpoints
| Method & path | Description |
|---|---|
GET /v1/account | Plan, credits, limits, default preset. |
GET /v1/presets | ICP presets (built-in and your custom one). |
POST /v1/jobs | Start a job from JSON leads (max 1000). |
POST /v1/jobs/csv | Start a job from a CSV upload (max 5 MB). |
GET /v1/jobs | List jobs (status, limit, offset). |
GET /v1/jobs/{id} | Job status and progress. |
POST /v1/jobs/{id}/cancel | Stop a processing job. |
DELETE /v1/jobs/{id} | Delete a job and its leads. |
GET /v1/jobs/{id}/leads | Leads, highest score first (reach_flag, limit ≤ 200, offset). |
GET /v1/jobs/{id}/leads.csv | CSV export, same columns as the web app. |
GET /v1/leads/{id} | One lead with every signal and source. |
POST /v1/leads/{id}/icebreaker | Rewrite the icebreaker (template, instructions). |
POST /v1/jobs/{id}/export-link | Signed 1-hour CSV download link (no API key needed). |
GET /v1/settings | Default preset, templates, instructions, analysis options. |
PATCH /v1/settings | Change any of those settings (shared with the web app). |
Job options: preset (lead_gen_agency, b2b_saas, ai_agency, custom; defaults to the preset selected in your Settings), lookback_window (aggressive, balanced, lenient), and advanced_analysis (Pro). Templates, BuiltWith, and other options come from your Settings in the web app.
Lead fields
| Field | Meaning |
|---|---|
reach_flag | reach = strong recent signal, contact now. skip = nothing strong enough yet. |
score | Confidence score 0-100, after time decay of each signal. |
reach_reason | Why the lead was flagged reach or skip. |
intent_summary | One-paragraph read of what the company is focused on. |
icebreaker_subject / icebreaker_body | Email subject and personalized opening line (reach leads). |
top_signals / signals | type, snippet, source_url, published_date, tier, score. |
Credits & limits
| Action | Credits |
|---|---|
| Research and score a lead, including its icebreaker | 1 (2 with advanced analysis) |
| Rewrite an icebreaker, or write one for a skip lead | 1 |
| Reading jobs, leads, account | Free |
- Same pricing as the web app. Starting a job needs at least 1 credit per lead; credits are charged as leads are processed, and leads that fail are refunded.
- Up to 1000 leads per job and 3 jobs processing at once. Leads run in parallel per plan: Free 2, Standard 5, Pro 10.
- Jobs and leads are deleted after your retention period (Settings → Advanced).
Errors
Every error has the same shape:
{ "error": { "code": "insufficient_credits", "message": "This job needs at least 40 credits ..." } }| Status | code | What to do |
|---|---|---|
| 401 | unauthorized | Missing, invalid, expired, or revoked key or token. |
| 402 | insufficient_credits | Add credits at app.eaglecross.xyz/pricing. |
| 403 | plan_required | The feature needs a higher plan (API keys, advanced analysis). |
| 404 | not_found | No such job or lead in your account. |
| 409 | account_not_ready | Sign in to the web app once to finish account setup. |
| 413 / 400 | file_too_large / invalid_csv | Fix the CSV as described in the message. |
| 422 | invalid_request / too_many_leads / no_signals | Check error.details for the offending fields. |
| 429 | too_many_active_jobs | Wait for a running job to finish. |
| 502 / 503 | job_start_failed / upstream_unavailable | Temporary; retry with backoff. Nothing was charged. |
Questions or a stuck job (a job reports "stalled": true after 10 minutes without progress)? support@eaglecross.xyz
