Skip to main content

Developers

Developer Documentation

REST API reference. Base URL: https://apimediaalertpress.com/v1


Authentication

Send your API key in the x-api-key header. API keys are issued automatically once self-serve plans open (they are not open yet): after a successful paid-plan checkout on the pricing page, a key is emailed to you. Enterprise keys are issued on request. POST /verify requires a key; the GET endpoints below are public.

POST /verify

{ "url": "https://example.com/news/article", "plan": "PLUS", "user_id": "your-user-id", "site": "https://your-site.example", "category": "World" }

Response 200 — example, abbreviated

{
  "url": "https://example.com/news/article",
  "category": "World",
  "map_context": {
    "presentation": {
      "headline": "...",
      "headline_characteristics": ["short length", "declarative"],
      "domain": "example.com",
      "publish_date": null,
      "author": null
    },
    "references": { "outbound_link_count": 0, "reference_domains": [], "has_citations": false },
    "comparison": { "category": "World", "presentation_pattern": "standard article" },
    "timing": { "position": "unclear", "matched_cues": [] }
  },
  "context_record": {
    "authority_scope": { "sentences": [ { "text": "No author or byline attribution was found in the page's metadata or structured data." } ] },
    "historical_context": { "sentences": [ { "text": "No prior MAP record exists for this exact URL, so no comparison over time is available for this analysis." } ] },
    "comparable_coverage": { "sentences": [ { "text": "MAP does not currently compare this content against independent coverage of the same event from other outlets. Doing so would require fetching and analyzing other publishers' coverage, which is out of scope for this engine today." } ] },
    "context_memory_note": { "sentences": [ { "text": "This record reflects the page's content as fetched at the time of this request. Pages can change after a record is generated \u2014 a later verification of the same URL may produce a different record." } ] },
    "context_complete": { "sentences": [ { "text": "MAP documents observable characteristics of information presentation \u2014 sourcing, attribution, specificity, timing, and framing. It does not determine factual accuracy, intent, or credibility." } ] }
  }
}

The sentences are taken from a real MAP record, abbreviated. A response contains more fields, and field values vary by page. Sent to https://apimediaalertpress.com/v1/verify; see the OpenAPI file for the full request schema.

GET /feed/signals

Public, no key. https://mediaalertpress.com/wp-json/map/v1/feed/signals returns the 100 most recent ledger entries, with no pagination.

GET /record/{record_id}

Public, no key; feed-ingested records only; rate limited. https://mediaalertpress.com/wp-json/map/v1/record/{record_id} returns the MAP record object for one record ID: the seven context frames, observation times, the record hash and chain position, and a limits statement. Example: https://mediaalertpress.com/wp-json/map/v1/record/0fae7262-852e-4263-b478-cdbe84db720c. An unknown ID returns 404.

GET /record?url=

Public, no key; feed-ingested records only; rate limited. https://mediaalertpress.com/wp-json/map/v1/record?url=https://example.com/news/article returns the latest MAP record for that URL, in the same shape as the endpoint above. A URL MAP has no feed-ingested record for returns 404; a value that is not an http(s) URL returns 400.

GET /ledger/stats

Public, no key; feed-ingested records only; rate limited. https://mediaalertpress.com/wp-json/map/v1/ledger/stats returns the total number of ledger entries.

GET /feed/map-records/

Public, no key; feed-ingested records only; rate limited. https://mediaalertpress.com/feed/map-records/ is an RSS feed of the newest records MAP has made from the news feeds it monitors. Each item links to a record page.

GET /feed/map-changes/

Public, no key; feed-ingested records only; rate limited. https://mediaalertpress.com/feed/map-changes/ is an RSS feed of observed differences between MAP’s repeat observations of the same URL. A difference does not establish that a publisher edited content or which version is correct.

Error codes

400Invalid request
401Authentication failed
429Rate limit exceeded
503Service unavailable

Full spec: apimediaalertpress.com/openapi.json

← API Access