Skip to main content

Authenticate

Every request carries your API key as a bearer token. Keys look like ck_... and are shown once at creation.
export CLASSIFY_API_KEY=ck_your_key_here

Classify a URL

curl -s -X POST https://api.classify.ai/v1/classify \
  -H "Authorization: Bearer $CLASSIFY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"urls": ["https://en.wikipedia.org/wiki/Electric_vehicle"]}'
If the URL is in ContentGraph, classifications come back inline:
{
  "results": [{
    "url": "https://en.wikipedia.org/wiki/Electric_vehicle",
    "status": "classified",
    "classifications": [
      { "rank": 0, "distance": "0.13", "iab_code": "22",
        "iab_name": "Automotive > Auto Type > Green Vehicles" }
    ]
  }],
  "count": 1,
  "latency_ms": 8
}
If it isn’t, you get status: "unknown" plus a job_id. Poll it:
curl -s https://api.classify.ai/v1/jobs/JOB_ID \
  -H "Authorization: Bearer $CLASSIFY_API_KEY"
Jobs typically complete in seconds per URL. Each result carries a diag object showing exactly what was extracted from the page.

Result statuses

StatusMeaning
classifiedRanked IAB 3.1 classifications with cosine distances; lower is stronger
unknown / no_matchFetched and embedded, but no labeled neighbor within threshold
unknown / insufficient_contentToo little extractable text, most commonly client-rendered JS shells
errorFetch or processing failure; reason names it
Classify returns insufficient_content rather than a low-confidence guess. The diag object shows what was read so you can verify.