Démarrage rapide

De zéro à votre première résolution de tenant en moins de cinq minutes.

Ce guide suppose que vous avez déjà un compte SaaSes. Sinon, créez un workspace (essai gratuit de 14 jours).

1. Enregistrer une Application

Une Applicationreprésente l'un de vos produits SaaS. Allez dans la console /applications et cliquez sur Nouvelle application.

Vous devrez choisir :

  • Un slug stable (par ex. crs) — il identifie l'app dans les URLs et ne pourra plus être modifié.
  • Un modèle de tenancy : comment votre app reconnaît un tenant à l'exécution (par ID, sous-domaine, paramètre d'URL, header HTTP…).
  • Optionnel : un webhook URL pour recevoir les événements de cycle de vie.

La clé API n'est affichée qu'une seule fois

À la création, SaaSes vous montre la clé API en clair. Stockez-la immédiatementdans le coffre-fort de secrets de votre app. Si vous la perdez, utilisez la rotation de clé sur la page de l'application.

2. Créer au moins un Plan

Sur la page de votre application, faites Nouveau plan. Un plan contient un nom, un prix, une fréquence de facturation, et surtout deux objets JSON libres : quotas et features.

{
  "name": "Pro",
  "price": 449.00,
  "billingCycle": "MONTHLY",
  "quotas": {
    "maxVehicles": 30,
    "maxUsers": 4
  },
  "features": {
    "advancedReports": true,
    "apiAccess": false
  }
}

Quotas opaques

SaaSes ne sait pas ce qu'est maxVehicles. C'est votre app qui doit lire cette valeur dans la réponse de l'API de résolution et bloquer la création du 31e véhicule.

3. Créer un Tenant géré

Allez dans /tenantsAjouter un tenant. Renseignez le nom, l'email, et éventuellement des métadonnées (numéro de TVA, secteur d'activité…).

4. Souscrire le Tenant à l'Application

Sur la fiche du tenant, cliquez sur Souscrire à une application, choisissez l'app, le plan, et fournissez la routingConfig — c'est elle qui dira à votre app comment retrouver les ressources de ce tenant.

Pour un modèle TENANT_ID_SINGLE_DB :

{
  "tenantId": "casaride"
}

Pour SUBDOMAIN_MULTI_DB :

{
  "subdomain": "casaride",
  "databases": [
    { "type": "MAIN", "url": "jdbc:postgresql://...", "username": "...", "password": "..." }
  ]
}

5. Appeler l'API de résolution depuis votre app

À chaque démarrage de session utilisateur (et pas à chaque requête HTTP !), votre app appelle SaaSes pour obtenir le contexte du tenant :

curl -H "Authorization: Bearer sk_acme_AbCdEf..." \
  "https://app.saases.io/api/resolve/by-tenant-id?tenantId=casaride"

Réponse :

{
  "tenantId": "casaride",
  "tenantName": "Casa Ride SARL",
  "status": "ACTIVE",
  "subscriptionStatus": "ACTIVE",
  "plan": { "name": "Pro" },
  "effectiveQuotas": { "maxVehicles": 30, "maxUsers": 4 },
  "features": { "advancedReports": true, "apiAccess": false },
  "routingConfig": { "tenantId": "casaride" }
}

6. Mettre en cache et écouter les webhooks

  1. Mettez la réponse en cache pour la durée de la session utilisateur (ou quelques minutes minimum).
  2. Sur réception d'un webhook subscription.plan_changed ou subscription.suspended, invalidez le cache pour ce tenant.
  3. Lisez effectiveQuotas avant chaque action métier sensible (création de véhicule, ajout d'utilisateur…).

C'est tout

Vous pouvez maintenant onboarder vos clients depuis la console SaaSes : la partie tarification, les essais, les suspensions, tout passe par SaaSes. Votre app n'a qu'à respecter les quotas qu'elle reçoit.