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

# Assign supplier to company codes

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

Ersetzt die vollständige Buchungskreis-Zuordnung eines Lieferanten.
Der API-Schlüssel muss mit einem Kunden verknüpft sein, der Lieferant und alle Buchungskreise müssen zu diesem Kunden gehören.

Senden Sie `legalEntityNumbers: []`, um alle Zuordnungen zu entfernen.


## Overview

Use this endpoint to assign a supplier to one or more company codes. The request
always replaces the supplier's full assignment list.

<Info>
  Send an empty array to remove all company-code assignments. The supplier then
  becomes tenant-wide again.
</Info>

## Permissions

| Scope             | Tenant type      |
| ----------------- | ---------------- |
| `suppliers:write` | Customer API key |

The API key must be linked to a customer.

## Headers

| Header         | Required | Description                          |
| -------------- | -------- | ------------------------------------ |
| `x-api-key`    | Yes      | API key with scope `suppliers:write` |
| `Content-Type` | Yes      | `application/json`                   |

## Path parameters

| Parameter | Description                                                          |
| --------- | -------------------------------------------------------------------- |
| `id`      | UUID of the supplier whose company-code assignments will be replaced |

## Request body

| Field                | Required | Description                                             |
| -------------------- | -------- | ------------------------------------------------------- |
| `legalEntityNumbers` | Yes      | Complete list of company-code numbers for this supplier |

## Example

```bash theme={null}
curl -X PUT "https://api.comstruct.com/v1/suppliers/33333333-3333-4333-8333-333333333333/legal-entities" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "legalEntityNumbers": [
      "LE-001",
      "LE-002"
    ]
  }'
```

## Remove all assignments

```bash theme={null}
curl -X PUT "https://api.comstruct.com/v1/suppliers/33333333-3333-4333-8333-333333333333/legal-entities" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "legalEntityNumbers": [] }'
```

## Behavior

* The submitted list replaces all existing company-code assignments for the supplier.
* Duplicate numbers are not allowed.
* The supplier must belong to the customer linked to the API key.
* All company codes must belong to the same customer.

## Response codes

| Code  | Description                                                                         |
| ----- | ----------------------------------------------------------------------------------- |
| `200` | Assignment list replaced successfully                                               |
| `400` | Invalid request, duplicate numbers, or company code does not belong to the customer |
| `401` | Unauthorized — API key is not linked to a customer                                  |
| `403` | Forbidden — missing `suppliers:write` scope                                         |
| `404` | Supplier was not found in the current tenant                                        |
| `500` | Internal server error                                                               |


## OpenAPI

````yaml PUT /suppliers/{id}/legal-entities
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:
  /suppliers/{id}/legal-entities:
    put:
      tags:
        - Suppliers
      summary: Lieferant Buchungskreisen zuordnen
      description: >
        **Erforderliche Berechtigungen:** `suppliers:write`


        Ersetzt die vollständige Buchungskreis-Zuordnung eines Lieferanten.

        Der API-Schlüssel muss mit einem Kunden verknüpft sein, der Lieferant
        und alle Buchungskreise müssen zu diesem Kunden gehören.


        Senden Sie `legalEntityNumbers: []`, um alle Zuordnungen zu entfernen.
      operationId: replaceSupplierLegalEntities
      parameters:
        - name: id
          in: path
          required: true
          description: UUID des Lieferanten
          schema:
            type: string
            format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssignSupplierLegalEntitiesRequest'
            examples:
              assign_two_company_codes:
                summary: Zwei Buchungskreise zuordnen
                value:
                  legalEntityNumbers:
                    - LE-001
                    - LE-002
              remove_all_assignments:
                summary: Alle Zuordnungen entfernen
                value:
                  legalEntityNumbers: []
      responses:
        '200':
          description: Buchungskreis-Zuordnung erfolgreich ersetzt
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AssignSupplierLegalEntitiesResponse'
              examples:
                assigned:
                  summary: Erfolgreich zugeordnet
                  value:
                    supplierId: 33333333-3333-4333-8333-333333333333
                    legalEntityNumbers:
                      - LE-001
                      - LE-002
                removed:
                  summary: Alle Zuordnungen entfernt
                  value:
                    supplierId: 33333333-3333-4333-8333-333333333333
                    legalEntityNumbers: []
        '400':
          description: Ungültige Anfrage oder Buchungskreis gehört nicht zum Kunden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                legal_entity_not_found:
                  summary: Buchungskreis gehört nicht zum Mandanten
                  value:
                    message: 'Legal entities not found for current tenant: LE-002'
        '401':
          description: Nicht autorisiert - Schlüssel ist mit keinem Kunden verknüpft
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Verboten - Fehlende Berechtigung
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                missing_scope:
                  summary: Fehlende Berechtigung
                  value:
                    error: 'Unauthorized. Missing scope: suppliers:write'
        '404':
          description: Lieferant im aktuellen Mandanten nicht gefunden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                supplier_not_found:
                  summary: Lieferant unbekannt
                  value:
                    message: >-
                      Supplier with id 33333333-3333-4333-8333-333333333333 not
                      found
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
        - ApiKey:
            - suppliers:write
components:
  schemas:
    AssignSupplierLegalEntitiesRequest:
      type: object
      required:
        - legalEntityNumbers
      properties:
        legalEntityNumbers:
          type: array
          description: >-
            Vollständige Liste der Buchungskreisnummern für diesen Lieferanten.
            Ein leeres Array entfernt alle Zuordnungen.
          uniqueItems: true
          items:
            type: string
          example:
            - LE-001
            - LE-002
    AssignSupplierLegalEntitiesResponse:
      type: object
      required:
        - supplierId
        - legalEntityNumbers
      properties:
        supplierId:
          type: string
          format: uuid
          description: UUID des Lieferanten
          example: 33333333-3333-4333-8333-333333333333
        legalEntityNumbers:
          type: array
          description: Buchungskreisnummern, die nach dem Replace gespeichert sind
          items:
            type: string
          example:
            - LE-001
            - LE-002
    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
  responses:
    InternalServerError:
      description: Interner Serverfehler
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            server_error:
              summary: Server-Verarbeitungsfehler
              value:
                error: The server was unable to process
            processing_error:
              summary: Verarbeitungsfehler mit Details
              value:
                error: Error processing Purchase Orders
                message: >-
                  Supplier not found. creditor_number does not match an existing
                  supplier.
            invoice_processing_error:
              summary: Rechnungsverarbeitungsfehler
              value:
                success: false
                error: Failed to parse invoice
            supplier_processing_error:
              summary: Lieferantenverarbeitungsfehler
              value:
                message: Error processing supplier data.
  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.

````