{
  "x-generator": "NSwag v14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))",
  "openapi": "3.0.0",
  "info": {
    "title": "EasyNova Api Letter Post Service",
    "version": "V1"
  },
  "servers": [
    {
      "url": "https://digibrief-api.easynova.de"
    }
  ],
  "paths": {
    "/api/pricePreview": {
      "post": {
        "tags": [
          "Letter"
        ],
        "summary": "Voraussichtlicher Preis einer Sendung (unverbindlich)",
        "description": "Ermittelt den voraussichtlichen Preis für GENAU EINE Sendung, ohne etwas einzuliefern. Geben Sie ENTWEDER data (das PDF, Base64 — die Seiten werden gezählt) ODER pagesCount an.\r\n\r\npriceNet/priceWithTax folgen derselben Auswahlregel wie die Abrechnung: Die Portooptimierung (optimizePrice) zählt nur, wenn ein optimierter Preis existiert UND billiger ist. Die Antwort nennt nur den Betrag, der gilt — nicht die beiden Einzelsätze.\r\n\r\nregisteredLetter nimmt dieselben Werte wie POST /api/letter (Klartexte oder ePost-Kürzel). Ist die gewünschte Einschreiben-Art für Ihr Konto oder das Empfängerland nicht freigeschaltet, antwortet dieser Endpunkt mit einer Begründung statt mit einem Preis — so erfahren Sie es VOR der Einlieferung.\r\n\r\nDer Wert ist eine MOMENTAUFNAHME und keine Zusage: Verbindlich rechnet das Backend bei der Verarbeitung ab.",
        "operationId": "GetPricePreview",
        "requestBody": {
          "x-name": "PricePreviewRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PricePreviewRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PricePreviewResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "JWTBearerAuth": [
              "EpostApi"
            ]
          }
        ]
      }
    },
    "/api/letter/{letterId}": {
      "get": {
        "tags": [
          "Letter"
        ],
        "summary": "Statusabfrage mit Sendungs-ID",
        "description": "Statusabfrage einer bestimmten Sendung über die eindeutige Sendungs-ID.\r\n\r\nAuthentifizierung und Validierung der Sendungsabfrage erfolgt über Bearer-Token im Http-Header\r\n(Authorization: Bearer #token#)\r\n\r\nKOSTEN: Sobald der Druckdienstleister die Sendung abgerechnet hat, tragen die Felder `priceNet` (netto) und `priceWithTax` (mit Umsatzsteuer) den TATSAECHLICH abgerechneten Betrag in Euro. Vorher sind beide LEER - eine 0 wird nicht ausgeliefert, weil 0,00 ein gueltiger Betrag ist. Der Wert erscheint typischerweise OHNE Statuswechsel und ist damit nicht an statusID gebunden. Kostenschaetzung VOR dem Versand: POST /api/pricePreview. Kontostand: GET /api/companyBilling.",
        "operationId": "GetLetterById",
        "parameters": [
          {
            "name": "letterId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LetterStatus"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "JWTBearerAuth": [
              "EpostApi"
            ]
          }
        ]
      }
    },
    "/api/letter/Batch": {
      "get": {
        "tags": [
          "Letter"
        ],
        "summary": "Statusabfrage eines Stapellaufs",
        "description": "Statusabfrage eines bestimmten Stapellaufs (BatchID)\r\n\r\nAuthentifizierung und Validierung der Sendungsabfrage erfolgt über Bearer-Token im Http-Header\r\n(Authorization: Bearer #token#)\r\n\r\nKOSTEN: Sobald der Druckdienstleister die Sendung abgerechnet hat, tragen die Felder `priceNet` (netto) und `priceWithTax` (mit Umsatzsteuer) den TATSAECHLICH abgerechneten Betrag in Euro. Vorher sind beide LEER - eine 0 wird nicht ausgeliefert, weil 0,00 ein gueltiger Betrag ist. Der Wert erscheint typischerweise OHNE Statuswechsel und ist damit nicht an statusID gebunden. Kostenschaetzung VOR dem Versand: POST /api/pricePreview. Kontostand: GET /api/companyBilling.",
        "operationId": "GetLettersByBatchId",
        "parameters": [
          {
            "name": "batchId",
            "in": "query",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "onlyIssues",
            "in": "query",
            "schema": {
              "type": "boolean",
              "nullable": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LetterStatus"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "JWTBearerAuth": [
              "EpostApi"
            ]
          }
        ]
      }
    },
    "/api/letter": {
      "post": {
        "tags": [
          "Letter"
        ],
        "summary": "Einlieferung von einer oder mehreren Sendungen",
        "description": "Einlieferung von einer oder mehreren Sendungen, wobei eine Gruppierung von mehreren Uploads über die individuelle batchID möglich ist. Die einzuliefernden PDF-Dateien dürfen pro Sendung 20 MB bzw. mehrere Sendungen per Request 300 MB nicht überschreiten. Im Erfolgsfall der Einlieferung wird zu jeder Datei eine eindeutige letterID als Response bereitgestellt, die im Folgenden die Sendung dauerhaft identifiziert.\r\n\r\nDie Sendung wird so dann der weiteren Aufbereitung und tieferen Prüfungen zugeführt und kann über Statusabfragen verfolgt werden.\r\n\r\nPFLICHTFELDER je Sendung: NUR fileName und data (PDF, Base64).\r\n\r\nEMPFÄNGERADRESSE: Maßgeblich ist ausschließlich die Adresse IM PDF — sie wird aus dem Adressfenster des Ausgabekanals gelesen (bei Bedarf per OCR) und muss unterhalb der Freimachungszone stehen. Die JSON-Felder addressLine1, zipCode, city und die weiteren Adress-/Absenderzeilen sind OPTIONALE Metadaten: sie werden gespeichert und im Statusabruf zurückgegeben (nützlich zur Wiedererkennung in Ihrem System), haben aber KEINEN Einfluss auf die Zustellung. Sendungen, deren Adresse nicht lesbar ist oder deren Inhalt eine Sperrfläche verletzt, erhalten Status 99 mit Begründung in der errorList — prüfen Sie also den Statusabruf, nicht nur die Antwort auf diesen Aufruf.\r\n\r\nEINSCHREIBEN (registeredLetter): wird unterstützt. Zulässig sind die Klartexte (Einschreiben, Einschreiben Einwurf, Einschreiben Rückschein, …) und die ePost-Kürzel (E---- Einschreiben, EEW-- Einwurf, ER--- Rückschein, EEH-- Eigenhändig …). Welche Varianten für Ihr Konto und das Empfängerland freigeschaltet sind, prüft die Einlieferung; eine unzulässige Variante wird mit Status 99 und Nennung der zulässigen Werte abgelehnt und NIEMALS still als Normalbrief versendet. Einschreiben gibt es nur im Simplex-Druck (isDuplex=false) und ist kostenwirksam — mit testFlag=true können Sie den Ablauf kostenfrei prüfen.\r\n\r\nADRESSKORREKTUR (Feld addressCorrection): Steht die Empfängeradresse im PDF an einer Position, die mit der Freimachungszone kollidiert, kann die Einlieferung sie an die zulässige Stelle setzen — der Brief wird dafür nicht umgestaltet, nur der Adressblock neu gesetzt. Sie entscheiden JE SENDUNG, ob und wie:\r\n· Feld weggelassen oder leer — KEINE Korrektur. Das Dokument bleibt unangetastet; eine kollidierende Adresse führt zu Status 99 statt zu einem veränderten Brief. Die Ablehnung nennt Ihnen dann, wie sich der Brief retten lässt.\r\n· 'auto' — automatische Korrektur, und NUR wenn die Sendung sonst abgelehnt würde. Briefe mit korrekt sitzender Adresse bleiben dabei unverändert.\r\n· 'favorit' — das für Ihr Konto hinterlegte Favoritenprofil; ist keines gesetzt, wird wie bei 'auto' verfahren.\r\n· Profilname — genau dieses Profil Ihres Kontos.\r\nEin unbekannter Profilname wird abgelehnt und nennt die zulässigen Namen; es erfolgt kein stiller Rückfall. 'auto' und 'favorit' sind reservierte Wörter und können keine Profilnamen sein.\r\n\r\nWIEDERHOLUNG SICHER MACHEN (empfohlen): Senden Sie den optionalen Kopfzeilen-Eintrag Idempotency-Key mit einem für diesen Aufruf eindeutigen Wert (z. B. Ihre Vorgangs- oder Auftragsnummer, max. 180 Zeichen). Bricht die Verbindung ab, bevor Sie die Antwort erhalten, wiederholen Sie denselben Aufruf mit DEMSELBEN Schlüssel: Sie bekommen die ursprüngliche letterID zurück, es wird nichts ein zweites Mal gedruckt. Bei mehreren Sendungen je Aufruf gilt der Schlüssel für den gesamten Aufruf — behalten Sie dann die Reihenfolge der Sendungen bei. Ohne den Kopfzeilen-Eintrag bleibt es beim bisherigen Verhalten (Erkennung inhaltsgleicher Doppel-Einlieferungen).\r\n\r\nVORÜBERGEHEND NICHT MÖGLICH (HTTP 503): Konnte KEINE der Sendungen eines Aufrufs an die Produktion übergeben werden, weil unser Backend gerade nicht erreichbar war, antwortet der Aufruf mit 503 und einem Retry-After-Kopf (Sekunden). Dann wurde NICHTS gesendet und NICHTS gespeichert — wiederholen Sie denselben Aufruf nach der genannten Frist, am besten mit demselben Idempotency-Key; eine doppelte Zustellung ist dabei ausgeschlossen.\r\n\r\nTESTMODUS: testFlag=true gilt JE SENDUNG — die Sendung durchläuft alle Prüfungen, wird aber nicht gedruckt und nicht zugestellt; Testbriefe und echte Briefe dürfen im selben Stapel stehen. Der Statusabruf gibt testFlag zurück, sodass jederzeit erkennbar ist, ob eine Sendung ein Testbrief war. Ist zusätzlich testEMail gesetzt, geht das verarbeitete PDF an diese Adresse (mit testShowRestrictedArea=true inklusive Schablonen-Darstellung der Prüf- und Adressflächen).\r\n\r\nNICHT unterstützt: coverLetter/coverData (Deckblätter) führen zur Ablehnung mit klarer Meldung; custom1–custom5 und plugInList werden angenommen, aber nicht verarbeitet.\r\n\r\nAuthentifizierung und Validierung der Sendungseinlieferung erfolgt über Bearer-Token im Http-Header\r\n(Authorization: Bearer #token#)\r\n\r\nBeispiel-Anfrage:",
        "operationId": "SendLetter",
        "requestBody": {
          "x-name": "IEnumerable`1",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "example": [
                  {
                    "fileName": "rechnung_4711.pdf",
                    "data": "JVBERi0xLjQgKEJhc2U2NCBkZXMgUERGcyk=",
                    "isColor": false,
                    "isDuplex": false,
                    "batchID": 15342,
                    "testFlag": true
                  }
                ],
                "items": {
                  "$ref": "#/components/schemas/Letter"
                }
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/LetterIdent"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "503": {
            "description": "",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails"
                }
              }
            }
          }
        },
        "security": [
          {
            "JWTBearerAuth": [
              "EpostApi"
            ]
          }
        ]
      }
    },
    "/api/companyBilling": {
      "get": {
        "tags": [
          "CompanyBilling"
        ],
        "summary": "Abrechnungsdaten des angemeldeten Kontos",
        "description": "Liefert die Abrechnungssicht des angemeldeten Kontos: Zahlart (paymentMethod), aktuelles Guthaben bzw. Saldo (paymentBalance), im Abrechnungszeitraum aufgelaufene Kosten (paymentRunning), Limit- und Warnschwelle (paymentLimit, paymentWarning), Rabatt (paymentDiscount) und die Wallet-Kennung (paymentWalletId).\r\n\r\nBei Vorkasse-Konten eignet sich der Aufruf als Guthaben-Vorabprüfung vor größeren Einlieferungen. Die Werte stammen aus dem easyNova-Backend und sind eine Momentaufnahme — nicht zur Rechnungsprüfung geeignet.",
        "operationId": "GetCompanyBillingInfo",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompanyBillingInfoModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "JWTBearerAuth": [
              "EpostApi"
            ]
          }
        ]
      }
    },
    "/api/Login": {
      "post": {
        "tags": [
          "Login"
        ],
        "summary": "Anmeldung: liefert das Bearer-Token für alle weiteren Aufrufe",
        "description": "Anmeldung mit den easyNova-Zugangsdaten. Wirksam sind ausschließlich `ekp` (Benutzername, i. d. R. die E-Mail-Adresse des Kontos) und `password`; die Felder `vendorId` und `secret` werden aus Kompatibilität zur v1-Schnittstelle angenommen, aber nicht ausgewertet.\r\n\r\nDie Antwort enthält das Token im Feld `token`. Es ist 8 Stunden gültig und wird als Bearer-Token mitgegeben (Authorization: Bearer #token#). Einen Verlängerungsendpunkt gibt es nicht — nach Ablauf erneut anmelden.\r\n\r\nAbgelehnte Zugangsdaten beantwortet der Endpunkt mit HTTP 400. Der ausgewiesene 404 ist historisch und wird von keinem Ablauf tatsächlich geliefert.",
        "operationId": "Login",
        "requestBody": {
          "x-name": "TokenRequest",
          "description": "",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TokenRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EpostTokenResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/ProblemDetails2"
                }
              }
            }
          }
        }
      }
    },
    "/health": {
      "get": {
        "tags": [
          "Betrieb"
        ],
        "summary": "Verfügbarkeitsprüfung (Datenbank erreichbar?)",
        "operationId": "Health",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {}
              },
              "application/json": {
                "schema": {}
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "PricePreviewResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "pagesCount": {
            "type": "integer",
            "format": "int32"
          },
          "priceNet": {
            "type": "number",
            "description": "Der voraussichtliche Preis NETTO. Die Portooptimierung (optimizePrice)\nist dabei schon berücksichtigt: sie zählt nur, wenn ein optimierter\nPreis existiert UND billiger ist.",
            "format": "double",
            "nullable": true
          },
          "priceWithTax": {
            "type": "number",
            "description": "Derselbe Betrag MIT Steuer.",
            "format": "double",
            "nullable": true
          }
        }
      },
      "PricePreviewRequest": {
        "type": "object",
        "example": {
          "pagesCount": 2,
          "isColor": false,
          "isDuplex": false,
          "countryIso": "DE",
          "zipCode": "53115"
        },
        "additionalProperties": false,
        "properties": {
          "data": {
            "type": "string",
            "description": "Das PDF, Base64-kodiert — Alternative zu pagesCount (die Seiten werden gezählt).",
            "format": "byte",
            "nullable": true
          },
          "pagesCount": {
            "type": "integer",
            "description": "Seitenzahl des Dokuments — Alternative zu data.",
            "format": "int32",
            "nullable": true
          },
          "isColor": {
            "type": "boolean"
          },
          "isDuplex": {
            "type": "boolean"
          },
          "registeredLetter": {
            "type": "string",
            "description": "Einschreiben-Art wie bei POST /api/letter (leer = Standardbrief).",
            "nullable": true
          },
          "countryIso": {
            "type": "string",
            "description": "Empfängerland als ISO-2 (Vorgabe DE) — bestimmt Inlands- oder Auslandsporto.",
            "nullable": true
          },
          "zipCode": {
            "type": "string",
            "description": "Empfänger-PLZ, sofern bekannt — kann in die Preisermittlung einfließen.",
            "nullable": true
          },
          "optimizePrice": {
            "type": "boolean",
            "description": "Portooptimierung einbeziehen (zählt nur, wenn sie billiger ist)."
          }
        }
      },
      "LetterStatus": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "letterID",
          "fileName",
          "statusID"
        ],
        "properties": {
          "letterID": {
            "type": "integer",
            "format": "int64"
          },
          "fileName": {
            "type": "string",
            "maxLength": 200,
            "minLength": 1
          },
          "statusID": {
            "type": "integer",
            "format": "int32"
          },
          "statusDetails": {
            "type": "string",
            "nullable": true
          },
          "createdDate": {
            "type": "string",
            "format": "date-time"
          },
          "processedDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "printUploadDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "printFeedbackDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "testFlag": {
            "type": "boolean"
          },
          "testEMail": {
            "type": "string",
            "nullable": true
          },
          "testShowRestrictedArea": {
            "type": "boolean"
          },
          "registeredLetter": {
            "type": "string",
            "nullable": true
          },
          "registeredLetterID": {
            "type": "string",
            "nullable": true
          },
          "batchID": {
            "type": "integer",
            "format": "int32"
          },
          "coverLetter": {
            "type": "boolean"
          },
          "noOfPages": {
            "type": "integer",
            "format": "int32"
          },
          "subVendorID": {
            "type": "string",
            "nullable": true
          },
          "custom1": {
            "type": "string",
            "nullable": true
          },
          "custom2": {
            "type": "string",
            "nullable": true
          },
          "custom3": {
            "type": "string",
            "nullable": true
          },
          "custom4": {
            "type": "string",
            "nullable": true
          },
          "custom5": {
            "type": "string",
            "nullable": true
          },
          "zipCode": {
            "type": "string",
            "nullable": true
          },
          "city": {
            "type": "string",
            "nullable": true
          },
          "country": {
            "type": "string",
            "nullable": true
          },
          "isColor": {
            "type": "boolean"
          },
          "isDuplex": {
            "type": "boolean"
          },
          "registeredLetterStatus": {
            "type": "string",
            "nullable": true
          },
          "registeredLetterStatusDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "vendorSystemInformation": {
            "type": "string",
            "maxLength": 150,
            "minLength": 0,
            "nullable": true
          },
          "costCenter": {
            "type": "string",
            "maxLength": 8,
            "minLength": 0,
            "nullable": true
          },
          "frankierID": {
            "type": "string",
            "nullable": true
          },
          "destinationAreaStatus": {
            "type": "string",
            "nullable": true
          },
          "destinationAreaStatusDate": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "errorList": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/Error"
            }
          },
          "plugInFeedbackList": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/PlugInFeedback"
            }
          },
          "priceNet": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "priceWithTax": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        }
      },
      "Error": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "level",
          "code",
          "description"
        ],
        "properties": {
          "level": {
            "type": "string",
            "minLength": 1
          },
          "code": {
            "type": "string",
            "minLength": 1
          },
          "description": {
            "type": "string",
            "minLength": 1
          },
          "date": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          }
        }
      },
      "PlugInFeedback": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "plugInName"
        ],
        "properties": {
          "plugInName": {
            "type": "string",
            "maxLength": 200,
            "minLength": 0
          },
          "plugInFeedbackModel": {
            "nullable": true
          }
        }
      },
      "LetterByIdRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "LettersByBatchIdRequest": {
        "type": "object",
        "additionalProperties": false
      },
      "LetterIdent": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "fileName"
        ],
        "properties": {
          "fileName": {
            "type": "string",
            "maxLength": 200,
            "minLength": 1
          },
          "letterID": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "ProblemDetails": {
        "type": "object",
        "additionalProperties": {
          "nullable": true
        },
        "properties": {
          "type": {
            "type": "string",
            "nullable": true
          },
          "title": {
            "type": "string",
            "nullable": true
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "nullable": true
          },
          "detail": {
            "type": "string",
            "nullable": true
          },
          "instance": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "Letter": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "fileName",
          "data"
        ],
        "properties": {
          "fileName": {
            "type": "string",
            "maxLength": 200,
            "minLength": 5
          },
          "data": {
            "type": "string",
            "format": "byte"
          },
          "isColor": {
            "type": "boolean"
          },
          "isDuplex": {
            "type": "boolean"
          },
          "batchID": {
            "type": "integer",
            "format": "int32"
          },
          "registeredLetter": {
            "type": "string",
            "maxLength": 50,
            "minLength": 0,
            "nullable": true
          },
          "registeredLetterAdressLine1": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "registeredLetterAdressLine2": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "registeredLetterAdressLine3": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "registeredLetterZipCode": {
            "type": "string",
            "maxLength": 20,
            "minLength": 5,
            "nullable": true
          },
          "registeredLetterCity": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "testFlag": {
            "type": "boolean"
          },
          "testEMail": {
            "type": "string",
            "maxLength": 100,
            "minLength": 0,
            "nullable": true
          },
          "testShowRestrictedArea": {
            "type": "boolean"
          },
          "coverLetter": {
            "type": "boolean"
          },
          "coverData": {
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "addressCorrection": {
            "type": "string",
            "maxLength": 100,
            "minLength": 0,
            "nullable": true
          },
          "addressLine1": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "addressLine2": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "addressLine3": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "addressLine4": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "addressLine5": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "zipCode": {
            "type": "string",
            "maxLength": 20,
            "minLength": 0,
            "nullable": true
          },
          "city": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "country": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "senderAdressLine1": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "senderStreet": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "senderZipCode": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "senderCity": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "senderAdressLineComplete": {
            "type": "string",
            "maxLength": 200,
            "minLength": 0,
            "nullable": true
          },
          "custom1": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "custom2": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "custom3": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "custom4": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "custom5": {
            "type": "string",
            "maxLength": 80,
            "minLength": 0,
            "nullable": true
          },
          "vendorSystemInformation": {
            "type": "string",
            "maxLength": 120,
            "minLength": 0,
            "nullable": true
          },
          "costCenter": {
            "type": "string",
            "maxLength": 8,
            "minLength": 0,
            "nullable": true
          },
          "plugInList": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/PlugIn"
            }
          }
        }
      },
      "PlugIn": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "plugInName"
        ],
        "properties": {
          "plugInName": {
            "type": "string",
            "maxLength": 200,
            "minLength": 0
          },
          "plugInModel": {
            "nullable": true
          }
        }
      },
      "CompanyBillingInfoModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "paymentBalance": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "paymentDiscount": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "paymentLimit": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "paymentMethod": {
            "type": "string",
            "nullable": true
          },
          "paymentRunning": {
            "type": "number",
            "format": "double",
            "nullable": true
          },
          "paymentWalletId": {
            "type": "string",
            "nullable": true
          },
          "paymentWarning": {
            "type": "number",
            "format": "double",
            "nullable": true
          }
        }
      },
      "EpostTokenResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "token": {
            "type": "string"
          }
        }
      },
      "ProblemDetails2": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "type": {
            "type": "string",
            "default": "https://www.rfc-editor.org/rfc/rfc7231#section-6.5.1"
          },
          "title": {
            "type": "string",
            "default": "One or more validation errors occurred."
          },
          "status": {
            "type": "integer",
            "format": "int32",
            "default": 400
          },
          "instance": {
            "type": "string",
            "default": "/api/route"
          },
          "traceId": {
            "type": "string",
            "default": "0HMPNHL0JHL76:00000001"
          },
          "detail": {
            "type": "string",
            "nullable": true
          },
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProblemDetails_Error"
            }
          }
        }
      },
      "ProblemDetails_Error": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "default": "Error or field name"
          },
          "reason": {
            "type": "string",
            "default": "Error reason"
          },
          "code": {
            "type": "string",
            "nullable": true
          },
          "severity": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "TokenRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "ekp",
          "password"
        ],
        "properties": {
          "vendorId": {
            "type": "string"
          },
          "ekp": {
            "type": "string",
            "minLength": 1
          },
          "secret": {
            "type": "string"
          },
          "password": {
            "type": "string",
            "minLength": 1
          }
        }
      }
    },
    "securitySchemes": {
      "JWTBearerAuth": {
        "type": "http",
        "description": "Enter a JWT token to authorize the requests...",
        "scheme": "Bearer",
        "bearerFormat": "JWT"
      }
    }
  }
}