meta { name: 04 Reactivate type: http seq: 4 } post { url: {{baseUrl}}/api/v1/billing/reactivate body: none auth: bearer } auth:bearer { token: {{token}} } tests { test("200 OK", function () { expect(res.getStatus()).to.equal(200); }); test("ok=true", function () { expect(res.getBody().data.ok).to.equal(true); }); } docs { POST /api/v1/billing/reactivate — auth requise Annule une annulation programmée — la subscription continue son cycle normal, sans paiement immédiat. Effets : - Retrieve le sub Stripe pour savoir laquelle des 2 mécaniques est posée (Stripe REFUSE qu'on passe `cancel_at_period_end` ET `cancel_at` dans le même update : "Please pass in only one") - Si `cancel_at` est posé → on envoie `cancel_at: null` - Sinon → on envoie `cancel_at_period_end: false` - Persiste sur l'org : `cancel_at_period_end = false` Idempotent : - Si l'org n'a pas de sub Stripe → 400 `no_active_subscription` - Si l'annulation n'est PAS programmée → 200 `{ok: true}` sans toucher Stripe Réponse : ```json { "data": { "ok": true } } ``` ## Pour tester 1. Annule la sub via le Customer Portal (03 Open portal → click Cancel) 2. Vérifie via **01 Get subscription** : `cancelAtPeriodEnd: true` 3. Lance cette requête 4. Re-vérifie : `cancelAtPeriodEnd: false` }