Infrastructure de facturation pour SaaS multi-tenant
1 clé master, N chaînes ISCA indépendantes. Chaque vendeur de votre plateforme a son propre ledger fiscal SHA-256 — sans que vous touchiez à leur comptabilité.
$api = ScellApiClient::withApiKey('sk_live_...');
$invoice = $api->invoices()->builder()
->outgoing()
->facturX()
->issueDate('2026-05-16')
->dueDate('2026-06-15')
->buyer('98765432109876', 'Acme SARL',
new Address('2 av Client', '75002', 'Paris'))
->addLine('Consultation', 10, 150.00, 20.0)
->create();
echo $invoice->invoice_number; // FAC-202605-00123✓ FAC-202605-00123 — PDF/A-3b + XML CII EN16931
Contexte client typique
Thomas Renard
CPO Marketplace B2B
20–200 ETP · Node.js / React
“Thomas dirige le produit d'une marketplace B2B de restauration avec 200 fournisseurs actifs. Chaque fournisseur doit émettre des factures Factur-X à ses restaurants clients depuis 2026. Thomas veut inclure la facturation électronique dans son plan Pro sans construire de ledger fiscal en interne.”
Blocages courants
- 1Construire un ledger fiscal ISCA pour chaque vendeur en interne coûte 3–6 mois de développement
- 2Une faille dans la chaîne fiscale d'un sub-tenant peut rejaillir sur la responsabilité DGFiP de la plateforme
- 3L'onboarding de nouveaux vendeurs sur Peppol (SuperPDP) est un processus KYB complexe à gérer
- 4Les chaînes ISCA de chaque vendeur doivent être strictement isolées — un vendeur ne doit jamais voir les données d'un autre
- 5Facturer la facturation électronique comme feature premium nécessite une infrastructure dédiée que peu de SaaS ont
- 6Les acheteurs B2B exigent Factur-X depuis 2026 — les vendeurs sans solution perdent des contrats
La réponse Scell.io
Scell.io expose l'architecture B2B2B complète : 1 clé `sk_*` master → N sub-tenants isolés. Pour chaque vendeur : `POST /api/v1/sub-tenants` + `sub_tenant_id` dans le payload de chaque facture. Le widget `<scell-onboarding>` gère les 5 étapes d'onboarding Peppol (KYB SuperPDP, PKCE OAuth2, polling statut) — votre plateforme n'appelle qu'un seul webhook quand le vendeur passe `active`. Chaque chaîne ISCA est calculée indépendamment par paire `(tenant, sub_tenant)` — bug isolation garantie par des triggers PostgreSQL `SECURITY DEFINER`, pas par le code applicatif.
Architecture B2B2B
1 clé `sk_*` master, N sub-tenants via `sub_tenant_id` dans le payload, pas de clé par vendeur
Widget `<scell-onboarding>`
3 lignes HTML, 5 étapes KYB SuperPDP gérées, webhook `active` quand prêt
Isolation ISCA par paire
chaque chaîne SHA-256 est indépendante, triggers PostgreSQL, pas de code applicatif
Onboarding KYB SuperPDP géré
polling toutes les 15 min, mail de bienvenue automatique au vendeur, 0 dev à écrire
Clôture quotidienne par sub-tenant
CSV format de marché signé S3, ancrage OTS Bitcoin, `GET /fiscal/integrity`
Tarification usage-based
0,04€/facture + 1,20€/signataire, pas de limite sur le nombre de sub-tenants
Contexte & enjeux
La réforme facturation électronique 2026 crée un problème structurel pour les SaaS et marketplaces multi-tenants : chacun de vos vendeurs ou clients doit avoir son propre espace fiscal certifié, sa propre chaîne de hash ISCA, son propre accès au réseau Peppol via SuperPDP. Construire cette infrastructure en interne représente 3 à 6 mois de développement, un risque de conformité DGFiP permanent et un coût de maintenance significatif. L'architecture sub-tenants de Scell.io résout ce problème structurellement. Une clé `sk_*` master couvre l'ensemble de la plateforme. Chaque vendeur est créé comme sub-tenant via un appel API ou le widget `<scell-onboarding>` embeddable en 3 lignes de code. Chaque sub-tenant a une chaîne ISCA isolée — un bug ou une corruption sur la chaîne d'un vendeur n'affecte jamais les autres. L'onboarding KYB vers SuperPDP est géré par Scell.io via polling toutes les 15 minutes.
Cas d'usage réels
- Marketplace de services B2B avec 50–500 fournisseurs qui émettent des factures Factur-X indépendantes
- SaaS ERP qui inclut la facturation électronique dans son plan Pro — chaque client a sa propre chaîne ISCA
- Plateforme freelance dont les prestataires facturent leurs clients avec Factur-X conforme Peppol
- Néobanque qui offre la facturation électronique certifiée comme service différenciateur de son compte pro
- SaaS immobilier où chaque agence émet ses propres factures de mandat et d'honoraires sous chaîne ISCA
- Plateforme de commerce électronique B2B où chaque vendeur a son propre audit trail fiscal isolé
Questions fréquentes
Combien de sub-tenants peut-on créer avec une clé master Scell.io ?
Il n'y a pas de limite technique sur le nombre de sub-tenants. La tarification est basée sur les volumes de factures et signatures émis, pas sur le nombre de sub-tenants. Une marketplace avec 500 vendeurs peut avoir 500 sub-tenants actifs sous une seule clé `sk_*` — le coût est 0,04€ par facture émise par chaque vendeur, quel que soit le nombre de vendeurs.
Comment fonctionne l'isolation des données entre sub-tenants ?
L'isolation est garantie à plusieurs niveaux : (1) chaque facture, avoir et ledger est scopé par `(tenant_id, sub_tenant_id)` ; (2) la `BuyerPolicy` vérifie la propriété à chaque accès ; (3) les chaînes ISCA SHA-256 sont calculées indépendamment par paire via des triggers PostgreSQL `SECURITY DEFINER`. Un bug ou une corruption sur la chaîne d'un sub-tenant n'affecte jamais les autres — c'est une garantie de base de données, pas une garantie de code.
Le widget `<scell-onboarding>` gère-t-il l'onboarding KYB SuperPDP ?
Oui. Le widget orchestre 5 étapes : identité (email, SIRET, nom, tél) → vérification Sirene → création du compte Scell → autorisation OAuth2 PKCE SuperPDP (popup) → statut final. Si SuperPDP échoue, le sub-tenant est créé avec le statut `pending_superpdp` et peut émettre des factures B2C immédiatement. La bascule vers Peppol électronique est automatique quand le KYB passe `verified`.
Comment passer le `sub_tenant_id` dans les appels API ?
Il suffit d'ajouter `"sub_tenant_id": "uuid"` dans le payload JSON de chaque appel. Sans `sub_tenant_id`, l'action est au nom du tenant master. Avec, l'action est au nom du sub-tenant spécifié — le `IssuerResolver` vérifie que le sub-tenant appartient bien au tenant courant (anti-IDOR : retourne 404 sinon).
La facturation multi-tenant de Scell.io est-elle conforme au contrôle DGFiP ?
L'architecture ISCA implémente la chaîne de hash SHA-256 isolée par paire `(tenant, sub_tenant)`, les triggers PostgreSQL `SECURITY DEFINER` qui garantissent l'enregistrement en dehors du code applicatif, l'ancrage Bitcoin OpenTimestamps et l'endpoint d'intégrité public `GET /api/v1/fiscal/integrity`. Il s'agit d'une autocertification — pas d'une certification NF525 par organisme tiers.
Peut-on personnaliser le widget d'onboarding aux couleurs de sa plateforme ?
Le widget `<scell-onboarding>` utilise une `pk_*` (publishable key) et s'intègre en 3 lignes HTML. La personnalisation de l'apparence (couleurs, logo) est dans la roadmap phase 3. En attendant, le widget est neutre. Le tenant peut configurer son logo et sa couleur primaire via `PUT /api/v1/auth/tenant/profile`.
Donnez à chaque vendeur son propre ledger ISCA en une journée
POST /api/v1/sub-tenants + sub_tenant_id dans le payload. Widget d'onboarding KYB SuperPDP en 3 lignes HTML. Chaînes ISCA indépendantes par paire.