API-Referenz

Rechnungen

Rechnungen von Lieferanten an Käufer, vom Eingang über Abgleich und Freigabe bis zur Zahlung.

Mehr zu dieser Ressource

Eine Lieferantenrechnung entsteht durch Umwandeln einer Bestellung (source: "po-flip") oder durch Erfassen für einen verbundenen Käufer (source: "manual", siehe CreateInvoice), oder der Lieferant sendet sie mit einem API-Schlüssel aus seinem Abrechnungssystem (source: "feed", siehe SubmitFeedInvoice), sobald dieser Käufer automatisierte Rechnungen aktiviert. Ein Käufer kann eine Rechnung auch direkt erfassen (source: "direct", siehe SubmitInvoice), als JSON, cXML (InvoiceDetailRequest) oder UBL 2.1 (<Invoice>). Jede Rechnung liegt im Workspace des Käufers und durchläuft Abgleich, Freigabe und Zahlung. Eine Rechnung ist "pending", wenn es einen tatsächlichen Nutzungswert gibt, mit dem sie abgeglichen werden kann: eine PO und eine aktive Abrechnungsverbindung für den Anbieter der PO mit einer synchronisierten Rechnung. usageAmount, usageCurrency und tolerancePct sind nur dann vorhanden, sowie beim Ergebnis "matched" oder "discrepancy". Andernfalls ist sie "unverified", mit unverifiedReason "no_purchase_order" oder "no_billing_connection" (nur in der Käuferansicht; fehlt bei älteren Rechnungen, die als "no_purchase_order" gelten) oder "debit_note" für eine Belastungsanzeige zur PO eines Cloud-Anbieters, die eine bereits abgerechnete Rechnung erhöht und daher nicht mit der Monatsrechnung verglichen werden kann. Ein Aufrufer mit Lieferantenrolle sieht matchStatus unverändert, aber nie unverifiedReason oder die Nutzungsfelder. Eine nicht verifizierte Rechnung wird nie abgeglichen und nie automatisch freigegeben: Eine Person prüft sie mit ResolveInvoiceDiscrepancy.

Rechnungen auflisten

Listet Rechnungen und optional Gutschriften und Belastungsanzeigen auf.

GET/v1/workspaces/{regionId}/invoices

Parameter

  • fromstring

    ISO-8601-Datum/Zeitstempel - nur Einträge, die zu oder nach diesem Zeitpunkt angelegt wurden, werden zurückgegeben.

  • tostring

    ISO-8601-Datum/Zeitstempel - nur Einträge, die zu oder vor diesem Zeitpunkt angelegt wurden, werden zurückgegeben.

  • documentTypestring

    Standardmäßig das, was bezahlt wird: Rechnungen und die Belastungsanzeigen, die sie ändern. invoice (nur Rechnungen), debit_note, credit_note (dieselben Einträge wie bei ListCreditNotes) oder all (alle Arten, neueste zuerst). Jeder Eintrag enthält documentType. Alles andere ergibt 400 DOCUMENT_TYPE_INVALID.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Listet Rechnungen in keiner bestimmten Reihenfolge auf - oder, mit documentType, Gutschriften oder beides: Rechnungen und Gutschriften sind eine gemeinsame Ressource von Abrechnungsbelegen, und jeder Eintrag gibt in documentType an, was er ist. Ein Aufrufer mit Käuferrolle erhält die Rechnungen, die sein Workspace empfangen hat; ein Aufrufer mit Lieferantenrolle erhält die Rechnungen, die er an verbundene Käufer ausgestellt hat, in welchem Käufer-Workspace sie auch liegen. Optional per from/to auf einen createdAt-Bereich eingeschränkt - übergeben Sie die Grenzen eines Kalendermonats, um eine Monatsansicht zu erhalten. Ein Aufrufer mit Lieferantenrolle erhält von jeder Rechnung eine reduzierte Ansicht (siehe GetInvoice) - die internen Abgleichdaten des Käufers und der vollständige Freigabeablauf werden nicht ausgegeben.

Fehler

  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
GET /v1/workspaces/{regionId}/invoices
Anfrage
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
[
   {
      "documentType": "invoice" | "debit_note",
      "amendsInvoiceId": "string",
      "amendsExternalInvoiceNumber": "string",
      "debitNoteIds": [ "string" ],
      "replacesInvoiceIds": [ "string" ],
      "replacedByInvoiceIds": [ "string" ],
      "replacement": { "creditedInFull": boolean, "uncredited": number },
      "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
      "id": "string",
      "po": "string",
      "poLineNo": number,
      "billsNoPoLine": true,
      "buyerOrgId": "string",
      "supplierOrgId": "string",
      "supplier": "string",
      "amount": number,
      "currency": "string",
      "usageAmount": number,
      "usageCurrency": "string",
      "tolerancePct": number,
      "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
      "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
      "discrepancyReason": "amount" | "currency",
      "paid": boolean,
      "dueInDays": number,
      "approval": {
         "requester": "string",
         "requesterEmployeeKey": "string",
         "groups": [
           {
             "id": "string",
             "mode": "sequential" | "parallel",
             "label": "string",
             "status": "pending" | "approved" | "rejected",
             "stages": [
               { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
             ]
           }
         ],
         "groupIndex": number,
         "status": "pending" | "approved" | "rejected",
         "history": [
           { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
         ],
         "autonomy": boolean,
         "selfApproved": boolean
       },
      "createdAt": "string",
      "lastRemindedAt": "string",
      "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
      "replacesInvoiceId": "string",
      "source": "po-flip" | "direct" | "manual" | "feed",
      "submittedFormat": "json" | "cxml" | "ubl",
      "submittedBy": "string",
      "externalInvoiceNumber": "string",
      "lineItems": [
         { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
      ],
      "adjustments": [
         { "type": "discount" | "charge", "description": "string", "amount": number }
      ],
      "taxAmount": number,
      "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
      "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
      "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
      "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
      "rateWarnings": [
         { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
      ],
      "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
      "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
      "invoiceKind": "prepayment",
      "creditNoteIds": [ "string" ],
      "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
      "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
      "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
   }
]

Rechnung abrufen

Ruft eine einzelne Rechnung ab.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung oder einer Gutschrift (CN-…).

  • buyerstring

    Nur für Aufrufer mit Lieferantenrolle und nur nach einem 409 *_ID_AMBIGUOUS nötig: die Workspace-ID des Käufers (endet auf .buyer) oder die Regions-ID aus der buyers-Liste der 409-Antwort. Berücksichtigt wird nur das Dokument dieses Käufers; gibt es dort keines, folgt 404. Eine .supplier-Workspace-ID ergibt 400 BUYER_QUALIFIER_INVALID ("The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response."). Für einen Aufrufer mit Käuferrolle wird der Parameter ignoriert.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Ruft eine einzelne Rechnung anhand ihrer ID ab - oder, bei der ID einer Gutschrift (CN-…), diese Gutschrift in der Form von GetCreditNote; documentType gibt an, was es ist. Für einen Aufrufer mit Käuferrolle ist regionId der eigene Workspace der Rechnung. Für einen Aufrufer mit Lieferantenrolle ist regionId der eigene Workspace des Lieferanten, und die Rechnung wird unter den eingehenden Rechnungen der Organisation gesucht, unabhängig davon, welcher Käufer-Workspace sie ausgestellt hat - dieselbe Suche, die ListSupplierWorkspace verwendet. GET …/invoices/{invoiceId}/pdf akzeptiert denselben buyer-Query-Parameter.

Antwortfelder

  • replacesInvoiceIdsArray<string>

    Gutschrift und Neuberechnung: die Rechnungen und Belastungsanzeigen, die diese Rechnung ersetzt. Fehlt, wenn es keine gibt.

  • replacedByInvoiceIdsArray<string>

    Die Rechnungen, die diese ersetzen. Fehlt, wenn es keine gibt.

  • replacementobject

    Nur für Käufer und nur beim Abruf einer einzelnen Rechnung, bei einer ersetzten Rechnung, die nicht abgelehnt wurde: creditedInFull und uncredited - ihr Betrag abzüglich ihrer angenommenen und ausstehenden Gutschriften, in ihrer Währung. Solange uncredited über 0 liegt, wird bei Bezahlung dieser Rechnung und ihres Ersatzes doppelt gezahlt, und RecordPayment, StartStripePayment und ExportInvoicesForPayment verlangen confirmReplaced.

  • uncreditedOriginalsArray

    Nur für Käufer und nur beim Abruf einer einzelnen Rechnung, bei einer Ersatzrechnung: die ersetzten Rechnungen, die ihre Gutschriften nicht vollständig decken. Fehlt, wenn es keine gibt.

Fehler

  • 404 Not Found - Im Workspace des Aufrufers gibt es keine Rechnung mit dieser ID.
  • 409 Conflict - Nur für Aufrufer mit Lieferantenrolle. Code INVOICE_ID_AMBIGUOUS: Mehr als einer Ihrer Käufer hat eine Rechnung von Ihnen mit dieser ID (IDs sind nur innerhalb eines Käufers eindeutig), daher rät Pleaxy nicht, welche gemeint ist. Es wird nichts gelesen oder geändert. Das Feld buyers im Body listet Workspace-ID und Namen jedes Käufers auf: Wiederholen Sie den Aufruf mit ?buyer=<diese Workspace-ID>.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}
Anfrage
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Rechnungsaktivität abrufen

Gibt den Verlauf einer Rechnung zurück, älteste Einträge zuerst.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/activity

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

  • buyerstring

    Nur für Aufrufer mit Lieferantenrolle und nur nach einem 409 *_ID_AMBIGUOUS nötig: die Workspace-ID des Käufers (endet auf .buyer) oder die Regions-ID aus der buyers-Liste der 409-Antwort. Berücksichtigt wird nur das Dokument dieses Käufers; gibt es dort keines, folgt 404. Eine .supplier-Workspace-ID ergibt 400 BUYER_QUALIFIER_INVALID ("The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response."). Für einen Aufrufer mit Käuferrolle wird der Parameter ignoriert.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Der Verlauf einer Rechnung, älteste Einträge zuerst: ihr Eingang, die darauf ausgeführten Prüfungen und Abgleiche, Freigabeschritte, Ablehnung, Zahlungen, Erinnerungen und Kommentare. Jeder Eintrag hat eine Art (kind) und strukturierte Daten, nie einen Satz, sodass Sie ihn selbst formulieren können. Die meisten Einträge werden aus der Rechnung selbst gelesen, daher hat auch eine ältere Rechnung einen Verlauf. Ein Aufrufer mit Lieferantenrolle erhält nur den Eingang der Rechnung, ihr Ergebnis, erfasste Zahlungen, Erinnerungen und geteilte Kommentare.

Antwortfelder

  • idstring

    Bleibt für denselben Verlauf gleich, sodass Sie erkennen, welche Einträge Sie schon gesehen haben.

  • kind, datastring, object

    received: data.source, enteredBy, submittedFormat, fileName. corrects: data.invoiceId, die abgelehnte Rechnung, die sie ersetzt. control_findings (nur Käufer): data.codes. match (nur Käufer): data.result (matched, discrepancy oder unverified) und data.reason. sent_for_approval (nur Käufer): data.from (discrepancy oder unverified). approval (nur Käufer): data.action, data.stage und bei einer Neuzuweisung data.to. approved. rejected: data.reasonCode und data.reason. payment: data.action, method, paymentDate, reference. reminder: data.autonomy, wenn der Workspace sie selbstständig gesendet hat. comment: der Kommentar selbst, in comment.

Fehler

  • 404 Not Found - Im Workspace des Aufrufers gibt es keine Rechnung mit dieser ID.
  • 409 Conflict - Nur für Aufrufer mit Lieferantenrolle. Code INVOICE_ID_AMBIGUOUS: Mehr als einer Ihrer Käufer hat eine Rechnung von Ihnen mit dieser ID (IDs sind nur innerhalb eines Käufers eindeutig), daher rät Pleaxy nicht, welche gemeint ist. Es wird nichts gelesen oder geändert. Das Feld buyers im Body listet Workspace-ID und Namen jedes Käufers auf: Wiederholen Sie den Aufruf mit ?buyer=<diese Workspace-ID>.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/activity
Anfrage
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/activity" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
{
   "entries": [
      {
         "id": "string",
         "at": "string",
         "kind": "received" | "corrects" | "control_findings" | "match" | "sent_for_approval" | "approval" | "approved" | "rejected" | "payment" | "reminder" | "comment",
         "actorName": "string",
         "actorSide": "buyer" | "supplier" | "system",
         "data": { },
         "comment": {
            "id": "string",
            "documentKind": "invoice" | "purchase_order",
            "documentId": "string",
            "body": "string",
            "visibility": "internal" | "shared",
            "authorSide": "buyer" | "supplier",
            "authorKey": "string",
            "authorName": "string",
            "authorOrgName": "string",
            "mentions": [ { "employeeKey": "string", "name": "string" } ],
            "createdAt": "string",
            "deletedAt": "string",
            "viewerIsAuthor": boolean
         }
      }
   ]
}

Kommentare zu einer Rechnung auflisten

Listet die Kommentare zu einer Rechnung auf.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/comments

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

  • buyerstring

    Nur für Aufrufer mit Lieferantenrolle und nur nach einem 409 *_ID_AMBIGUOUS nötig: die Workspace-ID des Käufers (endet auf .buyer) oder die Regions-ID aus der buyers-Liste der 409-Antwort. Berücksichtigt wird nur das Dokument dieses Käufers; gibt es dort keines, folgt 404. Eine .supplier-Workspace-ID ergibt 400 BUYER_QUALIFIER_INVALID ("The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response."). Für einen Aufrufer mit Käuferrolle wird der Parameter ignoriert.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Die Kommentare zu einer Rechnung, älteste zuerst: die internen Ihrer eigenen Seite und alle geteilten. Ein vom Verfasser gelöschter Kommentar bleibt mit leerem Text im Verlauf, sodass weiterhin erkennbar ist, dass und wann etwas gesagt wurde. Gleiche Suche wie bei GetInvoice, sodass ein Lieferant die von ihm ausgestellten Rechnungen erreicht.

Antwortfelder

  • visibilitystring

    internal: nur die eigene Seite des Verfassers. shared: Käufer und Lieferant lesen ihn beide.

  • authorKey, mentionsstring, Array

    Nur bei Kommentaren Ihrer eigenen Seite: wer ihn geschrieben hat, per Mitarbeiterschlüssel, und wen er erwähnt hat. Die andere Seite sieht authorName und authorOrgName.

  • bodystring

    Klartext mit seinen Zeilenumbrüchen. Leer, sobald der Verfasser ihn gelöscht hat; deletedAt gibt dann an, wann.

  • viewerIsAuthorboolean

    Ob der Aufrufer ihn geschrieben hat und ihn daher löschen darf. Für einen API-Schlüssel immer false.

Fehler

  • 404 Not Found - Im Workspace des Aufrufers gibt es keine Rechnung mit dieser ID.
  • 409 Conflict - Nur für Aufrufer mit Lieferantenrolle. Code INVOICE_ID_AMBIGUOUS: Mehr als einer Ihrer Käufer hat eine Rechnung von Ihnen mit dieser ID (IDs sind nur innerhalb eines Käufers eindeutig), daher rät Pleaxy nicht, welche gemeint ist. Es wird nichts gelesen oder geändert. Das Feld buyers im Body listet Workspace-ID und Namen jedes Käufers auf: Wiederholen Sie den Aufruf mit ?buyer=<diese Workspace-ID>.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/comments
Anfrage
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/comments" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
{
   "comments": [
      {
         "id": "string",
         "documentKind": "invoice" | "purchase_order",
         "documentId": "string",
         "body": "string",
         "visibility": "internal" | "shared",
         "authorSide": "buyer" | "supplier",
         "authorKey": "string",
         "authorName": "string",
         "authorOrgName": "string",
         "mentions": [ { "employeeKey": "string", "name": "string" } ],
         "createdAt": "string",
         "deletedAt": "string",
         "viewerIsAuthor": boolean
      }
   ]
}

Kommentar zu einer Rechnung hinzufügen

Fügt einer Rechnung einen Kommentar hinzu.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/comments

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

  • buyerstring

    Nur für Aufrufer mit Lieferantenrolle und nur nach einem 409 *_ID_AMBIGUOUS nötig: die Workspace-ID des Käufers (endet auf .buyer) oder die Regions-ID aus der buyers-Liste der 409-Antwort. Berücksichtigt wird nur das Dokument dieses Käufers; gibt es dort keines, folgt 404. Eine .supplier-Workspace-ID ergibt 400 BUYER_QUALIFIER_INVALID ("The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response."). Für einen Aufrufer mit Käuferrolle wird der Parameter ignoriert.

Body

  • bodystringPflicht

    Klartext, bis zu 2.000 Zeichen. Zeilenumbrüche bleiben erhalten; Steuerzeichen, Zeichen für bidirektionalen Text und unsichtbare Zeichen werden entfernt.

  • visibility"internal" | "shared"Pflicht

    internal: nur Ihr eigenes Team. shared: Auch die andere Seite liest und beantwortet ihn. Kommentare eines Lieferanten sind immer geteilt.

  • mentionsstring[]

    Bis zu 10 Mitarbeiterschlüssel von Personen in Ihrem eigenen Workspace, die benachrichtigt werden (siehe ListEmployees). Die Benachrichtigung enthält nie den Text des Kommentars.

Rückgabe

201 Created mit dem in der Antwort gezeigten Objekt.

Weitere Details

Kommentare zu einer Rechnung: intern für Ihr Team oder mit der anderen Seite geteilt - etwa wenn ein Käufer den Lieferanten zu einer Position befragt. Kommentare werden nie bearbeitet. Die von Ihnen erwähnten Personen, frühere Kommentierende Ihrer Seite und bei einem geteilten Kommentar die andere Seite werden benachrichtigt (invoice_comment); die Benachrichtigung enthält nie den Text.

Nur angemeldete Sitzung. Ein API-Schlüssel erhält 403 HUMAN_SESSION_REQUIRED.

Fehler

  • 400 Bad Request - Ein leerer Text ("Write something before you post the comment."), mehr als 2.000 Zeichen, mehr als 10 Erwähnungen, eine Erwähnung einer Person außerhalb Ihres Workspace, eine andere Sichtbarkeit als internal oder shared, ein interner Kommentar eines Lieferanten ("A supplier's comments are always shared with the buyer.") oder ein geteilter Kommentar zu einem Dokument, dessen Lieferant nicht auf Pleaxy ist (posten Sie ihn stattdessen als internal).
  • 403 Forbidden - Code HUMAN_SESSION_REQUIRED: Der Aufrufer ist ein API-Schlüssel ("Comments are written by people. Sign in to Pleaxy to post one.").
  • 404 Not Found - Im Workspace des Aufrufers gibt es keine Rechnung mit dieser ID.
  • 409 Conflict - Nur für Aufrufer mit Lieferantenrolle. Code INVOICE_ID_AMBIGUOUS: Mehr als einer Ihrer Käufer hat eine Rechnung von Ihnen mit dieser ID (IDs sind nur innerhalb eines Käufers eindeutig), daher rät Pleaxy nicht, welche gemeint ist. Es wird nichts gelesen oder geändert. Das Feld buyers im Body listet Workspace-ID und Namen jedes Käufers auf: Wiederholen Sie den Aufruf mit ?buyer=<diese Workspace-ID>.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/comments
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/comments" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "body": "string",
   "visibility": "internal" | "shared",
   "mentions": [ "string" ]
}
Antwort · 201 Created
{
   "id": "string",
   "documentKind": "invoice" | "purchase_order",
   "documentId": "string",
   "body": "string",
   "visibility": "internal" | "shared",
   "authorSide": "buyer" | "supplier",
   "authorKey": "string",
   "authorName": "string",
   "authorOrgName": "string",
   "mentions": [ { "employeeKey": "string", "name": "string" } ],
   "createdAt": "string",
   "deletedAt": "string",
   "viewerIsAuthor": boolean
}

Kommentar zu einer Rechnung löschen

Löscht einen Ihrer Kommentare zu einer Rechnung.

DELETE/v1/workspaces/{regionId}/invoices/{invoiceId}/comments/{commentId}

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

  • commentIdstringPflicht

    Der Kommentar, z. B. "CMT-1760313600000-3f9a1c2e".

  • buyerstring

    Nur für Aufrufer mit Lieferantenrolle und nur nach einem 409 *_ID_AMBIGUOUS nötig: die Workspace-ID des Käufers (endet auf .buyer) oder die Regions-ID aus der buyers-Liste der 409-Antwort. Berücksichtigt wird nur das Dokument dieses Käufers; gibt es dort keines, folgt 404. Eine .supplier-Workspace-ID ergibt 400 BUYER_QUALIFIER_INVALID ("The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response."). Für einen Aufrufer mit Käuferrolle wird der Parameter ignoriert.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Zieht Ihren eigenen Kommentar zurück: Sein Text wird entfernt, und der Verlauf behält, dass ein Kommentar abgegeben wurde. Erneutes Löschen ändert nichts.

Nur angemeldete Sitzung. Ein API-Schlüssel erhält 403 HUMAN_SESSION_REQUIRED.

Fehler

  • 403 Forbidden - Code HUMAN_SESSION_REQUIRED: Der Aufrufer ist ein API-Schlüssel ("Comments are written by people. Sign in to Pleaxy to post one.").
  • 403 Forbidden - Der Kommentar stammt nicht von Ihnen ("Only the person who wrote a comment can delete it.").
  • 404 Not Found - Zu diesem Dokument gibt es keinen für Sie sichtbaren Kommentar mit dieser ID ("Comment {commentId} not found."), oder das Dokument existiert nicht.
  • 409 Conflict - Nur für Aufrufer mit Lieferantenrolle. Code INVOICE_ID_AMBIGUOUS: Mehr als einer Ihrer Käufer hat eine Rechnung von Ihnen mit dieser ID (IDs sind nur innerhalb eines Käufers eindeutig), daher rät Pleaxy nicht, welche gemeint ist. Es wird nichts gelesen oder geändert. Das Feld buyers im Body listet Workspace-ID und Namen jedes Käufers auf: Wiederholen Sie den Aufruf mit ?buyer=<diese Workspace-ID>.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
DELETE /v1/workspaces/{regionId}/invoices/{invoiceId}/comments/{commentId}
Anfrage
curl -X DELETE "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/comments/{commentId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
{
   "id": "string",
   "documentKind": "invoice" | "purchase_order",
   "documentId": "string",
   "body": "string",
   "visibility": "internal" | "shared",
   "authorSide": "buyer" | "supplier",
   "authorKey": "string",
   "authorName": "string",
   "authorOrgName": "string",
   "mentions": [ { "employeeKey": "string", "name": "string" } ],
   "createdAt": "string",
   "deletedAt": "string",
   "viewerIsAuthor": boolean
}

Rechnung einreichen

Erfasst das Rechnungsdokument eines Lieferanten als JSON, cXML oder UBL.

POST/v1/workspaces/{regionId}/invoices

Body

  • invoiceNumberstring

    Vom Lieferanten vergebene Rechnungsnummer, mit der wiederholte Einreichungen innerhalb der Region dedupliziert werden.

  • poIdstring

    Pleaxy-PO-ID, die diese Rechnung erfüllt, z. B. "PO-AB12CD34". Weglassen, um eine eigenständige Rechnung einzureichen.

  • supplierstringPflicht

    Anzeigename des Lieferanten bzw. der Gegenpartei.

  • amountnumberPflicht

    Rechnungssumme. Muss größer als 0 sein.

  • currencystring

    ISO-4217-Code (hier oder als currencyID in UBL bzw. Money currency in cXML). Muss die Regionswährung sein, und eine Rechnung zu einer PO muss auf die Währung der PO lauten. Pleaxy rechnet keine Währungen um.

  • dueInDaysnumber

    Zahlungsziel in Tagen. Standardmäßig die Standard-Zahlungsbedingungen des Vertrags, unter den die PO fällt, sonst 30.

  • lineItemsArray<{ description, qty?, unitPrice?, amount }>

    Optionale Aufschlüsselung der Rechnung nach Positionen.

  • lineItems[].ai{ invoicer, vendor, model, meter, region?, period? }

    Eine KI-Position: was sie abrechnet und der Nutzungsmonat (YYYY-MM; ohne Angabe der Monat vor invoiceDate), mit qty in der Einheit des Zählers (Millionen Tokens, Stunden). Jede KI-Position wird der KI-Position der Bestellung mit demselben Umfang zugeordnet und an der Vertragskondition, der Preisliste und dem Nutzungsbericht des Anbieters gemessen; was sie verletzt, erscheint als ai_*-Befunde.

  • poLineNonumber

    Mit poId: die PO-Position, die diese Rechnung abrechnet, wie bei CreateInvoice. XML-Dokumente geben sie stattdessen pro Position an (UBL cac:OrderLineReference/cbc:LineID, cXML InvoiceDetailItemReference@lineNumber).

  • billsNoPoLineboolean

    Mit poId: true, wenn die Rechnung keine der Positionen der PO abrechnet, wie bei CreateInvoice. Nicht zusammen mit poLineNo.

  • remittanceInstructionsobject

    Wohin der Käufer zahlen soll, gespeichert mit der Rechnung und danach nie geändert: { method, payeeName, bankName?, iban?, accountNumber?, bic?, routingNumber?, mailingAddress?, paymentReference?, notes? }. method ist bank_transfer (erfordert iban oder accountNumber), wire (iban oder accountNumber, dazu bic oder routingNumber), ach (accountNumber und eine 9-stellige ABA-routingNumber), check (mailingAddress) oder other (notes). Pleaxy prüft diese Angaben nie; der Käufer wird gewarnt, wenn Zahlungsempfänger oder Konto von der vorherigen Rechnung dieses Lieferanten abweichen.

  • pdfBase64string

    Base64-kodiertes PDF der Rechnung.

Rückgabe

201 Created mit dem in der Antwort gezeigten Objekt.

Weitere Details

Käuferoperation: erfasst das Rechnungsdokument eines Lieferanten direkt, ohne vorherige Umwandlung einer von Pleaxy angelegten PO. Ein JSON-Body mit connectionId ist stattdessen CreateInvoice. Der unten beschriebene JSON-Body (Lieferant und Betrag, ohne connectionId) ist veraltet und wird bis v2 akzeptiert. Ein Aufrufer mit Lieferantenrolle erhält 400 SUPPLIER_DIRECT_INVOICE_RETIRED - eine auf diesem Weg gesendete Rechnung erreichte keinen Käufer; Lieferanten verwenden stattdessen CreateInvoice oder FlipPurchaseOrderToInvoice. Akzeptiert drei Anfrageformate, ausgewählt per Content-Type: application/json (ein CreateInvoiceDto-Body) oder application/xml / text/xml mit entweder einem cXML-InvoiceDetailRequest oder einem UBL-2.1-Invoice-Dokument (automatisch anhand des geparsten XML erkannt). Wird poId angegeben, wird sie gegen eine bestehende PO im Status awaiting_fulfillment validiert, und die Rechnung ist "pending", wenn für den Anbieter der PO ein aktueller Abrechnungswert vorliegt, andernfalls "unverified" mit unverifiedReason "no_billing_connection"; ohne poId startet die Rechnung als "unverified" mit unverifiedReason "no_purchase_order". Ein XML-Dokument erhält dieselbe Zuordnung von Rabatten, Zuschlägen und Steuern, dieselbe Ablehnung negativer Positionen und denselben Summenabgleich wie bei SubmitFeedInvoice, und ein Fehler ergibt 400 INVOICE_DOCUMENT_INVALID. Der JSON-Body ist unverändert.

Nur für Aufrufer mit Käuferrolle: Rufen Sie es mit einer angemeldeten Sitzung oder dem eingeschränkten X-Api-Key eines Käufer-Workspace auf (siehe API-Schlüssel). Aufrufer mit Lieferantenrolle erhalten immer 400. Verwenden Sie stattdessen CreateInvoice.

Antwortfelder

  • idstring

    ID der Rechnung. "INV-<PO-Suffix>", wenn poId angegeben wurde, sonst ein zufälliges "INV-XXXXXXXX".

  • matchStatusstring

    "pending", wenn poId angegeben wurde und für ihren Anbieter ein aktueller Abrechnungswert vorliegt, sonst "unverified".

  • unverifiedReasonstring

    Gesetzt, wenn matchStatus "unverified" ist: "no_purchase_order" oder "no_billing_connection".

  • currencystring

    Die Währung, in der die Rechnung erfasst ist, in Großbuchstaben.

  • sourcestring

    Für diesen Endpunkt immer "direct".

  • submittedFormatstring

    "json", "cxml" oder "ubl", je nach Content-Type der Anfrage.

Fehler

  • 400 Bad Request (SUPPLIER_DIRECT_INVOICE_RETIRED) - Der Aufrufer ist ein Lieferant. Wird für jeden Content-Type und alle Zugangsdaten zurückgegeben, bevor der Body als Rechnung geparst oder validiert wird, und es wird nichts gespeichert. Die Größenbeschränkung der Anfrage greift trotzdem zuerst, und ein Body, der kein gültiges JSON ist, erhält den allgemeinen 400-Fehler des JSON-Parsers. Siehe ListInvoiceCounterparties und CreateInvoice.
  • 400 Bad Request - amount ist nicht größer als null, der JSON-Body besteht die Validierung nicht, die referenzierte PO ist nicht im Status awaiting_fulfillment, der XML-Body ist kein erkennbares cXML/UBL oder enthält eine DOCTYPE- oder Entity-Deklaration (INVOICE_DOCUMENT_INVALID; der standardmäßige externe DTD-Verweis von cXML ist erlaubt), oder die Währung der Rechnung kann nicht übernommen werden - sie ist nicht die Regionswährung ("This invoice is in GBP, but Europe is invoiced in EUR. Ask the supplier to reissue it in EUR - Pleaxy doesn't convert currencies.") oder nicht die der referenzierten PO ("This invoice is in GBP, but PO-AB12CD34 is in EUR. Ask the supplier to reissue it in EUR - Pleaxy doesn't convert currencies."). Die beiden Währungsablehnungen tragen den Code INVOICE_CURRENCY_MISMATCH bzw. INVOICE_PO_CURRENCY_MISMATCH.
  • 404 Not Found - poId wurde angegeben, aber im Workspace gibt es keine PO mit dieser ID.
  • 409 Conflict - invoiceNumber wurde bereits von einer anderen Rechnung in diesem Workspace verwendet, oder die referenzierte PO hat bereits eine Rechnung.
  • 415 Unsupported Media Type - Der Content-Type-Header ist etwas anderes als application/json, application/xml oder text/xml.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId), oder der Einkaufsrolle eines Aufrufers mit Käuferrolle fehlt der 'create'-Zugriff auf Rechnungen - nur administrator und finance haben ihn ("Your procurement role ('read-only') doesn't have 'create' access to 'invoices'"; einem API-Schlüssel wird zudem gesagt, sich mit einer Rolle neu erzeugen zu lassen, die ihn gewährt). Bei einer bloßen regionId wird ein Aufrufer mit beiden Profilen als Käufer behandelt; verwenden Sie die .supplier-Workspace-ID, um als Lieferant zu handeln.
POST /v1/workspaces/{regionId}/invoices
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/reg_01k5x8p9j3q7vn2mhb4tzc6rde.buyer/invoices" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "supplier": "Corvo Cloud Services",
    "amount": 4820.00,
    "currency": "USD",
    "dueInDays": 30,
    "invoiceNumber": "CORVO-2026-0091"
  }'
Antwort · 201 Created
{
  "id": "INV-7F3A9C21",
  "supplier": "Corvo Cloud Services",
  "amount": 4820,
  "currency": "USD",
  "matchStatus": "unverified",
  "paid": false,
  "dueInDays": 30,
  "createdAt": "2026-02-03T09:12:44.000Z",
  "source": "direct",
  "submittedFormat": "json",
  "externalInvoiceNumber": "CORVO-2026-0091"
}

Rechnungsgegenparteien auflisten

Listet auf, wem Sie Rechnungen stellen können oder wer Ihnen Rechnungen stellen kann.

GET/v1/workspaces/{regionId}/invoices/counterparties

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Die aktiven Gegenparteien, an die der Aufrufer über CreateInvoice Rechnungen stellen kann: für einen Aufrufer mit Käuferrolle seine freigegebenen Lieferanten, für einen Aufrufer mit Lieferantenrolle die Käufer, die ihn freigegeben haben. Jeder Eintrag enthält die Verbindungs-ID, die als connectionId übergeben wird, die Währung des Käufers und die offenen Bestellungen zwischen genau diesem Paar.

Nur angemeldete Sitzung. Ein API-Schlüssel erhält 403.

Antwortfelder

  • connectionIdstring

    Die Lieferantenverbindung, über die abgerechnet wird - die connectionId von CreateInvoice.

  • namestring

    Der Name der Gegenpartei: der des Lieferanten für einen Aufrufer mit Käuferrolle, der des Käufers für einen Aufrufer mit Lieferantenrolle.

  • currencystring

    Die Währung des Käufers. Jede Rechnung an diese Gegenpartei wird darin erfasst.

  • openPurchaseOrdersArray

    Bestellungen, die auf Ausführung warten und bei denen noch ein Betrag in Rechnung zu stellen ist, zwischen genau diesem Käufer und Lieferanten - die poIds, die CreateInvoice akzeptiert. invoicedAmount ist das, was frühere Rechnungen abgerufen haben, vor Steuern (fehlt, wenn es keine gab). lines sind die Positionen der PO, die eine Rechnung abrechnen kann (ihre poLineNo): jeweils ihr Betrag und was frühere Rechnungen davon abgerufen haben (consumed), vor Steuern. defaultDueInDays sind die Standard-Zahlungsbedingungen des Vertrags, unter den die PO fällt, um dueInDays einer Rechnung vorzubelegen (fehlt, wenn er keine hat). billToCompanyName ist das Unternehmen, dem der Lieferant der PO die Rechnung stellt (ihre billToParty; fehlt bei älteren POs). paidDeposits sind bezahlte Rechnungen zur PO, die eine Rechnung noch als Vorauszahlung abziehen kann (deductions[].sourceInvoiceId): was jeweils geschuldet war und wie viel noch keine Rechnung abzieht, einschließlich Steuern (fehlt, wenn es keine gibt).

  • invoiceFeedEnabledboolean

    Nur für Aufrufer mit Käuferrolle: true, wenn die automatisierten Rechnungen dieses Lieferanten aktiviert sind (siehe SetInvoiceFeed). Ab der Freigabe aktiv; fehlt das Feld, sind sie deaktiviert.

  • invoiceFeedUpdatedAtstring

    Nur für Aufrufer mit Käuferrolle: wann automatisierte Rechnungen zuletzt aktiviert oder deaktiviert wurden. Fehlt, wenn nie.

  • feedReadinessstring

    Nur für Aufrufer mit Käuferrolle mit ?perConnection=true: der Stand der automatisierten Rechnungen dieser Verbindung - "off" (der Schalter), "untested" (noch nichts bestanden), "tested" (ein ValidateFeedInvoice-Aufruf hat bestanden), "live" (mindestens eine Rechnung angenommen). Die eigene Ansicht des Lieferanten (ListSupplierConnections) kann auch "no_key" und "not_connected" anzeigen.

  • feedAcceptedCount, feedLastAcceptedAt, feedValidCount, feedLastValidAtnumber, string, number, string

    Nur für Aufrufer mit Käuferrolle mit ?perConnection=true: das Spiegelbild des Versuchsprotokolls (ListFeedAttempts), sobald der Feed aufgerufen wurde.

Fehler

  • 403 Forbidden - Der Aufrufer hat sich mit einem API-Schlüssel statt mit einer angemeldeten Sitzung authentifiziert ("This action requires a logged-in user session, not an API key"), seine Zugangsdaten gewähren keinen Zugriff auf diesen Workspace, oder die Einkaufsrolle eines Aufrufers mit Käuferrolle kann keine Rechnungen anlegen.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
GET /v1/workspaces/{regionId}/invoices/counterparties
Anfrage
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/counterparties" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
{
   "counterparties": [
      {
         "connectionId": "string",
         "name": "string",
         "currency": "string",
         "openPurchaseOrders": [
            {
               "id": "string", "amount": number, "createdAt": "string", "label": "string", "invoicedAmount": number, "defaultDueInDays": number, "billToCompanyName": "string",
               "lines": [ { "lineNo": number, "name": "string", "amount": number, "consumed": number } ],
               "paidDeposits": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "currency": "string", "owed": number, "available": number, "paidOn": "string", "prepayment": true, "reference": "string" } ]
            }
         ],
         "invoiceFeedEnabled": boolean,
         "invoiceFeedUpdatedAt": "string"
      }
   ]
}

Rechnung anlegen

Legt eine Rechnung für einen verbundenen Käufer oder Lieferanten an.

POST/v1/workspaces/{regionId}/invoices

Body

  • documentTypestring

    invoice (Standard), debit_note oder credit_note. Bei credit_note ist der übrige Body der von CreateCreditNote (ein unbekanntes Feld ergibt 400), und die Antwort ist die Gutschrift. Bei debit_note ist es eine Rechnung, die eine andere nach oben korrigiert: Geben Sie amendsInvoiceId an (oder amendsInvoiceNumber, die Nummer des Lieferanten); connectionId kann entfallen. Sie übernimmt Gegenpartei, PO, PO-Position und Währung des Originals (eine andere PO oder Währung ergibt 400 DEBIT_NOTE_INVALID), verbraucht PO-Saldo und wird wie jede Rechnung freigegeben und bezahlt. Sie wird gegen die PO abgeglichen, außer bei der PO eines Cloud-Anbieters, wo sie als unverified mit unverifiedReason "debit_note" zur Prüfung durch eine Person startet. Das Original muss eine Rechnung dieses Lieferanten an diesen Käufer sein (sonst 404 DEBIT_NOTE_ORIGINAL_NOT_FOUND), darf nicht abgelehnt und selbst keine Belastungsanzeige sein. Alles andere ergibt 400 DOCUMENT_TYPE_INVALID.

  • amendsInvoiceIdstring

    Nur Belastungsanzeige: die Pleaxy-ID der Rechnung, die sie ändert.

  • amendsInvoiceNumberstring

    Nur Belastungsanzeige: die Nummer des Lieferanten für die Rechnung, die sie ändert, wenn die Pleaxy-ID nicht bekannt ist.

  • replacesInvoiceIdsArray<string>

    Eine Ersatzrechnung (Gutschrift und Neuberechnung: Der Lieferant schreibt Rechnungen vollständig gut und stellt sie erneut in Rechnung): die Pleaxy-IDs der Rechnungen und Belastungsanzeigen, die sie ersetzt, 1–20, alle von diesem Lieferanten. Sie kann eine andere Bestellung oder Währung abrechnen als diese. Jedes Original führt sie dann in replacedByInvoiceIds. Eine unbekannte Rechnung oder die eines anderen Lieferanten ergibt 404 REPLACES_NOT_FOUND; eine Gutschrift oder Ersetzungen bei einer Belastungsanzeige ergeben 400 REPLACES_INVALID.

  • replacesInvoiceNumbersArray<string>

    Eine Ersatzrechnung: die Nummern des Lieferanten für die Rechnungen, die sie ersetzt, wenn die Pleaxy-IDs nicht bekannt sind. 1–20.

  • connectionIdstringPflicht

    Die Gegenpartei, an die die Rechnung geht - eine connectionId aus ListInvoiceCounterparties.

  • poIdstring

    Eine offene Bestellung zwischen genau diesem Käufer und Lieferanten, aus openPurchaseOrders der Gegenpartei.

  • invoiceNumberstringPflicht

    1–64 Zeichen: Buchstaben, Ziffern, '.', '_', '/' und '-', beginnend mit einem Buchstaben oder einer Ziffer. Eindeutig pro Lieferant innerhalb des Käufer-Workspace, ohne Beachtung der Groß-/Kleinschreibung.

  • invoiceDatestringPflicht

    YYYY-MM-DD. Nicht in der Zukunft und nicht mehr als 365 Tage zurück.

  • dueInDaysnumber

    Zahlungsziel in Tagen, 0–365. Standardmäßig die Standard-Zahlungsbedingungen des Vertrags, unter den die PO fällt (defaultDueInDays aus ListInvoiceCounterparties), sonst 30.

  • lineItemsArray<{ description, qty, unitPrice, discount?, charge? }>Pflicht

    1–100 Positionen. description hat 1–200 Zeichen, qty ist größer als 0 und höchstens 1.000.000, unitPrice liegt zwischen 0 und 1.000.000.000. Eine Minderung ist ein Rabatt, nie ein negativer Preis: Ein negativer unitPrice ergibt 400 ("lineItems[1].unitPrice can't be negative. Send a reduction as that line's "discount", or as an "adjustments" entry with "type": "discount"."). discount und charge sind optionale Summen für die Position, 0 oder mehr, mit nicht mehr Nachkommastellen, als die Käuferwährung erlaubt (2 bei USD und EUR, keine bei JPY: sonst 400, z. B. "taxAmount must be a whole number in JPY."), und der Rabatt der Position darf nicht höher sein als qty × unitPrice + charge. null wird nicht akzeptiert: Lassen Sie ein nicht zutreffendes Feld weg. Die Summe nach Rabatten muss größer als 0 sein und die Summe höchstens 1.000.000.000.000.000 betragen. Die PO-Position, die die Rechnung abrechnet, wird einmal an der Rechnung angegeben (poLineNo oder billsNoPoLine), nie an ihren Positionen: poLineNo oder billsNoPoLine einer einzelnen Position wird ignoriert. Erfassen Sie Versand- und Bearbeitungskosten in adjustments statt als Position.

  • lineItems[].ai{ invoicer, vendor, model, meter, region?, period? }

    Eine KI-Position: was sie abrechnet und der Nutzungsmonat (YYYY-MM; ohne Angabe der Monat vor invoiceDate), mit qty in der Einheit des Zählers (Millionen Tokens, Stunden). Jede KI-Position wird der KI-Position der Bestellung mit demselben Umfang zugeordnet und an der Vertragskondition, der Preisliste und dem Nutzungsbericht des Anbieters gemessen; was sie verletzt, erscheint als ai_*-Befunde.

  • poLineNonumber

    Mit poId: die PO-Position, die diese Rechnung abrechnet, über ihre lineNo (aus GetPurchaseOrder oder openPurchaseOrders[].lines von ListInvoiceCounterparties). Eine Rechnung rechnet eine PO-Position ab, und alle ihre Positionen werden daran gemessen; um mehrere PO-Positionen abzurechnen, senden Sie je eine Rechnung. Positionen werden nie anhand der Beschreibung PO-Positionen zugeordnet. Bei einer PO mit einer Position rechnet eine Rechnung ohne Angabe diese Position ab. Bei einer PO mit mehreren Positionen ist eine Rechnung ohne Angabe eine "discrepancy" (po_line_unassigned), die eine Person klären muss, weil weder Limit noch Preis einer Position geprüft werden konnten. Eine lineNo, die die PO nicht hat, ergibt 400 INVOICE_PO_LINE_UNKNOWN. Nicht zusammen mit billsNoPoLine (400 INVOICE_PO_LINE_CONTRADICTORY). Eine Belastungsanzeige ohne Angabe übernimmt die ihres Originals.

  • billsNoPoLineboolean

    Mit poId: true, wenn die Rechnung keine der Positionen der PO abrechnet, etwa eine nicht bestellte Zusatzleistung oder eine einmalige Gebühr. Sie verbraucht nur den Saldo der PO, und die Rechnung wird nie automatisch freigegeben. Nicht zusammen mit poLineNo.

  • adjustmentsArray<{ type, description, amount }>

    Rabatte und Zuschläge auf Rechnungsebene, vor Steuern. Höchstens 20. type ist "discount" oder "charge"; description hat 1–200 Zeichen und wird ohne Steuerzeichen, Zeilenumbrüche oder Steuerzeichen für bidirektionalen Text gespeichert; amount ist ein positiver Betrag, 0.01 oder mehr, mit nicht mehr Nachkommastellen, als die Käuferwährung erlaubt (type bestimmt das Vorzeichen).

  • taxAmountnumber

    Gesamtsteuer der Rechnung, wie vom Lieferanten angegeben. Sie ist in der Rechnungssumme enthalten. Pleaxy berechnet keine Steuern. 0 oder mehr, mit nicht mehr Nachkommastellen, als die Käuferwährung erlaubt. Lassen Sie das Feld weg, wenn die Rechnung keine Steuer ausweist; null wird abgelehnt.

  • currencystring

    ISO 4217, optional. Wird nur geprüft: Es muss die Käuferwährung sein, die immer diejenige ist, die gespeichert wird.

  • pdfBase64string

    Base64-kodiertes PDF der Rechnung, bis zu 8MB.

  • remittanceInstructionsobject

    Wohin der Käufer zahlen soll, gespeichert mit der Rechnung und danach nie geändert: { method, payeeName, bankName?, iban?, accountNumber?, bic?, routingNumber?, mailingAddress?, paymentReference?, notes? }. method ist bank_transfer (erfordert iban oder accountNumber), wire (iban oder accountNumber, dazu bic oder routingNumber), ach (accountNumber und eine 9-stellige ABA-routingNumber), check (mailingAddress) oder other (notes). Pleaxy prüft diese Angaben nie; der Käufer wird gewarnt, wenn Zahlungsempfänger oder Konto von der vorherigen Rechnung dieses Lieferanten abweichen.

  • withholdingsArray<{ description, amount, rate? }>

    Optional. Steuern, die der Käufer von seiner Zahlung einbehält (retenciones, z. B. ISR retenido), in der Rechnungswährung. Sie mindern den Zahlbetrag, nie die Summe oder deren Steuer. Zusammen mit den Abzügen weniger als die Summe. Höchstens 20.

  • deductionsArray<{ kind, description, amount, reference?, paidOn?, sourceInvoiceId? }>

    Optional. Was nach Steuern bereits auf die Rechnung gezahlt wurde: kind "prepayment" für eine vom Käufer gezahlte Anzahlung oder Vorauszahlung (sie braucht eine reference oder eine sourceInvoiceId, die Ihre bezahlte Rechnung zur selben PO nennt, deren Zahlungsreferenz und -datum dann ergänzt werden und die die PO nur einmal verbraucht), oder kind "credit" für ein Guthaben, das Sie auf der Rechnung verrechnet haben. Sie mindern den Zahlbetrag, nie die Summe oder deren Steuer. Zusammen mit den Einbehalten weniger als die Summe; nicht zusammen mit paymentCurrencyAmount. Höchstens 20. UBL: cbc:PrepaidAmount; cXML: DepositAmount.

  • taxBreakdownArray<{ description, amount, rate? }>

    Optional. Steuern nach Art in der Rechnungswährung, z. B. [{ "description": "IVA", "rate": 21, "amount": 199.50 }, { "description": "Percepción IIBB", "amount": 28.50 }]. rate ist ein Prozentsatz und optional. Die Summe muss taxAmount ergeben, das dann erforderlich ist (400 TAX_BREAKDOWN_MISMATCH). Höchstens 20. Nur zur Anzeige. UBL: die TaxSubtotals des TaxTotal in der Dokumentwährung, übernommen, wenn sie aufgehen.

  • paymentCurrencyAmountobject

    Optional. Nur wenn die Rechnung den geschuldeten Betrag in einer anderen Währung nennt (z. B. AWS, das einem argentinischen Kunden in ARS abrechnet); dann ist totalAmount der Zahlbetrag, den Verbindlichkeiten, Zahlungen und der Zahlungsdatensatz verwenden: { currencyCode, totalAmount, totalAmountBeforeTax?, amountBreakdown?: { subTotalAmount?, discounts?, fees?, taxes? }, currencyExchangeDetails: { rate, rateDate?, rateSource?, sourceCurrencyCode?, targetCurrencyCode? } }, dieselbe Form wie PaymentCurrencyAmount bei AWS Invoicing. rate bedeutet 1 Einheit Rechnungswährung = rate currencyCode, wie auf der Rechnung angegeben. Lassen Sie es weg, wenn die Rechnung zum Kurs am Zahlungsdatum umgerechnet wird. Jeder angegebene Wert muss innerhalb von 0.5% (oder einer kleinsten Einheit) des Rechnungswerts × rate liegen (400 STATED_AMOUNT_RATE_MISMATCH, mit Nennung beider Werte), jede Aufschlüsselung muss ihre Summe ergeben, und currencyCode darf nicht die eigene Währung der Rechnung sein (400 SAME_CURRENCY). rateDate ist YYYY-MM-DD, nicht in der Zukunft und höchstens einen Tag nach dem Rechnungsdatum. UBL: cbc:PaymentCurrencyCode mit cac:PaymentExchangeRate; cXML: Money@alternateCurrency/alternateAmount an DueAmount. Wird wie angegeben erfasst; Pleaxy rechnet nichts um.

  • taxCurrencyAmountobject

    Optional. Steuer in der gesetzlichen Währung des Landes des Käufers, wenn diese nicht die Rechnungswährung ist. Gleiche Form wie paymentCurrencyAmount; amountBreakdown.taxes.totalAmount ist erforderlich, totalAmount optional. Erfordert taxAmount. UBL: das cac:TaxTotal von cbc:TaxCurrencyCode mit cac:TaxExchangeRate oder ohne diesen (EN 16931 BT-111) ein aus den beiden Steuersummen abgeleiteter Kurs; cXML: Money@alternateAmount an Tax. Ein abgeleiteter Kurs hat rateSource "derived" und wird nicht gegen die Beträge geprüft, aus denen er stammt. Nur zur Anzeige.

Rückgabe

201 Created mit dem in der Antwort gezeigten Objekt.

Weitere Details

Wird als application/json-Body mit connectionId gesendet; derselbe Pfad ohne connectionId ist SubmitInvoice. Ersetzt POST /v1/workspaces/{regionId}/invoices/manual, das jetzt 410 ROUTE_MERGED zurückgibt. Erfasst eine Rechnung für eine aktive Gegenpartei aus ListInvoiceCounterparties - ein Lieferant, der einem seiner Käufer eine Rechnung stellt, oder ein Käufer, der die Rechnung eines seiner Lieferanten erfasst. Die Rechnung wird im Workspace des Käufers in dessen Währung gespeichert, sodass beide Seiten sie sehen. Der Server berechnet den Betrag jeder Position als qty × unitPrice + charge − discount und die Summe als die Positionen abzüglich Rabatten auf Rechnungsebene, zuzüglich Zuschlägen auf Rechnungsebene, zuzüglich taxAmount. Jeder berechnete Wert wird kaufmännisch auf die kleinste Einheit der Käuferwährung gerundet: auf den Cent bei USD und EUR, auf ganze Einheiten bei JPY (3 × 333.33 JPY ergibt einen Positionsbetrag von 1.000). Diese Summe ist der Betrag, der abgeglichen, freigegeben, gegen Obergrenzen geprüft und bezahlt wird. Mit poId ist sie "pending", wenn für den Anbieter der PO ein aktueller Abrechnungswert vorliegt, andernfalls "unverified" mit unverifiedReason "no_billing_connection" (nur in der Käuferansicht); ohne poId ist sie "unverified" mit unverifiedReason "no_purchase_order". Ein Käufer, der eine Rechnung erfasst, kann sie nicht freigeben, klären, exportieren oder ihre Zahlung erfassen, es sei denn, niemand sonst im Workspace könnte es; die Zahlung über Stripe erfordert immer eine andere Person.

Aufrufer mit Käuferrolle: eine angemeldete Sitzung oder der X-Api-Key eines Käufer-Workspace. Wer sie erfasst hat, und bei einem Schlüssel auch die Person, die den Schlüssel erzeugt hat, kann sie nicht freigeben, klären, exportieren oder ihre Zahlung erfassen, es sei denn, eine angemeldete Person ist die Einzige im Workspace, die es könnte; die Zahlung über Stripe erfordert immer eine andere Person. Aufrufer mit Lieferantenrolle: nur angemeldete Sitzung; ein Lieferanten-API-Schlüssel erhält 400 SUPPLIER_DIRECT_INVOICE_RETIRED.

Antwortfelder

  • sourcestring

    Für diesen Endpunkt immer "manual".

  • amountnumber

    Die zu zahlende Summe: die Positionen nach ihren eigenen Rabatten und Zuschlägen, abzüglich Rabatten auf Rechnungsebene, zuzüglich Zuschlägen auf Rechnungsebene, zuzüglich taxAmount. Abgleich, Freigabe, Autonomie, Vertragsobergrenzen und Zahlung verwenden sie alle.

  • lineItemsArray

    Jede Position wie gespeichert. amount ist der Nettobetrag der Position, vor Steuern; discount und charge erscheinen nur bei einer Position, die sie hat.

  • adjustmentsArray

    Rabatte und Zuschläge auf Rechnungsebene. Fehlt, wenn es keine gibt.

  • taxAmountnumber

    Die angegebene Steuer, bereits in amount enthalten. Nur zur Anzeige: Keine Entscheidung liest sie. Fehlt, wenn keine angegeben wurde.

  • currencystring

    Die Währung des Käufers.

Fehler

  • 400 Bad Request - Der Body besteht die Validierung nicht (auch bei mehr als 20 adjustments, einem negativen taxAmount oder mehr als 2 Nachkommastellen bei einem Rabatt, Zuschlag, einer Anpassung oder taxAmount), INVOICE_DOCUMENT_INVALID (ein negativer unitPrice; ein Positionsrabatt, der größer ist als seine Position: "Line 2's discount (12.00 USD) is more than the line (10.00 USD). Check lineItems[1].discount."; eine Summe nach Rabatten, die nicht größer als 0 ist: "The invoice total after discounts must be greater than zero."; eine Summe über 1.000.000.000.000.000; oder mehr Nachkommastellen, als die Käuferwährung bei einem Rabatt, Zuschlag, einer Anpassung oder taxAmount erlaubt ("lineItems[0].discount must be a whole number in JPY.")), invoiceDate liegt außerhalb des zulässigen Bereichs (INVOICE_DATE_OUT_OF_RANGE), die Gegenpartei ist noch nicht verbunden (COUNTERPARTY_NOT_ACTIVE), poId kann nicht abgerechnet werden (PO_NOT_INVOICEABLE), poLineNo ist eine Position, die die PO nicht hat (INVOICE_PO_LINE_UNKNOWN), oder kommt zusammen mit billsNoPoLine (INVOICE_PO_LINE_CONTRADICTORY), oder currency ist nicht die des Käufers (INVOICE_CURRENCY_MISMATCH).
  • 404 Not Found - Für den Aufrufer ist keine Gegenpartei mit dieser connectionId sichtbar.
  • 409 Conflict - Dieser Lieferant hat bereits eine Rechnung mit dieser Nummer (INVOICE_NUMBER_TAKEN).
  • 400 Bad Request - Der Body enthält amount (AMOUNT_NOT_ACCEPTED: "Leave amount off: Pleaxy computes the total from the line items."), oder ein Lieferant hat mit einem API-Schlüssel aufgerufen (SUPPLIER_DIRECT_INVOICE_RETIRED).
  • 403 Forbidden - Die Zugangsdaten gewähren keinen Zugriff auf diesen Workspace, oder die Einkaufsrolle eines Aufrufers mit Käuferrolle kann keine Rechnungen anlegen.
  • 422 Unprocessable Entity - Die Gegenpartei ist das eigene Käufer- oder Lieferantenprofil des Aufrufers (SELF_DEALING).
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
POST /v1/workspaces/{regionId}/invoices
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "connectionId": "string",
   "poId": "string",
   "invoiceNumber": "string",
   "invoiceDate": "string",
   "dueInDays": number,
   "poLineNo": number,
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "currency": "string",
   "pdfBase64": "string"
}
Antwort · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Wechselkurse abrufen

Gibt die Wechselkurse zurück, mit denen Beträge mit Ihren Limits verglichen werden.

GET/v1/workspaces/{regionId}/exchange-rates

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Die Kurse, die Pleaxy ausschließlich verwendet, um Bestellungen und Rechnungen in anderen Währungen mit Ihren Freigabeschwellen, Betragsbedingungen, Limits für automatische Freigabe, Automatisierungsregeln und Ausgabenlimits zu vergleichen. Beträge, Rechnungen und Zahlungen werden nie umgerechnet. Eine Zeile pro Währung, die Ihre Bestellungen, Rechnungen und Lieferanten verwenden: der Referenzkurs in die Währung Ihres Workspace (ein Tageskurs von Exchange Rate API, verwendet, solange er höchstens 3 Tage alt ist). Workspaces können keine eigenen Kurse festlegen. Ohne aktuellen Kurs durchläuft ein Dokument in dieser Währung jeden Freigabeschritt und wird nie automatisch freigegeben. Eine mit einem Kurs aufgebaute Kette hält ihn als approval.fx fest: { from, to, rate, source: provider | none, asOf, controlAmount, supplierStated? }. Gibt eine Rechnung ihren eigenen Wert in der Währung Ihres Workspace an (ihr paymentCurrencyAmount oder ihre Summe zum Kurs ihres taxCurrencyAmount), ist controlAmount der größere Wert aus diesem und dem Wert zum Referenzkurs, sodass ein niedriger angegebener Kurs die Weiterleitung nicht senken kann; supplierStated { amount, rateSource, rateDate } zeigt den Wert der Rechnung. Ohne aktuellen Referenzkurs durchläuft die Kette weiterhin jeden Freigabeschritt, nie gemessen am Wert der Rechnung. Eine Rechnung, deren angegebener Kurs bei Eingang um mehr als warningPct vom Referenzkurs abweicht, trägt rateWarnings (nur in der Käuferansicht); sie blockieren sie nie. Kurse von Exchange Rate API (https://www.exchangerate-api.com).

Nur angemeldete Sitzung, mit 'view'-Zugriff auf die Freigabeeinstellungen. Ein API-Schlüssel erhält 403 HUMAN_SESSION_REQUIRED: Die Bedingungen des Kursanbieters erlauben nicht, seine Kurse über eine API anzubieten.

Fehler

  • 403 Forbidden - Ein API-Schlüssel (HUMAN_SESSION_REQUIRED), ein Aufrufer mit Lieferantenrolle oder eine Einkaufsrolle ohne 'view' für die Freigabeeinstellungen.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
GET /v1/workspaces/{regionId}/exchange-rates
Anfrage
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/exchange-rates" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
{
   "workspaceCurrency": "string",
   "warningPct": number,
   "rows": [
      { "currency": "string", "providerRate": number, "providerAsOf": "string" }
   ],
   "provider": { "asOf": "string", "fresh": boolean, "attribution": { "text": "string", "url": "string" } }
}

Wechselkurswarnung festlegen

Legt fest, ab wann der eigene Wechselkurs einer Rechnung eine Warnung erhält.

PUT/v1/workspaces/{regionId}/exchange-rates

Body

  • warningPctnumberPflicht

    0 bis 100.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Legt fest, wie weit der eigene angegebene Kurs einer Rechnung (der Kurs ihres paymentCurrencyAmount oder taxCurrencyAmount) in Prozent vom Referenzkurs (einem aktuellen Tageskurs von Exchange Rate API) abweichen darf, bevor die Rechnung rateWarnings trägt. Standard 5. Wird bei Eingang einer Rechnung geprüft; bereits empfangene Rechnungen behalten ihre Warnungen. Eine Warnung blockiert eine Rechnung nie. Ohne aktuellen Referenzkurs gibt es nichts zu vergleichen und keine Warnung.

Nur angemeldete Sitzung (ein API-Schlüssel erhält 403 HUMAN_SESSION_REQUIRED), mit 'edit'-Zugriff auf die Freigabeeinstellungen: Administratoren.

Fehler

  • 400 Bad Request - warningPct fehlt oder ist keine Zahl von 0 bis 100.
  • 403 Forbidden - Ein API-Schlüssel, ein Aufrufer mit Lieferantenrolle oder eine Einkaufsrolle ohne 'edit' für die Freigabeeinstellungen.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
PUT /v1/workspaces/{regionId}/exchange-rates
Anfrage
curl -X PUT "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/exchange-rates" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "warningPct": number
}
Antwort · 200 OK
{
   "warningPct": number
}

Referenzkurs abrufen

Gibt den Referenzwechselkurs für ein Datum zurück.

GET/v1/workspaces/{regionId}/reference-rate

Parameter

  • fromstringPflicht

    ISO-4217-Code: die Währung der Rechnung.

  • tostringPflicht

    ISO-4217-Code: die Zahlungs- oder Steuerwährung.

  • datestring

    YYYY-MM-DD, das Rechnungsdatum. Standardmäßig heute.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Der Referenzkurs für 1 from in to zu einem Rechnungsdatum: der Tageskurs von Exchange Rate API für dieses Datum oder der jüngste der 3 Tage davor, nie der eines späteren Tages. Ohne date der heutige, solange er höchstens 3 Tage alt ist. Das Formular Neue Rechnung schlägt damit den Kurs für eine Zahlungs- oder Steuerwährung vor; die Rechnung hält jeden übermittelten Kurs und Wert fest, und Pleaxy prüft, ob sie übereinstimmen. reference fehlt, wenn es keinen Kurs gibt (gleiche Währung, eine unbekannte Währung oder kein Stand für dieses Datum). Kurse von Exchange Rate API (https://www.exchangerate-api.com).

Nur angemeldete Sitzung, mit 'create'-Zugriff auf Rechnungen. Ein API-Schlüssel erhält 403 HUMAN_SESSION_REQUIRED: Die Bedingungen des Kursanbieters erlauben nicht, seine Kurse über eine API anzubieten.

Fehler

  • 400 Bad Request - from oder to ist kein aus 3 Buchstaben bestehender ISO-4217-Code, oder date ist nicht YYYY-MM-DD.
  • 403 Forbidden - Ein API-Schlüssel (HUMAN_SESSION_REQUIRED) oder eine Rolle ohne 'create' für Rechnungen.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
GET /v1/workspaces/{regionId}/reference-rate
Anfrage
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/reference-rate" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
{
   "reference": {
      "from": "string",
      "to": "string",
      "rate": number,
      "date": "string",
      "source": "string",
      "attribution": { "text": "string", "url": "string" }
   }
}

Lieferantenwährungen festlegen

Legt die Währungen fest, in denen ein Lieferant abrechnet und bezahlt wird.

PUT/v1/workspaces/{regionId}/supplier-connections/{connectionId}/currencies

Parameter

  • connectionIdstringPflicht

    Die Lieferantenverbindung.

Body

  • billingCurrencystring | null

    ISO 4217. Nur für einen Lieferanten ohne Pleaxy-Konto; ein Lieferant mit Konto legt seine Währungen selbst fest.

  • paymentCurrencystring | null

    ISO 4217. Bei einem Lieferanten mit Konto eine Währung, in der er Zahlungen annimmt.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Legt zwei Standardwerte für einen Lieferanten fest: "Rechnungswährung" (billingCurrency), die Währung, in der ein Lieferant ohne Pleaxy-Konto Ihnen Rechnungen stellt, verwendet für seine neuen Bestellungen und Rechnungen; und "Zahlungswährung" (paymentCurrency), die Währung, in der Sie ihn üblicherweise bezahlen, vorgeschlagen als Zahlungswährung einer neuen Rechnung. Ein fehlendes Feld bleibt unverändert, null entfernt es. Bestehende Bestellungen und Rechnungen behalten ihre Währungen. Der Lieferant sieht keinen der beiden Werte.

Angemeldete Sitzung oder der X-Api-Key eines Käufer-Workspace, mit 'edit'-Zugriff auf Lieferanten: administrator oder contracts-and-suppliers.

Fehler

  • 400 Bad Request - Ein Code, der nicht ISO 4217 entspricht, billingCurrency für einen Lieferanten mit Konto (BILLING_CURRENCY_SUPPLIER_OWNED) oder eine paymentCurrency, die er nicht annimmt (PAYMENT_CURRENCY_NOT_ACCEPTED).
  • 403 Forbidden - Ein Aufrufer mit Lieferantenrolle oder eine Einkaufsrolle ohne 'edit' für Lieferanten.
  • 404 Not Found - In diesem Workspace gibt es keine solche Verbindung.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
PUT /v1/workspaces/{regionId}/supplier-connections/{connectionId}/currencies
Anfrage
curl -X PUT "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/supplier-connections/{connectionId}/currencies" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "billingCurrency": "string" | null,
   "paymentCurrency": "string" | null
}
Antwort · 200 OK
{
   "id": "string",
   "supplierName": "string",
   "billingCurrency": "string",
   "paymentCurrency": "string"
}

Rechnungs-Feed festlegen

Aktiviert oder deaktiviert die automatisierten Rechnungen eines Lieferanten.

PUT/v1/workspaces/{regionId}/supplier-connections/{connectionId}/invoice-feed

Parameter

  • connectionIdstringPflicht

    Die Lieferantenverbindung.

Body

  • enabledbooleanPflicht

    true, um die automatisierten Rechnungen dieses Lieferanten anzunehmen, false, um sie zu stoppen.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Aktiviert oder deaktiviert die automatisierten Rechnungen (SubmitFeedInvoice) eines Lieferanten für eine freigegebene Verbindung. Aktiv ab dem Moment, in dem Sie das Onboarding des Lieferanten freigeben (vor dem 9. Oktober 2026 freigegebene Verbindungen behalten ihren bisherigen Wert); dies ist der Stoppschalter. Das Deaktivieren lehnt bereits die nächste Anfrage des Lieferanten ab; bereits empfangene Rechnungen bleiben unter Rechnungen & Abgleich und durchlaufen weiter die Freigabe. Der Lieferant wird benachrichtigt (invoice_feed_changed). Das Setzen des bereits vorhandenen Werts ändert nichts. Gibt die Verbindung mit invoiceFeedEnabled, invoiceFeedUpdatedAt und invoiceFeedUpdatedBy zurück. ListInvoiceCounterparties zeigt die aktuelle Einstellung und Bereitschaft jeder Verbindung.

Nur angemeldete Sitzung (ein API-Schlüssel erhält 403), mit 'edit'-Zugriff auf Rechnungen: administrator oder finance.

Fehler

  • 400 Bad Request - Die Verbindung ist noch nicht freigegeben (COUNTERPARTY_NOT_ACTIVE), oder enabled ist kein Boolean.
  • 403 Forbidden - Ein API-Schlüssel statt einer angemeldeten Sitzung, ein Aufrufer mit Lieferantenrolle oder eine Einkaufsrolle ohne 'edit' für Rechnungen (read-only, contracts-and-suppliers, relationships, requisitions).
  • 404 Not Found - Im Workspace gibt es keine Verbindung mit dieser ID.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
PUT /v1/workspaces/{regionId}/supplier-connections/{connectionId}/invoice-feed
Anfrage
curl -X PUT "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/supplier-connections/{connectionId}/invoice-feed" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "enabled": boolean
}
Antwort · 200 OK
{
   "id": "string",
   "supplierName": "string",
   "status": "approved",
   "invoiceFeedEnabled": boolean,
   "invoiceFeedUpdatedAt": "string",
   "invoiceFeedUpdatedBy": "string"
}

Feed-Versuche auflisten

Listet die Versuche automatisierter Rechnungen für eine Verbindung auf.

GET/v1/workspaces/{regionId}/supplier-connections/{connectionId}/feed-attempts

Parameter

  • connectionIdstringPflicht

    Die Lieferantenverbindung.

  • beforestring

    Der Cursor der letzten Zeile der vorliegenden Seite, für die darauffolgende Seite. 50 Zeilen pro Seite.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Das Versuchsprotokoll der automatisierten Rechnungen einer Verbindung: jeder Aufruf von SubmitFeedInvoice oder ValidateFeedInvoice, der die Verbindung erreicht hat, neueste zuerst, mit der Antwort von Pleaxy. Eine Ablehnung, bevor die Verbindung bekannt war (kein Schlüssel, falscher Scope, das Ratenlimit des Schlüssels, eine Verbindung, die nicht dem Aufrufer gehört), lässt sich keiner zuordnen und wird nicht protokolliert. Das Dokument selbst wird nie gespeichert. Der Lieferant liest seine eigenen Verbindungen, der Käufer die Lieferanten, die er freigegeben hat; beide sehen dieselben Zeilen. Zeilen werden 90 Tage aufbewahrt. Die Verbindung selbst (ListSupplierConnections, ListInvoiceCounterparties mit ?perConnection=true) spiegelt den jeweils letzten Eintrag jeder Art: feedLastAttemptAt, feedLastAcceptedAt, feedAcceptedCount, feedLastRefusedAt, feedLastRefusedCode, feedLastValidAt, feedValidCount.

Angemeldete Sitzung oder API-Schlüssel. Ein Aufrufer mit Käuferrolle braucht 'view'-Zugriff auf Lieferanten.

Antwortfelder

  • modestring

    "submit" für die Live-Route, "validate" für die Testroute.

  • formatstring

    Bekannt, sobald der Body geparst wurde; fehlt, wenn der Aufruf vorher abgelehnt wurde.

  • outcomestring

    "accepted" (201, eine Rechnung angelegt), "replayed" (200, dasselbe Dokument erneut), "valid" (ein bestandener Test), "refused" (jeder Fehler, nachdem die Verbindung bekannt war, auch ein deaktivierter Feed).

  • status, code, messagenumber, string, string

    Die Antwort, die der Aufrufer erhalten hat: der HTTP-Status und bei einer Ablehnung deren Code und Meldung wie zurückgegeben.

  • messageId, paramsstring, object

    Bei einer Ablehnung messageId und params des Fehlers wie zurückgegeben, um ihn in der Sprache Ihrer Leser anzuzeigen. Fehlt bei Zeilen, die protokolliert wurden, bevor diese Felder gespeichert wurden.

  • invoiceNumberstring

    Ihre Rechnungsnummer, wenn das Parsen so weit kam.

  • invoiceIdstring

    Die angelegte oder erneut zurückgegebene Rechnung; bei einem bestandenen Test die Rechnung, die eine erneut gesendete Nummer bereits bezeichnet.

  • creditNoteIdstring

    Die angelegte oder erneut zurückgegebene Gutschrift, wenn das Dokument eine Gutschrift war; invoiceNumber ist dann deren Nummer.

  • keyIdstring

    Die ID des API-Schlüssels (nie sein Geheimnis), zum Abgleich mit ListApiKeys.

  • beforestring

    Der Cursor der letzten Zeile, wenn es ältere Zeilen geben kann; fehlt auf der letzten Seite.

Fehler

  • 400 Bad Request - before ist kein Cursor einer vorherigen Seite.
  • 403 Forbidden - Die Einkaufsrolle eines Aufrufers mit Käuferrolle kann keine Lieferanten anzeigen (requisitions).
  • 404 Not Found - Keine Verbindung mit dieser ID gehört Ihnen.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
GET /v1/workspaces/{regionId}/supplier-connections/{connectionId}/feed-attempts
Anfrage
curl "$PLEAXY_API_BASE_URL/v1/workspaces/reg_01k5x8p9j3q7vn2mhb4tzc6rde.supplier/supplier-connections/SC-1A2B3C4D/feed-attempts" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
{
  "attempts": [
    {
      "at": "2026-10-09T10:12:44.000Z",
      "mode": "submit",
      "format": "ubl",
      "outcome": "refused",
      "status": 400,
      "code": "INVOICE_CURRENCY_MISMATCH",
      "message": "This invoice is in EUR, but Beta Buyer is invoiced in USD. Reissue it in USD - Pleaxy doesn't convert currencies.",
      "invoiceNumber": "INV-2026-0143",
      "keyId": "k_01k6…",
      "cursor": "FEEDATTEMPT#2026-10-09T10:12:44.000Z#3f9a1c2e"
    },
    {
      "at": "2026-10-09T09:58:02.000Z",
      "mode": "validate",
      "format": "json",
      "outcome": "valid",
      "status": 200,
      "invoiceNumber": "INV-2026-0001",
      "keyId": "k_01k6…",
      "cursor": "FEEDATTEMPT#2026-10-09T09:58:02.000Z#b71e0d44"
    }
  ]
}

Rechnungsabgleich ausführen

Vergleicht eine Rechnung mit der gemessenen Cloud-Nutzung.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/run-match

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Rückgabe

201 Created mit dem in der Antwort gezeigten Objekt.

Weitere Details

Führt den 3-Wege-Abgleich aus: vergleicht den Rechnungsbetrag (amount) mit der gemessenen Nutzung (usageAmount, in usageCurrency - der eigenen Währung des Anbieters, aus einer aktiven Abrechnungsverbindung). Verglichen wird nur ein tatsächlicher Wert: Eine ältere ausstehende Rechnung ohne tatsächlichen Nutzungswert wird stattdessen "unverified" (unverifiedReason "no_billing_connection"), ohne Freigabekette. Nur ein Wert aus einer ausgestellten AWS-Rechnung erlaubt es der Autonomie oder einer Automatisierungsregel, sie ohne Zutun einer Person freizugeben; ein Abgleich mit jeder anderen Quelle geht an eine Person. Innerhalb der Toleranz (3%) wird die Rechnung matched, und eine Freigabekette wird aufgebaut. Außerhalb der Toleranz wird sie automatisch als matched geklärt, wenn die Überschreitung für die Autonomie infrage kommt, andernfalls wird sie discrepancy (discrepancyReason "amount") und wartet auf ResolveInvoiceDiscrepancy. Pleaxy rechnet keine Währungen um: Liegt die Nutzung in einer anderen Währung als die Rechnung vor, wird nichts verglichen, und keine Autonomie oder Automatisierungsregel greift - die Rechnung wird discrepancy mit discrepancyReason "currency" und braucht ResolveInvoiceDiscrepancy. Eine Rechnung zu einer Bestellung, die nicht für einen Cloud-Anbieter ist, hat keine Nutzung zum Vergleichen: Sie wird als pending mit matchBasis "purchase_order" angelegt, wenn sie ihre PO- und Vertragsprüfungen besteht, und dieser Aufruf baut ihre Freigabekette auf - matched, immer mit einer menschlichen freigebenden Person, nie per Autonomie oder Automatisierungsregel. Eine zuvor als "unverified" (unverifiedReason "no_billing_connection") angelegte Rechnung wird erneut gegen ihre PO und ihren Vertrag geprüft: matched oder discrepancy mit discrepancyReason "controls". Der Anforderer der Freigabekette ist der authentifizierte Aufrufer (ein API-Schlüssel wird als apikey:<keyId> erfasst), nie ein übergebener Name; die Anfrage erwartet keinen Body.

Antwortfelder

  • matchStatusstring

    "matched" oder "discrepancy" nach dem Abgleich oder "unverified" für eine ältere ausstehende Rechnung ohne tatsächlichen Nutzungswert.

  • discrepancyReasonstring

    Nur bei einer Abweichung gesetzt: "amount" (außerhalb der Toleranz), "currency" (Nutzung in einer anderen Währung, nie verglichen) oder "controls" (verstößt gegen ihre PO oder ihren Vertrag).

  • matchBasisstring

    "purchase_order", wenn die Rechnung gegen eine Bestellung, die nicht für einen Cloud-Anbieter ist, statt gegen die Nutzung abgeglichen wurde. Fehlt bei einem Nutzungsabgleich.

Fehler

  • 400 Bad Request - Der matchStatus der Rechnung ist nicht "pending" (oder "unverified" bei einer Bestellung, die nicht für einen Cloud-Anbieter ist). Für jede andere nicht verifizierte Rechnung (keine Bestellung oder keine Abrechnungsverbindung): "Invoice '{invoiceId}' can't be matched: it's unverified, with no usage figure to compare against. Nothing was matched. A person must review it in Pleaxy before it can go for approval." Andernfalls: "Invoice '{invoiceId}' has already been matched (result: {matchStatus})."
  • 404 Not Found - Im Workspace gibt es keine Rechnung mit dieser ID.
  • 409 Conflict - Ein anderer Abgleich oder eine andere Entscheidung kam gleichzeitig an; lesen Sie die Rechnung erneut.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/run-match
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/run-match" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Rechnungsabweichung klären

Schickt eine geprüfte Rechnung mit Abweichung in die Freigabe.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/resolve-discrepancy

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Rückgabe

201 Created mit dem in der Antwort gezeigten Objekt.

Weitere Details

Manuelle Übersteuerung für eine Rechnung, die ein Mensch geprüft hat - startet eine normale Freigabekette (ohne Autonomie) für eine Rechnung mit Abweichung oder eine nicht verifizierte Rechnung. Eine Abweichung wird "matched"; eine nicht verifizierte Rechnung bleibt mit ihrer offenen Kette "unverified", weil nichts geprüft wurde. Der Anforderer der Freigabekette ist der authentifizierte Aufrufer (ein API-Schlüssel wird als apikey:<keyId> erfasst), nie ein übergebener Name; die Anfrage erwartet keinen Body.

Ein API-Schlüssel kann eine Betrags- oder Währungsabweichung klären. Nur eine angemeldete Sitzung kann eine nicht verifizierte Rechnung klären, bei jedem unverifiedReason; ein API-Schlüssel erhält 403 HUMAN_REVIEW_REQUIRED.

Fehler

  • 400 Bad Request - Der matchStatus der Rechnung ist weder "discrepancy" noch "unverified".
  • 403 Forbidden - HUMAN_REVIEW_REQUIRED: Die Rechnung ist nicht verifiziert, und der Aufrufer ist ein API-Schlüssel ("An unverified invoice has nothing to match it against, so a person must review it. Sign in to Pleaxy to resolve it."). Es wird nichts geändert.
  • 404 Not Found - Im Workspace gibt es keine Rechnung mit dieser ID.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/resolve-discrepancy
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/resolve-discrepancy" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Rechnung freigeben

Gibt den aktuellen Freigabeschritt einer Rechnung frei.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/approve

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Rückgabe

201 Created mit dem in der Antwort gezeigten Objekt.

Weitere Details

Bringt die Freigabekette der Rechnung um eine Stufe weiter. Nur die Person, die der aktuelle Schritt nennt, darf dies aufrufen - keine Rolle, Berechtigung und keine Administratorrechte ersetzen die Benennung, und ein API-Schlüssel kann nie benannt werden. Eine abgeschlossene Freigabe sendet dem Lieferanten eine invoice_approved-Benachrichtigung. Erwartet keinen Body und handelt als der authentifizierte Aufrufer (ein API-Schlüssel handelt als apikey:<keyId>).

Nur angemeldete Sitzung. Jeder andere Aufrufer, auch ein API-Schlüssel, erhält 403 HUMAN_APPROVAL_REQUIRED, bevor etwas gelesen wird.

Fehler

  • 400 Bad Request - Die Rechnung hat keine offene Freigabestufe.
  • 403 Forbidden - Code HUMAN_APPROVAL_REQUIRED. Der Aufrufer ist ein API-Schlüssel. Freigabeschritte nennen eine bestimmte Person, und ein Schlüssel kann nie diese Person sein, daher kann ein Schlüssel einen Schritt weder freigeben noch ablehnen. Bitten Sie die im Schritt genannte Person, in Pleaxy zu handeln.
  • 403 Forbidden - Code APPROVER_NOT_ASSIGNED. Dem aktuellen Schritt ist keine freigebende Person zugewiesen, daher kann niemand darauf reagieren. Ein Administrator muss zuerst mit ReassignPurchaseOrderApprovalStage / ReassignInvoiceApprovalStage eine zuweisen.
  • 403 Forbidden - Der Aufrufer ist nicht die Person, die der aktuelle Schritt nennt. Nur diese Person darf ihn freigeben oder ablehnen - keine Rolle oder Berechtigung ersetzt die Benennung.
  • 404 Not Found - Im Workspace gibt es keine Rechnung mit dieser ID.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/approve
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/approve" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Rechnung ablehnen

Lehnt eine Rechnung mit einer für den Lieferanten sichtbaren Begründung ab.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/reject

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Body

  • reasonCodestringPflicht

    Einer der Werte amount_incorrect, not_ordered_or_not_received, duplicate, missing_or_wrong_po, wrong_billing_entity, other. Der Lieferant sieht seine Bezeichnung.

  • reasonstringPflicht

    Die Notiz, die der Lieferant sieht: was er korrigieren soll. Zeilenumbrüche werden zu Leerzeichen, Steuerzeichen und unsichtbare Zeichen werden entfernt. Danach braucht sie mindestens 10 Buchstaben oder Ziffern und höchstens 500 Zeichen. Klartext; wird nie als Link angezeigt. Geben Sie keine personenbezogenen Daten oder internen Kommentare an.

Rückgabe

201 Created mit dem in der Antwort gezeigten Objekt.

Weitere Details

Lehnt die Rechnung in ihrer aktuellen Freigabestufe mit einer für den Lieferanten sichtbaren Begründung ab. Nur die Person, die der aktuelle Schritt nennt, darf dies aufrufen. Eine nicht verifizierte Rechnung oder eine Rechnung mit Abweichung, die noch keine Freigabekette hat, ist ein eigener Fall: Jeder Käufer mit invoices:edit darf sie ablehnen, außer dem Käufer, der sie erfasst hat. Nur angemeldete Sitzungen: Ein API-Schlüssel kann nicht ablehnen. Der Lieferant sieht Begründung und Notiz wörtlich, aber nicht, wer abgelehnt hat, und erhält eine Benachrichtigung, die nur die Begründung nennt. Die Ablehnung wird an der Rechnung als `rejection` gespeichert. Das Ablehnen einer Rechnung, die den Anspruch auf ihre Bestellung hält, öffnet diese Bestellung im selben Schreibvorgang wieder, sodass der Lieferant eine korrigierte Rechnung dazu senden kann: Diese erhält die ID INV-<PO suffix>-R<n> und `replacesInvoiceId` und braucht eine neue Rechnungsnummer, weil die abgelehnte Rechnung ihre eigene behält.

Fehler

  • 400 Bad Request - Die Rechnung hat keine offene Freigabestufe.
  • 400 Bad Request - Code INVOICE_REJECTION_REASON_INVALID. reasonCode fehlt oder ist keiner der sechs Codes, oder reason fehlt, ist kein String, hat weniger als 10 Buchstaben oder Ziffern oder ist nach der Bereinigung länger als 500 Zeichen.
  • 403 Forbidden - Code HUMAN_APPROVAL_REQUIRED: "Rejecting needs you, signed in to Pleaxy." Der Aufrufer ist ein API-Schlüssel. Eine Ablehnung ist eine Entscheidung, die der Lieferant sieht, daher braucht sie eine angemeldete Person.
  • 403 Forbidden - Code APPROVER_NOT_ASSIGNED. Dem aktuellen Schritt ist keine freigebende Person zugewiesen, daher kann niemand darauf reagieren. Ein Administrator muss zuerst mit ReassignPurchaseOrderApprovalStage / ReassignInvoiceApprovalStage eine zuweisen.
  • 403 Forbidden - Der Aufrufer ist nicht die Person, die der aktuelle Schritt nennt. Nur diese Person darf ihn freigeben oder ablehnen - keine Rolle oder Berechtigung ersetzt die Benennung.
  • 404 Not Found - Im Workspace gibt es keine Rechnung mit dieser ID.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/reject
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/reject" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other",
   "reason": "string"
}
Antwort · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Freigabestufe einer Rechnung neu zuweisen

Weist einen offenen Freigabeschritt einer anderen Person zu.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/approval/reassign

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Body

  • stageIdstringPflicht

    ID des offenen Schritts, der neu zugewiesen wird. Er kann in jeder Gruppe der Kette liegen, nicht nur in der aktuellen.

  • approverEmployeeKeystringPflicht

    Mitarbeiterschlüssel (Cognito sub) der neuen freigebenden Person. Muss ein Käufermitglied dieses Workspace sein und nicht der handelnde Administrator.

  • reasonstring

    Grund der Neuzuweisung, bis zu 280 Zeichen. Wird im Freigabeverlauf angezeigt.

Rückgabe

201 Created mit dem in der Antwort gezeigten Objekt.

Weitere Details

Das Gegenstück zu ReassignPurchaseOrderApprovalStage für Rechnungen: richtet einen offenen Schritt der Freigabekette dieser Rechnung auf eine andere namentlich genannte Person aus. Nur für Administratoren (approvalSettings:edit), nur in angemeldeten Sitzungen, auf das Dokument beschränkt und im Freigabeverlauf festgehalten. So wird eine mit einem Lieferanten verknüpfte Rechnung freigeschaltet, die sicherheitshalber auf einem nicht zugewiesenen Schritt "Manual approval" gelandet ist.

Fehler

  • 400 Bad Request - Die Kette ist bereits freigegeben oder abgelehnt; der Schritt wurde bereits freigegeben oder abgelehnt; die neue freigebende Person ist keine Mitarbeiterin bzw. kein Mitarbeiter dieses Workspace; die neue freigebende Person hat die Bestellung angefordert bzw. die Rechnung erfasst, ist durch Funktionstrennung ausgeschlossen, hat das Ausgabenlimit bereits mit eigener Befugnis freigegeben oder besetzt bereits einen anderen Platz im selben Schritt; oder der Schritt ist die Ausgabenlimit-Prüfung, deren freigebende Person ein festgeschriebener Prüfungsnachweis ist (ändern Sie sie unter Einstellungen › Ausgabenlimits).
  • 403 Forbidden - Dem Aufrufer fehlt approvalSettings:edit (Administrator), oder er hat sich selbst als neue freigebende Person benannt - wer sich einen aktiven Schritt selbst zuweist, macht eine Person zur gesamten Kette, ohne dass eine Richtlinie erkennbar ist. Code HUMAN_APPROVAL_REQUIRED, wenn der Aufrufer ein API-Schlüssel ist: Nur ein angemeldeter Administrator kann einen Freigabeschritt neu zuweisen.
  • 404 Not Found - Im Workspace gibt es kein Dokument mit dieser ID, oder die Kette hat keinen Schritt mit dieser stageId.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/approval/reassign
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/approval/reassign" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "stageId": "string",
   "approverEmployeeKey": "string",
   "reason": "string"
}
Antwort · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Zahlung erfassen

Erfasst, dass eine Rechnung außerhalb von Pleaxy bezahlt wurde.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/payment-record

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Body

  • methodstringPflicht

    Wie bezahlt wurde: ach, wire, check, card oder other.

  • paymentDatestringPflicht

    YYYY-MM-DD, an dem die Zahlung gesendet wurde. Nicht später als heute in der Zeitzone des Käufer-Workspace und nicht vor dem Rechnungsdatum.

  • referencestringPflicht

    Die Referenz der Bank oder des Zahlungstools, etwa eine ACH-Trace- oder Schecknummer, nach der Bereinigung 1–64 Zeichen. Der Lieferant sieht sie. Nie eine Bankkontonummer.

  • currencystring

    Nur bei einer Zahlung in einer anderen Währung als der des Zahlbetrags: ISO 4217. Erfordert amount und rate.

  • amountnumber

    Mit currency: was bezahlt wurde, in currency. Der Zahlbetrag × rate, mit einer Abweichung von höchstens 0.5% oder einer kleinsten Einheit.

  • ratenumber

    Mit currency: 1 {Währung des Zahlbetrags} = rate {currency}, der Kurs, zu dem die Zahlung erfolgte.

  • rateDatestring

    Mit currency: YYYY-MM-DD, für das der Kurs gilt, nicht später als heute. Standardmäßig paymentDate.

  • remittance{ note?, file?: { fileId, fileName } }

    Ein Zahlungsavis für den Lieferanten, gesendet mit der Zahlungsmitteilung: eine Notiz, ein mit RequestRemittanceUpload hochgeladener Zahlungsnachweis oder beides. Gleiche Regeln wie bei SendRemittance.

  • confirmReplacedboolean

    true, um sie trotzdem zu erfassen, wenn die Rechnung ersetzt ist (Gutschrift und Neuberechnung) und ihre Gutschriften sie nicht vollständig decken: Wird sie zusätzlich zu ihrem Ersatz bezahlt, wird doppelt gezahlt.

Rückgabe

201 Created mit dem in der Antwort gezeigten Objekt.

Weitere Details

Erfasst, dass eine freigegebene Rechnung außerhalb von Pleaxy bezahlt wurde, mit Zahlungsart, Datum und Referenz. Dabei wird kein Geld bewegt und nicht geprüft, ob die Zahlung erfolgt ist. Eine Zahlung deckt den vollen Zahlbetrag: paymentCurrencyAmount.totalAmount der Rechnung, wenn sie einen angibt, sonst ihr amount, in dieser Währung. Eine Teilzahlung kann nicht erfasst werden. In einer anderen Währung als der des Zahlbetrags bezahlt? Senden Sie zusätzlich amount, currency und rate: Der Betrag muss dem Zahlbetrag × rate entsprechen, mit einer Abweichung von höchstens 0.5% oder einer kleinsten Einheit, und wird als paidAmount erfasst; Pleaxy rechnet nichts um. Die Rechnung gilt als bezahlt, und der Lieferant wird benachrichtigt, dass der Käufer die Zahlung erfasst hat, und erhält ein Zahlungsavis mit dem Hinweis, dass es vom Käufer erfasst und nicht über Pleaxy ausgeführt wurde. Funktioniert auch bei einer exportierten Rechnung und schließt deren Export ab. Das erneute Erfassen derselben Angaben antwortet mit 200 und alreadyRecorded: true und ändert nichts. Optional können Sie dem Lieferanten damit ein Zahlungsavis senden (remittance), wie es SendRemittance tut.

Eine angemeldete Sitzung mit 'edit'-Zugriff auf Rechnungen. Geändert am 2026-09-24, eine Sicherheitskorrektur innerhalb von v1: Ein API-Schlüssel kann keine Zahlung erfassen (403 HUMAN_SESSION_REQUIRED). Die Person, die die Rechnung erfasst hat, und Mitglieder des Lieferantenprofils können ihre Zahlung nicht erfassen.

Fehler

  • 400 Bad Request - Ein Feld fehlt oder ist ungültig (Codes PAYMENT_METHOD_INVALID, PAYMENT_DATE_INVALID, PAYMENT_DATE_IN_FUTURE, PAYMENT_DATE_BEFORE_INVOICE, PAYMENT_REFERENCE_INVALID), der gezahlte Betrag passt nicht (PAID_AMOUNT_SAME_CURRENCY: currency ist die Währung des Zahlbetrags selbst, lassen Sie also amount, currency und rate weg; PAID_AMOUNT_INVALID: amount oder rate fehlt oder ist nicht größer als 0, oder ein ungültiges rateDate; PAID_AMOUNT_RATE_MISMATCH: amount entspricht nicht dem Zahlbetrag × rate), das Zahlungsavis ist ungültig (wie bei SendRemittance), oder der Body enthält ein Feld, das nicht akzeptiert wird.
  • 403 Forbidden - Code HUMAN_SESSION_REQUIRED: Der Aufrufer ist ein API-Schlüssel. Oder eine Ablehnung wegen Funktionstrennung: Der Aufrufer hat die Rechnung erfasst oder ist Mitglied des Lieferantenprofils.
  • 404 Not Found - Im Workspace gibt es keine Rechnung mit dieser ID.
  • 409 Conflict - Code PAYMENT_ALREADY_RECORDED (eine andere Zahlung ist bereits erfasst: ziehen Sie sie zuerst zurück), STRIPE_PAYMENT_IN_PROGRESS (eine Zahlung über Pleaxy mit Stripe wurde gestartet), EXPORT_COOLING_OFF (ihr Export wurde zurückgezogen; versuchen Sie es am nächsten Geschäftstag erneut), REPLACED_UNCREDITED (die Rechnung ist ersetzt, und ihre Gutschriften decken sie nicht vollständig: Klären Sie das mit dem Lieferanten und senden Sie dann confirmReplaced: true) oder PAYMENT_CHANGED.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/payment-record
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/payment-record" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "method": "ach" | "wire" | "check" | "card" | "other",
   "paymentDate": "YYYY-MM-DD",
   "reference": "string",
   "currency": "string",
   "amount": number,
   "rate": number,
   "rateDate": "YYYY-MM-DD",
   "remittance": { "note": "string", "file": { "fileId": "string", "fileName": "string" } },
   "confirmReplaced": boolean
}
Antwort · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Zahlungserfassung zurückziehen

Zieht eine erfasste Zahlung zurück.

DELETE/v1/workspaces/{regionId}/invoices/{invoiceId}/payment-record

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Body

  • confirmbooleanPflicht

    Muss true sein.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Zieht die vom Käufer erfasste Zahlung zurück. Die Rechnung gilt wieder als unbezahlt, und der Lieferant erfährt, dass die Erfassung zurückgezogen wurde. Die Zahlung selbst wird dadurch nicht storniert oder rückgängig gemacht. Das Zahlungsavis wird dann als zurückgezogen markiert.

Eine angemeldete Sitzung mit 'edit'-Zugriff auf Rechnungen; ein API-Schlüssel erhält 403 HUMAN_SESSION_REQUIRED.

Fehler

  • 403 Forbidden - Code HUMAN_SESSION_REQUIRED oder eine Ablehnung wegen Funktionstrennung.
  • 404 Not Found - Es gibt keine Rechnung mit dieser ID, oder Code NO_PAYMENT_RECORD: Für sie ist keine Zahlung erfasst.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
DELETE /v1/workspaces/{regionId}/invoices/{invoiceId}/payment-record
Anfrage
curl -X DELETE "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/payment-record" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "confirm": true
}
Antwort · 200 OK
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Rechnungen für die Zahlung exportieren

Exportiert freigegebene, unbezahlte Rechnungen als CSV für Ihren Zahlungslauf.

POST/v1/workspaces/{regionId}/invoices/payment-export

Body

  • invoiceIdsstring[]

    Optional: nur diese Rechnungen exportieren, 1 bis 1.000 IDs. Ohne Angabe (oder bei leerem Body) alle infrage kommenden Rechnungen. Jedes andere Feld ergibt 400.

  • confirmReplacedboolean

    Mit invoiceIds: eine ersetzte Rechnung (Gutschrift und Neuberechnung), die ihre Gutschriften nicht vollständig decken, trotzdem exportieren. Ohne invoiceIds wird eine solche Rechnung immer ausgelassen.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Lädt freigegebene, unbezahlte Rechnungen als CSV für Ihren eigenen Zahlungslauf herunter, nach Fälligkeitsdatum sortiert, bis zu 1.000 - alle infrage kommenden Rechnungen oder nur die in invoiceIds genannten (eine nicht infrage kommende wird ausgelassen). Jede exportierte Rechnung ist gesperrt, bis ihre Zahlung erfasst oder der Export zurückgezogen wird, sodass sie nicht doppelt exportiert oder erfasst werden kann. Die Datei enthält keine Bankverbindungen. Der Lieferant sieht den Export nicht. Antwort-Header: X-Pleaxy-Export-Id, X-Pleaxy-Export-Count, X-Pleaxy-Export-Truncated.

Eine angemeldete Sitzung mit 'edit'-Zugriff auf Rechnungen; ein API-Schlüssel erhält 403 HUMAN_SESSION_REQUIRED.

Fehler

  • 403 Forbidden - Code HUMAN_SESSION_REQUIRED.
  • 400 Bad Request - Der Body ist nicht leer, {} oder { invoiceIds, confirmReplaced }, oder invoiceIds ist leer, enthält mehr als 1.000 IDs oder eine, die länger als 64 Zeichen ist.
  • 409 Conflict - Code REPLACED_UNCREDITED: Eine in invoiceIds genannte Rechnung ist ersetzt, und ihre Gutschriften decken sie nicht vollständig. Senden Sie confirmReplaced: true, um sie trotzdem zu exportieren.
  • 422 Unprocessable Entity - Code NOTHING_TO_EXPORT: Keine freigegebene, unbezahlte Rechnung kommt infrage.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
POST /v1/workspaces/{regionId}/invoices/payment-export
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/payment-export" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "invoiceIds": [ "string" ],
   "confirmReplaced": boolean
}
Antwort · 200 OK
text/csv: one row per invoice, with a status column of approved_unpaid. related_invoice names what a debit note amends or what a replacement replaces; replaced_by, the last column, the invoices that replace one.

Zahlungsexport abrufen

Lädt einen Zahlungsexport erneut herunter.

GET/v1/workspaces/{regionId}/invoices/payment-exports/{exportId}

Parameter

  • exportIdstringPflicht

    X-Pleaxy-Export-Id aus ExportInvoicesForPayment.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Lädt einen Export erneut herunter: dieselbe CSV, neu erstellt aus den Rechnungen, die unter dieser Export-ID noch exportiert sind. Für den Fall, dass ein Download fehlschlug, nachdem die Rechnungen gesperrt wurden.

Fehler

  • 404 Not Found - Code EXPORT_NOT_FOUND: Unter dieser ID ist keine Rechnung mehr exportiert.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
GET /v1/workspaces/{regionId}/invoices/payment-exports/{exportId}
Anfrage
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/payment-exports/{exportId}" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
text/csv

Zahlungsexport zurückziehen

Nimmt eine Rechnung wieder aus einem Zahlungsexport heraus.

DELETE/v1/workspaces/{regionId}/invoices/{invoiceId}/payment-export

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Body

  • confirmNotPaidbooleanPflicht

    Muss true sein: Ihr Zahlungslauf hat diese Rechnung nicht bezahlt.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Nimmt eine Rechnung wieder aus ihrem Export heraus, nachdem Sie bestätigt haben, dass Ihr Zahlungslauf sie nicht bezahlt hat. Pleaxy kann in Ihrem eigenen Zahlungstool nichts sehen oder stornieren. Die Rechnung geht zurück in den Status Freigegeben, kann aber erst am nächsten Geschäftstag erneut exportiert oder erfasst werden, und der nächste Export kennzeichnet sie mit previously_exported_at.

Eine angemeldete Sitzung mit 'edit'-Zugriff auf Rechnungen; ein API-Schlüssel erhält 403 HUMAN_SESSION_REQUIRED.

Fehler

  • 403 Forbidden - Code HUMAN_SESSION_REQUIRED oder eine Ablehnung wegen Funktionstrennung.
  • 404 Not Found - Im Workspace gibt es keine Rechnung mit dieser ID.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
DELETE /v1/workspaces/{regionId}/invoices/{invoiceId}/payment-export
Anfrage
curl -X DELETE "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/payment-export" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "confirmNotPaid": true
}
Antwort · 200 OK
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Zahlungsavis abrufen

Lädt das Zahlungsavis für eine Zahlung als PDF herunter.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance-advice

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Das Zahlungsavis für eine erfasste Zahlung als PDF. Es trägt den Hinweis, dass es vom Käufer erfasst und nicht über Pleaxy ausgeführt wurde, und ist weder eine Quittung noch ein Zahlungsnachweis. Nach einer erneuten Erfassung als Überarbeitet und nach einem Zurückziehen als Zurückgezogen gekennzeichnet. Senden Sie Accept: application/pdf. Ein Lieferant, bei dessen Käufern sich eine Rechnungs-ID überschneidet, ergänzt ?buyer=<Workspace-ID des Käufers>.

Fehler

  • 404 Not Found - Keine Rechnung mit dieser ID, oder Code NO_PAYMENT_RECORD: Für sie wurde nie eine Zahlung erfasst.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/remittance-advice
Anfrage
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance-advice" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
application/pdf

Upload für Zahlungsavis anfordern

Gibt eine URL zum Hochladen eines Zahlungsnachweises zurück.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance-upload

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Body

  • contentType"application/pdf" | "image/png" | "image/jpeg"Pflicht

    Der Dateityp.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Eine vorsignierte URL zum Hochladen eines Zahlungsnachweises, etwa des Überweisungsbelegs der Bank, für eine freigegebene oder bezahlte Rechnung. Laden Sie die Datei innerhalb von 5 Minuten per PUT mit demselben Content-Type an uploadUrl hoch, bis zu maxBytes (10 MB), und senden Sie dann ihre fileId mit SendRemittance oder im remittance-Feld von RecordPayment. Ein Upload, den nichts anhängt, wird nach einigen Tagen gelöscht.

Eine angemeldete Sitzung mit 'edit'-Zugriff auf Rechnungen; ein API-Schlüssel erhält 403 HUMAN_SESSION_REQUIRED. Es gelten dieselben Regeln zur Funktionstrennung wie bei RecordPayment.

Fehler

  • 400 Bad Request - contentType ist kein PDF, PNG oder JPEG ("A remittance file must be a PDF, PNG or JPEG.").
  • 403 Forbidden - Code HUMAN_SESSION_REQUIRED oder eine Ablehnung wegen Funktionstrennung.
  • 404 Not Found - Im Workspace gibt es keine Rechnung mit dieser ID.
  • 409 Conflict - Code REMITTANCE_NEEDS_PAYMENT: Die Rechnung ist noch nicht freigegeben oder bezahlt.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/remittance-upload
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance-upload" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "contentType": "application/pdf" | "image/png" | "image/jpeg"
}
Antwort · 200 OK
{
   "fileId": "string",
   "uploadUrl": "string",
   "maxBytes": number
}

Zahlungsavis senden

Sendet dem Lieferanten einen Zahlungsnachweis oder eine Notiz.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Body

  • notestring

    Bis zu 1.000 Zeichen nach der Bereinigung, für den Lieferanten. Sie steht in der Benachrichtigung des Lieferanten, die auch sein Slack- oder Teams-Kanal erhält, wenn sie dorthin geleitet wird.

  • file{ fileId, fileName }

    Ein Zahlungsnachweis, etwa der Überweisungsbeleg der Bank: die fileId aus RequestRemittanceUpload, nachdem die Datei per PUT an ihre uploadUrl hochgeladen wurde, und ein fileName mit 1–200 Zeichen.

Rückgabe

201 Created mit dem in der Antwort gezeigten Objekt.

Weitere Details

Sendet dem Lieferanten ein Zahlungsavis zu einer bezahlten Rechnung: einen Zahlungsnachweis, eine Notiz oder beides. Der Lieferant wird benachrichtigt (invoice_remittance_sent, mit der Notiz) und liest es in den remittances der Rechnung, ohne zu sehen, wer es gesendet hat; GetRemittanceFile öffnet die Datei. Bis zu 20 pro Rechnung, und jedes bleibt bestehen, wenn eine Zahlungserfassung zurückgezogen wird. Dies ist weder das Zahlungsavis, das Pleaxy aus der Zahlungserfassung erzeugt (GetRemittanceAdvice), noch die remittanceInstructions des Lieferanten.

Eine angemeldete Sitzung mit 'edit'-Zugriff auf Rechnungen; ein API-Schlüssel erhält 403 HUMAN_SESSION_REQUIRED. Es gelten dieselben Regeln zur Funktionstrennung wie bei RecordPayment.

Antwortfelder

  • remittancesArray

    Jedes für die Rechnung gesendete Zahlungsavis, älteste zuerst: { id (RM-…), sentAt, sentByName, note?, file?: { fileName, contentType, sizeBytes } }.

Fehler

  • 400 Bad Request - Code REMITTANCE_EMPTY (weder Notiz noch Datei), REMITTANCE_NOTE_INVALID (über 1.000 Zeichen), REMITTANCE_FILE_NAME_INVALID, REMITTANCE_UPLOAD_INCOMPLETE (die fileId gehört zu keinem Upload für diese Rechnung, oder der Upload wurde nicht abgeschlossen: "The proof of payment hasn't finished uploading. Attach it again.") oder REMITTANCE_FILE_TOO_LARGE (über 10 MB).
  • 403 Forbidden - Code HUMAN_SESSION_REQUIRED oder eine Ablehnung wegen Funktionstrennung.
  • 404 Not Found - Im Workspace gibt es keine Rechnung mit dieser ID.
  • 409 Conflict - Code REMITTANCE_NEEDS_PAYMENT (noch keine Zahlung erfasst: Erfassen Sie sie zuerst), REMITTANCE_LIMIT (es gibt bereits 20) oder PAYMENT_CHANGED.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/remittance
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/remittance" \
  -H "X-Api-Key: $PLEAXY_API_KEY" \
  -H "Content-Type: application/json" \
  -d @body.json
body.json
{
   "note": "string",
   "file": { "fileId": "string", "fileName": "string" }
}
Antwort · 201 Created
{
   "documentType": "invoice" | "debit_note",
   "amendsInvoiceId": "string",
   "amendsExternalInvoiceNumber": "string",
   "debitNoteIds": [ "string" ],
   "replacesInvoiceIds": [ "string" ],
   "replacedByInvoiceIds": [ "string" ],
   "replacement": { "creditedInFull": boolean, "uncredited": number },
   "uncreditedOriginals": [ { "invoiceId": "string", "externalInvoiceNumber": "string", "uncredited": number, "currency": "string" } ],
   "id": "string",
   "po": "string",
   "poLineNo": number,
   "billsNoPoLine": true,
   "buyerOrgId": "string",
   "supplierOrgId": "string",
   "supplier": "string",
   "amount": number,
   "currency": "string",
   "usageAmount": number,
   "usageCurrency": "string",
   "tolerancePct": number,
   "matchStatus": "pending" | "matched" | "discrepancy" | "unverified",
   "unverifiedReason": "no_purchase_order" | "no_billing_connection" | "debit_note",
   "discrepancyReason": "amount" | "currency",
   "paid": boolean,
   "dueInDays": number,
   "approval": {
      "requester": "string",
      "requesterEmployeeKey": "string",
      "groups": [
        {
          "id": "string",
          "mode": "sequential" | "parallel",
          "label": "string",
          "status": "pending" | "approved" | "rejected",
          "stages": [
            { "id": "string", "label": "string", "approverEmployeeKey": "string", "approverName": "string", "status": "pending" | "approved" | "rejected" }
          ]
        }
      ],
      "groupIndex": number,
      "status": "pending" | "approved" | "rejected",
      "history": [
        { "stage": "string", "by": "string", "at": "string", "action": "approved" | "rejected" | "limit_exceeded" | "reassigned" | "skipped" }
      ],
      "autonomy": boolean,
      "selfApproved": boolean
    },
   "createdAt": "string",
   "lastRemindedAt": "string",
   "rejection": { "reasonCode": "amount_incorrect" | "not_ordered_or_not_received" | "duplicate" | "missing_or_wrong_po" | "wrong_billing_entity" | "other", "reason": "string", "at": "string" },
   "replacesInvoiceId": "string",
   "source": "po-flip" | "direct" | "manual" | "feed",
   "submittedFormat": "json" | "cxml" | "ubl",
   "submittedBy": "string",
   "externalInvoiceNumber": "string",
   "lineItems": [
      { "description": "string", "qty": number, "unitPrice": number, "discount": number, "charge": number, "amount": number }
   ],
   "adjustments": [
      { "type": "discount" | "charge", "description": "string", "amount": number }
   ],
   "taxAmount": number,
   "taxBreakdown": [ { "description": "string", "rate": number, "amount": number } ],
   "paymentCurrencyAmount": { "currencyCode": "string", "totalAmount": number, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "taxCurrencyAmount": { "currencyCode": "string", "amountBreakdown": { "taxes": { "totalAmount": number } }, "currencyExchangeDetails": { "rate": number, "rateDate": "string", "rateSource": "string" } },
   "baseCurrencyAmount": { "currencyCode": "string", "totalAmount": number },
   "rateWarnings": [
      { "object": "payment" | "tax", "currency": "string", "statedRate": number, "referenceRate": number, "source": "provider" | "override", "asOf": "string", "deviationPct": number }
   ],
   "withholdings": [ { "description": "string", "rate": number, "amount": number } ],
   "deductions": [ { "kind": "prepayment" | "credit", "description": "string", "amount": number, "reference": "string", "paidOn": "string", "sourceInvoiceId": "string", "stated": true } ],
   "invoiceKind": "prepayment",
   "creditNoteIds": [ "string" ],
   "creditApplications": [ { "id": "string", "creditNoteId": "string", "externalCreditNoteNumber": "string", "amount": number, "appliedAt": "string", "appliedByName": "string", "auto": true } ],
   "payment": { "status": "recorded", "method": "ach" | "wire" | "check" | "card" | "other" | "credit", "paymentDate": "string", "reference": "string", "paidAmount": { "amount": number, "currency": "string", "rate": number, "rateDate": "string" } },
   "remittances": [ { "id": "string", "sentAt": "string", "sentByName": "string", "note": "string", "file": { "fileName": "string", "contentType": "application/pdf" | "image/png" | "image/jpeg", "sizeBytes": number } } ]
}

Datei eines Zahlungsavis abrufen

Gibt einen kurzlebigen Link zum Zahlungsnachweis eines Zahlungsavis zurück.

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/remittances/{remittanceId}/file

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

  • remittanceIdstringPflicht

    Das Zahlungsavis, z. B. "RM-1A2B3C4D", aus den remittances der Rechnung.

  • buyerstring

    Nur für Aufrufer mit Lieferantenrolle und nur nach einem 409 *_ID_AMBIGUOUS nötig: die Workspace-ID des Käufers (endet auf .buyer) oder die Regions-ID aus der buyers-Liste der 409-Antwort. Berücksichtigt wird nur das Dokument dieses Käufers; gibt es dort keines, folgt 404. Eine .supplier-Workspace-ID ergibt 400 BUYER_QUALIFIER_INVALID ("The buyer parameter must be one buyer's Workspace ID (ending in .buyer), from the buyers list in the 409 response."). Für einen Aufrufer mit Käuferrolle wird der Parameter ignoriert.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Ein 5 Minuten gültiger Link zum Zahlungsnachweis eines Zahlungsavis, der inline geöffnet wird. Der Lieferant liest die Zahlungsavise, die der Käufer zu seiner eigenen Rechnung gesendet hat; dieselbe Suche wie bei GetInvoice.

Fehler

  • 404 Not Found - Keine Rechnung mit dieser ID, oder Code REMITTANCE_NOT_FOUND: Die Rechnung hat kein Zahlungsavis mit dieser ID, das eine Datei enthält.
  • 409 Conflict - Nur für Aufrufer mit Lieferantenrolle. Code INVOICE_ID_AMBIGUOUS: Mehr als einer Ihrer Käufer hat eine Rechnung von Ihnen mit dieser ID (IDs sind nur innerhalb eines Käufers eindeutig), daher rät Pleaxy nicht, welche gemeint ist. Es wird nichts gelesen oder geändert. Das Feld buyers im Body listet Workspace-ID und Namen jedes Käufers auf: Wiederholen Sie den Aufruf mit ?buyer=<diese Workspace-ID>.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/remittances/{remittanceId}/file
Anfrage
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/remittances/{remittanceId}/file" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
{
   "url": "string",
   "fileName": "string",
   "contentType": "application/pdf" | "image/png" | "image/jpeg"
}

Stripe-Zahlung abrufen

Gibt den Stand einer Karten- oder Bankzahlung über Pleaxy zurück (noch nicht verfügbar).

GET/v1/workspaces/{regionId}/invoices/{invoiceId}/stripe-payment

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Rückgabe

200 OK mit dem in der Antwort gezeigten Objekt.

Weitere Details

Noch nicht verfügbar: Das Bezahlen über Pleaxy ist nicht aktiviert, daher antwortet dieser Aufruf mit available: false und reason not_configured. Sobald es aktiviert ist, gibt er an, ob diese Rechnung über Pleaxy mit Stripe bezahlt werden kann oder warum nicht, sowie jede laufende Stripe-Zahlung. quote ist, was der Käufer zahlen würde: die Rechnung zuzüglich der Stripe-Gebühr für Banküberweisungen (0.8%, höchstens $5), die der Käufer trägt, damit der Lieferant den vollen Rechnungsbetrag erhält.

Fehler

  • 404 Not Found - Im Workspace gibt es keine Rechnung mit dieser ID.
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
GET /v1/workspaces/{regionId}/invoices/{invoiceId}/stripe-payment
Anfrage
curl "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/stripe-payment" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 200 OK
{
   "available": boolean,
   "reason": "not_configured" | "not_approved" | "payment_locked" | "supplier_not_on_pleaxy" | "supplier_not_connected" | "unsupported_currency" | "amount_too_small",
   "state": "checkout_open" | "processing" | "succeeded",
   "paymentMethodType": "us_bank_account",
   "quote": { "amount": number, "fee": number, "total": number, "currency": "USD" }
}

Stripe-Zahlung starten

Startet die Bezahlung einer Rechnung über Pleaxy (noch nicht verfügbar).

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/stripe-payment

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

  • confirmReplacedboolean

    true, um sie trotzdem zu bezahlen, wenn die Rechnung ersetzt ist (Gutschrift und Neuberechnung) und ihre Gutschriften sie nicht vollständig decken.

Rückgabe

201 Created mit dem in der Antwort gezeigten Objekt.

Weitere Details

Noch nicht verfügbar: Das Bezahlen über Pleaxy ist nicht aktiviert, daher antwortet dieser Aufruf mit 503. Sobald es aktiviert ist, startet er die vollständige Bezahlung einer freigegebenen Rechnung über Pleaxy per US-Banküberweisung mit Stripe und gibt die url einer Stripe-Checkout-Seite zurück. Die Zahlung erfolgt über das eigene Stripe-Konto des Lieferanten: Das Geld fließt vom Bankkonto des Käufers an den Lieferanten und nie über Pleaxy. Der Käufer zahlt die Rechnung zuzüglich der Stripe-Gebühr, sodass der Lieferant den vollen Rechnungsbetrag erhält; Pleaxy berechnet nichts. Die Rechnung ist gesperrt, solange Checkout geöffnet ist (bis zu einer Stunde), und wird als bezahlt markiert, wenn Stripe die Überweisung bestätigt. Setzt einen offenen Checkout fort; antwortet mit { state } ohne url, wenn eine Zahlung bereits verarbeitet wird oder abgeschlossen ist.

Eine angemeldete Sitzung mit 'edit'-Zugriff auf Rechnungen; ein API-Schlüssel erhält 403 HUMAN_SESSION_REQUIRED. Es gelten dieselben Regeln zur Funktionstrennung wie bei RecordPayment.

Fehler

  • 403 Forbidden - Code HUMAN_SESSION_REQUIRED oder eine Ablehnung wegen Funktionstrennung.
  • 409 Conflict - Code PAYMENT_ALREADY_RECORDED, PAYMENT_ACTIVE (exportiert oder erfasst: Ziehen Sie das zuerst zurück), REPLACED_UNCREDITED (die Rechnung ist ersetzt, und ihre Gutschriften decken sie nicht vollständig: Ergänzen Sie ?confirmReplaced=true, um sie trotzdem zu bezahlen) oder PAYMENT_CHANGED.
  • 422 Unprocessable Entity - Code STRIPE_SUPPLIER_NOT_ON_PLEAXY, STRIPE_SUPPLIER_NOT_CONNECTED, STRIPE_UNSUPPORTED_CURRENCY oder STRIPE_AMOUNT_TOO_SMALL.
  • 503 Service Unavailable - Das Bezahlen über Pleaxy ist nicht aktiviert ("Paying suppliers through Pleaxy isn't available yet.").
  • 401 Unauthorized - Es wurden keine Zugangsdaten übermittelt, oder der Bearer-Token bzw. der X-Api-Key-Wert fehlt, ist ungültig, abgelaufen oder widerrufen.
  • 403 Forbidden - Der Bearer-Token oder API-Schlüssel des Aufrufers gewährt keinen Zugriff auf diesen Workspace (regionId) oder hat nicht die erforderliche Rolle.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/stripe-payment
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/stripe-payment" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 201 Created
{
   "url": "string",
   "state": "checkout_open" | "processing" | "succeeded"
}

Rechnung begleichen

Eingestellt: Verwenden Sie stattdessen RecordPayment.

POST/v1/workspaces/{regionId}/invoices/{invoiceId}/settle

Parameter

  • invoiceIdstringPflicht

    Die ID der Rechnung.

Rückgabe

410 Gone mit dem in der Antwort gezeigten Objekt.

Weitere Details

Eingestellt. Antwortet immer mit 410 SETTLE_REPLACED und ändert nichts. Erfassen Sie eine außerhalb von Pleaxy geleistete Zahlung mit RecordPayment.

Geändert am 2026-09-24, eine Sicherheitskorrektur innerhalb von v1: Das Begleichen wurde zunächst auf angemeldete Sitzungen beschränkt und dann eingestellt; es bezahlt nie etwas.

Fehler

  • 410 Gone - Code SETTLE_REPLACED, immer.
POST /v1/workspaces/{regionId}/invoices/{invoiceId}/settle
Anfrage
curl -X POST "$PLEAXY_API_BASE_URL/v1/workspaces/{regionId}/invoices/{invoiceId}/settle" \
  -H "X-Api-Key: $PLEAXY_API_KEY"
Antwort · 410 Gone
{
   "statusCode": 410,
   "error": "Gone",
   "code": "SETTLE_REPLACED",
   "message": "string",
   "messageId": "invoices.settleReplaced",
   "params": { }
}
Kontakt aufnehmen