Die REST-API, die Dolibarr ab Werk mitbringen sollte
EasyAPI implementiert die 32 Domänen des Dolibarr-Core neu (Verkauf, Einkauf, Lager, Buchhaltung, Projekte, Personal, Mitglieder…) auf einem einzigen Vertrag: dieselbe Antwort-Envelope, dieselbe Fehlertaxonomie, Idempotenz bei jeder Schreiboperation und ein MCP-Server für KI-Agenten. Ihre Rechte und Ihre ACL in Dolibarr gelten weiterhin.
|
32
neu implementierte Core-Domänen
|
98
automatisch erkannte EAPI-Ressourcen
|
MCP
nativer Server für KI-Agenten
|
V15–V24
Dolibarr-kompatibel · PHP 7.4–8.3
|
Das Problem, das es löst
Die mitgelieferte API von Dolibarr deckt den einfachen Fall ab. Die Probleme beginnen, wenn die Integration im Produktivbetrieb bestehen muss: Wiederholungen nach Netzwerkabbrüchen, Rechte, die tatsächlich geprüft werden, mehrere Gesellschaften in derselben Installation und Belege, die korrekt summieren müssen. Es sind fünf konkrete Fehler, und keiner meldet sich, wenn er auftritt.
| Was Ihnen begegnet |
Was es Sie kostet |
| Ein POST gibt die id im Rohformat zurück und ein GET das Objekt: jede Domäne antwortet auf ihre eigene Weise |
Eine Normalisierungsschicht in Ihrem Code, für jede Ressource anders, die Sie dauerhaft pflegen müssen |
| Eine Wiederholung nach einem Timeout legt den Beleg erneut an: den Header Idempotency-Key gibt es nicht |
Doppelte Rechnungen und Zahlungen, die jemand manuell stornieren und abstimmen muss |
| Das Löschen einer Zahlung per API antwortet 500 in Dolibarr 20 oder höher: die Signatur von Paiement::delete() hat sich in der 20 geändert |
Der einzige dokumentierte Weg, eine Zahlung rückgängig zu machen, funktioniert ausgerechnet dann nicht, wenn Sie ihn brauchen |
| Im Mehrgesellschaftsbetrieb antwortet eine gültige DOLAPIKEY einer anderen Entität mit 503 „Modul nicht aktiv“ |
Die API spricht nur mit Entität 1: jede Gesellschaft braucht am Ende ihre eigene Installation |
| Eine Rechnungsposition mit Recargo de equivalencia oder IRPF wird mit einer Steuer von 0 gespeichert |
Der Beleg summiert falsch: Sie berechnen zu wenig oder behalten zu wenig ein, und es erscheint kein Fehler |
| Der Fehler sagt nur „socid field missing“, ohne das genaue Feld und ohne einen request_id |
Support im Blindflug: Sie müssen manuell nachstellen, was in der Produktion bereits fehlgeschlagen ist |
Dieselbe Envelope, dieselben Codes und dieselben Filter in allen 32 Domänen. Einmal gelernt, gilt es für alle: es gibt keine andere Art zu paginieren, zu filtern oder den Fehler zu lesen, je nachdem, welche Ressource Sie anfassen.
NEU IN 2.28
Was der KI-Agent anfordert, wartet auf Ihre Bestätigung
Mit aktivierter menschlicher Bestätigung wird ein Schreibvorgang, den ein Agent über MCP anfordert, nicht ausgeführt. Er wartet unter Werkzeuge › Ausstehende Aktionen (KI) mit seinen Daten und einer Vorschau und läuft erst, wenn die Person, die den Agenten verbunden hat, auf Bestätigen klickt.
- Sie entscheiden, was wartet. Alle Schreibvorgänge oder nur E-Mail-Versand und Löschungen. Die Option ist ausgeschaltet, ein Update ändert also nichts.
- Der Agent kann sich nicht selbst bestätigen. Für MCP gibt es keine Bestätigung: Sie erfolgt in Dolibarr oder über die REST-API (POST /mcp/pending/{token}/confirm), und nur die Person, die die Aktion angefordert hat, kann sie geben.
- Einmal und mit Ablauf. Jede Aktion wird einmal bestätigt und läuft nach 10 Minuten ab; die Frist lässt sich auf bis zu 24 Stunden verlängern.
- Markierte E-Mails. Eine nach der Bestätigung gesendete E-Mail trägt X-AI-Generated und X-AI-Reviewed.
IN 2.25
Wer Ihnen wie viel schuldet und seit wann, und der Preis, den das ERP jedem Kunden berechnen würde
Version 2.25 brachte Geschäftskennzahlen, die man bisher von Hand aus den Rechnungen zusammenrechnen musste. Dazu sagt der MCP dem Agenten, was jede Operation bewirkt, bevor er sie aufruft.
- Altersstruktur der offenen Posten. GET /invoices/kpis/aging und GET /supplier-invoices/kpis/aging teilen das Offene auf in nicht fällig, 1-30, 31-60, 61-90 und über 90 Tage. Die Stufen lassen sich mit ?buckets=0,15,45 ändern, und ?group=thirdparty liefert die Aufschlüsselung pro Geschäftspartner. Es gilt dieselbe ACL wie in den Listen: Ein Vertriebsmitarbeiter, der nur seine Kunden sieht, sieht auch nur deren Schulden.
- Zahlungsdauer und echter offener Betrag. /invoices/kpis ergänzt dso und /supplier-invoices/kpis ergänzt dpo, die durchschnittlichen Tage bis zum Zahlungseingang und bis zur Zahlung über die letzten 90 Tage. Die KPI outstanding und overdue summieren, was wirklich noch offen ist: Sie ziehen Teilzahlungen, Gutschriften und Anzahlungen mit derselben Berechnung ab wie getRemainToPay() im Core.
- Effektiver Preis pro Kunde. GET /products/{id}/price?socid=&qty= liefert den Preis, den das ERP für diesen Kunden und diese Menge in die Zeile setzen würde, mit MwSt., Zuschlag und Quellensteuer, den Summen und der Herkunft des Preises: base, price_level, customer_price oder quantity.
- Fehler ohne SQL. Die Meldung der Datenbank bleibt im Syslog, zusammen mit der request_id, und die Antwort enthält einen Code, mit dem man etwas anfangen kann: Ein Duplikat ist ein 409 mit reason: duplicate_record, eine Sperre ein 503 mit Retry-After: 2 für den nächsten Versuch.
- Jede Operation deklariert ihre Wirkung. x-effect gibt an, ob sie liest (read), im ERP schreibt (internal), nach außen geht (external) oder sich nicht rückgängig machen lässt (irreversible), und der MCP übersetzt das in readOnlyHint und destructiveHint. Löschen per MCP lässt sich im Setup (EASYAPI_MCP_ALLOW_DELETE) oder pro Benutzer verbieten, und es gilt die strengere Einstellung.
- Maskierte IBAN. Per MCP zeigen IBAN, Kontonummer und Mandatsreferenz der Bankkonten von Geschäftspartnern nur noch die letzten 4 Zeichen. Über REST ändert sich nichts.
Ein Blick auf das Ergebnis
Die OpenAPI-Spezifikation wird automatisch aus den Ressourcen erzeugt und im Modul ausgeliefert, gefiltert nach den Rechten des abfragenden Benutzers.
Alle 32 Domänen navigierbar, mit Serverauswahl und Authentifizierung per DOLAPIKEY. Jede Operation bringt ihr Schema und ein fertiges Beispiel zum Ausführen mit.
Vergleich mit der nativen API
| Dimension |
Native API von Dolibarr |
EasyAPI |
| Abdeckung |
Mehr als 50 API-Klassen über die Core-Module verteilt, mit ungleicher Abdeckung: in der Buchhaltung zum Beispiel ist der einzige Endpoint der Datenexport |
32 vollständige Core-Domänen mit ihren Unterressourcen: Positionen, Kontakte, Zahlungen, Rabatte… |
| Antwortform |
Heterogen: ein POST gibt eine rohe Ganzzahl zurück, ein anderer das Objekt |
Einheitliche Envelope {success, data, meta}: der POST antwortet mit 201 und dem angelegten Datensatz |
| Fehler |
Uneinheitliche Codes und Meldungen, ohne Taxonomie und ohne etwas, das Sie in einem Ticket zitieren können |
Taxonomie mit 16 Typen, das genaue Feld in error.fields und request_id + doc_url bei allen |
| Idempotenz |
Gibt es nicht |
Atomare Reservierung per Idempotency-Key bei jeder Schreiboperation, auch bei Statusübergängen |
| Massenoperationen |
Gibt es nicht |
207 Multi-Status beim Anlegen, Ändern und Löschen, bis zu 100 Elemente pro Stapel und mit dem Ergebnis für jedes einzelne |
| Abfragen |
Rohe SQL-Filter zum Selbstschreiben, ohne Sortierung und ohne Feldauswahl |
Filter und Sortierung in JSON, Suche, Feldauswahl, eingebettete Ressourcen, Paginierung nach Seite und nach Cursor |
| Resilienz |
Gibt es nicht |
Rate-Limits, erneuter Versuch bei Datenbanksperren, optimistische Nebenläufigkeit und Wartungsmodus |
| Sicherheit |
Native Rechte, mit echten Fehlern: die Abfrage der Vertriebsmitarbeiter liefert 401, wo 403 richtig wäre |
Dieselben nativen Rechte, mit korrigierter und einheitlicher ACL pro Datensatz: korrektes 403 und keine Lecks zwischen Dritten oder Entitäten |
| Dokumentation |
Einfacher Swagger-Explorer |
Aus dem Code generiertes OpenAPI, mit eingebettetem Scalar, Swagger UI und Redoc und nach Rechten gefiltert |
| Erweiterbarkeit |
Für eigene Endpoints muss man den Core anfassen |
Automatische Erkennung: Sie legen einen Ordner in Ihrem eigenen Modul an, und Ihre Endpoints erscheinen dokumentiert |
So wird es verwendet
Authentifizierung mit der DOLAPIKEY Ihres Benutzers im Header. Derselbe Schlüssel gilt als Authorization: Bearer, wenn Ihr Server eigene Header verschluckt. Eine Rechnung mit ihrer Position in einem einzigen Aufruf:
RECHNUNG MIT POSITION, IN EINEM AUFRUF
curl -X POST "https://tu-dolibarr.com/custom/easyapi/api/invoices" \
-H "DOLAPIKEY: tu_clave" \
-H "Idempotency-Key: pedido-4417" \
-H "Content-Type: application/json" \
-d '{"socid": 128, "lines": [{"fk_product": 55, "qty": 2, "subprice": 49.90}]}'
201 · DIE RECHNUNG ENTSTEHT ALS ENTWURF MIT VORLÄUFIGER REF
{
"success": true,
"data": {
"id": 902,
"ref": "(PROV902)",
"socid": 128,
"statut": 0,
"total_ttc": 119.76,
"lines": [ { "id": 3311, "qty": 2, "subprice": 49.90 } ]
}
}
422 · DER FEHLER NENNT IHNEN DAS FELD, NICHT NUR DASS ETWAS FEHLGESCHLAGEN IST
{
"success": false,
"error": {
"type": "validation_error",
"code": 422,
"message": "Validation failed",
"fields": { "socid": "does not exist" },
"request_id": "req_7f3a91c2",
"doc_url": "https://easysoft.es/docs/api#validation_error"
}
}
Die endgültige ref vergibt die Validierung, und so funktioniert Dolibarr: POST /invoices/902/validate ersetzt (PROV902) durch die Nummer der Serie und berechnet die Summen neu. Senden Sie dieselbe Anfrage mit derselben Idempotency-Key erneut, erhalten Sie die Rechnung von vorher, keine zweite, und der Header Idempotent-Replayed: true meldet, dass sie nicht erneut ausgeführt wurde.
Was enthalten ist
Schreibvorgänge, die sich nicht duplizieren
Idempotency-Key mit atomarer Reservierung und angekündigtem Replay bei jeder Schreiboperation, auch bei Statusübergängen (validieren, bezahlen, abschließen).
Fehler, die sich selbst erklären
Eine einzige Taxonomie mit 16 Typen, das Detail pro Feld und zwei Angaben für das Ticket: die Kennung der Anfrage und den Link zum Dokument des Fehlers.
Abfragen ohne handgeschriebenes SQL
Filter, Sortierung, Suche und Feldauswahl in JSON; Paginierung nach Seite und nach Cursor, um große Tabellen ohne Zeilenverlust zu durchlaufen.
Ihre Rechte, unverändert
Die nativen Rechte von Dolibarr plus die korrigierte ACL pro Datensatz: ein Vertriebsmitarbeiter sieht nicht, was ihm nicht gehört, und das 403 erscheint dort, wo es hingehört.
MCP-Server für Agenten
Endpoint POST /mcp für Claude, Cursor oder jeden anderen MCP-Client, authentifiziert mit Ihrem Schlüssel und auf die Domänen begrenzbar, die Sie möchten.
Konfigurierbare Resilienz
Rate-Limits, erneuter Versuch bei Datenbanksperren, optimistische Nebenläufigkeit mit ETag, Wartungsmodus und ein Limit für die Body-Größe. Alles über Konstanten.
Wofür es eingesetzt wird
- Synchronisierung eines Onlineshops oder eines Marktplatzes: Bestellungen, Lager und Preise gegen Ihre Datenbank, ohne SQL zu schreiben
- Eine mobile App für Vertriebsmitarbeiter mit Sitzung per Cookie HttpOnly, bei der der Schlüssel des ERP nie in den Browser gelangt
- Dashboards und BI, die die 32 Domänen mit Filtern und Cursor-Paginierung lesen
- Automatisierungen und KI-Agenten, per MCP mit Ihrem eigenen ERP verbunden, mit den Schreibregeln, die Sie festlegen
- Mehrere Gesellschaften über eine einzige API bedient, jeder Benutzer in seiner Entität
- Ein externes ERP, das Rechnungen und Zahlungen anlegen muss und dabei weiß, dass eine Wiederholung nichts dupliziert
Inbetriebnahme
1
Entpacken Sie das ZIP in custom/easyapi und führen Sie composer install --no-dev --optimize-autoloader aus.
2
Aktivieren Sie EasyAPI unter Konfiguration → Module und öffnen Sie dessen Konfigurationsseite: CORS, Sitzung, Limits und MCP werden von dort aus eingestellt.
3
Kopieren Sie den Schlüssel Ihres Benutzers (Benutzer → Reiter API) und prüfen Sie, dass er antwortet: GET /me sagt Ihnen, wer Sie sind.
4
Öffnen Sie /docs und navigieren Sie durch die 32 Domänen. Wenn Ihr Server nginx ist, wenden Sie den Block aus der mitgelieferten Anleitung an, bevor Sie etwas als gut ansehen.
Voraussetzungen
| Dolibarr |
V15 bis V24 (getestet mit der 18 und der 24; die Core-Signaturen werden von der 10 bis zur 24 geprüft) |
| PHP |
7.4 bis 8.3, mit curl, json und mbstring |
| Datenbank |
MySQL 5.7+ · MariaDB 10.2+ · PostgreSQL 10+ |
| Aktualisierungen |
365 Tage Zugang zu Aktualisierungen |
Vor dem Kauf
Kann ich es an meinen Fall anpassen?
Ja. Sie erhalten den vollständigen Quellcode und können ihn lesen, ändern und anpassen, ohne um Erlaubnis zu fragen. Außerdem werden Ressourcen automatisch erkannt, sodass Sie Ihre eigenen Endpoints normalerweise aus Ihrem Modul heraus ergänzen, statt unseres anzufassen.
Wie teste ich es, ohne meine Daten zu riskieren?
Installieren Sie es in einer Kopie Ihres Dolibarr und rufen Sie GET /status auf: die Antwort kommt, ohne einen einzigen Datensatz anzufassen. Alle Lesezugriffe sind harmlos. Schreibzugriffe legen dagegen echte Daten an, testen Sie sie also in dieser Kopie: Idempotency-Key garantiert, dass eine Wiederholung nach einem Netzwerkabbruch den Datensatz nicht dupliziert, nicht dass die Operation umkehrbar ist.
Und wenn etwas nicht zu meiner Installation passt?
Schreiben Sie uns vor dem Kauf an
info@easysoft.es, und wir sehen es gemeinsam mit Ihnen an: Dolibarr-Version, PHP, Hosting und was Sie integrieren möchten. Lieber sagen wir Ihnen, dass es nicht passt, als Ihnen etwas zu verkaufen, das Ihnen nicht hilft.
Bricht meine Integration beim Aktualisieren?
Der Vertrag ist eine stabile API v1, und jede Antwort erklärt das im Header X-EasyAPI-Version. Innerhalb von v1 kommen nur kompatible Änderungen hinzu: neue optionale Felder, neue Endpoints, neue Header. Eine vertragsbrechende Änderung käme als v2, und Ihre Integration bliebe auf v1, während Sie migrieren, wann es Ihnen passt.
Was passiert, wenn die 365 Tage ablaufen?
Das Modul, das Sie bereits haben, funktioniert weiter: es wird nichts deaktiviert oder gesperrt. Was endet, ist der Zugang zu Aktualisierungen und neuen Downloads sowie der Support per E-Mail. Wenn Sie es später wieder aufnehmen möchten, lässt es sich verlängern.
Aktive Pflege
EasyAPI ist kein veröffentlichtes und vergessenes Modul: die aktuelle Version ist die 2.28.0, und jede Lieferung ergänzt Tests, die absichern, was sie repariert. Die 2.28 bringt einen Test für jede Regel der menschlichen Bestätigung, geprüft durch absichtliches Brechen der Regel, einen Browsertest der Seite mit den ausstehenden Aktionen und eine HTTP-Prüfung auf Dolibarr 15, 18 und 24. Neben den Tests durchläuft jedes Release vor der Veröffentlichung QA gegen echte Dolibarr-Instanzen.
|
31
in Dolistore veröffentlichte Module
|
100 %
vollständiger Quellcode
|
8
Sprachen in der Oberfläche
|
365
Tage Aktualisierungen
|
Passt es zu dem, was Sie integrieren möchten?
Schildern Sie uns Ihren Fall, und wir sagen Ihnen, ob EasyAPI für Sie passt — und wenn nicht, sagen wir Ihnen das genauso.
info@easysoft.es www.easysoft.es