GeoCites API
Check AI citation visibility programmatically. Build monitoring, reports, and integrations for SEO teams and AI agents.
Quick Start
Run a free scan with a single request. No payment required for open-source models.
curl -X POST https://geocites.dev/api/v1/scan \
-H "Authorization: Bearer gc_sk_your_key" \
-H "Content-Type: application/json" \
-d '{"domain":"progevita.com","keyword":"longevity clinic","location":"Valencia, Spain"}'Response includes overall score, per-model citation data, geographic radius analysis, and competitor rankings.
Authentication
All API requests require a valid API key sent via the Authorization header.
Authorization: Bearer gc_sk_your_keyAPI keys use the prefix gc_sk_. Keep your key secret -- do not expose it in client-side code.
Endpoints
/api/v1/scanRun a new AI citation scan. Returns full results synchronously (v1 -- async polling coming in v2).
Request Body
{
"domain": "progevita.com",
"keyword": "longevity clinic",
"location": "Valencia, Spain",
"models": ["gpt-5.4", "claude-opus", "gemini-pro"],
"keywordsPerRing": 10,
"queriesPerKeyword": 1
}Response 200
{
"scanId": "a1b2c3d4-...",
"status": "complete",
"cost": "$0.85",
"result": {
"domain": "progevita.com",
"keyword": "longevity clinic",
"overallScore": 42,
"models": [
{
"model": "gpt-5.4",
"modelLabel": "GPT-5.4",
"cited": true,
"score": 72,
"prominence": "secondary"
}
],
"radius": {
"rings": [...],
"topCompetitors": [...]
}
}
}/api/v1/scan/:idRetrieve a previously completed scan by ID.
Response 200
{
"scanId": "a1b2c3d4-...",
"status": "complete",
"result": { ... }
}/api/v1/modelsList available AI models with their costs. No authentication required.
Response 200
{
"free": [
{ "id": "llama", "name": "Llama 3.3 70B", "costPerQuery": 0 },
{ "id": "hermes", "name": "Hermes 3 405B", "costPerQuery": 0 },
{ "id": "gemma", "name": "Gemma 3 27B", "costPerQuery": 0 }
],
"pro": [
{ "id": "gpt-5.4", "name": "GPT-5.4", "costPerQuery": 0.008 },
{ "id": "claude", "name": "Claude Sonnet 4", "costPerQuery": 0.012 },
{ "id": "gemini", "name": "Gemini 2.5 Pro", "costPerQuery": 0.007 }
]
}Scan Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | Website domain to check (e.g. progevita.com) |
keyword | string | Yes | Target keyword or topic |
location | string | No | Location for geographic radius (e.g. Valencia, Spain) |
models | string[] | No | Pro models to use. Defaults to free models if omitted |
keywordsPerRing | number | No | Keywords per geographic ring (3-15, default: 3 free / 10 pro) |
queriesPerKeyword | number | No | Queries per keyword (1-3, default: 1) |
Available Models
Free Models (open-source)
llamahermesgemmamistralnemotronPro Models (paid)
gpt-5.4gpt-5claudeclaude-opusgeminiperplexitygrokCode Examples
curl -X POST https://geocites.dev/api/v1/scan \
-H "Authorization: Bearer gc_sk_your_key" \
-H "Content-Type: application/json" \
-d '{
"domain": "progevita.com",
"keyword": "longevity clinic",
"location": "Valencia, Spain"
}'Rate Limits
Free scans
10 / hour
Per API key
Pro scans
60 / hour
Per API key
Burst
5 concurrent
Max parallel requests
Rate limit headers (X-RateLimit-Remaining, X-RateLimit-Reset) are included in responses. Exceeding limits returns 429 Too Many Requests.
Pricing
| Plan | Price | Includes |
|---|---|---|
| Free scans | $0 | 5 open-source models, basic radius, 3 keywords/ring |
| Pro scan | From $0.45 | Choose models, up to 15 keywords/ring, full geographic radius |
| 100 credit pack | $15 (15% off) | 1 credit = 1 standard pro scan (3 models, 10 kw/ring) |
| Enterprise | Custom | Volume pricing, dedicated support, SLA |
Credit packs and payment integration coming soon. Free scans are available now.
Error Codes
| Status | Meaning |
|---|---|
200 | Success |
400 | Bad request -- missing or invalid parameters |
401 | Unauthorized -- invalid or missing API key |
404 | Not found -- scan ID does not exist |
429 | Rate limited -- too many requests |
500 | Server error -- something went wrong |
Questions? Need an API key?
Try GeoCites Free