API-Überblick
Basis-URL, Authentifizierung, Anfragen, Paginierung und Konventionen der Odinex Cloud API.
Die Odinex Cloud API ist eine JSON-REST-API. Die Console, die odx CLI und der
Terraform-Provider nutzen sie alle – alles, was Sie in der Console tun können, geht also auch über die API.
Die Seiten in diesem Abschnitt werden aus der OpenAPI-Spezifikation der API generiert. Praxisnahe Anleitungen zu
Netzwerk, Abrechnung und Fehlern
finden Sie im Abschnitt „Konzepte“.
Basis-URL
https://api.odinex.cloud/v1Authentifizierung
Senden Sie ein Projekt-API-Token als Bearer-Token:
curl -H "Authorization: Bearer $ODX_TOKEN" https://api.odinex.cloud/v1/serversEin Token sieht nur sein eigenes Projekt. read-Tokens können nur lesen; read_write-Tokens können auch Änderungen vornehmen.
Einige Endpunkte benötigen kein Token: /regions, /server_types,
/load_balancer_types, /pricing und /status.
Die Abschnitte unter Console session (Authentifizierung, Konto, Projekte, Abrechnung und Support) funktionieren nur
mit einer Console-Sitzung, nicht mit Tokens.
Anfragen und Antworten
- Anfrage- und Antworttexte sind JSON; senden Sie bei einem Anfragetext
Content-Type: application/jsonmit. - IDs sind Ganzzahlen. Wo eine Anfrage auf eine andere Ressource verweist (ein Image, einen Servertyp, einen SSH-Key, ein Netzwerk …), können Sie meist deren Namen oder ID angeben, wie in der Beschreibung des Felds angegeben.
- Zeitstempel sind Strings im Format ISO 8601.
- Geldbeträge sind Dezimal-Strings in Euro, z. B.
"4.000000". Preise sind Objekte mitnet,grossundcurrency. - Das Erstellen einer Ressource liefert
201mit der neuen Ressource und, falls noch Arbeit läuft, eine Aktion. Das Löschen liefert204oder eine Aktion. - Ein
PUTauf eine Ressource ändert nur die mitgesendeten Felder;labelsersetzt, wenn mitgesendet, alle Labels. - Fehler verwenden einen einheitlichen Envelope:
{"error": {"code", "message", "details"}}.
Paginierung
Listen-Endpunkte akzeptieren page (ab 1) und per_page (1–50, Standard 25) und liefern ein Objekt meta.pagination:
{
"servers": [],
"meta": {
"pagination": { "page": 1, "per_page": 25, "previous_page": null, "next_page": 2, "last_page": 3, "total_entries": 61 }
}
}Fragen Sie next_page ab, bis der Wert null ist.
Filtern
Viele Listen-Endpunkte filtern nach name, die meisten nach label_selector, z. B.
?label_selector=env=prod,role=web (kodieren Sie = als %3D, falls Ihr Client das nicht selbst tut).
Limits
Anfragen zählen gegen die Ratenbegrenzung von 3600 pro Stunde und Projekt; jede
Antwort enthält RateLimit-*-Header. Die Anzahl der Ressourcen ist durch die Limits Ihrer
Organisation begrenzt.
Beispiel: Server erstellen und darauf warten
resp=$(curl -s -X POST https://api.odinex.cloud/v1/servers \
-H "Authorization: Bearer $ODX_TOKEN" -H "Content-Type: application/json" \
-d '{"name": "web-1", "server_type": "t1", "image": "ubuntu-24.04", "location": "fra1", "ssh_keys": ["laptop"]}')
action=$(echo "$resp" | jq .action.id)
until [ "$(curl -s -H "Authorization: Bearer $ODX_TOKEN" \
https://api.odinex.cloud/v1/actions/$action | jq -r .action.status)" != running ]; do sleep 2; done
curl -s -H "Authorization: Bearer $ODX_TOKEN" \
https://api.odinex.cloud/v1/servers/$(echo "$resp" | jq .server.id) | jq .server.public_net