SEO Vendor APIDeveloper Referencev1
All systems operational
Write SEO & GEO Articles

SEO GPT 2

Produce long-form SEO and GEO articles with control over content type, length, tone, and voice. Returned through an asynchronous task.

POSThttps://ai.seovendor.co/api/seogpt2/
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 GPT 2 content generation task.getTaskStatus Get SEO GPT 2 task status.getResult Get SEO GPT 2 generated content result.
TopicstringrequiredTopic or title, 12 to 200 characters.
KWstringoptionalKeyword text, up to 5 keywords each 4 to 70 characters, 300 characters max.
BrandstringoptionalBrand text, max 60 characters.
URLstringoptionalWebsite URL, max 200 characters.
NotesstringoptionalNotes or instructions, max 150 plain-text characters.
ContentTypeintegeroptional
0 On-Page Blog Article1 Off-Page Guest Article2 Webpage Content3 Landing Page4 Product Review5 Case Study6 White Paper7 How-To Guide8 Tutorial Content9 User Guide10 Opinion Piece11 E-Book12 Press Release
ContentLengthintegeroptional
0 5001 10002 12003 15004 17005 20006 2007 3008 7009 60010 250011 300012 350013 4000
+1 more options
14 5000
Languageintegeroptional
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
Toneintegeroptional
0 Professional1 Informative2 Engaging3 Witty4 Formal5 Assertive6 Conversational7 Inspirational8 Persuasive9 Humorous10 Educational11 Sincere12 Friendly13 Authoritative
+12 more options
14 Empathetic15 Enthusiastic16 Reflective17 Narrative18 Provocative19 Objective20 Candid21 Whimsical22 Matter-of-fact23 Inquisitive24 Reassuring25 Sarcastic
Personintegeroptional
0 First1 Second2 Third
WriterintegeroptionalWriter preset index.
Engineintegeroptional
0 Default Engine (Smart Writing)1 Alpha Engine (GPT-3.5-2) Legacy2 Beta Engine (GPT-3.5-3) Legacy3 Gamma Engine (GPT-4-1) Legacy4 Delta Engine (GPT-4-2) Legacy5 Epsilon Engine (GPT-4-3) Retired6 Zeta Engine (GPT-4-4) Retired7 Eta Engine (GPT-4-5) Retired8 Theta Engine (GPT-4-6) Retired9 Iota Engine (GPT-4-7) Retired10 Kappa Engine (GPT-4om-10) Internal11 Lambda Engine (GPT-o1-11) Deep Reasoning12 Mu Engine (GPT-4o-12) (BETA)13 o3 Engine (GPT-o3-13) Experimental
+40 more options
14 DeepSeek 3.215 DeepSeek R1 (BETA)16 Llama 4 Maverick17 Grok 3 (BETA)18 Claude Sonnet 419 Mu Engine: Smart Writing20 SearchGPT Preview21 Lambda Engine (GPT-o3-1) Deep Reasoning22 o4-mini23 Claude Opus 424 Gemini 2.525 Gemini 2.5 Pro26 GPT 4.1 Mini27 Rho Engine GPT-528 GPT-5 Mini29 GPT-5-Nano30 Grok 431 GPT Image32 Perplexity Sonar33 Perplexity Sonar Pro34 Grok 4 Fast35 Rho Engine GPT-5.136 Gemini 3 Pro37 Claude Sonnet 4.539 Rho Engine GPT-5.240 Grok 4.1 Fast41 ChatGPT 5.142 ChatGPT 5.243 Image 2.044 Image 1 Mini45 Gemini 3 Flash46 Gemini 3.1 Pro47 Claude Sonnet 4.648 Claude Haiku 4.549 GPT-4o Search50 Rho Engine GPT-5.451 GPT-5.5 (Beta)52 Grok 4.353 Deepseek v4 Pro54 Claude Opus 4.7
Pathwayintegeroptional
0 Paragraphs1 Page Segments2 Press Format3 Paragraphs (Reading Ease)4 Outline + Paragraphs5 Outline + Paragraphs (Reading Ease)6 GEO (Generative Engine Optimization)
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": "seogpt2",
  "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= "seogpt2"
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": "seogpt2",
  "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= "seogpt2"
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": "seogpt2",
  "action": "getResult",
  "data": {
    "task_id": "string",
    "ready": true,
    "status": "completed",
    "stage": "string",
    "percent_complete": 0,
    "message": "The kw field is required.",
    "article_html": "string",
    "topic": "string",
    "url": "https://seovendor.co",
    "keywords": "string",
    "brand": "SEO Vendor",
    "created_at": "string",
    "settings": {
      "content_type": "string",
      "content_length": "string",
      "language": "string",
      "tone": "string",
      "person": "string",
      "engine": "string",
      "pathway": "string"
    },
    "scores": {
      "visit_website": 0,
      "keyword": "white label seo",
      "brand": "SEO Vendor",
      "notes": 0
    }
  },
  "meta": {
    "request_id": "req_3f9a7c2e8b41",
    "duration_ms": 1284,
    "upstream_http_code": 200
  },
  "error": null
}
Response schema
successboolean= true
applicationstring= "seogpt2"
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.
└─article_htmlstringGenerated article content as HTML. Present when ready is true.
└─topicstringArticle topic used for generation.
└─urlstringWebsite URL used in generation.
└─keywordsstringKeywords used in generation.
└─brandstringBrand name used in generation.
└─created_atstringTask creation timestamp.
└─settingsobjectContent generation settings used. Present when ready is true.
└─content_typestringContent type label.
└─content_lengthstringContent length label.
└─languagestringLanguage label.
└─tonestringTone label.
└─personstringPerson/perspective label.
└─enginestringAI engine label.
└─pathwaystringContent pathway label.
└─scoresobjectContent quality scores 0 to 100. Present when ready is true.
└─visit_websiteintegerScore for intent to visit the website.
└─keywordintegerScore for keyword alignment.
└─brandintegerScore for brand alignment.
└─notesintegerScore for notes/instructions alignment.
metaobject
└─request_idstring
└─duration_msinteger
└─upstream_http_codeinteger
errornull

errorHTTP 400, 401, 502, 503, or 504

error response example
{
  "success": false,
  "application": "seogpt2",
  "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/seogpt2/definitions"
  }
}
Response schema
successboolean= false
applicationstring= "seogpt2"
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/seogpt2/
curl -X POST "https://ai.seovendor.co/api/seogpt2/" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
  "k": "[API KEY]",
  "action": "createTask",
  "Topic": "White Label SEO for Agencies",
  "URL": "https://seovendor.co",
  "Brand": "SEO Vendor"
}'
<?php
$ch = curl_init("https://ai.seovendor.co/api/seogpt2/");

$payload = [
    "k" => "[API KEY]",
    "action" => "createTask",
    "Topic" => "White Label SEO for Agencies",
    "URL" => "https://seovendor.co",
    "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/seogpt2/", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json"
  },
  body: JSON.stringify({
    k: "[API KEY]",
    action: "createTask",
    Topic: "White Label SEO for Agencies",
    URL: "https://seovendor.co",
    Brand: "SEO Vendor",
  })
});

const data = await response.json();
console.log(data);
import requests

url = "https://ai.seovendor.co/api/seogpt2/"

payload = {
    "k": "[API KEY]",
    "action": "createTask",
    "Topic": "White Label SEO for Agencies",
    "URL": "https://seovendor.co",
    "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.