FlowAlp

API Subscriptions

July 30, 2026

Créez, récupérez, mettez à jour et annulez des abonnements FlowAlp Pay par API, avec intervalles de facturation récurrente, durée et TVA.

Une Subscription est un accord de facturation récurrente géré par FlowAlp Pay : la plateforme débite le moyen de paiement enregistré du client à chaque intervalle de paiement. Les endpoints ci-dessous créent un abonnement pour un contact existant, le consultent, ajustent le montant facturé et annulent l'accord. Si vous préférez que vos clients démarrent l'abonnement via le checkout hébergé, créez un Gateway avec les paramètres subscriptionState, subscriptionInterval, subscriptionPeriod et subscriptionCancellationInterval — le concept est expliqué dans Abonnements et paiements récurrents.

L'API Subscription est utilisée en production, mais une partie de son comportement documenté évolue encore. Si un champ répond différemment de ce qui est décrit ici, considérez la réponse réelle de l'API comme la référence et contactez le support avant de vous y fier.

Créer une Subscription

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

Tous les paramètres d'intervalle utilisent des durées ISO 8601 au format du DateInterval de PHP — par exemple P1D (un jour), P1W (une semaine), P1M (un mois) ou P1Y (un an).

Paramètres de la requête

ParamètreTypeDescription
instancestring (requis)Paramètre de requête : nom de votre instance (tenant).
userIdstring (requis)ID du contact à facturer. Vous le recevez dans le webhook de transaction du paiement initial.
pspstring (requis)ID numérique du fournisseur de paiement à débiter. Récupérez-le via l'endpoint des fournisseurs de paiement.
amountstring (requis)Montant débité à chaque intervalle, valeur numérique en unités mineures (1490 = CHF 14.90).
currencystring (requis)Code devise ISO du paiement, par exemple CHF.
purposestring (requis)Ce que le client paie.
paymentIntervalstring (requis)Fréquence du débit, p. ex. P1M pour une facturation mensuelle.
periodstring (requis)Durée totale de l'abonnement, p. ex. P1Y.
cancellationIntervalstring (requis)Délai de résiliation, p. ex. P1M.
referenceIdstringVotre référence interne ; elle est renvoyée dans les notifications webhook pour rattacher l'abonnement à vos données.
vatRatestringTaux de TVA en pourcentage.
Créer un abonnementbash
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"
  }'
Créer un abonnement (SDK PHP)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());
}

Récupérer une Subscription

GEThttps://api.pay.flowalp.com/v1.16/Subscription/{id}/v1.14 · v1.15 · v1.16
ParamètreTypeDescription
idinteger (requis)Paramètre de chemin : ID de l'abonnement à récupérer.
instancestring (requis)Paramètre de requête : nom de votre instance (tenant).
Récupérer un abonnementbash
curl "https://api.pay.flowalp.com/v1.16/Subscription/84/?instance=<tenant>" \
  -H "x-api-key: <api-secret>"

Lister les Subscriptions

GEThttps://api.pay.flowalp.com/v1.16/Subscription/v1.14 · v1.15 · v1.16
ParamètreTypeDescription
instancestring (requis)Paramètre de requête : nom de votre instance (tenant).
orderByStartDatestringASC (défaut) ou DESC — tri selon la date de début de l'abonnement.
limitintegerNombre maximal de lignes renvoyées. Défaut 10.
offsetintegerNombre de lignes à ignorer. Défaut 0.
Lister les abonnements (SDK PHP)PHP
<?php
use FlowAlpPay\Models\Request\Subscription;

// $client : même constructeur que dans l'exemple de création ci-dessus
$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());
}

Mettre à jour une Subscription

Les modifications s'appliquent à partir du prochain cycle de facturation. L'ajustement du vatRate des abonnements adossés à des produits est pris en charge depuis la version d'API 1.13.

PUThttps://api.pay.flowalp.com/v1.16/Subscription/{id}/v1.14 · v1.15 · v1.16
ParamètreTypeDescription
idinteger (requis)Paramètre de chemin : ID de l'abonnement à mettre à jour.
instancestring (requis)Paramètre de requête : nom de votre instance (tenant).
amountstringNouveau montant en unités mineures, débité à partir du prochain intervalle de paiement.
currencystringCode devise ISO du paiement.
purposestringNouveau motif de paiement.
vatRatestringNouveau taux de TVA en pourcentage.
Mettre à jour un abonnementbash
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"
  }'
Mettre à jour un abonnement (SDK PHP)PHP
<?php
use FlowAlpPay\Models\Request\Subscription;

// $client : même constructeur que dans l'exemple de création ci-dessus
$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());
}

Annuler une Subscription

L'annulation met fin à la facturation récurrente de l'abonnement. L'opération est exposée par le SDK officiel, où la résiliation est envoyée comme requête DELETE sur la ressource subscription.

DELETEhttps://api.pay.flowalp.com/v1.16/Subscription/{id}/v1.14 · v1.15 · v1.16
Annuler un abonnementbash
curl -X DELETE "https://api.pay.flowalp.com/v1.16/Subscription/84/?instance=<tenant>" \
  -H "x-api-key: <api-secret>"
Annuler un abonnement (SDK PHP)PHP
<?php
use FlowAlpPay\Models\Request\Subscription;

// $client : même constructeur que dans l'exemple de création ci-dessus
$subscription = new Subscription();
$subscription->setId(84);

try {
    $client->cancel($subscription);
} catch (Exception $e) {
    error_log('Subscription cancel failed: ' . $e->getMessage());
}

Réponse

Les endpoints Subscription répondent avec l'enveloppe habituelle : status plus un tableau data d'objets subscription. paymentInterval reflète le rythme de facturation, valid_until indique jusqu'à quand la période en cours est payée, et les objets imbriqués invoice et contact décrivent ce qui est facturé et à qui.

Exemple de réponseJSON
{
  "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"
      }
    }
  ]
}

Erreurs

Statut HTTPSignification
400Requête mal formée — le champ message du corps d'erreur décrit le problème exact.
404Aucun abonnement avec l'ID indiqué n'existe sur cette instance.

Les débits récurrents apparaissent comme des transactions normales : suivez-les avec Lister et récupérer les Transactions ou via les événements webhook. Pour connaître les ID de fournisseurs acceptés par psp, appelez l'endpoint des fournisseurs de paiement.