Voor ontwikkelaars

Hosting die je vanuit code aanstuurt

Zinn Digital® is een API-first platform. Dezelfde engine API die ons dashboard aanstuurt, is wat u krijgt — geweversioneerd, spec-first en 100% gedocumenteerd tijdens de bbuild-tijd, met gegenereerde SDK's, een CLI, een Terraform provider, ondertekende webhooks en een MCP-server erbovenop. Wat u ook gebruikt om te werken — een terminal, een pipeline, een state-bestand of een AI-agent — het platform reageert erop.

  • 650.000+wereldwijd gehoste websites
  • 1OpenAPI-specificatie waar elke tool uit wordt gegenereerd
  • 4client-SDK's — TypeScript, Python, PHP, Go
  • OAuth 2.1bereikgebaseerde, intrekbare AI-agenttoegang

Één API. Elk platform maakt er gebruik van.

De meeste providers plakken achteraf een API op een controlepaneel, en dat is te merken — de helft van de functies van het paneel komt nooit beschikbaar. Wij hebben het andersom gebouwd. Het dashboard, de beheerconsole, de CLI, de Terraform-provider, de MCP-server en je eigen integraties maken allemaal gebruik van dezelfde engine-API. Als je het in het paneel kunt doen, kun je het in code doen.

Eerst specificaties, later documentatie

De OpenAPI-specificatie is de bron van waarheid en er wordt geen enkele endpoint vrijgegeven tenzij deze in de specificatie staat. Die enkele regel zorgt ervoor dat de publieke API al tijdens de biltijd volledig is gedocumenteerd in plaats van pas achteraf — er is geen ongedocumenteerd hoekje, omdat een ongedocumenteerd endpoint niet kan bestaan.

Gegenereerd, nooit handmatig onderhouden

Interactieve naslagwerken, de vier client-SDK's, een groot deel van de CLI en de Terraform-providerscoring worden allemaal gegenereerd vanuit die ene specificatie. Eén bron, vele artefacten, altijd gesynchroniseerd — je hoeft nooit meer te zoeken naar documentatie die is afgeweken van de implementatie.

Gepersonaliseerd met een uitfaseringsbeleid

Eindpunten bevinden zich onder /v1 met een gepubliceerd uitfaseringsbeleid en een changelog. Je wordt vooraf schriftelijk op de hoogte gesteld van wijzigingen, in plaats dat je erachter komt via een mislukte build.

Contract-getest in CI

Implementatie-versus-specificatie contracttests en OpenAPI-linting worden bij elke wijziging uitgevoerd. Afwijkingen tussen de code en het contract laten de build falen — dus de specificatie waarvan je je client genereert, is exact de specificatie die de server daadwerkelijk hanteert.

Authenticatie, scoping en de valkuilen bij schalen

Twee ingangen, één uniform principe erachter. Welke u ook gebruikt, dezelfde toegangscontroles en dezelfde databaseniveau-isolatie zijn van toepassing.

API-sleutels, per organisatie

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

Live- en testmodi, strikt gescheiden

Sandbox-sleutels zijn gescheiden van productsleutels en werken in de sandbox-modus: geen echte facturering, geen echte provisioning. Je integratietests kunnen de API belasten zonder geld uit te geven of servers te bouwen.

OIDC voor mensen

Gebruikerssessies worden geverifieerd met door Keycloak uitgegeven JWT's, gecontroleerd aan de hand van de openbare sleutel van de realm, en opgelost naar hetzelfde Principal-object als een API-sleutel. Eindpunten worden afgeschermd met gedetailleerde permissiesleutels zoals sites.create of apikeys.manage, per organisatie gecontroleerd — een permissie in de ene org verleent geen toegang in een andere, ongerelateerde org, hoewel deze wel van toepassing is op de orgs die daaronder zijn genest.

Rij-niveau beveiliging eronder

Elk tenant-verzoek wordt uitgevoerd in een transactie waarbij het Postgres org-bereik wordt 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 blijft aanwezig als extra verdedigingslinie.

Gebouwd voor machines, niet alleen voor demo's

Een API is gemakkelijk mooi te laten lijken in een README en moeilijk te laten presteren onder echt verkeer. Dit zijn de onderdelen waar we hard aan hebben gewerkt, omdat dit de onderdelen zijn die integraties om drie uur 's nachts laten falen.

Een detail dat het vermelden waard is, omdat het bepalend is voor hoe bulkwerk zich gedraagt: een 409 bij een duplicaat domein beantwoordt de vraag "wordt deze hostnaam hier gehost?" voor elke tenant, wat een enumeratie-orakel en een reëel deanonymiseringsrisico vormt tegen Footprint-Free. Het throttlen van het aanmaken van sites was de luie oplossing geweest en had het bulk-provisioningsproduct onmiddellijk gebroken. In plaats daarvan worden alleen geweigerde pogingen met een duplicaat domein gebudgetteerd, per principal. Succesvolle aanmaakacties worden hier nooit op in mindering gebracht — zodat u de hele dag in bulk kunt provisionen, en probing nagenoeg onmiddellijk stopt.

  • Een consistente foutenenvelope bij elke mislukking: een code, een menselijk leesbaar bericht, optionele details op veldniveau en een request_id die je aan de supportdienst kunt doorgeven. Validatiefouten retourneren 422 met vermelding van de betreffende velden.
  • Idempotentiesleutels bij POST, waarbij het herhalingsrecord bij commit wordt weggeschreven in plaats van inline — zodat een herpoging nooit een gecachete 201 kan herhalen die verwijst naar een rij die nooit is gecommit. Een mislukt verzoek heft de 'in-flight' vergrendeling onmiddellijk op, zodat een 422 je gecorrigeerde herpoging niet blokkeert.
  • Cursor-paginering als keyset over UUIDv7 — stabiel bij gelijktijdige schrijfacties, zonder paginaverschuiving wanneer rijen tijdens de scan worden ingevoegd.
  • RateLimit-Remaining in antwoorden, zodat een gegenereerde client intelligent kan terugschakelen in plaats van te gokken.
  • Bronnen die buiten de scope vallen, retourneren 404 in plaats van 403 — een 403 zou namelijk bevestigen dat de bron bestaat. Filteren op een organisatie buiten je scope retourneert om dezelfde reden een lege pagina.
  • Website-aanmaak is registratie, geen provisioning: POST /v1/sites retourneert 201 met status pending en blokkeert nooit op de build. Het event wordt in dezelfde transactie als de rij naar de transactionele outbox geschreven, dus een website bestaat dan en slechts dan als de provisioning ervan gegarandeerd wordt aangevraagd.

SDK's, een CLI en een Terraform-provider

Drie afnemers met dezelfde specificaties, voor drie verschillende manieren van werken.

Client-SDK's

Gegenereerd voor TypeScript, Python, PHP en Go, waarbij de specificatie wordt gevolgd zodat een nieuw eindpunt in jouw taal arriveert zonder te wachten op een handgeschreven wrapper.

Zinnector®, de CLI

Zet een WordPress-site op, voer hem lokaal uit met niets geïnstalleerd dan Node, en implementeer hem. Zinnector® controleert uw project vooraf op de slot waarnaar u gaat implementeren — PHP-versie, schijf, aantal bestanden — en waarschuwt voordat u pusht in plaats van daarna. Het logt ook in, vermeldt sites, implementeert, beheert domeinen en DNS, leest e-services, maakt back-ups, voert op de witte lijst geplaatste WP-CLI uit, volgt logboeken en voert bulkbewerkingen uit. Gratis, MIT-gelicentieerd en gebouwd op dezelfde openbare API.

De Terraform-provider

Beheer sites, domeinen, DNS-records, mailboxen en abonnementen als infrastructure as code. terraform apply richt de hosting in, waardoor je omgevingen reproduceerbaar en beoordeelbaar worden in plaats van een opeenvolging van klikken die niemand heeft gedocumenteerd.

Interactieve referentie

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

Webhooks die blijven werken als je endpoint uit de lucht is

Achter het platform bevindt zich een robuuste gebeurtenisruggengraat: elke staatsverandering schrijft een gebeurtenis naar een transactionele outbox in Postgres, atomair met de database-wijziging, en een relay publiceert deze naar NATS JetStream. Gebeurtenissen zijn getypeerd en geverseerd — site.deployed, order.paid, invoice.overdue, backup.completed, abuse.flagged, trial.ending en de rest.

Abonneer je op wat je belangrijk vindt

Registreer een endpoint als een WebhookSubscription en kies de gebeurtenistypen die het ontvangt. Eén stream voedt notificaties, analyse, automatiseringen en uw integratie — u consumeert dezelfde gebeurtenissen als wij.

Ondertekend met HMAC

Elke aflevering is HMAC-ondertekend, zodat u kunt verifiëren dat deze van ons afkomstig is voordat u erop reageert.

Opnieuw geprobeerd met uitstel en gelogd

Mislukte afleveringen worden opnieuw geprobeerd met uitstel en elke poging wordt geregistreerd als een WebhookDelivery. Je kunt afleveringen bekijken en opnieuw afspelen vanuit het dashboard in plaats van de support te e-mailen om te vragen wat we hebben verzonden.

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

De pipeline werkt opzettelijk volgens het at-least-once-principe in plaats van voor te wenden dat hij exactly-once is. Als een relay uitvalt tijdens het publiceren, verloopt de claimlease en worden de events opnieuw gepubliceerd. Voer deduplicatie uit op de envelope id en je consumer is correct by construction.

Code op de website zetten

Een API is nog maar het halve verhaal voor een ontwikkelaar. De andere helft is de oplevering.

  • Verbind GitHub, GitLab of Bitbucket via OAuth, waarbij deploy-sleutels in de inloggegevensopslag worden bewaard — niet in een configuratiebestand.
  • Push activeert een build-en-deploy-pipeline, met branch-naar-omgeving-toewijzing (main aan production, staging aan staging) en build-stappen per stack voor composer en npm.
  • Keer terug naar een eerdere release wanneer een implementatie mislukt.
  • Staging-kloon en push-to-live, zodat een wijziging ergens in een echte omgeving is bewezen voordat deze de bezoekers bereikt.
  • Gezandbakte SSH, SFTP en FTP per website onder CageFS-isolatie, zodat elke tenant alleen zijn eigen bestanden ziet.
  • wp-cli vanuit de paneelterminal en via SSH.
  • VS Code in de browser via code-server — een volledige editor met extensies, een geïntegreerde terminal en git, waarmee u de bestanden van de website rechtstreeks bewerkt.
  • PHP-versie per site, bewerkbare PHP-instellingen, extensies per site, omgevingsvariabelen en echte cron naast WP-cron.

En dezelfde API die je AI-agent kan gebruiken

We stellen het platform beschikbaar als een gehoste MCP-server: een lichte protocoladapter over de engine-API die dezelfde actiecatalogus, RBAC en audit trail hergebruikt. Verbind Claude Code, Cursor, ChatGPT, Claude Desktop of elke andere MCP-geschikte client eenmalig, en elke functionaliteit die we aan de API toevoegen, komt er automatisch voor beschikbaar.

De agent krijgt drie dingen: Tools (dezelfde API-eindpunten, geen parallelle logica die kan afwijken), Resources (alleen-lezen site-gezondheid, configuratie, recente logboeken, statistieken, uptime en KB-artikelen, zodat hij diagnoses stelt met echte gegevens voordat hij actie onderneemt) en Prompts (gepubliceerde workflow-sjablonen zoals "diagnose this site" of "prepare a migration").

Beveiliging is hetzelfde verhaal als authenticatie: OAuth 2.1, tokens gekoppeld aan je org en RBAC-machtigingen met afgedwongen beveiliging op rijniveau, bereikbeperkt en intrekbaar per tool, sandbox gescheiden van productie. Destructieve acties — verwijderen, opschorten, facturering, grote uitgaven — vereisen expliciete bevestiging of een beleid voor menselijke goedkeuring. Limieten en uitgavenplafonds binden door AI getriggerde betaalde acties, en elke MCP-aanroep wordt gelogd voor audit met identiteit, tool, argumenten en resultaat.

We ondersteunen het protocol in plaats van elke app afzonderlijk te integreren, wat betekent dat je kunt wisselen van AI-tools zonder dat je hostingintegratie hoeft te worden aangepast.

Veelgestelde vragen

Is de publieke API dezelfde die het dashboard gebruikt?

Ja — het is dezelfde engine-API, gepubliceerd en gehardend. Het dashboard, de beheerdersconsole, CLI, Terraform-provider, MCP-server en webhooks zijn allemaal afnemers van één grensvlak, wat de reden is dat 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 draaien in de testmodus: geen echte facturering en geen echte provisioning. Richt uw CI op sandbox-inloggegevens en doorloop de volledige aanvraag- en responsencyclus veilig.

Hoe voorkom ik dat een nieuwe poging twee van dezelfde items maakt?

Stuur een Idempotency-Key mee bij je POST. Het replay-record wordt weggeschreven bij de commit in plaats van inline, zodat een retry nooit een gecachte succesvolle actie kan herhalen voor een rij die niet daadwerkelijk is gecommit, en een mislukte aanvraag heft zijn vergrendeling onmiddellijk op zodat je gecorrigeerde retry niet wordt opgehouden. Webhook-aflevering is ontworpen als at-least-once — doe aan deduplicatie op basis van de envelope id aan jouw kant.

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

Vandaag niet. API-sleutels worden per organisatie uitgegeven, dus een integratie die meerdere klantorganisaties omvat, heeft voor elke organisatie een sleutel. Machtigingen worden voor hoofdgebruikers ook per organisatie gecontroleerd: het bezitten van sites.create in de ene organisatie verleent geen toegang in een andere, ongerelateerde organisatie, hoewel dit wel van toepassing is op de organisaties die daaronder zijn genest. Dat is een bewuste keuze: hiermee wordt een gecompromitteerde sleutel beperkt tot de eigen organisatie en de suborganisaties daaronder, en niet het hele platform.

Wat houdt de ingebouwde ontwikkelaarsrol nu precies in?

De rol van ontwikkelaar omvat het lezen van de organisatie, het beheren van API-sleutels, het bekijken en aanmaken van sites, het herstarten daarvan, het opschonen van de cache en het bekijken en beantwoorden van tickets. Facturatiebeheer is hier bewust van uitgesloten. Let op: rechten voor implementatie en live-zetten maken hier geen deel van uit; als een teamlid deze nodig heeft, wijs dan een rol toe die deze bevat in plaats van aan te nemen dat Ontwikkelaar de meest uitgebreide technische rol is.

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

Leveringen worden opnieuw geprobeerd met uitstel en elke poging wordt geregistreerd 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 terwijl een consument niet beschikbaar is — een trage consument loopt achter, het breekt de producent nooit, en u kunt leveringen opnieuw afspelen vanuit het dashboard zodra u weer online bent.

Wat kost het om ermee te beginnen te bouwen?

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 daarop voort

API volgens specificatie, gegenereerde SDK's, een CLI, een Terraform-provider, ondertekende webhooks en een MCP-server — op de hosting die we hebben gebouwd voor meer dan 650.000 websites wereldwijd. Start een proefperiode van 14 dagen zonder creditcard, geen betaalgegevens vereist.

Start gratis