> ## Documentation Index
> Fetch the complete documentation index at: https://developer.comstruct.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Create delivery

> **Erforderliche Berechtigungen:** `deliveries:write`

Erstellt einen neuen Lieferschein im System. Dieser Endpunkt wird typischerweise von Lieferanten verwendet, um Lieferinformationen zu übermitteln.

**Erforderliche Felder:**
- `deliveryNumber`: Eindeutige Lieferscheinnummer vom Lieferanten
- `deliveryDate`: Datum und Uhrzeit der Lieferung (ISO 8601-Format)

**Projektzuordnung:**
Die Lieferung kann mit einem Projekt verknüpft werden, indem einer der folgenden Werte verwendet wird (in Reihenfolge der Priorität):
1. `projectId`: Direkte UUID-Referenz zum Projekt
2. `projectNumber`: Projektnummer für automatischen Abgleich
3. `projectTitle`: Projekttitel für Fuzzy-Matching
4. `customerName`: Kundenname für Projektsuche

**Positionen:**
Jede Lieferung sollte mindestens eine Position mit einem `title` enthalten. Das `type`-Feld ist optional und wird automatisch basierend auf Titel und Einheit bestimmt, wenn nicht angegeben.




## OpenAPI

````yaml POST /deliveries
openapi: 3.0.3
info:
  title: comstruct Public API
  description: >
    Die comstruct API ist eine umfassende und flexible Lösung zur Optimierung
    des Materialbeschaffungsprozesses für Unternehmen. Diese API bietet eine
    einfache Schnittstelle für Entwickler, um auf Materialbeschaffungsdaten
    zuzugreifen und diese zu verwalten, einschließlich Lieferanteninformationen,
    Lieferungen und Projekte.


    ## Erste Schritte

    Um Zugang zur comstruct API zu erhalten, wenden Sie sich bitte an Ihren
    zuständigen Customer Success Manager. Unser Expertenteam steht Ihnen mit
    erstklassigem Support zur Verfügung, um Ihnen zu helfen, das Beste aus
    unserer API herauszuholen.


    ## Authentifizierung

    Alle API-Endpunkte unter `/v1` erfordern eine Authentifizierung mittels
    API-Schlüssel im `x-api-key`-Header. Jeder API-Schlüssel hat spezifische
    Berechtigungen (Scopes), die bestimmen, welche Endpunkte und Operationen
    verfügbar sind. Die Authentifizierung wird durch Middleware durchgesetzt,
    die den API-Schlüssel und die Berechtigungen für jede Anfrage validiert.


    Kalender-Endpunkte unter `/calendars` verwenden Token-basierte
    Authentifizierung anstelle von API-Schlüsseln.


    ## Datenformate

    - Alle Zeitstempel sind im ISO 8601-Format (UTC)

    - Geldbeträge werden als Dezimalzahlen dargestellt

    - IDs sind UUIDs, sofern nicht anders angegeben


    ## Anfragegrößenbeschränkungen

    - PDF-Rechnungsverarbeitung, benutzerdefinierte Rechnungsverarbeitung und
    Workflow-Verarbeitung: 32MiB

    - Alle anderen Endpunkte: 10MiB


    ## Fehlerbehandlung

    Die API verwendet Standard-HTTP-Statuscodes und gibt detaillierte
    Fehlermeldungen im JSON-Format zurück. Weitere Details finden Sie in den
    Fehlerschemas.


    ## Integrationsmuster

    - **SAP-Integration**: Spezialisierte Endpunkte für SAP-ERP-Systeme

    - **Projektverwaltung**: Vollständiges Projektlebenszyklusmanagement mit
    Benutzerrollen

    - **Lieferverfolgung**: Unterstützung mehrerer Lieferscheinformate
    (OpenTrans, PAHM, Q-Point, benutzerdefiniert)

    - **Rechnungsverarbeitung**: Automatisierte Rechnungsanalyse und
    -validierung mit KI/GPT-Unterstützung

    - **Auftragsverwaltung**: IDS-Auftragsverarbeitung mit XML-Parsing und
    Projektkalenderintegration

    - **Kalenderintegration**: Separate Kalender-Endpunkte für
    iCalendar-Abonnement-Feeds
  version: 1.0.9
  license:
    name: Proprietary
    url: https://comstruct.com
  contact:
    name: comstruct ICT GmbH
    url: https://comstruct.com
    email: support@comstruct.com
  termsOfService: https://comstruct.com/datenschutzerklarung/
  x-logo:
    url: https://app.comstruct.com/logo-light-text.png
    altText: comstruct logo
servers:
  - url: https://api.comstruct.com/v1
    description: Haupt-API-Endpunkte (erfordert API-Schlüssel-Authentifizierung)
    variables: {}
  - url: https://api.comstruct.com
    description: Basisserver für Kalender- und IDS-Endpunkte (andere Authentifizierung)
    variables: {}
security:
  - ApiKey: []
tags:
  - name: Projects
    description: Endpunkte für Projekte.
  - name: Projects (SAP)
    description: SAP-spezifische Projekt-Endpunkte.
  - name: Project Regions
    description: Endpunkte für die Verwaltung von Projektregionen.
  - name: Deliveries
    description: Endpunkte für Lieferungen.
  - name: Deliveries (Supplier)
    description: Lieferantenspezifische Liefer-Endpunkte.
  - name: Accounts
    description: Endpunkte für die Verwaltung von Sachkonten.
  - name: Payment Terms
    description: Endpunkte für die Verwaltung von Zahlungsbedingungen.
  - name: Tax Codes
    description: Endpunkte für die Verwaltung von Steuercodes.
  - name: Company Codes
    description: Endpunkte für die Verwaltung von Buchungskreisen (juristische Einheiten).
  - name: Suppliers
    description: Endpunkte für die Verwaltung von Lieferanten.
  - name: Purchase Orders
    description: Endpunkte für Bestellungen.
  - name: Purchase Orders (SAP)
    description: SAP-spezifische Bestellungs-Endpunkte.
  - name: Orders (Supplier)
    description: >-
      Lieferantenspezifische Bestellungs-Endpunkte (Bestätigung, Ablehnung,
      Bearbeitung).
  - name: Suppliers (SAP)
    description: SAP-spezifische Lieferanten-Endpunkte.
  - name: Invoices
    description: Endpunkte für Rechnungen.
  - name: Invoices (Supplier)
    description: Lieferantenspezifische Rechnungs-Endpunkte.
  - name: Invoices (SAP)
    description: SAP-spezifische Rechnungs-Endpunkte.
  - name: Invoice Dimensions
    description: >
      Rechnungs-Dimensionen (benutzerdefinierte Eigenschaften) und Zuweisungen
      auf Rechnung (`header`), Position (`line_item`) oder Kontierung
      (`account`).


      Dimensionen haben den Typ `option` (vordefinierte Werte) oder `text`
      (Freitext über `dimension_id` + `text_value`). Bulk-Konto-POST
      (`/assignments/account/bulk`) unterstützt nur Options-Zuweisungen über
      `option_ids`; Freitext auf Kontoebene über Einzel-POST, PATCH-Bulk oder
      Positions-Bulk.
  - name: Workflows
    description: Endpunkte für Workflow- und Prozessmanagement.
  - name: Calendar
    description: Kalender-Abonnement-Endpunkte mit separater Authentifizierung.
  - name: Orders
    description: Endpunkte für Auftragsverarbeitung und -verwaltung.
paths:
  /deliveries:
    post:
      tags:
        - Deliveries (Supplier)
        - Deliveries
      summary: Neuen Lieferschein hochladen
      description: >
        **Erforderliche Berechtigungen:** `deliveries:write`


        Erstellt einen neuen Lieferschein im System. Dieser Endpunkt wird
        typischerweise von Lieferanten verwendet, um Lieferinformationen zu
        übermitteln.


        **Erforderliche Felder:**

        - `deliveryNumber`: Eindeutige Lieferscheinnummer vom Lieferanten

        - `deliveryDate`: Datum und Uhrzeit der Lieferung (ISO 8601-Format)


        **Projektzuordnung:**

        Die Lieferung kann mit einem Projekt verknüpft werden, indem einer der
        folgenden Werte verwendet wird (in Reihenfolge der Priorität):

        1. `projectId`: Direkte UUID-Referenz zum Projekt

        2. `projectNumber`: Projektnummer für automatischen Abgleich

        3. `projectTitle`: Projekttitel für Fuzzy-Matching

        4. `customerName`: Kundenname für Projektsuche


        **Positionen:**

        Jede Lieferung sollte mindestens eine Position mit einem `title`
        enthalten. Das `type`-Feld ist optional und wird automatisch basierend
        auf Titel und Einheit bestimmt, wenn nicht angegeben.
      operationId: createDelivery
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Delivery'
            examples:
              basic_delivery:
                summary: Einfacher Lieferschein
                value:
                  deliveryNumber: LS-2024-001234
                  deliveryDate: '2024-01-15T08:30:00Z'
                  projectNumber: PRJ-2024-001
                  items:
                    - title: Beton C30/37
                      quantity: 8.5
                      unit: m3
                      productNumber: BET-C30-37
              delivery_with_vehicle:
                summary: Lieferschein mit Fahrzeug- und Werksinformationen
                value:
                  deliveryNumber: LS-2024-001235
                  deliveryDate: '2024-01-15T10:00:00Z'
                  projectNumber: PRJ-2024-002
                  vehicleNumber: M-AB 1234
                  plant: Betonwerk München-Nord
                  comment: Lieferung an Bauabschnitt B
                  items:
                    - title: Transportbeton C25/30
                      quantity: 7
                      unit: m3
                    - title: Betonpumpe Stunden
                      quantity: 2.5
                      unit: h
                      type: TRANSPORT
              delivery_with_customer:
                summary: Lieferschein mit Kundenname
                value:
                  deliveryNumber: LS-2024-001236
                  deliveryDate: '2024-01-15T14:00:00Z'
                  customerName: Bauunternehmen Müller GmbH
                  projectTitle: Neubau Bürogebäude Hauptstraße
                  items:
                    - title: Bewehrungsstahl BSt 500
                      quantity: 2.5
                      unit: t
                      productNumber: BST-500-12
      responses:
        '200':
          description: >-
            Lieferschein empfangen, aber keine Änderungen vorgenommen (Duplikat
            oder unverändert)
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: Delivery note has no changes
        '201':
          description: Lieferschein erfolgreich erstellt
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                    example: true
                  message:
                    type: string
                    example: Delivery note successfully uploaded
        '400':
          description: Ungültige Eingabe - Validierung fehlgeschlagen
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          $ref: '#/components/responses/Forbidden'
      security:
        - ApiKey:
            - deliveries:write
components:
  schemas:
    Delivery:
      required:
        - deliveryNumber
        - deliveryDate
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: Die ID der Lieferung bei comstruct.
          readOnly: true
        deliveryNumber:
          type: string
          example: 1234'23
          description: >-
            Die Referenznummer für die Lieferung. Muss für den Lieferanten
            eindeutig sein.
        deliveryDate:
          type: string
          format: date-time
          example: '2024-01-15T08:30:00Z'
          description: Datum und Uhrzeit der Lieferung. Muss im ISO 8601-Format sein.
        projectNumber:
          type: string
          example: PRJ-2024-001
          description: >-
            Die Projektnummer, zu der die Lieferung gehört. Wird für die
            Zuordnung der Lieferung zu einem Projekt verwendet.
        projectTitle:
          type: string
          example: Highway Construction A1
          description: >-
            Der Titel des Projekts. Kann als Alternative zur projectNumber für
            die Projektzuordnung verwendet werden.
        project:
          $ref: '#/components/schemas/Project'
          readOnly: true
        supplierId:
          type: string
          format: uuid
          description: Die ID des Lieferanten, zu dem die Lieferung gehört.
          writeOnly: true
        projectId:
          type: string
          format: uuid
          description: >-
            Die ID des Projekts, zu dem die Lieferung gehört. Wenn angegeben,
            hat diese Vorrang vor projectNumber.
        customerName:
          type: string
          example: Bauunternehmen Müller GmbH
          description: >-
            Der Name des Kunden, der die Lieferung erhält. Kann für die
            Projektzuordnung verwendet werden.
        vehicleNumber:
          type: string
          example: M-AB 1234
          description: >-
            Das Kennzeichen des Fahrzeugs, mit dem die Lieferung transportiert
            wird.
        plant:
          type: string
          example: Werk München-Nord
          description: >-
            Der Name oder die Kennung des Werks/der Anlage, von der die
            Lieferung stammt.
        documentUrl:
          type: string
          format: uri
          example: https://example.com/delivery-note.pdf
          description: >-
            Ein Link zum Lieferschein-Dokument. Kann das vollständige Dokument
            sein, base64-kodiert.
        comment:
          type: string
          description: Ein optionaler Kommentar zur Lieferung.
        status:
          type: string
          example: DELIVERED
          description: Der Status der Lieferung (z.B. DELIVERED, IN_TRANSIT, PENDING).
        items:
          type: array
          items:
            $ref: '#/components/schemas/LineItem'
          description: Eine Liste der in der Lieferung enthaltenen Positionen.
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Fehlermeldung, die beschreibt, was schiefgelaufen ist
        message:
          type: string
          description: Zusätzliche Fehlerdetails oder benutzerfreundliche Nachricht
        success:
          type: boolean
          description: Zeigt Fehlschlag an, wenn in Fehlerantworten vorhanden
      anyOf:
        - required:
            - error
        - required:
            - message
        - required:
            - success
      example:
        error: Validation failed
        message: The provided data did not pass validation checks
    Project:
      type: object
      readOnly: true
      properties:
        id:
          type: string
          format: uuid
          description: Die eindeutige Kennung des Projekts
        external_id:
          type: string
          example: EXT-001
          description: Die externe Kennung des Projekts
        title:
          type: string
          example: Example Site
          description: Der Titel des Projekts
        project_number:
          type: string
          nullable: true
          example: '23423420'
          description: Die Projektnummer
        description:
          type: string
          description: Eine Beschreibung des Projekts
        region:
          type: string
          example: Bavaria
          description: >-
            Die Region, in der sich das Projekt befindet, wird für Filterung
            verwendet
        project_region_id:
          type: string
          format: uuid
          nullable: true
          description: Die ID der verknüpften Projektregion
        active:
          type: boolean
          nullable: true
          description: Steuert, ob das Projekt aktiv ist
        alternative_project_number:
          type: string
          nullable: true
          description: Alternative Projektnummer zur Referenz, z. B. aus SAP
        status:
          type: string
          description: Der Status des Projekts
        customer_id:
          type: string
          format: uuid
          description: Die eindeutige Kennung des Kunden
        address:
          type: object
          description: Die Adressdetails des Projekts
          properties:
            address:
              type: string
              description: Die Straßenadresse
            city:
              type: string
              description: Die Stadt
            country:
              type: string
              description: Das Land
            house_number:
              type: string
              description: Die Hausnummer
            zip:
              type: string
              description: Die Postleitzahl
        legal_entity:
          type: object
          nullable: true
          description: Der dem Projekt zugeordnete Buchungskreis
          properties:
            id:
              type: string
              format: uuid
              description: Die eindeutige Kennung des Buchungskreises
            title:
              type: string
              description: Der Titel des Buchungskreises
            number:
              type: string
              description: Die Nummer des Buchungskreises
        project_invites:
          type: array
          description: Dem Projekt zugewiesene Benutzereinladungen
          items:
            $ref: '#/components/schemas/UserInvite'
    LineItem:
      type: object
      required:
        - title
      properties:
        productNumber:
          type: string
          example: '1234'
          description: Die Referenznummer des zugehörigen Produkts beim Lieferanten.
        title:
          type: string
          example: Beton C30/37
          description: Der Titel/Name des Produkts. Dieses Feld ist erforderlich.
        type:
          type: string
          example: CONCRETE
          description: >-
            Der Typ des Produkts. Wenn nicht angegeben, wird er automatisch
            basierend auf Titel und Einheit bestimmt.
        quantity:
          type: number
          format: double
          example: 15.5
          description: Die gelieferte Menge des Produkts.
        unit:
          type: string
          example: m3
          default: pau
          description: >-
            Die Mengeneinheit (z.B. m3, t, kg, stk). Standardmäßig 'pau'
            (Pauschale), wenn nicht angegeben.
      description: Eine Position, die ein Produkt in einem Lieferschein darstellt.
    UserInvite:
      type: object
      readOnly: true
      properties:
        id:
          type: string
          format: uuid
          description: Die ID der Benutzereinladung
        email:
          type: string
          format: email
          description: Die E-Mail der Benutzereinladung
        role:
          type: string
          nullable: true
          description: Der Rollentitel der Benutzereinladung
        role_id:
          type: string
          format: uuid
          nullable: true
          description: Die Rollen-ID der Benutzereinladung
        project_id:
          type: string
          format: uuid
          description: Die Projekt-ID der Benutzereinladung
        tenant_id:
          type: string
          format: uuid
          description: Die Mandanten-ID der Benutzereinladung
  responses:
    Forbidden:
      description: Verboten - Ungültige oder fehlende Berechtigung
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            invalid_scope:
              summary: Ungültige Berechtigung
              value:
                message: Invalid scope.
            missing_scope:
              summary: Fehlende spezifische Berechtigung
              value:
                error: 'Unauthorized. Missing scope: projects:write'
            missing_invoices_scope:
              summary: Fehlende Rechnungsberechtigung
              value:
                error: 'Unauthorized. Missing scope: invoices:write'
            missing_suppliers_scope:
              summary: Fehlende Lieferantenberechtigung
              value:
                error: 'Unauthorized. Missing scope: suppliers:write'
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: >
        API-Schlüssel zur Authentifizierung. Kontaktieren Sie Ihren Customer
        Success Manager, um einen API-Schlüssel zu erhalten.


        Jeder Endpunkt erfordert spezifische Berechtigungen (Scopes); die
        erforderlichen Scopes werden pro Endpunkt angezeigt.

````