Démarrage rapide
De zéro à votre première résolution de tenant en moins de cinq minutes.
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
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
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 /tenants → Ajouter 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
- Mettez la réponse en cache pour la durée de la session utilisateur (ou quelques minutes minimum).
- Sur réception d'un webhook
subscription.plan_changedousubscription.suspended, invalidez le cache pour ce tenant. - Lisez
effectiveQuotasavant chaque action métier sensible (création de véhicule, ajout d'utilisateur…).
C'est tout