Le framework de facturation pour les logiciels suisses.

Deux bibliothèques TypeScript : subkit pour les abonnements et factures, shopkit pour la boutique en ligne. Elles tournent dans votre application, avec facture QR, TVA et quatre langues. Le paiement passe par zahls.ch avec TWINT et carte, les données restent dans votre base de données.

Essayer la démo

Aucun frais par transaction · données dans votre base

acme.ch/account/billing
Votre application<BillingPortal />

Abonnement et factures

Acme AG

Basic

actif

CHF 9.00 / mois

Pro

CHF 19.00 / mois

Passer à Pro
Moyen de paiementTWINT

Factures

2026-0142

15.10.2026 · TWINT

CHF 9.00payée

2026-0141

15.09.2026 · QR

CHF 9.00payée
2
kits : subkit pour les abonnements, shopkit pour la boutique en ligne
4
langues : allemand, français, italien, anglais
0
donnée client sur nos serveurs
MIT
open source, aucun frais par transaction

Utilisé par

  • Thurbeck
  • Brauerei St. Johann
  • Membear

Les kits

Choisissez ce dont votre produit a besoin.

Chaque kit fonctionne seul, et les deux partagent un même adaptateur, un même client et un même prestataire de paiement.

subkitPréversion

Abonnements et factures

Pour les SaaS, les adhésions et les cotisations d’associations

Vos clientes et clients choisissent un plan et paient par TWINT, carte ou facture QR. subkit renouvelle, calcule le prorata, envoie les rappels et rapproche les paiements avec la banque.

  • Plans, périodes d’essai, prorata
  • Carte, TWINT ou facture QR
  • Rappels et nouvelles tentatives
  • TVA sur chaque facture
  • Droits d’accès et limites
  • Portail de facturation
MensuelAnnuel

Pro

CHF 19.00

/ mois

14 jours gratuits
Choisir Pro
TWINTVISAMASTERCARDQR

shopkitPréversion

Commerce

Pour les boutiques d’associations, les PME, le merchandising et les bons

Produits avec variantes, panier et paiement par TWINT ou sur facture. shopkit réserve le stock, calcule les frais de port et la TVA par produit et envoie la confirmation de commande.

  • Produits et variantes
  • Panier et paiement avec TWINT ou facture
  • Commandes et remboursements
  • Stock et frais d’envoi selon le poids
  • Codes promo
  • Bons cadeaux
  • Connexion à HS-Soft (WaWiAssist)
  • Étiquettes d’envoi de La Poste & vérification d’adresse
  • Commande via un agent IA (MCP)
  • Back-office à intégrer
  • Jour de retrait et de livraison avec créneau

Panier

Écharpe du club29.00
Maillot domicile, M89.00
Livraison9.00
TotalCHF 127.00
Payer avec TWINT

Nouveau dans shopkit 0.2 · Commander via un agent IA

Votre clientèle commande dans le chat.

Votre boutique devient un serveur MCP. L’agent de vos clientes et clients – Claude, ChatGPT ou Cursor – cherche les produits, calcule la commande avec TVA et frais d’envoi, puis commande. Le paiement se fait par un lien zahls.ch ou directement avec le TWINT enregistré. Pour toute boutique shopkit, sans service supplémentaire.

  • Connexion par OAuth – Claude et ChatGPT se connectent sans jeton
  • Seul le montant confirmé par la cliente est débité
  • Envoi, retrait ou jour de livraison avec créneau – l’agent demande
  • Les jetons de paiement n’atteignent jamais le modèle
import { createShopCustomerMcpHandler } from '@agentkit.ch/shopkit/mcp'Guide dans le README
AgentMCP · Rösterei Aare

Deux fois le mélange maison et un détartrant, par la poste svp.

search_productsmélange maison, détartrant

quote_order

2 × Mélange maison 500 g37.00

Détartrant12.90

PostPac Priority9.00

TotalCHF 58.90

Payer CHF 58.90 avec votre TWINT enregistré ?

Oui, volontiers.

place_orderexpectedAmount: 5890

TWINT …

Nouveau dans shopkit 0.2 · Pour les boulangeries

HS-Soft (WaWiAssist) connecté.

Pour les boulangeries et confiseries équipées de WaWiAssist : les produits viennent de WaWiAssist, chaque commande y arrive – avec le jour de retrait comme date de commande. Qu’elle soit passée dans la boutique en ligne ou via un agent.

  • Import avec catégorie de prix, prix promotionnel, image, déclaration, allergènes et valeurs nutritives
  • Seulement les jours de retrait où chaque article du panier est disponible
  • Si HS-Soft est injoignable, shopkit renvoie la commande plus tard
  • Statut et renvoi dans le back-office et via MCP
import { createHsSoftSync } from '@agentkit.ch/shopkit/hssoft'Guide dans le README

Articles → produits

WaWiAssist

  • A1Tresse 500 g6.80
  • A7Pain paysan5.20
  • A12Grittibänz4.50

shopkit

  • Tresse 500 gimporté
  • Pain paysanimporté
  • Grittibänzdès le 1.11.

Commande → WaWiAssist

shopkit

#2187 · CHF 18.80

Retrait le 31.10.2026

WaWiAssist

—

Nouveau dans shopkit 0.4 · La Poste

Étiquettes et adresses de La Poste.

Un clic dans la commande et l’étiquette avec code-barres est prête – avec le mode d’envoi de la commande, facturée sur votre licence d’affranchissement. Au checkout, La Poste propose NPA, localité, rue et numéro et vérifie l’adresse avant la commande.

  • PostPac Economy et Priority, envois encombrants, Swiss-Express « Lune », VinoLog et Courrier A Plus
  • A5, A6 ou A7 en PDF ou ZPL2 pour l’imprimante d’étiquettes
  • Prestations complémentaires comme signature, fragile ou distribution le samedi
  • Numéro d’envoi avec Track & Trace dans l’e-mail d’expédition
import { createSwissPost } from '@agentkit.ch/shopkit/swisspost'Guide dans le README

<Checkout />

Rue et numéro

Bahnhofst

NPA et localité

8001 Zürich

Adresse confirmée par La Poste

#1044

A6 · PRI

1.2 kg

Créer l’étiquette

Rösterei Aare

Aarstrasse 12

3011 Bern

PRI

Anna Muster

Bahnhofstrasse 12

8001 Zürich

99.60.123456.00000001

Numéro d’envoi —

Pas de vibe coding

L’argent n’est pas le bon endroit pour le vibe coding.

Un agent de code vous écrit une facture QR et un paiement TWINT en une heure. Les erreurs n’apparaissent qu’en production : paiements comptabilisés deux fois, écarts de centimes, factures refusées par la banque. Laissez plutôt votre agent intégrer du code qui a déjà fait ses preuves.

Facturation vibe-codée6 ✗

  • Référence QR avec un mauvais chiffre de contrôleL’app bancaire refuse le paiement.
  • Le même webhook arrive deux foisLe paiement est comptabilisé deux fois.
  • TVA en nombres à virgule flottanteDes écarts de centimes entre facture et comptabilité.
  • Changement de plan en milieu de moisProrata mal calculé, la cliente paie trop.
  • Paiement partiel dans le camt.054Facture marquée payée alors qu’il manque de l’argent.
  • Deux paiements, un seul article en stockVous vendez ce que vous n’avez plus.

Erreurs typiques qui n’apparaissent qu’en production.

Avec agentkit

Du code éprouvé.

Votre agent de code ne réinvente pas la facturation, il intègre un kit. Le code vient de Membear, où il tourne en production, et couvre exactement ces cas.

  • Issu de la production chez Membear
  • Testé contre un vrai Postgres
  • Centimes entiers, webhooks idempotents, compare-and-set

Ajoutez des abonnements avec facture QR et TWINT à l’aide de @agentkit.ch/subkit. Lisez d’abord https://agentkit.ch/llms.txt.

Fonctionnalités

Tout ce qui touche à l’argent, fait une fois pour toutes.

Ce que contiennent les deux kits : un agent de code qui les intègre, des webhooks qui ne comptent qu’une fois, des e-mails en quatre langues et des écrans prêts à l’emploi.

Votre agent de code l’intègre

llms.txt, options typées et erreurs avec des codes fixes. Un prompt jusqu’au checkout qui fonctionne.

llms.txt
  • llms.txt lu2s
  • Next.js + Drizzle détectés4s
  • @agentkit.ch/subkit installé9s
  • Tables ajoutées au schéma14s
  • /api/billing configuré21s
  • Checkout avec TWINT testé38s

Des webhooks qui ne comptent qu’une fois

Webhooks idempotents et mises à jour compare-and-set : si le même paiement arrive deux fois, il n’est comptabilisé qu’une seule fois.

Quand

Un paiement TWINT arrive

CHF 19.00 · 2026-0143

Alors

  • Marquer la facture comme payée
  • Activer le plan Pro
  • Envoyer la quittance en français
200Le même webhook, à nouveauignoré, déjà comptabilisé

Le libre-service, prêt à l’emploi.

Des composants React prêts à intégrer pour les écrans rébarbatifs, plus un client typé. Des hooks headless si vous préférez les vôtres.

import { BillingPortal } from '@agentkit.ch/subkit/react'
  • <BillingPortal />subkit
  • <Checkout />shopkit
  • <Cart />shopkit
  • <OrderStatus />shopkit

Votre base de données, vos tables

Les kits écrivent dans votre base via des adaptateurs. Reliez-les par JOIN – sans synchronisation, sans silo.

select o.*, c.name from shop_orders o
join customers c on c.id = o.customer_external_id
numberpayment_statuspayment_methodtotal
1039refundedonline2900

Chaque e-mail, en quatre langues

Quittances, rappels et confirmations de commande en HTML et en texte, avec votre service d’envoi.

de

Deine Quittung für Pro

Acme AG

fr

Votre commande #1042 est confirmée

Boutique Léman

it

Promemoria: fattura 2026-0142

FC Lugano Nord

46° 48′ N · 8° 14′ E

Suisse par défaut

Pas localisé après coup. Suisse dès la première ligne.

Les bibliothèques de facturation génériques pensent en Stripe, en centimes et en une seule langue. La clientèle suisse paie par facture QR et TWINT, attend la TVA sur chaque facture et la lit en allemand, en français ou en italien. agentkit part de là.

Section paiement

Monnaie

CHF

Montant

228.00

Compte / Payable à

CH44 3199 9123 0008 8901 2
Acme AG
Bahnhofstrasse 1
8001 Zürich

Référence

21 00000 00003 13947 14300 09017

Informations supplémentaires

Facture 2026-0142 · Club Pro, abonnement annuel
TVA 8,1 % incl. CHF 17.08 · CHE-123.456.789 TVA

Payable par

FC Seebach
Dorfstrasse 12
8052 Zürich
payée
prochainementRappels à la suisse

Pour les développeurs

Une bibliothèque dans votre application. Pas un service devant elle.

Montée comme route dans Next.js, Hono, SvelteKit, Remix ou Express – sur Node.js, Bun, Deno ou en edge. En TypeScript, utilisable aussi depuis JavaScript.

Un seul prompt

Votre agent de code lit llms.txt, détecte votre framework et votre base de données, écrit le schéma et configure la route.

~/acme

> Ajoutez des abonnements avec subkit▍

La configuration dans le code

Plans, prestataire de paiement et TVA dans un seul fichier. Aucun tableau de bord à garder synchronisé.

import { createSubscriptions } from '@agentkit.ch/subkit';
import { drizzleAdapter } from '@agentkit.ch/subkit/drizzle';
import { zahlsProvider } from '@agentkit.ch/subkit/zahls';
import { db, env } from './db';

export const billing = createSubscriptions({
  // your Postgres, your tables
  database: drizzleAdapter(db),
  provider: zahlsProvider({ instance: 'acme', apiKey: env.ZAHLS_KEY }),
  plans: [
    { id: 'free', name: 'Free', features: [], limits: {}, prices: {} },
    {
      id: 'pro',
      name: 'Pro',
      features: ['export'],
      limits: {},
      prices: { month: { amount: 1900, currency: 'CHF' } },
    },
  ],
  defaultPlanId: 'free',
  tax: { rateBps: 810 }, // Swiss VAT 8.1 %
});

MIT

Lire, modifier, héberger soi-même.

Votre base de données

Postgres via Drizzle – ou votre propre adaptateur.

Aucun backend chez nous

Rien ne « téléphone à la maison ».

Centimes entiers

L’argent n’est jamais un nombre à virgule flottante.

Pourquoi agentkit

Nous avons déjà tout construit une fois.

Pour Membear, notre logiciel de gestion d’associations, nous avons construit factures QR, TWINT via zahls.ch, TVA, rapprochement bancaire et factures en quatre langues. Les écueils étaient rarement dans le code, mais dans les détails : numéros de référence, arrondis, délais, traductions.

Puis nous avons constaté que chaque produit suisse reconstruit exactement cela. Les outils de facturation génériques pensent en Stripe, en cents et en anglais – la Suisse arrive, au mieux, sous forme de plugin.

C’est pourquoi nous extrayons ce code de la production pour en faire des kits que toute application TypeScript peut utiliser. Gratuitement, et en open source sous licence MIT.

L’équipe de siebenberge

Open source

Open source sous licence MIT.

subkit et shopkit sont sur GitHub sous licence MIT, les paquets sur npm. Lisez le code, adaptez-le et exploitez-le vous-même – sans frais par transaction et sans dépendre de nous.

01

Licence MIT

Utilisable commercialement, y compris dans des logiciels propriétaires.

02

Aucun verrouillage

Le code tourne dans votre application, les données restent dans votre base. Un fork suffit pour continuer de manière indépendante.

03

Développé ouvertement

Feuille de route, issues et pull requests sont publiques – les contributions sont les bienvenues.

Feuille de route

Extrait de la production, un kit après l’autre.

Chaque kit est extrait de code déjà en production, une fois qu’il a fait ses preuves.

  1. 01maintenant

    subkit + shopkit

    sur npm

    subkit 0.2 et shopkit 0.4 sous @agentkit.ch/subkit et @agentkit.ch/shopkit, le code sous licence MIT sur GitHub : facture QR, rapprochement bancaire (camt.053 / camt.054), TVA, zahls.ch avec TWINT, adaptateur Drizzle pour Postgres. Nouveau dans shopkit : commande via un agent IA (MCP), connexion à HS-Soft (WaWiAssist), le back-office à intégrer et les étiquettes de La Poste avec vérification d’adresse.

  2. 02

    core + CLI

    ensuite

    Un noyau commun avec suite de tests des adaptateurs, une CLI pour le schéma et la route, la documentation aussi en allemand. Dans shopkit : tarifs en direct de La Poste et remboursements via zahls.ch.

  3. 03

    Relances et adaptateurs

    2027

    1re, 2e et 3e relance avec frais et PDF de relance avec nouvelle facture QR. Adaptateurs Prisma et Kysely.

Questions

Questions fréquentes.

Encore un doute ? Les démos montrent les kits avec leurs vraies options.

01Quelle est la différence entre subkit et shopkit ?

subkit facture les paiements récurrents : plans, abonnements, périodes d’essai et factures – pour un SaaS, des adhésions ou des cotisations d’associations. shopkit vend des produits : catalogue, panier, paiement, commandes et bons cadeaux. Les deux partagent les données clients, le prestataire de paiement et la facture QR.

02Ai-je besoin des deux kits ?

Non. Chaque kit fonctionne seul. Une association avec des cotisations et une boutique de supporters prend les deux, un SaaS le plus souvent seulement subkit.

03Ma clientèle peut-elle commander via un agent IA ?

Oui, depuis shopkit 0.2. createShopCustomerMcpHandler fait de votre boutique un serveur MCP : l’agent de la cliente – Claude, ChatGPT ou Cursor – cherche les produits, calcule la commande avec TVA et frais d’envoi, puis commande. Le paiement passe par un lien zahls.ch ou par le moyen de paiement enregistré, et seul le montant confirmé est débité. Votre authentification décide qui commande (OAuth ou clé API).

04shopkit fonctionne-t-il avec HS-Soft (WaWiAssist) ?

Oui. @agentkit.ch/shopkit/hssoft importe les articles de WaWiAssist comme produits et y renvoie chaque commande, avec le jour de retrait comme date de commande. Il vous faut seulement la clé API de votre WaWiAssist, fournie par HS-Soft.

05shopkit crée-t-il des étiquettes d’envoi de La Poste ?

Oui, depuis shopkit 0.4. @agentkit.ch/shopkit/swisspost crée l’étiquette avec code-barres à partir de la commande – dans le back-office, par l’API ou par MCP – et envoie à la cliente le numéro d’envoi avec Track & Trace. Au checkout, il propose les adresses de La Poste et les vérifie. Il vous faut une licence d’affranchissement et un accès à la Digital Commerce API de La Poste. Les étiquettes pour l’étranger et les tarifs en direct sont prévus.

06agentkit est-il vraiment open source ?

Oui. subkit et shopkit sont sur github.com/siebenberge/agentkit sous licence MIT, les paquets sur npm. Issues et pull requests sont les bienvenues.

07Où sont stockées les données de mes clients ?

Dans votre base de données. Les kits tournent comme bibliothèque dans votre application et écrivent dans vos tables via des adaptateurs. Il n’y a ni backend agentkit ni sous-traitant supplémentaire.

08Quels moyens de paiement sont pris en charge ?

TWINT et cartes de crédit via zahls.ch, ainsi que la facture avec facture QR suisse. D’autres prestataires peuvent être connectés via l’interface PaymentProvider.

09Combien coûte agentkit ?

Les kits sont gratuits. Nous ne prélevons aucun frais par transaction – vous ne payez que votre prestataire de paiement.

10Quels frameworks sont pris en charge ?

TypeScript, utilisable aussi depuis JavaScript. Les kits se branchent comme route dans Next.js, Hono, SvelteKit, Remix ou Express et tournent sur Node.js, Bun, Deno ou en edge. Ils écrivent les données dans Postgres via l’adaptateur Drizzle ; des adaptateurs pour Prisma et Kysely sont prévus.

11Puis-je l’utiliser dès aujourd’hui ?

Oui : npm i @agentkit.ch/subkit ou npm i @agentkit.ch/shopkit. subkit provient de code en production ; shopkit est en préversion. À essayer sans installation : sub.agentkit.ch et shop.agentkit.ch.

Construisez votre produit, pas votre facturation.

Copiez le prompt d’installation dans votre agent de code – ou essayez d’abord les kits dans le navigateur.

Prompt d’installation pour votre agent de code

Ajoutez des abonnements avec facture QR et TWINT à l’aide de @agentkit.ch/subkit. Lisez d’abord https://agentkit.ch/llms.txt.

Essayer la démo