De REST API om je grafiek, score en aanbevelingen te lezen — en om scans te starten. JSON-responses, geauthenticeerd met API-sleutels.
Basis-URL
Alle endpoints staan onder het /v1 voorvoegsel en worden uitsluitend via HTTPS aangeboden.
Basis-URL
https://api.graphorank.com
Authenticatie
Genereer een sleutel op de pagina API & MCP in de app. Sleutels beginnen metgr_, worden bij het aanmaken slechts één keer volledig getoond en worden gehasht opgeslagen. Stuur de sleutel mee in de X-Api-Key header bij elk verzoek.
Sleutels hebben scopes: read (altijd toegekend) dekt elk GET-endpoint, terwijl write nodig is om sites aan te maken, scans te starten en schema’s te beheren. De eigen sessie van de app gebruikt een JWT in de Authorization: Bearer header — API-sleutels zijn bedoeld voor programmatische toegang.
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"
Een site is een rootdomein in je workspace. Voeg het toe, bewijs dat het van jou is en scan het daarna. Eigendomsverificatie gebruikt een well-known bestand of een metatag — het exacte tokenfragment staat in Aan de slag.
Haal één site op. De respons heeft dezelfde vorm als een item uit de lijst van GET /v1/sites.
PARAMETERTYPEBESCHRIJVING
site_idpath · uuidverplichtSite-ID.
POST/v1/sites/{site_id}/verify
Voer de eigendomscontrole uit met de gekozen methode. De respons bevat altijd je sitetoken, zodat je dit endpoint één keer kunt aanroepen om het op te halen voordat je het bestand of de metatag publiceert.
PARAMETERTYPEBESCHRIJVING
site_idpath · uuidverplichtSite-ID.
methodbody · stringverplichtVerificatiemethode: "file" (well-known bestand) of "meta" (metatag op de homepage).
{
"verified": true,
"method": "file",
"token": "9Kd2mQx7Ln4pTv8waZrGQg",
"detail": "token found at /.well-known/graphorank-verify.txt"
}
Scans
Een scan doorloopt de volledige pipeline: crawl, semantische analyse, grafiekopbouw, scoring. De status loopt van queued → crawling → embedding → scoring → done (of failed, met een foutcode). Scans tellen mee voor het maandelijkse quotum van je plan.
POST/v1/sites/{site_id}/scans
Start een scan op aanvraag. Vereist de write-scope. Geeft 202 terug met de ingeplande scan; als het maandelijkse quotum op is, krijg je 402 quota_exceeded.
PARAMETERTYPEBESCHRIJVING
site_idpath · uuidverplichtSite-ID.
render_modebody · stringOptioneel: "http", "js" of "auto". Laat weg voor de standaard — auto schakelt JS-rendering alleen in wanneer de site dat nodig heeft.
De volledige node/edge-grafiek van een voltooide scan, in hetzelfde formaat als de interactieve weergave van de app. Grote grafieken worden aangeboden in cursorpagina’s van 1.000 elementen (eerst nodes, dan edges): blijf aanvragen met de teruggegeven next_cursor tot die null teruggeeft. Het meta-object wordt op elke pagina herhaald.
GET/v1/scans/{scan_id}/graph
Nodes bevatten de rol (pillar | cluster | hub | money | orphan | noindex), structurele en semantische cluster-ID’s, PageRank, in-/uitgraad, klikdiepte en indexeerbaarheid. Edges zijn interne links.
PARAMETERTYPEBESCHRIJVING
scan_idpath · uuidverplichtScan-ID.
cursorquery · integerCursor uit de vorige pagina. Standaard 0 (eerste pagina).
GraphRank is een benchmark van 0–100 voor hoe zichtbaar een site is voor generatieve zoekmachines. Het endpoint levert hem samen met de vier gebiedsscores uit de app — structureel, thematisch, GEO en technisch — plus het detailobject dat de uitleg in de app voedt. De methodiek achter het getal is eigen en wordt op elke site identiek toegepast.
GET/v1/scans/{scan_id}/score
GraphRank en de vier gebiedsscores van een voltooide scan.
Geprioriteerde verbeteringen die uit de scan voortkomen, elk met een urgentie (P0 blokkerend, P1 belangrijk, P2 nice-to-have), gelokaliseerde berichten en een meta-object met de betrokken URL plus extra context.
GET/v1/scans/{scan_id}/recommendations
Toon de aanbevelingen van de scan, de ernstigste eerst.
PARAMETERTYPEBESCHRIJVING
scan_idpath · uuidverplichtScan-ID.
severityquery · stringOptioneel filter: "P0", "P1" of "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" }
}
]
Geschiedenis & diff
Volg hoe de score zich over scans ontwikkelt en vergelijk er twee om precies te zien wat er veranderd is — toegevoegde en verwijderde pagina’s, weespagina’s, indexeerbaarheid.
GET/v1/sites/{site_id}/history
GraphRank-tijdreeks voor de site, één punt per voltooide scan, gesorteerd op tijdstempel.
PARAMETERTYPEBESCHRIJVING
site_idpath · uuidverplichtSite-ID.
fromquery · date-timeAlleen punten op of na dit ISO 8601-tijdstempel.
toquery · date-timeAlleen punten op of vóór dit ISO 8601-tijdstempel.
Vergelijk twee scans van dezelfde site. Zonder parameters vergelijkt het de twee meest recente voltooide scans. score_delta en sub_deltas zijn null als een van beide scans geen score heeft.
PARAMETERTYPEBESCHRIJVING
site_idpath · uuidverplichtSite-ID.
from_scanquery · uuidReferentiescan. Standaard de op een na meest recente voltooide scan.
to_scanquery · uuidDoelscan. Standaard de meest recente voltooide scan.
Eén terugkerende scan per site, met een e-mailrapport na afloop. Beschikbaar in de plannen Pro en Agency — bij lagere plannen geven deze endpoints 402 quota_exceeded terug met een upgradehint.
POST/v1/sites/{site_id}/schedule
Maak de planning van de site aan of werk hem bij (upsert — één per site). Vereist de write-scope.
PARAMETERTYPEBESCHRIJVING
site_idpath · uuidverplichtSite-ID.
freqbody · stringverplicht"weekly" of "monthly".
daybody · integerverplichtWekelijks: 0–6 met maandag = 0. Maandelijks: 1–28.
timebody · stringverplicht24-uurs "HH:MM", UTC.
recipientsbody · string[]verplichtMaximaal 10 e-mailadressen die het rapport ontvangen.
Sleutels op workspaceniveau voor programmatische toegang, met voorvoegsel gr_ en gehasht opgeslagen. De sleutel in platte tekst wordt slechts één keer teruggegeven, in de respons bij het aanmaken — bewaar hem in een secret manager. Scopes: read (altijd inbegrepen) dekt elk GET-endpoint; write is vereist voor alles wat de status wijzigt.
GET/v1/api-keys
Toon de sleutels van de workspace. Geheimen worden na het aanmaken nooit meer teruggegeven.
Trek een sleutel in. Hij werkt direct niet meer. Geeft 204 No Content terug.
PARAMETERTYPEBESCHRIJVING
key_idpath · uuidverplichtSleutel-ID.
Rate limits & fouten
Twee token buckets beschermen de API: één per client-IP (toegepast vóór authenticatie) en één per workspace (toegepast erna). Als je een limiet raakt, is de respons 429 met een Retry-After header die aangeeft hoeveel seconden je moet wachten.
Fouten gebruiken het application/problem+json formaat — { type, title, status, detail, code }. Fouten bij de validatie van verzoeken (422) geven de standaard detail array terug die naar de betreffende velden wijst.
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"
}
STATUSCODEWANNEER
401unauthorizedOntbrekende of ongeldige inloggegevens (X-Api-Key of Bearer-JWT).
402quota_exceededPlanquotum bereikt, of de functie vereist een hoger plan. Upgrade of wacht op de volgende periode.
403forbiddenDe scopes van de sleutel staan deze aanroep niet toe (bijv. write is vereist).
404not_foundDe resource bestaat niet in je workspace — je ziet nooit data van andere tenants.
422validation_errorOnjuiste body of parameters; de respons noemt de betreffende velden.
429rate_limitedTe veel verzoeken — houd je aan de Retry-After-header (seconden).
503service_unavailableEen onderliggende dienst is niet beschikbaar. Probeer het later opnieuw.