Developer API

Read your AI data programmatically

The Unsourced Developer API lets you pull citation and bot activity data into your own dashboards, scripts, or reporting tools. Read-only, with a generous fair-use rate limit (600 requests/hour per account) to keep it fast for everyone.

Studio plan requiredREST · JSONRead-only

Base URL

https://unsourced.app/api

All endpoints are relative to this base. HTTPS only.

Authentication

All data endpoints require an API key. Keys are created in Settings → Developer API (Studio and Agency plans). Each key is shown once at creation — store it securely. Up to 5 active keys per account.

Pass your key in one of two ways:

Authorization header (recommended)

Authorization: Bearer unsk_your_api_key_here

X-Api-Key header

X-Api-Key: unsk_your_api_key_here

Key format: all keys start with unsk_ followed by 64 hex characters. Invalid or revoked keys return 401 api_key_required or 401 invalid_api_key. All endpoints share a fair-use limit of 600 requests/hour per account; exceeding it returns 429 with a Retry-After header.

Endpoints

GET
/developer/events

Recent AI bot detections for your account, sorted newest first. One record per bot per crawl event, so bot_name and total_hits always describe the same bot.

Query parameters

site_iduuidoptionalFilter to a single site. Omit to return events across all sites.
limitintegeroptionalNumber of records to return. Min 1, max 500. Default 50.

Response

[
  {
    "id":         "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "site_id":    "3fa85f64-5717-4562-b3fc-2c963f66afb7",
    "bot_name":   "GPTBot",
    "total_hits": 14,
    "page_url":   null,
    "created_at": "2025-05-20T09:14:00.000000+00:00"
  }
]

Example

curl -H "Authorization: Bearer unsk_your_key" \
  "https://unsourced.app/api/developer/events?limit=10"
GET
/developer/citations

Recent citation check results from your weekly and on-demand scans, sorted newest first. Each record is one AI assistant response for one prompt — showing whether your site was cited.

Query parameters

site_iduuidoptionalFilter to a single site. Omit for all sites.
cited_onlybooleanoptionalSet to true to return only records where your site was cited. Default false.
limitintegeroptionalNumber of records to return. Min 1, max 500. Default 50.

Response

[
  {
    "id":                 "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "site_id":            "3fa85f64-5717-4562-b3fc-2c963f66afb7",
    "provider":           "perplexity",
    "prompt":             "best tools for tracking AI citations",
    "cited":              true,
    "match_context":      "…Unsourced provides real-time monitoring…",
    "competitor_domains": ["ahrefs.com", "semrush.com"],
    "created_at":         "2025-05-20T08:00:00.000000+00:00"
  }
]

Example

curl -H "Authorization: Bearer unsk_your_key" \
  "https://unsourced.app/api/developer/citations?cited_only=true&limit=20"
GET
/developer/stats

Aggregate totals across all sites and all time for your account. Useful for a top-level summary in dashboards or reports.

Response

{
  "total_bot_hits":        1842,
  "total_citation_checks": 640,
  "total_citations_found": 112,
  "citation_rate_pct":     18
}

Example

curl -H "Authorization: Bearer unsk_your_key" \
  "https://unsourced.app/api/developer/stats"

Provider values

The provider field in citation records is one of:

anthropicClaude (Anthropic)
Training data
openaiChatGPT (OpenAI)
Training data
openai_searchChatGPT with web search
Live crawl
googleGemini (Google)
Training data
google_groundedGemini with Google Search
Live crawl
grokGrok (xAI)
Training data
metaMeta Llama (via Groq)
Training data
perplexityPerplexity
Live crawl

Some AI assistants fetch your page live while they answer, rather than relying on training data. When one of them reads your page during a check — confirmed by reverse DNS — and the answer reproduces your content, we mark that citation as a confirmed live crawl.

Error responses

401api_key_requiredNo API key was provided in the request.
401invalid_api_keyThe key does not exist or has been revoked.
402pro_requiredYour account is not on the Studio plan.
429Rate limit reached. Retry after the interval in the Retry-After header.

Ready to start building?

API keys are available on the Studio plan. Create a key in Settings → Developer API.