API Reference
Integrate Fixly into your apps, dashboards, and workflows. Enterprise plan required.
Overview
The Fixly API mirrors what you do in the product: run website analyses, pull summaries or full reports, check credits, list leads, and add leads to the same pipeline you see in the dashboard. All endpoints return JSON. Enterprise accounts can review per-key call history, credits, and operation breakdown under Dashboard → Settings → API access, and opt into a weekly API summary email there.
Base URL
https://joinfixly.com/api/v1Auth
Bearer tokenFormat
JSONAuthentication
All requests require an API key passed in the Authorization header. Generate keys from Dashboard > Settings > API Keys.
Authorization: Bearer fx_your_api_key_hereKeep your keys secure. Never expose them in client-side code or public repositories. Keys are shown only once at creation.
Rate limits & errors
API requests are rate-limited to 60 requests per minute per key. Analysis endpoints consume credits from your plan balance.
| Status | Meaning |
|---|---|
200 | Success |
400 | Bad request — check parameters |
401 | Unauthorized — invalid or missing API key |
402 | Insufficient credits |
403 | Forbidden — Enterprise plan required |
429 | Quota exceeded — monthly audit limit reached |
500 | Internal server error |
Endpoints
/api/v1/meReturns your account info, plan, and credit balance.
curl -H "Authorization: Bearer fx_your_key" \
https://joinfixly.com/api/v1/me{
"ok": true,
"email": "you@company.com",
"plan": "enterprise",
"credits": {
"total": 5000,
"used": 120,
"remaining": 4880
}
}/api/v1/creditsReturns live credit balance and next reset date.
curl -H "Authorization: Bearer fx_your_key" \
https://joinfixly.com/api/v1/credits{
"plan": "enterprise",
"credits": {
"total": 5000,
"used": 120,
"remaining": 4880
},
"reset_date": "2026-05-01T00:00:00.000Z"
}/api/v1/analyzeRun an AI-powered website analysis. Consumes credits.
Request body
urlrequiredbusiness_contextcurl -X POST \
-H "Authorization: Bearer fx_your_key" \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com", "business_context": "B2B SaaS product"}' \
https://joinfixly.com/api/v1/analyze{
"id": "a1b2c3d4-...",
"website": "https://example.com",
"score": 72,
"summary": "The site has strong content but needs...",
"subScores": {
"seoHealth": 68,
"conversionReadiness": 74,
"contentQuality": 81,
"technicalPerformance": 65,
"trustAndCredibility": 72
},
"top5Fixes": [
{
"what": "Add structured data markup",
"whyItMatters": "Improves search result...",
"expectedImpact": "15-20% CTR increase",
"priority": "critical",
"category": "seo"
}
],
"actions_created": 5,
"credits_consumed": 10,
"credits_remaining": 4870,
"trend": "first_run",
"score_delta": null,
"created_at": "2026-04-04T10:30:00.000Z"
}/api/v1/analysesList your past analyses with scores and timestamps.
Query parameters
limitoffsetcurl -H "Authorization: Bearer fx_your_key" \
"https://joinfixly.com/api/v1/analyses?limit=10&offset=0"{
"analyses": [
{
"id": "a1b2c3d4-...",
"website": "https://example.com",
"score": 72,
"created_at": "2026-04-04T10:30:00.000Z"
}
],
"pagination": { "limit": 10, "offset": 0, "count": 1 }
}/api/v1/analyses/:idGet summary fields for one analysis. Append ?full=true for the complete stored JSON (same payload shape as in-app, large).
Query parameters
fullcurl -H "Authorization: Bearer fx_your_key" \
"https://joinfixly.com/api/v1/analyses/a1b2c3d4-...?full=true"{
"id": "a1b2c3d4-...",
"website": "https://example.com",
"score": 72,
"summary": "The site has strong content but needs...",
"subScores": { ... },
"top5Fixes": [ ... ],
"deterministicChecks": [ ... ],
"recheckDelta": {
"previousScore": 65,
"currentScore": 72,
"scoreDelta": 7,
"trend": "improved"
},
"created_at": "2026-04-04T10:30:00.000Z"
}/api/v1/leadsRetrieve your saved leads with contact details.
curl -H "Authorization: Bearer fx_your_key" \
https://joinfixly.com/api/v1/leads{
"leads": [
{
"id": "l1m2n3o4-...",
"company": "Acme Corp",
"website": "https://acme.com",
"contact_name": "Jane Doe",
"contact_email": "jane@acme.com",
"industry": "SaaS",
"status": "new",
"created_at": "2026-04-03T08:00:00.000Z"
}
],
"count": 1
}/api/v1/leadsCreate a lead in your Fixly workspace — same rules and monthly caps as adding a lead in the dashboard.
Request body (JSON)
company_namerequiredwebsiterequiredcontact_namecontact_emailcontact_phonejob_titleindustrylead_sourcenoteslinkedin_urlinstagram_urlx_urlcurl -X POST \
-H "Authorization: Bearer fx_your_key" \
-H "Content-Type: application/json" \
-d '{"company_name":"Acme Corp","website":"https://acme.com","contact_email":"jane@acme.com","lead_source":"CRM sync"}' \
https://joinfixly.com/api/v1/leads{
"ok": true,
"lead": {
"id": "…",
"company_name": "Acme Corp",
"website": "https://acme.com",
"contact_email": "jane@acme.com",
"status": "new",
"created_at": "2026-04-04T12:00:00.000Z"
}
}Quick-start examples
Node.js / JavaScript
const API_KEY = "fx_your_api_key";
const BASE = "https://joinfixly.com/api/v1";
async function analyzeWebsite(url) {
const res = await fetch(`${BASE}/analyze`, {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ url }),
});
if (!res.ok) {
const err = await res.json();
throw new Error(err.message);
}
return res.json();
}
// Run an analysis
const result = await analyzeWebsite("https://example.com");
console.log("Score:", result.score);
console.log("Fixes:", result.top5Fixes);
async function createLead(payload) {
const res = await fetch(`${BASE}/leads`, {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
});
if (!res.ok) {
const err = await res.json();
throw new Error(err.message ?? err.error);
}
return res.json();
}
// Same as dashboard “Add lead”
await createLead({
company_name: "Acme Corp",
website: "https://acme.com",
contact_email: "jane@acme.com",
lead_source: "Your product",
});Python
import requests
API_KEY = "fx_your_api_key"
BASE = "https://joinfixly.com/api/v1"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
# Run an analysis
resp = requests.post(
f"{BASE}/analyze",
headers=headers,
json={"url": "https://example.com"},
)
data = resp.json()
print(f"Score: {data['score']}")
# List past analyses
analyses = requests.get(f"{BASE}/analyses", headers=headers).json()
for a in analyses["analyses"]:
print(f"{a['website']} → {a['score']}/100")
# Create a lead (same as dashboard)
lead_resp = requests.post(
f"{BASE}/leads",
headers=headers,
json={
"company_name": "Acme Corp",
"website": "https://acme.com",
"contact_email": "jane@acme.com",
"lead_source": "Your product",
},
)
lead_resp.raise_for_status()
print(lead_resp.json()["lead"]["id"])Need help?
Have questions about the API or need a higher rate limit? Contact our team — we typically respond within 24 hours.
