Subscriptions-API
July 30, 2026
Abos über die FlowAlp Pay API erstellen, abrufen, aktualisieren und kündigen – inklusive Zahlungsintervallen, Laufzeit und MwSt.-Parametern.
Eine Subscription ist eine wiederkehrende Abrechnungsvereinbarung, die FlowAlp Pay für Sie verwaltet: Die Plattform belastet das gespeicherte Zahlungsmittel des Kunden zu jedem Zahlungsintervall. Mit den folgenden Endpoints erstellen Sie eine Subscription für einen bestehenden Kontakt, fragen sie ab, passen den Betrag an und kündigen die Vereinbarung. Sollen Kunden ein Abo stattdessen über den gehosteten Checkout starten, erstellen Sie ein Gateway mit den Parametern subscriptionState, subscriptionInterval, subscriptionPeriod und subscriptionCancellationInterval — das Konzept erklärt Abos und wiederkehrende Zahlungen.
Die Subscription-API ist produktiv im Einsatz, Teile ihres dokumentierten Verhaltens entwickeln sich jedoch noch weiter. Verhält sich ein Feld anders als hier beschrieben, gilt die tatsächliche API-Response — kontaktieren Sie im Zweifel den Support, bevor Sie sich darauf verlassen.
Subscription erstellen
https://api.pay.flowalp.com/v1.16/Subscription/v1.14 · v1.15 · v1.16Alle Intervall-Parameter verwenden ISO-8601-Dauerangaben im Format von PHPs DateInterval — zum Beispiel P1D (ein Tag), P1W (eine Woche), P1M (ein Monat) oder P1Y (ein Jahr).
Request-Parameter
| Parameter | Typ | Beschreibung |
|---|---|---|
| instance | string (erforderlich) | Query-Parameter: Name Ihrer Instance (Tenant). |
| userId | string (erforderlich) | ID des zu belastenden Kontakts. Sie erhalten sie im Transaktions-Webhook der Erstzahlung. |
| psp | string (erforderlich) | Numerische ID des Zahlungsanbieters, über den belastet wird. Ermitteln Sie sie über den Zahlungsanbieter-Endpoint. |
| amount | string (erforderlich) | Betrag, der pro Intervall belastet wird, als numerischer Wert in Minor Units (1490 = CHF 14.90). |
| currency | string (erforderlich) | ISO-Währungscode der Zahlung, zum Beispiel CHF. |
| purpose | string (erforderlich) | Wofür der Kunde bezahlt. |
| paymentInterval | string (erforderlich) | Wie oft der Betrag belastet wird, z. B. P1M für monatliche Abrechnung. |
| period | string (erforderlich) | Gesamtlaufzeit der Subscription, z. B. P1Y. |
| cancellationInterval | string (erforderlich) | Kündigungsfrist, z. B. P1M. |
| referenceId | string | Ihre interne Referenz; sie wird in Webhook-Benachrichtigungen zurückgegeben, damit Sie die Subscription Ihren Daten zuordnen können. |
| vatRate | string | Mehrwertsteuersatz als Prozentwert. |
curl -X POST "https://api.pay.flowalp.com/v1.16/Subscription/?instance=<tenant>" \
-H "x-api-key: <api-secret>" \
-H "Content-Type: application/json" \
-d '{
"userId": "12",
"psp": "4",
"amount": "1490",
"currency": "CHF",
"purpose": "Streaming plan",
"paymentInterval": "P1M",
"period": "P1Y",
"cancellationInterval": "P1M",
"referenceId": "PLAN-2026-042"
}'<?php
use FlowAlpPay\FlowAlpPay;
use FlowAlpPay\Models\Request\Subscription;
$client = new FlowAlpPay(
getenv('FLOWALP_TENANT'),
getenv('FLOWALP_API_SECRET'),
FlowAlpPay::DEFAULT_COMMUNICATION_HANDLER,
'pay.flowalp.com',
'1.16'
);
$subscription = new Subscription();
$subscription->setUserId(12);
$subscription->setPsp(4);
$subscription->setAmount(1490);
$subscription->setCurrency('CHF');
$subscription->setPurpose('Streaming plan');
$subscription->setPaymentInterval('P1M');
$subscription->setPeriod('P1Y');
$subscription->setCancellationInterval('P1M');
try {
$response = $client->create($subscription);
echo $response->getId();
} catch (Exception $e) {
error_log('Subscription create failed: ' . $e->getMessage());
}Subscription abrufen
https://api.pay.flowalp.com/v1.16/Subscription/{id}/v1.14 · v1.15 · v1.16| Parameter | Typ | Beschreibung |
|---|---|---|
| id | integer (erforderlich) | Path-Parameter: ID der abzurufenden Subscription. |
| instance | string (erforderlich) | Query-Parameter: Name Ihrer Instance (Tenant). |
curl "https://api.pay.flowalp.com/v1.16/Subscription/84/?instance=<tenant>" \
-H "x-api-key: <api-secret>"Subscriptions auflisten
https://api.pay.flowalp.com/v1.16/Subscription/v1.14 · v1.15 · v1.16| Parameter | Typ | Beschreibung |
|---|---|---|
| instance | string (erforderlich) | Query-Parameter: Name Ihrer Instance (Tenant). |
| orderByStartDate | string | ASC (Standard) oder DESC — Sortierung nach dem Startdatum der Subscription. |
| limit | integer | Maximale Anzahl zurückgegebener Zeilen. Standard 10. |
| offset | integer | Anzahl zu überspringender Zeilen. Standard 0. |
<?php
use FlowAlpPay\Models\Request\Subscription;
// $client: gleicher Konstruktor wie im Erstellungs-Beispiel oben
$request = new Subscription();
$request->setOrderByStartDate('DESC');
$request->setLimit(10);
try {
$subscriptions = $client->getAll($request);
foreach ($subscriptions as $subscription) {
echo $subscription->getId() . ': ' . $subscription->getStatus() . PHP_EOL;
}
} catch (Exception $e) {
error_log('Subscription list failed: ' . $e->getMessage());
}Subscription aktualisieren
Änderungen greifen ab dem nächsten Abrechnungszyklus. Das Anpassen des vatRate bei produktbasierten Subscriptions wird seit API-Version 1.13 unterstützt.
https://api.pay.flowalp.com/v1.16/Subscription/{id}/v1.14 · v1.15 · v1.16| Parameter | Typ | Beschreibung |
|---|---|---|
| id | integer (erforderlich) | Path-Parameter: ID der zu aktualisierenden Subscription. |
| instance | string (erforderlich) | Query-Parameter: Name Ihrer Instance (Tenant). |
| amount | string | Neuer Betrag in Minor Units, belastet ab dem nächsten Zahlungsintervall. |
| currency | string | ISO-Währungscode der Zahlung. |
| purpose | string | Neuer Zahlungszweck. |
| vatRate | string | Neuer Mehrwertsteuersatz als Prozentwert. |
curl -X PUT "https://api.pay.flowalp.com/v1.16/Subscription/84/?instance=<tenant>" \
-H "x-api-key: <api-secret>" \
-H "Content-Type: application/json" \
-d '{
"amount": "1990",
"currency": "CHF",
"purpose": "Streaming plan Plus"
}'<?php
use FlowAlpPay\Models\Request\Subscription;
// $client: gleicher Konstruktor wie im Erstellungs-Beispiel oben
$subscription = new Subscription();
$subscription->setId(84);
$subscription->setAmount(1990);
$subscription->setCurrency('CHF');
$subscription->setPurpose('Streaming plan Plus');
try {
$client->update($subscription);
} catch (Exception $e) {
error_log('Subscription update failed: ' . $e->getMessage());
}Subscription kündigen
Die Kündigung stoppt die wiederkehrende Abrechnung der Subscription. Die Operation ist über das offizielle SDK verfügbar; dort wird die Kündigung als DELETE-Request auf die Subscription-Ressource gesendet.
https://api.pay.flowalp.com/v1.16/Subscription/{id}/v1.14 · v1.15 · v1.16curl -X DELETE "https://api.pay.flowalp.com/v1.16/Subscription/84/?instance=<tenant>" \
-H "x-api-key: <api-secret>"<?php
use FlowAlpPay\Models\Request\Subscription;
// $client: gleicher Konstruktor wie im Erstellungs-Beispiel oben
$subscription = new Subscription();
$subscription->setId(84);
try {
$client->cancel($subscription);
} catch (Exception $e) {
error_log('Subscription cancel failed: ' . $e->getMessage());
}Response
Die Subscription-Endpoints antworten mit der üblichen Struktur: status plus ein data-Array mit Subscription-Objekten. paymentInterval spiegelt den Abrechnungsrhythmus, valid_until zeigt, bis wann die laufende Periode bezahlt ist, und die eingebetteten Objekte invoice und contact beschreiben, was wem in Rechnung gestellt wird.
{
"status": "success",
"data": [
{
"id": 84,
"uuid": "a5e0c919",
"status": "active",
"start": "2026-01-12",
"end": null,
"valid_until": "2027-01-12",
"paymentInterval": "P1M",
"invoice": {
"number": "Streaming plan",
"currency": "CHF",
"referenceId": "PLAN-2026-042",
"originalAmount": 1490,
"refundedAmount": 0
},
"contact": {
"id": 12,
"uuid": "4ab402a9",
"firstname": "Anna",
"lastname": "Keller",
"email": "anna.keller@example.com",
"countryISO": "CH"
}
}
]
}Fehler
| HTTP-Status | Bedeutung |
|---|---|
| 400 | Fehlerhafte Anfrage — das Feld message im Fehler-Body beschreibt das genaue Problem. |
| 404 | Auf dieser Instance existiert keine Subscription mit der angegebenen ID. |
Wiederkehrende Belastungen erscheinen als normale Transaktionen — verfolgen Sie sie über Transactions auflisten und abrufen oder über Webhook-Ereignisse. Die von psp akzeptierten Anbieter-IDs liefert der Zahlungsanbieter-Endpoint.