API Subscription
July 30, 2026
Crea, recupera, aggiorna e annulla le subscription FlowAlp Pay via API, con intervalli di fatturazione ricorrente, durata del periodo e IVA.
Una Subscription è un accordo di fatturazione ricorrente gestito da FlowAlp Pay: la piattaforma addebita il metodo di pagamento salvato del cliente a ogni intervallo di pagamento. Gli endpoint qui sotto creano una subscription per un contatto esistente, la consultano, ne modificano l'importo e la annullano. Se invece vuoi far partire l'abbonamento dal checkout ospitato, crea un Gateway con i parametri subscriptionState, subscriptionInterval, subscriptionPeriod e subscriptionCancellationInterval — il concetto è spiegato in Abbonamenti e pagamenti ricorrenti.
La Subscription API è usata in produzione, ma parte del suo comportamento documentato è ancora in evoluzione. Se un campo risponde diversamente da quanto descritto qui, considera autorevole la response reale dell'API e contatta il supporto prima di farci affidamento.
Creare una Subscription
https://api.pay.flowalp.com/v1.16/Subscription/v1.14 · v1.15 · v1.16Tutti i parametri di intervallo usano stringhe di durata ISO 8601 nel formato del DateInterval di PHP — ad esempio P1D (un giorno), P1W (una settimana), P1M (un mese) o P1Y (un anno).
Parametri della request
| Parametro | Tipo | Descrizione |
|---|---|---|
| instance | string (obbligatorio) | Query parameter: nome della tua instance (tenant). |
| userId | string (obbligatorio) | ID del contatto da addebitare. Lo ricevi nel webhook della transazione del pagamento iniziale. |
| psp | string (obbligatorio) | ID numerico del payment provider da usare per l'addebito. Puoi trovarlo con l'endpoint dei payment provider. |
| amount | string (obbligatorio) | Importo addebitato a ogni intervallo, come valore numerico in unità minori (1490 = CHF 14.90). |
| currency | string (obbligatorio) | Codice valuta ISO del pagamento, ad esempio CHF. |
| purpose | string (obbligatorio) | Che cosa sta pagando il cliente. |
| paymentInterval | string (obbligatorio) | Frequenza dell'addebito, ad es. P1M per la fatturazione mensile. |
| period | string (obbligatorio) | Durata complessiva della subscription, ad es. P1Y. |
| cancellationInterval | string (obbligatorio) | Preavviso di disdetta, ad es. P1M. |
| referenceId | string | Il tuo riferimento interno; viene restituito nelle notifiche webhook per abbinare la subscription ai tuoi dati. |
| vatRate | string | Aliquota IVA come valore percentuale. |
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());
}Recuperare una Subscription
https://api.pay.flowalp.com/v1.16/Subscription/{id}/v1.14 · v1.15 · v1.16| Parametro | Tipo | Descrizione |
|---|---|---|
| id | integer (obbligatorio) | Path parameter: ID della subscription da recuperare. |
| instance | string (obbligatorio) | Query parameter: nome della tua instance (tenant). |
curl "https://api.pay.flowalp.com/v1.16/Subscription/84/?instance=<tenant>" \
-H "x-api-key: <api-secret>"Elencare le Subscription
https://api.pay.flowalp.com/v1.16/Subscription/v1.14 · v1.15 · v1.16| Parametro | Tipo | Descrizione |
|---|---|---|
| instance | string (obbligatorio) | Query parameter: nome della tua instance (tenant). |
| orderByStartDate | string | ASC (default) oppure DESC — ordinamento per data di inizio della subscription. |
| limit | integer | Numero massimo di righe da restituire. Default 10. |
| offset | integer | Numero di righe da saltare. Default 0. |
<?php
use FlowAlpPay\Models\Request\Subscription;
// $client: stesso costruttore dell'esempio di creazione qui sopra
$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());
}Aggiornare una Subscription
Le modifiche si applicano dal ciclo di fatturazione successivo. L'aggiornamento del vatRate per le subscription basate su prodotti è supportato dalla versione API 1.13.
https://api.pay.flowalp.com/v1.16/Subscription/{id}/v1.14 · v1.15 · v1.16| Parametro | Tipo | Descrizione |
|---|---|---|
| id | integer (obbligatorio) | Path parameter: ID della subscription da aggiornare. |
| instance | string (obbligatorio) | Query parameter: nome della tua instance (tenant). |
| amount | string | Nuovo importo in unità minori, addebitato a partire dal prossimo intervallo di pagamento. |
| currency | string | Codice valuta ISO del pagamento. |
| purpose | string | Nuova causale del pagamento. |
| vatRate | string | Nuova aliquota IVA come valore percentuale. |
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: stesso costruttore dell'esempio di creazione qui sopra
$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());
}Annullare una Subscription
L'annullamento interrompe la fatturazione ricorrente della subscription. L'operazione è esposta tramite l'SDK ufficiale, dove la disdetta viene inviata come richiesta DELETE sulla risorsa subscription.
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: stesso costruttore dell'esempio di creazione qui sopra
$subscription = new Subscription();
$subscription->setId(84);
try {
$client->cancel($subscription);
} catch (Exception $e) {
error_log('Subscription cancel failed: ' . $e->getMessage());
}Response
Gli endpoint Subscription rispondono con la struttura consueta: status più un array data di oggetti subscription. paymentInterval riflette il ritmo di fatturazione, valid_until indica fino a quando il periodo corrente è pagato, mentre gli oggetti invoice e contact descrivono che cosa viene fatturato e a chi.
{
"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"
}
}
]
}Errori
| Stato HTTP | Significato |
|---|---|
| 400 | Richiesta non valida — il campo message del body di errore descrive il problema esatto. |
| 404 | Nessuna subscription con l'ID indicato esiste su questa instance. |
Gli addebiti ricorrenti compaiono come normali transazioni: monitorali con Elencare e recuperare le Transaction o tramite gli eventi webhook. Per gli ID dei provider accettati da psp interroga l'endpoint dei payment provider.