SEO Vendor APIDeveloper Referencev1
All systems operational
SEO Strategy Guidance

SEO Strategist

Get strategic SEO guidance for a URL and target keyword, computed and returned through an asynchronous strategy task.

POSThttps://ai.seovendor.co/api/seogptcompare/
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

FieldTypeRequiredDescription
actionstringoptional
createTask Create an SEO Strategist comparison task.getTaskStatus Get SEO Strategist task status.getResult Get SEO Strategist result.
urlstringrequiredTarget page URL, 4 to 300 characters.
kwstringrequiredSingle target keyword, 4 to 69 characters.
langintegeroptional
0 US English1 UK English2 Australian English3 Spanish4 Italian5 French6 German7 Portuguese8 Dutch9 Bulgarian10 Czech11 Danish12 Estonian13 Finnish
+26 more options
14 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
countryintegeroptional
0 United States1 Brazil2 Canada3 China4 Czech Republic5 France6 Germany7 Hong Kong8 India9 Indonesia10 Italy11 Israel12 Japan13 Netherlands
+33 more options
14 Poland15 Russia16 Saudi Arabia17 Singapore18 South Korea19 Spain20 United Kingdom21 United Arab Emirates22 Vietnam23 Peru24 Australia25 Mexico26 Colombia27 Argentina28 Chile29 Bolivia30 Portugal31 Belgium32 Switzerland33 Austria34 New Zealand35 Ireland36 Denmark37 Finland38 Sweden39 Norway40 Hungary41 Romania42 Greece43 Bulgaria44 Croatia45 Slovakia46 Estonia
brandstringoptionalBrand name.
task_idstringoptionalEncrypted task ID from createTask response. Required for getTaskStatus and getResult.
kstringrequiredAPI 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": "seogptcompare",
  "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
successboolean= true
applicationstring= "seogptcompare"
actionstring= "createTask"
dataobject
└─task_idstringEncrypted task identifier. Pass to getTaskStatus and getResult.
└─statusstringTask status. One of: pending, complete, error.
└─stagestringProcessing stage. One of: queued, processing, complete, error.
└─percent_completeintegerCompletion percentage, 0 to 100.
metaobject
└─request_idstring
└─duration_msinteger
└─upstream_http_codeinteger
errornull

successaction: getTaskStatus · HTTP 200

200 response example
{
  "success": true,
  "application": "seogptcompare",
  "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
successboolean= true
applicationstring= "seogptcompare"
actionstring= "getTaskStatus"
dataobject
└─task_idstringEncrypted task identifier. Pass to getTaskStatus and getResult.
└─statusstringTask status. One of: pending, complete, error.
└─stagestringProcessing stage. One of: queued, processing, complete, error.
└─percent_completeintegerCompletion percentage, 0 to 100.
metaobject
└─request_idstring
└─duration_msinteger
└─upstream_http_codeinteger
errornull

successaction: getResult · HTTP 200

200 response example
{
  "success": true,
  "application": "seogptcompare",
  "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",
    "keyword": "white label seo",
    "brand": "SEO Vendor",
    "created_at": "string",
    "result": {
      "5": {
        "strategy": "string",
        "contentdtr": []
      }
    }
  },
  "meta": {
    "request_id": "req_3f9a7c2e8b41",
    "duration_ms": 1284,
    "upstream_http_code": 200
  },
  "error": null
}
Response schema
successboolean= true
applicationstring= "seogptcompare"
actionstring= "getResult"
dataobject
└─task_idstringEncrypted task identifier.
└─readybooleanTrue when processing is complete and results are available, false when still in progress.
└─statusstringTask status. One of: pending, complete, error.
└─stagestringProcessing stage. One of: queued, processing, complete, error.
└─percent_completeintegerCompletion percentage, 0 to 100.
└─messagestringStatus message. Present when ready is false.
└─urlstringURL that was analyzed.
└─keywordstringKeyword used in comparison.
└─brandstringBrand name used in analysis.
└─created_atstringTask creation timestamp.
└─resultobjectSEO strategy comparison result. Present when ready is true.
└─5object
└─strategystringAI-generated SEO strategy text.
└─contentdtrarrayDetailed content analysis data.
metaobject
└─request_idstring
└─duration_msinteger
└─upstream_http_codeinteger
errornull

errorHTTP 400, 401, 502, 503, or 504

error response example
{
  "success": false,
  "application": "seogptcompare",
  "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/seogptcompare/definitions"
  }
}
Response schema
successboolean= false
applicationstring= "seogptcompare"
actionstring
datanull
metaobject
└─request_idstring
errorobject
└─codestringError code returned by the API.
└─messagestringHuman-readable error message.
└─fieldstringInput field associated with the error.
└─detailsarrayAdditional error details.
└─apidefinitionsstringPublic API definitions URL.
POST /api/seogptcompare/
curl -X POST "https://ai.seovendor.co/api/seogptcompare/" \
  -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/seogptcompare/");

$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/seogptcompare/", {
  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/seogptcompare/"

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.