API — Facturation
Les endpoints de facturation gèrent l'abonnement Stripe de votre tenant SendAs.me.
Modèle de facturation
SendAs.me facture 0,99 € par boîte email connectée par mois.
Définition d'une boîte email : Un compte OAuth (Gmail ou Office 365) connecté à une application SendAs.me. La facturation est par connexion OAuth, pas par personne.
- Un utilisateur qui connecte Gmail = 1 licence
- Un utilisateur qui connecte Gmail et Office 365 = 2 licences
- 3 applications avec 5 boîtes OAuth distinctes → 4,95 €/mois
La facturation est gérée via Stripe Billing Meters et s'effectue automatiquement en fin de mois.
GET /stripe/subscription
Retourne les détails de l'abonnement Stripe actuel du tenant.
Requête :
GET /stripe/subscription
X-Api-Secret: votre_api_secret
Réponse 200 (abonnement actif) :
{
"status": "active",
"stripe_subscription_id": "sub_1234567890abcdef",
"stripe_customer_id": "cus_abcdef1234567890",
"current_period_start": "2024-01-01T00:00:00Z",
"current_period_end": "2024-02-01T00:00:00Z",
"cancel_at_period_end": false,
"active_users_count": 5,
"amount_per_user": 0.99,
"currency": "eur",
"estimated_invoice": {
"amount": 4.95,
"currency": "eur",
"period": "2024-01"
},
"payment_method": {
"type": "card",
"brand": "visa",
"last4": "4242",
"exp_month": 12,
"exp_year": 2026
}
}
Réponse 200 (sans abonnement) :
{
"status": "no_subscription",
"stripe_customer_id": null,
"active_users_count": 0,
"amount_per_user": 0.99,
"currency": "eur"
}
Statuts possibles :
| Statut | Description |
|---|---|
active | Abonnement actif et à jour |
trialing | Période d'essai en cours |
past_due | Paiement en retard — mise à jour du moyen de paiement requise |
canceled | Abonnement annulé |
no_subscription | Aucun abonnement créé |
POST /stripe/checkout-setup
Crée une session Stripe Checkout ou Customer Portal pour configurer ou modifier le moyen de paiement.
Requête :
POST /stripe/checkout-setup
X-Api-Secret: votre_api_secret
Content-Type: application/json
Corps :
| Champ | Type | Obligatoire | Description |
|---|---|---|---|
portal_url | string | Oui | URL de retour après la session Stripe (généralement l'URL du portail) |
{
"portal_url": "https://app.sendas.me/billing"
}
Réponse 200 :
{
"checkout_url": "https://checkout.stripe.com/pay/cs_live_a1b2c3d4e5f6...",
"session_id": "cs_live_a1b2c3d4e5f6g7h8i9j0",
"expires_at": "2024-01-15T11:30:00Z"
}
Redirigez l'utilisateur vers checkout_url pour compléter la configuration du paiement.
Le portail SendAs.me appelle automatiquement cet endpoint lorsque l'utilisateur clique sur "Gérer l'abonnement" ou "Ajouter un moyen de paiement". La session Stripe expire après 30 minutes.
POST /stripe/cancel-subscription
Annule l'abonnement Stripe à la fin de la période de facturation courante. Le tenant conserve l'accès jusqu'à la fin de la période payée.
Requête :
POST /stripe/cancel-subscription
X-Api-Secret: votre_api_secret
Réponse 200 :
{
"status": "cancellation_scheduled",
"cancel_at": "2024-02-01T00:00:00Z",
"message": "Votre abonnement sera annulé le 1er février 2024. Vous conservez l'accès jusqu'à cette date."
}
L'annulation ne prend pas effet immédiatement. Vous continuez à bénéficier du service jusqu'à la fin de la période pour laquelle vous avez payé. Pour réactiver avant la date d'annulation, contactez le support ou utilisez le portail.
Réponse 400 (pas d'abonnement actif) :
{
"detail": "Aucun abonnement actif à annuler"
}
Webhooks Stripe
SendAs.me écoute les webhooks Stripe pour maintenir l'état de facturation à jour. Les événements traités incluent :
| Événement Stripe | Action SendAs.me |
|---|---|
customer.subscription.created | Activation du compte |
customer.subscription.updated | Mise à jour du statut |
customer.subscription.deleted | Désactivation du compte |
invoice.payment_succeeded | Confirmation du paiement |
invoice.payment_failed | Notification de paiement échoué |
Pour que la facturation fonctionne, vous devez configurer l'endpoint webhook Stripe dans votre Dashboard Stripe :
- URL :
https://api.sendas.me/stripe/webhook - Événements : Sélectionner tous les événements
customer.subscription.*etinvoice.*