e-document.io

API-Referenz

REST API für die Integration mit ERP-Systemen und anderen Anwendungen.

Basis-URL: https://e-document.io/api/v1

Alle Endpoints erfordern einen gültigen API-Key im Header.

Authentifizierung

Alle API-Anfragen müssen einen gültigen API-Key im HTTP-Header enthalten:

X-API-Key: edoc_IhrApiKeyHier

API-Keys können im Dashboard unter API-Keys erstellt werden. Der Key beginnt immer mit dem Präfix edoc_.

Alle Endpoints erfordern zusätzlich den Parameter org_id zur Identifikation der Organisation.

Eingang

POST /api/v1/eingang/upload

Dokument in den Eingang hochladen. Akzeptiert PDF- und XML-Dateien.

Parameters

NameTypBeschreibung
filemultipartPDF- oder XML-Datei (Pflicht)
org_idstringOrganisations-ID (Pflicht)
sender_emailstringE-Mail des Absenders (optional)

Beispiel

curl -X POST https://e-document.io/api/v1/eingang/upload \
  -H "X-API-Key: edoc_IhrApiKey" \
  -F "file=@rechnung.xml" \
  -F "org_id=ihre-org-id"

Response 200

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "filename": "rechnung.xml",
  "sender_name": "Lieferant GmbH",
  "sender_email": null,
  "source": "api",
  "content_type": "application/xml",
  "file_size": 12345,
  "uploaded_at": "2025-01-15T10:30:00Z"
}

sender_name wird automatisch aus der Rechnung extrahiert, falls vorhanden. source ist bei API-Uploads immer "api".

Rechnungsversand

ERP-Integration

Dieser Endpunkt ist ideal für die Anbindung von ERP-Systemen (SAP, Microsoft Dynamics, etc.). Senden Sie IDoc INVOIC02 oder XRechnung-XML direkt aus Ihrem ERP-System — e-document.io übernimmt Konvertierung, Formatierung und Zustellung.

POST /api/v1/invoices/send

Rechnung konvertieren und direkt an einen Geschäftspartner versenden. Akzeptiert IDoc INVOIC02, XRechnung (CII/UBL) und ZUGFeRD als base64-kodiertes XML. Der Versand erfolgt automatisch über Peppol oder E-Mail.

Request Body JSON

NameTypBeschreibung
org_idstringOrganisations-ID (Pflicht)
document_typestringDokumenttyp (Pflicht): idoc, xrechnung, ubl, zugferd, xml
xmlstringBase64-kodiertes XML-Dokument (Pflicht)
pdfstringBase64-kodiertes PDF (optional, für ZUGFeRD)
filenamestringDateiname (optional, wird automatisch generiert)
recipient object Empfänger-Identifikation (Pflicht). Eines der folgenden Felder:
  • partner_id — Geschäftspartner-ID
  • partner_number — GP-Nummer aus Ihrem ERP-System
  • peppol_id — Peppol-Teilnehmer-ID
  • email — E-Mail-Adresse (Partner wird automatisch angelegt)

Beispiel: IDoc aus SAP versenden

curl -X POST https://e-document.io/api/v1/invoices/send \
  -H "X-API-Key: edoc_IhrApiKey" \
  -H "Content-Type: application/json" \
  -d '{
    "org_id": "ihre-org-id",
    "document_type": "idoc",
    "xml": "PD94bWwgdmVyc2l...base64...==",
    "filename": "INVOIC02_0001234.xml",
    "recipient": {
      "partner_number": "KD-001"
    }
  }'

Response 202

{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "queued",
  "filename": "INVOIC02_0001234_xrechnung.xml",
  "document_type": "idoc",
  "recipient": {
    "partner_id": "a778-...",
    "partner_name": "Kunde GmbH",
    "channel": "peppol",
    "invoice_format": "cii"
  },
  "pdf_attached": false,
  "message": "Dokument wurde zur Versendung eingereiht."
}

Versandkanal: Wird automatisch ermittelt. Peppol wird bevorzugt, wenn der Partner Peppol-fähig ist. Andernfalls per E-Mail.

Formatkonvertierung: IDoc wird automatisch in XRechnung CII konvertiert. Beim Versand wird das Format des Geschäftspartners berücksichtigt (CII, UBL oder ZUGFeRD).

Status prüfen: Verwenden Sie GET /api/v1/ausgang/:id mit der zurückgegebenen ID, um den Versandstatus abzufragen.

Empfänger auflösen

Der Empfänger wird in folgender Priorität aufgelöst:

FeldBeschreibung
partner_id Direkte Zuordnung über die interne Geschäftspartner-ID
partner_number Suche über die GP-Nummer aus Ihrem ERP-System (z.B. SAP-Kundennummer)
peppol_id Suche über die Peppol-Teilnehmer-ID (z.B. DE367927617)
email Suche über E-Mail-Adresse. Wird kein Partner gefunden, wird automatisch ein neuer angelegt.

Unterstützte Dokumenttypen

document_typeBeschreibungKonvertierung
idoc SAP IDoc INVOIC02 Automatisch in XRechnung CII. Original wird archiviert. Beim Versand wird das bevorzugte Format des Empfängers verwendet.
xrechnung XRechnung CII-Format Keine Konvertierung, wird direkt versendet.
ubl XRechnung UBL-Format Keine Konvertierung, wird direkt versendet.
zugferd ZUGFeRD/Factur-X Keine Konvertierung. Optional: PDF als separaten Parameter mitsenden.

Geschäftspartner

Geschäftspartner (Debitoren/Kreditoren) verwalten. Die partner_number dient als eindeutiger Schlüssel für die ERP-Integration (z.B. SAP KUNNR).

Endpunkte

Methode Endpunkt Beschreibung
GET /api/v1/partners?org_id=… Partner auflisten (paginiert)
POST /api/v1/partners Neuen Partner anlegen
PUT /api/v1/partners/upsert Anlegen/Aktualisieren via partner_number (ERP-Sync)
GET /api/v1/partners/:id Einzelnen Partner abrufen
PUT /api/v1/partners/:id Partner aktualisieren
DELETE /api/v1/partners/:id Partner löschen

Upsert (empfohlen für ERP-Sync)

PUT /api/v1/partners/upsert — Legt einen Partner an oder aktualisiert ihn anhand der partner_number. Ideal für automatische Stammdaten-Synchronisation.

curl -X PUT https://app.e-document.io/api/v1/partners/upsert \
  -H "Content-Type: application/json" \
  -H "X-API-Key: edoc_IhrApiKeyHier" \
  -d '{"org_id":"ihre-org-id","partner_number":"0000001234",
       "name":"Musterfirma GmbH","company":"Einkauf",
       "email":"rechnung@musterfirma.de",
       "invoice_format":"cii","status":"active"}'

Response (201 Created / 200 Updated)

{
  "data": {
    "id": "a1b2c3d4-...",
    "partner_number": "0000001234",
    "name": "Musterfirma GmbH",
    "email": "rechnung@musterfirma.de",
    "peppol_capable": false,
    "status": "active",
    "invoice_format": "cii"
  },
  "action": "created"
}

Felder

Feld Typ Pflicht Beschreibung
org_id string Mandanten-ID
name string Name des Geschäftspartners
partner_number string (max 10) ✓ (Upsert) Eindeutiger Schlüssel, z.B. SAP KUNNR
company string Firma / Zusatz
email string E-Mail-Adresse (Fallback-Versandkanal)
peppol_id string Peppol-Teilnehmer-ID
peppol_scheme string Peppol-Schema (z.B. 0204)
invoice_format string cii | ubl | zugferd (Standard: cii)
status string active | inactive (Standard: active)

Partner auflisten

GET /api/v1/partners?org_id=… — Paginierte Liste mit optionalen Filtern.

Parameter Beschreibung
pageSeitennummer (Standard: 1)
per_pageEinträge pro Seite (Standard: 20, max: 100)
searchFreitext-Suche über Name, Firma, GP-Nummer
statusactive | inactive
peppolcapable | not_found | pending | none

Ausgang

POST /api/v1/ausgang/upload

Dokument in den Ausgang hochladen. Akzeptiert PDF-, XML- und JSON-Dateien. SAP IDoc INVOIC02-Dateien werden automatisch erkannt und in XRechnung (CII) konvertiert.

Parameters

NameTypBeschreibung
filemultipartPDF-, XML- oder JSON-Datei (Pflicht)
org_idstringOrganisations-ID (Pflicht)

Beispiel

curl -X POST https://e-document.io/api/v1/ausgang/upload \
  -H "X-API-Key: edoc_IhrApiKey" \
  -F "file=@ausgangsrechnung.pdf" \
  -F "org_id=ihre-org-id"

Response 200

{
  "id": "550e8400-e29b-41d4-a716-446655440001",
  "filename": "ausgangsrechnung.pdf",
  "content_type": "application/pdf",
  "file_size": 54321,
  "status": "pending",
  "document_type": "pdf",
  "uploaded_at": "2025-01-15T10:35:00Z"
}

GET /api/v1/ausgang

Liste aller Ausgangs-Dokumente abrufen. Unterstützt optionalen Status-Filter.

Query Parameters

NameTypBeschreibung
org_idstringOrganisations-ID (Pflicht)
statusstringStatus-Filter (optional): pending, sending, gesendet, fehlerhaft, archiviert
pageintegerSeitennummer (Standard: 1)
per_pageintegerEinträge pro Seite (Standard: 20, Max: 100)

Beispiel

curl -H "X-API-Key: edoc_IhrApiKey" \
  "https://e-document.io/api/v1/ausgang?org_id=ihre-org-id&status=pending"

Response 200

{
  "documents": [
    {
      "id": "550e8400-...",
      "filename": "ausgangsrechnung.pdf",
      "content_type": "application/pdf",
      "file_size": 54321,
      "status": "pending",
      "document_type": "pdf",
      "recipient_email": "partner@example.com",
      "storecove_guid": null,
      "sent_at": null,
      "error_details": null,
      "processed_at": null,
      "inserted_at": "2025-01-15T10:35:00Z",
      "business_partner": {
        "id": "...",
        "name": "Empfänger GmbH",
        "partner_number": "GP-001"
      }
    }
  ],
  "total": 8,
  "page": 1,
  "per_page": 20
}

storecove_guid ist gesetzt, wenn die Zustellung über das Peppol-Netzwerk erfolgt ist. document_type: "pdf", "xrechnung", "zugferd" oder "idoc".

GET /api/v1/ausgang/:id

Details eines einzelnen Ausgangs-Dokuments abrufen.

Beispiel

curl -H "X-API-Key: edoc_IhrApiKey" \
  "https://e-document.io/api/v1/ausgang/550e8400-...?org_id=ihre-org-id"

GET /api/v1/ausgang/:id/download

Ausgangs-Dokument herunterladen. Redirect zu einer signierten Download-URL.

Beispiel

curl -L -H "X-API-Key: edoc_IhrApiKey" \
  "https://e-document.io/api/v1/ausgang/550e8400-.../download?org_id=ihre-org-id" \
  -o ausgangsrechnung.pdf

Hinweis: -L folgt dem Redirect zur Download-URL.

Erfolgreich

GET /api/v1/erfolgreich

Liste aller erfolgreich verarbeiteten Dokumente abrufen.

Query Parameters

NameTypBeschreibung
org_idstringOrganisations-ID (Pflicht)
pageintegerSeitennummer (Standard: 1)
per_pageintegerEinträge pro Seite (Standard: 20, Max: 100)

Beispiel

curl -H "X-API-Key: edoc_IhrApiKey" \
  "https://e-document.io/api/v1/erfolgreich?org_id=ihre-org-id"

Response 200

{
  "documents": [
    {
      "id": "550e8400-...",
      "filename": "rechnung.xml",
      "content_type": "application/xml",
      "file_size": 12345,
      "status": "bereitgestellt",
      "source": "email",
      "sender_name": "Lieferant GmbH",
      "sender_email": "rechnung@lieferant.de",
      "processed_at": "2025-01-15T10:31:00Z",
      "business_partner": {
        "id": "...",
        "name": "Lieferant GmbH",
        "partner_number": "L-0042"
      },
      "has_xml": true,
      "has_ubl": true
    }
  ],
  "total": 42,
  "page": 1,
  "per_page": 20
}

source: "upload", "api", "email" oder "peppol". partner_number ist die GP-Nummer aus Ihrem ERP-System.

GET /api/v1/erfolgreich/:id

Details eines einzelnen Dokuments abrufen.

Beispiel

curl -H "X-API-Key: edoc_IhrApiKey" \
  "https://e-document.io/api/v1/erfolgreich/550e8400-...?org_id=ihre-org-id"

GET /api/v1/erfolgreich/:id/download

Dokument herunterladen. Redirect zu einer signierten Download-URL.

Query Parameters

NameTypBeschreibung
org_idstringOrganisations-ID (Pflicht)
type string original (Standard), xml (extrahiertes XML), ubl (konvertiertes UBL)

Beispiel

curl -L -H "X-API-Key: edoc_IhrApiKey" \
  "https://e-document.io/api/v1/erfolgreich/550e8400-.../download?org_id=ihre-org-id&type=xml" \
  -o rechnung.xml

Hinweis: -L folgt dem Redirect zur Download-URL.

POST /api/v1/erfolgreich/:id/abholen

Dokument als abgeholt markieren. Das Dokument wird ins Archiv verschoben.

Request Body JSON

NameTypBeschreibung
org_idstringOrganisations-ID (Pflicht)

Beispiel

curl -X POST -H "X-API-Key: edoc_IhrApiKey" \
  -H "Content-Type: application/json" \
  -d '{"org_id": "ihre-org-id"}' \
  "https://e-document.io/api/v1/erfolgreich/550e8400-.../abholen"

Response 200

{"id": "550e8400-...", "status": "abgeholt"}

Fehlerhaft

GET /api/v1/fehlerhaft

Liste aller fehlerhaften Dokumente abrufen.

Query Parameters

NameTypBeschreibung
org_idstringOrganisations-ID (Pflicht)
pageintegerSeitennummer (Standard: 1)
per_pageintegerEinträge pro Seite (Standard: 20, Max: 100)

Beispiel

curl -H "X-API-Key: edoc_IhrApiKey" \
  "https://e-document.io/api/v1/fehlerhaft?org_id=ihre-org-id"

Response 200

{
  "documents": [
    {
      "id": "550e8400-...",
      "filename": "fehlerhafte-rechnung.xml",
      "status": "fehlerhaft",
      "source": "upload",
      "sender_name": null,
      "sender_email": null,
      "error_details": "BR-01: An Invoice shall have...",
      "business_partner": null
    }
  ],
  "total": 5,
  "page": 1,
  "per_page": 20
}

GET /api/v1/fehlerhaft/:id

Details eines fehlerhaften Dokuments inkl. Fehlerdetails abrufen.

Beispiel

curl -H "X-API-Key: edoc_IhrApiKey" \
  "https://e-document.io/api/v1/fehlerhaft/550e8400-...?org_id=ihre-org-id"

GET /api/v1/fehlerhaft/:id/download

Original-Dokument herunterladen.

Beispiel

curl -L -H "X-API-Key: edoc_IhrApiKey" \
  "https://e-document.io/api/v1/fehlerhaft/550e8400-.../download?org_id=ihre-org-id" \
  -o dokument.xml

POST /api/v1/fehlerhaft/:id/archivieren

Fehlerhaftes Dokument archivieren.

Request Body JSON

NameTypBeschreibung
org_idstringOrganisations-ID (Pflicht)

Beispiel

curl -X POST -H "X-API-Key: edoc_IhrApiKey" \
  -H "Content-Type: application/json" \
  -d '{"org_id": "ihre-org-id"}' \
  "https://e-document.io/api/v1/fehlerhaft/550e8400-.../archivieren"

Response 200

{"id": "550e8400-...", "status": "archiviert"}

Fehlerbehandlung

Die API gibt bei Fehlern einen entsprechenden HTTP-Status und eine JSON-Fehlermeldung zurück:

Status Beschreibung Beispiel
400 Ungültige Anfrage {"error": "Missing org_id parameter"}
401 Nicht authentifiziert {"error": "Invalid API key"}
404 Nicht gefunden {"error": "Document not found"}
422 Validierungsfehler {"error": "Validation failed"}
502 Serverfehler {"error": "S3 upload failed"}