SiteAssets SiteAssets
Resources API

REST API.

Same engine as the website, reachable as HTTP. Use it from CI, cron, serverless or your editor.

§01

Authentication

Send your API key as a Bearer token. Keys are created in the dashboard and prefixed with sk_live_.

http
Authorization: Bearer sk_live_xxxxxxxxxxxxxxxx
§02

Check a URL

Returns the same structured report that powers the website.

http
GET /api/v1/og/check?url=https://example.com

cURL

bash
curl "https://siteassets.dev/api/v1/og/check?url=https://example.com" \
  -H "Authorization: Bearer sk_live_REPLACE_ME"

JavaScript

js
const res = await fetch('https://siteassets.dev/api/v1/og/check?url=https://example.com', {
  headers: { Authorization: `Bearer ${process.env.SITEASSETS_API_KEY}` }
});
const report = await res.json();
console.log(report.score);

Python

py
import os, json, requests

res = requests.get(
    'https://siteassets.dev/api/v1/og/check',
    params={'url': 'https://example.com'},
    headers={'Authorization': f"Bearer {os.environ['SITEASSETS_KEY']}"},
    timeout=10,
)
print(res.json()['score'])
§02b

Audit favicons

Inspect the favicon set of a public URL — HTML icons, /favicon.ico, apple-touch-icon, Web App Manifest and Safari mask-icon. The same check that powers /checker/favicon, callable from anywhere.

http
GET /api/v1/favicon/check?url=https://example.com

Response includes assets, manifest, issues and checks.

json
{
  "url": "https://example.com",
  "finalUrl": "https://example.com",
  "score": 92,
  "assets": [
    { "kind": "icon-html", "url": "https://example.com/favicon.svg",
      "declared": { "rel": "icon", "type": "image/svg+xml" },
      "fetch": { "status": 200, "contentType": "image/svg+xml",
                  "width": null, "height": null, "hasAlpha": null, "https": true } }
  ],
  "manifest": {
    "found": true, "name": "Example",
    "iconCount": 2, "has192": true, "has512": true, "hasMaskable": false
  },
  "issues": [
    { "id": "manifest-maskable", "severity": "warning", "category": "favicon",
      "title": "No maskable icon in the manifest", "fixCode": "..." }
  ],
  "checks": [{ "id": "favicon-present", "weight": 15, "earned": 15, "status": "pass" }]
}
§03

Response

json
{
  "url": "https://example.com",
  "finalUrl": "https://example.com",
  "score": 92,
  "title": "Example Domain",
  "description": "...",
  "canonical": "https://example.com",
  "og": { "title": "...", "description": "...", "image": "...", "url": "...", "type": "...", "siteName": "..." },
  "twitter": { "card": "summary_large_image", ... },
  "image": { "url": "...", "width": 1200, "height": 630, "https": true, "loads": true },
  "issues": [{ "id": "og-title", "severity": "warning", "category": "og", "title": "...", ... }],
  "checks": [{ "id": "og-title", "label": "...", "category": "og", "weight": 10, "earned": 10, "status": "pass" }]
}
§04

Bulk OG Generation

Generate OG images for multiple pages at once. Parse sitemaps, analyze existing meta tags, and batch generate consistent social images.

Parse Sitemap

http
POST /api/v1/sitemap/parse

Extract all page URLs from a sitemap.

json
{ "url": "https://example.com/sitemap.xml" }

Analyze Existing OG Tags

http
POST /api/v1/bulk/analyze

Check which pages already have OG images.

json
{ "urls": ["https://example.com/page1", "https://example.com/page2"] }

Generate OG Image

http
POST /api/v1/bulk/generate

Generate OG image for a single URL.

json
{ "url": "https://example.com/page1", "template": "minimal" }

Download as ZIP

http
POST /api/v1/bulk/download

Download multiple OG images as a ZIP file.

json
{ "urls": ["https://siteassets.dev/og/abc.png", "https://siteassets.dev/og/def.png"] }
§05

Errors & limits

  • 400 — invalid URL, blocked host, non-HTML response.
  • 401 — missing or revoked API key.
  • 403 — bulk operations require Pro plan.
  • 429 — rate limit exceeded. The Retry-After header tells you when to retry.
  • 502 — upstream URL returned 5xx, was a redirect loop, or timed out.