Développeurs
Une clé, un en-tête, vos propres chiffres.
Vous créez la clé dans KRONENWERK et choisissez ce qu'elle permet. Elle lit vos clients, vos factures, vos dossiers et vos encours — et crée clients, dossiers et brouillons de facture. Les événements du travail courant partent vers une adresse que vous inscrivez: signés et réessayés.
Accès
Deux lignes, et vous êtes connecté.
La clé n'est affichée qu'une seule fois ; seule son empreinte est conservée. Une clé de test et une clé réelle sont deux clés distinctes avec deux préfixes distincts, et une clé ne peut jamais plus que la personne qui l'a émise.
| Adresse de base | En-tête |
|---|---|
| https://kronenwerk.org/api/extern/v1 | Authorization: Bearer greif_live_… |
Ce que vous lisez
Chaque adresse exige sa propre portée.
Une clé ne détient que les droits que vous lui donnez. S'il en manque un, le chemin répond 403 au lieu de données — y compris pour votre propre clé.
| Chemin | Portée | Ce qui revient |
|---|---|---|
| GET /api/extern/v1/me | La clé elle-même: société, environnement, portées, dernier usage. Le premier appel qu'on écrit. |
|
| GET /api/extern/v1/customers | customers:read | Une page de clients et fournisseurs, les plus récents d'abord. |
| GET /api/extern/v1/customers/{id} | customers:read | Un client précis avec l'ensemble de ses données de base. |
| POST /api/extern/v1/customers | customers:write | Crée un client. KRONENWERK tire le numéro de la séquence propre à l'entreprise. |
| GET /api/extern/v1/invoices | invoices:read | Factures émises, filtrables par état de paiement et date d'émission. |
| GET /api/extern/v1/invoices/{number} | invoices:read | Une facture émise, telle que l'archive l'a figée. |
| POST /api/extern/v1/invoices/drafts | invoices:write customers:read companies:read | Commence un brouillon de facture pour un client. Cela ne l'émet pas. |
| GET /api/extern/v1/transactions | transactions:read | Dossiers — commandes, projets, lots de production — avec étape et échéance, les plus récents d'abord. Restreignez la période avec period, from et to ; la fenêtre porte sur la date de début. |
| POST /api/extern/v1/transactions | transactions:write transactions:read | Crée un dossier. Numéro, étape et historique naissent comme dans l'écran du produit. |
| PATCH /api/extern/v1/transactions/{id} | transactions:write transactions:read | Modifie un dossier existant. Un champ omis reste tel quel ; « none » comme client retire le client. |
| GET /api/extern/v1/reports/outstanding | reports:read | Créances et dettes ouvertes à ce jour, séparées par sens. |
| GET /api/extern/v1/webhooks | webhooks:write | Les points de terminaison webhook de cette société. |
| GET /api/extern/v1/webhooks/events | webhooks:write | Les événements auxquels un point de terminaison peut s'abonner. |
| POST /api/extern/v1/webhooks | webhooks:write | Enregistrer un point de terminaison ; le secret de signature figure une fois dans la réponse. |
| DELETE /api/extern/v1/webhooks/{id} | webhooks:write | Désactiver un point de terminaison ; le journal des envois est conservé. |
Un exemple
Un appel, une réponse.
Chaque montant est un nombre entier dans la plus petite unité de sa devise, jamais un texte formaté. Une date est un jour civil sans fuseau horaire. Aucun séparateur ne peut donc être mal lu, ni aucun jour décalé d'un cran.
| Requête | Réponse |
|---|---|
| GET https://kronenwerk.org/api/extern/v1/invoices?status=OPEN&size=1 | {"data":[{"number":"R-2026-0001","issuedOn":"2026-04-02","buyer":"Kellermann GmbH","currency":"EUR","gross":{"minor":105910,"currency":"EUR"},"outstanding":{"minor":105910,"currency":"EUR"},"paymentState":"OPEN","overdue":false}],"page":0,"size":1,"total":1,"more":false} |
Webhooks
Six événements, déclenchés par du travail réel.
Vous enregistrez une adresse et choisissez ce dont elle doit être informée. Chaque livraison porte un identifiant d'événement stable, inchangé d'une relance à l'autre — un destinataire qui l'a traité une fois peut donc écarter toute copie ultérieure.
| Événement | Quand il est envoyé |
|---|---|
| invoice.issued | Une facture a été émise : le numéro est consommé, le document est archivé et immuable. |
| invoice.paid | Une facture est intégralement soldée — par un paiement, quelle qu'en soit la voie d'enregistrement. |
| invoice.cancelled | Une facture a été annulée : un avoir existe qui l'annule intégralement. Rien n'est supprimé. |
| purchase.recorded | Une facture fournisseur ou une dépense a été enregistrée, avec fournisseur, date et montants. |
| payment.recorded | Un paiement a été enregistré, avec sens, montant, jour et le document qu'il solde. |
| bank.transaction.imported | Une opération bancaire a été importée et attend d'être rapprochée. |
Signature
Chaque livraison est signée, et la signature porte un instant.
Lors de l'enregistrement de l'adresse, vous recevez un secret — une seule fois. Vérifiez avec lui l'horodatage et le corps ensemble, non le corps seul : une signature sans instant reste valable indéfiniment et peut vous être rejouée plus tard.
| En-tête | Comment la vérifier |
|---|---|
| KRONENWERK-Signature: t=1775462400,v1=… | Calculez un HMAC avec SHA-256 sur l'horodatage, un point et le corps inchangé, avec le secret pour clé, puis comparez le résultat à v1. Rejetez une livraison dont l'horodatage s'écarte de plus de cinq minutes de votre horloge. |
La limite
Un brouillon est permis. Un envoi ne l'est pas.
La différence entre préparer une chose et la déclencher est le cœur de tout ce projet, et elle vivra dans les services et non dans une interface — ce qu'un écran interdit n'est interdit que sur cet écran. Un système d'IA ne doit jamais être un contournement des contrôles financiers.
| Peut préparer | Ne peut pas déclencher |
|---|---|
| Créer un brouillon de devis | Envoyer le devis |
| Créer un brouillon de facture | Émettre la facture |
| Proposer un rapprochement | Comptabiliser le paiement |
| Proposer un remboursement | Rendre l'argent |