Sie vertreiben unser Hosting als Reseller. Ihre Kunden gehören Ihnen: Ihre Preise, Ihre Rechnungen, Ihr Zahlungsanbieter. Auf diese Weise steuern Sie unsere Plattform von dem aus, was Sie bereits betreiben – einem Abrechnungspanel, Ihrer eigenen WordPress-Website oder einem Skript.
Was Ihre Kunden tatsächlich sehen
Vor der Mechanik: Ihre Kunden müssen uns niemals sehen. Drei Oberflächen, und Sie wählen, welche Sie nutzen.
| Oberfläche | Zu wem sie gehört |
|---|
| Das Hosting-Panel unter Ihrem eigenen Hostnamen | Legen Sie unter Reselling → Ihre Marke einen Panel-Hostnamen fest, und Ihre Kunden melden sich unter panel.yourcompany.com mit Ihrem Logo und Ihren Farben an. Dasselbe Panel, Ihre Adresse. |
| Ihre eigene Website | Das WordPress-Plugin integriert eine Domainsuche sowie einen Ein-Klick-Anmeldelink auf Ihrer Website und wickelt die Bestellung über Ihren eigenen WooCommerce-Checkout ab. |
| Ihr Abrechnungspanel | WHMCS oder HostBill bleibt die Eingangstür; das Modul provisioniert im Hintergrund und die Schaltfläche im Kundenbereich meldet sie direkt in ihrem Hosting an. |
⛔ Egal, wofür Sie sich entscheiden: Sie sind der Merchant of Record für Ihre Kunden: Ihre Preise, Ihre Rechnungen, Ihre USt-IdNr., Ihr Zahlungsanbieter. Wir stellen Ihnen die Rechnung, einmal im Monat, zu Großhandelspreisen.
Sobald Sie einen Panel-Hostnamen festgelegt haben, tragen Sie ihn in das Feld Panel-Adresse des WordPress-Plugins ein und nirgendwo sonst – die von dieser API erstellten Anmeldelinks folgen ihm automatisch.
Die vier Zugangswege
Es gibt vier Zugangswege, und im Hintergrund tun sie alle dasselbe:
| Für |
|---|
| Das WHMCS-Modul | Einen WHMCS-Shop |
| Das HostBill-Modul | Einen HostBill-Shop |
| Das WordPress-Plugin | Den Verkauf über Ihre eigene WordPress- oder WooCommerce-Website |
| Die API | Alles andere – Blesta, ein internes System, ein Cron-Skript |
1. Einen API-Schlüssel abrufen
Gehen Sie in Ihrem Dashboard auf API-Schlüssel und erstellen Sie einen. Geben Sie ihm nur das, was er benötigt:
| Berechtigung | Warum |
|---|
org.read | Ihre Kundenkonten lesen |
sites.create | Eine Website provisionieren |
sites.view | Einen Dienst lesen |
sites.delete | Kündigen |
reseller.view | Ihre Dienste auflisten und Nutzung auslesen |
reseller.provision | Einen Kunden sperren, entsperren und anmelden |
⛔ Geben Sie einer Integration nicht reseller.manage. Diese Berechtigung bearbeitet Ihre Preisliste und Ihre eigenen Zugangsdaten für Zahlungsgateways. reseller.provision existiert genau deshalb, damit ein Schlüssel, den Sie in ein Abrechnungspanel oder eine Website einfügen, diese Berechtigung nicht benötigt.
Der Schlüssel wird einmalig angezeigt. Speichern Sie ihn dort, wo Sie Ihre anderen Zugangsdaten aufbewahren – niemals in einer Datei, die Ihr Webserver ausliefert.
2. Führen Sie Ihren ersten Aufruf durch
curl https://api.zinndigital.com/v1/reseller/services \
-H "Authorization: Bearer zdk_live_…"
Das gibt jeden Dienst zurück, den Sie provisioniert haben, eine Zeile pro Website, mit dem Kunden, zu dem er gehört, seinem Status und dem Betrag, den Sie dafür berechnen. Bei einem neuen Konto ist dies eine leere Liste – was die korrekte Antwort ist, kein Fehler.
3. Die gesamte Integration in sechs Aufrufen
WANN AUFRUF
eine Bestellung bezahlt ist POST /v1/orgs einmal pro KUNDE
POST /v1/sites einmal pro DIENST
sie nicht bezahlt haben POST /v1/reseller/services/{siteId}/suspend
sie bezahlen POST /v1/reseller/services/{siteId}/unsuspend
sie kündigen DELETE /v1/sites/{siteId}
„beim Hosting anmelden“ POST /v1/reseller/services/{siteId}/sso
Das Provisionieren besteht aus zwei Aufrufen, und die Schlüssel sind wichtig:
# 1. das Konto des Kunden – referenziert auf IHRE Kunden-ID
curl -X POST https://api.zinndigital.com/v1/orgs \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: account-4211" \
-d '{"type":"customer","name":"Acme Ltd"}'
# 2. deren Website – referenziert auf IHRE Dienst-ID
curl -X POST https://api.zinndigital.com/v1/sites \
-H "Authorization: Bearer zdk_live_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: service-9915" \
-d '{"org_id":"<from step 1>","product_line":"mainstream","primary_domain":"acme.com"}'
Zwei Regeln, deren Missachtung Geld kostet
- Referenzieren Sie das Konto auf Ihren KUNDEN und die Website auf Ihren DIENST. Eine zweite Bestellung eines Kunden muss in dem Konto landen, das dieser bereits besitzt. Referenzieren Sie beides auf den Dienst, endet ein Kunde mit drei unzusammenhängenden Konten und drei separaten Panels.
- Senden Sie bei jedem
POST einen Idempotency-Key, gebildet aus Ihrer eigenen ID für das Objekt. Jedes Abrechnungssystem führt Wiederholungsversuche durch – ein Gateway-Callback trifft doppelt ein, ein Administrator führt eine fehlgeschlagene Provisionierung erneut aus, ein Kunde klickt doppelt. Ohne den Schlüssel erstellt der zweite Versuch eine zweite Website, und diese wird Ihnen in Rechnung gestellt.
Drei Antworten, die Sie nicht zu zweien zusammenfassen dürfen
unsuspend kann mit 409 antworten. Das bedeutet, dass unser Missbrauchsteam die Website sperrt, nicht Sie. Zeigen Sie die Meldung an; wiederholen Sie den Aufruf nicht.
- **Das Kündigen plant eine Löschung, es führt sie nicht sofort durch.** Das Datum wird als
pending_deletion_at zurückgegeben. Einem Kunden mitzuteilen, dass seine Daten bereits gelöscht sind, wenn dies gar nicht der Fall ist, ist schlimmer, als ihm gar nichts zu sagen.
disk_used_bytes kann null sein, und null ist nicht null. Es bedeutet, dass wir keine Messung durchführen konnten, nicht, dass nichts verbraucht wurde. Überspringen Sie es – tragen Sie kein 0 in Ihre eigenen Datensätze ein, sonst zeigen Sie einem Kunden einen grünen Nutzungsbalken für eine Website an, von der Sie gar keinen Messwert haben.
4. Einen Kunden anmelden
POST /v1/reseller/services/{siteId}/sso gibt eine Einmal-URL zurück, die Ihren Kunden direkt in sein eigenes Konto weiterleitet, bereits angemeldet.
⛔ Erstellen Sie ihn, wenn geklickt wird, niemals beim Rendern der Seite. Der Link ist zur einmaligen Nutzung gedacht und verfällt innerhalb weniger Minuten; ein in eine Seite geschriebener Link ist also beim ersten Seitenaufruf verbraucht und verbleibt in jedem Cache zwischen Ihnen und dem Browser.
5. Stattdessen ein Modul installieren
- WHMCS – kopieren Sie das Modul nach
modules/servers/zinn/, fügen Sie einen Server hinzu, dessen Passwort Ihr API-Schlüssel ist, und legen Sie die Produktlinie für das Produkt fest. Drücken Sie auf Verbindung testen: Es führt einen echten Aufruf durch und teilt Ihnen mit, was die Plattform geantwortet hat.
- HostBill – kopieren Sie es nach
includes/modules/Hosting/zinn/ und verbinden Sie es auf dieselbe Weise.
- WordPress – das Zinn® Reseller Toolkit: Domainsuche, ein Anmeldelink in das Hosting Ihrer Kunden und WooCommerce-Provisionierung, wenn eine Bestellung bezahlt wird. Open Source unter <https://github.com/Zinn-Digital/zinn-reseller-toolkit>, oder laden Sie es über Plugins in Ihrem Dashboard herunter.
6. Live gehen
Überprüfen Sie dies, bevor Sie eine echte Bestellung entgegennehmen:
- Der Verbindungstest beim Modul ist erfolgreich oder Ihr erster
curl gibt eine Liste zurück.
- Ihre Preisliste ist festgelegt (Reselling → Ihre Preise).
- Ihr Zahlungsgateway ist verbunden (Reselling → Zahlungsgateways) – Ihre Kunden bezahlen Sie über Ihr eigenes Konto.
- Ihre Unternehmensdaten sind eingetragen (Reselling → Ihr Unternehmen), damit die Rechnungen für Ihre Kunden Ihr juristisches Unternehmen und Ihre USt-IdNr. tragen, nicht unsere.
- Sie haben eine echte Testbestellung von Anfang bis Ende durchgespielt und beobachtet, wie die Website erscheint.
Wo alles andere zu finden ist
Die vollständige API-Referenz – jeder Endpunkt, generiert aus unserer Spezifikation, mit den jeweils erforderlichen Berechtigungen – finden Sie unter <https://zinndigital.com/developers/api>.