Aller au contenu principal

Subscriptions API

Gestion des plans d'abonnement, des souscriptions utilisateur et des operations de facturation.

Base URL : /api/v2

Plans d'abonnement

Endpoints Plans

MethodeEndpointDescriptionAuth
GET/subscription-plansPlans actifs disponiblesNon
GET/subscription-plans/compareComparaison des plans (feature matrix)Non
GET/subscription-plans/:idDetails d'un plan par UUIDNon

GET /subscription-plans

Obtenir tous les plans d'abonnement disponibles.

GET /api/v2/subscription-plans

Reponse 200 OK

{
"data": [
{
"id": "plan-free",
"name": "Free",
"description": "Acces basique avec publicites",
"priceMonthly": 0,
"priceYearly": 0,
"currency": "EUR",
"features": {
"maxQuality": "SD_480",
"maxScreens": 1,
"hasAds": true,
"hasDownloads": false,
"hasHdr": false
},
"isPopular": false
},
{
"id": "plan-premium",
"name": "Premium",
"description": "Full HD, telechargements, 4 ecrans",
"priceMonthly": 9.99,
"priceYearly": 99.99,
"currency": "EUR",
"features": {
"maxQuality": "FHD_1080",
"maxScreens": 4,
"hasAds": false,
"hasDownloads": true,
"hasHdr": true
},
"isPopular": true,
"badge": "Best Value"
}
]
}

Comparaison des plans

FeatureFreeBasicPremiumUltimate
Prix/mois04.999.9914.99
Qualite maxSDHDFHD4K
Ecrans1246
PublicitesOuiNonNonNon
TelechargementsNonNonOuiOui
HDRNonNonOuiOui
Dolby AtmosNonNonNonOui
Acces anticipeNonNonNonOui

Abonnements utilisateur

Endpoints

MethodeEndpointDescriptionAuth
GET/subscriptions/currentAbonnement actifOui
GET/subscriptions/historyHistorique des abonnementsOui
POST/subscriptionsSouscrire a un planOui
GET/subscriptions/change-preview/:newPlanIdPrevisualisation changement de planOui
POST/subscriptions/changeChanger de planOui
POST/subscriptions/cancelAnnuler l'abonnementOui
POST/subscriptions/reactivateReactiver un abonnement annuleOui
POST/subscriptions/trialDemarrer un essai gratuitOui
POST/subscriptions/change-planUpgrade/downgrade de planOui
PATCH/subscriptions/payment-methodMettre a jour le moyen de paiementOui
GET/subscriptions/invoicesHistorique de facturationOui

GET /subscriptions/current

Obtenir l'abonnement actif du compte.

GET /api/v2/subscriptions/current
Authorization: Bearer <access_token>

Reponse 200 OK

{
"id": "sub-uuid",
"planId": "plan-premium",
"planName": "Premium",
"status": "ACTIVE",
"billingCycle": "MONTHLY",
"currentPeriodStart": "2025-01-01T00:00:00Z",
"currentPeriodEnd": "2025-02-01T00:00:00Z",
"cancelAtPeriodEnd": false,
"features": {
"maxQuality": "FHD_1080",
"maxScreens": 4,
"hasAds": false,
"hasDownloads": true
},
"paymentMethod": {
"type": "CARD",
"last4": "4242",
"brand": "visa",
"expiryMonth": 12,
"expiryYear": 2027
},
"nextBillingDate": "2025-02-01T00:00:00Z",
"nextBillingAmount": 9.99,
"daysRemaining": 17,
"canUpgrade": true,
"canDowngrade": true,
"createdAt": "2024-06-01T00:00:00Z"
}

POST /subscriptions

Souscrire a un plan.

POST /api/v2/subscriptions
Authorization: Bearer <access_token>
Content-Type: application/json

{
"planId": "plan-premium",
"paymentMethodId": "pm-uuid",
"autoRenew": true
}

Flux d'abonnement

1. GET /subscription-plans                           --> Choisir un plan
2. POST /subscriptions { planId, paymentMethodId } --> Creer l'abonnement
--> Si plan gratuit : activation immediate (ACTIVE)
--> Si plan payant : statut PENDING + transaction PENDING
3. POST /webhooks/stripe ou /webhooks/paypal --> Confirmation paiement
--> Subscription passe a ACTIVE

GET /subscriptions/change-preview/:newPlanId

Previsualisation du changement de plan (prorata, credit, montant du).

GET /api/v2/subscriptions/change-preview/plan-ultimate
Authorization: Bearer <access_token>

POST /subscriptions/change

Changer de plan d'abonnement.

POST /api/v2/subscriptions/change
Authorization: Bearer <access_token>
Content-Type: application/json

{
"newPlanId": "plan-ultimate",
"immediate": true
}

Flux de changement de plan

1. GET /subscriptions/change-preview/:newPlanId  --> Voir le prorata
2. POST /subscriptions/change { newPlanId, immediate: true }
--> UPGRADE avec montant du > 0 : transaction de paiement creee
--> DOWNGRADE ou upgrade gratuit : plan mis a jour immediatement
--> immediate: false : changement programme au renouvellement

POST /subscriptions/cancel

Annuler l'abonnement.

POST /api/v2/subscriptions/cancel
Authorization: Bearer <access_token>
Content-Type: application/json

{
"reason": "too_expensive",
"immediate": false
}

Reponse 200 OK

{
"id": "sub-uuid",
"status": "ACTIVE",
"cancelAtPeriodEnd": true,
"canceledAt": "2025-01-15T10:30:00Z",
"accessEndsAt": "2025-02-01T00:00:00Z",
"message": "Your subscription will end on February 1, 2025"
}

POST /subscriptions/reactivate

Reactiver un abonnement en attente d'annulation (avant la fin de la periode).

POST /api/v2/subscriptions/reactivate
Authorization: Bearer <access_token>

Moyens de paiement

MethodeEndpointDescriptionAuth
GET/payment-methodsLister mes moyens de paiementOui
GET/payment-methods/defaultMoyen par defaut (204 si aucun)Oui
GET/payment-methods/summaryResume des paiementsOui
GET/payment-methods/transactionsHistorique des transactionsOui
GET/payment-methods/:idDetails d'un moyenOui
POST/payment-methodsAjouter un moyenOui
POST/payment-methods/:id/set-defaultDefinir comme defautOui
DELETE/payment-methods/:idSupprimer un moyenOui

Types supportes

TypeDescription
CARDCarte bancaire (Visa, Mastercard, Amex)
MOBILE_MONEYMobile Money
PAYPALPayPal
APPLE_PAYApple Pay
GOOGLE_PAYGoogle Pay
BANK_ACCOUNTVirement bancaire

Providers

STRIPE, PAYPAL, ORANGE_MONEY, MTN_MONEY, MANUAL

info

Maximum 5 moyens de paiement par utilisateur.

Statuts d'abonnement

StatutDescription
ACTIVEAbonnement actif
TRIALINGEn periode d'essai gratuit
PAST_DUEPaiement echoue, periode de grace
CANCELEDAnnule, acces jusqu'a la fin de la periode
UNPAIDPaiement echoue, acces suspendu
EXPIREDAbonnement termine

Cycle de vie d'un abonnement

[Aucun abonnement] --> Free
Free --> Trialing (demarrer l'essai)
Free --> Active (souscrire)
Trialing --> Active (fin d'essai + paiement OK)
Trialing --> Canceled (fin d'essai sans paiement)
Active --> Active (renouvellement)
Active --> Canceled (annulation)
Active --> PastDue (echec de paiement)
PastDue --> Active (paiement reussi)
PastDue --> Unpaid (fin de la periode de grace)
Canceled --> Active (reactivation)
Canceled --> Expired (fin de la periode)
Unpaid --> Active (paiement OK)
Unpaid --> Expired (suspension du compte)

Webhooks de paiement

MethodeEndpointDescriptionAuth
POST/webhooks/stripeWebhook Stripe (signature verifiee)Signature
POST/webhooks/paypalWebhook PayPal (signature verifiee)Signature

L'authentification se fait par signature cryptographique du provider, pas par JWT.

Codes d'erreur

CodeHTTPDescription
SUB_001404Aucun abonnement actif
SUB_002409Deja abonne
SUB_003409Periode d'essai deja utilisee
SUB_004400ID de plan invalide
SUB_005402Paiement requis
SUB_006402Paiement echoue
SUB_007409Impossible de reactiver