MMonitelia

Developers

API reference

A REST API over everything Monitelia collects for your project — 33 data resources, scan triggers for 32 modules, and BI-ready exports. Every endpoint is authenticated with a project-scoped bearer token and returns JSON (or CSV where noted). Create and manage tokens in Project → Settings → API tokens. Machine-readable spec: /api/v1/openapi.json.

Authentication

Pass your token as a bearer header. Tokens start with seo_, are shown once at creation, and are stored only as a hash — if you lose one, revoke it and mint another. Requests are rate-limited to 60/minute per token.

curl https://monitelia.com/api/v1/mentions?limit=20 \
  -H "Authorization: Bearer seo_your_token_here"

Scopes

A token only reaches the scopes you grant it at creation.

ai:readAI visibility & AI Overview
audience:readAuthor profiles & audience
audits:readSite/app/accessibility audits
backlinks:readBacklinks & referring domains
crawls:readRead crawls & issues
crawls:triggerStart site crawls
local:readGoogle Business Profile reviews
mentions:readMentions, digests, topics, visual insights
narratives:readStory clusters & actor groups
notifications:readNotification feed
rankings:readKeywords, rankings, Brand SERP
scans:triggerTrigger any module scan
security:readEmail auth, DMARC, TLS/DNS posture, assets
threats:readThreat findings, cases, squats, abuse reports
tm:readTrademark filings
uptime:readUptime monitors & incidents
vip:readVIP protection profiles
watches:readWatch snapshots
work:readRead the work ledger (scan outcomes)

Data resources

Every resource follows one contract: GET /api/v1/{resource} with limit (1–500, default 50), offset, and format=json|csv. The response is { <resource>: rows[], total, limit, offset, next_offset }, newest first. Unknown filter params return 400 with the whitelist — a typo never silently returns unfiltered data.

GET/api/v1/mentionsmentions:read

Brand/topic mentions across web, news, social, forums and review sites.

Filters: source · sentiment (positive|neutral|negative) · category · language · country

Columns: id, source, url, source_domain, outlet, outlet_reach, outlet_tier, subject_role, title, snippet, author, language, country, sentiment, category, tags, reach, posted_at, found_at

GET/api/v1/narrativesnarratives:read

Mentions clustered into stories, with coverage-gap and coordination signals.

Columns: id, headline, first_seen, last_seen, mention_count, outlet_count, total_reach, pct_negative, pct_neutral, pct_positive, coverage_gap, sync_minutes, similarity, coordination_score, coordination_flags, updated_at

GET/api/v1/actor-groupsnarratives:read

Recurring account casts that co-appear across coordinated stories.

Columns: id, actors, cluster_ids, shared_stories, mention_count, first_seen, last_seen, computed_at

GET/api/v1/digestsmentions:read

AI mention digests: themes, risks and advice over a time window.

Columns: id, window_days, computed_at, headline, summary, themes, advice, risks, mention_count, is_ai

GET/api/v1/topicsmentions:read

Monitored subjects beyond the brand: topics, products, events, competitors.

Filters: kind

Columns: id, kind, query, label, active, window_start, window_end, created_at

GET/api/v1/author-profilesaudience:read

Profiled authors behind the project's mentions.

Columns: id, author, source, mention_count, total_reach, profession, interests, topics, summary, profiled_at

GET/api/v1/visual-insightsmentions:read

Image-level brand/logo appearances with scene analysis.

Columns: id, image_url, source_url, brand_present, logo_present, objects, scene, sentiment, summary, analyzed_at

GET/api/v1/brand-serprankings:read

What Google shows for the brand name, position by position.

Columns: id, snapshot_date, position, url, domain, title, classification, is_negative_top5, created_at

GET/api/v1/threatsthreats:read

Threat findings: phishing, impersonation, typosquats, fake pages, leaks.

Filters: severity (critical|high|medium|low) · threat_type · detector

Columns: id, threat_type, detector, platform, title, target_url, severity, threat_score, is_live_phishing, found_at

GET/api/v1/casesthreats:read

Enforcement cases built from findings, with lifecycle status.

Filters: status · severity (critical|high|medium|low)

Columns: id, threat_type, status, severity, threat_score, title, target_url, platform, created_at, updated_at, closed_at

GET/api/v1/squatsthreats:read

Lookalike domains: typos, homoglyphs, bitflips, combos.

Filters: severity (critical|warning|info) · match_type

Columns: id, domain, match_type, similarity_score, severity, first_seen_at, registered_at, registrar, has_a_record, has_mx_record, urlscan_verdict, created_at

GET/api/v1/tm-filingstm:read

Trademark filings conflicting with the brand across USPTO, EUIPO, WIPO, UA, CA.

Filters: registry · status

Columns: id, registry, application_no, mark, applicant, nice_classes, filed_at, status, status_date, conflict_score, url, found_at

GET/api/v1/abuse-reportsthreats:read

Abuse reports filed to registrars/hosts, with delivery status.

Columns: id, url, channel, method, status, external_id, created_at

GET/api/v1/vipvip:read

Protected people: executives, founders, public faces.

Columns: id, name, role, aliases, enabled, created_at

GET/api/v1/keywordsrankings:read

Tracked keywords (the ranking series lives under /api/v1/rankings).

Columns: id, keyword, country, language, device, search_engine, created_at

GET/api/v1/keyword-candidatesrankings:read

Keyword opportunities discovered from the site's own pages.

Filters: status

Columns: id, term, score, page_count, example_url, status, created_at

GET/api/v1/backlinksbacklinks:read

Discovered backlinks with follow status and link health.

Filters: status · source_domain

Columns: id, source_url, source_domain, target_url, anchor, is_dofollow, rank, status, first_seen, last_seen, found_at

GET/api/v1/backlink-domainsbacklinks:read

Referring domains aggregated, with domain rank.

Columns: id, domain, backlinks_count, domain_rank, first_seen, last_seen

GET/api/v1/ai-overviewai:read

Google AI Overview presence and brand citations per keyword.

Columns: id, keyword, present, brand_cited, brand_position, cited_domains, snippet, checked_at

GET/api/v1/a11yaudits:read

Accessibility (axe-core) scan scores per URL.

Columns: id, url, engine, score, total_violations, axe_version, scanned_at

GET/api/v1/a11y-issuesaudits:read

Individual WCAG violations from accessibility scans.

Filters: impact · rule_id

Columns: id, scan_id, rule_id, impact, wcag_criterion, help, help_url, nodes, sample_target, created_at

GET/api/v1/app-auditaudits:read

App-store listing audits (App Store / Google Play).

Columns: id, platform, app_id, title, category, current_version, version_released_at, rating_avg, rating_count, issues, checked_at

GET/api/v1/gbp-reviewslocal:read

Google Business Profile reviews (needs a connected GBP).

Columns: id, reviewer, star_rating, comment, reply, reply_at, posted_at

GET/api/v1/email-authsecurity:read

SPF/DKIM/DMARC/BIMI posture snapshots per sending domain.

Columns: id, checked_at, dmarc_record, dmarc_policy, dmarc_pct, spf_record, spf_lookup_count, spf_valid, dkim_found, bimi_record, mx_present, score, issues, recommendations

GET/api/v1/dmarc-reportssecurity:read

Aggregated DMARC (rua) reports: who sends as your domain, and does it pass.

Columns: id, org_name, report_begin, report_end, source_ip, source_country, message_count, spf_pass, dkim_pass, disposition, received_at

GET/api/v1/securitysecurity:read

TLS/DNS security posture snapshots: certs, DNSSEC, blocklists.

Columns: id, domain, checked_at, ssl_issuer, ssl_not_after, ssl_days_left, ssl_valid, tls_version, dnssec, dnsbl_listed, dnsbl_clean, score, issues, recommendations

GET/api/v1/posture-diffssecurity:read

What changed since the last posture snapshot: regressions and improvements.

Columns: id, computed_at, window_days, score_delta, regressions, improvements, unchanged, unmeasured

GET/api/v1/assetssecurity:read

Discovered asset inventory: domains, hosts, endpoints, accounts.

Filters: kind · monitored

Columns: id, kind, value, label, source, monitored, confidence, tags, first_seen, last_seen

GET/api/v1/uptime-monitorsuptime:read

Configured uptime monitors.

Columns: id, name, type, target, method, interval_minutes, enabled, created_at

GET/api/v1/uptime-incidentsuptime:read

Downtime incidents with cause and resolution time.

Filters: status

Columns: id, monitor_id, started_at, resolved_at, status, cause

GET/api/v1/watch-snapshotswatches:read

Daily rollups per Watch: finding counts by severity, channel summaries.

Columns: id, watch_id, snapshot_date, total_findings, critical_count, high_count, medium_count, channel_summaries, created_at

GET/api/v1/notificationsnotifications:read

The project's notification feed (same items as the in-app bell).

Filters: event_type · severity

Columns: id, event_type, severity, title, body, link, read_at, created_at

GET/api/v1/workwork:read

The work ledger: every dispatched scan with its status and outcome.

Filters: status · kind

Columns: id, kind, trigger, status, result_summary, error_code, error, started_at, finished_at

Actions & special endpoints

POST/api/v1/crawlscrawls:trigger

Start a crawl for the token's project.

  • start_urlURL to crawl (required)
  • max_pages1–50000, default 500
  • render_jsboolean, default false
GET/api/v1/crawlscrawls:read

List recent crawls and their status.

GET/api/v1/crawls/{id}crawls:read

A single crawl with its issue summary.

GET/api/v1/rankingsrankings:read

Latest rank per tracked keyword.

GET/api/v1/ai-visibilityai:read

Per-prompt model answers (mention, tone, share of voice) + top cited domains.

GET/api/v1/scansscans:trigger

List every scan module this API can dispatch.

POST/api/v1/scansscans:trigger

Trigger a module scan; follow the outcome in /api/v1/work.

  • moduleone of 32 modules — see GET /api/v1/scans
GET/api/v1/datasetvaries by table

Flat, wide table for BI tools (Power BI, Looker Studio, Metabase, Excel). One rectangular dataset, predictable paging, primitive columns.

  • tablementions | threats | rankings
  • formatjson (default) | csv
  • limit1–5000, default 1000
  • offsetpage with next_offset until null

Scan modules

POST /api/v1/scans with { "module": "…" } dispatches any of these. Every dispatch lands in the work ledger — poll GET /api/v1/work to see it finish.

mentions-webWeb mentions (search engines, forums)
mentions-socialSocial mentions (Reddit, YouTube, Mastodon, Telegram…)
mentions-newsNews mentions (RSS + news search)
mentions-reviewsReview-site mentions
narrativesCluster mentions into narratives; coordination signals
visual-insightsVisual/logo appearances
image-searchGoogle Images brand scan
audienceAuthor/audience profiling over collected mentions
brand-protectionFull brand-protection detector sweep
typosquattingLookalike-domain scan
marketplaceMarketplace listings scan
secret-scanLeaked-secret scan (public code/paste sites)
threat-feedsThreat-intel feed correlation
phishing-verifyRe-verify live phishing findings
tm-filingsTrademark-registry conflict scan (USPTO, EUIPO, WIPO, UA, CA)
rankingsKeyword rank check across engines
ai-overviewGoogle AI Overview presence
ai-visibilityLLM answer visibility (share of voice)
keyword-explorerKeyword Explorer position sweep
backlinksBacklink discovery + health check
local-seoLocal SEO (GBP) rankings sync
app-auditApp-store listing audit
aso-rankingsASO keyword positions
a11yAccessibility (axe-core) check
email-authSPF/DKIM/DMARC/MTA-STS posture
securityDNS/TLS/security posture scan
assetsAsset inventory discovery
rdap-watchRDAP watch of the project's own domains
posture-diffPosture change detection vs. last snapshot
gsc-syncSearch Console data sync (needs a connected GSC)
ga4-syncGA4 data sync (needs a connected GA4)
social-syncConnected social accounts sync

Connecting a BI tool

Every data resource speaks CSV (format=csv), and /api/v1/dataset serves the classic flat tables. Page by following next_offset until it comes back null.

# Power BI:  Get Data → Web → Advanced → add a header
#   Authorization: Bearer seo_your_token_here
https://monitelia.com/api/v1/dataset?table=mentions&limit=5000

# Or pull any resource as CSV straight into a spreadsheet:
curl -H "Authorization: Bearer seo_your_token_here" \
  "https://monitelia.com/api/v1/backlinks?format=csv&limit=500" > backlinks.csv

Responses & errors

Success returns 200 (or 202 for accepted scans) with a JSON body; list endpoints include total, limit, offset and next_offset. Errors return a JSON error string with an appropriate status: 400 (bad input — the body lists valid values), 401 (missing/invalid token), 403 (token lacks the scope), 404 (unknown resource), 429 (rate limit), 502 (scan dispatch failed).

Need an endpoint we don't list yet?

The API grows with the product. Tell us what you're building →

API Reference — Monitelia | Monitelia