Skip to main content
Developers

SERPHub REST API

35+ endpoints. JSON responses. Sanctum token auth. Pull your SEO data into any tool, dashboard, or workflow.

Quick Start

Generate a Sanctum API token from your account settings, then include it as a Bearer token on every request.

  1. 1 Log in → Account Settings → Security → API Tokens → Generate token
  2. 2 Include the token as Authorization: Bearer YOUR_TOKEN on each request
  3. 3 Base URL: https://dev.serphub.io/api/v1
curl
curl https://dev.serphub.io/api/v1/sites \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Accept: application/json"
Response (200)
{
  "data": [
    {
      "id": 42,
      "domain": "example.com",
      "health_score": 91,
      "last_audit_at": "2026-05-20T08:15:00Z"
    }
  ]
}

API Reference

All endpoints return JSON. All write operations require a POST body as JSON with Content-Type: application/json.

Sites

GET /sites
GET /sites/{id}
POST /sites

Audits

GET /sites/{id}/audit
POST /sites/{id}/audit
GET /sites/{id}/audit/progress
GET /sites/{id}/issues

Keywords

GET /sites/{id}/keywords
GET /sites/{id}/pages
GET /sites/{id}/cannibalization
GET /sites/{id}/search-intent

Backlinks

GET /sites/{id}/backlinks
GET /sites/{id}/internal-links
GET /sites/{id}/content-decay

AI Mentions

GET /sites/{id}/aeo
POST /sites/{id}/ai/chat

Competitors

GET /sites/{id}/competitors
GET /sites/{id}/visibility
GET /sites/{id}/search-overview

Authentication & Rate Limits

Bearer Token (Sanctum)

All API requests must include a valid Sanctum personal access token. Generate tokens in Account → Security → API Tokens. Tokens do not expire but can be revoked at any time.

Rate Limits

API access is available on plans with an API quota — Pro, Agency and Enterprise.

Plan Requests/min Calls/month
Pro601,000
Agency6010,000
EnterpriseCustomCustom

Error Responses

The API uses standard HTTP status codes. Error responses include a JSON body with a message field. 401 = invalid token, 403 = forbidden, 422 = validation error, 429 = rate limit exceeded.

Error Example

HTTP/1.1 422
{
  "message": "Validation error",
  "errors": {
    "domain": [
      "The domain field is required."
    ]
  }
}

Ready to integrate?

API access is available on the Pro plan and above. Sign up to get started.