> ## 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 or update suppliers

> **Erforderliche Berechtigungen:** `suppliers:write`

Erstellt oder aktualisiert Lieferanten des aktuellen Kunden. Der Abgleich erfolgt über `external_id`.
Bankverbindungen werden anhand der IBAN zusammengeführt.
`payment_term_id` und `default_account_id` sind UUIDs im comstruct-Mandanten.
Der API-Schlüssel muss mit einem Kunden verknüpft sein.




## OpenAPI

````yaml POST /suppliers
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` und IDS-Endpunkte unter `/ids` liegen
    **ohne** `/v1`-Präfix (Basis-URL `https://api.comstruct.com`). Kalender
    verwenden Token-basierte Authentifizierung; IDS ist ein öffentlicher
    Callback ohne API-Schlüssel.


    ## 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

    - Asynchroner Lieferschein-PDF-Upload (`POST /deliveries/pdf`): 16MiB

    - 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.10
  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:
  /suppliers:
    post:
      tags:
        - Suppliers
      summary: Lieferanten erstellen oder aktualisieren
      description: >
        **Erforderliche Berechtigungen:** `suppliers:write`


        Erstellt oder aktualisiert Lieferanten des aktuellen Kunden. Der
        Abgleich erfolgt über `external_id`.

        Bankverbindungen werden anhand der IBAN zusammengeführt.

        `payment_term_id` und `default_account_id` sind UUIDs im
        comstruct-Mandanten.

        Der API-Schlüssel muss mit einem Kunden verknüpft sein.
      operationId: upsertSuppliers
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/UpsertSupplierInput'
            examples:
              single_supplier:
                summary: Einzelner Lieferant
                value:
                  - external_id: SUP-001
                    title: Acme GmbH
                    legal_uid: DE123456789
                    country_code: DE
                    comment: Bevorzugter Kontakt per E-Mail
                    withholding_tax_code: '00'
                    address: Musterstraße 1
                    city: Berlin
                    zip: '10115'
                    is_active: true
                    supplier_bank_details:
                      - external_id: BANK-001
                        iban: DE89370400440532013000
      responses:
        '201':
          description: Lieferanten erfolgreich erstellt oder aktualisiert
          content:
            application/json:
              schema:
                type: object
                properties:
                  count:
                    type: integer
                    example: 1
        '400':
          description: Ungültiger Anfragekörper oder Validierung fehlgeschlagen
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                  message:
                    type: string
        '401':
          description: Nicht autorisiert - Schlüssel ist mit keinem Kunden verknüpft
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: Unauthorized. Key is not linked to any customer.
        '403':
          description: Verboten - Fehlende Berechtigung
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    example: 'Unauthorized. Missing scope: suppliers:write'
        '500':
          description: Interner Serverfehler
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
      security:
        - ApiKey:
            - suppliers:write
components:
  schemas:
    UpsertSupplierInput:
      type: object
      required:
        - title
        - external_id
      properties:
        title:
          type: string
          description: Lieferantenname
          example: Acme GmbH
        external_id:
          type: string
          description: >-
            Externe Kennung; zusammen mit dem Kunden der Schlüssel für das
            Upsert
          example: SUP-001
        legal_uid:
          type: string
          description: USt-IdNr. oder Steuernummer
          example: DE123456789
        country_code:
          type: string
          description: ISO 3166-1 alpha-2 Ländercode
          example: DE
        withholding_tax_code:
          type: string
          description: Quellensteuercode
          example: '00'
        payment_term_id:
          type: string
          format: uuid
          description: ID der Zahlungsbedingung im comstruct-Mandanten
        default_account_id:
          type: string
          format: uuid
          description: ID des Standardkontos im comstruct-Mandanten
        comment:
          type: string
          description: Freitext-Kommentar
          example: Bevorzugter Kontakt per E-Mail
        address:
          type: string
          description: Straße und Hausnummer
          example: Musterstraße 1
        city:
          type: string
          description: Ort
          example: Berlin
        zip:
          type: string
          description: Postleitzahl
          example: '10115'
        is_active:
          type: boolean
          description: >-
            Ob der Lieferant aktiv ist. Weglassen belässt den gespeicherten
            Status.
          example: true
        supplier_bank_details:
          type: array
          description: Bankverbindungen, zusammengeführt anhand der IBAN
          items:
            $ref: '#/components/schemas/UpsertSupplierBankDetailsInput'
    UpsertSupplierBankDetailsInput:
      type: object
      properties:
        iban:
          type: string
          description: IBAN der Bankverbindung
          example: DE89370400440532013000
        external_id:
          type: string
          description: Externe Kennung der Bankverbindung
          example: BANK-001
  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.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.