Zilo-motoren som REST-API
Otte operationer som klassisk REST: analysér, hent briefen, scor og gem - til jeres egne systemer, hvad enten det er n8n, CI-pipelines, CMS-integrationer eller rapporter. Samme kvoter og samme tal som editoren.
Base-URL: https://zilo.dk/api/public/v1 · importér API'et direkte i n8n eller Postman: openapi.json (OpenAPI 3.1) · alle planer - også prøveperioden.
1. Opret en API-nøgle
Gå til Indstillinger → API & MCP i Zilo (kræver ejer-rolle), og opret en nøgle. Den vises kun én gang - behandl den som en adgangskode. Nøglen giver adgang til hele organisationens analyser og dokumenter og kan tilbagekaldes med øjeblikkelig virkning. Samme nøgle virker i både API'et og ZILO MCP.
2. Kald API'et
List jeres analyser
curl https://zilo.dk/api/public/v1/analyses \
-H "Authorization: Bearer zilo_DIN_NØGLE"Hent skrive-briefen
curl https://zilo.dk/api/public/v1/analyses/ANALYSE_ID/brief \
-H "Authorization: Bearer zilo_DIN_NØGLE"Scor et udkast
curl -X POST https://zilo.dk/api/public/v1/analyses/ANALYSE_ID/score \
-H "Authorization: Bearer zilo_DIN_NØGLE" \
-H "Content-Type: application/json" \
-d '{"markdown": "# Mit udkast\n\nTeksten der skal scores..."}'Succes-svar er { data: ... } med id'er og tal plus et markdown-felt med den fulde rapport i læsbar form - klar til at sende videre til en sprogmodel eller vise i jeres eget værktøj uden at bygge visningen selv.
Workflowet
- Start analysen.
POST /analysessvarer 201 med etanalysisId. - Vent til den er klar. Spørg
GET /analyses/{id}, til status erready- typisk 1-3 minutter. - Hent briefen. Termer, spørgsmål, entiteter og mållængde - alt det, teksten skal ramme.
- Skriv og scor undervejs. Scoring er gratis og tæller ikke i kvoten, så kald den så tit, I vil.
- Gem dokumentet med
POST /drafts.
Når dokumentet allerede findes
Intet kald kan overskrive et dokument stiltiende. Derfor svarer to situationer med 409 i stedet:
draft_exists- analysen har allerede et dokument. Svaret indeholdereditorId: hent dokumentet medGET /drafts/{id}og opdatér det medPUTog denbaseRev, I læste.conflict- dokumentet er ændret, siden I læste det. Svaret indeholder den aktuelle revision: hent, flet jeres ændringer ind, og prøv igen.
Endpoints
GET /analyses- organisationens analyser med status og idPOST /analyses- start en ny analyse (tæller i jeres kvote) - 201 + analysisIdGET /analyses/{id}- status og fremdrift, mens analysen kørerGET /analyses/{id}/brief- skrive-briefen: termer, spørgsmål, outline, GEO-facts - og kundens stemme, hvis sitet har en profilGET /voice-profiles- hvilke af jeres sites har en stemmeprofilPOST /analyses/{id}/score- scor et markdown-udkast - SEO + GEO, uden at gemmePOST /drafts- gem udkastet som Zilo-dokument med redigér- og delelinkGET /drafts/{id}- hent et dokument som markdown med aktuel revisionPUT /drafts/{id}- opdatér dokumentet sikkert (baseRev-revisionskontrol)
Scoring er gratis og tæller ikke i kvoten - betalingspunktet er analysen, præcis som i webappen. Hvert felt og hvert svar er beskrevet i detaljer i openapi.json.
Fejl og statuskoder
400- invalid_input - ugyldigt input; beskeden siger hvad der er galt401- invalid_api_key - manglende, ugyldig eller tilbagekaldt nøgle402- quota_exceeded - analysekvoten er brugt; svar med forbrug og plan404- not_found - findes ikke i jeres organisation409- draft_exists / conflict / analysis_not_ready - tilstandskonflikter429- rate_limited - med Retry-After-header og retryAfterSeconds
Fejlkroppe er { error, message, ... } med danske, handlingsanvisende beskeder og relevante felter (fx currentRev ved konflikter).
Grænser og privatliv
score: 30 kald/minutbrief: 10 kald/minutcreate: 10 kald/minut + jeres analysekvotedrafts (gem/opdatér): 20 kald/minut, udkast op til 100 KB
Grænserne er pr. nøgle pr. minut og gælder API'et og MCP hver for sig. Vi logger hvilket endpoint der blev kaldt, hvornår og hvor længe det tog - aldrig dine udkast eller argumenter. Tilbagekalder du en nøgle, virker den ikke ved næste kald.
Til udviklere
Versionering ligger i stien (/v1) - vi bryder ikke kontrakten uden nyt versionsnummer. CORS er bevidst slået fra: API'et er til server-side-kald, ikke browserkode (nøglen hører ikke hjemme i en klient). Analyser leveres asynkront via polling - webhooks kommer, når efterspørgslen viser sig. Mangler dit workflow et endpoint? Skriv til hej@zilo.dk.