Pentru dezvoltatori

Hosting pe care îl poți controla prin cod

Zinn Digital® este o platformă orientată spre API. Același motor API care stă la baza panoului nostru de control este cel pe care îl primiți — versionat, bazat pe specificații și documentat 100% în momentul construirii, având integrate SDK-uri generate, o interfață în linie de comandă (CLI), un provider Terraform, webhook-uri semnate și un server MCP. Indiferent ce unealtă folosiți pentru a lucra — un terminal, un flux de lucru, un fișier de stare sau un agent AI — platforma răspunde la aceasta.

  • 650.000+site-uri găzduite la nivel mondial
  • 1Specificație OpenAPI din care este generat fiecare instrument
  • 4SDK-uri client — TypeScript, Python, PHP, Go
  • OAuth 2.1acces pentru agenți AI delimitat și revocabil

O singură API. Fiecare suprafață rulează pe ea.

Majoritatea furnizorilor de găzduire adaugă un API peste un panou de control ulterior, și asta se vede — jumătate din funcțiile panoului nu ajung niciodată să fie disponibile. Noi am construit invers. Tabloul de bord, consola de administrare, CLI-ul, providerul Terraform, serverul MCP și propriile tale integrări folosesc toate același API al motorului. Dacă poți face ceva în panou, poți face și în cod.

Specificațiile primele, nu documentate ulterior

Specificația OpenAPI este sursa unică de adevăr și niciunul dintre endpointuri nu este lansat decât dacă se află în specificație. Această regulă unică este cea care face ca API-ul public să fie documentat integral în momentul compilării și nu ulterior — nu există nicio zonă neclară documentată parțial, deoarece un endpoint nedocumentat nu poate exista.

Generat, niciodată întreținut manual

Documentația de referință interactivă, cele patru SDK-uri pentru clienți, o mare parte din CLI și scheletul pentru furnizorul Terraform sunt toate generate din acea singură specificație. O singură sursă, multe artefacte, mereu sincronizate — nu alergi niciodată după o documentație care s-a îndepărtat de implementare.

Versionat cu o politică de depreciere

Punctele finale sunt plasate sub /v1, având o politică de învechire publicată și un jurnal al modificărilor. Veți fi anunțați în scris înainte ca ceva să se schimbe, în loc să descoperiți acest lucru dintr-o compilare eșuată.

Testat prin contract în CI

Testurile de contract implementare-versus-specificație și validarea OpenAPI rulează la fiecare modificare. Orice diferență dintre cod și contract eșuează build-ul — astfel încât specificația din care vă generați clientul este cea pe care serverul o respectă efectiv.

Autentificare, delimitare și capcanele scalării

Două modalități de acces, dar un singur principiu uniform în spatele lor. Oricare ar fi cea pe care o folosești, se aplică aceleași verificări de permisiuni și aceeași izolare la nivel de bază de date.

Chei API, pe organizație

Cheile au formatul zdk_<mode>_<prefix>_<secret>. În baza de date este stocat doar un hash SHA-256 al secretului — nu vă putem afișa o cheie din nou după emitere și nici altcineva care are acces la baza noastră de date nu poate face acest lucru. Cheile au permisiuni asociate, pot fi revocate și sunt emise per organizație, nu per persoană.

Modurile live și de test, păstrate separat

Cheile sandbox sunt separate de cheile de producție și rulează în modul sandbox: fără facturare reală, fără provizionare reală. Testele tale de integrare pot apela intens API-ul fără a cheltui bani sau a construi servere.

OIDC pentru oameni

Sesiunile de utilizator se autentifică cu JWT-uri emise de Keycloak, verificate pe baza cheii publice a realm-ului, și se rezolvă la același obiect Principal ca și o cheie API. Endpoint-urile restricționează accesul pe baza unor chei de permisiuni granulare, cum ar fi sites.create sau apikeys.manage, verificate per organizație — o permisiune dintr-o organizație nu acordă acces într-o altă organizație separată și neînrudită, deși se aplică organizațiilor imbricate sub aceasta.

Securitate la nivel de rând dedesubt

Fiecare cerere a chiriașului rulează într-o tranzacție cu domeniul organizației Postgres setat din principal, astfel încât izolarea este impusă de baza de date, nu de un filtru ORM pe care cineva l-ar putea uita. Filtrul queryset este încă prezent ca măsură de apărare în profunzime.

Construit pentru mașini, nu doar pentru demo-uri

Este ușor să faci un API să arate bine într-un fișier README și greu să îl faci să funcționeze în condiții de trafic real. Acestea sunt aspectele la care am muncit din greu, deoarece acestea sunt părțile care strică integrările la ora trei dimineața.

Un detaliu care merită menționat, deoarece influențează modul în care funcționează operațiunile în masă: un cod 409 pentru un domeniu duplicat răspunde la întrebarea „este această gazdă găzduită aici?” pentru orice tenant, ceea ce reprezintă un oracol de enumerare și un risc real de deanoniimizare împotriva Footprint-Free. Limitarea ratei de creare a site-urilor ar fi fost soluția cea mai facilă și ar fi compromis complet produsul de provisionare în masă. În schimb, doar încercările respinse de domenii duplicate sunt contorizate în buget, per principal. Creările cu succes nu sunt niciodată taxate — așa că puteți face provisionare în masă toată ziua, iar interogările de sondare se opresc aproape imediat.

  • Un pachet de erori consecvent la fiecare eșec: un cod, un mesaj inteligibil pentru utilizator, detalii opționale la nivel de câmp și un request_id pe care îl puteți menționa în discuțiile cu asistența. Erorile de validare returnează codul 422, menționând câmpurile problematice.
  • Chei de idempotență pentru POST, cu înregistrarea reluării scrisă la commit în loc să fie inline — astfel încât o reîncercare să nu poată reda niciodată un 201 din cache care face referire la un rând ce nu s-a comis niciodată. O cerere eșuată eliberează blocarea în zbor imediat, astfel încât un 422 nu bloca reîncercarea corectată.
  • Paginare pe bază de cursor ca set de chei peste UUIDv7 — stabilă în cazul scrierilor concurente, fără decalaj de pagină atunci când sunt inserate rânduri în timpul scanării.
  • RateLimit-Remaining pe răspunsuri, astfel încât un client generat să poată reduce ritmul inteligent în loc să ghicească.
  • Resursele din afara ariei de acoperire returnează 404 în loc de 403 — un cod 403 ar confirma existența resursei. Filtrarea după o organizație din afara ariei dvs. de acoperire returnează o pagină goală din același motiv.
  • Crearea site-ului înseamnă înregistrare, nu provizionare: POST /v1/sites returnează 201 cu starea pending și nu blochează niciodată în timpul compilării. Evenimentul este scris în outbox-ul tranzacțional în aceeași tranzacție cu rândul, deci un site există dacă și numai dacă este garantat că se solicită provizionarea sa.

SDK-uri, un CLI și un furnizor Terraform

Trei consumatori cu aceleași specificații, pentru trei moduri diferite de lucru.

SDK-uri pentru clienți

Generat pentru TypeScript, Python, PHP și Go, urmărind specificația, astfel încât un nou punct final să ajungă în limbajul tău fără a fi nevoie să aștepți un wrapper scris manual.

Zinnector®, CLI-ul

Creați structura unui site WordPress, rulați-l local fără altceva instalat în afară de Node și implementați-l. Zinnector® vă verifică în prealabil proiectul în raport cu slotul pe care urmează să îl implementați – versiunea PHP, disc, numărul de fișiere – și vă avertizează înainte de a face push, nu după. De asemenea, se conectează, listează site-uri, implementează, gestionează domenii și DNS, citește servicii de e-mail, efectuează backup-uri, rulează WP-CLI inclus pe lista permisă, urmărește jurnalele (logs) și lansează operațiuni în masă. Gratuit, licențiat sub licența MIT și construit pe aceeași API publică.

Furnizorul Terraform

Administrează site-uri, domenii, înregistrări DNS, căsuțe poștale și planuri ca infrastructură ca cod. terraform apply configurează găzduirea, iar mediile tale devin reproducibile și verificabile în loc să fie o succesiune de clicuri pe care nu le-a scris nimeni.

Referință interactivă

Documentație generată pe care o poți citi și apela direct din browser, descriind exact punctele finale pe care serverul le implementează — deoarece ambele provin din aceeași specificație.

Webhookuri care supraviețuiesc căderii punctului tău final

În spatele platformei se află o coloană vertebrală de evenimente durabilă: fiecare modificare de stare scrie un eveniment într-un outbox tranzacțional din Postgres, în mod atomic împreună cu modificarea bazei de date, iar un releu îl publică în NATS JetStream. Evenimentele sunt tipizate și au versiuni — site.deployed, order.paid, invoice.overdue, backup.completed, abuse.flagged, trial.ending și restul.

Abonează-te la ceea ce te interesează

Înregistrați un punct final ca WebhookSubscription și alegeți tipurile de evenimente pe care le primește. Un singur flux alimentază notificările, analiticele, automatizările și propria dvs. integrare — consumați exact aceleași evenimente pe care le folosim și noi.

Semnat cu HMAC

Fiecare livrare este semnată prin HMAC, astfel încât să puteți verifica dacă provine de la noi înainte de a o procesa.

Reîncercat cu pauze progresive și înregistrat în jurnal

Livrările eșuate se reîncearcă folosind un interval de backoff, iar fiecare încercare este înregistrată ca WebhookDelivery. Puteți inspecta și retransmite livrările din panoul de control în loc să trimiteți un e-mail la suport întrebând ce am trimis.

Cel puțin o dată, deci deduplicare pe ID

Conductul este în mod deliberat de tip cel-puțin-o-dată în loc să pretindă a fi exact-o-dată. Un releu care cade în timpul publicării își vede cesiunea de revendicare expirată și evenimentele republicate. Asigurați deduplicarea după id-ul plicului și consumatorul dvs. este corect prin construcție.

Adăugarea codului pe site

Un API reprezintă doar jumătate din povestea unui dezvoltator. Cealaltă jumătate este lansarea.

  • Conectează GitHub, GitLab sau Bitbucket prin OAuth, cu chei de desfășurare stocate în seiful de acreditări – nu într-un fișier de configurare.
  • Push activează un flux de lucru de tip build-and-deploy, cu mapare de la ramură la mediu (main pentru producție, staging pentru staging) și pași de compilare per stivă pentru composer și npm.
  • Revino la o versiune anterioară atunci când o implementare eșuează.
  • Clonare de staging și push-to-live, astfel încât o modificare să fie testată într-un mediu real înainte de a ajunge la vizitatori.
  • SSH, SFTP și FTP securizate (Jailed) pentru fiecare site sub izolare CageFS, astfel încât fiecare chiriaș să vadă doar propriile fișiere.
  • wp-cli din terminalul panoului și prin SSH.
  • VS Code în browser prin code-server — un editor complet cu extensii, un terminal integrat și git, care editează direct fișierele site-ului.
  • Versiune PHP per site, setări PHP editabile, extensii per site, variabile de mediu și cron real pe lângă WP-cron.

Și același API pe care agentul tău AI îl poate folosi

Expunem platforma ca server MCP găzduit: un adaptor de protocol subțire pentru API-ul motorului care reutilizează același catalog de acțiuni, RBAC și jurnal de audit. Conectați o singură dată Claude Code, Cursor, ChatGPT, Claude Desktop sau orice client compatibil MCP, și fiecare funcționalitate pe care o adăugăm la API îi va deveni disponibilă automat.

Agentul primește trei lucruri: instrumente (aceleași puncte finale API, fără logică paralelă care să se abată), resurse (sănătatea site-ului doar în citire, configurație, jurnale recente, metrici, timp de funcționare și articole din baza de cunoștințe, astfel încât să diagnosticheze cu date reale înainte de a acționa) și prompturi (șabloane de flux de lucru publicate, cum ar fi „diagnostichează acest site” sau „pregătește o migrare”).

Securitatea este aceeași poveste ca și autentificarea: OAuth 2.1, jetoane asociate organizației dvs. și permisiuni RBAC cu securitate la nivel de rând aplicată, delimitate și revocabile per unealtă, sandbox separat de producție. Acțiunile distructive — ștergere, suspendare, facturare, cheltuieli mari — necesită o confirmare explicită sau o politică de aprobare umană. Limitele de rată și plafoanele de cheltuieli limitează acțiunile plătite declanșate de AI, iar fiecare apel MCP este înregistrat în jurnalul de audit cu identitatea, unealta, argumentele și rezultatul.

Susținem protocolul în loc să integrăm fiecare aplicație pe rând, ceea ce înseamnă că opțiunea ta de instrumente AI se poate schimba fără ca integrarea ta de găzduire să se schimbe odată cu aceasta.

Întrebări frecvente

Este API-ul public același pe care îl folosește panoul de control?

Da — este același API de motor, publicat și optimizat. Tabloul de bord, consola de administrare, CLI-ul, furnizorul Terraform, serverul MCP și webhookurile sunt toate consumatoare ale aceleiași interfețe, motiv pentru care API-ul nu rămâne în urmă față de panou.

Pot testa o integrare fără să cheltuiesc bani sau să construiesc servere reale?

Da. Cheile sandbox sunt emise separat de cheile de producție și rulează în modul de testare: fără facturare reală și fără provizionare reală. Îndreptați mediul CI către acreditările sandbox și testați în siguranță întregul ciclu de cereri și răspunsuri.

Cum opresc o reîncercare să creeze două elemente de același fel?

Trimiteți o cheie de idempotență (Idempotency-Key) pentru cererea dumneavoastră POST. Înregistrarea reluării este scrisă la momentul confirmării (commit), nu inline, astfel încât o reîncercare nu va putea niciodată reda un succes memorat în cache pentru un rând care nu s-a confirmat efectiv, iar o cerere eșuată își eliberează blocarea imediat, astfel încât reîncercarea corectată să nu fie blocată. Livrarea webhook-urilor este concepută după principiul cel puțin o dată (at-least-once) — efectuați deduplicarea după ID-ul plicului la nivelul dumneavoastră.

Pot oferi unei singure chei API acces la toate organizațiile mele client?

Nu astăzi. Cheile API sunt emise per organizație, astfel încât o integrare care cuprinde mai multe organizații de clienți deține o cheie pentru fiecare în parte. Permisiunile sunt, de asemenea, verificate per organizație pentru principalii utilizatori: deținerea sites.create într-o organizație nu acordă acces într-o altă organizație separată și neînrudită, deși se aplică organizațiilor imbricate sub aceasta. Acest lucru este intenționat — limitează o cheie compromisă la propria organizație și la suborganizațiile din subordinea acesteia, nu la întreaga platformă.

Ce permite efectiv rolul de Dezvoltator încorporat?

Rolul de dezvoltator acoperă citirea organizației, gestionarea cheilor API, vizualizarea și crearea de site-uri, repornirea acestora, golirea memoriei cache și vizualizarea și răspunsul la tichete. Acesta exclude în mod deliberat controlul facturării. Rețineți că permisiunile de implementare (deploy) și publicare în mediu de producție (push-to-live) nu fac parte din acesta — dacă un membru al echipei are nevoie de ele, atribuiți-i un rol care le include, în loc să presupuneți că cel de Dezvoltator este cel mai amplu rol tehnic.

Ce se întâmplă cu webhookurile mele dacă punctul meu de final devine indisponibil timp de o oră?

Livrările sunt reîncercate cu întârziere progresivă și fiecare încercare este înregistrată ca WebhookDelivery pe care o poți inspecta. În amonte, evenimentele sunt scrise într-o cutie poștală tranzacțională (outbox) în cadrul aceleiași tranzacții de Baza de date ca și modificarea în sine, astfel încât nimic nu se pierde cât timp un consumator este indisponibil — un consumator căzut va avea o întârziere, dar nu va defecta niciodată producătorul, iar tu poți retransmite livrările din panoul de control odată ce totul revine la normal.

Cât costă să începi să construiești pe baza lui?

Începe un-test gratuit de 14 zile fără card pentru Footprint-Free Hosting — fără detalii de plată, până la 5 site-uri. Pașii plătiți Footprint-Free încep de la $6/lună pentru PBN 5. Fiecare abonament beneficiază de o garanție de rambursare a banilor de 30 de zile, migrări gratuite și fără blocare la furnizor.

Citește specificația, apoi construiește pe baza ei

API orientat pe specificații, SDK-uri generate, un CLI, un furnizor Terraform, webhook-uri semnate și un server MCP — pe găzduirea pe care am creat-o pentru peste 650.000 de site-uri la nivel mondial. Începeți o perioadă de probă de 14 zile fără card, fără date de plată.

Începe gratuit