L'API REST pour lire votre graphe, votre score et vos recommandations — et pour lancer des scans. Réponses JSON, authentification par clés API.
URL de base
Tous les endpoints se trouvent sous le préfixe /v1 et ne sont servis qu'en HTTPS.
URL de base
https://api.graphorank.com
Authentification
Générez une clé depuis la page API et MCP de l'application. Les clés portent le préfixegr_, ne s'affichent en entier qu'une seule fois à la création et sont stockées hachées. Envoyez la clé dans l'en-tête X-Api-Key à chaque requête.
Les clés portent des scopes : read (toujours accordé) couvre tous les endpoints GET, tandis que write est requis pour créer des sites, lancer des scans et gérer les planifications. La session de l'application utilise à la place un JWT dans l'en-tête Authorization: Bearer — les clés API servent à l'accès programmatique.
Shell
# Create a key in the app under API & MCP — keys start with "gr_"
export GRAPHORANK_API_KEY="gr_..."
curl https://api.graphorank.com/v1/sites \
-H "X-Api-Key: $GRAPHORANK_API_KEY"
Endpoints
ENDPOINTDESCRIPTION
GET/v1/sitesListe les sites de votre espace de travail.
GET/v1/scans/{scan_id}Interrogez un scan jusqu'à ce que status vaille done, puis lisez son graphe, son score et ses recommandations.
GET/v1/scans/{scan_id}/graphLes nœuds portent le rôle (pillar | cluster | hub | money | orphan | noindex), les identifiants de groupes structurels et sémantiques, le PageRank, les degrés entrant/sortant, la profondeur de clic et l'indexabilité.
Un site est un domaine racine de votre espace de travail. Ajoutez-le, prouvez que vous en êtes propriétaire, puis scannez-le. La preuve de propriété passe par un fichier well-known ou une balise meta — l'extrait exact avec le jeton se trouve dans Prise en main.
Récupère un site. La réponse a la même forme qu'un élément de la liste de GET /v1/sites.
PARAMÈTRETYPEDESCRIPTION
site_idpath · uuidrequisIdentifiant du site.
POST/v1/sites/{site_id}/verify
Lance la vérification de propriété avec la méthode choisie. La réponse inclut toujours le jeton de votre site : vous pouvez donc appeler ce endpoint une première fois pour le récupérer avant de publier le fichier ou la balise meta.
PARAMÈTRETYPEDESCRIPTION
site_idpath · uuidrequisIdentifiant du site.
methodbody · stringrequisMéthode de vérification : "file" (fichier well-known) ou "meta" (balise meta de la page d'accueil).
{
"verified": true,
"method": "file",
"token": "9Kd2mQx7Ln4pTv8waZrGQg",
"detail": "token found at /.well-known/graphorank-verify.txt"
}
Scans
Un scan exécute tout le pipeline : exploration, analyse sémantique, construction du graphe, calcul du score. Son statut passe par queued → crawling → embedding → scoring → done (ou failed, avec un code d'erreur). Les scans comptent dans le quota mensuel de votre offre.
POST/v1/sites/{site_id}/scans
Lance un scan à la demande. Requiert le scope write. Renvoie 202 avec le scan en file d'attente ; quand le quota mensuel est épuisé, vous obtenez 402 quota_exceeded.
PARAMÈTRETYPEDESCRIPTION
site_idpath · uuidrequisIdentifiant du site.
render_modebody · stringFacultatif : "http", "js" ou "auto". Omettez-le pour utiliser la valeur par défaut — auto n'active le rendu JS que si le site en a besoin.
Le graphe complet de nœuds et d'arêtes d'un scan terminé, au même format que celui consommé par la vue interactive de l'application. Les grands graphes sont servis par pages à curseur de 1 000 éléments (d'abord les nœuds, puis les arêtes) : continuez à interroger avec le next_cursor renvoyé jusqu'à ce qu'il revienne null. L'objet meta est répété sur chaque page.
GET/v1/scans/{scan_id}/graph
Les nœuds portent le rôle (pillar | cluster | hub | money | orphan | noindex), les identifiants de groupes structurels et sémantiques, le PageRank, les degrés entrant/sortant, la profondeur de clic et l'indexabilité. Les arêtes sont les liens internes.
PARAMÈTRETYPEDESCRIPTION
scan_idpath · uuidrequisIdentifiant du scan.
cursorquery · integerCurseur renvoyé par la page précédente. Vaut 0 par défaut (première page).
GraphRank est une référence de 0 à 100 de la visibilité d'un site auprès des moteurs génératifs. Le endpoint le renvoie avec les quatre scores par domaine affichés dans l'application — structurel, thématique, GEO et technique — ainsi que l'objet detail qui alimente les explications dans l'application. La méthodologie derrière le chiffre est propriétaire et appliquée à l'identique à chaque site.
GET/v1/scans/{scan_id}/score
GraphRank et les quatre scores par domaine d'un scan terminé.
Des correctifs priorisés générés à partir du scan, chacun avec une gravité (P0 bloquant, P1 important, P2 souhaitable), des messages localisés et un objet meta contenant l'URL concernée et du contexte supplémentaire.
GET/v1/scans/{scan_id}/recommendations
Liste les recommandations du scan, les plus graves d'abord.
PARAMÈTRETYPEDESCRIPTION
scan_idpath · uuidrequisIdentifiant du scan.
severityquery · stringFiltre facultatif : "P0", "P1" ou "P2".
[
{
"id": "b7e3a9c1-5d2f-4e8b-a1c6-3f9d7e2b8a54",
"page_id": "9c2b1e07-4f6a-4d3e-b8a1-7c5e9f2d1b36",
"type": "orphan_page",
"severity": "P0",
"message_it": "Pagina orfana: nessun link interno la raggiunge. Collegala dalla sezione pertinente.",
"message_en": "Orphan page: no internal link reaches it and crawlers struggle to find it. Link it from the relevant section.",
"meta": { "url": "https://rovere-arredamenti.com/blog/cura-del-rovere" }
}
]
Historique et comparaison
Suivez l'évolution du score d'un scan à l'autre et comparez-en deux pour voir exactement ce qui a changé — pages ajoutées et supprimées, orphelines, indexabilité.
GET/v1/sites/{site_id}/history
Série temporelle du GraphRank du site, un point par scan terminé, triée par horodatage.
PARAMÈTRETYPEDESCRIPTION
site_idpath · uuidrequisIdentifiant du site.
fromquery · date-timeUniquement les points à partir de cet horodatage ISO 8601 (inclus).
toquery · date-timeUniquement les points jusqu'à cet horodatage ISO 8601 (inclus).
Compare deux scans d'un même site. Sans paramètres, compare les deux derniers scans terminés. score_delta et sub_deltas valent null si l'un des scans n'a pas de score.
PARAMÈTRETYPEDESCRIPTION
site_idpath · uuidrequisIdentifiant du site.
from_scanquery · uuidScan de référence. Par défaut, l'avant-dernier scan terminé.
to_scanquery · uuidScan cible. Par défaut, le dernier scan terminé.
Un scan récurrent par site, avec un rapport envoyé par e-mail à la fin. Disponible dans les offres Pro et Agency — sur les offres inférieures, ces endpoints renvoient 402 quota_exceeded avec une suggestion de montée en gamme.
POST/v1/sites/{site_id}/schedule
Crée ou met à jour la planification du site (upsert — une par site). Requiert le scope write.
Des clés au niveau de l'espace de travail pour l'accès programmatique, préfixées gr_ et stockées hachées. La clé en clair n'est renvoyée qu'une seule fois, dans la réponse de création — conservez-la dans un gestionnaire de secrets. Scopes : read (toujours inclus) couvre tous les endpoints GET ; write est requis pour tout ce qui modifie l'état.
GET/v1/api-keys
Liste les clés de l'espace de travail. Les secrets ne sont jamais renvoyés après la création.
Révoque une clé. Elle cesse de fonctionner immédiatement. Renvoie 204 No Content.
PARAMÈTRETYPEDESCRIPTION
key_idpath · uuidrequisIdentifiant de la clé.
Limites de débit et erreurs
Deux compartiments de jetons protègent l'API : un par IP cliente (appliqué avant l'authentification) et un par espace de travail (appliqué après). Quand vous atteignez une limite, la réponse est 429 assortie d'un en-tête Retry-After qui indique le nombre de secondes à attendre.
Les erreurs suivent le format application/problem+json — { type, title, status, detail, code }. Les erreurs de validation de requête (422) renvoient le tableau standard detail qui désigne les champs en cause.
402 · problem+json
{
"type": "about:blank",
"title": "Quota Exceeded",
"status": 402,
"detail": "monthly scan quota reached (6/6): upgrade your plan or wait for the next period",
"code": "quota_exceeded"
}
STATUTCODEQUAND
401unauthorizedIdentifiants manquants ou invalides (X-Api-Key ou JWT Bearer).
402quota_exceededQuota de l'offre atteint, ou fonctionnalité réservée à une offre supérieure. Changez d'offre ou attendez la période suivante.
403forbiddenLes scopes de la clé n'autorisent pas cet appel (p. ex. write est requis).
404not_foundLa ressource n'existe pas dans votre espace de travail — vous ne voyez jamais les données des autres tenants.
422validation_errorCorps ou paramètres mal formés ; la réponse liste les champs en cause.
429rate_limitedTrop de requêtes — respectez l'en-tête Retry-After (en secondes).
503service_unavailableUne dépendance en aval est indisponible. Réessayez plus tard.