1. Skapa en API-nyckel
Logga in i kundportalen under "KernelHost API" och skapa en nyckel. Välj endast de behörigheter du faktiskt behöver (standard: endast läsning). Hemligheten visas bara en gång, så spara den säkert i din lösenordshanterare.
2. Spara inloggningsuppgifterna
Spara nyckel och hemlighet som miljövariabler, aldrig i kod, aldrig i ett repository.
# .env eller shell-profil
export KH_KEY="kh_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
export KH_SECRET="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
3. Skicka din första förfrågan
Hämta listan över tillgängliga produkter. Signaturen byggs över metod, sökväg, tidsstämpel, nonce och body-hash.
TS=$(date +%s)
NONCE=$(openssl rand -hex 16)
BODY_SHA256=$(printf '' | openssl dgst -sha256 -hex | awk '{print $NF}')
SIG_INPUT=$(printf 'GET\n/v1/products\n%s\n%s\n%s' "$TS" "$NONCE" "$BODY_SHA256")
SIG=$(printf '%s' "$SIG_INPUT" | openssl dgst -sha256 -hmac "$KH_SECRET" -hex | awk '{print $NF}')
curl https://www.kernelhost.com/cp/kernelhost_api/v1/products \
-H "KH-Key: $KH_KEY" \
-H "KH-Timestamp: $TS" \
-H "KH-Nonce: $NONCE" \
-H "KH-Signature: $SIG"
4. Lägg en beställning
Viktigt: POST /v1/orders kräver en Idempotency-Key och ett värdnamn. Om du efter ett nätverksfel försöker igen med samma nyckel får du tillbaka samma svar i stället för en andra beställning. Konfigurationsalternativ som du utelämnar (till exempel plats eller operativsystem) får det första värdet som erbjuds i butiken.
BODY='{"product_id":42,"billing_cycle":"monthly","hostname":"web01.example.com"}'
IDEM="order-web01-$(date +%Y%m%d)"
BODY_SHA256=$(printf '%s' "$BODY" | openssl dgst -sha256 -hex | awk '{print $NF}')
TS=$(date +%s)
NONCE=$(openssl rand -hex 16)
SIG_INPUT=$(printf 'POST\n/v1/orders\n%s\n%s\n%s' "$TS" "$NONCE" "$BODY_SHA256")
SIG=$(printf '%s' "$SIG_INPUT" | openssl dgst -sha256 -hmac "$KH_SECRET" -hex | awk '{print $NF}')
curl -X POST https://www.kernelhost.com/cp/kernelhost_api/v1/orders \
-H "KH-Key: $KH_KEY" \
-H "KH-Timestamp: $TS" \
-H "KH-Nonce: $NONCE" \
-H "KH-Signature: $SIG" \
-H "Idempotency-Key: $IDEM" \
-H "Content-Type: application/json" \
--data "$BODY"
5. Kontrollera statusen och hämta inloggningsuppgifterna
Svaret på beställningen innehåller service_ids. Anropa GET /v1/services/{id} tills status är active och en IP-adress har tilldelats; driftsättningen tar oftast allt från några sekunder till några minuter. Därefter returnerar GET /v1/services/{id}/credentials (behörighet read:credentials) värdnamn, IP-adresser, användarnamn och lösenord, till exempel för ditt Ansible-inventory.
kh_get() {
TS=$(date +%s)
NONCE=$(openssl rand -hex 16)
BODY_SHA256=$(printf '' | openssl dgst -sha256 -hex | awk '{print $NF}')
SIG_INPUT=$(printf 'GET\n%s\n%s\n%s\n%s' "$1" "$TS" "$NONCE" "$BODY_SHA256")
SIG=$(printf '%s' "$SIG_INPUT" | openssl dgst -sha256 -hmac "$KH_SECRET" -hex | awk '{print $NF}')
curl -s "https://www.kernelhost.com/cp/kernelhost_api$1" \
-H "KH-Key: $KH_KEY" \
-H "KH-Timestamp: $TS" \
-H "KH-Nonce: $NONCE" \
-H "KH-Signature: $SIG"
}
kh_get /v1/services/1234
kh_get /v1/services/1234/credentials
6. Registrera en webhook-URL (valfritt)
Du kan redan nu registrera en HTTPS-URL per nyckel. Leveransen av händelser är under förberedelse; fram till dess använder du statusanropen från steg 5.

