Zum Hauptinhalt springen
Version: Next

API-Referenz

Authentifizierung

Bearer-Token im Authorization-Header: Authorization: Bearer $ION_SECRET_KEY. Test-Schlüssel (sk_test_...) und Live-Schlüssel (sk_live_...) sind getrennte Credentials — ein Test-Schlüssel kann niemals echtes Geld bewegen, auch nicht versehentlich.

Eine Charge erstellen

POST /v1/ion/charges

Anfrage

{
"amount": 4200,
"currency": "usd",
"customer": "cus_h82ndk3",
"payment_method": "pm_1a2b3c",
"idempotency_key": "order_9f3e-attempt-1"
}

Antwort200 OK

{
"id": "ch_3P8kq2Aa",
"amount": 4200,
"currency": "usd",
"status": "succeeded",
"customer": "cus_h82ndk3",
"created": "2026-07-20T09:14:22Z"
}

status ist entweder succeeded, pending (manche lokalen Zahlungsmethoden settlen asynchron) oder failed.

Einen Kunden erstellen

POST /v1/ion/customers

{
"email": "jordan@acme.com",
"payment_method": "pm_1a2b3c"
}

Die Antwort enthält die Kunden-id (cus_...) zur Wiederverwendung bei künftigen Charges und Abonnements.

Ein Abonnement erstellen

POST /v1/ion/subscriptions

{
"customer": "cus_h82ndk3",
"plan": "plan_pro_monthly",
"idempotency_key": "sub_acme_pro-2026-07"
}

Antwort

{
"id": "sub_7k2p9x",
"status": "active",
"current_period_end": "2026-08-20T09:14:22Z"
}

Eine Rückerstattung ausstellen

POST /v1/ion/refunds

{
"charge": "ch_3P8kq2Aa",
"amount": 2000
}

amount weglassen, um die Charge vollständig zurückzuerstatten. Teilrückerstattungen können mehrfach gegen dieselbe Charge ausgestellt werden, solange ihre Summe den ursprünglichen Betrag nicht übersteigt.

Fehler

HTTP-StatuscodeBedeutung
400invalid_currencyWährung nicht unterstützt oder Betrag für die Untereinheit dieser Währung ungültig
402card_declinedDie Zahlungsmethode wurde vom Aussteller abgelehnt
404no_such_chargeDie referenzierte charge-/customer-/payment_method-ID existiert nicht
409idempotency_key_reusedDerselbe Schlüssel mit einem anderen Anfragekörper als ursprünglich verwendet
429rate_limitedMit dem Retry-After-Header zurückfahren

card_declined-Antworten enthalten einen decline_code (insufficient_funds, expired_card, generic_decline, …) — geben Sie diesen wo möglich an den Endnutzer weiter statt einer generischen Fehlermeldung; das reduziert Retry-and-fail-Schleifen beim Checkout spürbar.

Ratenbegrenzungen

100 Anfragen/Sekunde pro API-Schlüssel über alle Endpunkte. Die Charge-Erstellung ist zusätzlich auf 25/Sekunde pro Schlüssel begrenzt, um den Schaden einer außer Kontrolle geratenen Retry-Schleife zu begrenzen.

Support

Bei Fragen zu Ion wenden Sie sich an das Produktteam oder besuchen Sie das Community-Forum.