CiteFlow API

Quickstart

Fire your first audit in five minutes.

This is a five-minute integration. By the end you will have an API key, a topped-up account, and your first completed audit.

Step 1 — Enable the API

Sign in to the CiteFlow dashboard and visit /dashboard/api. Click Enable API, enter a workspace name, and accept the API terms. CiteFlow creates your partner workspace and the first API key. The plaintext key is shown exactly once — copy it now.

ckf_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Store it in a secrets manager. Lost keys cannot be recovered; rotate through the dashboard instead.

Step 2 — Top up

Visit /dashboard/api/billing and pick a tier:

TierPriceBase creditsBonusTotal
Starter$494,90004,900
Growth$19919,9001,00020,900 (+5%)
Scale$49949,9005,00054,900 (+10%)

Stripe Checkout opens. Apply any promotion code on the Checkout page, complete payment, then return to the dashboard. Balance updates within ~10 seconds of payment via the Stripe webhook.

1 credit = $0.01. A full audit costs 150 credits ($1.50); single- dimension audits (seo, aeo, geo) cost 80 credits ($0.80).

Step 3 — Fire your first audit

npm install @citeflow/sdk
import { Citeflow } from '@citeflow/sdk';

const client = new Citeflow({ apiKey: process.env.CITEFLOW_API_KEY! });
const audit = await client.audits.create({
  url: 'https://example.com',
  type: 'seo',
});
const result = await client.audits.waitForCompletion(audit.audit_id);
console.log(result);

Python SDK

pip install citeflow-python
from citeflow import Citeflow
client = Citeflow(api_key=os.environ["CITEFLOW_API_KEY"])
audit = client.audits.create(url="https://example.com", type="seo")
result = client.audits.wait_for_completion(audit["audit_id"])
print(result)

Raw HTTP (no SDK)

curl -X POST https://www.citeflow.io/api/v1/audit \
  -H "Authorization: Bearer $CITEFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"url":"https://example.com","type":"seo"}'

You will receive a 202 Accepted immediately:

{
  "data": {
    "audit_id": "vH4kZcLm9YxQrTpA2gWb",
    "status": "queued",
    "type": "seo",
    "url": "https://example.com",
    "credits": { "charged": 80, "balance_after": 4820 },
    "links": { "self": "/api/v1/audit/vH4kZcLm9YxQrTpA2gWb" },
    "created_at": "2026-05-27T14:32:11.001Z"
  },
  "request_id": "req_01jbq6t8tjk0vfgz5gd9p4d4qa"
}

Audits typically complete in 15–60 seconds depending on type.

Step 4 — Get the result

Poll GET /audit/{audit_id} every 5–10 seconds until status is one of complete, failed, cancelled:

curl https://www.citeflow.io/api/v1/audit/vH4kZcLm9YxQrTpA2gWb \
  -H "Authorization: Bearer $CITEFLOW_API_KEY"

When complete:

{
  "data": {
    "audit_id": "vH4kZcLm9YxQrTpA2gWb",
    "status": "complete",
    "type": "seo",
    "url": "https://example.com",
    "scores": { "overall": 76, "seo": 81, "aeo": null, "geo": null },
    "dimensions": { "...": "engine-specific breakdown" },
    "issues": [{ "...": "prioritized issues list" }],
    "credits": { "charged": 80, "refunded": 0 },
    "created_at": "2026-05-27T14:32:11.001Z",
    "completed_at": "2026-05-27T14:32:54.622Z"
  }
}

Don't poll forever. Configure a webhook endpoint at /dashboard/api/webhooks and CiteFlow will POST the result the moment it's ready — see Webhooks.

What next

  • SDKs — Node + Python clients with retry + webhook helpers.
  • Authentication — IP allowlist, scopes, rotation.
  • Audits — full endpoint reference + cancellation.
  • Webhooks — stop polling.
  • Errors — what each error.code means.
  • Idempotency — safe retries.

On this page