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
| Tier | Per run | API calls / day | Retention |
|---|---|---|---|
| Guest | 20 | 5 | 2h |
| Registered | 200 | 50 | 6h |
| Pro | 1,000 | 500 | 24h |
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-oIGLjM0L890K_YefOLhncjgQ6kvB6a1juPTxXQ
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"}
| HTTP | Meaning |
|---|---|
| 400 | Missing or malformed param |
| 401 | Bad / missing api key |
| 403 | Tier doesn't allow this action |
| 404 | Resource not found |
| 408 | Job didn't finish in window |
| 429 | Rate-limited — see Retry-After |
| 500 | Server error — retry |
| 503 | Database / 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-oIGLjM0L890K_YefOLhncjgQ6kvB6a1juPTxXQ"
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
curl -X POST https://convertfleet.online/api/tool-run \
-H "x-api-key: pub-oIGLjM0L890K_YefOLhncjgQ6kvB6a1juPTxXQ" \
-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-oIGLjM0L890K_YefOLhncjgQ6kvB6a1juPTxXQ"
GET /api/tool-run/{job_id}/results
curl https://convertfleet.online/api/tool-run/JOB_ID/results \
-H "x-api-key: pub-oIGLjM0L890K_YefOLhncjgQ6kvB6a1juPTxXQ"
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-oIGLjM0L890K_YefOLhncjgQ6kvB6a1juPTxXQ" \
-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.
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-oIGLjM0L890K_YefOLhncjgQ6kvB6a1juPTxXQ" \
https://convertfleet.online/api/download/JOB_ID/csv