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
    ClientHow to connect
    Claude (web & desktop)Settings → Connectors → Add custom connector → paste the URL → Connect, then sign in to Eaglecross.
    ChatGPTSettings → Apps & Connectors → enable Developer mode (Advanced settings) → Create → paste the URL, authentication OAuth, then sign in.
    Claude Code
    claude mcp add --transport http eaglecross https://api.eaglecross.xyz/mcp
    Gemini CLI
    gemini mcp add --transport http eaglecross https://api.eaglecross.xyz/mcp
    Grokgrok.com → Connectors → add a custom connector with the URL, then sign in to Eaglecross.
    Cursor, VS Code, othersAdd 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

    ToolWhat it doesType
    get_accountPlan, credits left, default ICP preset.read
    list_icp_presetsICP presets and the signals each one prioritizes.read
    research_leadsResearch up to 100 leads, or a pasted CSV of up to 500 (uses credits).write, web
    get_jobJob progress: leads done, reach/skip counts.read
    list_jobsRecent jobs, including ones from the web app.read
    get_job_leadsScored leads with icebreakers and top signals.read
    get_leadAll signals with sources and dates for one lead.read
    rewrite_icebreakerRewrite one lead's subject + opener (1 credit).write
    cancel_jobStop a running job; finished leads are kept.destructive
    get_export_link1-hour CSV download link for a job's results.write
    get_settingsDefault preset, templates, instructions, analysis options.read
    update_settingsChange 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_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

    Base 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 & pathDescription
    GET /v1/accountPlan, credits, limits, default preset.
    GET /v1/presetsICP presets (built-in and your custom one).
    POST /v1/jobsStart a job from JSON leads (max 1000).
    POST /v1/jobs/csvStart a job from a CSV upload (max 5 MB).
    GET /v1/jobsList jobs (status, limit, offset).
    GET /v1/jobs/{id}Job status and progress.
    POST /v1/jobs/{id}/cancelStop a processing job.
    DELETE /v1/jobs/{id}Delete a job and its leads.
    GET /v1/jobs/{id}/leadsLeads, highest score first (reach_flag, limit ≤ 200, offset).
    GET /v1/jobs/{id}/leads.csvCSV export, same columns as the web app.
    GET /v1/leads/{id}One lead with every signal and source.
    POST /v1/leads/{id}/icebreakerRewrite the icebreaker (template, instructions).
    POST /v1/jobs/{id}/export-linkSigned 1-hour CSV download link (no API key needed).
    GET /v1/settingsDefault preset, templates, instructions, analysis options.
    PATCH /v1/settingsChange 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

    FieldMeaning
    reach_flagreach = strong recent signal, contact now. skip = nothing strong enough yet.
    scoreConfidence score 0-100, after time decay of each signal.
    reach_reasonWhy the lead was flagged reach or skip.
    intent_summaryOne-paragraph read of what the company is focused on.
    icebreaker_subject / icebreaker_bodyEmail subject and personalized opening line (reach leads).
    top_signals / signalstype, snippet, source_url, published_date, tier, score.

    Credits & limits

    ActionCredits
    Research and score a lead, including its icebreaker1 (2 with advanced analysis)
    Rewrite an icebreaker, or write one for a skip lead1
    Reading jobs, leads, accountFree
    • 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 ..." } }
    StatuscodeWhat to do
    401unauthorizedMissing, invalid, expired, or revoked key or token.
    402insufficient_creditsAdd credits at app.eaglecross.xyz/pricing.
    403plan_requiredThe feature needs a higher plan (API keys, advanced analysis).
    404not_foundNo such job or lead in your account.
    409account_not_readySign in to the web app once to finish account setup.
    413 / 400file_too_large / invalid_csvFix the CSV as described in the message.
    422invalid_request / too_many_leads / no_signalsCheck error.details for the offending fields.
    429too_many_active_jobsWait for a running job to finish.
    502 / 503job_start_failed / upstream_unavailableTemporary; retry with backoff. Nothing was charged.

    Questions or a stuck job (a job reports "stalled": true after 10 minutes without progress)? support@eaglecross.xyz