FlowAlp

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

POSThttps://api.pay.flowalp.com/v1.16/Subscription/v1.14 · v1.15 · v1.16

Alle 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

ParameterTypBeschreibung
instancestring (erforderlich)Query-Parameter: Name Ihrer Instance (Tenant).
userIdstring (erforderlich)ID des zu belastenden Kontakts. Sie erhalten sie im Transaktions-Webhook der Erstzahlung.
pspstring (erforderlich)Numerische ID des Zahlungsanbieters, über den belastet wird. Ermitteln Sie sie über den Zahlungsanbieter-Endpoint.
amountstring (erforderlich)Betrag, der pro Intervall belastet wird, als numerischer Wert in Minor Units (1490 = CHF 14.90).
currencystring (erforderlich)ISO-Währungscode der Zahlung, zum Beispiel CHF.
purposestring (erforderlich)Wofür der Kunde bezahlt.
paymentIntervalstring (erforderlich)Wie oft der Betrag belastet wird, z. B. P1M für monatliche Abrechnung.
periodstring (erforderlich)Gesamtlaufzeit der Subscription, z. B. P1Y.
cancellationIntervalstring (erforderlich)Kündigungsfrist, z. B. P1M.
referenceIdstringIhre interne Referenz; sie wird in Webhook-Benachrichtigungen zurückgegeben, damit Sie die Subscription Ihren Daten zuordnen können.
vatRatestringMehrwertsteuersatz als Prozentwert.
Subscription erstellenbash
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"
  }'
Subscription erstellen (PHP SDK)PHP
<?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

GEThttps://api.pay.flowalp.com/v1.16/Subscription/{id}/v1.14 · v1.15 · v1.16
ParameterTypBeschreibung
idinteger (erforderlich)Path-Parameter: ID der abzurufenden Subscription.
instancestring (erforderlich)Query-Parameter: Name Ihrer Instance (Tenant).
Subscription abrufenbash
curl "https://api.pay.flowalp.com/v1.16/Subscription/84/?instance=<tenant>" \
  -H "x-api-key: <api-secret>"

Subscriptions auflisten

GEThttps://api.pay.flowalp.com/v1.16/Subscription/v1.14 · v1.15 · v1.16
ParameterTypBeschreibung
instancestring (erforderlich)Query-Parameter: Name Ihrer Instance (Tenant).
orderByStartDatestringASC (Standard) oder DESC — Sortierung nach dem Startdatum der Subscription.
limitintegerMaximale Anzahl zurückgegebener Zeilen. Standard 10.
offsetintegerAnzahl zu überspringender Zeilen. Standard 0.
Subscriptions auflisten (PHP SDK)PHP
<?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.

PUThttps://api.pay.flowalp.com/v1.16/Subscription/{id}/v1.14 · v1.15 · v1.16
ParameterTypBeschreibung
idinteger (erforderlich)Path-Parameter: ID der zu aktualisierenden Subscription.
instancestring (erforderlich)Query-Parameter: Name Ihrer Instance (Tenant).
amountstringNeuer Betrag in Minor Units, belastet ab dem nächsten Zahlungsintervall.
currencystringISO-Währungscode der Zahlung.
purposestringNeuer Zahlungszweck.
vatRatestringNeuer Mehrwertsteuersatz als Prozentwert.
Subscription aktualisierenbash
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"
  }'
Subscription aktualisieren (PHP SDK)PHP
<?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.

DELETEhttps://api.pay.flowalp.com/v1.16/Subscription/{id}/v1.14 · v1.15 · v1.16
Subscription kündigenbash
curl -X DELETE "https://api.pay.flowalp.com/v1.16/Subscription/84/?instance=<tenant>" \
  -H "x-api-key: <api-secret>"
Subscription kündigen (PHP SDK)PHP
<?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.

Beispiel-ResponseJSON
{
  "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-StatusBedeutung
400Fehlerhafte Anfrage — das Feld message im Fehler-Body beschreibt das genaue Problem.
404Auf 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.