Rychlý start

Reseller API

1. Vytvořit API klíč

Přihlaste se do zákaznického portálu v sekci "Reseller API" a vytvořte klíč. Povolte pouze ta oprávnění, která skutečně potřebujete (výchozí stav je pouze pro čtení). Tajný klíč se zobrazí pouze jednou, bezpečně si jej uložte do svého správce tajných klíčů.

2. Uložit přístupové údaje

Uložte klíč a tajný klíč jako proměnné prostředí, nikdy ne v kódu, nikdy ne v repozitáři.

# .env nebo profil shellu
export KH_KEY="kh_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
export KH_SECRET="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

3. Odeslat první požadavek

Načtěte seznam dostupných produktů. Podpis se tvoří z metody, cesty, časového razítka, nonce a hashe těla.

TS=$(date +%s)
NONCE=$(openssl rand -hex 16)
BODY_SHA256=$(printf '' | openssl dgst -sha256 -hex | awk '{print $2}')
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 $2}')

curl https://www.kernelhost.com/cp/kh_reseller_api/v1/products \
  -H "KH-Key: $KH_KEY" \
  -H "KH-Timestamp: $TS" \
  -H "KH-Nonce: $NONCE" \
  -H "KH-Signature: $SIG"

4. Zadat objednávku

Důležité: POST /v1/orders vyžaduje hlavičku Idempotency-Key. Při opakovaném pokusu v síti se stejným klíčem dostanete stejnou odpověď zpět, žádná dvojitá objednávka.

BODY='{"product_id":42,"billing_cycle":"monthly"}'
BODY_SHA256=$(printf '%s' "$BODY" | openssl dgst -sha256 -hex | awk '{print $2}')
TS=$(date +%s)
NONCE=$(openssl rand -hex 16)
IDEM=$(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 $2}')

curl -X POST https://www.kernelhost.com/cp/kh_reseller_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. Nastavit webhook (volitelné)

Zaregistrujte HTTPS URL pro každý klíč k asynchronnímu příjmu událostí (order.paid, service.provisioned, invoice.created). Podpis payloadu se řídí schématem Stripe.