Developers

API Documentation

Pull approved JSON-LD and structured page-rewrite components into AEM or any CMS. Same key, same URL lookup, two products.

External API v1.0.0 Base https://satelliteai.io/api/external
Overview

What this API does

The External API is a read/write integration for systems that already have a SatelliteAI account. It does not use OAuth or a Bearer /v1 catalog. Requests are POST JSON to /api/external/... with an API key header.

APIEndpointsPurpose
Schema /get-schema, /json-schema-from-aem Submit and retrieve approved JSON-LD for a page URL
Rewrite Extract /get-rewrite-component, /get-rewrite Pull typed rewrite pieces (hero, FAQ, page properties, related) for AEM
Rewrite Extract does not generate a rewrite. If rewrite_found is false, run Page Rewrite in SatelliteAI, then retry. Schema generation is a separate product (/json-schema-from-aem).
Authentication

API key and user email

Every request needs both:

  • Header X-Api-Key — issued for your integration (same key as Schema)
  • Body user_email (or submitter/approver emails on schema submit) — a SatelliteAI user with access to the site that owns the URL
HTTP headers
X-Api-Key: YOUR_API_KEY
Content-Type: application/json

Ask your SatelliteAI admin for a key. Do not put the key in client-side browser code that ships to anonymous visitors.

HTTP

Errors and empty reads

Missing schema or rewrite is 200 with a found flag set to false. That is an empty read, not a failure. Auth and validation problems use 4xx.

HTTPWhen
401Missing X-Api-Key
403Invalid API key
400Missing fields, bad URL scheme, unknown component, bad include
404Unknown email, or the user cannot access the site
200 + schema_found: falseNo schema for that URL
200 + rewrite_found: falseNo rewrite for that URL
200 + component_found: falseRewrite exists; that component does not
500Server or storage failure
Schema

POST/get-schema

Retrieve approved production JSON-LD for a page. Optional language filters schema language.

Request

JSON
{
  "url": "https://www.example.com/page",
  "user_email": "author@company.com"
}

Found

200
{
  "status": "success",
  "url": "https://www.example.com/page",
  "schema_found": true,
  "schema_data": {
    "result": [
      {
        "@context": "https://schema.org",
        "@type": "WebPage",
        "name": "Page title",
        "description": "Page description"
      }
    ]
  },
  "schema_status": "approved",
  "site_id": 123,
  "site_name": "Example Site"
}

Not found

200
{
  "status": "success",
  "schema_found": false,
  "message": "Schema has not been created for this URL. Please click Generate Schema."
}
Schema

POST/json-schema-from-aem

Queue schema generation for a URL. Submitter and approver emails must exist in SatelliteAI.

JSON
{
  "url": "https://www.example.com/page",
  "submitter_email": "author@company.com",
  "approver_email": "manager@company.com",
  "source": "aem"
}
Rewrite Extract

POST/get-rewrite-component

One CMS field. component is required. Responses always use the canonical name. Aliases are accepted on input (qafaq, titlepage_properties).

Request

JSON
{
  "url": "https://www.thermofisher.com/bindingsite/us/en/clinical-applications/monoclonal-gammopathies.html",
  "user_email": "author@company.com",
  "component": "faq"
}

Optional: rewrite_id pins a specific rewrite. language is echoed only.

Found

200
{
  "status": "success",
  "rewrite_found": true,
  "component_found": true,
  "component": "faq",
  "payload": {
    "heading": "Frequently Asked Questions About Monoclonal Gammopathies",
    "heading_tag": "h2",
    "items": [
      {
        "question": "What are monoclonal gammopathies?",
        "answer": "Monoclonal gammopathies are disorders caused by clonal plasma cells that produce abnormal monoclonal immunoglobulins (M-proteins)."
      }
    ],
    "placement": "before_related"
  },
  "derived": false,
  "rewrite_status": "draft",
  "validation_passed": true
}

Hero (wrapper)

component: hero
{
  "payload": {
    "h1": "Monoclonal Gammopathies: Types, Diagnosis, and Monitoring",
    "aeo_summary": "Monoclonal gammopathies are a group of plasma cell disorders...",
    "value_proposition": {
      "text": "Monoclonal gammopathies are a group of plasma cell disorders characterized by abnormal production of monoclonal immunoglobulins (M-proteins).",
      "word_count": 17
    }
  },
  "derived": true
}

Missing component

cta is in the catalog but is not guessed. Older rewrites often return this until the page is re-run.

200
{
  "status": "success",
  "rewrite_found": true,
  "component_found": false,
  "component": "cta",
  "message": "This rewrite has no cta component.",
  "components_present": ["h1", "aeo_summary", "faq", "hero", "page_properties"]
}
Rewrite Extract

POST/get-rewrite

Every present component. Use include to skip large payloads (assembled, semantic, polished).

JSON
{
  "url": "https://www.thermofisher.com/bindingsite/us/en/clinical-applications/monoclonal-gammopathies.html",
  "user_email": "author@company.com",
  "include": ["hero", "faq", "page_properties", "related_articles"]
}

components_present is the full inventory. components is the requested subset (or everything present if you omit include). Absent names are omitted, not null.

Rewrite Extract

Component catalog

Canonical names are lowercase snake_case. FAQ public shape is always items. title maps to page_properties, not h1. table and comparison_table are different components.

AEM dialogComponentJSON path
Page Propertiespage_propertiespayload.title, payload.meta_description
Hero / Teaserheropayload.h1, aeo_summary, value_proposition, cta
Hero abstractaeo_summarypayload.text
Page H1h1payload.text
Hero buttonctapayload.label, payload.url
Highlightskey_takeawayspayload.items[]
On this pageoutlinepayload.items[]
Title + Textsection_leadspayload.items[]
FAQ accordionfaqpayload.items[]
FAQ JSON-LDfaqpage_schemaFAQPage graph
Comparison tablecomparison_tablecolumns, rows
Specs tabletablecolumns, rows
How-tohowtopayload.items[]
Related / see alsorelated_articlespayload.items[]
Downloads / IFUsdownloadspayload.items[]
Reviewed byattributionname, credentials, date, text
Entityentitypayload.entity

Also in the catalog: value_proposition, key_topics, statistics, callout, definition, benefits, clinical_applications, howto_schema, assembled, semantic, polished.

related_articles keeps every link. downloads is the file subset. The same PDF can appear in both. derived: true means the field was built from other rewrite content (typical for hero, outline, and page_properties on existing rewrites).

Rewrite Extract

Status flags

FieldMeaning
rewrite_foundA rewrite exists for this URL and this user can see it
component_foundThat rewrite has a payload for the requested name
rewrite_statusAlmost always draft. That still means the job finished
derivedBuilt from other fields vs a typed writer block
url_matchexact or normalized (host, slash, or scheme fold)
components_presentInventory of canonical names on this rewrite
Guides

cURL and JavaScript

Get FAQ

bash
curl -X POST "https://satelliteai.io/api/external/get-rewrite-component" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d "{
    \"url\": \"https://www.example.com/page\",
    \"user_email\": \"author@company.com\",
    \"component\": \"faq\"
  }"

JavaScript helper

javascript
const BASE = 'https://satelliteai.io/api/external';

async function getRewriteComponent(url, userEmail, component) {
  const res = await fetch(`${BASE}/get-rewrite-component`, {
    method: 'POST',
    headers: {
      'X-Api-Key': 'YOUR_API_KEY',
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ url, user_email: userEmail, component })
  });
  const data = await res.json();
  if (!res.ok) throw new Error(data.error || `HTTP ${res.status}`);
  if (!data.rewrite_found || !data.component_found) return null;
  return data.payload;
}
Guides

Notes

  • Latest completed rewrite wins. Pass rewrite_id to pin an older row.
  • URLs match after host lowercasing, trailing-slash variants, and http/https flips. Domain-only match is not used.
  • Rewrites are not filtered by language.
  • Inline citations like (thermofisher.com) stay in body copy. They are stripped only from page_properties.meta_description.
  • Rewrite FAQ JSON-LD is a transform of rewrite FAQ copy. Approved Schema product JSON-LD remains /get-schema.
  • Health check: GET /api/external/health.

Need a key or a walkthrough? Request a demo.