Pre-launch beta — Pro plan free for the first 100 signups. 0 claimed 100 left Claim →

Authentication

Every endpoint authenticates via one of two headers. Both keys are pre-loaded for this environment — copy from the chips below. Get a personal API key from the dashboard after signing up; it replaces the public guest key and unlocks your tier's per-day quotas.

Tiers

TierPer runAPI calls / dayRetention
Guest2052h
Registered200506h
Pro1,00050024h

API keys (this environment)

The public site token below is safe to use in the browser. Write endpoints (including POST /api/blog/post) require the single admin master key, which is never exposed on this public page — copy it from the admin console.

Public site token x-api-key

Use on read endpoints, /api/tool-run, /api/blog/list, etc. Rate-limited, never admin.

pub-SlLO-K41HYVaytaEVYbSzG3F4U2BNepk8oPFnw

Admin master key x-api-key

The single secret key for all write/admin endpoints, including POST /api/blog/post. Not shown here — reveal & copy it from the admin console.

••••••••••••••••

Code examples — every tool, every language

Every tool runs through the same flow: POST /api/tool-run returns a job_id, you poll /status, then read /results. Pick a tool and a language below — each sample is a complete, runnable client (start → poll → results). Replace YOUR_API_KEY with your personal key from the dashboard (a free Registered account works — tool runs require a signed-in key, not the public guest token).


Loading…

Languages: cURL · Python · Node.js · Java · Kotlin · Swift · Flutter/Dart. Swap the tool and params for any other tool key listed under POST /api/tool-run.

Errors

All errors follow this shape:

{"detail": "Human-readable error"}
HTTPMeaning
400Missing or malformed param
401Bad / missing api key
403Tier doesn't allow this action
404Resource not found
408Job didn't finish in window
429Rate-limited — see Retry-After
500Server error — retry
503Database / upstream model unavailable

Rate limits

Per-IP rate limit is 60 req / min. Pro plans get 600 req / min. Excess returns 429 with a Retry-After header.

POST /api/auth/signup

Creates a new registered user. The first 100 signups are flagged pro_eligible=true — they can claim a 30-day Pro trial via /api/auth/claim-pro.

curl -X POST https://convertfleet.online/api/auth/signup \
  -H "Content-Type: application/json" \
  -d '{
    "email":    "you@example.com",
    "password": "your-strong-password",
    "name":     "Aisha"
  }'

Response

{
  "status": "success",
  "user": {
    "id": "uuid", "email": "...", "api_key": "sk-...",
    "tier": "registered", "pro_eligible": true, "pro_expires_at": null
  }
}

POST /api/auth/login

Verify password and return the user's api_key. Store it client-side and send as x-api-key on every subsequent request.

curl -X POST https://convertfleet.online/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","password":"your-strong-password"}'

GET /api/auth/me

Returns the profile + usage counters for the api_key holder.

curl https://convertfleet.online/api/auth/me \
  -H "x-api-key: pub-SlLO-K41HYVaytaEVYbSzG3F4U2BNepk8oPFnw"

POST /api/auth/update

Update name and/or password. Password change requires current_password.

curl -X POST https://convertfleet.online/api/auth/update \
  -H "x-api-key: YOUR_USER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Aisha P.",
    "current_password": "old-pw",
    "new_password":     "new-strong-pw"
  }'

POST /api/auth/regenerate-key

Rotate the personal API key. The old key is invalidated immediately.

curl -X POST https://convertfleet.online/api/auth/regenerate-key \
  -H "x-api-key: YOUR_USER_KEY"

POST /api/auth/claim-pro

One-shot — activates a 30-day Pro window for an eligible account.

curl -X POST https://convertfleet.online/api/auth/claim-pro \
  -H "x-api-key: YOUR_USER_KEY"

POST /api/blog/post

Publish a blog post from an external system. Authenticates with the admin master key (header x-api-key). Posts created here are tagged source=api.

Required fields

  • title — string
  • content — string (HTML or plain text)

Optional fields

  • slug — URL slug, auto-derived from title if omitted
  • excerpt — short card-preview summary
  • category — defaults to Lead Generation
  • status"draft" or "published"
  • is_featured — boolean, pins the post on the blog homepage
  • meta_description — SEO meta description
  • seo_keywords — comma-separated string or keywords as an array
  • featured_image — URL of the hero image (alias of image_url)
curl -X POST https://convertfleet.online/api/blog/post \
  -H "x-api-key: YOUR_ADMIN_MASTER_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "My Post",
    "slug": "my-post",
    "content": "<p>HTML or text</p>",
    "excerpt": "Short summary",
    "category": "Technology",
    "status": "draft",
    "is_featured": false,
    "meta_description": "SEO description",
    "seo_keywords": "key1, key2, key3",
    "featured_image": "https://example.com/cover.jpg"
  }'

POST /api/blog/generate

Generate and publish in one call. Uses any valid user API key (paid tiers recommended — image generation is slow). Returns the full article payload plus the inserted post id.

curl -X POST https://convertfleet.online/api/blog/generate \
  -H "x-api-key: YOUR_USER_KEY" \
  -H "Content-Type: application/json" \
  -d '{"topic":"apollo vs clay email verification 2026"}'

GET /api/blog/list

Public read of all blog posts, newest first.

curl https://convertfleet.online/api/blog/list

POST /api/tool-run

Kick off any tool. Returns a job_id immediately — poll status or open the WebSocket.

Tool keys

mapsrev linkedin fb fbads reddit tiktok twitter yt yt_comp dl dl_yt dl_ig dl_tt dl_fb dl_sn email disposable webemail websearch

curl -X POST https://convertfleet.online/api/tool-run \
  -H "x-api-key: pub-SlLO-K41HYVaytaEVYbSzG3F4U2BNepk8oPFnw" \
  -H "Content-Type: application/json" \
  -d '{
    "tool": "mapsrev",
    "params": {
      "place_url": "https://maps.google.com/...",
      "max_results": 200
    }
  }'

GET /api/tool-run/{job_id}/status

curl https://convertfleet.online/api/tool-run/JOB_ID/status \
  -H "x-api-key: pub-SlLO-K41HYVaytaEVYbSzG3F4U2BNepk8oPFnw"

GET /api/tool-run/{job_id}/results

curl https://convertfleet.online/api/tool-run/JOB_ID/results \
  -H "x-api-key: pub-SlLO-K41HYVaytaEVYbSzG3F4U2BNepk8oPFnw"

GET /api/search/status

Which Google providers are configured and whether google.com is currently answering — call it before a search if your agent needs to know it will get a real Google ranking.

curl https://convertfleet.online/api/search/status \
  -H "x-api-key: pub-SlLO-K41HYVaytaEVYbSzG3F4U2BNepk8oPFnw"
{
  "providers": {"serper": false, "serpapi": false, "google_cse": false},
  "proxy_configured": false,
  "google_ready": false,
  "google_cooldown_active": true,
  "last_google_block_reason": "Google served the JavaScript-required interstitial (no results markup) to this IP",
  "engines": ["auto", "google", "bing", "duckduckgo", "brave", "mojeek", "yahoo", "…"],
  "note": "Real google.com rankings need SERPER_API_KEY, SERPAPI_KEY or GOOGLE_CSE_KEY + GOOGLE_CSE_CX (or a residential SEARCH_PROXY)…"
}

POST /api/website-email/find

Crawl a single website (same-site pages only) and return every email it finds, plus phones and social links. Prioritises contact / about / team pages, de-obfuscates "name [at] domain [dot] com", and tags each address personal or role.

Body fields

  • website — string, the site to crawl (a bare host like acme.com is fine)
  • max_pages — int, crawl budget. Clamped to your plan's per-run ceiling.
  • include_phones — boolean, default true
  • include_socials — boolean, default true
curl -X POST https://convertfleet.online/api/website-email/find \
  -H "x-api-key: pub-SlLO-K41HYVaytaEVYbSzG3F4U2BNepk8oPFnw" \
  -H "Content-Type: application/json" \
  -d '{
    "website": "https://acme.com",
    "max_pages": 12,
    "include_phones": true,
    "include_socials": true
  }'

Response

{
  "website": "https://acme.com",
  "domain": "acme.com",
  "pages_scanned": 9,
  "emails": ["jane.doe@acme.com", "sales@acme.com"],
  "phones": ["+1 555-0100"],
  "socials": [{"platform": "linkedin", "url": "https://linkedin.com/company/acme", "host": "linkedin.com"}],
  "results": [
    {"email": "jane.doe@acme.com", "type": "personal", "domain": "acme.com", "source_page": "https://acme.com/team"},
    {"email": "sales@acme.com",    "type": "role",     "domain": "acme.com", "source_page": "https://acme.com/contact"}
  ],
  "count": 2
}

Also available via POST /api/tool-run with {"tool":"webemail","params":{...}} for tracked, pollable jobs with CSV / XLSX export.

AI agents — MCP server

Everything documented on this page is also callable by AI agents over the Model Context Protocol. Point Hermes, Claude, Cursor, OpenClaw, n8n, Zapier or Make at one endpoint and they get every ConvertFleet tool, with the same plan limits and the same monthly quota.

https://convertfleet.online/mcp
Authorization: Bearer <cfm- scoped token or sk- API key>

The server tells the agent how to use itself: it returns usage instructions on connect, every tool description says when to use it and what it is not for, and the find_tool helper turns a plain-English job into the right tool with example arguments.

Mint a scoped MCP token — restricted to the exact tools one agent may call, revocable on its own — in your dashboard → MCP / Agents.

GET /api/health

Liveness probe. Always 200.

curl https://convertfleet.online/api/health

GET /api/download/{job_id}/{fmt}

Direct file download for a finished job. fmt = csv or xlsx.

curl -L -o leads.csv \
  -H "x-api-key: pub-SlLO-K41HYVaytaEVYbSzG3F4U2BNepk8oPFnw" \
  https://convertfleet.online/api/download/JOB_ID/csv