Voor ontwikkelaars

Hosting die u kunt beheren vanuit code

Zinn Digital® is een API-first platform. De engine-API die ons dashboard aandrijft, is exact dezelfde die u krijgt — geversioneerd, spec-first en 100% gedocumenteerd tijdens het bouwen, voorzien van gegenereerde SDK's, een CLI, een Terraform-provider, ondertekende webhooks en een MCP-server daarbovenop. Wat u ook gebruikt om te werken — een terminal, een pipeline, een statusbestand of een AI-agent — het platform beantwoordt eraan.

Een API-eindpunt dat ondertekende gebeurtenissen levert aan meerdere geabonneerde listeners.
  • 700.000+wereldwijd gehoste sites
  • 1OpenAPI-specificatie waaruit elke tool wordt gegenereerd
  • 4client-SDK's — TypeScript, Python, PHP, Go
  • OAuth 2.1afgebakende, herroepbare toegang voor AI-agents

Eén API. Elk oppervlak draait erop.

De meeste hosts voegen achteraf een API toe aan een controlepaneel, en dat is te merken — de helft van de functies van het paneel haalt het nooit. Wij hebben het precies andersom aangepakt. Het dashboard, de beheerdersconsole, de CLI, de Terraform-provider, de MCP-server en uw eigen integraties maken allemaal gebruik van dezelfde engine-API. Als u het in het paneel kunt doen, kunt u het ook in code doen.

Eerst specificatie, niet achteraf gedocumenteerd

De OpenAPI-specificatie is de bron van waarheid, en er wordt geen eindpunt uitgebracht tenzij het in de specificatie staat. Die enkele regel zorgt ervoor dat de openbare API tijdens de build volledig wordt gedocumenteerd in plaats van pas later — er is geen ongedocumenteerde hoek, omdat een ongedocumenteerd eindpunt simpelweg niet kan bestaan.

Gegenereerd, nooit handmatig onderhouden

Interactieve referentiedocumentatie, de vier client-SDK's, een groot deel van de CLI en de steigers voor de Terraform-provider worden allemaal gegenereerd op basis van die ene specificatie. Eén bron, vele artefacten, altijd gesynchroniseerd — u hoeft nooit meer achter documentatie aan te jagen die is afgeweken van de implementatie.

Geversioneerd met een beleid voor buitenbedrijfstelling

Eindpunten bevinden zich onder /v1 met een gepubliceerd uitfaseringsbeleid en een wijzigingslogboek. U wordt schriftelijk geïnformeerd voordat er iets verandert, in plaats van dat u dit moet ontdekken via een mislukte build.

Contract-getest in CI

Contracttests tussen implementatie en specificatie en OpenAPI-linting worden bij elke wijziging uitgevoerd. Afwijkingen tussen de code en het contract laten de build mislukken — zodat de specificatie waaruit u uw client genereert, de specificatie is die de server daadwerkelijk naleeft.

Authenticatie, scoping en de valkuilen bij schaalvergroting

Twee manieren om binnen te komen, één uniform principe erachter. Welke u ook gebruikt, dezelfde toestemmingscontroles en dezelfde isolatie op databaseniveau zijn van toepassing.

API-sleutels, per organisatie

Sleutels zien eruit als zdk_<mode>_<prefix>_<secret>. Alleen een SHA-256-hash van het geheim wordt opgeslagen — we kunnen u een sleutel na uitgifte niet opnieuw tonen, en dat geldt ook voor iedereen die toegang krijgt tot onze database. Sleutels hebben scopes, kunnen worden ingetrokken en worden uitgegeven per organisatie in plaats van per persoon.

Live- en testmodus, strikt gescheiden

Sandbox-sleutels staan los van productiesleutels en werken in sandbox-modus: geen echte facturering, geen echte provisioning. Uw integratietests kunnen de API intensief belasten zonder geld uit te geven of servers te bouwen.

OIDC voor mensen

Gebruikerssessies verifiëren met door Keycloak uitgegeven JWT's, gecontroleerd aan de hand van de openbare sleutel van de realm, en leiden naar hetzelfde Principal-object als een API-sleutel. Eindpunten worden beveiligd met gedetailleerde toestemmingssleutels zoals sites.create of apikeys.manage, gecontroleerd per organisatie — een toestemming in de ene organisatie verleent geen toegang tot een afzonderlijke, niet-gerelateerde organisatie, hoewel deze wel van toepassing is op de organisaties die eronder zijn genest.

Onderliggende beveiliging op rijniveau

Elk tenantverzoek wordt uitgevoerd in een transactie waarbij het Postgres-organisatiebereik is ingesteld vanuit de principal, zodat isolatie wordt afgedwongen door de database en niet door een ORM-filter dat iemand zou kunnen vergeten. Het queryset-filter is nog steeds aanwezig als diepgaande verdediging.

Gebouwd voor machines, niet alleen voor demo's

Het is eenvoudig om een API er goed uit te laten zien in een README, maar lastig om deze onder echt verkeer betrouwbaar te laten functioneren. Aan deze onderdelen hebben wij het hardst gewerkt, omdat het precies de onderdelen zijn die om drie uur 's nachts integraties doen mislukken.

Een detail dat de moeite waard is om te vermelden, omdat het bepaalt hoe bulkbewerkingen zich gedragen: een 409 op een gedupliceerd domein beantwoordt voor elke tenant de vraag "wordt deze hostnaam hier gehost?", wat een enumeratie-oracle is en een reëel de-anonimiseringsrisico vormt voor Footprint-Free. Het vertragen (throttlen) van het aanmaken van sites zou een gemakzuchtige oplossing zijn geweest en zou het bulkprovisioning-product direct onbruikbaar hebben gemaakt. In plaats daarvan wordt er alleen een limiet gesteld op geweigerde pogingen met een gedupliceerd domein, per principal. Succesvolle creaties worden hier nooit op in mindering gebracht — u kunt dus de hele dag in bulk provisionen, terwijl verkenningspogingen vrijwel direct worden gestaakt.

  • Een consistente foutenvelop bij elke fout: een code, een leesbaar bericht, optionele details op veldniveau en een request_id die u aan de ondersteuning kunt doorgeven. Validatiefouten retourneren 422 met vermelding van de betreffende velden.
  • Idempotentietoetsen op POST, waarbij het replayrecord wordt weggeschreven bij de commit in plaats van inline — zodat een nieuwe poging nooit een gecachte 201 kan herhalen die verwijst naar een rij die nooit is gecommit. Een mislukt verzoek heft de actieve vergrendeling onmiddellijk op, waardoor een 422 uw gecorrigeerde nieuwe poging niet blokkeert.
  • Cursor-paginering als keyset over UUIDv7 — stabiel onder gelijktijdige schrijfbewerkingen, zonder paginadiversie wanneer er rijen worden ingevoegd tijdens het scannen.
  • RateLimit-Remaining op antwoorden, zodat een gegenereerde client intelligent kan afbouwen in plaats van te gokken.
  • Bronnen buiten het bereik retourneren 404 in plaats van 403 — een 403 zou het bestaan van de bron bevestigen. Filteren op een organisatie buiten uw bereik retourneert om dezelfde reden een lege pagina.
  • Het aanmaken van een site is een registratie, geen provisioning: POST /v1/sites retourneert 201 met status pending en blokkeert nooit op de build. De gebeurtenis wordt weggeschreven naar de transactionele outbox binnen dezelfde transactie als de rij, waardoor een site uitsluitend bestaat als gegarandeerd is dat de provisioning ervan wordt aangevraagd.

SDK's, een CLI en een Terraform-provider

Drie gebruikers van dezelfde specificatie, voor drie verschillende manieren van werken.

Client-SDK's

Gegenereerd voor TypeScript, Python, PHP en Go, volgt de specificatie zodat een nieuw eindpunt in uw taal beschikbaar is zonder te hoeven wachten op een handgeschreven wrapper.

Zinnector®, de CLI

Genereer een WordPress-site, voer deze lokaal uit met enkel Node geïnstalleerd, en implementeer deze. Zinnector® controleert uw project vooraf op het slot waarnaar u op het punt staat te implementeren — PHP-versie, schijfruimte, aantal bestanden — en waarschuwt voordat u pusht in plaats van erna. Het meldt zich ook aan, toont sites, implementeert, beheert domeinen en DNS, leest e-maildiensten, maakt back-ups, voert toegestane WP-CLI-commando's uit, volgt logs in realtime en activeert bulkbewerkingen. Gratis, MIT-gelicentieerd en gebouwd op ditzelfde openbare API.

De Terraform-provider

Beheer sites, domeinen, DNS-records, mailboxen en abonnementen als infrastructure as code. terraform apply provisiont hosting, en uw omgevingen worden reproduceerbaar en beoordeelbaar in plaats van een opeenvolging van klikken die niemand heeft genoteerd.

Interactieve referentie

Gegenereerde documentatie die u vanuit de browser kunt lezen en aanroepen, waarin precies de eindpunten worden beschreven die de server implementeert — omdat beide afkomstig zijn van dezelfde specificatie.

Webhooks die een storing van uw eindpunt overleven

Achter het platform bevindt zich een duurzame event-ruggengraat: elke statuswijziging schrijft atomair met de databasewijziging een event naar een transactionele outbox in Postgres, en een relay publiceert dit naar NATS JetStream. Events zijn getypeerd en geversionneerd — site.deployed, order.paid, invoice.overdue, backup.completed, abuse.flagged, trial.ending en de rest.

Abonneer u op wat u belangrijk vindt

Registreer een eindpunt als WebhookSubscription en kies de gebeurtenistypen die het ontvangt. Eén stream voedt zowel meldingen, analyses, automatiseringen als uw integratie — u gebruikt dezelfde gebeurtenissen als wij.

Ondertekend met HMAC

Elke levering is HMAC-ondertekend, zodat u kunt controleren of deze van ons afkomstig is voordat u actie onderneemt.

Opnieuw geprobeerd met back-off en vastgelegd

Mislukte leveringen worden met een back-off opnieuw geprobeerd en elke poging wordt geregistreerd als een WebhookDelivery. U kunt leveringen inspecteren en opnieuw afspelen vanuit het dashboard in plaats van de ondersteuningsdienst te e-mailen met de vraag wat we hebben verzonden.

Ten minste één keer, dus ontdubbel op de id

De pipeline is bewust at-least-once in plaats van te pretenderen exactly-once te zijn. Bij een relay die halverwege de publicatie uitvalt, verloopt de claimlease en worden de gebeurtenissen opnieuw gepubliceerd. Ontdubbel op de envelope id en uw consumer is qua constructie correct.

Code op de site plaatsen

Een API is slechts de helft van het verhaal van een ontwikkelaar. De andere helft is de oplevering.

  • Verbind GitHub, GitLab of Bitbucket via OAuth, waarbij implementatiesleutels worden bewaard in de referentiekluis — niet in een configuratiebestand.
  • Push activeert een build-en-implementatiepipeline, met toewijzing van branch naar omgeving (main naar production, staging naar staging) en buildstappen per stack voor composer en npm.
  • Draai terug naar een eerdere release wanneer een implementatie mislukt.
  • Staging-kloon en push-to-live, zodat een wijziging op een realistische plek is getest voordat deze bezoekers bereikt.
  • SFTP per site onder CageFS-isolatie, zodat elke tenant alleen zijn eigen bestanden ziet, plus een ingesloten (jailed) SSH-shell op het gedeelde platform.
  • wp-cli vanuit de paneelterminal en via SSH.
  • VS Code in de browser via code-server — een volledige editor met git, waarmee u de bestanden van de site rechtstreeks bewerkt.
  • PHP-versie per site, bewerkbare PHP-instellingen, extensies per site, omgevingsvariabelen en echte cron naast WP-cron.

Vier manieren om aan een site te werken

De API is één deur. Dit zijn de andere vier, en elk daarvan is inbegrepen in het abonnement in plaats van te worden verkocht als een ontwikkelaarstarief.

De webeditor

VS Code in de browser, geopend vanaf de pagina van de site in het dashboard, bewerkt de echte bestanden van die site met ingebouwde git en de gehele editor bevindt zich in dezelfde CageFS-jail als uw SFTP-toegang. Het bewerkt de LIVE-site — er zit geen staging-kopie tussen, dus een bestand dat u opslaat is openbaar op het moment dat het wordt weggeschreven, hoewel een statisch bestand nog tot vier uur lang vanuit de CDN-cache kan worden geserveerd.

Zinnector®, de CLI

Gratis, onder de MIT-licentie en gebouwd op dezelfde openbare API. Genereer een WordPress-site, voer deze uit op uw eigen computer, controleer deze vooraf op basis van het slot waarnaar u wilt implementeren — PHP-versie, schijf, aantal bestanden — en implementeer. Vereist Node 24 of nieuwer.

De MCP-server

Eén catalogus met hulpprogramma's, zodat de AI-client die u al gebruikt op uw sites kan werken via dezelfde API en dezelfde machtigingen die het dashboard gebruikt. Dezelfde server waarmee uw eigen client verbinding maakt, is degene die is gekoppeld aan de webeditor. Alleen-lezen totdat u anders aangeeft.

Ontwikkelaarsinlog per site

Klantwerk vereist uw wachtwoord niet. Nodig iemand uit via een e-mailadres en diegene krijgt toegang tot precies één site: ze loggen in als zichzelf, met de rol van kijker, redacteur of beheerder, en elke andere site geeft een 404-fout voordat er een handler wordt uitgevoerd — een beveiligingsbeleid op rijniveau in Postgres en een afbakening op verzoekniveau, niet slechts één controle. De accounteigenaar verleent en trekt dit in met één klik, van kracht bij het volgende verzoek.

En dezelfde API die uw AI-agent kan gebruiken

Wij bieden het platform aan als een gehoste MCP-server: een dunne protocoladapter over de engine-API die dezelfde actiecatalogus, RBAC en audittrail hergebruikt. Verbind Claude Code, Cursor, ChatGPT, Claude Desktop of een willekeurige MCP-compatibele client eenmalig, en elke functionaliteit die we aan de API toevoegen, wordt er automatisch voor beschikbaar.

De agent krijgt drie dingen: Tools (dezelfde API-eindpunten, geen parallelle logica die kan afwijken), Resources (alleen-lezen sitestatus, configuratie, recente logbestanden, statistieken, uptime en KB-artikelen, zodat deze vóór het handelen met echte gegevens diagnosticeert) en Prompts (gepubliceerde workflowsjablonen zoals "diagnose this site" of "prepare a migration").

Veiligheid volgt hetzelfde principe als authenticatie: OAuth 2.1, tokens gebonden aan uw organisatie en RBAC-machtigingen met afgedwongen beveiliging op rijniveau, per tool gedefinieerd en intrekbaar, en een sandbox gescheiden van productie. Destructieve acties — verwijderen, opschorten, facturering, grote uitgaven — vereisen expliciete bevestiging of een menselijk goedkeuringsbeleid. Tarieflimieten en uitgavenlimieten begrenzen door AI geactiveerde betaalde acties, en elke MCP-aanroep wordt vastgelegd in een auditlog met identiteit, tool, argumenten en resultaat.

We ondersteunen het protocol in plaats van elke app afzonderlijk te integreren, wat betekent dat uw keuze van AI-tools kan veranderen zonder dat uw hostingintegratie verandert.

Veelgestelde vragen

Is de openbare API dezelfde als die het dashboard gebruikt?

Ja — het is dezelfde engine-API, gepubliceerd en versterkt. Het dashboard, de beheerconsole, de CLI, de Terraform-provider, de MCP-server en webhooks zijn allemaal consumenten van één enkel oppervlak, waardoor de API niet achterloopt op het paneel.

Kan ik een integratie testen zonder geld uit te geven of echte servers te bouwen?

Ja. Sandbox-sleutels worden afzonderlijk van productiesleutels uitgegeven en werken in de testmodus: geen echte facturering en geen echte provisioning. Richt uw CI op sandbox-inloggegevens en doorloop de volledige aanvraag- en antwoordcyclus veilig.

Hoe voorkom ik dat een nieuwe poging een dubbel item aanmaakt?

Verzend een Idempotency-Key bij uw POST. Het replay-record wordt geschreven bij de commit in plaats van inline, zodat een nieuwe poging nooit een gecachet succes kan herhalen voor een rij die feitelijk niet is gecommit, en een mislukt verzoek heft de vergrendeling onmiddellijk op zodat uw gecorrigeerde nieuwe poging niet wordt vertraagd. Webhook-aflevering is opzettelijk at-least-once ontworpen — ontdubbel aan uw kant op het envelope id.

Kan ik één API-sleutel toegang geven tot al mijn klantorganisaties?

Niet vandaag. API-sleutels worden per organisatie verstrekt, dus een integratie die meerdere klantorganisaties omvat, heeft voor elk een sleutel. Machtigingen worden voor gebruikersprincipals ook per organisatie gecontroleerd: het hebben van sites.create in de ene organisatie verleent geen toegang tot een afzonderlijke, niet-gerelateerde organisatie, hoewel dit wel van toepassing is op de organisaties die daaronder vallen. Dat is opzettelijk — het beperkt een gecompromitteerde sleutel tot de eigen organisatie en de onderliggende suborganisaties, en niet tot het hele platform.

Wat staat de ingebouwde rol van Ontwikkelaar eigenlijk toe?

De dev-rol omvat het inzien van de organisatie, API-sleutelbeheer, het bekijken en aanmaken van sites, het herstarten ervan, het legen van de cache, en het bekijken en beantwoorden van tickets. Deze rol sluit facturatiebeheer bewust uit. Houd er rekening mee dat rechten voor implementatie (deploy) en push-to-live hier geen deel van uitmaken — als een teamlid deze nodig heeft, wijs dan een rol toe die deze rechten wel bevat, in plaats van aan te nemen dat Developer de meest brede technische rol is.

Wat gebeurt er met mijn webhooks als mijn eindpunt een uur lang offline is?

Afleveringen worden opnieuw geprobeerd met back-off en elke poging wordt vastgelegd als een WebhookDelivery die u kunt inspecteren. Stroomopwaarts worden gebeurtenissen naar een transactionele outbox geschreven in dezelfde databasetransactie als de wijziging zelf, zodat er niets verloren gaat zolang een consument niet beschikbaar is — een niet-beschikbare consument loopt slechts vertraging op, deze verstoort de producent nooit, en u kunt afleveringen opnieuw afspelen via het dashboard zodra u terug bent.

Wat kost het om te beginnen met bouwen hiermee?

Start op een creditcardvrije proefperiode van 14 dagen van Footprint-Free Hosting — geen betaalgegevens, tot 5 sites. Betaalde Footprint-Free abonnementen beginnen bij $6/maand voor PBN 5. Elk abonnement heeft een niet-goed-geld-terug-garantie van 30 dagen, gratis migraties en geen vendor lock-in.

Lees de specificatie en bouw er vervolgens op voort

Spec-first API, gegenereerde SDK's, een CLI, een Terraform-provider, ondertekende webhooks en een MCP-server — op de hosting die we hebben gebouwd voor meer dan 700.000 sites wereldwijd. Begin met een proefperiode van 14 dagen zonder creditcard en zonder betalingsgegevens.

Gratis starten

WordPress-plugins waar uw AI-agent mee kan werken

Elke van deze plugins verandert uw WordPress-site in een MCP-server, zodat Claude, Cursor, VS Code en andere AI-assistenten er echt werk op kunnen verrichten, ingelogd als u en beperkt tot wat u mag doen.

Alle MCP- en API-documentatie voor ontwikkelaars →