SeoSync API

Programmatic access to SEO audits, keyword tracking, and reports.

REST APIJSON responsesBearer auth

Authentication

All API requests require a Bearer token. Generate API keys from your Settings page.

curl https://seosync.ca/api/v1/projects \
  -H "Authorization: Bearer sk_live_your_api_key_here"

Keep your API keys secret. Do not expose them in client-side code or public repositories. API keys inherit the permissions of your organization plan.

Rate Limits

PlanRequests/minMax Keys
Free105
Pro605
Enterprise1205

Endpoints

Projects

GET/api/v1/projects

List all projects in your organization.

// Response
{
  "projects": [
    {
      "id": "cmm...",
      "name": "My Website",
      "domain": "example.com",
      "createdAt": "2026-01-01T00:00:00Z",
      "_count": { "audits": 5, "keywords": 12, "competitors": 3 }
    }
  ]
}

Audits

GET/api/v1/projects/:projectId/audit

Get the latest audit for a project. Pass ?auditId=xxx for a specific audit.

// Response
{
  "audit": {
    "id": "cmm...",
    "overallScore": 78,
    "metaScore": 85,
    "contentScore": 72,
    "linksScore": 80,
    "technicalScore": 75,
    "performanceScore": 68,
    "pagesCrawled": 24,
    "status": "COMPLETED",
    "issues": [
      { "title": "Missing meta description", "severity": "WARNING", "category": "META" }
    ]
  }
}
POST/api/v1/projects/:projectId/audit

Trigger a new SEO audit. Returns 202 Accepted with a job ID.

// Response (202)
{
  "message": "Audit queued",
  "jobId": "abc123"
}

Keywords

GET/api/v1/projects/:projectId/keywords

List tracked keywords with latest ranking position.

// Response
{
  "keywords": [
    {
      "id": "cmm...",
      "term": "seo audit tool",
      "position": 5,
      "url": "https://example.com/seo",
      "lastChecked": "2026-03-15T07:00:00Z"
    }
  ]
}

Error Codes

StatusMeaning
401Invalid or missing API key
403Plan limit reached or insufficient permissions
404Resource not found
429Rate limit exceeded
500Internal server error

Quick Start

JavaScript / Node.js

const API_KEY = "sk_live_your_key";
const BASE = "https://seosync.ca/api/v1";

// List projects
const res = await fetch(`${BASE}/projects`, {
  headers: { Authorization: `Bearer ${API_KEY}` },
});
const { projects } = await res.json();

// Trigger audit
const audit = await fetch(`${BASE}/projects/${projects[0].id}/audit`, {
  method: "POST",
  headers: { Authorization: `Bearer ${API_KEY}` },
});
console.log(await audit.json()); // { message: "Audit queued", jobId: "..." }

Python

import requests

API_KEY = "sk_live_your_key"
BASE = "https://seosync.ca/api/v1"
headers = {"Authorization": f"Bearer {API_KEY}"}

# List projects
projects = requests.get(f"{BASE}/projects", headers=headers).json()["projects"]

# Get latest audit
audit = requests.get(
    f"{BASE}/projects/{projects[0]['id']}/audit", headers=headers
).json()
print(f"Score: {audit['audit']['overallScore']}")

cURL

# List projects
curl -H "Authorization: Bearer sk_live_your_key" \
  https://seosync.ca/api/v1/projects

# Trigger audit
curl -X POST -H "Authorization: Bearer sk_live_your_key" \
  https://seosync.ca/api/v1/projects/PROJECT_ID/audit
© 2026 TechSynergy Corp. — SeoSync API v1