Comunicate.eu Domain audit API
A full check of a domain: PageSpeed on mobile and desktop with every category, real Chrome field data, Safe Browsing, and — when we have access to the property — Search Console.
A full check of a domain: PageSpeed on mobile and desktop with every category, real Chrome field data, Safe Browsing, and — when we have access to the property — Search Console.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/comunicate-eu:comunicate-eu-domain-audit-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Comunicate Eu Domain audit API
version: 1.0.0
contact:
url: https://comunicate.eu/ro/contact
description: 'Operations tagged Domain audit across 2 of this provider''s published API definitions: comunicate-eu-openapi.json, comunicate-eu-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://app.comunicate.eu/api/v1
tags:
- name: Domain audit
description: 'A full check of a domain: PageSpeed on mobile and desktop with every category, real Chrome field data, Safe Browsing, and — when we have access to the property — Search Console.'
paths:
/partner/audit:
get:
operationId: get_audit
summary: Audit a domain
description: 'Requires no permission: it neither reads nor writes anything about any organisation, it measures a public page anyone can open in a browser.
**Nothing is cached.** It is used in the "I changed something, let me check again" loop, and a ten-minute-old answer would look identical to a fresh one and falsely say the change had no effect.
It is also not written into the catalogue site audit: a check run against an inner page would replace the score measured on the home page there.
It takes between fifteen seconds and a minute and a half — the page is loaded twice, with Lighthouse.
No scope required.'
tags:
- Domain audit
parameters:
- name: url
in: query
required: true
description: A domain or a page URL. Without a scheme, `https` is assumed. Private-network addresses are rejected — the audit measures public sites, and the page is loaded by Google, not by our server.
schema:
type: string
- name: virustotal
in: query
required: false
description: '`1` also submits the URL to VirusTotal (~70 antivirus engines) and waits for the verdict — another 20–40 s. Off by default: the external check has a request limit, and the audit runs often. Without the parameter, `virustotal` is `null` in the response — meaning “not checked”, not “clean”.'
schema:
type: boolean
- name: strategii
in: query
required: false
description: '`mobile`, `desktop` or both, comma-separated. Both by default — the simulated phone throttles the CPU fourfold, and JavaScript problems only show up there.'
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
siguranta:
type: object
additionalProperties: true
description: Safe Browsing. A `marcat` domain gets a red interstitial in Chrome — until that is fixed, nothing else matters.
strategii[].scoruri:
type: object
additionalProperties: true
description: Performance, accessibility, best practices and SEO, 0–100.
strategii[].probleme:
type: string
description: 'The failing audits, ordered: what is broken first, then what saves the most. Each carries the Lighthouse description — which also says how to fix it — plus estimated savings and up to ten offending elements.'
teren:
type: object
additionalProperties: true
description: Core Web Vitals from real visits over the last 28 days. They beat any lab score, when present.
virustotal:
type: string
enum:
- object
- 'null'
description: Only with `virustotal=1`. `stats` counts engines per verdict, `marcatDe` lists those that flagged the URL, `proaspata` says whether the analysis is fresh or the last available one, `link` opens the full report.
searchConsole:
type: object
additionalProperties: true
description: Indexing, robots.txt, last crawl, the canonical Google picked, mobile-usability and structured-data problems, sitemaps with their errors. Absent, with a reason, when the domain is not shared with us.
example:
url: https://exemplu.ro/
durataMs: 16412
siguranta:
verificat: true
marcat: false
amenintari: []
sumar:
erori: 5
avertismente: 1
peCategorii:
performanta: 6
strategii:
- strategie: mobile
scoruri:
performanta: 62
accesibilitate: 94
bune-practici: 100
seo: 92
metrici:
- id: largest-contentful-paint
titlu: Largest Contentful Paint
valoare: 4,1 s
numeric: 4102
scor: 22
probleme:
- id: unused-javascript
titlu: Reduce unused JavaScript
descriere: Reduce unused JavaScript and defer loading scripts until they are required…
categorie: performanta
nivel: eroare
valoare: Est savings of 274 KiB
economieMs: 1050
economieOcteti: 280576
elemente:
- https://exemplu.ro/assets/bundle.js
totalElemente: 4
urlFinal: https://exemplu.ro/
teren:
verdictOrigine: AVERAGE
origine:
- metrica: LARGEST_CONTENTFUL_PAINT_MS
percentila: 3120
categorie: AVERAGE
searchConsole:
disponibil: true
inspectie:
verdict: PASS
acoperire: Submitted and indexed
robots: ALLOWED
ultimulCrawl: '2026-08-26T21:44:54Z'
'400':
description: Invalid input
'401':
description: Missing or invalid API key
'403':
description: The key lacks the required scope
security:
- apiKey: []
- oauth2: []
x-codeSamples:
- lang: Shell
label: curl
source: "curl --location 'https://app.comunicate.eu/api/v1/partner/audit?url=exemplu.ro' \\\n --header 'Authorization: Bearer bk_live_…'"
servers:
- url: https://app.comunicate.eu/api/v1
components:
securitySchemes:
apiKey:
type: http
scheme: bearer
description: API key from Integrations (bk_live_…)
oauth2:
type: oauth2
description: OAuth 2.1 with PKCE (S256). Dynamic client registration at https://app.comunicate.eu/api/v1/oauth/register. The access token is an API key and is accepted everywhere an API key is.
flows:
authorizationCode:
authorizationUrl: https://app.comunicate.eu/api/v1/oauth/authorize
tokenUrl: https://app.comunicate.eu/api/v1/oauth/token
refreshUrl: https://app.comunicate.eu/api/v1/oauth/token
scopes:
CATALOG_READ: catalog read
ARTICLES_READ: articles read
ARTICLES_WRITE: articles write
MEDIA_WRITE: media write
PUBLICATIONS_READ: publications read
PUBLICATIONS_WRITE: publications write
CAMPAIGNS_READ: campaigns read
CAMPAIGNS_WRITE: campaigns write
BALANCE_READ: balance read
REPORTS_READ: reports read
x-refined-from:
- comunicate-eu-openapi.json
- comunicate-eu-openapi.json
x-provenance:
method: harvested
publisher: Comunicate.eu
source: https://app.comunicate.eu/openapi.json
note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
stamped by stamp-openapi-provenance.py (roadmap#793)