AtlasSchema API
Check structured data from your own code
The API behind the AtlasSchema WordPress connector. Check any page’s schema.org structured data against Google’s rich result rules, or send the graphs your site prints and keep them watched. One key per website. Building structured data in PHP or JavaScript? The SDK wraps this API and also builds and checks offline.
curl -X POST "https://api.atlasschema.com/v1/check" \ -H "Authorization: Bearer $ATLASSCHEMA_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com/pricing/"}'
Quick start
From sign-up to your first check
Add your website
Sign up free and add the website’s address in the dashboard. The first full check starts on its own.
Create a key
On the website’s page, open Connect and create a key (as_live_…). It is shown once: keep it on your server, never in browser code.
Call the API
Check a page with POST /v1/check, or send the pages your site prints with POST /v1/pages. Each page checked counts toward your plan’s monthly pages.
const res = await fetch('https://api.atlasschema.com/v1/check', { method: 'POST', headers: { Authorization: `Bearer ${process.env.ATLASSCHEMA_API_KEY}`, 'Content-Type': 'application/json', }, body: JSON.stringify({ url: 'https://example.com/pricing/' }), }); const page = await res.json(); if (!res.ok) throw new Error(page.error.message); console.log(page.status, page.types, page.errors);
$response = wp_remote_post( 'https://api.atlasschema.com/v1/check', array( 'headers' => array( 'Authorization' => 'Bearer ' . getenv( 'ATLASSCHEMA_API_KEY' ), 'Content-Type' => 'application/json', ), 'body' => wp_json_encode( array( 'url' => 'https://example.com/pricing/' ) ), 'timeout' => 30, ) ); $page = json_decode( wp_remote_retrieve_body( $response ), true );
import os, requests res = requests.post( "https://api.atlasschema.com/v1/check", headers={"Authorization": f"Bearer {os.environ['ATLASSCHEMA_API_KEY']}"}, json={"url": "https://example.com/pricing/"}, timeout=30, ) page = res.json() res.raise_for_status() print(page["status"], page["types"])
curl -X POST "https://api.atlasschema.com/v1/check" \ -H "Authorization: Bearer $ATLASSCHEMA_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "https://example.com/pricing/"}'
Reference
Endpoints
Base address https://api.atlasschema.com. Send your key as Authorization: Bearer as_live_…. Every error is {"error": {"code", "message"}}.
| Request | What it does |
|---|---|
GET /v1/site | The key’s website: name, address, score (0–100), how many pages are valid, have warnings or errors, the dashboard link, and this month’s usage. Free. |
POST /v1/pages | Send 1–50 pages as { "source", "pages": [{ "url", "title", "graph": [nodes] }] }. Each is checked and kept (with its history on paid plans). Answers { "results": [{ url, status, errors, warnings }] }. One page each. |
POST /v1/check | Check one address now: { "url" } → status, types, errors and warnings with their fixes, sources and the graph. Stores nothing. One page. |
GET /v1/usage | Your plan, pages checked this month, what is left and when it resets. |
Only your own website
Pages sent to
/v1/pagesmust be on the key’s website (wrong_siteotherwise).Never billed for a refusal
Bad input, a wrong site or a used-up allowance is refused before anything is counted. Each billed answer carries
X-AtlasSchema-Pages.Public addresses only
/v1/checkreads the page from our servers asAtlasSchemaBot/1.0and refuses private and local networks.Language aware
Give the WebPage node an
inLanguageand multilingual pages are grouped by language in the dashboard.
Errors
Error codes
| Code | Status | Meaning |
|---|---|---|
missing_api_key, invalid_api_key | 401 | No key, or an unknown or removed key (deleting a website removes its keys). |
suspended | 403 | The website or account is suspended. |
feature_not_in_plan | 403 | The plan does not include checks. |
quota_exceeded | 429 | This month’s pages are used up; the answer includes your usage. |
rate_limited | 429 | Too many requests; wait for Retry-After. |
server_busy | 503 | At capacity right now; try again after Retry-After. Never billed. |
invalid_pages, invalid_url | 400 | The body is not what the endpoint expects; the message names the field. |
wrong_site | 400 | A page is not on the key’s website. |
no_site_url | 400 | The key belongs to a project without a website address. |
limit_pages | 413 | The website already holds the most pages it can keep. |
fetch_failed, not_html | 400 | The address could not be read, or is not a web page. |
Using WordPress?
No code needed: the free Atlas Schema plugin uses this API for you. Paste your key in Schema → Validate.