Generative Engine Optimization Audit
GEO Audit
Audit how a URL performs across generative engines and AI answers. Returns a structured GEO report through an asynchronous scan.
POSThttps://ai.seovendor.co/api/geogptaudit/
Authenticate every request by passing your secret key as
k in the JSON body. Requests are POST with Content-Type: application/json.Asynchronous endpoint. Call
createTask to start a job, poll getTaskStatus with the returned task_id until it reports complete, then fetch the result with getResult. Each stage is documented under Response below.01Request parameters
| Field | Type | Required | Description |
|---|---|---|---|
| action | string | optional | createTask Create a GEO Audit task.getTaskStatus Get GEO Audit task status.getResult Get GEO Audit result. |
| URL | string | required | Domain URL for full-site audit, or URL with path for single-page audit. |
| kw | string | required | Target entities, comma separated, 1 to 5 entries. |
| target_location | string | optional | Target geographic location, max 120 characters. |
| scantype | integer | optional | 0 Deep scan — all pages (default)1 Quick scan — top pages only |
| lang | integer | optional | 0 US English1 UK English2 Australian English3 Spanish4 Italian5 French6 German7 Portuguese8 Dutch9 Bulgarian10 Czech11 Danish12 Estonian13 Finnish +26 more options14 Greek15 Hungarian16 Polish17 Norwegian18 Romanian19 Swedish20 Brazilian Portuguese21 Mexican Spanish22 Colombian Spanish23 Argentine Spanish24 Peruvian Spanish25 Canadian English26 Chilean Spanish27 Bolivian Spanish28 Catalan29 Austrian German30 Canadian French31 Belgian Dutch (Flemish)32 Belgian French33 Scottish English34 Slovak35 New Zealand English36 Irish English37 Swiss German38 Croatian39 Turkish |
| brand | string | optional | Brand name. Defaults to first entity when not provided. |
| task_id | string | optional | Encrypted task ID from createTask response. Required for getTaskStatus and getResult. |
| k | string | required | API key sent as k in query string, POST body, JSON body; api_key is also accepted, 11 to 120 characters. |
02Response
Every response uses the standard envelope (success, application, action, data, meta, error). The data field for this endpoint is documented below.
successaction: createTask · HTTP 200
200 response example
{
"success": true,
"application": "geogptaudit",
"action": "createTask",
"data": {
"task_id": "string",
"status": "completed",
"stage": "string",
"percent_complete": 0
},
"meta": {
"request_id": "req_3f9a7c2e8b41",
"duration_ms": 1284,
"upstream_http_code": 200
},
"error": null
}Response schema
success
application
action
data
└─task_idEncrypted task identifier. Pass to getTaskStatus and getResult.
└─statusTask status. One of: pending, complete, error.
└─stageProcessing stage. One of: queued, processing, complete, error.
└─percent_completeCompletion percentage, 0 to 100.
meta
└─request_id
└─duration_ms
└─upstream_http_code
error
successaction: getTaskStatus · HTTP 200
200 response example
{
"success": true,
"application": "geogptaudit",
"action": "getTaskStatus",
"data": {
"task_id": "string",
"status": "completed",
"stage": "string",
"percent_complete": 0
},
"meta": {
"request_id": "req_3f9a7c2e8b41",
"duration_ms": 1284,
"upstream_http_code": 200
},
"error": null
}Response schema
success
application
action
data
└─task_idEncrypted task identifier. Pass to getTaskStatus and getResult.
└─statusTask status. One of: pending, complete, error.
└─stageProcessing stage. One of: queued, processing, complete, error.
└─percent_completeCompletion percentage, 0 to 100.
meta
└─request_id
└─duration_ms
└─upstream_http_code
error
successaction: getResult · HTTP 200
200 response example
{
"success": true,
"application": "geogptaudit",
"action": "getResult",
"data": {
"task_id": "string",
"ready": true,
"status": "completed",
"stage": "string",
"percent_complete": 0,
"message": "The kw field is required.",
"url": "https://seovendor.co",
"brand": "SEO Vendor",
"created_at": "string",
"result": {
"modules": {}
}
},
"meta": {
"request_id": "req_3f9a7c2e8b41",
"duration_ms": 1284,
"upstream_http_code": 200
},
"error": null
}Response schema
success
application
action
data
└─task_idEncrypted task identifier.
└─readyTrue when processing is complete and results are available, false when still in progress.
└─statusTask status. One of: pending, complete, error.
└─stageProcessing stage. One of: queued, processing, complete, error.
└─percent_completeCompletion percentage, 0 to 100.
└─messageStatus message. Present when ready is false.
└─urlURL or domain that was audited.
└─brandBrand name used in the audit.
└─created_atTask creation timestamp.
└─resultGEO audit modules output. Present when ready is true.
└─modulesAudit module results keyed by letter A through K. C: pages, page_upgrades, entity_mappings, schema_remediation, content_prompt_map. D: checklist, consistency_risks. E: citation_targets, competitor_patterns. F: quick_wins, roadmap, prompt_map, citation_plan, retest_plan, schema_implementation_tickets. G: intent_canonical_map, intent_gap_actions. H: artifact_signals. I: profile_checklist. J: misrepresentation_risks, multimodal_checks. K: recommendation_readiness, review_sentiment_themes, reputation_actions.
meta
└─request_id
└─duration_ms
└─upstream_http_code
error
errorHTTP 400, 401, 502, 503, or 504
error response example
{
"success": false,
"application": "geogptaudit",
"action": "string",
"data": null,
"meta": {
"request_id": "req_3f9a7c2e8b41"
},
"error": {
"code": "invalid_request",
"message": "The kw field is required.",
"field": "kw",
"details": [],
"apidefinitions": "https://ai.seovendor.co/api/geogptaudit/definitions"
}
}Response schema
success
application
action
data
meta
└─request_id
error
└─codeError code returned by the API.
└─messageHuman-readable error message.
└─fieldInput field associated with the error.
└─detailsAdditional error details.
└─apidefinitionsPublic API definitions URL.
POST /api/geogptaudit/
curl -X POST "https://ai.seovendor.co/api/geogptaudit/" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-d '{
"k": "[API KEY]",
"action": "createTask",
"URL": "https://seovendor.co",
"kw": "white label seo",
"brand": "SEO Vendor"
}'<?php
$ch = curl_init("https://ai.seovendor.co/api/geogptaudit/");
$payload = [
"k" => "[API KEY]",
"action" => "createTask",
"URL" => "https://seovendor.co",
"kw" => "white label seo",
"brand" => "SEO Vendor",
];
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Accept: application/json",
],
CURLOPT_POSTFIELDS => json_encode($payload),
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);const response = await fetch("https://ai.seovendor.co/api/geogptaudit/", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify({
k: "[API KEY]",
action: "createTask",
URL: "https://seovendor.co",
kw: "white label seo",
brand: "SEO Vendor",
})
});
const data = await response.json();
console.log(data);import requests
url = "https://ai.seovendor.co/api/geogptaudit/"
payload = {
"k": "[API KEY]",
"action": "createTask",
"URL": "https://seovendor.co",
"kw": "white label seo",
"brand": "SEO Vendor",
}
headers = {
"Content-Type": "application/json",
"Accept": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
data = response.json()
print(data)SEO Vendor API
Base URL
https://ai.seovendor.co/api · All requests are POST · JSON in, JSON out · © 2026 SEO Vendor. Built for agencies since 2004.