REST API + WEBHOOKS

The SEO API.

Call the full content pipeline over REST. Keyword research, generation, audits, and native publishing, all behind eight endpoints. Bearer key auth, async 202 plus job polling, signed webhooks. Live in production today.

LIVE · /API/V1 · BEARER KEY AUTH
REQUEST · POST
$ curl https://www.theseoagent.ai/api/v1/
agents/keyword-research \
-H "Authorization: Bearer sk_live_***" \
-H "Content-Type: application/json" \
-d '{ "project_id": "a1b2c3d4-..." }'
RESPONSE202 ACCEPTED
{
"job_id": "a1b2c3d4-5e6f-7a8b-9c0d-1e2f3a4b5c6d",
"status": "queued",
"poll_url": "/api/v1/jobs/a1b2c3d4-..."
}
BY THE SEO AGENT TEAMUPDATED 2026-06-144 MIN READ
TL;DR

What is the SEO Agent API?

It is a live REST API that exposes the full SEO content pipeline over HTTP. The base URL is https://www.theseoagent.ai/api/v1, authentication is a bearer key you mint in the app, and there are eight endpoints: projects, articles, and jobs for reading state, plus four agents (generate, publish, keyword-research, audit) for doing work. Long jobs return a 202 with a job_id you poll, and two signed webhook events (article.published, audit.completed) push completions to your endpoint. Everything is documented in the public API docs.

8ENDPOINTSProjects, articles, jobs, four agents
202ASYNC BY DEFAULTSubmit a job, poll for the result
2WEBHOOK EVENTSarticle.published, audit.completed
WHAT MOST TOOLS SHIP

A bare webhook and a shrug.

Most SEO platforms call themselves "API-first" and then hand you one outbound webhook that fires when a draft is ready. You cannot trigger work, you cannot read state, and you cannot wire it into a real system. The pipeline stays locked inside their dashboard.

  • No way to start a job from your own code
  • No read endpoints for projects, articles, or run status
  • Unsigned webhooks you cannot verify
  • Per-seat dashboard access instead of programmatic access
  • No keyword, audit, or publish endpoints, only a content blob
WHAT THE SEO AGENT EXPOSES

The whole pipeline, over REST.

Every step the dashboard runs is a call you can make yourself. Mint a key, hit an endpoint, get a job back, poll it, and let a signed webhook tell your system when the work lands. The API is the product, not a bolt-on.

  • Trigger keyword research, generation, audits, and publishing
  • Read projects, articles, and job status with GET endpoints
  • Async 202 plus a poll URL, no request held open for minutes
  • Webhooks signed so you can verify they came from us
  • One flat plan, no per-call metering on top
WHAT THE API ACTUALLY DOES

Four reasons this is an API, not a bare webhook.

EIGHT REAL ENDPOINTS

Read state and trigger work, not just receive a blob.

The surface covers the whole pipeline: projects, articles, and jobs for reading state, plus four agent endpoints for doing work. The agents/keyword-research call returns live monthly volume and difficulty, and agents/generate runs the same fact-checked drafting the SEO automation loop uses. Every parameter and response shape is documented in the API reference.

PROJECTS · ARTICLES · JOBS · 4 AGENTS
ENDPOINT MAP · 16:9
ASYNC, NOT BLOCKING

Long jobs return 202 and a poll URL, never a hung request.

A full article takes minutes, so the API never holds a connection open that long. Agent calls accept your payload, return 202 Accepted with a job_id, and you poll /api/v1/jobs/{id} for the result. No timeouts, no retries against a half-finished run. If you would rather not poll at all, the same job can notify you through a webhook when it finishes.

SUBMIT · POLL · OR GET PINGED
JOB LIFECYCLE · 16:9
SIGNED WEBHOOKS

Two events, both verifiable, pushed to your endpoint.

Register a URL and we POST article.published when a draft ships to a connected CMS and audit.completed when a site audit finishes. Each payload carries a signature so your handler can confirm it came from us before acting. That is the difference between a real integration and a fire-hose you have to trust blindly. Pair it with the native WordPress publishing path and you get the publish event the moment the post goes live.

ARTICLE.PUBLISHED · AUDIT.COMPLETED
WEBHOOK SIGNATURE · 16:9
NO PER-CALL METER

Bundled into the flat plan, not billed by the request.

API access ships with the subscription. There is no separate per-call price, no token surcharge stacked on top, and no enterprise tier gating the endpoints. You build against the same pipeline a dashboard user gets, at the same flat price. If you would rather drive the agent from an editor or workflow tool instead of raw HTTP, the MCP server and n8n nodes wrap these same endpoints.

INCLUDED IN THE SUBSCRIPTION
FLAT PRICING · 16:9
HOW TO CONNECT

Key, call, poll, subscribe.

01MINT A KEY

Open /settings/api-keys in the app and create a bearer key. It looks like sk_live_*** and goes in the Authorization header. Rotate or revoke it any time. No OAuth dance for server-to-server calls.

02CALL AN ENDPOINT

POST to https://www.theseoagent.ai/api/v1/agents/keyword-research (or generate, audit, publish) with a JSON body. Long-running agents return 202 and a job_id immediately instead of holding the connection open.

03POLL THE JOB

GET /api/v1/jobs/{job_id} until status reaches a terminal value (succeeded, failed, or canceled), then read the result off the same envelope. The articles and projects endpoints let you list and fetch everything the run produced.

04SUBSCRIBE A WEBHOOK

Register an endpoint and we POST article.published and audit.completed events as they happen, each signed so you can verify it. Wire the event straight into your CMS, your Slack, or your own queue.

VS A RECEIVE-ONLY WEBHOOK

What a real SEO API gives you.

FEATURETHE AGENTEVERYONE ELSE
Trigger work from your codeFour agent endpointsReceive-only webhook
Read endpoints (projects, articles, jobs)
Long-job handling202 + poll URLHung request or none
Signed, verifiable webhooks
Keyword, audit, and publish endpointsAll exposedContent only
Per-call billingNone, flat planMetered or seat-gated
QUESTIONS

What developers ask before wiring it in.

Missing something? Ask us directly.

Q.01What is the base URL and how do I authenticate?+

The base URL is https://www.theseoagent.ai/api/v1. Authentication is a bearer key in the Authorization header. Mint the key inside the app at /settings/api-keys, then send it as Authorization: Bearer sk_live_... on every request. There is no OAuth flow required for server-to-server calls.

Q.02Which endpoints does the API expose?+

Eight: projects, articles, and jobs for reading state, plus four agent endpoints for doing work (generate, publish, keyword-research, audit). The keyword-research endpoint returns live monthly volume and difficulty. The generate endpoint runs the same fact-checked drafting and quality gate the dashboard uses. Full request and response shapes are documented in the API reference.

Q.03Why do some calls return 202 instead of the result?+

A full article or audit takes minutes, so the API does not hold a connection open that long. Agent calls return 202 Accepted with a job_id, and you poll /api/v1/jobs/{job_id} until status is terminal (succeeded, failed, or canceled), then read the result off the same envelope. Short reads like listing articles return their data directly.

Q.04What webhook events can I subscribe to?+

Two today: article.published fires when a draft ships to a connected CMS, and audit.completed fires when a site audit finishes. Each payload carries a signature so your handler can verify it came from us before acting on it. You register the endpoint URL once and we POST events as they happen.

Q.05Is the API metered or billed per call?+

No. API access is bundled into the flat subscription. There is no per-call price, no token surcharge, and no separate enterprise tier to unlock the endpoints. You build against the same pipeline a dashboard user gets at the same price.

Q.06Can I use this for keyword research or content generation only?+

Yes. The endpoints are independent. You can call agents/keyword-research for a keyword API, agents/generate for a content generation API, agents/audit for site audits, or agents/publish to push a finished article to a connected CMS. Use only the parts you need.

Q.07How do I handle a job that is still running?+

Poll GET /api/v1/jobs/{job_id} on an interval and check the status field. While it reads queued or running, keep polling. Once it reaches a terminal status (succeeded, failed, or canceled), the result is on the same response. If you would rather not poll, subscribe to the matching webhook event and we push the completion to you instead.

Q.08Is the API stable enough to build on?+

Yes. It is live in production and versioned under /api/v1, so the contract will not change underneath you within a major version. The reference documents every endpoint, parameter, status code, and webhook payload. Breaking changes would ship under a new version path.

BUILD ON THE PIPELINE.

Mint a key and ship your first call this week.

Three days for a dollar. Create a bearer key, POST a keyword to the research agent, watch the job come back. Cancel in one click if it is not for you.

LIVE API · CANCEL IN ONE CLICK