Die Dokumente-API ist eine lesende HTTP-Schnittstelle. Sie liefert die Dokumente, die Easy Invoices für einen Shop ausgestellt hat, als Liste von Änderungen und dazu jedes PDF.
Drei Dokumentarten: Rechnungen, Gutschriften und Stornorechnungen, jede mit eigener Liste.
Nur lesend: Über die API lässt sich nichts erstellen, ändern oder löschen.
Pull statt Push: Dein System ruft regelmäßig ab, wir senden nichts an deine Server.
Nur ausgestellte Dokumente mit fertigem PDF erscheinen, auch rückwirkend für alle bisherigen.
Authentifizierung
Jede Anfrage braucht einen API-Token des Shops im Authorization-Header. Den Token legt der Shop-Inhaber in der App an: Einstellungen → Erweitert → API-Zugriff verwalten.
Ein Token beginnt mit ei_live_ und wird nur ein einziges Mal angezeigt. Wir speichern ihn nicht im Klartext.
Gültigkeit 30, 90, 180 oder 365 Tage, danach erstellst du einen neuen Token. Für eine Anbindung, die dauerhaft unbeaufsichtigt läuft, gibt es auch einen Token, der nie abläuft: Er gilt, bis er widerrufen wird.
Höchstens drei aktive Tokens pro Shop. Ein Token lässt sich in der App jederzeit widerrufen und funktioniert dann sofort nicht mehr.
Der Token gehört ausschließlich in den Header, nie in die URL, den Quelltext oder eine E-Mail.
Header
Authorization: Bearer ei_live_…
Schnellstart
Eine Synchronisation besteht aus vier Schritten. Beim ersten Lauf erhältst du alles, danach nur noch, was neu ist oder sich geändert hat.
1
Erster Abruf
Rufe die Liste mit type=INVOICE und einem Startdatum in updatedSince auf. Ohne updatedSince erhältst du alle Dokumente von Anfang an.
2
Weiterblättern
Solange hasMore true ist, rufst du sofort erneut ab und übergibst nextCursor als cursor.
3
PDF laden
Jedes Dokument enthält pdfUrl. Rufe die Adresse mit demselben Token ab.
4
Regelmäßig wiederholen
Speichere den letzten nextCursor und übergib ihn beim nächsten Lauf, z. B. alle 15 Minuten.
Die Schnittstelle gibt es auch maschinenlesbar: als OpenAPI-Spezifikation und als fertige Postman-Collection. Beide werden aus dem Code der API erzeugt und sind deshalb immer auf dem Stand dieser Seite.
GET /public/documents/{id}/pdf?type=… liefert das PDF eines gelisteten Dokuments als Download. Nutze einfach die pdfUrl aus der Liste.
Der ETag-Header ist ein SHA-256 der Datei. Er bleibt gleich, solange das PDF unverändert ist.
Dokumente eines anderen Shops oder noch nicht fertige Dokumente ergeben 404.
Felder eines Dokuments
Jedes Element in data hat diese Felder.
Feld
Typ
Bedeutung
id
Text
Stabile ID. Zusammen mit type dein Schlüssel gegen Duplikate.
type
Text
INVOICE, CREDIT_NOTE oder CANCELLATION.
number
Text
Dokumentnummer, wie sie auf dem PDF steht.
orderAttributes
Liste
Zusätzliche Details der Shopify-Bestellung (name, value), wie sie bei Rechnungsstellung vorlagen. Hier legen Marktplatz-Anbindungen ihre eigene Bestellnummer ab. Werte mit E-Mail-Adresse werden nicht ausgegeben.
orderTags
Liste
Tags der Shopify-Bestellung bei Rechnungsstellung.
orderId
Text
Numerische Shopify-ID der Bestellung.
orderNumber
Text
Shopify-Bestellnummer ohne Präfix (z. B. 2909). Nicht die Nummer im Marktplatz.
isActive
Boolean
Bei Rechnungen false, sobald sie durch eine korrigierte ersetzt wurde. Prüfe dann, ob du ein bereits übertragenes Dokument zurückziehen musst.
relatedInvoiceId
Text | null
Bei Gutschriften und Stornorechnungen die id der zugehörigen Rechnung.
issueDate
ISO 8601
Ausstellungsdatum.
status
Text
Bearbeitungsstand, z. B. EMAIL_SENT.
currency
ISO 4217
Währung, z. B. EUR.
totalGross
Text
Bruttobetrag mit Punkt als Dezimaltrenner, z. B. 41.80.
updatedAt
ISO 8601
Letzte Änderung. Danach ist die Liste sortiert.
pdfUrl
URL
Vollständige Adresse des PDFs, mit demselben Token abrufbar.
Gutschriften und Stornorechnungen tragen die Bestelldaten der Rechnung, auf die sie sich beziehen.
Zuverlässig synchronisieren
Die Liste ist ein Änderungsprotokoll: Nichts wird übersprungen, aber ein Dokument kann mehrfach erscheinen.
Ein Dokument erscheint erneut, wenn es sich ändert, etwa wenn die E-Mail zugestellt oder eine Rechnung ersetzt wurde. Erkenne Duplikate an type und id.
nextCursor kommt in jeder Antwort, auch in einer leeren. Speichere immer den letzten.
Änderungen der letzten 30 Sekunden werden zurückgehalten, damit keine gerade entstehende Änderung übersprungen wird.
Merke dir, welche Dokumente dein Zielsystem schon erhalten hat, statt dich nur auf den cursor zu verlassen.
Dokumente einer Marktplatz-Bestellung zuordnen
Marktplatz-Anbindungen speichern ihre eigene Bestellnummer in den zusätzlichen Details der Shopify-Bestellung. Diese findest du in orderAttributes, du brauchst dafür keinen Zugriff auf Shopify.
Anbindung
Attribut
Beispielwert
Order_id
Mirakl Connect (z. B. Shop Apotheke)
COM-277476493-2-A
eBay Order Id
eBay
01-15351-70916
Mirakl Connect: Der Upload einer Rechnung (POST /v2/orders/{order_id}/documents) erwartet die Connect-Bestell-ID, nicht die Marktplatz-Nummer. Lade die Connect-Bestellungen über v2-listOrders mit updated_from, suche die Bestellung, deren channel_order_id zu Order_id passt, und lade das PDF als CUSTOMER_INVOICE hoch. Ob eine Rechnung schon vorhanden ist, zeigt v2-listOrderDocuments.
Welche Attribute eine Anbindung schreibt, legt die Anbindung fest. Prüfe es an einer echten Bestellung, bevor du dich darauf verlässt.
Fehler und Limits
Fehler kommen als HTTP-Status mit JSON-Body. Fehlerantworten enthalten nie Dokumentdaten.
Pro Token: 60 Listenabrufe und 120 PDF-Downloads pro Minute, 25.000 Abrufe pro Tag.
Pro IP-Adresse: 120 Anfragen pro Minute und Route.
Status
Bedeutung
Was tun
400
Ungültige Anfrage
z. B. cursor und updatedSince zusammen, oder ein cursor einer anderen Dokumentart. Korrigiere die Anfrage.
401
Nicht autorisiert
Token fehlt, ist ungültig, abgelaufen oder widerrufen. Erneut versuchen hilft nicht, neuen Token erstellen.
404
Nicht gefunden
Dokument gibt es nicht oder es gehört nicht zum Shop des Tokens.
429
Zu viele Anfragen
So viele Sekunden warten, wie Retry-After angibt.
503
Vorübergehend nicht verfügbar
Nach Retry-After erneut versuchen.
Noch Fragen?
Unser Support hilft dir direkt in der App oder per E-Mail weiter.
Technisch notwendige Cookies setzen wir immer. Die drei optionalen Zwecke unten setzen wir nur, wenn Sie zustimmen – Sie können sie einzeln wählen und Ihre Entscheidung jederzeit im Footer unter „Cookie-Einstellungen“ ändern. Details in unserer Datenschutzerklärung
.
Optional sind: Statistik (Google Analytics 4, Google Ireland Limited), Marketing (Meta-Pixel und Conversions API, Meta Platforms Ireland Limited) und Unternehmenserkennung (Pipedrive Web Visitors / Leadfeeder Oy, Finnland – ermittelt anhand Ihrer IP-Adresse, welches Unternehmen uns besucht, und legt es als Vertriebskontakt an). Unter „Einstellungen anpassen“ steht, welche Daten dabei jeweils übermittelt werden.
Bei Statistik und Marketing können Daten in die USA übermittelt und dort mit Daten aus anderen Quellen zusammengeführt werden. Google und Meta sind unter dem EU-US Data Privacy Framework zertifiziert; ein Datenschutzniveau wie in der EU kann trotzdem nicht garantiert werden. Mit Ihrer Auswahl willigen Sie ausdrücklich in diese Übermittlung ein (Art. 49 Abs. 1 lit. a DSGVO). Ihr Widerruf gilt ab sofort für die Zukunft.