{
  "components": {
    "examples": {
      "DiscardDecision": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "decidedByAccountId": "693ce612-51cd-4b82-a9b3-8138851b573e"
        }
      },
      "EmptyCustomerSearch": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "hasMore": false,
          "items": [],
          "limit": 25,
          "mode": "OWN",
          "offset": 0
        }
      },
      "EmptyIdentifyCustomerSearch": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "hasMore": false,
          "items": [],
          "limit": 25,
          "mode": "IDENTIFY",
          "offset": 0
        }
      },
      "EmptyOperationSearch": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "items": []
        }
      },
      "Error610": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "code": "EXTERNAL_REFERENCE_CONFLICT",
          "details": [],
          "message": "Die Auftragsreferenz ist bereits an einen anderen Inhalt gebunden.",
          "requestId": "req-demo-1002"
        }
      },
      "Error612": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "code": "EXTERNAL_REFERENCE_CONFLICT",
          "details": [],
          "message": "Die Auftragsreferenz ist bereits an einen anderen Inhalt gebunden.",
          "requestId": "983b35b0-417d-4c25-b3c9-6544b18685ec"
        }
      },
      "GuideCategories": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "items": [
            {
              "categoryId": "40000000-0000-4000-8000-000000000001",
              "name": "Synthetische Beispielkategorie"
            }
          ]
        }
      },
      "GuideContract": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
          "customerId": "11111111-1111-4111-8111-111111111111",
          "documents": [
            {
              "availability": "AVAILABLE",
              "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
              "documentId": "a8b2d351-71c6-4a85-9b24-2044951c3004",
              "purpose": "CONTRACT",
              "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
            }
          ],
          "productId": "51f866e9-2307-47c6-8de3-e6b1f24f8d31",
          "salesContext": {
            "branchId": "30000000-0000-4000-8000-000000000001",
            "sellerAccountId": "20000000-0000-4000-8000-000000000001"
          }
        }
      },
      "GuideCreateRequest": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "customer": {
            "newCustomer": {
              "address": {
                "city": "Berlin",
                "country": "DE",
                "street": "Beispielstraße 10",
                "zip": "10115"
              },
              "bank": {
                "holder": "Anna Muster",
                "iban": "DE89370400440532013000"
              },
              "email": "anna.muster@example.invalid",
              "externalCustomerNumber": "PARTNER-SYNTHETIC-1001",
              "person": {
                "birthdate": "1985-04-12",
                "firstname": "Anna",
                "idCardNumber": "SYNTHETIC-GUIDE-ID-001",
                "lastname": "Muster",
                "salutationType": "MADAM"
              },
              "phone": "+493000000000"
            }
          },
          "debitDay": 5,
          "durationId": "17ef5d55-617c-429a-b523-637625346856",
          "externalReference": "synthetic-guide-new-001",
          "paymentId": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
          "priceType": "AGB",
          "productId": "51f866e9-2307-47c6-8de3-e6b1f24f8d31",
          "salesContext": {
            "branchId": "30000000-0000-4000-8000-000000000001",
            "sellerAccountId": "20000000-0000-4000-8000-000000000001"
          }
        }
      },
      "GuideOwnSearchRequest": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "filters": {
            "customerNumber": "K12345"
          },
          "limit": 25,
          "mode": "OWN",
          "offset": 0
        }
      },
      "GuideOwnSearchResponse": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "hasMore": false,
          "items": [
            {
              "customerId": "11111111-1111-4111-8111-111111111111",
              "customerNumber": "K12345",
              "firstname": "Anna",
              "lastname": "Muster"
            }
          ],
          "limit": 25,
          "mode": "OWN",
          "offset": 0
        }
      },
      "GuidePendingSignature": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "contentRevisionId": "a8b2d351-71c6-4a85-9b24-2044951c3002",
          "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
          "externalReference": "synthetic-guide-new-001",
          "operationId": "a8b2d351-71c6-4a85-9b24-2044951c3001",
          "salesContext": {
            "branchId": "30000000-0000-4000-8000-000000000001",
            "sellerAccountId": "20000000-0000-4000-8000-000000000001"
          },
          "signature": {
            "contentRevisionId": "a8b2d351-71c6-4a85-9b24-2044951c3002",
            "signatureAttemptId": "a8b2d351-71c6-4a85-9b24-2044951c3003",
            "status": "PENDING"
          },
          "status": "PENDING_SIGNATURE",
          "type": "NEW_CONTRACT"
        }
      },
      "GuideProductConditions": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "conditions": {
            "durationId": "17ef5d55-617c-429a-b523-637625346856",
            "paymentId": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
            "priceType": "AGB",
            "regularPayment": {
              "amount": "10.50",
              "basis": "PAYMENT_INTERVAL",
              "currency": "EUR",
              "taxBasis": "GROSS"
            },
            "setupCharge": {
              "amount": "19.95",
              "basis": "ONE_OFF",
              "currency": "EUR",
              "taxBasis": "GROSS"
            }
          },
          "productId": "51f866e9-2307-47c6-8de3-e6b1f24f8d31"
        }
      },
      "GuideProductDetails": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "addonProduct": false,
          "categoryId": "40000000-0000-4000-8000-000000000001",
          "customerRequirements": {
            "idCardNumberRequired": true
          },
          "durations": [
            {
              "durationId": "17ef5d55-617c-429a-b523-637625346856",
              "durationMonths": 24
            }
          ],
          "name": "Synthetisches Beispielprodukt",
          "payments": [
            {
              "paymentId": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
              "paymentType": "MONTHLY"
            }
          ],
          "priceTypes": [
            "AGB"
          ],
          "productId": "51f866e9-2307-47c6-8de3-e6b1f24f8d31",
          "promotions": [],
          "serialNumbers": {
            "enabled": false
          }
        }
      },
      "GuideProducts": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "items": [
            {
              "categoryId": "40000000-0000-4000-8000-000000000001",
              "name": "Synthetisches Beispielprodukt",
              "productId": "51f866e9-2307-47c6-8de3-e6b1f24f8d31"
            }
          ]
        }
      },
      "GuideReferenceSearch": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "items": [
            {
              "contentRevisionId": "a8b2d351-71c6-4a85-9b24-2044951c3002",
              "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
              "externalReference": "synthetic-guide-new-001",
              "operationId": "a8b2d351-71c6-4a85-9b24-2044951c3001",
              "salesContext": {
                "branchId": "30000000-0000-4000-8000-000000000001",
                "sellerAccountId": "20000000-0000-4000-8000-000000000001"
              },
              "signature": {
                "contentRevisionId": "a8b2d351-71c6-4a85-9b24-2044951c3002",
                "signatureAttemptId": "a8b2d351-71c6-4a85-9b24-2044951c3003",
                "status": "PENDING"
              },
              "status": "PENDING_SIGNATURE",
              "type": "NEW_CONTRACT"
            }
          ]
        }
      },
      "GuideSalesContext": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "branches": [
            {
              "branchId": "30000000-0000-4000-8000-000000000001",
              "displayName": "Testfiliale Nord"
            }
          ],
          "sellerAccounts": [
            {
              "displayName": "Ada Beispiel",
              "sellerAccountId": "20000000-0000-4000-8000-000000000001"
            }
          ]
        }
      },
      "IdentifyCustomerSearchPage": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "hasMore": false,
          "items": [
            {
              "city": "Musterstadt",
              "company": "Beispielfirma",
              "customerId": "33333333-3333-4333-8333-333333333333",
              "firstname": "Clara",
              "lastname": "Muster",
              "zip": "12345"
            },
            {
              "city": "Musterstadt",
              "customerId": "44444444-4444-4444-8444-444444444444",
              "firstname": "David",
              "lastname": "Muster",
              "zip": "12345"
            }
          ],
          "limit": 25,
          "mode": "IDENTIFY",
          "offset": 0
        }
      },
      "IdentifySearch": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "filters": {
            "birthdate": "1985-04-12",
            "idCardNumber": "<Ausweisnummer>",
            "lastname": "Muster"
          },
          "mode": "IDENTIFY"
        }
      },
      "InvalidCustomerAddress": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "code": "CUSTOMER_ADDRESS_NOT_VERIFIED",
          "details": [
            {
              "code": "CUSTOMER_ADDRESS_NOT_VERIFIED",
              "field": "customer.newCustomer.address",
              "message": "Die Kombination aus Postleitzahl und Ort konnte nicht bestätigt werden. Bitte prüfen Sie beide Angaben."
            }
          ],
          "message": "Die Kombination aus Postleitzahl und Ort konnte nicht bestätigt werden. Bitte prüfen Sie beide Angaben.",
          "requestId": "synthetic-request-rejected-001"
        }
      },
      "InvalidCustomerIban": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "code": "CUSTOMER_IBAN_INVALID",
          "details": [
            {
              "code": "CUSTOMER_IBAN_INVALID",
              "field": "customer.newCustomer.bank.iban",
              "message": "Die IBAN ist ungültig. Bitte prüfen Sie die Bankverbindung."
            }
          ],
          "message": "Die IBAN ist ungültig. Bitte prüfen Sie die Bankverbindung.",
          "requestId": "synthetic-request-rejected-001"
        }
      },
      "MinimalExistingCustomerA": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "customer": {
            "customerId": "e3cf4a5e-12e6-4e71-8d8b-ab0ef3f0f9ec"
          },
          "debitDay": 5,
          "durationId": "17ef5d55-617c-429a-b523-637625346856",
          "externalReference": "partner-bestand-A-1006",
          "paymentId": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
          "priceType": "AGB",
          "productId": "51f866e9-2307-47c6-8de3-e6b1f24f8d31",
          "salesContext": {
            "branchId": "591c4a2f-4a3a-4892-985b-16a9e5159a85",
            "sellerAccountId": "9c5bf203-1c42-4c69-9e7c-39c94ea0a8d8"
          }
        }
      },
      "MinimalNewContractA": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "customer": {
            "newCustomer": {
              "address": {
                "city": "Musterstadt",
                "country": "DE",
                "street": "Musterstraße 1",
                "zip": "12345"
              },
              "bank": {
                "iban": "<IBAN>"
              },
              "email": "erika@example.com",
              "externalCustomerNumber": "PARTNER-SYNTHETIC-1001",
              "person": {
                "birthdate": "1985-04-12",
                "firstname": "Erika",
                "lastname": "Muster",
                "salutationType": "MADAM"
              },
              "phone": "<Telefonkontakt>"
            }
          },
          "debitDay": 5,
          "durationId": "17ef5d55-617c-429a-b523-637625346856",
          "externalReference": "partner-auftrag-1001",
          "paymentId": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
          "priceType": "AGB",
          "productId": "51f866e9-2307-47c6-8de3-e6b1f24f8d31",
          "salesContext": {
            "branchId": "591c4a2f-4a3a-4892-985b-16a9e5159a85",
            "sellerAccountId": "9c5bf203-1c42-4c69-9e7c-39c94ea0a8d8"
          }
        }
      },
      "MissingWithdrawalSelection": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "code": "WITHDRAWAL_SELECTION_REQUIRED",
          "details": [
            {
              "code": "WITHDRAWAL_SELECTION_REQUIRED",
              "field": "withdrawalRightSelected",
              "message": "Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird."
            }
          ],
          "message": "Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.",
          "requestId": "synthetic-request-rejected-001"
        }
      },
      "OwnCustomerSearchPage": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "hasMore": false,
          "items": [
            {
              "city": "Musterstadt",
              "company": "Musterfirma",
              "customerId": "11111111-1111-4111-8111-111111111111",
              "customerNumber": "K12345",
              "email": "anna.muster@example.com",
              "externalCustomerNumber": "BEISPIEL-A",
              "firstname": "Anna",
              "lastname": "Muster",
              "zip": "12345"
            },
            {
              "city": "Musterstadt",
              "customerId": "22222222-2222-4222-8222-222222222222",
              "customerNumber": "K123456",
              "email": "bert.muster@example.com",
              "firstname": "Bert",
              "lastname": "Muster",
              "zip": "12345"
            }
          ],
          "limit": 25,
          "mode": "OWN",
          "offset": 0
        }
      },
      "OwnSearch": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "filters": {
            "city": "Musterstadt",
            "lastname": "Muster"
          },
          "mode": "OWN"
        }
      },
      "PartnerContractOperationUpdated": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "contractId": "50000000-0000-4000-8000-000000000001",
          "documents": [
            {
              "availability": "AVAILABLE",
              "contractId": "50000000-0000-4000-8000-000000000001",
              "documentId": "80000000-0000-4000-8000-000000000001",
              "purpose": "CONTRACT",
              "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
            }
          ],
          "eventId": "90000000-0000-4000-8000-000000000001",
          "externalReference": "dev-callback-example",
          "occurredAt": "2026-10-23T10:00:00Z",
          "operationId": "60000000-0000-4000-8000-000000000001",
          "status": "PROCESSING",
          "type": "contract.operation.updated"
        }
      },
      "PartnerContractUpdated": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "contractId": "50000000-0000-4000-8000-000000000001",
          "contractStatus": "SIGNED",
          "documents": [
            {
              "availability": "AVAILABLE",
              "contractId": "50000000-0000-4000-8000-000000000001",
              "documentId": "80000000-0000-4000-8000-000000000001",
              "purpose": "CONTRACT",
              "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
            }
          ],
          "eventId": "90000000-0000-4000-8000-000000000001",
          "externalReference": "dev-callback-example",
          "occurredAt": "2026-10-23T10:00:00Z",
          "operationId": "60000000-0000-4000-8000-000000000001",
          "type": "contract.updated"
        }
      },
      "ReactivatedContractAction": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "affectedContractIds": [
            "73530a36-0c02-4a38-9292-7a2b185cc9d0"
          ],
          "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
          "contractStatus": "SIGNED",
          "customerId": "b17bd08d-41ca-4c01-a674-96004c10d100",
          "localAppliedAt": "2026-10-27T12:00:01Z",
          "operationId": "a8b2d351-71c6-4a85-9b24-2044951c3010",
          "previousContractStatus": "RESIGNED",
          "requestedAt": "2026-10-27T12:00:00Z",
          "status": "COMPLETED",
          "type": "REACTIVATE_CONTRACT"
        }
      },
      "RejectedPreparation": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
          "externalReference": "synthetic-guide-new-001",
          "operationId": "a8b2d351-71c6-4a85-9b24-2044951c3001",
          "processingIssue": {
            "code": "WITHDRAWAL_SELECTION_REQUIRED",
            "details": [
              {
                "code": "WITHDRAWAL_SELECTION_REQUIRED",
                "field": "withdrawalRightSelected",
                "message": "Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird."
              }
            ],
            "message": "Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird."
          },
          "status": "REJECTED",
          "type": "NEW_CONTRACT"
        }
      },
      "RiskDecision": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "decidedByAccountId": "693ce612-51cd-4b82-a9b3-8138851b573e",
          "riskAccepted": true
        }
      },
      "SingleContractCompleted": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "contentRevisionId": "60000000-0000-4000-8000-000000000002",
          "contractId": "50000000-0000-4000-8000-000000000001",
          "externalReference": "synthetic-single-new-001",
          "localAppliedAt": "2026-10-23T12:00:00Z",
          "operationId": "60000000-0000-4000-8000-000000000001",
          "signature": {
            "confirmedAt": "2026-10-23T11:59:00Z",
            "contentRevisionId": "60000000-0000-4000-8000-000000000002",
            "signatureAttemptId": "60000000-0000-4000-8000-000000000003",
            "status": "SIGNED"
          },
          "status": "COMPLETED",
          "type": "NEW_CONTRACT"
        }
      },
      "SingleContractDiscardPending": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "contractId": "50000000-0000-4000-8000-000000000001",
          "externalReference": "synthetic-single-new-001",
          "operationId": "60000000-0000-4000-8000-000000000001",
          "status": "DISCARD_PENDING",
          "type": "NEW_CONTRACT"
        }
      },
      "SingleContractDiscarded": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "contractId": "50000000-0000-4000-8000-000000000001",
          "externalReference": "synthetic-single-new-001",
          "operationId": "60000000-0000-4000-8000-000000000001",
          "status": "DISCARDED",
          "type": "NEW_CONTRACT"
        }
      },
      "StoredContractRead": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
          "contractStatus": "SIGNED",
          "customerId": "11111111-1111-4111-8111-111111111111",
          "documents": [
            {
              "availability": "AVAILABLE",
              "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
              "documentId": "66829786-f007-3fd5-bbb3-a901359cbd3c",
              "purpose": "CONTRACT",
              "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
            }
          ],
          "productId": "51f866e9-2307-47c6-8de3-e6b1f24f8d31",
          "salesContext": {
            "sellerAccountId": "20000000-0000-4000-8000-000000000001"
          }
        }
      },
      "TerminatedContractAction": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "affectedContractIds": [
            "73530a36-0c02-4a38-9292-7a2b185cc9d0"
          ],
          "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
          "contractStatus": "RESIGNED",
          "customerId": "b17bd08d-41ca-4c01-a674-96004c10d100",
          "endDate": "2027-11-01",
          "localAppliedAt": "2026-10-27T12:00:01Z",
          "operationId": "a8b2d351-71c6-4a85-9b24-2044951c3010",
          "previousContractStatus": "SIGNED",
          "requestedAt": "2026-10-27T12:00:00Z",
          "status": "COMPLETED",
          "type": "TERMINATE_CONTRACT"
        }
      },
      "WithdrawnContractAction": {
        "summary": "Synthetisches Beispiel; Ressourcen bewusst auswählen.",
        "value": {
          "affectedContractIds": [
            "73530a36-0c02-4a38-9292-7a2b185cc9d0"
          ],
          "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
          "contractStatus": "CONTRADICTED",
          "customerId": "b17bd08d-41ca-4c01-a674-96004c10d100",
          "localAppliedAt": "2026-10-27T12:00:01Z",
          "operationId": "a8b2d351-71c6-4a85-9b24-2044951c3010",
          "previousContractStatus": "SIGNED",
          "requestedAt": "2026-10-27T12:00:00Z",
          "status": "COMPLETED",
          "type": "WITHDRAW_CONTRACT"
        }
      }
    },
    "headers": {
      "BearerChallenge": {
        "description": "Hinweis auf die notwendige Bearer-Authentifizierung bei einer 401-Antwort.",
        "examples": {
          "invalidToken": {
            "value": "Bearer error=\"invalid_token\""
          },
          "missingCredentials": {
            "value": "Bearer"
          }
        },
        "required": true,
        "schema": {
          "minLength": 1,
          "type": "string"
        },
        "x-partner-doc": {
          "condition": "Den Zugang über den eingerichteten Identitätsdienst erneuern; keine API-Tokenroute aus diesem Header ableiten.",
          "description": "Hinweis auf die notwendige Bearer-Authentifizierung bei einer 401-Antwort.",
          "example": "Bearer error=\"invalid_token\"",
          "omission": "Auslassen ist hier nicht als Verzicht auf Authentifizierung festgelegt.",
          "source": "Aus dem Antwortheader WWW-Authenticate."
        }
      },
      "ContractLocation": {
        "description": "Adresse des zugehörigen Vertrags.",
        "example": "/v2/contracts/73530a36-0c02-4a38-9292-7a2b185cc9d0",
        "required": true,
        "schema": {
          "format": "uri-reference",
          "type": "string"
        },
        "x-partner-doc": {
          "condition": "Beim Zusammensetzen mit dem bereitgestellten Ursprung die Basis /v2 nur einmal verwenden.",
          "description": "Adresse des zugehörigen Vertrags.",
          "example": "/v2/contracts/73530a36-0c02-4a38-9292-7a2b185cc9d0",
          "omission": "Auslassen ist nicht als anderer Vertragsort festgelegt.",
          "source": "Aus dem Location-Header der entsprechenden erfolgreichen Antwort."
        }
      },
      "CorrelationId": {
        "description": "Tatsächlich verwendete Korrelationskennung des Aufrufs. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/RequestId"
        },
        "x-partner-doc": {
          "description": "Tatsächlich verwendete Korrelationskennung des Aufrufs. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).",
          "example": "synthetic-correlation-001",
          "omission": "Der beschriebene API-Aufruf liefert die tatsächlich verwendete Korrelationskennung. Eine fehlende Kennung nicht aus Kundendaten ergänzen.",
          "source": "Aus dem Antwortheader X-Correlation-Id übernehmen."
        }
      },
      "OperationLocation": {
        "description": "Adresse des zugehörigen Vertragsvorgangs.",
        "example": "/v2/contract-operations/40b02f19-9f2a-47d2-8a10-d77f2f2ca3ce",
        "required": true,
        "schema": {
          "format": "uri-reference",
          "type": "string"
        },
        "x-partner-doc": {
          "condition": "Die Adresse ist kein zusätzlicher Abschluss- oder Unterzeichnungsaufruf.",
          "description": "Adresse des zugehörigen Vertragsvorgangs.",
          "example": "/v2/contract-operations/a8b2d351-71c6-4a85-9b24-2044951c3001",
          "omission": "Auslassen ist nicht als anderer Vorgangsort festgelegt.",
          "source": "Aus dem Location-Header der entsprechenden erfolgreichen Antwort."
        }
      },
      "RequestId": {
        "description": "Supportkennung dieses HTTP-Aufrufs. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/RequestId"
        },
        "x-partner-doc": {
          "condition": "Bei Replay gehört die Kennung zum aktuellen Aufruf, nicht zur früheren Annahmeantwort.",
          "description": "Supportkennung dieses HTTP-Aufrufs. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).",
          "example": "synthetic-request-001",
          "omission": "Der beschriebene API-Aufruf liefert diese Supportkennung auch bei Fehlern und Wiederholungen; eine fehlende Kennung nicht durch Vertrags- oder Geschäftsreferenzen ersetzen.",
          "source": "Aus dem Antwortheader X-Request-Id; in Fehlerantworten auch requestId."
        }
      },
      "RetryAfter": {
        "description": "Mindestwartezeit in ganzen Sekunden vor einem erneuten Aufruf nach technischer Überlast oder vorübergehend ausgefallenem Zugriffsschutz.",
        "schema": {
          "maxLength": 100,
          "type": "string"
        },
        "x-partner-doc": {
          "description": "Mindestwartezeit in ganzen Sekunden vor einem erneuten Aufruf nach technischer Überlast oder vorübergehend ausgefallenem Zugriffsschutz.",
          "example": "1",
          "omission": "Bei den dokumentierten Schutzantworten 429 und PROTECTION_UNAVAILABLE/503 wird dieser Header mitgeliefert.",
          "source": "Aus dem Antwortheader Retry-After."
        }
      },
      "TraceId": {
        "description": "Zusätzliche Tracekennung, soweit eine tatsächliche Diagnosezuordnung besteht. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).",
        "required": false,
        "schema": {
          "$ref": "#/components/schemas/TraceId"
        },
        "x-partner-doc": {
          "condition": "Die Antwort gibt diesen Header nur bei tatsächlich vorhandenem gültigem Tracekontext aus.",
          "description": "Zusätzliche Tracekennung, soweit eine tatsächliche Diagnosezuordnung besteht. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).",
          "example": "4bf92f3577b34da6a3ce929d0e0e4736",
          "omission": "Es ist keine Tracekennung mitgeteilt; keine eigene aus requestId oder Vertrag erzeugen.",
          "source": "Aus dem Antwortheader X-Trace-Id übernehmen."
        }
      }
    },
    "parameters": {
      "ExternalReferenceQuery": {
        "description": "Geschäftsreferenz, über die Sie Ihren eigenen Vorgang wiederfinden.",
        "in": "query",
        "name": "externalReference",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/ExternalReference"
        },
        "x-partner-doc": {
          "condition": "Keine neue Referenz erzeugen, um einen unklaren bisherigen Einreichungsausgang zu umgehen.",
          "description": "Geschäftsreferenz, über die Sie Ihren eigenen Vorgang wiederfinden.",
          "example": "synthetic-guide-new-001",
          "omission": "Die unveränderte Geschäftsreferenz muss für diesen Wiederfindeaufruf als externalReference übermittelt werden; ohne sie ist der Aufruf unvollständig.",
          "source": "Die bei der Einreichung verwendete externalReference unverändert übernehmen."
        }
      },
      "IdempotencyKey": {
        "description": "Ihre Kennung für dieselbe fachliche Einreichung oder Entscheidung. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).",
        "in": "header",
        "name": "Idempotency-Key",
        "required": true,
        "schema": {
          "maxLength": 200,
          "minLength": 1,
          "pattern": "^[!-~]+$",
          "type": "string"
        },
        "x-partner-doc": {
          "condition": "Bei identischer Wiederholung dieselbe Kennung und denselben Inhalt senden; geänderter Inhalt kann einen 409-Konflikt auslösen.",
          "description": "Ihre Kennung für dieselbe fachliche Einreichung oder Entscheidung. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).",
          "example": "synthetic-guide-create-001",
          "omission": "Für die beschriebenen fachlichen Schreibaufrufe verpflichtend; ohne Idempotency-Key wird der Aufruf als ungültig abgewiesen. POST /customers/search benötigt ihn nicht.",
          "source": "Einmal je beabsichtigter Einreichung beziehungsweise Entscheidung im Partnersystem festlegen."
        }
      },
      "PartnerCorrelation": {
        "description": "Optionale Korrelationskennung zur Zuordnung zusammengehöriger Aufrufe. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).",
        "in": "header",
        "name": "X-Correlation-Id",
        "required": false,
        "schema": {
          "type": "string"
        },
        "x-partner-doc": {
          "condition": "Keine Token, Kundensuchwerte oder Berechtigungsbehauptungen in diese Kennung aufnehmen.",
          "description": "Optionale Korrelationskennung zur Zuordnung zusammengehöriger Aufrufe. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).",
          "example": "synthetic-correlation-001",
          "omission": "Fehlt X-Correlation-Id oder ist die Angabe ungültig, verwendet SmartPay eine neue Korrelationskennung. Den tatsächlich ausgegebenen Antwortwert auswerten.",
          "source": "Eine gültige Diagnosekennung des Partnersystems verwenden."
        }
      },
      "TraceParent": {
        "description": "Optionale W3C-Tracekontextangabe für die Diagnose. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).",
        "in": "header",
        "name": "traceparent",
        "required": false,
        "schema": {
          "type": "string"
        },
        "x-partner-doc": {
          "condition": "Die Angabe erteilt keine Berechtigung und garantiert keinen Diagnoseexport.",
          "description": "Optionale W3C-Tracekontextangabe für die Diagnose. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).",
          "example": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01",
          "omission": "Es wird kein eigener Tracekontext übermittelt; daraus keine Trace-Id-Ausgabe voraussetzen.",
          "source": "Nur einen tatsächlich vorhandenen gültigen Tracekontext des aufrufenden Systems übernehmen."
        }
      },
      "categoryId": {
        "description": "Kennung der bewusst gewählten Produktkategorie.",
        "in": "path",
        "name": "categoryId",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/ResourceId"
        },
        "x-partner-doc": {
          "description": "Kennung der bewusst gewählten Produktkategorie.",
          "example": "40000000-0000-4000-8000-000000000001",
          "omission": "Die Kategoriekennung muss im Ressourcenpfad stehen; ohne sie ist dieser Aufruf unvollständig.",
          "source": "Aus GET /categories übernehmen."
        }
      },
      "contractId": {
        "description": "Kennung des konkreten Vertrags, den Sie berechtigt lesen möchten.",
        "in": "path",
        "name": "contractId",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/ResourceId"
        },
        "x-partner-doc": {
          "condition": "Die Berechtigung wird für genau diesen Vertrag geprüft.",
          "description": "Kennung des konkreten Vertrags, den Sie berechtigt lesen möchten.",
          "example": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
          "omission": "Die Vertragskennung muss im Ressourcenpfad stehen; Vertragsnummer und Kundenkennung ersetzen sie nicht.",
          "source": "Aus der Einreichungs- oder Vorgangsantwort übernehmen."
        }
      },
      "documentId": {
        "description": "Kennung genau der gewünschten PDF-Fassung.",
        "in": "path",
        "name": "documentId",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/ResourceId"
        },
        "x-partner-doc": {
          "condition": "Mit dem zugehörigen Vertrag verwenden; geänderte Bytes haben eine andere Kennung.",
          "description": "Kennung genau der gewünschten PDF-Fassung.",
          "example": "a8b2d351-71c6-4a85-9b24-2044951c3004",
          "omission": "Die Dokumentkennung muss im Ressourcenpfad stehen; ohne sie wird keine neueste oder beliebige PDF-Fassung ausgewählt.",
          "source": "Aus den für den betreffenden Vertrag beziehungsweise Vorgang ausgegebenen Dokumentmetadaten übernehmen."
        }
      },
      "operationId": {
        "description": "Kennung des konkreten Vertragsvorgangs.",
        "in": "path",
        "name": "operationId",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/ResourceId"
        },
        "x-partner-doc": {
          "condition": "Nur eigene berechtigt sichtbare Vorgänge lesen oder darüber zulässige Entscheidungen treffen.",
          "description": "Kennung des konkreten Vertragsvorgangs.",
          "example": "a8b2d351-71c6-4a85-9b24-2044951c3001",
          "omission": "Die Vorgangskennung muss im Ressourcenpfad stehen; Geschäftsreferenz und Vertragsnummer ersetzen sie nicht.",
          "source": "Aus der Einreichungsantwort oder dem Wiederfinden über externalReference übernehmen."
        }
      },
      "productId": {
        "description": "Kennung des bewusst ausgewählten Produkts.",
        "in": "path",
        "name": "productId",
        "required": true,
        "schema": {
          "$ref": "#/components/schemas/ResourceId"
        },
        "x-partner-doc": {
          "condition": "Die Listung allein bestätigt noch keine zulässige klassische Einzelvertragsbestellung.",
          "description": "Kennung des bewusst ausgewählten Produkts.",
          "example": "51f866e9-2307-47c6-8de3-e6b1f24f8d31",
          "omission": "Die Produktkennung muss im Ressourcenpfad stehen; ohne sie ist dieser Aufruf unvollständig.",
          "source": "Aus der berechtigten Produktliste übernehmen."
        }
      }
    },
    "responses": {
      "AcceptedDiscard": {
        "content": {
          "application/json": {
            "examples": {
              "singleContractDiscardPending": {
                "$ref": "#/components/examples/SingleContractDiscardPending"
              }
            },
            "schema": {
              "$ref": "#/components/schemas/ContractOperation"
            }
          }
        },
        "description": "Entscheidung dauerhaft angenommen, Verwerfen noch nicht bestätigt.",
        "headers": {
          "Location": {
            "$ref": "#/components/headers/OperationLocation"
          },
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "BadGateway": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Ungültige/fehlgeschlagene interne Antwort; keine Fachablehnung daraus ableiten.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "CreatedContract": {
        "content": {
          "application/json": {
            "examples": {
              "guide": {
                "$ref": "#/components/examples/GuidePendingSignature"
              }
            },
            "schema": {
              "$ref": "#/components/schemas/ContractOperation"
            }
          }
        },
        "description": "Vertrag dauerhaft angelegt; aktuelle Signatur/Fachfortsetzung kann ausstehen.",
        "headers": {
          "Location": {
            "$ref": "#/components/headers/ContractLocation"
          },
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "DiscardedOperation": {
        "content": {
          "application/json": {
            "examples": {
              "singleContractDiscarded": {
                "$ref": "#/components/examples/SingleContractDiscarded"
              }
            },
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ContractOperation"
                },
                {
                  "properties": {
                    "status": {
                      "const": "DISCARDED"
                    }
                  },
                  "required": [
                    "status"
                  ],
                  "type": "object"
                }
              ]
            }
          }
        },
        "description": "Verwerfen bestätigt: DISCARDED.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "Document": {
        "content": {
          "application/pdf": {
            "schema": {
              "format": "binary",
              "type": "string"
            }
          }
        },
        "description": "Unveränderte gespeicherte application/pdf-Bytes.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "ExistingOperation": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ContractOperation"
            }
          }
        },
        "description": "Vorhandener eigener Vorgang; keine zweite Anlage.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "GatewayTimeout": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Interne Antwortfrist überschritten; kein Nachweis der Nichtausführung.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "InvalidRequest": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Ungültige Eingabe; code, message und gegebenenfalls details auswerten. [Ablehnung der Vertragsvorbereitung](#description/ablehnung-der-vertragsvorbereitung)",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "OtherError": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Sichere Fehlerhülle mit code, message und requestId.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "PartnerConflict": {
        "content": {
          "application/json": {
            "examples": {
              "diagnosis": {
                "$ref": "#/components/examples/Error610"
              },
              "traceDiagnosis": {
                "$ref": "#/components/examples/Error612"
              }
            },
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Idempotenz-/Referenz-/Zustandskonflikt; vorhandene Fehlerkennung und aktuellen Status beachten.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "PartnerForbidden": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Keine aktuelle Zugangs-, Aktions- oder Ressourcenberechtigung.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "PartnerInternalError": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Technischer Fehler mit aktueller Supportkennung; kein Beweis der Nichtausführung.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "PartnerNotFound": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Ressource oder konkrete sichtbare Dokumentfassung nicht gefunden.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "PayloadTooLarge": {
        "content": {
          "application/json": {
            "example": {
              "code": "BADREQUEST",
              "details": [],
              "message": "Malformed/unknown/duplicate query or body, or validation failure",
              "requestId": "synthetic-request"
            },
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Der Requestkörper überschreitet die dokumentierte Grenze; der Aufruf wird vor der Fachverarbeitung abgewiesen.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          }
        }
      },
      "RequestHeadersTooLarge": {
        "content": {
          "application/json": {
            "example": {
              "code": "BADREQUEST",
              "details": [],
              "message": "Malformed/unknown/duplicate query or body, or validation failure",
              "requestId": "synthetic-request"
            },
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Die HTTP-Header überschreiten zusammen 16384 Bytes; der Aufruf wird abgewiesen.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          }
        }
      },
      "SavedRiskDecision": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ContractOperation"
            }
          }
        },
        "description": "Tatsächlich erreichter Zustand nach der bewussten Entscheidung.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "TooManyRequests": {
        "content": {
          "application/json": {
            "example": {
              "code": "TOOMANYREQUESTS",
              "details": [],
              "message": "Technical request rate or concurrency budget exhausted; not temporary dependency unavailability",
              "requestId": "synthetic-request"
            },
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Zugangs-/Mandantenbudget oder gleichzeitige Aufrufe überschritten. Retry-After abwarten; bei Vertragsaktionen denselben Idempotency-Key und Inhalt erhalten.",
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          },
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          }
        }
      },
      "Unauthenticated": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Fehlende/ungültige Authentifizierung; WWW-Authenticate ist erforderlich.",
        "headers": {
          "WWW-Authenticate": {
            "$ref": "#/components/headers/BearerChallenge"
          },
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      },
      "Unavailable": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiErrorEnvelope"
            }
          }
        },
        "description": "Dienst/Schlüssel/Speicher vorübergehend nicht verfügbar; tatsächliche Fehlerkennung beachten.",
        "headers": {
          "X-Correlation-Id": {
            "$ref": "#/components/headers/CorrelationId"
          },
          "X-Request-Id": {
            "$ref": "#/components/headers/RequestId"
          },
          "X-Trace-Id": {
            "$ref": "#/components/headers/TraceId"
          }
        }
      }
    },
    "schemas": {
      "AddressInput": {
        "description": "Anschrift des Neukunden mit kombinierter Straße und Hausnummer, Postleitzahl, Ort und Land. Länder- und Ortsangaben müssen im Anlageweg zusammenpassen.",
        "properties": {
          "city": {
            "description": "Ort der Anschrift.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Bei deutscher Anschrift müssen Ort und Postleitzahl zu einer im Anlageweg vorhandenen Zuordnung passen.",
              "description": "Ort der Anschrift.",
              "example": "Berlin",
              "omission": "Bei customer.newCustomer.address erforderlich; fehlt city, wird die Neukundeneinreichung als ungültig abgewiesen.",
              "source": "Aus der tatsächlichen Anschrift des Neukunden."
            }
          },
          "country": {
            "description": "Länderschlüssel der Kundenanschrift aus der im Anlageweg unterstützten Länderauswahl.",
            "examples": [
              "DE"
            ],
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Im aktuellen Anlageweg werden DE, AT, CH, FR, NL und CZ unterstützt. Bei deutscher Anschrift müssen Ort und Postleitzahl zusammenpassen; bei ausländischer Anschrift ist zusätzlich eine USt-ID nötig.",
              "description": "Länderschlüssel der Kundenanschrift aus der im Anlageweg unterstützten Länderauswahl.",
              "example": "DE",
              "omission": "Bei customer.newCustomer.address erforderlich; fehlt country, wird die Neukundeneinreichung als ungültig abgewiesen.",
              "source": "Aus der tatsächlichen Anschrift des Neukunden."
            }
          },
          "street": {
            "description": "Straße und Hausnummer als gemeinsame Anschriftszeile.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "description": "Straße und Hausnummer als gemeinsame Anschriftszeile.",
              "example": "Beispielstraße 10",
              "omission": "Bei customer.newCustomer.address erforderlich; fehlt street, wird die Neukundeneinreichung als ungültig abgewiesen.",
              "source": "Aus der tatsächlichen Anschrift des Neukunden."
            }
          },
          "zip": {
            "description": "Postleitzahl der Anschrift.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Bei deutscher Anschrift müssen Ort und Postleitzahl zu einer im Anlageweg vorhandenen Zuordnung passen.",
              "description": "Postleitzahl der Anschrift.",
              "example": "10115",
              "omission": "Bei customer.newCustomer.address erforderlich; fehlt zip, wird die Neukundeneinreichung als ungültig abgewiesen.",
              "source": "Aus der tatsächlichen Anschrift des Neukunden."
            }
          }
        },
        "required": [
          "street",
          "zip",
          "city",
          "country"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Anschrift des Neukunden mit kombinierter Straße und Hausnummer, Postleitzahl, Ort und Land. Länder- und Ortsangaben müssen im Anlageweg zusammenpassen."
        }
      },
      "ApiErrorEnvelope": {
        "additionalProperties": true,
        "description": "Gemeinsame Fehlerantwort mit maschinenlesbarer Fehlerkennung, sicherer Erläuterung und einer Kennung für Supportanfragen.",
        "properties": {
          "code": {
            "description": "Maschinenlesbare Fehler- oder Hinderungskennung für die gezielte Behandlung des gemeldeten Falls.",
            "maxLength": 100,
            "pattern": "^[A-Za-z0-9._:-]{1,100}$",
            "type": "string",
            "x-partner-doc": {
              "description": "Maschinenlesbare Fehler- oder Hinderungskennung für die gezielte Behandlung des gemeldeten Falls.",
              "example": "INVALID_REQUEST",
              "omission": "code gehört zu der beschriebenen Fehlerantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus der aktuellen Fehlerantwort beziehungsweise dem Hinderungsgrund des Vorgangs."
            }
          },
          "details": {
            "description": "Zusätzliche sichere Feldhinweise. Bei bekannten Ablehnungen der Vertragsvorbereitung enthält die Liste höchstens einen Hinweis mit öffentlichem Feldpfad, Code und Korrekturtext. Ohne sicher benennbares Feld bleibt sie leer.",
            "items": {
              "$ref": "#/components/schemas/ErrorDetail"
            },
            "maxItems": 100,
            "type": "array",
            "x-partner-doc": {
              "description": "Zusätzliche sichere Feldhinweise. Bei bekannten Ablehnungen der Vertragsvorbereitung enthält die Liste höchstens einen Hinweis mit öffentlichem Feldpfad, Code und Korrekturtext. Ohne sicher benennbares Feld bleibt sie leer.",
              "example": [
                {
                  "code": "WITHDRAWAL_SELECTION_REQUIRED",
                  "field": "withdrawalRightSelected",
                  "message": "Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird."
                }
              ],
              "omission": "details ist eine Liste; ohne zusätzliche Feldhinweise wird eine leere Liste geliefert.",
              "source": "Aus der aktuellen Fehlerantwort."
            }
          },
          "message": {
            "description": "Lesbare Erläuterung des gemeldeten Fehlers oder Hinderungsgrunds.",
            "maxLength": 500,
            "type": "string",
            "x-partner-doc": {
              "description": "Lesbare Erläuterung des gemeldeten Fehlers oder Hinderungsgrunds.",
              "example": "Die Eingabe konnte nicht verarbeitet werden.",
              "omission": "message gehört zu der beschriebenen Fehlerantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus der aktuellen Fehlerantwort beziehungsweise dem Hinderungsgrund des Vorgangs."
            }
          },
          "requestId": {
            "$ref": "#/components/schemas/RequestId",
            "description": "Supportkennung des aktuellen HTTP-Aufrufs; sie stimmt mit dem Antwortheader X-Request-Id überein.",
            "x-partner-doc": {
              "description": "Supportkennung des aktuellen HTTP-Aufrufs; sie stimmt mit dem Antwortheader X-Request-Id überein.",
              "example": "synthetic-request-001",
              "omission": "requestId gehört zu der beschriebenen Fehlerantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus der aktuellen Fehlerantwort beziehungsweise dem Hinderungsgrund des Vorgangs."
            }
          }
        },
        "required": [
          "code",
          "message",
          "requestId",
          "details"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Gemeinsame Fehlerantwort mit maschinenlesbarer Fehlerkennung, sicherer Erläuterung und einer Kennung für Supportanfragen.",
          "preparationErrors": [
            {
              "code": "INVALID_REQUEST",
              "message": "Die Vertragsanfrage ist ungültig. Bitte prüfen Sie Format und Angaben."
            },
            {
              "code": "REQUIRED_FIELD_MISSING",
              "message": "Eine für den Vertrag erforderliche Angabe fehlt."
            },
            {
              "code": "INVALID_FIELD_VALUE",
              "message": "Eine Vertragsangabe ist ungültig."
            },
            {
              "code": "WITHDRAWAL_SELECTION_REQUIRED",
              "message": "Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird."
            },
            {
              "code": "BRANCH_SELECTION_REQUIRED",
              "message": "Bitte wählen Sie eine Filiale aus GET /sales-context für diesen Verkauf aus."
            },
            {
              "code": "CUSTOMER_ADDRESS_NOT_VERIFIED",
              "message": "Die Kombination aus Postleitzahl und Ort konnte nicht bestätigt werden. Bitte prüfen Sie beide Angaben."
            },
            {
              "code": "CUSTOMER_IBAN_INVALID",
              "message": "Die IBAN ist ungültig. Bitte prüfen Sie die Bankverbindung."
            },
            {
              "code": "CUSTOMER_BANK_DETAILS_INVALID",
              "message": "Die angegebenen Bankdaten passen nicht zur Bankverbindung. Bitte prüfen Sie BIC und Bankname."
            },
            {
              "code": "CUSTOMER_BANK_INVALID",
              "message": "Die Bankangaben sind nicht zulässig oder unvollständig. Bitte prüfen Sie die erforderlichen Bankangaben."
            },
            {
              "code": "CUSTOMER_DATA_INCOMPLETE",
              "message": "Die gespeicherten Kundendaten sind für diesen Vertrag nicht vollständig."
            },
            {
              "code": "CUSTOMER_ID_CARD_REQUIRED",
              "message": "Für dieses Produkt ist eine gültige Ausweisnummer des Kunden erforderlich."
            },
            {
              "code": "INVALID_CONDITION_SELECTION",
              "message": "Die gewählten Konditionen sind für dieses Produkt nicht zulässig. Bitte lesen Sie die aktuellen Auswahlmöglichkeiten erneut."
            },
            {
              "code": "DEBIT_DAY_INVALID",
              "message": "Der gewählte Lastschrifttag ist für diesen Vertrag nicht zulässig."
            },
            {
              "code": "REQUESTED_START_DATE_INVALID",
              "message": "Der gewünschte Vertragsbeginn liegt außerhalb des zulässigen Zeitraums."
            },
            {
              "code": "PREPARATION_NOT_ALLOWED",
              "message": "Die Vertragsvorbereitung ist mit diesen Angaben nicht zulässig. Bitte wenden Sie sich mit der Supportkennung an SmartPay."
            }
          ]
        }
      },
      "BankInput": {
        "description": "Bankverbindung des Neukunden. Die IBAN wird geprüft; BIC und Bankname werden soweit möglich aus der Bankzuordnung ermittelt. Der Kontoinhaber kann ausdrücklich angegeben oder aus Firma beziehungsweise Person übernommen werden.",
        "properties": {
          "bic": {
            "description": "BIC der Bank.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Übermittelte Werte dürfen der ermittelten Bankzuordnung nicht widersprechen. Eine angegebene BIC wird zusätzlich geprüft.",
              "description": "BIC der Bank.",
              "example": "COBADEFFXXX",
              "omission": "Bei bekannter Bankzuordnung wird der Wert daraus ermittelt. Für eine unbekannte ausländische Bankzuordnung ist eine ausdrückliche Angabe nötig.",
              "source": "Aus der tatsächlichen Bankverbindung des Kunden; die Bankzuordnung wird bei Einreichung geprüft."
            }
          },
          "holder": {
            "description": "Kontoinhaber der Bankverbindung. Er ist nicht automatisch mit dem Unterzeichner gleichzusetzen.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "description": "Kontoinhaber der Bankverbindung. Er ist nicht automatisch mit dem Unterzeichner gleichzusetzen.",
              "example": "Anna Muster",
              "omission": "Der Kontoinhaber wird aus der Firma oder andernfalls aus Vor- und Nachname übernommen.",
              "source": "Den tatsächlichen Kontoinhaber erfassen, wenn er ausdrücklich übermittelt werden soll; andernfalls gilt die beschriebene Ableitung aus Firma oder Person."
            }
          },
          "iban": {
            "description": "IBAN des zu verwendenden Kontos. Eine syntaktische Angabe allein ist noch kein erfolgreicher Banknachweis.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Die IBAN muss gültig sein und eine verwendbare Bankzuordnung erlauben; Leerzeichen werden für die Prüfung bereinigt.",
              "description": "IBAN des zu verwendenden Kontos. Eine syntaktische Angabe allein ist noch kein erfolgreicher Banknachweis.",
              "example": "DE89370400440532013000",
              "omission": "Bei customer.newCustomer.bank erforderlich; fehlt iban, wird die Neukundeneinreichung als ungültig abgewiesen. Andere Kundendaten ersetzen die IBAN nicht.",
              "source": "Aus der tatsächlichen Bankverbindung des Kunden; die Bankzuordnung wird bei Einreichung geprüft."
            }
          },
          "name": {
            "description": "Name der Bank.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Übermittelte Werte dürfen der ermittelten Bankzuordnung nicht widersprechen. Eine angegebene BIC wird zusätzlich geprüft.",
              "description": "Name der Bank.",
              "example": "Synthetische Beispielbank",
              "omission": "Bei bekannter Bankzuordnung wird der Wert daraus ermittelt. Für eine unbekannte ausländische Bankzuordnung ist eine ausdrückliche Angabe nötig.",
              "source": "Aus der tatsächlichen Bankverbindung des Kunden; die Bankzuordnung wird bei Einreichung geprüft."
            }
          }
        },
        "required": [
          "iban"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Bankverbindung des Neukunden. Die IBAN wird geprüft; BIC und Bankname werden soweit möglich aus der Bankzuordnung ermittelt. Der Kontoinhaber kann ausdrücklich angegeben oder aus Firma beziehungsweise Person übernommen werden."
        }
      },
      "BranchSummary": {
        "description": "Eine auswählbare Filiale mit öffentlicher Kennung und Anzeigename.",
        "properties": {
          "branchId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der gewählten Filiale. Eine explizite ungültige Filiale wird nicht durch eine andere ersetzt.",
            "x-partner-doc": {
              "description": "Kennung der gewählten Filiale. Eine explizite ungültige Filiale wird nicht durch eine andere ersetzt.",
              "example": "30000000-0000-4000-8000-000000000001",
              "omission": "Jeder ausgegebene Eintrag enthält branchId; fehlt das Feld, ist der Auswahleintrag unvollständig.",
              "source": "Aus der Antwort von GET /sales-context."
            }
          },
          "displayName": {
            "description": "Anzeigename für die bewusste Auswahl. Für spätere Requests die zugehörige Kennung verwenden.",
            "examples": [
              "Testfiliale Nord"
            ],
            "type": "string",
            "x-partner-doc": {
              "description": "Anzeigename für die bewusste Auswahl. Für spätere Requests die zugehörige Kennung verwenden.",
              "example": "Ada Beispiel",
              "omission": "Jeder ausgegebene Eintrag enthält displayName; fehlt das Feld, ist der Auswahleintrag unvollständig.",
              "source": "Aus der Antwort von GET /sales-context."
            }
          }
        },
        "required": [
          "branchId",
          "displayName"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Eine auswählbare Filiale mit öffentlicher Kennung und Anzeigename."
        }
      },
      "CategoriesResponse": {
        "description": "Die für den Zugang sichtbaren Produktkategorien. Eine Kategorie bewusst auswählen und ihre Produkte anschließend lesen.",
        "properties": {
          "items": {
            "description": "Die Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.",
            "items": {
              "$ref": "#/components/schemas/CategorySummary"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Die Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.",
              "example": [
                {
                  "categoryId": "40000000-0000-4000-8000-000000000001",
                  "name": "Synthetische Beispielkategorie"
                }
              ],
              "omission": "items gehört zu GET /categories. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen. Eine vorhandene leere Liste bedeutet, dass dieser Aufruf keine Einträge liefert.",
              "source": "Den Wert von items aus GET /categories lesen."
            }
          }
        },
        "required": [
          "items"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Die für den Zugang sichtbaren Produktkategorien. Eine Kategorie bewusst auswählen und ihre Produkte anschließend lesen."
        }
      },
      "CategoryProductsResponse": {
        "description": "Sichtbare Produkte der ausdrücklich gewählten Kategorie. Die Liste wählt kein Produkt für den Partner aus.",
        "properties": {
          "items": {
            "description": "Die Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.",
            "items": {
              "$ref": "#/components/schemas/ProductSummary"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Die Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.",
              "example": [
                {
                  "categoryId": "40000000-0000-4000-8000-000000000001",
                  "name": "Synthetisches Beispielprodukt",
                  "productId": "51f866e9-2307-47c6-8de3-e6b1f24f8d31"
                }
              ],
              "omission": "items gehört zu GET /categories/{categoryId}/products. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen. Eine vorhandene leere Liste bedeutet, dass dieser Aufruf keine Einträge liefert.",
              "source": "Den Wert von items aus GET /categories/{categoryId}/products lesen."
            }
          }
        },
        "required": [
          "items"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Sichtbare Produkte der ausdrücklich gewählten Kategorie. Die Liste wählt kein Produkt für den Partner aus."
        }
      },
      "CategorySummary": {
        "description": "Kennung und verfügbare Anzeigedaten einer Produktkategorie.",
        "properties": {
          "categoryId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung der Produktkategorie.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung der Produktkategorie.",
              "example": "40000000-0000-4000-8000-000000000001",
              "omission": "categoryId gehört zu einem Eintrag in items von GET /categories. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von categoryId aus einem Eintrag in items von GET /categories lesen."
            }
          },
          "description": {
            "description": "Anzeigebeschreibung der Kategorie.",
            "type": "string",
            "x-partner-doc": {
              "description": "Anzeigebeschreibung der Kategorie.",
              "example": "Synthetische Erläuterung",
              "omission": "Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.",
              "source": "Den Wert von description aus einem Eintrag in items von GET /categories lesen."
            }
          },
          "name": {
            "description": "Anzeigename der Kategorie.",
            "type": "string",
            "x-partner-doc": {
              "description": "Anzeigename der Kategorie.",
              "example": "Synthetische Bezeichnung",
              "omission": "Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.",
              "source": "Den Wert von name aus einem Eintrag in items von GET /categories lesen."
            }
          }
        },
        "required": [
          "categoryId"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Kennung und verfügbare Anzeigedaten einer Produktkategorie."
        }
      },
      "ConditionAmount": {
        "description": "Ein von SmartPay ausgegebener Betrag mit Währung, Steuerbasis und Zahlungsbezug. Die Dezimalzeichenfolge unverändert und ohne eigene Preis- oder Steuerannahmen verarbeiten.",
        "properties": {
          "amount": {
            "description": "Der ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.",
            "pattern": "^-?[0-9]+(?:\\.[0-9]+)?(?![\\s\\S])",
            "type": "string",
            "x-partner-doc": {
              "description": "Der ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.",
              "example": "10.50",
              "omission": "Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.",
              "source": "Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen."
            }
          },
          "basis": {
            "description": "Zahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.",
            "enum": [
              "ANNUAL",
              "PAYMENT_INTERVAL",
              "ONE_OFF",
              "PRORATION"
            ],
            "type": "string",
            "x-partner-doc": {
              "description": "Zahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.",
              "example": "PAYMENT_INTERVAL",
              "omission": "Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.",
              "source": "Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen."
            }
          },
          "currency": {
            "description": "Währung, auf die sich der Betrag bezieht.",
            "enum": [
              "EUR"
            ],
            "type": "string",
            "x-partner-doc": {
              "description": "Währung, auf die sich der Betrag bezieht.",
              "example": "EUR",
              "omission": "Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.",
              "source": "Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen."
            }
          },
          "taxBasis": {
            "description": "Steuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.",
            "enum": [
              "NET",
              "GROSS",
              "NO_TAX"
            ],
            "type": "string",
            "x-partner-doc": {
              "description": "Steuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.",
              "example": "GROSS",
              "omission": "Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.",
              "source": "Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen."
            }
          }
        },
        "required": [
          "amount",
          "currency",
          "basis",
          "taxBasis"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Ein von SmartPay ausgegebener Betrag mit Währung, Steuerbasis und Zahlungsbezug. Die Dezimalzeichenfolge unverändert und ohne eigene Preis- oder Steuerannahmen verarbeiten."
        }
      },
      "Contract": {
        "description": "Die über den berechtigten Vertragsabruf gelieferten Vertragswerte und Dokumentreferenzen. Nicht ausgegebene Werte dürfen nicht durch aktuelle Produktangaben oder eigene Berechnungen ersetzt werden.",
        "properties": {
          "conditions": {
            "$ref": "#/components/schemas/ContractConditions",
            "description": "Die ausgewiesenen Konditionen einschließlich ausgewählter Optionen und berechneter Beträge.",
            "x-partner-doc": {
              "description": "Die ausgewiesenen Konditionen einschließlich ausgewählter Optionen und berechneter Beträge.",
              "example": {
                "durationId": "17ef5d55-617c-429a-b523-637625346856",
                "paymentId": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
                "priceType": "AGB",
                "regularPayment": {
                  "amount": "10.50",
                  "basis": "PAYMENT_INTERVAL",
                  "currency": "EUR",
                  "taxBasis": "GROSS"
                },
                "setupCharge": {
                  "amount": "19.95",
                  "basis": "ONE_OFF",
                  "currency": "EUR",
                  "taxBasis": "GROSS"
                }
              },
              "omission": "Historische Konditionen sind in dieser Vertragsantwort nicht ausgewiesen; heutige Produktpreise ersetzen die gespeicherten Vertragswerte nicht.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von conditions lesen."
            }
          },
          "contractId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des zugehörigen Vertrags.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des zugehörigen Vertrags.",
              "example": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
              "omission": "contractId gehört zu jeder erfolgreichen Vertragsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von contractId lesen."
            }
          },
          "contractNumber": {
            "description": "Die von SmartPay vergebene fachliche Vertragsnummer. Für Ressourcenaufrufe die contractId verwenden.",
            "type": "string",
            "x-partner-doc": {
              "description": "Die von SmartPay vergebene fachliche Vertragsnummer. Für Ressourcenaufrufe die contractId verwenden.",
              "example": "V-SYNTHETIC-1001",
              "omission": "Keine fachliche Vertragsnummer mitgeteilt; für Ressourcenaufrufe weiterhin die contractId verwenden.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von contractNumber lesen."
            }
          },
          "contractStatus": {
            "description": "Der vom Vertragsabruf oder Vertragsereignis gemeldete Vertragszustand. Er ist vom Bearbeitungsstatus eines Vorgangs zu unterscheiden.",
            "type": "string",
            "x-partner-doc": {
              "description": "Der vom Vertragsabruf oder Vertragsereignis gemeldete Vertragszustand. Er ist vom Bearbeitungsstatus eines Vorgangs zu unterscheiden.",
              "example": "SIGNED",
              "omission": "Ein Vertragszustand ist nicht mitgeteilt; der Bearbeitungsstatus eines Vorgangs ersetzt ihn nicht.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von contractStatus lesen."
            }
          },
          "customerId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des Kunden. Sie ist weder die SmartPay-Kundennummer noch Ihre Partnerkundennummer.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des Kunden. Sie ist weder die SmartPay-Kundennummer noch Ihre Partnerkundennummer.",
              "example": "11111111-1111-4111-8111-111111111111",
              "omission": "Die Vertragsantwort teilt keine Kundenkennung mit; keine Zuordnung aus einem früheren Suchtreffer ergänzen.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von customerId lesen."
            }
          },
          "documents": {
            "description": "Die konkreten Dokumentfassungen des Vertrags. Der aktuelle erfolgreiche Vertragsabruf liefert stets eine Liste, bei fehlenden Dokumentzuordnungen gegebenenfalls []. Bei vorhandener Zuordnung kann eine nicht abrufbare Datei stattdessen einen dokumentierten Fehler auslösen.",
            "items": {
              "$ref": "#/components/schemas/DocumentMetadata"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Die konkreten Dokumentfassungen des Vertrags. Der aktuelle erfolgreiche Vertragsabruf liefert stets eine Liste, bei fehlenden Dokumentzuordnungen gegebenenfalls []. Bei vorhandener Zuordnung kann eine nicht abrufbare Datei stattdessen einen dokumentierten Fehler auslösen.",
              "example": [
                {
                  "availability": "AVAILABLE",
                  "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
                  "documentId": "a8b2d351-71c6-4a85-9b24-2044951c3004",
                  "purpose": "CONTRACT",
                  "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
                }
              ],
              "omission": "Der aktuelle erfolgreiche GET liefert diese Liste; für andere Antworten ist aus einer fehlenden Eigenschaft keine leere Dokumentliste abzuleiten.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von documents lesen."
            }
          },
          "endDate": {
            "description": "Tatsächlich gespeichertes Vertragsende, sofern vorhanden. Nach Reaktivierung nicht ausgegeben.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Tatsächlich gespeichertes Vertragsende, sofern vorhanden. Nach Reaktivierung nicht ausgegeben.",
              "example": "2027-11-01",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "endMinimumPeriod": {
            "description": "Das ausgewiesene Ende der Mindestvertragslaufzeit.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Das ausgewiesene Ende der Mindestvertragslaufzeit.",
              "example": "2026-11-01",
              "omission": "Das Ende der Mindestlaufzeit ist nicht mitgeteilt; keinen Termin aus heutigen Produktlaufzeiten berechnen.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von endMinimumPeriod lesen."
            }
          },
          "endNoticePeriod": {
            "description": "Der für den Vertrag ausgewiesene Termin der Kündigungsfrist.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Der für den Vertrag ausgewiesene Termin der Kündigungsfrist.",
              "example": "2026-11-01",
              "omission": "Ein Termin zur Kündigungsfrist ist nicht mitgeteilt; keinen Termin aus heutigen Produktregeln berechnen.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von endNoticePeriod lesen."
            }
          },
          "firstPaymentDate": {
            "description": "Der für den Vertrag ausgewiesene erste Zahlungstermin. Nicht allein aus Vertragsbeginn oder Regelrate ableiten.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Der für den Vertrag ausgewiesene erste Zahlungstermin. Nicht allein aus Vertragsbeginn oder Regelrate ableiten.",
              "example": "2026-11-01",
              "omission": "Ein erster Zahlungstermin ist nicht mitgeteilt; weder den Vertragsbeginn noch den nächsten Einzugstag ersatzweise verwenden.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von firstPaymentDate lesen."
            }
          },
          "productId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des bewusst gewählten Produkts.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des bewusst gewählten Produkts.",
              "example": "51f866e9-2307-47c6-8de3-e6b1f24f8d31",
              "omission": "Die Vertragsantwort teilt keine Produktkennung mit; keine Kennung aus dem heutigen Produktkatalog ergänzen.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von productId lesen."
            }
          },
          "renewalStartDate": {
            "description": "Beginn einer weiteren Vertragsperiode, soweit eine Antwort diesen Termin ausweist. Im aktuellen klassischen Neuvertragsablauf und Vertragsabruf wird das Feld nicht ausgegeben; nicht darauf warten.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Beginn einer weiteren Vertragsperiode, soweit eine Antwort diesen Termin ausweist. Im aktuellen klassischen Neuvertragsablauf und Vertragsabruf wird das Feld nicht ausgegeben; nicht darauf warten.",
              "example": "2026-11-01",
              "omission": "Erwartetes Verhalten des aktuellen klassischen Ablaufs; keinen Termin selbst ergänzen.",
              "source": "Im aktuellen klassischen Ablauf wird zu diesem Schemafeld kein Antwortwert geliefert."
            }
          },
          "resignDate": {
            "description": "Tatsächlich gespeichertes Datum von Kündigung oder Widerruf, sofern vorhanden. Nach Reaktivierung nicht ausgegeben.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Tatsächlich gespeichertes Datum von Kündigung oder Widerruf, sofern vorhanden. Nach Reaktivierung nicht ausgegeben.",
              "example": "2027-11-01",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "salesContext": {
            "$ref": "#/components/schemas/SalesContext",
            "description": "Der Verkäufer und die gegebenenfalls zugeordnete Filiale dieses Verkaufs.",
            "x-partner-doc": {
              "description": "Der Verkäufer und die gegebenenfalls zugeordnete Filiale dieses Verkaufs.",
              "example": {
                "branchId": "30000000-0000-4000-8000-000000000001",
                "sellerAccountId": "20000000-0000-4000-8000-000000000001"
              },
              "omission": "Der historische Verkaufskontext ist in dieser Vertragsantwort nicht ausgewiesen; die heute auswählbaren Verkäufer und Filialen ersetzen ihn nicht.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von salesContext lesen."
            }
          },
          "serialNumbers": {
            "$ref": "#/components/schemas/SerialNumbersInput",
            "description": "Die zum Produkt vorgegebene beziehungsweise im Vertrag ausgewiesene Liste von Geräteeinträgen.",
            "x-partner-doc": {
              "description": "Die zum Produkt vorgegebene beziehungsweise im Vertrag ausgewiesene Liste von Geräteeinträgen.",
              "example": [
                {
                  "name": "Gerät 1",
                  "serialNumber1": "SYNTHETIC-SN-001"
                }
              ],
              "omission": "Die Vertragsantwort enthält keine Geräteeinträge; eine fehlende Eigenschaft belegt keine ausdrücklich leere Geräteliste.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von serialNumbers lesen."
            }
          },
          "signDate": {
            "description": "Das im Vertrag ausgewiesene Unterzeichnungsdatum. Es ist kein genauer Bestätigungszeitpunkt des Vorgangs.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Das im Vertrag ausgewiesene Unterzeichnungsdatum. Es ist kein genauer Bestätigungszeitpunkt des Vorgangs.",
              "example": "2026-11-01",
              "omission": "Ein Unterzeichnungsdatum ist nicht mitgeteilt; Annahmezeit oder Browserrückkehr ersetzen es nicht.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von signDate lesen."
            }
          },
          "startDate": {
            "description": "Der tatsächlich im Vertrag ausgewiesene Vertragsbeginn.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Der tatsächlich im Vertrag ausgewiesene Vertragsbeginn.",
              "example": "2026-11-01",
              "omission": "Ein Vertragsbeginn ist nicht mitgeteilt; einen früheren Wunschstart nicht als tatsächlichen Beginn übernehmen.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von startDate lesen."
            }
          },
          "withdrawalUntilDate": {
            "description": "Das ausgewiesene Ende des Widerrufszeitraums. Keine eigene Frist aus dieser Angabe neu berechnen.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Das ausgewiesene Ende des Widerrufszeitraums. Keine eigene Frist aus dieser Angabe neu berechnen.",
              "example": "2026-11-01",
              "omission": "Das Ende des Widerrufszeitraums ist nicht mitgeteilt; keine Frist aus anderen Vertragsdaten ergänzen.",
              "source": "Den in GET /contracts/{contractId} ausgegebenen Wert von withdrawalUntilDate lesen."
            }
          }
        },
        "required": [
          "contractId"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Die über den berechtigten Vertragsabruf gelieferten Vertragswerte und Dokumentreferenzen. Nicht ausgegebene Werte dürfen nicht durch aktuelle Produktangaben oder eigene Berechnungen ersetzt werden."
        }
      },
      "ContractActionOperation": {
        "additionalProperties": false,
        "properties": {
          "affectedContractIds": {
            "description": "Kennungen der tatsächlich betroffenen eigenen Haupt- und abhängigen Verträge. Bei unbestätigtem Ergebnis werden keine betroffenen Objekte behauptet.",
            "items": {
              "$ref": "#/components/schemas/ResourceId"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Kennungen der tatsächlich betroffenen eigenen Haupt- und abhängigen Verträge. Bei unbestätigtem Ergebnis werden keine betroffenen Objekte behauptet.",
              "example": [
                "73530a36-0c02-4a38-9292-7a2b185cc9d0"
              ],
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "contractId": {
            "description": "Kennung des betroffenen eigenen Vertrags.",
            "format": "uuid",
            "type": "string",
            "x-partner-doc": {
              "description": "Kennung des betroffenen eigenen Vertrags.",
              "example": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "contractStatus": {
            "description": "Nach der Aktion bestätigter Vertragszustand. Bei unbestätigtem Ausgang wird kein Zielzustand behauptet.",
            "enum": [
              "CONTRADICTED",
              "RESIGNED",
              "SIGNED"
            ],
            "type": "string",
            "x-partner-doc": {
              "description": "Nach der Aktion bestätigter Vertragszustand. Bei unbestätigtem Ausgang wird kein Zielzustand behauptet.",
              "example": "CONTRADICTED",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "customerId": {
            "description": "Gespeicherte Kundenbeziehung dieses Vertrags.",
            "format": "uuid",
            "type": "string",
            "x-partner-doc": {
              "description": "Gespeicherte Kundenbeziehung dieses Vertrags.",
              "example": "b17bd08d-41ca-4c01-a674-96004c10d100",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "endDate": {
            "description": "Tatsächlich in Alt gespeichertes Vertragsende nach ordentlicher Kündigung; keine eigene V2-Fristberechnung.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Tatsächlich in Alt gespeichertes Vertragsende nach ordentlicher Kündigung; keine eigene V2-Fristberechnung.",
              "example": "2027-11-01",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "localAppliedAt": {
            "description": "Zeitpunkt des vorhandenen Alt-Änderungsbelegs, dessen Speicherung bestätigt wurde. Kein Providerzeitpunkt.",
            "format": "date-time",
            "type": "string",
            "x-partner-doc": {
              "description": "Zeitpunkt des vorhandenen Alt-Änderungsbelegs, dessen Speicherung bestätigt wurde. Kein Providerzeitpunkt.",
              "example": "2026-10-27T12:00:01Z",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "operationId": {
            "description": "Kennung dieser dauerhaft gespeicherten Vertragsaktion.",
            "format": "uuid",
            "type": "string",
            "x-partner-doc": {
              "description": "Kennung dieser dauerhaft gespeicherten Vertragsaktion.",
              "example": "a8b2d351-71c6-4a85-9b24-2044951c3010",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "previousContractStatus": {
            "description": "Vor der Aktion tatsächlich bestätigter Vertragszustand.",
            "type": "string",
            "x-partner-doc": {
              "description": "Vor der Aktion tatsächlich bestätigter Vertragszustand.",
              "example": "SIGNED",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "processingIssue": {
            "$ref": "#/components/schemas/ProcessingIssue",
            "description": "Aktueller Hinderungs- oder Klärungsgrund.",
            "x-partner-doc": {
              "description": "Aktueller Hinderungs- oder Klärungsgrund.",
              "example": {
                "code": "CONTRACT_ACTION_OUTCOME_UNKNOWN",
                "message": "Die Ausführung wird abgeglichen."
              },
              "omission": "Kein zusätzlicher Hinderungsgrund ausgewiesen; status bleibt maßgeblich.",
              "source": "Gespeicherter Vorgangsstand."
            }
          },
          "requestedAt": {
            "description": "Dauerhaft gespeicherter Annahmezeitpunkt.",
            "format": "date-time",
            "type": "string",
            "x-partner-doc": {
              "description": "Dauerhaft gespeicherter Annahmezeitpunkt.",
              "example": "2026-10-27T12:00:00Z",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "status": {
            "description": "Bearbeitungsstand dieser Aktion. COMPLETED bestätigt deren Fachwirkung, nicht einen neuen Vertragsabschluss. OUTCOME_UNKNOWN wird ausschließlich abgeglichen.",
            "enum": [
              "PROCESSING",
              "OUTCOME_UNKNOWN",
              "COMPLETED",
              "REJECTED"
            ],
            "type": "string",
            "x-partner-doc": {
              "description": "Bearbeitungsstand dieser Aktion. COMPLETED bestätigt deren Fachwirkung, nicht einen neuen Vertragsabschluss. OUTCOME_UNKNOWN wird ausschließlich abgeglichen.",
              "example": "COMPLETED",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "type": {
            "description": "Art dieser Vertragsaktion.",
            "enum": [
              "WITHDRAW_CONTRACT",
              "TERMINATE_CONTRACT",
              "REACTIVATE_CONTRACT"
            ],
            "type": "string",
            "x-partner-doc": {
              "description": "Art dieser Vertragsaktion.",
              "example": "WITHDRAW_CONTRACT",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          }
        },
        "required": [
          "operationId",
          "contractId",
          "customerId",
          "type",
          "status",
          "requestedAt"
        ],
        "type": "object"
      },
      "ContractConditions": {
        "description": "Die für den Vertrag oder Vorgang ausgewiesenen Konditionen. Beträge immer zusammen mit Währung, Steuerbasis und Zahlungsbezug auswerten; dies sind Antwortwerte und keine frei eingebbaren Preise.",
        "properties": {
          "debitDay": {
            "description": "Gewählter beziehungsweise ausgewiesener Tag im Monat für den Lastschrifteinzug. Dies ist kein vollständiges Datum.",
            "type": "integer",
            "x-partner-doc": {
              "description": "Gewählter beziehungsweise ausgewiesener Tag im Monat für den Lastschrifteinzug. Dies ist kein vollständiges Datum.",
              "example": 5,
              "omission": "Die Antwort weist keine Angabe zum Einzugstag aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.",
              "source": "Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Angabe zum Einzugstag lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung."
            }
          },
          "durationId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der bewusst ausgewählten Laufzeitoption des Produkts.",
            "x-partner-doc": {
              "description": "Kennung der bewusst ausgewählten Laufzeitoption des Produkts.",
              "example": "17ef5d55-617c-429a-b523-637625346856",
              "omission": "Die Antwort weist keine Laufzeitkennung aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.",
              "source": "Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Laufzeitkennung lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung."
            }
          },
          "paymentId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der bewusst ausgewählten Zahlweise des Produkts.",
            "x-partner-doc": {
              "description": "Kennung der bewusst ausgewählten Zahlweise des Produkts.",
              "example": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
              "omission": "Die Antwort weist keine Zahlweisenkennung aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.",
              "source": "Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Zahlweisenkennung lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung."
            }
          },
          "priceType": {
            "$ref": "#/components/schemas/PriceType",
            "description": "Die für das Produkt angebotene und bewusst ausgewählte Preisart.",
            "x-partner-doc": {
              "description": "Die für das Produkt angebotene und bewusst ausgewählte Preisart.",
              "example": "AGB",
              "omission": "Die Antwort weist keine Preisart aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.",
              "source": "Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Preisart lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung."
            }
          },
          "promotionDurationMonths": {
            "description": "Ausgewiesene Dauer der zugeordneten Promotion in Monaten. Der aktuelle Vertragsabruf gibt dieses Feld nicht aus; Produktkonditions- oder Vorgangsantworten sind gesondert zu betrachten.",
            "type": "integer",
            "x-partner-doc": {
              "description": "Ausgewiesene Dauer der zugeordneten Promotion in Monaten. Der aktuelle Vertragsabruf gibt dieses Feld nicht aus; Produktkonditions- oder Vorgangsantworten sind gesondert zu betrachten.",
              "example": 3,
              "omission": "Beim aktuellen GET /contracts/{contractId} wird dieses Feld nicht ausgegeben; keine Rate oder Dauer daraus berechnen.",
              "source": "Die in conditions der Vorgangsantwort ausgewiesene Promotionsdauer lesen; der aktuelle Vertragsabruf gibt diesen Wert nicht aus."
            }
          },
          "promotionId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der ausgewählten befristeten Promotion.",
            "x-partner-doc": {
              "description": "Kennung der ausgewählten befristeten Promotion.",
              "example": "70000000-0000-4000-8000-000000000001",
              "omission": "Die Antwort weist keine Promotionskennung aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.",
              "source": "Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Promotionskennung lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung."
            }
          },
          "promotionalPayment": {
            "$ref": "#/components/schemas/ConditionAmount",
            "description": "Ausgewiesene Rate während der zugeordneten Promotion. Der aktuelle Vertragsabruf gibt dieses Feld nicht aus; Produktkonditions- oder Vorgangsantworten sind gesondert zu betrachten.",
            "x-partner-doc": {
              "condition": "Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.",
              "description": "Ausgewiesene Rate während der zugeordneten Promotion. Der aktuelle Vertragsabruf gibt dieses Feld nicht aus; Produktkonditions- oder Vorgangsantworten sind gesondert zu betrachten.",
              "example": {
                "amount": "9.50",
                "basis": "PAYMENT_INTERVAL",
                "currency": "EUR",
                "taxBasis": "GROSS"
              },
              "omission": "Beim aktuellen GET /contracts/{contractId} wird dieses Feld nicht ausgegeben; keine Rate oder Dauer daraus berechnen.",
              "source": "Den in conditions der Vorgangsantwort ausgewiesenen Promotionsbetrag zusammen mit Währung, Steuerbasis und Zahlungsbezug lesen; der aktuelle Vertragsabruf gibt diesen Wert nicht aus."
            }
          },
          "regularPayment": {
            "$ref": "#/components/schemas/ConditionAmount",
            "description": "Ausgewiesene Regelrate mit Währung, Steuerbasis und Zahlungsbezug. Sie ist nicht automatisch der Betrag des ersten Einzugs.",
            "x-partner-doc": {
              "condition": "Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.",
              "description": "Ausgewiesene Regelrate mit Währung, Steuerbasis und Zahlungsbezug. Sie ist nicht automatisch der Betrag des ersten Einzugs.",
              "example": {
                "amount": "10.50",
                "basis": "PAYMENT_INTERVAL",
                "currency": "EUR",
                "taxBasis": "GROSS"
              },
              "omission": "Kein Betrag für diese Position mitgeteilt; dies bedeutet weder 0 noch Gebührenfreiheit. Keine heutigen Produktpreise ergänzen.",
              "source": "Den in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesenen Betrag zusammen mit Währung, Steuerbasis und Zahlungsbezug lesen."
            }
          },
          "setupCharge": {
            "$ref": "#/components/schemas/ConditionAmount",
            "description": "Ausgewiesenes einmaliges Einrichtungsentgelt mit Währung und Steuerbasis.",
            "x-partner-doc": {
              "condition": "Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.",
              "description": "Ausgewiesenes einmaliges Einrichtungsentgelt mit Währung und Steuerbasis.",
              "example": {
                "amount": "19.95",
                "basis": "ONE_OFF",
                "currency": "EUR",
                "taxBasis": "GROSS"
              },
              "omission": "Kein Betrag für diese Position mitgeteilt; dies bedeutet weder 0 noch Gebührenfreiheit. Keine heutigen Produktpreise ergänzen.",
              "source": "Den in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesenen Betrag zusammen mit Währung, Steuerbasis und Zahlungsbezug lesen."
            }
          },
          "withdrawalDays": {
            "description": "Die aus der zulässigen Auswahl bestimmten Widerrufstage. Dies ist keine freie Tageswahl des Partners.",
            "minimum": 0,
            "type": "integer",
            "x-partner-doc": {
              "description": "Die aus der zulässigen Auswahl bestimmten Widerrufstage. Dies ist keine freie Tageswahl des Partners.",
              "example": 14,
              "omission": "Die Antwort weist keine Anzahl der Widerrufstage aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.",
              "source": "Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Anzahl der Widerrufstage lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung."
            }
          }
        },
        "type": "object",
        "x-partner-doc": {
          "description": "Die für den Vertrag oder Vorgang ausgewiesenen Konditionen. Beträge immer zusammen mit Währung, Steuerbasis und Zahlungsbezug auswerten; dies sind Antwortwerte und keine frei eingebbaren Preise."
        }
      },
      "ContractOperation": {
        "allOf": [
          {
            "if": {
              "properties": {
                "signature": {
                  "description": "Der gemeldete Unterzeichnungsstand der zugehörigen Vertragsfassung.",
                  "required": [
                    "contentRevisionId"
                  ],
                  "x-partner-doc": {
                    "description": "Der gemeldete Unterzeichnungsstand der zugehörigen Vertragsfassung.",
                    "example": {
                      "contentRevisionId": "a8b2d351-71c6-4a85-9b24-2044951c3002",
                      "signatureAttemptId": "a8b2d351-71c6-4a85-9b24-2044951c3003",
                      "status": "SIGNED"
                    },
                    "omission": "Kein Unterzeichnungsstand in dieser Antwort ausgewiesen; eine Browserrückkehr oder eine frühere Einladung bestätigt keine Gesamtunterzeichnung.",
                    "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von signature lesen."
                  }
                }
              },
              "required": [
                "signature"
              ]
            },
            "then": {
              "required": [
                "contentRevisionId"
              ]
            }
          }
        ],
        "description": "Der aktuelle Stand eines eigenen Vertragsvorgangs mit Referenzen, Unterzeichnungsstand und gegebenenfalls verfügbaren Konditionen oder Dokumenten. Annahme, Unterschrift und bestätigter Fachabschluss sind getrennte Tatsachen.",
        "properties": {
          "billingEffectiveDate": {
            "description": "Das für die Abrechnung ausgewiesene Wirksamkeitsdatum.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Das für die Abrechnung ausgewiesene Wirksamkeitsdatum.",
              "example": "2026-11-01",
              "omission": "Kein Abrechnungsdatum in dieser Antwort ausgewiesen; Wunschstart und Vertragsbeginn ersetzen es nicht.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von billingEffectiveDate lesen."
            }
          },
          "conditions": {
            "$ref": "#/components/schemas/ContractConditions",
            "description": "Die ausgewiesenen Konditionen einschließlich ausgewählter Optionen und berechneter Beträge.",
            "x-partner-doc": {
              "description": "Die ausgewiesenen Konditionen einschließlich ausgewählter Optionen und berechneter Beträge.",
              "example": {
                "durationId": "17ef5d55-617c-429a-b523-637625346856",
                "paymentId": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
                "priceType": "AGB",
                "regularPayment": {
                  "amount": "10.50",
                  "basis": "PAYMENT_INTERVAL",
                  "currency": "EUR",
                  "taxBasis": "GROSS"
                },
                "setupCharge": {
                  "amount": "19.95",
                  "basis": "ONE_OFF",
                  "currency": "EUR",
                  "taxBasis": "GROSS"
                }
              },
              "omission": "Keine Vorgangskonditionen in dieser Antwort ausgewiesen; keine Preise aus heutigen Produktangaben ergänzen.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von conditions lesen."
            }
          },
          "contentRevisionId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.",
            "x-partner-doc": {
              "description": "Kennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.",
              "example": "a8b2d351-71c6-4a85-9b24-2044951c3002",
              "omission": "Keine Fassungskennung in dieser Antwort ausgewiesen; contractId und operationId ersetzen diese Zuordnung nicht.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von contentRevisionId lesen."
            }
          },
          "contractId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des zugehörigen Vertrags.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des zugehörigen Vertrags.",
              "example": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
              "omission": "contractId gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von contractId lesen."
            }
          },
          "documents": {
            "description": "Die in dieser Antwort ausgewiesenen konkreten Dokumentfassungen. Verfügbarkeit und gegebenenfalls Prüfsumme vor einem Download beachten.",
            "items": {
              "$ref": "#/components/schemas/DocumentMetadata"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Die in dieser Antwort ausgewiesenen konkreten Dokumentfassungen. Verfügbarkeit und gegebenenfalls Prüfsumme vor einem Download beachten.",
              "example": [
                {
                  "availability": "AVAILABLE",
                  "contentRevisionId": "a8b2d351-71c6-4a85-9b24-2044951c3002",
                  "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
                  "documentId": "a8b2d351-71c6-4a85-9b24-2044951c3004",
                  "operationId": "a8b2d351-71c6-4a85-9b24-2044951c3001",
                  "phase": "SIGNED",
                  "purpose": "CONTRACT",
                  "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                  "signatureAttemptId": "a8b2d351-71c6-4a85-9b24-2044951c3003"
                }
              ],
              "omission": "Keine Dokumentliste in dieser Antwort ausgewiesen; eine fehlende Eigenschaft ist keine ausdrücklich leere Liste und bestätigt keine Dateiverfügbarkeit.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von documents lesen."
            }
          },
          "endMinimumPeriod": {
            "description": "Das ausgewiesene Ende der Mindestvertragslaufzeit. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Das ausgewiesene Ende der Mindestvertragslaufzeit. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.",
              "example": "2026-11-01",
              "omission": "Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.",
              "source": "Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert."
            }
          },
          "endNoticePeriod": {
            "description": "Der für den Vertrag ausgewiesene Termin der Kündigungsfrist. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Der für den Vertrag ausgewiesene Termin der Kündigungsfrist. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.",
              "example": "2026-11-01",
              "omission": "Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.",
              "source": "Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert."
            }
          },
          "externalReference": {
            "$ref": "#/components/schemas/ExternalReference",
            "description": "Ihre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.",
            "x-partner-doc": {
              "description": "Ihre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.",
              "example": "synthetic-guide-new-001",
              "omission": "externalReference gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Die bei Einreichung vom Partner gewählte Geschäftsreferenz, unverändert zurückgegeben."
            }
          },
          "firstPaymentDate": {
            "description": "Der für den Vertrag ausgewiesene erste Zahlungstermin. Nicht allein aus Vertragsbeginn oder Regelrate ableiten. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Der für den Vertrag ausgewiesene erste Zahlungstermin. Nicht allein aus Vertragsbeginn oder Regelrate ableiten. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.",
              "example": "2026-11-01",
              "omission": "Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.",
              "source": "Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert."
            }
          },
          "localAppliedAt": {
            "description": "Zeitpunkt des bestätigten Fachabschlusses. Eine bloße Annahme oder Unterschrift genügt dafür nicht.",
            "format": "date-time",
            "type": "string",
            "x-partner-doc": {
              "description": "Zeitpunkt des bestätigten Fachabschlusses. Eine bloße Annahme oder Unterschrift genügt dafür nicht.",
              "example": "2026-10-24T10:00:00Z",
              "omission": "Ein bestätigter Fachabschlusszeitpunkt wird nicht ausgewiesen; Annahme- oder Unterzeichnungszeit nicht ersatzweise verwenden.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von localAppliedAt lesen."
            }
          },
          "operationId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des zugehörigen Vertragsvorgangs.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des zugehörigen Vertragsvorgangs.",
              "example": "a8b2d351-71c6-4a85-9b24-2044951c3001",
              "omission": "operationId gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von operationId lesen."
            }
          },
          "processingIssue": {
            "$ref": "#/components/schemas/ProcessingIssue",
            "description": "Ein aktuell ausgewiesener Hinderungs- oder Klärungsgrund der weiteren Bearbeitung.",
            "x-partner-doc": {
              "description": "Ein aktuell ausgewiesener Hinderungs- oder Klärungsgrund der weiteren Bearbeitung.",
              "example": {
                "code": "SIGNED_DOCUMENT_PENDING",
                "message": "Die Endfassung ist noch nicht verfügbar."
              },
              "omission": "Kein Hinderungsgrund in dieser Antwort ausgewiesen; daraus allein keinen erfolgreichen Fachabschluss ableiten, sondern status beachten.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von processingIssue lesen."
            }
          },
          "providerConfirmedAt": {
            "description": "Ein ausdrücklich mitgeteilter Bestätigungszeitpunkt einer angebundenen Leistung. Er ersetzt keinen Fachabschluss des Vorgangs.",
            "format": "date-time",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur auswerten, wenn die Antwort diese zusätzliche Leistungsangabe ausdrücklich enthält. Daraus entsteht kein weiterer unterstützter Abschlussweg.",
              "description": "Ein ausdrücklich mitgeteilter Bestätigungszeitpunkt einer angebundenen Leistung. Er ersetzt keinen Fachabschluss des Vorgangs.",
              "example": "2026-10-24T10:00:00Z",
              "omission": "Kein Bestätigungszeitpunkt einer angebundenen Leistung mitgeteilt; ein Plantermin oder der Vorgangsstatus ersetzt diesen Nachweis nicht.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von providerConfirmedAt lesen."
            }
          },
          "providerOutcome": {
            "description": "Ein ausdrücklich ausgewiesener Ausgang einer angebundenen Leistung. Eine unklare Rückmeldung ist kein bestätigter Erfolg oder sicherer Nichterfolg. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.",
            "examples": [
              "SUCCEEDED",
              "DEFINITIVE_REJECTION",
              "UNKNOWN"
            ],
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur auswerten, wenn die Antwort diese zusätzliche Leistungsangabe ausdrücklich enthält. Daraus entsteht kein weiterer unterstützter Abschlussweg.",
              "description": "Ein ausdrücklich ausgewiesener Ausgang einer angebundenen Leistung. Eine unklare Rückmeldung ist kein bestätigter Erfolg oder sicherer Nichterfolg. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.",
              "example": "UNKNOWN",
              "omission": "Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.",
              "source": "Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert."
            }
          },
          "providerScheduledDate": {
            "description": "Ein ausdrücklich mitgeteilter geplanter Leistungstermin. Ein Plan ist noch keine bestätigte Ausführung. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur auswerten, wenn die Antwort diese zusätzliche Leistungsangabe ausdrücklich enthält. Daraus entsteht kein weiterer unterstützter Abschlussweg.",
              "description": "Ein ausdrücklich mitgeteilter geplanter Leistungstermin. Ein Plan ist noch keine bestätigte Ausführung. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.",
              "example": "2026-11-01",
              "omission": "Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.",
              "source": "Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert."
            }
          },
          "renewalStartDate": {
            "description": "Beginn einer weiteren Vertragsperiode, soweit eine Antwort diesen Termin ausweist. Im aktuellen klassischen Neuvertragsablauf und Vertragsabruf wird das Feld nicht ausgegeben; nicht darauf warten.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Beginn einer weiteren Vertragsperiode, soweit eine Antwort diesen Termin ausweist. Im aktuellen klassischen Neuvertragsablauf und Vertragsabruf wird das Feld nicht ausgegeben; nicht darauf warten.",
              "example": "2026-11-01",
              "omission": "Erwartetes Verhalten des aktuellen klassischen Ablaufs; keinen Termin selbst ergänzen.",
              "source": "Im aktuellen klassischen Ablauf wird zu diesem Schemafeld kein Antwortwert geliefert."
            }
          },
          "requestedAt": {
            "description": "Der für die Einreichung ausgewiesene Zeitpunkt.",
            "format": "date-time",
            "type": "string",
            "x-partner-doc": {
              "description": "Der für die Einreichung ausgewiesene Zeitpunkt.",
              "example": "2026-10-24T10:00:00Z",
              "omission": "Kein Einreichungszeitpunkt mitgeteilt; die Zeit dieses Leseaufrufs ersetzt den ursprünglichen Zeitpunkt nicht.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von requestedAt lesen."
            }
          },
          "requestedStartDate": {
            "description": "Gewünschter Vertragsbeginn. Er wird auf den für Produkt und Zugang zulässigen Zeitraum geprüft.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Gewünschter Vertragsbeginn. Er wird auf den für Produkt und Zugang zulässigen Zeitraum geprüft.",
              "example": "2026-11-01",
              "omission": "Kein Wunschstart in dieser Antwort ausgewiesen; daraus keinen tatsächlichen Vertragsbeginn ableiten.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von requestedStartDate lesen."
            }
          },
          "salesContext": {
            "$ref": "#/components/schemas/SalesContext",
            "description": "Der Verkäufer und die gegebenenfalls zugeordnete Filiale dieses Verkaufs.",
            "x-partner-doc": {
              "description": "Der Verkäufer und die gegebenenfalls zugeordnete Filiale dieses Verkaufs.",
              "example": {
                "branchId": "30000000-0000-4000-8000-000000000001",
                "sellerAccountId": "20000000-0000-4000-8000-000000000001"
              },
              "omission": "Die Antwort weist keinen gebundenen Verkaufskontext aus; eine heutige Auswahl aus GET /sales-context ergänzt ihn nicht.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von salesContext lesen."
            }
          },
          "serialNumbers": {
            "$ref": "#/components/schemas/SerialNumbersInput",
            "description": "Die zum Produkt vorgegebene beziehungsweise im Vertrag ausgewiesene Liste von Geräteeinträgen.",
            "x-partner-doc": {
              "description": "Die zum Produkt vorgegebene beziehungsweise im Vertrag ausgewiesene Liste von Geräteeinträgen.",
              "example": [
                {
                  "name": "Gerät 1",
                  "serialNumber1": "SYNTHETIC-SN-001"
                }
              ],
              "omission": "Keine Geräteeinträge in dieser Antwort ausgewiesen; die ursprüngliche Eingabe ist kein Beleg des gespeicherten Gerätestands.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von serialNumbers lesen."
            }
          },
          "signature": {
            "$ref": "#/components/schemas/Signature",
            "description": "Der gemeldete Unterzeichnungsstand der zugehörigen Vertragsfassung.",
            "x-partner-doc": {
              "description": "Der gemeldete Unterzeichnungsstand der zugehörigen Vertragsfassung.",
              "example": {
                "contentRevisionId": "a8b2d351-71c6-4a85-9b24-2044951c3002",
                "signatureAttemptId": "a8b2d351-71c6-4a85-9b24-2044951c3003",
                "status": "SIGNED"
              },
              "omission": "Kein Unterzeichnungsstand in dieser Antwort ausgewiesen; eine Browserrückkehr oder eine frühere Einladung bestätigt keine Gesamtunterzeichnung.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von signature lesen."
            }
          },
          "status": {
            "$ref": "#/components/schemas/OperationStatus",
            "description": "Der aktuelle Bearbeitungsstand des Vorgangs. COMPLETED bezeichnet den bestätigten Fachabschluss, nicht nur eine Unterschrift.",
            "x-partner-doc": {
              "description": "Der aktuelle Bearbeitungsstand des Vorgangs. COMPLETED bezeichnet den bestätigten Fachabschluss, nicht nur eine Unterschrift.",
              "example": "COMPLETED",
              "omission": "status gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von status lesen."
            }
          },
          "type": {
            "$ref": "#/components/schemas/OperationType",
            "description": "Art dieses Vertragsvorgangs im angebotenen Neuvertragsumfang.",
            "x-partner-doc": {
              "description": "Art dieses Vertragsvorgangs im angebotenen Neuvertragsumfang.",
              "example": "NEW_CONTRACT",
              "omission": "type gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von type lesen."
            }
          },
          "withdrawalUntilDate": {
            "description": "Das ausgewiesene Ende des Widerrufszeitraums. Keine eigene Frist aus dieser Angabe neu berechnen. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Das ausgewiesene Ende des Widerrufszeitraums. Keine eigene Frist aus dieser Angabe neu berechnen. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.",
              "example": "2026-11-01",
              "omission": "Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.",
              "source": "Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert."
            }
          }
        },
        "required": [
          "operationId",
          "contractId",
          "type",
          "externalReference",
          "status"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Der aktuelle Stand eines eigenen Vertragsvorgangs mit Referenzen, Unterzeichnungsstand und gegebenenfalls verfügbaren Konditionen oder Dokumenten. Annahme, Unterschrift und bestätigter Fachabschluss sind getrennte Tatsachen."
        }
      },
      "ContractOperationUpdatedEvent": {
        "description": "Benachrichtigung über einen geänderten Vertragsvorgang. Das Ereignis meldet einen beobachteten Stand; zur weiteren Bearbeitung kann der aktuelle Vorgang gelesen werden.",
        "properties": {
          "contractId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des zugehörigen Vertrags.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des zugehörigen Vertrags.",
              "example": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
              "omission": "Ein vollständiges contract.operation.updated-Ereignis enthält contractId. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "documents": {
            "description": "Die in dieser Antwort ausgewiesenen konkreten Dokumentfassungen. Verfügbarkeit und gegebenenfalls Prüfsumme vor einem Download beachten.",
            "items": {
              "$ref": "#/components/schemas/DocumentMetadata"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Die in dieser Antwort ausgewiesenen konkreten Dokumentfassungen. Verfügbarkeit und gegebenenfalls Prüfsumme vor einem Download beachten.",
              "example": [
                {
                  "availability": "AVAILABLE",
                  "contentRevisionId": "a8b2d351-71c6-4a85-9b24-2044951c3002",
                  "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
                  "documentId": "a8b2d351-71c6-4a85-9b24-2044951c3004",
                  "operationId": "a8b2d351-71c6-4a85-9b24-2044951c3001",
                  "phase": "SIGNED",
                  "purpose": "CONTRACT",
                  "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                  "signatureAttemptId": "a8b2d351-71c6-4a85-9b24-2044951c3003"
                }
              ],
              "omission": "Das Ereignis teilt diesen Wert nicht mit; bei Bedarf den aktuellen berechtigten Vorgang oder Vertrag lesen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "eventId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung dieser Benachrichtigung. Mehrfachzustellungen desselben Ereignisses anhand dieser Kennung erkennen.",
            "x-partner-doc": {
              "description": "Kennung dieser Benachrichtigung. Mehrfachzustellungen desselben Ereignisses anhand dieser Kennung erkennen.",
              "example": "90000000-0000-4000-8000-000000000001",
              "omission": "Ein vollständiges contract.operation.updated-Ereignis enthält eventId. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "externalReference": {
            "$ref": "#/components/schemas/ExternalReference",
            "description": "Ihre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.",
            "x-partner-doc": {
              "description": "Ihre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.",
              "example": "synthetic-guide-new-001",
              "omission": "Ein vollständiges contract.operation.updated-Ereignis enthält externalReference. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "occurredAt": {
            "description": "Mitgeteilter Zeitpunkt des Ereignisses. Er ist weder der Empfangszeitpunkt noch allein ein Abschlussnachweis.",
            "format": "date-time",
            "type": "string",
            "x-partner-doc": {
              "description": "Mitgeteilter Zeitpunkt des Ereignisses. Er ist weder der Empfangszeitpunkt noch allein ein Abschlussnachweis.",
              "example": "2026-10-24T10:00:00Z",
              "omission": "Ein vollständiges contract.operation.updated-Ereignis enthält occurredAt. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "operationId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des zugehörigen Vertragsvorgangs.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des zugehörigen Vertragsvorgangs.",
              "example": "a8b2d351-71c6-4a85-9b24-2044951c3001",
              "omission": "Ein vollständiges contract.operation.updated-Ereignis enthält operationId. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "status": {
            "$ref": "#/components/schemas/OperationStatus",
            "description": "Der aktuell gemeldete Zustand dieses Objekts.",
            "x-partner-doc": {
              "description": "Der aktuell gemeldete Zustand dieses Objekts.",
              "example": "COMPLETED",
              "omission": "Ein vollständiges contract.operation.updated-Ereignis enthält status. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "type": {
            "const": "contract.operation.updated",
            "description": "Ereignistyp dieser Benachrichtigung: contract.operation.updated.",
            "type": "string",
            "x-partner-doc": {
              "description": "Ereignistyp dieser Benachrichtigung: contract.operation.updated.",
              "example": "contract.operation.updated",
              "omission": "Ein vollständiges contract.operation.updated-Ereignis enthält type. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          }
        },
        "required": [
          "eventId",
          "type",
          "occurredAt",
          "contractId",
          "operationId",
          "externalReference",
          "status"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Benachrichtigung über einen geänderten Vertragsvorgang. Das Ereignis meldet einen beobachteten Stand; zur weiteren Bearbeitung kann der aktuelle Vorgang gelesen werden."
        }
      },
      "ContractOperationsResponse": {
        "description": "Ergebnis der Suche eines eigenen Vorgangs über die unveränderte Geschäftsreferenz. Eine leere Liste beweist nicht, dass ein zeitgleicher Request nicht angenommen wurde.",
        "properties": {
          "items": {
            "description": "Die Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.",
            "items": {
              "$ref": "#/components/schemas/ContractOperation"
            },
            "maxItems": 1,
            "type": "array",
            "x-partner-doc": {
              "description": "Die Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.",
              "example": [
                {
                  "contentRevisionId": "a8b2d351-71c6-4a85-9b24-2044951c3002",
                  "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
                  "documents": [
                    {
                      "availability": "AVAILABLE",
                      "contentRevisionId": "a8b2d351-71c6-4a85-9b24-2044951c3002",
                      "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
                      "documentId": "a8b2d351-71c6-4a85-9b24-2044951c3004",
                      "operationId": "a8b2d351-71c6-4a85-9b24-2044951c3001",
                      "phase": "SIGNED",
                      "purpose": "CONTRACT",
                      "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                      "signatureAttemptId": "a8b2d351-71c6-4a85-9b24-2044951c3003"
                    }
                  ],
                  "externalReference": "synthetic-guide-new-001",
                  "localAppliedAt": "2026-10-15T10:05:00Z",
                  "operationId": "a8b2d351-71c6-4a85-9b24-2044951c3001",
                  "salesContext": {
                    "branchId": "30000000-0000-4000-8000-000000000001",
                    "sellerAccountId": "20000000-0000-4000-8000-000000000001"
                  },
                  "signature": {
                    "contentRevisionId": "a8b2d351-71c6-4a85-9b24-2044951c3002",
                    "signatureAttemptId": "a8b2d351-71c6-4a85-9b24-2044951c3003",
                    "status": "SIGNED"
                  },
                  "status": "COMPLETED",
                  "type": "NEW_CONTRACT"
                }
              ],
              "omission": "Die erfolgreiche Suche enthält items, gegebenenfalls als []. Ein fehlendes items-Feld ist keine leere Trefferliste.",
              "source": "Die von GET /contract-operations zur unveränderten externalReference zurückgegebene Vorgangsliste lesen."
            }
          }
        },
        "required": [
          "items"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Ergebnis der Suche eines eigenen Vorgangs über die unveränderte Geschäftsreferenz. Eine leere Liste beweist nicht, dass ein zeitgleicher Request nicht angenommen wurde."
        }
      },
      "ContractReactivationRequest": {
        "additionalProperties": false,
        "properties": {
          "decidedByAccountId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Account-UUID des aktiven eigenen Entscheiders aus GET /sales-context. SmartPay prüft die vorhandene Alt-Aktionsberechtigung serverseitig; keine Kundenkennung.",
            "x-partner-doc": {
              "description": "Account-UUID des aktiven eigenen Entscheiders aus GET /sales-context. SmartPay prüft die vorhandene Alt-Aktionsberechtigung serverseitig; keine Kundenkennung.",
              "example": "20000000-0000-4000-8000-000000000001",
              "omission": "Erforderlich; ohne berechtigten Entscheider wird die Aktion abgewiesen.",
              "source": "Account-UUID aus GET /sales-context."
            }
          },
          "includeAddons": {
            "default": false,
            "description": "Zusatzverträge entsprechend der vorhandenen Alt-Auswahl ebenfalls bearbeiten. Ohne Angabe false; konfigurierte Bundle-Kinder folgen unabhängig davon den bestehenden Alt-Regeln.",
            "type": "boolean",
            "x-partner-doc": {
              "description": "Zusatzverträge entsprechend der vorhandenen Alt-Auswahl ebenfalls bearbeiten. Ohne Angabe false; konfigurierte Bundle-Kinder folgen unabhängig davon den bestehenden Alt-Regeln.",
              "example": false,
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          }
        },
        "required": [
          "decidedByAccountId"
        ],
        "type": "object"
      },
      "ContractTerminationRequest": {
        "additionalProperties": false,
        "properties": {
          "decidedByAccountId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Account-UUID des aktiven eigenen Entscheiders aus GET /sales-context. SmartPay prüft die vorhandene Alt-Aktionsberechtigung serverseitig; keine Kundenkennung.",
            "x-partner-doc": {
              "description": "Account-UUID des aktiven eigenen Entscheiders aus GET /sales-context. SmartPay prüft die vorhandene Alt-Aktionsberechtigung serverseitig; keine Kundenkennung.",
              "example": "20000000-0000-4000-8000-000000000001",
              "omission": "Erforderlich; ohne berechtigten Entscheider wird die Aktion abgewiesen.",
              "source": "Account-UUID aus GET /sales-context."
            }
          },
          "includeAddons": {
            "default": false,
            "description": "Zusatzverträge entsprechend der vorhandenen Alt-Auswahl ebenfalls bearbeiten. Ohne Angabe false; konfigurierte Bundle-Kinder folgen unabhängig davon den bestehenden Alt-Regeln.",
            "type": "boolean",
            "x-partner-doc": {
              "description": "Zusatzverträge entsprechend der vorhandenen Alt-Auswahl ebenfalls bearbeiten. Ohne Angabe false; konfigurierte Bundle-Kinder folgen unabhängig davon den bestehenden Alt-Regeln.",
              "example": false,
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          },
          "requestedEndDate": {
            "description": "Optionaler späterer Beendigungstermin, ausschließlich nach vorhandener Alt-Frist- und Vertragsperiodenprüfung. Ohne Angabe bestimmt Alt den frühestmöglichen zulässigen Termin.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Optionaler späterer Beendigungstermin, ausschließlich nach vorhandener Alt-Frist- und Vertragsperiodenprüfung. Ohne Angabe bestimmt Alt den frühestmöglichen zulässigen Termin.",
              "example": "2027-11-01",
              "omission": "Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.",
              "source": "Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang."
            }
          }
        },
        "required": [
          "decidedByAccountId"
        ],
        "type": "object"
      },
      "ContractUpdatedEvent": {
        "description": "Benachrichtigung über geänderte Vertragsdaten. Vertragszustand und Fortschritt des zugehörigen Vorgangs sind getrennte Angaben.",
        "properties": {
          "contractId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des zugehörigen Vertrags.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des zugehörigen Vertrags.",
              "example": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
              "omission": "Ein vollständiges contract.updated-Ereignis enthält contractId. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "contractStatus": {
            "description": "Der vom Vertragsabruf oder Vertragsereignis gemeldete Vertragszustand. Er ist vom Bearbeitungsstatus eines Vorgangs zu unterscheiden.",
            "type": "string",
            "x-partner-doc": {
              "description": "Der vom Vertragsabruf oder Vertragsereignis gemeldete Vertragszustand. Er ist vom Bearbeitungsstatus eines Vorgangs zu unterscheiden.",
              "example": "SIGNED",
              "omission": "Ein vollständiges contract.updated-Ereignis enthält contractStatus. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "documents": {
            "description": "Die in dieser Antwort ausgewiesenen konkreten Dokumentfassungen. Verfügbarkeit und gegebenenfalls Prüfsumme vor einem Download beachten.",
            "items": {
              "$ref": "#/components/schemas/DocumentMetadata"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Die in dieser Antwort ausgewiesenen konkreten Dokumentfassungen. Verfügbarkeit und gegebenenfalls Prüfsumme vor einem Download beachten.",
              "example": [
                {
                  "availability": "AVAILABLE",
                  "contentRevisionId": "a8b2d351-71c6-4a85-9b24-2044951c3002",
                  "contractId": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
                  "documentId": "a8b2d351-71c6-4a85-9b24-2044951c3004",
                  "operationId": "a8b2d351-71c6-4a85-9b24-2044951c3001",
                  "phase": "SIGNED",
                  "purpose": "CONTRACT",
                  "sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
                  "signatureAttemptId": "a8b2d351-71c6-4a85-9b24-2044951c3003"
                }
              ],
              "omission": "Das Ereignis teilt diesen Wert nicht mit; bei Bedarf den aktuellen berechtigten Vorgang oder Vertrag lesen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "eventId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung dieser Benachrichtigung. Mehrfachzustellungen desselben Ereignisses anhand dieser Kennung erkennen.",
            "x-partner-doc": {
              "description": "Kennung dieser Benachrichtigung. Mehrfachzustellungen desselben Ereignisses anhand dieser Kennung erkennen.",
              "example": "90000000-0000-4000-8000-000000000001",
              "omission": "Ein vollständiges contract.updated-Ereignis enthält eventId. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "externalReference": {
            "$ref": "#/components/schemas/ExternalReference",
            "description": "Ihre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.",
            "x-partner-doc": {
              "description": "Ihre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.",
              "example": "synthetic-guide-new-001",
              "omission": "Ein vollständiges contract.updated-Ereignis enthält externalReference. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "occurredAt": {
            "description": "Mitgeteilter Zeitpunkt des Ereignisses. Er ist weder der Empfangszeitpunkt noch allein ein Abschlussnachweis.",
            "format": "date-time",
            "type": "string",
            "x-partner-doc": {
              "description": "Mitgeteilter Zeitpunkt des Ereignisses. Er ist weder der Empfangszeitpunkt noch allein ein Abschlussnachweis.",
              "example": "2026-10-24T10:00:00Z",
              "omission": "Ein vollständiges contract.updated-Ereignis enthält occurredAt. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "operationId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des zugehörigen Vertragsvorgangs.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des zugehörigen Vertragsvorgangs.",
              "example": "a8b2d351-71c6-4a85-9b24-2044951c3001",
              "omission": "Das Ereignis teilt diesen Wert nicht mit; bei Bedarf den aktuellen berechtigten Vorgang oder Vertrag lesen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          },
          "type": {
            "const": "contract.updated",
            "description": "Ereignistyp dieser Benachrichtigung: contract.updated.",
            "type": "string",
            "x-partner-doc": {
              "description": "Ereignistyp dieser Benachrichtigung: contract.updated.",
              "example": "contract.updated",
              "omission": "Ein vollständiges contract.updated-Ereignis enthält type. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback."
            }
          }
        },
        "required": [
          "eventId",
          "type",
          "occurredAt",
          "contractId",
          "externalReference",
          "contractStatus"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Benachrichtigung über geänderte Vertragsdaten. Vertragszustand und Fortschritt des zugehörigen Vorgangs sind getrennte Angaben."
        }
      },
      "ContractWithdrawalRequest": {
        "additionalProperties": false,
        "properties": {
          "decidedByAccountId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Account-UUID des aktiven eigenen Entscheiders aus GET /sales-context. SmartPay prüft die vorhandene Alt-Aktionsberechtigung serverseitig; keine Kundenkennung.",
            "x-partner-doc": {
              "description": "Account-UUID des aktiven eigenen Entscheiders aus GET /sales-context. SmartPay prüft die vorhandene Alt-Aktionsberechtigung serverseitig; keine Kundenkennung.",
              "example": "20000000-0000-4000-8000-000000000001",
              "omission": "Erforderlich; ohne berechtigten Entscheider wird die Aktion abgewiesen.",
              "source": "Account-UUID aus GET /sales-context."
            }
          }
        },
        "required": [
          "decidedByAccountId"
        ],
        "type": "object"
      },
      "CreateContractRequest": {
        "$ref": "#/components/schemas/NewContractRequest"
      },
      "CustomerSearchRequest": {
        "description": "Lesende Kundensuche. OWN sucht im eigenen berechtigten Bestand; IDENTIFY ist eine ausdrücklich angeforderte, eng begrenzte Identifikation mit vollständigen Vergleichsangaben.",
        "oneOf": [
          {
            "$ref": "#/components/schemas/OwnCustomerSearchRequest"
          },
          {
            "$ref": "#/components/schemas/IdentifyCustomerSearchRequest"
          }
        ],
        "x-partner-doc": {
          "description": "Lesende Kundensuche. OWN sucht im eigenen berechtigten Bestand; IDENTIFY ist eine ausdrücklich angeforderte, eng begrenzte Identifikation mit vollständigen Vergleichsangaben."
        }
      },
      "CustomerSearchResponse": {
        "description": "Seite der Kundensuchergebnisse einschließlich Suchart und Seitenangaben. Der Umfang eines Trefferobjekts richtet sich nach der angeforderten Suchart.",
        "oneOf": [
          {
            "additionalProperties": false,
            "properties": {
              "hasMore": {
                "description": "Zeigt an, ob nach dieser Ergebnisseite weitere passende Treffer vorliegen.",
                "type": "boolean",
                "x-partner-doc": {
                  "description": "Zeigt an, ob nach dieser Ergebnisseite weitere passende Treffer vorliegen.",
                  "example": false,
                  "omission": "Jede erfolgreiche Suchantwort enthält hasMore; fehlt das Feld, ist die Ergebnisseite unvollständig.",
                  "source": "Die von SmartPay ermittelte Angabe zu weiteren passenden berechtigten Treffern aus der Suchantwort lesen."
                }
              },
              "items": {
                "description": "Die Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.",
                "items": {
                  "$ref": "#/components/schemas/OwnCustomerSummary"
                },
                "maxItems": 100,
                "type": "array",
                "x-partner-doc": {
                  "condition": "Der Trefferumfang folgt mode: eigene Kundendaten bei OWN, schmale Identifikationsdaten bei IDENTIFY.",
                  "description": "Die Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.",
                  "example": [
                    {
                      "customerId": "11111111-1111-4111-8111-111111111111",
                      "customerNumber": "K12345",
                      "firstname": "Anna",
                      "lastname": "Muster"
                    }
                  ],
                  "omission": "Jede erfolgreiche Suchantwort enthält items; fehlt das Feld, ist die Ergebnisseite unvollständig. Eine vorhandene leere Liste bedeutet keine Treffer für diesen Aufruf.",
                  "source": "Die Trefferliste dieser Seite aus der Antwort von POST /customers/search lesen."
                }
              },
              "limit": {
                "description": "Die gewünschte beziehungsweise angewandte maximale Anzahl von Treffern dieser Seite.",
                "maximum": 100,
                "minimum": 1,
                "type": "integer",
                "x-partner-doc": {
                  "description": "Die gewünschte beziehungsweise angewandte maximale Anzahl von Treffern dieser Seite.",
                  "example": 25,
                  "omission": "Jede erfolgreiche Suchantwort enthält limit; fehlt das Feld, ist die Ergebnisseite unvollständig.",
                  "source": "Das für diese Ergebnisseite tatsächlich angewandte Limit aus der Suchantwort lesen."
                }
              },
              "mode": {
                "const": "OWN",
                "description": "Die ausdrücklich gewählte beziehungsweise wirksam verwendete Art der Kundensuche.",
                "type": "string",
                "x-partner-doc": {
                  "description": "Die ausdrücklich gewählte beziehungsweise wirksam verwendete Art der Kundensuche.",
                  "example": "OWN",
                  "omission": "Jede erfolgreiche Suchantwort enthält mode; fehlt das Feld, ist die Ergebnisseite unvollständig.",
                  "source": "Den tatsächlich bearbeiteten Suchmodus aus der Antwort von POST /customers/search lesen."
                }
              },
              "offset": {
                "description": "Anzahl der passenden Treffer, die vor dieser Ergebnisseite übersprungen werden.",
                "minimum": 0,
                "type": "integer",
                "x-partner-doc": {
                  "description": "Anzahl der passenden Treffer, die vor dieser Ergebnisseite übersprungen werden.",
                  "example": 0,
                  "omission": "Jede erfolgreiche Suchantwort enthält offset; fehlt das Feld, ist die Ergebnisseite unvollständig.",
                  "source": "Den für diese Ergebnisseite tatsächlich angewandten Offset aus der Suchantwort lesen."
                }
              }
            },
            "required": [
              "mode",
              "items",
              "offset",
              "limit",
              "hasMore"
            ],
            "type": "object"
          },
          {
            "additionalProperties": false,
            "properties": {
              "hasMore": {
                "description": "Zeigt an, ob nach dieser Ergebnisseite weitere passende Treffer vorliegen.",
                "type": "boolean",
                "x-partner-doc": {
                  "description": "Zeigt an, ob nach dieser Ergebnisseite weitere passende Treffer vorliegen.",
                  "example": false,
                  "omission": "Jede erfolgreiche Suchantwort enthält hasMore; fehlt das Feld, ist die Ergebnisseite unvollständig.",
                  "source": "Die von SmartPay ermittelte Angabe zu weiteren passenden berechtigten Treffern aus der Suchantwort lesen."
                }
              },
              "items": {
                "description": "Die Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.",
                "items": {
                  "$ref": "#/components/schemas/CustomerSummary"
                },
                "maxItems": 100,
                "type": "array",
                "x-partner-doc": {
                  "condition": "Der Trefferumfang folgt mode: eigene Kundendaten bei OWN, schmale Identifikationsdaten bei IDENTIFY.",
                  "description": "Die Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.",
                  "example": [
                    {
                      "city": "Musterstadt",
                      "company": "Beispielfirma",
                      "customerId": "33333333-3333-4333-8333-333333333333",
                      "firstname": "Clara",
                      "lastname": "Muster",
                      "zip": "12345"
                    },
                    {
                      "city": "Musterstadt",
                      "customerId": "44444444-4444-4444-8444-444444444444",
                      "firstname": "David",
                      "lastname": "Muster",
                      "zip": "12345"
                    }
                  ],
                  "omission": "Jede erfolgreiche Suchantwort enthält items; fehlt das Feld, ist die Ergebnisseite unvollständig. Eine vorhandene leere Liste bedeutet keine Treffer für diesen Aufruf.",
                  "source": "Die Trefferliste dieser Seite aus der Antwort von POST /customers/search lesen."
                }
              },
              "limit": {
                "description": "Die gewünschte beziehungsweise angewandte maximale Anzahl von Treffern dieser Seite.",
                "maximum": 100,
                "minimum": 1,
                "type": "integer",
                "x-partner-doc": {
                  "description": "Die gewünschte beziehungsweise angewandte maximale Anzahl von Treffern dieser Seite.",
                  "example": 25,
                  "omission": "Jede erfolgreiche Suchantwort enthält limit; fehlt das Feld, ist die Ergebnisseite unvollständig.",
                  "source": "Das für diese Ergebnisseite tatsächlich angewandte Limit aus der Suchantwort lesen."
                }
              },
              "mode": {
                "const": "IDENTIFY",
                "description": "Die ausdrücklich gewählte beziehungsweise wirksam verwendete Art der Kundensuche.",
                "type": "string",
                "x-partner-doc": {
                  "description": "Die ausdrücklich gewählte beziehungsweise wirksam verwendete Art der Kundensuche.",
                  "example": "IDENTIFY",
                  "omission": "Jede erfolgreiche Suchantwort enthält mode; fehlt das Feld, ist die Ergebnisseite unvollständig.",
                  "source": "Den tatsächlich bearbeiteten Suchmodus aus der Antwort von POST /customers/search lesen."
                }
              },
              "offset": {
                "description": "Anzahl der passenden Treffer, die vor dieser Ergebnisseite übersprungen werden.",
                "minimum": 0,
                "type": "integer",
                "x-partner-doc": {
                  "description": "Anzahl der passenden Treffer, die vor dieser Ergebnisseite übersprungen werden.",
                  "example": 0,
                  "omission": "Jede erfolgreiche Suchantwort enthält offset; fehlt das Feld, ist die Ergebnisseite unvollständig.",
                  "source": "Den für diese Ergebnisseite tatsächlich angewandten Offset aus der Suchantwort lesen."
                }
              }
            },
            "required": [
              "mode",
              "items",
              "offset",
              "limit",
              "hasMore"
            ],
            "type": "object"
          }
        ],
        "x-partner-doc": {
          "description": "Seite der Kundensuchergebnisse einschließlich Suchart und Seitenangaben. Der Umfang eines Trefferobjekts richtet sich nach der angeforderten Suchart."
        }
      },
      "CustomerSelection": {
        "description": "Alternative Kundenauswahl: vollständige Neukundendaten oder die Kennung eines berechtigt verwendbaren Bestandskunden. Beide Varianten dürfen nicht gemeinsam gesendet werden.",
        "oneOf": [
          {
            "not": {
              "required": [
                "newCustomer"
              ]
            },
            "properties": {
              "customerId": {
                "$ref": "#/components/schemas/ResourceId",
                "description": "Öffentliche Kennung des Kunden. Sie ist weder die SmartPay-Kundennummer noch Ihre Partnerkundennummer.",
                "x-partner-doc": {
                  "condition": "Nicht gemeinsam mit newCustomer; ein Suchtreffer erteilt keine fremden Vertrags- oder Änderungsrechte.",
                  "description": "Öffentliche Kennung des Kunden. Sie ist weder die SmartPay-Kundennummer noch Ihre Partnerkundennummer.",
                  "example": "11111111-1111-4111-8111-111111111111",
                  "omission": "In der Bestandskundenvariante erforderlich. Ohne customerId müssen stattdessen vollständige newCustomer-Daten übermittelt werden; beide Varianten zugleich sind unzulässig.",
                  "source": "Die Kennung eines berechtigt verwendbaren Bestandskunden, etwa aus der zulässigen Kundensuche."
                }
              }
            },
            "required": [
              "customerId"
            ],
            "type": "object"
          },
          {
            "not": {
              "required": [
                "customerId"
              ]
            },
            "properties": {
              "newCustomer": {
                "$ref": "#/components/schemas/NewCustomerInput",
                "description": "Vollständige Neukundendaten für die gemeinsame Anlage mit dem Vertrag. Keine vorgelagerte Kundenerstellung ist erforderlich.",
                "x-partner-doc": {
                  "condition": "Nicht gemeinsam mit customerId. Nach Annahme die gewählte Variante bei Replay unverändert beibehalten.",
                  "description": "Vollständige Neukundendaten für die gemeinsame Anlage mit dem Vertrag. Keine vorgelagerte Kundenerstellung ist erforderlich.",
                  "example": {
                    "address": {
                      "city": "Berlin",
                      "country": "DE",
                      "street": "Beispielstraße 10",
                      "zip": "10115"
                    },
                    "bank": {
                      "holder": "Anna Muster",
                      "iban": "DE89370400440532013000"
                    },
                    "email": "anna.muster@example.invalid",
                    "externalCustomerNumber": "PARTNER-SYNTHETIC-1001",
                    "person": {
                      "birthdate": "1985-04-12",
                      "firstname": "Anna",
                      "idCardNumber": "SYNTHETIC-GUIDE-ID-001",
                      "lastname": "Muster",
                      "salutationType": "MADAM"
                    },
                    "phone": "+493000000000"
                  },
                  "omission": "In der Neukundenvariante erforderlich. Ohne newCustomer muss stattdessen bewusst eine berechtigt verwendbare customerId übermittelt werden; beide Varianten zugleich sind unzulässig.",
                  "source": "Die Kundendaten für diese gemeinsame Kunden- und Vertragsanlegung erfassen."
                }
              }
            },
            "required": [
              "newCustomer"
            ],
            "type": "object"
          }
        ],
        "x-partner-doc": {
          "description": "Alternative Kundenauswahl: vollständige Neukundendaten oder die Kennung eines berechtigt verwendbaren Bestandskunden. Beide Varianten dürfen nicht gemeinsam gesendet werden."
        }
      },
      "CustomerSummary": {
        "additionalProperties": false,
        "description": "Schmale Trefferdaten einer Identifikation. Ein Treffer erlaubt weder das Lesen fremder Verträge noch eine Änderung gemeinsamer Kundendaten.",
        "properties": {
          "city": {
            "description": "Ort der Anschrift.",
            "type": "string",
            "x-partner-doc": {
              "description": "Ort der Anschrift.",
              "example": "Berlin",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von city lesen."
            }
          },
          "company": {
            "description": "Firma des Kunden, sofern eine Firma erfasst wird. Dies eröffnet keine zusätzliche Vertragsart.",
            "type": "string",
            "x-partner-doc": {
              "description": "Firma des Kunden, sofern eine Firma erfasst wird. Dies eröffnet keine zusätzliche Vertragsart.",
              "example": "Synthetische Beispiel GmbH",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von company lesen."
            }
          },
          "customerId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des Kunden. Sie ist weder die SmartPay-Kundennummer noch Ihre Partnerkundennummer.",
            "x-partner-doc": {
              "condition": "Der Treffer erteilt keine zusätzlichen Rechte zum Lesen fremder Verträge oder zum Ändern gemeinsamer Kundendaten.",
              "description": "Öffentliche Kennung des Kunden. Sie ist weder die SmartPay-Kundennummer noch Ihre Partnerkundennummer.",
              "example": "11111111-1111-4111-8111-111111111111",
              "omission": "customerId gehört zu jedem ausgegebenen Kundentreffer. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von customerId lesen."
            }
          },
          "firstname": {
            "description": "Vorname der Person.",
            "type": "string",
            "x-partner-doc": {
              "description": "Vorname der Person.",
              "example": "Anna",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von firstname lesen."
            }
          },
          "lastname": {
            "description": "Nachname der Person.",
            "type": "string",
            "x-partner-doc": {
              "description": "Nachname der Person.",
              "example": "Muster",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von lastname lesen."
            }
          },
          "zip": {
            "description": "Postleitzahl der Anschrift.",
            "type": "string",
            "x-partner-doc": {
              "description": "Postleitzahl der Anschrift.",
              "example": "10115",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von zip lesen."
            }
          }
        },
        "required": [
          "customerId"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Schmale Trefferdaten einer Identifikation. Ein Treffer erlaubt weder das Lesen fremder Verträge noch eine Änderung gemeinsamer Kundendaten."
        }
      },
      "DiscardRequest": {
        "additionalProperties": false,
        "description": "Bewusste Entscheidung eines dazu berechtigten Menschen, einen noch zulässig verwerfbaren eigenen Vorgang zu verwerfen. Sie ist keine allgemeine Vertragskündigung.",
        "properties": {
          "decidedByAccountId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung des aktiven menschlichen Entscheiders, der diese Fachentscheidung treffen darf. Eine Verkäuferkennung allein genügt nicht.",
            "x-partner-doc": {
              "condition": "Die konkrete Aktionsberechtigung wird auch bei Wiederholung geprüft.",
              "description": "Kennung des aktiven menschlichen Entscheiders, der diese Fachentscheidung treffen darf. Eine Verkäuferkennung allein genügt nicht.",
              "example": "693ce612-51cd-4b82-a9b3-8138851b573e",
              "omission": "Für diese Entscheidung erforderlich; fehlt decidedByAccountId, wird der Aufruf als ungültig abgewiesen. API-Zugang und Verkäufer werden nicht automatisch als Entscheider eingesetzt.",
              "source": "Die Kennung des aktiven zugehörigen Menschen, der die konkrete Entscheidung treffen darf; über die eingerichtete Benutzerzuordnung bereitstellen."
            }
          }
        },
        "required": [
          "decidedByAccountId"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Bewusste Entscheidung eines dazu berechtigten Menschen, einen noch zulässig verwerfbaren eigenen Vorgang zu verwerfen. Sie ist keine allgemeine Vertragskündigung."
        }
      },
      "DocumentMetadata": {
        "allOf": [
          {
            "if": {
              "properties": {
                "phase": {
                  "description": "Einordnung als Vorschau, Unterzeichnungsvorlage oder signierte Endfassung, sofern diese Herkunft tatsächlich ausgewiesen wird.",
                  "enum": [
                    "SIGNING_INPUT",
                    "SIGNED"
                  ],
                  "x-partner-doc": {
                    "condition": "Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.",
                    "description": "Einordnung als Vorschau, Unterzeichnungsvorlage oder signierte Endfassung, sofern diese Herkunft tatsächlich ausgewiesen wird.",
                    "example": "SIGNED",
                    "omission": "Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.",
                    "source": "Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht."
                  }
                }
              },
              "required": [
                "phase"
              ]
            },
            "then": {
              "required": [
                "signatureAttemptId"
              ]
            }
          },
          {
            "if": {
              "properties": {
                "availability": {
                  "const": "AVAILABLE",
                  "description": "Mitgeteilter Zustand der Dokumentverfügbarkeit. Eine technische Abrufstörung darf nicht als nachgewiesenes Fehlen einer Datei behandelt werden.",
                  "x-partner-doc": {
                    "condition": "Beim aktuellen Vertragsabruf werden tatsächlich verfügbare Dateien referenziert. Eine fehlende Datei oder technische Störung kann stattdessen die dokumentierte Fehlerantwort auslösen.",
                    "description": "Mitgeteilter Zustand der Dokumentverfügbarkeit. Eine technische Abrufstörung darf nicht als nachgewiesenes Fehlen einer Datei behandelt werden.",
                    "example": "AVAILABLE",
                    "omission": "Keine Verfügbarkeit aus anderen Statuswerten ableiten.",
                    "source": "Aus der berechtigten Vertrags- oder Vorgangsantwort übernehmen."
                  }
                }
              },
              "required": [
                "contentRevisionId",
                "availability"
              ]
            },
            "then": {
              "required": [
                "sha256"
              ]
            }
          }
        ],
        "dependentRequired": {
          "signatureAttemptId": [
            "operationId",
            "contentRevisionId"
          ]
        },
        "description": "Referenz und verfügbare Angaben zu einer konkreten Dokumentfassung. Beim Vertragsabruf werden Dokumentkennung, Vertragskennung, Zweck, Verfügbarkeit und Dateiprüfsumme ausgegeben. Angaben zu Vertragsfassung und Unterzeichnung können nur Vorgangsantworten bei belegter Zuordnung enthalten.",
        "properties": {
          "availability": {
            "description": "Mitgeteilter Zustand der Dokumentverfügbarkeit. Eine technische Abrufstörung darf nicht als nachgewiesenes Fehlen einer Datei behandelt werden.",
            "enum": [
              "PENDING",
              "AVAILABLE",
              "MISSING"
            ],
            "type": "string",
            "x-partner-doc": {
              "condition": "Beim aktuellen Vertragsabruf werden tatsächlich verfügbare Dateien referenziert. Eine fehlende Datei oder technische Störung kann stattdessen die dokumentierte Fehlerantwort auslösen.",
              "description": "Mitgeteilter Zustand der Dokumentverfügbarkeit. Eine technische Abrufstörung darf nicht als nachgewiesenes Fehlen einer Datei behandelt werden.",
              "example": "AVAILABLE",
              "omission": "Keine Verfügbarkeit aus anderen Statuswerten ableiten.",
              "source": "Den Wert von documents[].availability aus der berechtigten Vertrags- oder Vorgangsantwort lesen."
            }
          },
          "contentRevisionId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.",
            "x-partner-doc": {
              "condition": "Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.",
              "description": "Kennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.",
              "example": "a8b2d351-71c6-4a85-9b24-2044951c3002",
              "omission": "Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.",
              "source": "Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht."
            }
          },
          "contractId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des zugehörigen Vertrags.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des zugehörigen Vertrags.",
              "example": "73530a36-0c02-4a38-9292-7a2b185cc9d0",
              "omission": "contractId gehört zu jedem ausgegebenen Dokumenteintrag. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von documents[].contractId aus der berechtigten Vertrags- oder Vorgangsantwort lesen."
            }
          },
          "coveredContractIds": {
            "description": "Verträge, deren Bezug zu dieser Dokumentfassung ausdrücklich ausgewiesen wird. Eine gemeinsame Datei allein erteilt keine weiteren Vertragsrechte.",
            "items": {
              "$ref": "#/components/schemas/ResourceId"
            },
            "type": "array",
            "uniqueItems": true,
            "x-partner-doc": {
              "condition": "Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.",
              "description": "Verträge, deren Bezug zu dieser Dokumentfassung ausdrücklich ausgewiesen wird. Eine gemeinsame Datei allein erteilt keine weiteren Vertragsrechte.",
              "example": [
                "73530a36-0c02-4a38-9292-7a2b185cc9d0"
              ],
              "omission": "Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.",
              "source": "Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht."
            }
          },
          "documentId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung genau der referenzierten Dateifassung. Geänderte PDF-Bytes erhalten eine andere Kennung.",
            "x-partner-doc": {
              "description": "Kennung genau der referenzierten Dateifassung. Geänderte PDF-Bytes erhalten eine andere Kennung.",
              "example": "a8b2d351-71c6-4a85-9b24-2044951c3004",
              "omission": "documentId gehört zu jedem ausgegebenen Dokumenteintrag. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von documents[].documentId aus der berechtigten Vertrags- oder Vorgangsantwort lesen."
            }
          },
          "operationId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des zugehörigen Vertragsvorgangs.",
            "x-partner-doc": {
              "condition": "Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.",
              "description": "Öffentliche Kennung des zugehörigen Vertragsvorgangs.",
              "example": "a8b2d351-71c6-4a85-9b24-2044951c3001",
              "omission": "Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.",
              "source": "Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht."
            }
          },
          "phase": {
            "description": "Einordnung als Vorschau, Unterzeichnungsvorlage oder signierte Endfassung, sofern diese Herkunft tatsächlich ausgewiesen wird.",
            "enum": [
              "PREVIEW",
              "SIGNING_INPUT",
              "SIGNED"
            ],
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.",
              "description": "Einordnung als Vorschau, Unterzeichnungsvorlage oder signierte Endfassung, sofern diese Herkunft tatsächlich ausgewiesen wird.",
              "example": "SIGNED",
              "omission": "Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.",
              "source": "Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht."
            }
          },
          "purpose": {
            "description": "Fachlicher Zweck des Dokuments, etwa Vertragsdokument oder Änderungsdokument. Der Zweck allein bestätigt keine Unterschrift.",
            "enum": [
              "CONTRACT",
              "AMENDMENT"
            ],
            "type": "string",
            "x-partner-doc": {
              "condition": "Der Zweck allein bestätigt keine Gesamtunterzeichnung.",
              "description": "Fachlicher Zweck des Dokuments, etwa Vertragsdokument oder Änderungsdokument. Der Zweck allein bestätigt keine Unterschrift.",
              "example": "CONTRACT",
              "omission": "Kein Dokumentzweck mitgeteilt; Dateiname und bloße Dateiexistenz belegen weder den Zweck noch eine Unterschrift.",
              "source": "Den Wert von documents[].purpose aus der berechtigten Vertrags- oder Vorgangsantwort lesen."
            }
          },
          "sha256": {
            "description": "Prüfsumme exakt der referenzierten Dateibytes. Mit SHA256 des tatsächlich heruntergeladenen PDFs vergleichen.",
            "maxLength": 64,
            "minLength": 64,
            "pattern": "^[0-9a-f]{64}$",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur für tatsächlich verfügbare, genau dieser Fassung zugeordnete Bytes auswerten.",
              "description": "Prüfsumme exakt der referenzierten Dateibytes. Mit SHA256 des tatsächlich heruntergeladenen PDFs vergleichen.",
              "example": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
              "omission": "Ohne ausgewiesene Prüfsumme keinen Hash oder Dateibeleg erfinden.",
              "source": "Den Wert von documents[].sha256 aus der berechtigten Vertrags- oder Vorgangsantwort lesen."
            }
          },
          "signatureAttemptId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung des zugehörigen Unterzeichnungsvorgangs. Wiederzustellung und erneutes Lesen bedeuten keine neue Unterzeichnung.",
            "x-partner-doc": {
              "condition": "Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.",
              "description": "Kennung des zugehörigen Unterzeichnungsvorgangs. Wiederzustellung und erneutes Lesen bedeuten keine neue Unterzeichnung.",
              "example": "a8b2d351-71c6-4a85-9b24-2044951c3003",
              "omission": "Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.",
              "source": "Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht."
            }
          }
        },
        "required": [
          "documentId",
          "contractId"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Referenz und verfügbare Angaben zu einer konkreten Dokumentfassung. Beim Vertragsabruf werden Dokumentkennung, Vertragskennung, Zweck, Verfügbarkeit und Dateiprüfsumme ausgegeben. Angaben zu Vertragsfassung und Unterzeichnung können nur Vorgangsantworten bei belegter Zuordnung enthalten."
        }
      },
      "ErrorDetail": {
        "additionalProperties": true,
        "description": "Zusätzlicher Hinweis zu einer betroffenen öffentlichen Eingabe; keine vollständige Liste aller noch möglichen Fehler.",
        "properties": {
          "code": {
            "description": "Maschinenlesbare Fehlerkennung zu dieser Feldangabe.",
            "maxLength": 100,
            "type": "string",
            "x-partner-doc": {
              "description": "Maschinenlesbare Fehlerkennung zu dieser Feldangabe.",
              "example": "WITHDRAWAL_SELECTION_REQUIRED",
              "omission": "Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.",
              "source": "Aus derselben Feldangabe; gemeinsam mit field und message auswerten."
            }
          },
          "field": {
            "description": "Öffentlicher JSON-Feldpfad der betroffenen Angabe, sofern eine einzelne Angabe sicher benannt werden kann.",
            "maxLength": 100,
            "type": "string",
            "x-partner-doc": {
              "description": "Öffentlicher JSON-Feldpfad der betroffenen Angabe, sofern eine einzelne Angabe sicher benannt werden kann.",
              "example": "withdrawalRightSelected",
              "omission": "Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.",
              "source": "Aus details der Fehlerantwort oder des gespeicherten processingIssue."
            }
          },
          "message": {
            "description": "Sichere Erläuterung, welche Angabe zu prüfen oder nachzureichen ist. Sie enthält keine eingegebenen Personen- oder Bankwerte.",
            "maxLength": 500,
            "type": "string",
            "x-partner-doc": {
              "description": "Sichere Erläuterung, welche Angabe zu prüfen oder nachzureichen ist. Sie enthält keine eingegebenen Personen- oder Bankwerte.",
              "example": "Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.",
              "omission": "Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.",
              "source": "Aus der betreffenden Feldangabe."
            }
          }
        },
        "required": [
          "field",
          "code",
          "message"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Zusätzlicher Hinweis zu einer betroffenen öffentlichen Eingabe; keine vollständige Liste aller noch möglichen Fehler."
        }
      },
      "ExternalReference": {
        "description": "Ihre Geschäftsreferenz für genau eine Einreichung. Sie ermöglicht das Wiederfinden nach Antwortverlust und bleibt bei Wiederholungen unverändert.",
        "type": "string",
        "x-partner-doc": {
          "description": "Ihre Geschäftsreferenz für genau eine Einreichung. Sie ermöglicht das Wiederfinden nach Antwortverlust und bleibt bei Wiederholungen unverändert."
        }
      },
      "IdentifyCustomerSearchRequest": {
        "additionalProperties": false,
        "description": "Ausdrücklich angeforderte Identifikationssuche mit Nachname, Geburtsdatum und Ausweisnummer gemeinsam. Sie liefert eine schmale Ausgabe und erteilt keine fremden Vertragsrechte.",
        "properties": {
          "filters": {
            "$ref": "#/components/schemas/IdentifySearchFilters",
            "description": "Die gemeinsam anzuwendenden Fachfilter der Kundensuche.",
            "x-partner-doc": {
              "condition": "Für OWN mindestens einen wirksamen Fachfilter; für IDENTIFY Nachname, Geburtstag und Ausweisnummer gemeinsam verwenden.",
              "description": "Die gemeinsam anzuwendenden Fachfilter der Kundensuche.",
              "example": {
                "birthdate": "1985-04-12",
                "idCardNumber": "SYNTHETIC-GUIDE-ID-001",
                "lastname": "Muster"
              },
              "omission": "Bei IDENTIFY filters mit Nachname, Geburtsdatum und Ausweisnummer gemeinsam angeben; fehlt eine dieser Angaben, wird der Suchaufruf als ungültig abgewiesen.",
              "source": "Die für diesen Suchaufruf tatsächlich bekannten Kundendaten als gemeinsam anzuwendende Vergleichsangaben erfassen."
            }
          },
          "limit": {
            "default": 25,
            "description": "Die gewünschte beziehungsweise angewandte maximale Anzahl von Treffern dieser Seite.",
            "maximum": 100,
            "minimum": 1,
            "type": "integer",
            "x-partner-doc": {
              "description": "Die gewünschte beziehungsweise angewandte maximale Anzahl von Treffern dieser Seite.",
              "example": 25,
              "omission": "Der Suchaufruf verwendet limit=25.",
              "source": "Die gewünschte maximale Anzahl von Treffern dieser Ergebnisseite zwischen 1 und 100 festlegen."
            }
          },
          "mode": {
            "const": "IDENTIFY",
            "description": "Die ausdrücklich gewählte beziehungsweise wirksam verwendete Art der Kundensuche.",
            "type": "string",
            "x-partner-doc": {
              "description": "Die ausdrücklich gewählte beziehungsweise wirksam verwendete Art der Kundensuche.",
              "example": "IDENTIFY",
              "omission": "Für die Identifikationssuche muss mode=IDENTIFY ausdrücklich angegeben werden. Ohne mode gilt die eigene Suche OWN mit deren Filterregeln; vollständige Identifikationsangaben wählen den Modus nicht automatisch.",
              "source": "Für diese Suchvariante den Suchmodus IDENTIFY verwenden."
            }
          },
          "offset": {
            "default": 0,
            "description": "Anzahl der passenden Treffer, die vor dieser Ergebnisseite übersprungen werden.",
            "minimum": 0,
            "type": "integer",
            "x-partner-doc": {
              "description": "Anzahl der passenden Treffer, die vor dieser Ergebnisseite übersprungen werden.",
              "example": 0,
              "omission": "Der Suchaufruf beginnt bei offset=0.",
              "source": "Die gewünschte Startposition für diese Ergebnisseite festlegen; für die erste Seite 0 verwenden."
            }
          }
        },
        "required": [
          "mode",
          "filters"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Ausdrücklich angeforderte Identifikationssuche mit Nachname, Geburtsdatum und Ausweisnummer gemeinsam. Sie liefert eine schmale Ausgabe und erteilt keine fremden Vertragsrechte."
        }
      },
      "IdentifySearchFilters": {
        "additionalProperties": false,
        "description": "Die gemeinsam zu vergleichenden Identifikationsangaben. Alle drei Angaben müssen zusammen übereinstimmen; ein Ausweisplatzhalter ist kein Identitätsnachweis.",
        "properties": {
          "birthdate": {
            "description": "Geburtsdatum der Person als Kalendertag.",
            "format": "date",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nachname, Geburtsdatum und Ausweisnummer müssen gemeinsam übereinstimmen. Ausweisplatzhalter sind kein Trefferbeleg.",
              "description": "Geburtsdatum der Person als Kalendertag.",
              "example": "1985-04-12",
              "omission": "Bei mode=IDENTIFY erforderlich; fehlt birthdate, wird der Suchaufruf als ungültig abgewiesen. Es erfolgt kein automatischer Wechsel zu OWN.",
              "source": "Aus den tatsächlich bekannten Identifikationsangaben der zu identifizierenden Person."
            }
          },
          "idCardNumber": {
            "description": "Ausweisnummer der Person. Ein Platzhalter ist kein erforderlicher Ausweisnachweis.",
            "minLength": 1,
            "not": {
              "const": "Keine Angabe"
            },
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nachname, Geburtsdatum und Ausweisnummer müssen gemeinsam übereinstimmen. Ausweisplatzhalter sind kein Trefferbeleg.",
              "description": "Ausweisnummer der Person. Ein Platzhalter ist kein erforderlicher Ausweisnachweis.",
              "example": "SYNTHETIC-GUIDE-ID-001",
              "omission": "Bei mode=IDENTIFY erforderlich; fehlt idCardNumber, wird der Suchaufruf als ungültig abgewiesen. Es erfolgt kein automatischer Wechsel zu OWN.",
              "source": "Aus den tatsächlich bekannten Identifikationsangaben der zu identifizierenden Person."
            }
          },
          "lastname": {
            "description": "Nachname der Person.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nachname, Geburtsdatum und Ausweisnummer müssen gemeinsam übereinstimmen. Ausweisplatzhalter sind kein Trefferbeleg.",
              "description": "Nachname der Person.",
              "example": "Muster",
              "omission": "Bei mode=IDENTIFY erforderlich; fehlt lastname, wird der Suchaufruf als ungültig abgewiesen. Es erfolgt kein automatischer Wechsel zu OWN.",
              "source": "Aus den tatsächlich bekannten Identifikationsangaben der zu identifizierenden Person."
            }
          }
        },
        "required": [
          "lastname",
          "birthdate",
          "idCardNumber"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Die gemeinsam zu vergleichenden Identifikationsangaben. Alle drei Angaben müssen zusammen übereinstimmen; ein Ausweisplatzhalter ist kein Identitätsnachweis."
        }
      },
      "NewContractRequest": {
        "allOf": [
          {
            "else": {
              "not": {
                "required": [
                  "promotionId"
                ]
              }
            },
            "if": {
              "properties": {
                "priceType": {
                  "const": "PROMO_TEMP",
                  "description": "Die für das Produkt angebotene und bewusst ausgewählte Preisart.",
                  "x-partner-doc": {
                    "description": "Die für das Produkt angebotene und bewusst ausgewählte Preisart.",
                    "example": "PROMO_TEMP",
                    "omission": "Die Preisart muss bei der Vertragseinreichung angegeben werden; fehlt priceType, wird die Einreichung als ungültig abgewiesen. Auch bei nur einer angebotenen Option erfolgt keine automatische Auswahl.",
                    "source": "Eine der in ProductDetailsResponse.priceTypes angebotenen Preisarten bewusst auswählen."
                  }
                }
              },
              "required": [
                "priceType"
              ]
            },
            "then": {
              "required": [
                "promotionId"
              ]
            }
          }
        ],
        "description": "Einreichung eines klassischen nichtmobilen Einzel-Neuvertrags mit bewusst gewähltem Verkaufskontext, Produkt und Optionen. Einen Neukunden oder einen berechtigt verwendbaren Bestandskunden wählen; keine Preise oder Verarbeitungsergebnisse vorgeben.",
        "not": {
          "anyOf": [
            {
              "required": [
                "parentContractId"
              ]
            },
            {
              "required": [
                "customerUpdate"
              ]
            },
            {
              "required": [
                "conditions"
              ]
            },
            {
              "required": [
                "price"
              ]
            },
            {
              "required": [
                "prices"
              ]
            },
            {
              "required": [
                "creditRating"
              ]
            },
            {
              "required": [
                "creditResult"
              ]
            },
            {
              "required": [
                "providerResult"
              ]
            },
            {
              "required": [
                "providerOutcome"
              ]
            },
            {
              "required": [
                "provision"
              ]
            },
            {
              "required": [
                "commission"
              ]
            },
            {
              "required": [
                "signature"
              ]
            },
            {
              "required": [
                "resellerId"
              ]
            },
            {
              "required": [
                "operationId"
              ]
            },
            {
              "required": [
                "contractId"
              ]
            },
            {
              "required": [
                "contentRevisionId"
              ]
            },
            {
              "required": [
                "signatureAttemptId"
              ]
            },
            {
              "required": [
                "status"
              ]
            },
            {
              "required": [
                "easyfilius"
              ]
            },
            {
              "required": [
                "customerNumber"
              ]
            },
            {
              "required": [
                "webhookUrl"
              ]
            },
            {
              "required": [
                "callbackKey"
              ]
            },
            {
              "required": [
                "callbackSecret"
              ]
            },
            {
              "required": [
                "mobile"
              ]
            }
          ]
        },
        "properties": {
          "callbackUrl": {
            "description": "Optionales HTTPS-Ziel für Benachrichtigungen zu genau diesem Vorgang. Es benötigt einen eingerichteten separaten Callbackschlüssel.",
            "format": "uri",
            "maxLength": 4096,
            "minLength": 1,
            "type": "string",
            "x-partner-doc": {
              "condition": "Vor erster Annahme muss der separate Callbackschlüssel verfügbar sein. Keine Zugangsdaten oder URL-Fragmente, keine internen oder lokalen Ziele und keine Redirects. Ziel und Inhalt bei Replay nicht ändern.",
              "description": "Optionales HTTPS-Ziel für Benachrichtigungen zu genau diesem Vorgang. Es benötigt einen eingerichteten separaten Callbackschlüssel.",
              "example": "https://partner.example/smartpay/callbacks",
              "omission": "Für diesen Vorgang werden keine ausgehenden Partnercallbacks angefordert; der Vertragsablauf funktioniert weiter.",
              "source": "Den vorab eingerichteten erreichbaren HTTPS-Empfänger des Partners einsetzen."
            }
          },
          "customer": {
            "$ref": "#/components/schemas/CustomerSelection",
            "description": "Alternative Auswahl zwischen neuen Kundendaten und einem berechtigt verwendbaren Bestandskunden.",
            "x-partner-doc": {
              "condition": "Genau eine Variante verwenden: newCustomer oder customerId.",
              "description": "Alternative Auswahl zwischen neuen Kundendaten und einem berechtigt verwendbaren Bestandskunden.",
              "example": {
                "newCustomer": {
                  "address": {
                    "city": "Berlin",
                    "country": "DE",
                    "street": "Beispielstraße 10",
                    "zip": "10115"
                  },
                  "bank": {
                    "holder": "Anna Muster",
                    "iban": "DE89370400440532013000"
                  },
                  "email": "anna.muster@example.invalid",
                  "externalCustomerNumber": "PARTNER-SYNTHETIC-1001",
                  "person": {
                    "birthdate": "1985-04-12",
                    "firstname": "Anna",
                    "idCardNumber": "SYNTHETIC-GUIDE-ID-001",
                    "lastname": "Muster",
                    "salutationType": "MADAM"
                  },
                  "phone": "+493000000000"
                }
              },
              "omission": "Bei jeder Vertragseinreichung genau eine Kundenauswahl angeben: newCustomer oder customerId. Ohne customer wird die Einreichung als ungültig abgewiesen; ein Suchtreffer wird nicht automatisch übernommen.",
              "source": "Neue Kundendaten ausdrücklich erfassen oder eine berechtigt verwendbare customerId wählen."
            }
          },
          "debitDay": {
            "description": "Gewünschter Einzugstag innerhalb des Monats.",
            "type": "integer",
            "x-partner-doc": {
              "condition": "Nur die Werte 1, 5, 10, 15, 20, 25 und 30 sind im bestehenden Anlageweg zulässig; diese Fachprüfung ist strenger als der allgemeine Ganzzahltyp des Schemas.",
              "description": "Gewünschter Einzugstag innerhalb des Monats.",
              "example": 5,
              "omission": "Der vereinbarte Einzugstag muss bei der Vertragseinreichung angegeben werden; fehlt debitDay, wird die Einreichung als ungültig abgewiesen.",
              "source": "Mit dem Kunden vereinbarten Tag aus den im aktuellen Anlageweg unterstützten Werten wählen: 1, 5, 10, 15, 20, 25 oder 30."
            }
          },
          "durationId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der bewusst ausgewählten Laufzeitoption des Produkts.",
            "x-partner-doc": {
              "description": "Kennung der bewusst ausgewählten Laufzeitoption des Produkts.",
              "example": "17ef5d55-617c-429a-b523-637625346856",
              "omission": "Die Laufzeitkennung muss bei der Vertragseinreichung angegeben werden; fehlt durationId, wird die Einreichung als ungültig abgewiesen. Auch bei nur einer angebotenen Option erfolgt keine automatische Auswahl.",
              "source": "Laufzeitkennung aus ProductDetailsResponse.durations bewusst auswählen; Konditions- und Vertragsantworten nennen die verwendete Option."
            }
          },
          "externalReference": {
            "$ref": "#/components/schemas/ExternalReference",
            "description": "Ihre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.",
            "x-partner-doc": {
              "description": "Ihre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.",
              "example": "synthetic-guide-new-001",
              "omission": "Ihre Geschäftsreferenz muss bei der Vertragseinreichung angegeben werden; fehlt externalReference, wird die Einreichung als ungültig abgewiesen.",
              "source": "Eine eigene Geschäftsreferenz für genau diese Einreichung festlegen."
            }
          },
          "paymentId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der bewusst ausgewählten Zahlweise des Produkts.",
            "x-partner-doc": {
              "description": "Kennung der bewusst ausgewählten Zahlweise des Produkts.",
              "example": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
              "omission": "Die Zahlweisenkennung muss bei der Vertragseinreichung angegeben werden; fehlt paymentId, wird die Einreichung als ungültig abgewiesen. Auch bei nur einer angebotenen Option erfolgt keine automatische Auswahl.",
              "source": "Zahlweisenkennung aus ProductDetailsResponse.payments bewusst auswählen; Konditions- und Vertragsantworten nennen die verwendete Option."
            }
          },
          "priceType": {
            "$ref": "#/components/schemas/PriceType",
            "description": "Die für das Produkt angebotene und bewusst ausgewählte Preisart.",
            "x-partner-doc": {
              "description": "Die für das Produkt angebotene und bewusst ausgewählte Preisart.",
              "example": "AGB",
              "omission": "Die Preisart muss bei der Vertragseinreichung angegeben werden; fehlt priceType, wird die Einreichung als ungültig abgewiesen. Auch bei nur einer angebotenen Option erfolgt keine automatische Auswahl.",
              "source": "Eine der in ProductDetailsResponse.priceTypes angebotenen Preisarten bewusst auswählen."
            }
          },
          "productId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des bewusst gewählten Produkts.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des bewusst gewählten Produkts.",
              "example": "51f866e9-2307-47c6-8de3-e6b1f24f8d31",
              "omission": "Die Produktkennung muss bei der Vertragseinreichung angegeben werden; fehlt productId, wird die Einreichung als ungültig abgewiesen. Auch bei nur einer angebotenen Option erfolgt keine automatische Auswahl.",
              "source": "Produktkennung aus der berechtigten Produktliste oder Produktdetailantwort; Antworten nennen das zugehörige Produkt."
            }
          },
          "promotionId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der ausgewählten befristeten Promotion.",
            "x-partner-doc": {
              "condition": "Nur bei priceType=PROMO_TEMP angeben; bei AGB oder PROMO ist promotionId nicht zulässig. Die Promotion muss aktuell aktiv, dem Produkt zugeordnet und für den Neuabschluss zulässig sein; eine nur für Verlängerungen vorgesehene Promotion ist nicht verwendbar. Die befristete Promotion setzt die Zahlweise MONTHLY voraus.",
              "description": "Kennung der ausgewählten befristeten Promotion.",
              "example": "70000000-0000-4000-8000-000000000001",
              "omission": "Bei anderen Preisarten keine Promotion mitsenden; bei der befristeten Preisart die konkrete Promotion auswählen.",
              "source": "Passende Promotionskennung aus ProductDetailsResponse.promotions auswählen; Antworten weisen die zugeordnete Promotion aus."
            }
          },
          "requestedStartDate": {
            "description": "Gewünschter Vertragsbeginn. Er wird auf den für Produkt und Zugang zulässigen Zeitraum geprüft.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "condition": "Der zulässige Zeitraum reicht im üblichen Anlageweg von heute bis sechs Monate voraus. Ein für Rückdatierung freigegebener Zugang kann bis einen Monat zurückreichen; daraus folgt keine allgemeine Rückdatierungsbefugnis.",
              "description": "Gewünschter Vertragsbeginn. Er wird auf den für Produkt und Zugang zulässigen Zeitraum geprüft.",
              "example": "2026-11-01",
              "omission": "Bei Auslassen wird der aktuelle Tag im vorhandenen Anlageweg zugrunde gelegt.",
              "source": "Den mit dem Kunden gewünschten Vertragsbeginn für diese Einreichung erfassen; den zulässigen Zeitraum für Produkt und Zugang beachten."
            }
          },
          "salesContext": {
            "$ref": "#/components/schemas/SalesContext",
            "description": "Der Verkäufer und die gegebenenfalls zugeordnete Filiale dieses Verkaufs. Verkäufer und Filiale sind keine Kundendaten.",
            "x-partner-doc": {
              "description": "Der Verkäufer und die gegebenenfalls zugeordnete Filiale dieses Verkaufs. Verkäufer und Filiale sind keine Kundendaten.",
              "example": {
                "branchId": "30000000-0000-4000-8000-000000000001",
                "sellerAccountId": "20000000-0000-4000-8000-000000000001"
              },
              "omission": "Für die Vertragseinreichung erforderlich. Fehlt salesContext, wird die Einreichung als ungültig abgewiesen; eine vorherige Abfrage ersetzt die Angabe nicht.",
              "source": "Verkäufer und gegebenenfalls Filiale bewusst aus GET /sales-context auswählen und deren Kennungen für diesen Verkauf übermitteln."
            }
          },
          "serialNumbers": {
            "$ref": "#/components/schemas/SerialNumbersInput",
            "description": "Die zum Produkt vorgegebene beziehungsweise im Vertrag ausgewiesene Liste von Geräteeinträgen.",
            "x-partner-doc": {
              "condition": "Bei enabled=true genau slotCount Einträge. Bei slotCount=0 ist [] möglich. Nur freigegebene Felder verwenden; bei benannten Einträgen die dafür verlangten Werte ausfüllen.",
              "description": "Die zum Produkt vorgegebene beziehungsweise im Vertrag ausgewiesene Liste von Geräteeinträgen.",
              "example": [
                {
                  "name": "Gerät 1",
                  "serialNumber1": "SYNTHETIC-SN-001"
                }
              ],
              "omission": "Bei enabled=false auslassen. Bei enabled=true die vollständige Slotliste ausdrücklich übermitteln; keine leere Ersatzliste erzeugen.",
              "source": "Konfiguration aus ProductDetailsResponse.serialNumbers lesen; echte Gerätewerte passend dazu erfassen."
            }
          },
          "type": {
            "const": "NEW_CONTRACT",
            "description": "Optionales Fachlabel des Neuvertrags. Es muss nicht gesetzt werden; der verwendete Vertragsendpunkt bestimmt die Vertragsart.",
            "type": "string",
            "x-partner-doc": {
              "condition": "Falls angegeben, im öffentlichen Profil NEW_CONTRACT verwenden. Die Dokumentation führt keine zusätzliche Laufzeitprüfung unbekannter Außenfelder ein.",
              "description": "Optionales Fachlabel des Neuvertrags. Es muss nicht gesetzt werden; der verwendete Vertragsendpunkt bestimmt die Vertragsart.",
              "example": "NEW_CONTRACT",
              "omission": "Das Fachlabel kann ausgelassen werden; der Vertrags-POST bleibt dieselbe Neuvertragseinreichung.",
              "source": "Falls benötigt, das in diesem öffentlichen Profil beschriebene Fachlabel verwenden."
            }
          },
          "withdrawalRightSelected": {
            "description": "Bewusste Wahl zum Widerrufsrecht: true übernimmt die konfigurierten Widerrufstage des Produkts; false verwendet im bestehenden Ablauf 0 Widerrufstage. Dies ist keine allgemeine Frist- oder Verzichtsbefugnis.",
            "type": "boolean",
            "x-partner-doc": {
              "condition": "Bei freigegebener Auswahl und Kunde ohne Firma ausdrücklich true oder false aus der bewussten Entscheidung übermitteln. True übernimmt die am Produkt konfigurierten Tage; false verwendet 0 Tage. Ohne Freigabe oder bei Firma ist true unzulässig. Keine allgemeine Aussage zu gesetzlichen Rechten.",
              "description": "Bewusste Wahl zum Widerrufsrecht: true übernimmt die konfigurierten Widerrufstage des Produkts; false verwendet im bestehenden Ablauf 0 Widerrufstage. Dies ist keine allgemeine Frist- oder Verzichtsbefugnis.",
              "example": false,
              "omission": "Ist die Auswahl für Ihren Zugang bei einem Privatkunden ohne Firma freigegeben, führt Auslassen zu HTTP 400 mit code WITHDRAWAL_SELECTION_REQUIRED. Sonst erfolgt keine solche Auswahl; der vorhandene Ablauf verwendet 0 konfigurierte Widerrufstage.",
              "source": "Die bewusste Wahl des Kunden übernehmen. Ob diese Auswahl für Ihren Zugang angeboten werden muss, bei der Zugangseinrichtung bestätigen lassen; GET /sales-context liefert diese Einstellung nicht."
            }
          }
        },
        "required": [
          "externalReference",
          "salesContext",
          "productId",
          "customer",
          "durationId",
          "paymentId",
          "priceType",
          "debitDay"
        ],
        "type": "object",
        "x-partner-doc": {
          "additionalFields": {
            "type": {
              "condition": "Falls angegeben, im öffentlichen Profil NEW_CONTRACT verwenden. Die Dokumentation führt keine zusätzliche Laufzeitprüfung unbekannter Außenfelder ein.",
              "description": "Optionales Fachlabel des Neuvertrags. Es muss nicht gesetzt werden; der verwendete Vertragsendpunkt bestimmt die Vertragsart.",
              "example": "NEW_CONTRACT",
              "omission": "Das Fachlabel kann ausgelassen werden; der Vertrags-POST bleibt dieselbe Neuvertragseinreichung.",
              "source": "Falls benötigt, das in diesem öffentlichen Profil beschriebene Fachlabel verwenden."
            }
          },
          "description": "Einreichung eines klassischen nichtmobilen Einzel-Neuvertrags mit bewusst gewähltem Verkaufskontext, Produkt und Optionen. Einen Neukunden oder einen berechtigt verwendbaren Bestandskunden wählen; keine Preise oder Verarbeitungsergebnisse vorgeben."
        }
      },
      "NewCustomerInput": {
        "anyOf": [
          {
            "required": [
              "phone"
            ]
          },
          {
            "required": [
              "mobile"
            ]
          }
        ],
        "description": "Neukundendaten für die gemeinsame Anlage mit dem Vertrag. Person, Anschrift, Haupt-E-Mail und Bankdaten angeben; als Telefonkontakt genügt Telefon oder Mobiltelefon. Firma, Ausweis- und Steuerangaben richten sich nach den beschriebenen Bedingungen.",
        "not": {
          "anyOf": [
            {
              "required": [
                "easyfilius"
              ]
            },
            {
              "required": [
                "customerNumber"
              ]
            }
          ]
        },
        "properties": {
          "address": {
            "$ref": "#/components/schemas/AddressInput",
            "description": "Die Anschrift des Neukunden.",
            "x-partner-doc": {
              "description": "Die Anschrift des Neukunden.",
              "example": {
                "city": "Berlin",
                "country": "DE",
                "street": "Beispielstraße 10",
                "zip": "10115"
              },
              "omission": "Die Anschrift muss bei customer.newCustomer angegeben werden; fehlt address, wird die Neukundeneinreichung als ungültig abgewiesen.",
              "source": "Die tatsächliche Anschrift des Neukunden mit Straße und Hausnummer, Postleitzahl, Ort und Land erfassen."
            }
          },
          "bank": {
            "$ref": "#/components/schemas/BankInput",
            "description": "Die Bankverbindung des Neukunden für den vorhandenen Zahlungsweg.",
            "x-partner-doc": {
              "description": "Die Bankverbindung des Neukunden für den vorhandenen Zahlungsweg.",
              "example": {
                "holder": "Anna Muster",
                "iban": "DE89370400440532013000"
              },
              "omission": "Die Bankverbindung muss bei customer.newCustomer angegeben werden; fehlt bank, wird die Neukundeneinreichung als ungültig abgewiesen.",
              "source": "Die für den Zahlungsweg des Neukunden vorgesehene Bankverbindung erfassen."
            }
          },
          "company": {
            "description": "Firma des Kunden, sofern eine Firma erfasst wird. Dies eröffnet keine zusätzliche Vertragsart.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Eine angegebene Firma wird auf Plausibilität geprüft und nach den vorhandenen Regeln aufbereitet.",
              "description": "Firma des Kunden, sofern eine Firma erfasst wird. Dies eröffnet keine zusätzliche Vertragsart.",
              "example": "Synthetische Beispiel GmbH",
              "omission": "Es wird keine Firma für den Neukunden erfasst.",
              "source": "Die vom Neukunden angegebene Firma erfassen, sofern der Kunde unter einer Firma geführt werden soll."
            }
          },
          "email": {
            "description": "Die Haupt-E-Mail-Adresse des Kunden. Sie ist auch für die Unterzeichnung relevant.",
            "format": "email",
            "type": "string",
            "x-partner-doc": {
              "description": "Die Haupt-E-Mail-Adresse des Kunden. Sie ist auch für die Unterzeichnung relevant.",
              "example": "anna.muster@example.invalid",
              "omission": "Die Haupt-E-Mail-Adresse muss bei customer.newCustomer angegeben werden; fehlt email, wird die Neukundeneinreichung als ungültig abgewiesen.",
              "source": "Die vom Neukunden angegebene Haupt-E-Mail-Adresse erfassen; sie wird im Unterzeichnungsablauf verwendet."
            }
          },
          "externalCustomerNumber": {
            "description": "Ihre eigene Kundennummer beim Partner. Die SmartPay-Kundennummer wird getrennt von SmartPay vergeben.",
            "type": "string",
            "x-partner-doc": {
              "description": "Ihre eigene Kundennummer beim Partner. Die SmartPay-Kundennummer wird getrennt von SmartPay vergeben.",
              "example": "PARTNER-SYNTHETIC-1001",
              "omission": "Es wird keine eigene Partnerkundennummer übermittelt; SmartPay vergibt die eigene customerNumber unabhängig davon.",
              "source": "Ihre eigene Kundennummer aus dem Partnersystem."
            }
          },
          "mobile": {
            "description": "Mobiltelefonkontakt des Kunden. Dieses Feld ist keine Mobilfunkbestellung.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Mindestens phone oder mobile angeben. Kundenkontakt ist keine Mobilfunkbestellung.",
              "description": "Mobiltelefonkontakt des Kunden. Dieses Feld ist keine Mobilfunkbestellung.",
              "example": "+491700000000",
              "omission": "Der jeweils andere Telefonkontakt muss vorhanden sein; beide gleichzeitig auszulassen ist nicht zulässig.",
              "source": "Die vom Neukunden angegebene Mobiltelefonnummer als Kundenkontakt erfassen."
            }
          },
          "person": {
            "$ref": "#/components/schemas/PersonInput",
            "description": "Die Personendaten des Neukunden.",
            "x-partner-doc": {
              "description": "Die Personendaten des Neukunden.",
              "example": {
                "birthdate": "1985-04-12",
                "firstname": "Anna",
                "idCardNumber": "SYNTHETIC-GUIDE-ID-001",
                "lastname": "Muster",
                "salutationType": "MADAM"
              },
              "omission": "Personendaten müssen bei customer.newCustomer angegeben werden; fehlt person, wird die Neukundeneinreichung als ungültig abgewiesen.",
              "source": "Die Personendaten des Neukunden für die gemeinsame Kunden- und Vertragsanlegung erfassen."
            }
          },
          "phone": {
            "description": "Telefonkontakt des Kunden; unabhängig davon, ob das bestellte Produkt Mobilfunk betrifft.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Mindestens phone oder mobile angeben. Kundenkontakt ist keine Mobilfunkbestellung.",
              "description": "Telefonkontakt des Kunden; unabhängig davon, ob das bestellte Produkt Mobilfunk betrifft.",
              "example": "+493000000000",
              "omission": "Der jeweils andere Telefonkontakt muss vorhanden sein; beide gleichzeitig auszulassen ist nicht zulässig.",
              "source": "Die vom Neukunden angegebene Telefonnummer als Kundenkontakt erfassen."
            }
          },
          "taxRegime": {
            "description": "Der angeforderte zulässige Steuerkontext des Kunden. Eine Angabe verleiht keine freie Wahl der Besteuerung.",
            "enum": [
              "STANDARD",
              "REVERSE_CHARGE"
            ],
            "type": "string",
            "x-partner-doc": {
              "condition": "REVERSE_CHARGE verlangt eine ausländische Anschrift und eine USt-ID; bei deutscher Anschrift ist diese Wahl nicht zulässig.",
              "description": "Der angeforderte zulässige Steuerkontext des Kunden. Eine Angabe verleiht keine freie Wahl der Besteuerung.",
              "example": "STANDARD",
              "omission": "Es bleibt der reguläre Steuerkontext STANDARD des Anlagewegs.",
              "source": "Den im konkreten Kunden- und Länderkontext zulässigen Steuerkontext verwenden; die Bedingungen für REVERSE_CHARGE beachten."
            }
          },
          "vatId": {
            "description": "Umsatzsteuer-Identifikationsnummer des Kunden im zulässigen Steuerkontext.",
            "maxLength": 64,
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Bei ausländischer Anschrift sowie für REVERSE_CHARGE angeben. Die Angabe wird von umgebenden Leerzeichen bereinigt und großgeschrieben; dies ist keine amtliche Bestätigung.",
              "description": "Umsatzsteuer-Identifikationsnummer des Kunden im zulässigen Steuerkontext.",
              "example": "SYNTHETIC-VAT-001",
              "omission": "Bei einer Anschrift in Deutschland wird keine USt-ID übermittelt; bei ausländischer Anschrift ist sie im aktuellen Anlageweg erforderlich.",
              "source": "Die vom Kunden für den zutreffenden Steuerkontext angegebene USt-ID übernehmen."
            }
          }
        },
        "required": [
          "person",
          "address",
          "email",
          "bank"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Neukundendaten für die gemeinsame Anlage mit dem Vertrag. Person, Anschrift, Haupt-E-Mail und Bankdaten angeben; als Telefonkontakt genügt Telefon oder Mobiltelefon. Firma, Ausweis- und Steuerangaben richten sich nach den beschriebenen Bedingungen."
        }
      },
      "OperationStatus": {
        "description": "Fortschritt eines Vertragsvorgangs. Ein bestätigter Abschluss setzt die zugehörige Unterschrift, Endfassung und erforderliche Fachentscheidung voraus. Eine Annahme oder Unterzeichnung allein ist noch kein Fachabschluss.",
        "enum": [
          "PREPARED",
          "PENDING_SIGNATURE",
          "REQUIRES_REVIEW",
          "SCHEDULED",
          "PROCESSING",
          "OUTCOME_UNKNOWN",
          "COMPLETED",
          "REJECTED",
          "DISCARD_PENDING",
          "DISCARDED"
        ],
        "type": "string",
        "x-partner-doc": {
          "description": "Fortschritt eines Vertragsvorgangs. Ein bestätigter Abschluss setzt die zugehörige Unterschrift, Endfassung und erforderliche Fachentscheidung voraus. Eine Annahme oder Unterzeichnung allein ist noch kein Fachabschluss.",
          "values": {
            "COMPLETED": "Gesamtunterzeichnung, zugehörige Endfassung, erforderliche Risikoentscheidung und initiale Fachwirkungen sind bestätigt. Spätere reguläre Rechnungen und Einzüge gehören nicht zu diesem Abschlussnachweis.",
            "DISCARDED": "Das zulässige Verwerfen und die Nichtfortsetzung sind bestätigt. Dies ist keine allgemeine Kündigung eines erfüllten Vertrags.",
            "DISCARD_PENDING": "Die Verwerfentscheidung wurde angenommen; zulässige Rücknahme und Nichtfortsetzung sind noch nicht bestätigt.",
            "OUTCOME_UNKNOWN": "Der Ausgang eines Bearbeitungsschritts ist nicht sicher bestätigt. Keine zweite Einreichung oder erneute Fachentscheidung blind auslösen.",
            "PENDING_SIGNATURE": "Die benötigte Gesamtunterzeichnung der zugehörigen Vertragsfassung steht noch aus.",
            "PREPARED": "Der Vorgang ist vorbereitet. Eine erforderliche Unterzeichnung oder weitere Fachbearbeitung kann noch ausstehen.",
            "PROCESSING": "Die Bearbeitung läuft beziehungsweise ist noch nicht als abgeschlossen bestätigt.",
            "REJECTED": "Die Vorbereitung wurde abgewiesen. Daraus folgt kein bestätigter Vertragsabschluss.",
            "REQUIRES_REVIEW": "Eine fachliche Prüfung oder bewusste Entscheidung ist erforderlich; nicht als bestätigten Abschluss behandeln.",
            "SCHEDULED": "Die weitere Bearbeitung ist zu einem Termin vorgesehen. Die Planung bestätigt noch keine Ausführung."
          }
        }
      },
      "OperationType": {
        "description": "Die Art des angebotenen Vertragsvorgangs. Dieses öffentliche Profil beschreibt den klassischen nichtmobilen Einzel-Neuvertrag.",
        "enum": [
          "NEW_CONTRACT"
        ],
        "type": "string",
        "x-partner-doc": {
          "description": "Die Art des angebotenen Vertragsvorgangs. Dieses öffentliche Profil beschreibt den klassischen nichtmobilen Einzel-Neuvertrag."
        }
      },
      "OwnCustomerSearchRequest": {
        "additionalProperties": false,
        "description": "Suche im eigenen berechtigten Kundenbestand mit mindestens einem Fachfilter. Mehrere Filter grenzen gemeinsam ein; dieser lesende POST erfordert keinen Idempotenzschlüssel.",
        "properties": {
          "filters": {
            "$ref": "#/components/schemas/OwnSearchFilters",
            "description": "Die gemeinsam anzuwendenden Fachfilter der Kundensuche.",
            "x-partner-doc": {
              "condition": "Für OWN mindestens einen wirksamen Fachfilter; für IDENTIFY Nachname, Geburtstag und Ausweisnummer gemeinsam verwenden.",
              "description": "Die gemeinsam anzuwendenden Fachfilter der Kundensuche.",
              "example": {
                "customerNumber": "K12345"
              },
              "omission": "Bei OWN ein filters-Objekt mit mindestens einem wirksamen Fachfilter angeben; ohne Filter wird der Suchaufruf als ungültig abgewiesen.",
              "source": "Die für diesen Suchaufruf tatsächlich bekannten Kundendaten als gemeinsam anzuwendende Vergleichsangaben erfassen."
            }
          },
          "limit": {
            "default": 25,
            "description": "Die gewünschte beziehungsweise angewandte maximale Anzahl von Treffern dieser Seite.",
            "maximum": 100,
            "minimum": 1,
            "type": "integer",
            "x-partner-doc": {
              "description": "Die gewünschte beziehungsweise angewandte maximale Anzahl von Treffern dieser Seite.",
              "example": 25,
              "omission": "Der Suchaufruf verwendet limit=25.",
              "source": "Die gewünschte maximale Anzahl von Treffern dieser Ergebnisseite zwischen 1 und 100 festlegen."
            }
          },
          "mode": {
            "const": "OWN",
            "default": "OWN",
            "description": "Die ausdrücklich gewählte beziehungsweise wirksam verwendete Art der Kundensuche.",
            "type": "string",
            "x-partner-doc": {
              "description": "Die ausdrücklich gewählte beziehungsweise wirksam verwendete Art der Kundensuche.",
              "example": "OWN",
              "omission": "Bei Auslassen wird OWN verwendet; IDENTIFY muss ausdrücklich angefordert werden.",
              "source": "Für diese Suchvariante den Suchmodus OWN verwenden."
            }
          },
          "offset": {
            "default": 0,
            "description": "Anzahl der passenden Treffer, die vor dieser Ergebnisseite übersprungen werden.",
            "minimum": 0,
            "type": "integer",
            "x-partner-doc": {
              "description": "Anzahl der passenden Treffer, die vor dieser Ergebnisseite übersprungen werden.",
              "example": 0,
              "omission": "Der Suchaufruf beginnt bei offset=0.",
              "source": "Die gewünschte Startposition für diese Ergebnisseite festlegen; für die erste Seite 0 verwenden."
            }
          }
        },
        "required": [
          "filters"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Suche im eigenen berechtigten Kundenbestand mit mindestens einem Fachfilter. Mehrere Filter grenzen gemeinsam ein; dieser lesende POST erfordert keinen Idempotenzschlüssel."
        }
      },
      "OwnCustomerSummary": {
        "additionalProperties": false,
        "description": "Trefferdaten aus dem eigenen berechtigten Kundenbestand. Die SmartPay-Kundennummer und die eigene Partnerkundennummer sind unterschiedliche Angaben.",
        "properties": {
          "city": {
            "description": "Ort der Anschrift.",
            "type": "string",
            "x-partner-doc": {
              "description": "Ort der Anschrift.",
              "example": "Berlin",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von city lesen."
            }
          },
          "company": {
            "description": "Firma des Kunden, sofern eine Firma erfasst wird. Dies eröffnet keine zusätzliche Vertragsart.",
            "type": "string",
            "x-partner-doc": {
              "description": "Firma des Kunden, sofern eine Firma erfasst wird. Dies eröffnet keine zusätzliche Vertragsart.",
              "example": "Synthetische Beispiel GmbH",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von company lesen."
            }
          },
          "customerId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des Kunden. Sie ist weder die SmartPay-Kundennummer noch Ihre Partnerkundennummer.",
            "x-partner-doc": {
              "condition": "Der Treffer erteilt keine zusätzlichen Rechte zum Lesen fremder Verträge oder zum Ändern gemeinsamer Kundendaten.",
              "description": "Öffentliche Kennung des Kunden. Sie ist weder die SmartPay-Kundennummer noch Ihre Partnerkundennummer.",
              "example": "11111111-1111-4111-8111-111111111111",
              "omission": "customerId gehört zu jedem ausgegebenen Kundentreffer. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von customerId lesen."
            }
          },
          "customerNumber": {
            "description": "Von SmartPay vergebene Kundennummer. Sie ist von Ihrer eigenen Partnerkundennummer und der Kunden-UUID getrennt.",
            "type": "string",
            "x-partner-doc": {
              "description": "Von SmartPay vergebene Kundennummer. Sie ist von Ihrer eigenen Partnerkundennummer und der Kunden-UUID getrennt.",
              "example": "K12345",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von customerNumber lesen."
            }
          },
          "email": {
            "description": "Die Haupt-E-Mail-Adresse des Kunden. Sie ist auch für die Unterzeichnung relevant.",
            "type": "string",
            "x-partner-doc": {
              "description": "Die Haupt-E-Mail-Adresse des Kunden. Sie ist auch für die Unterzeichnung relevant.",
              "example": "anna.muster@example.invalid",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von email lesen."
            }
          },
          "externalCustomerNumber": {
            "description": "Ihre eigene Kundennummer beim Partner. Die SmartPay-Kundennummer wird getrennt von SmartPay vergeben.",
            "type": "string",
            "x-partner-doc": {
              "description": "Ihre eigene Kundennummer beim Partner. Die SmartPay-Kundennummer wird getrennt von SmartPay vergeben.",
              "example": "PARTNER-SYNTHETIC-1001",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von externalCustomerNumber lesen."
            }
          },
          "firstname": {
            "description": "Vorname der Person.",
            "type": "string",
            "x-partner-doc": {
              "description": "Vorname der Person.",
              "example": "Anna",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von firstname lesen."
            }
          },
          "lastname": {
            "description": "Nachname der Person.",
            "type": "string",
            "x-partner-doc": {
              "description": "Nachname der Person.",
              "example": "Muster",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von lastname lesen."
            }
          },
          "zip": {
            "description": "Postleitzahl der Anschrift.",
            "type": "string",
            "x-partner-doc": {
              "description": "Postleitzahl der Anschrift.",
              "example": "10115",
              "omission": "Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.",
              "source": "Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von zip lesen."
            }
          }
        },
        "required": [
          "customerId"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Trefferdaten aus dem eigenen berechtigten Kundenbestand. Die SmartPay-Kundennummer und die eigene Partnerkundennummer sind unterschiedliche Angaben."
        }
      },
      "OwnSearchFilters": {
        "additionalProperties": false,
        "description": "Fachfilter der eigenen Kundensuche. Nur tatsächlich bekannte Suchwerte senden; mehrere Angaben wirken gemeinsam und eröffnen keine Suche außerhalb des eigenen Bestands.",
        "minProperties": 1,
        "properties": {
          "birthdate": {
            "description": "Geburtsdatum der Person als Kalendertag.",
            "format": "date",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Gleichheitsvergleich innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam.",
              "description": "Geburtsdatum der Person als Kalendertag.",
              "example": "1985-04-12",
              "omission": "Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.",
              "source": "Das bekannte Geburtsdatum des gesuchten Kunden verwenden."
            }
          },
          "city": {
            "description": "Ort der Anschrift.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Teiltreffer innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam. Keine eigene Wildcardsprache voraussetzen.",
              "description": "Ort der Anschrift.",
              "example": "Berlin",
              "omission": "Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.",
              "source": "Den bekannten Ort der Kundenanschrift verwenden."
            }
          },
          "customerNumber": {
            "description": "Von SmartPay vergebene Kundennummer. Sie ist von Ihrer eigenen Partnerkundennummer und der Kunden-UUID getrennt.",
            "minLength": 1,
            "pattern": "^K[0-9]{5,}(?![\\s\\S])",
            "type": "string",
            "x-partner-doc": {
              "condition": "Gleichheitsvergleich innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam.",
              "description": "Von SmartPay vergebene Kundennummer. Sie ist von Ihrer eigenen Partnerkundennummer und der Kunden-UUID getrennt.",
              "example": "K12345",
              "omission": "Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.",
              "source": "Die bereits bekannte, von SmartPay vergebene Kundennummer verwenden."
            }
          },
          "email": {
            "description": "Die Haupt-E-Mail-Adresse des Kunden. Sie ist auch für die Unterzeichnung relevant.",
            "format": "email",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Gleichheitsvergleich innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam.",
              "description": "Die Haupt-E-Mail-Adresse des Kunden. Sie ist auch für die Unterzeichnung relevant.",
              "example": "anna.muster@example.invalid",
              "omission": "Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.",
              "source": "Die bekannte Haupt-E-Mail-Adresse des gesuchten Kunden verwenden."
            }
          },
          "externalCustomerNumber": {
            "description": "Ihre eigene Kundennummer beim Partner. Die SmartPay-Kundennummer wird getrennt von SmartPay vergeben.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Teiltreffer innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam. Keine eigene Wildcardsprache voraussetzen.",
              "description": "Ihre eigene Kundennummer beim Partner. Die SmartPay-Kundennummer wird getrennt von SmartPay vergeben.",
              "example": "PARTNER-SYNTHETIC-1001",
              "omission": "Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.",
              "source": "Ihre im Partnersystem geführte und bei SmartPay hinterlegte eigene Kundennummer verwenden."
            }
          },
          "familyMemberLastname": {
            "description": "Nachname eines zugeordneten Angehörigen als Suchkriterium innerhalb eigener berechtigter Verträge.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur die zu eigenen berechtigten Verträgen zugeordneten Angehörigen werden berücksichtigt.",
              "description": "Nachname eines zugeordneten Angehörigen als Suchkriterium innerhalb eigener berechtigter Verträge.",
              "example": "Muster",
              "omission": "Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.",
              "source": "Den bekannten Nachnamen eines dem eigenen berechtigten Vertrag zugeordneten Angehörigen verwenden."
            }
          },
          "firstname": {
            "description": "Vorname der Person.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Teiltreffer innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam. Keine eigene Wildcardsprache voraussetzen.",
              "description": "Vorname der Person.",
              "example": "Anna",
              "omission": "Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.",
              "source": "Den bekannten Vornamen des gesuchten Kunden verwenden."
            }
          },
          "lastname": {
            "description": "Nachname der Person.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Teiltreffer innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam. Keine eigene Wildcardsprache voraussetzen.",
              "description": "Nachname der Person.",
              "example": "Muster",
              "omission": "Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.",
              "source": "Den bekannten Nachnamen des gesuchten Kunden verwenden."
            }
          },
          "serviceCardNumber": {
            "description": "Kundenkarte beziehungsweise Servicekartennummer eines passenden eigenen Vertrags als Suchkriterium.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Teiltreffer innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam. Keine eigene Wildcardsprache voraussetzen.",
              "description": "Kundenkarte beziehungsweise Servicekartennummer eines passenden eigenen Vertrags als Suchkriterium.",
              "example": "SYNTHETIC-CARD-001",
              "omission": "Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.",
              "source": "Die bekannte Servicekartennummer eines eigenen berechtigten Vertrags verwenden."
            }
          },
          "street": {
            "description": "Straße und Hausnummer als gemeinsame Anschriftszeile.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Teiltreffer innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam. Keine eigene Wildcardsprache voraussetzen.",
              "description": "Straße und Hausnummer als gemeinsame Anschriftszeile.",
              "example": "Beispielstraße 10",
              "omission": "Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.",
              "source": "Die bekannte Straße mit Hausnummer der Kundenanschrift verwenden."
            }
          },
          "zip": {
            "description": "Postleitzahl der Anschrift.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Gleichheitsvergleich innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam.",
              "description": "Postleitzahl der Anschrift.",
              "example": "10115",
              "omission": "Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.",
              "source": "Die bekannte Postleitzahl der Kundenanschrift verwenden."
            }
          }
        },
        "type": "object",
        "x-partner-doc": {
          "description": "Fachfilter der eigenen Kundensuche. Nur tatsächlich bekannte Suchwerte senden; mehrere Angaben wirken gemeinsam und eröffnen keine Suche außerhalb des eigenen Bestands."
        }
      },
      "PersonInput": {
        "description": "Personendaten des Neukunden. Eine Ausweisnummer kommt hinzu, wenn das gewählte Produkt sie verlangt.",
        "properties": {
          "birthdate": {
            "description": "Geburtsdatum der Person als Kalendertag.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Geburtsdatum der Person als Kalendertag.",
              "example": "1985-04-12",
              "omission": "Bei customer.newCustomer.person erforderlich; fehlt birthdate, wird die Neukundeneinreichung als ungültig abgewiesen.",
              "source": "Das tatsächliche Geburtsdatum des Neukunden als Kalendertag erfassen."
            }
          },
          "firstname": {
            "description": "Vorname der Person.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "description": "Vorname der Person.",
              "example": "Anna",
              "omission": "Bei customer.newCustomer.person erforderlich; fehlt firstname, wird die Neukundeneinreichung als ungültig abgewiesen.",
              "source": "Den vom Neukunden angegebenen Vornamen erfassen."
            }
          },
          "idCardNumber": {
            "description": "Ausweisnummer der Person. Ein Platzhalter ist kein erforderlicher Ausweisnachweis.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "condition": "Bei idCardNumberRequired=true eine verwendbare nichtleere Ausweisnummer angeben; „Keine Angabe“ ist dafür kein Ersatz.",
              "description": "Ausweisnummer der Person. Ein Platzhalter ist kein erforderlicher Ausweisnachweis.",
              "example": "SYNTHETIC-GUIDE-ID-001",
              "omission": "Nur zulässig, wenn das gewählte Produkt keine Ausweisangabe verlangt.",
              "source": "Aus der tatsächlichen Ausweisangabe des Kunden; Produktanforderung zuvor in customerRequirements.idCardNumberRequired lesen."
            }
          },
          "lastname": {
            "description": "Nachname der Person.",
            "minLength": 1,
            "pattern": "\\S",
            "type": "string",
            "x-partner-doc": {
              "description": "Nachname der Person.",
              "example": "Muster",
              "omission": "Bei customer.newCustomer.person erforderlich; fehlt lastname, wird die Neukundeneinreichung als ungültig abgewiesen.",
              "source": "Den vom Neukunden angegebenen Nachnamen erfassen."
            }
          },
          "salutationType": {
            "description": "Die gewählte Anrede der Person.",
            "enum": [
              "MISTER",
              "MADAM",
              "DIVERSE"
            ],
            "examples": [
              "MADAM"
            ],
            "type": "string",
            "x-partner-doc": {
              "description": "Die gewählte Anrede der Person.",
              "example": "MADAM",
              "omission": "Bei customer.newCustomer.person erforderlich; fehlt salutationType, wird die Neukundeneinreichung als ungültig abgewiesen.",
              "source": "Die vom Neukunden gewählte Anrede aus den angebotenen Anredewerten übernehmen."
            }
          },
          "title": {
            "description": "Titel der Person, soweit er erfasst werden soll.",
            "type": "string",
            "x-partner-doc": {
              "description": "Titel der Person, soweit er erfasst werden soll.",
              "example": "Dr.",
              "omission": "Es wird kein Titel übermittelt; keine automatische Titelzuordnung ist festgelegt.",
              "source": "Den vom Neukunden angegebenen Titel übernehmen, falls er erfasst werden soll."
            }
          }
        },
        "required": [
          "firstname",
          "lastname",
          "salutationType",
          "birthdate"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Personendaten des Neukunden. Eine Ausweisnummer kommt hinzu, wenn das gewählte Produkt sie verlangt."
        }
      },
      "PriceType": {
        "description": "Die bewusst gewählte, für das Produkt angebotene Preisart. Eine befristete Promotion benötigt zusätzlich ihre angebotene Promotionskennung.",
        "enum": [
          "AGB",
          "PROMO",
          "PROMO_TEMP"
        ],
        "examples": [
          "AGB"
        ],
        "type": "string",
        "x-partner-doc": {
          "description": "Die bewusst gewählte, für das Produkt angebotene Preisart. Eine befristete Promotion benötigt zusätzlich ihre angebotene Promotionskennung."
        }
      },
      "ProcessingIssue": {
        "description": "Ein aktueller Hinderungsgrund oder die dauerhaft gespeicherte bestätigte Ablehnung eines eigenen Vorgangs. Fehlerkennung, Erläuterung und gegebenenfalls Feldhinweis gemeinsam auswerten. Bei historischen Ablehnungen ohne erhaltenen Grund bleibt PREPARATION_REJECTED allgemein.",
        "properties": {
          "code": {
            "description": "Maschinenlesbare Fehler- oder Hinderungskennung für die gezielte Behandlung des gemeldeten Falls.",
            "examples": [
              "ACTIVATION_REQUIRES_CONFIRMATION",
              "TECHNICAL_RECONCILIATION_REQUIRED",
              "SIGNATURE_START_FAILED",
              "SIGNATURE_START_OUTCOME_UNKNOWN",
              "SIGNED_DOCUMENT_PENDING",
              "SIGNED_CONTENT_CHANGED",
              "PREREQUISITE_CHANGED",
              "COMPLETION_EVIDENCE_MISSING"
            ],
            "type": "string",
            "x-partner-doc": {
              "description": "Maschinenlesbare Fehler- oder Hinderungskennung für die gezielte Behandlung des gemeldeten Falls.",
              "example": "INVALID_REQUEST",
              "omission": "code gehört zu jedem ausgegebenen processingIssue-Objekt. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von processingIssue.code aus dem aktuell berechtigt gelesenen Vorgang auswerten."
            }
          },
          "details": {
            "description": "Dauerhaft gespeicherte sichere Feldhinweise zur bestätigten Vorbereitungsablehnung. Bei älteren Vorgängen kann nur eine allgemeine Ablehnung vorhanden sein; die ursprüngliche Ursache wird nicht nachträglich erraten.",
            "items": {
              "$ref": "#/components/schemas/ErrorDetail"
            },
            "type": [
              "array",
              "null"
            ],
            "x-partner-doc": {
              "description": "Dauerhaft gespeicherte sichere Feldhinweise zur bestätigten Vorbereitungsablehnung. Bei älteren Vorgängen kann nur eine allgemeine Ablehnung vorhanden sein; die ursprüngliche Ursache wird nicht nachträglich erraten.",
              "example": [
                {
                  "code": "WITHDRAWAL_SELECTION_REQUIRED",
                  "field": "withdrawalRightSelected",
                  "message": "Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird."
                }
              ],
              "omission": "Keine zusätzlichen Feldhinweise mitgeteilt; daraus keine Fehlerfreiheit der übrigen Angaben ableiten.",
              "source": "Aus dem gespeicherten processingIssue des eigenen Vorgangs."
            }
          },
          "message": {
            "description": "Lesbare Erläuterung des gemeldeten Fehlers oder Hinderungsgrunds.",
            "type": "string",
            "x-partner-doc": {
              "description": "Lesbare Erläuterung des gemeldeten Fehlers oder Hinderungsgrunds.",
              "example": "Die Eingabe konnte nicht verarbeitet werden.",
              "omission": "message gehört zu jedem ausgegebenen processingIssue-Objekt. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von processingIssue.message aus dem aktuell berechtigt gelesenen Vorgang auswerten."
            }
          }
        },
        "required": [
          "code",
          "message"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Ein aktueller Hinderungsgrund oder die dauerhaft gespeicherte bestätigte Ablehnung eines eigenen Vorgangs. Fehlerkennung, Erläuterung und gegebenenfalls Feldhinweis gemeinsam auswerten. Bei historischen Ablehnungen ohne erhaltenen Grund bleibt PREPARATION_REJECTED allgemein."
        }
      },
      "ProductConditionsResponse": {
        "additionalProperties": false,
        "description": "Berechnete Konditionen für eine vollständige zulässige Produktauswahl. Diese Antwort enthält die Produktreferenz und die Konditionen; die Produktoptionen werden hier nicht erneut aufgelistet.",
        "properties": {
          "conditions": {
            "$ref": "#/components/schemas/ProductDetailConditions",
            "description": "Die ausgewiesenen Konditionen einschließlich ausgewählter Optionen und berechneter Beträge.",
            "x-partner-doc": {
              "description": "Die ausgewiesenen Konditionen einschließlich ausgewählter Optionen und berechneter Beträge.",
              "example": {
                "durationId": "17ef5d55-617c-429a-b523-637625346856",
                "paymentId": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
                "priceType": "AGB",
                "regularPayment": {
                  "amount": "10.50",
                  "basis": "PAYMENT_INTERVAL",
                  "currency": "EUR",
                  "taxBasis": "GROSS"
                },
                "setupCharge": {
                  "amount": "19.95",
                  "basis": "ONE_OFF",
                  "currency": "EUR",
                  "taxBasis": "GROSS"
                }
              },
              "omission": "conditions gehört zu der Konditionsantwort von GET /products/{productId} bei vollständiger Auswahl. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von conditions aus der Konditionsantwort von GET /products/{productId} bei vollständiger Auswahl lesen."
            }
          },
          "productId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des bewusst gewählten Produkts.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des bewusst gewählten Produkts.",
              "example": "51f866e9-2307-47c6-8de3-e6b1f24f8d31",
              "omission": "productId gehört zu der Konditionsantwort von GET /products/{productId} bei vollständiger Auswahl. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von productId aus der Konditionsantwort von GET /products/{productId} bei vollständiger Auswahl lesen."
            }
          }
        },
        "required": [
          "productId",
          "conditions"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Berechnete Konditionen für eine vollständige zulässige Produktauswahl. Diese Antwort enthält die Produktreferenz und die Konditionen; die Produktoptionen werden hier nicht erneut aufgelistet."
        }
      },
      "ProductDetailConditions": {
        "additionalProperties": false,
        "description": "Die ausgewählten Produktoptionen und dazu berechneten Beträge. Diese Ansicht dient der Auswahl vor Einreichung des Vertrags und enthält keine Widerrufstage.",
        "properties": {
          "durationId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der bewusst ausgewählten Laufzeitoption des Produkts.",
            "x-partner-doc": {
              "description": "Kennung der bewusst ausgewählten Laufzeitoption des Produkts.",
              "example": "17ef5d55-617c-429a-b523-637625346856",
              "omission": "durationId gehört zu conditions der Konditionsantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von durationId aus conditions der Konditionsantwort von GET /products/{productId} lesen."
            }
          },
          "paymentId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der bewusst ausgewählten Zahlweise des Produkts.",
            "x-partner-doc": {
              "description": "Kennung der bewusst ausgewählten Zahlweise des Produkts.",
              "example": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
              "omission": "paymentId gehört zu conditions der Konditionsantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von paymentId aus conditions der Konditionsantwort von GET /products/{productId} lesen."
            }
          },
          "priceType": {
            "$ref": "#/components/schemas/PriceType",
            "description": "Die für das Produkt angebotene und bewusst ausgewählte Preisart.",
            "x-partner-doc": {
              "description": "Die für das Produkt angebotene und bewusst ausgewählte Preisart.",
              "example": "AGB",
              "omission": "priceType gehört zu conditions der Konditionsantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von priceType aus conditions der Konditionsantwort von GET /products/{productId} lesen."
            }
          },
          "promotionDurationMonths": {
            "description": "Ausgewiesene Dauer der zugeordneten Promotion in Monaten.",
            "type": "integer",
            "x-partner-doc": {
              "condition": "Nur auswerten, wenn die berechnete Produktkonditionsantwort diese Angabe zur ausgewählten Promotion tatsächlich ausweist.",
              "description": "Ausgewiesene Dauer der zugeordneten Promotion in Monaten.",
              "example": 3,
              "omission": "Keine entsprechende Promotionsangabe in dieser Konditionsantwort mitgeteilt; eine fehlende Angabe ist kein Nullbetrag und keine eigene Promotionsauswahl.",
              "source": "Den Wert von promotionDurationMonths aus conditions der Konditionsantwort von GET /products/{productId} lesen."
            }
          },
          "promotionId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der ausgewählten befristeten Promotion.",
            "x-partner-doc": {
              "description": "Kennung der ausgewählten befristeten Promotion.",
              "example": "70000000-0000-4000-8000-000000000001",
              "omission": "Keine entsprechende Promotionsangabe in dieser Konditionsantwort mitgeteilt; eine fehlende Angabe ist kein Nullbetrag und keine eigene Promotionsauswahl.",
              "source": "Den Wert von promotionId aus conditions der Konditionsantwort von GET /products/{productId} lesen."
            }
          },
          "promotionalPayment": {
            "$ref": "#/components/schemas/ConditionAmount",
            "description": "Ausgewiesene Rate während der zugeordneten Promotion.",
            "x-partner-doc": {
              "condition": "Nur auswerten, wenn die berechnete Produktkonditionsantwort diese Angabe zur ausgewählten Promotion tatsächlich ausweist.",
              "description": "Ausgewiesene Rate während der zugeordneten Promotion.",
              "example": {
                "amount": "9.50",
                "basis": "PAYMENT_INTERVAL",
                "currency": "EUR",
                "taxBasis": "GROSS"
              },
              "omission": "Keine entsprechende Promotionsangabe in dieser Konditionsantwort mitgeteilt; eine fehlende Angabe ist kein Nullbetrag und keine eigene Promotionsauswahl.",
              "source": "Den Wert von promotionalPayment aus conditions der Konditionsantwort von GET /products/{productId} lesen."
            }
          },
          "regularPayment": {
            "$ref": "#/components/schemas/ConditionAmount",
            "description": "Ausgewiesene Regelrate mit Währung, Steuerbasis und Zahlungsbezug. Sie ist nicht automatisch der Betrag des ersten Einzugs.",
            "x-partner-doc": {
              "condition": "Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.",
              "description": "Ausgewiesene Regelrate mit Währung, Steuerbasis und Zahlungsbezug. Sie ist nicht automatisch der Betrag des ersten Einzugs.",
              "example": {
                "amount": "10.50",
                "basis": "PAYMENT_INTERVAL",
                "currency": "EUR",
                "taxBasis": "GROSS"
              },
              "omission": "regularPayment gehört zu conditions der Konditionsantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von regularPayment aus conditions der Konditionsantwort von GET /products/{productId} lesen."
            }
          },
          "setupCharge": {
            "$ref": "#/components/schemas/ConditionAmount",
            "description": "Ausgewiesenes einmaliges Einrichtungsentgelt mit Währung und Steuerbasis.",
            "x-partner-doc": {
              "condition": "Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.",
              "description": "Ausgewiesenes einmaliges Einrichtungsentgelt mit Währung und Steuerbasis.",
              "example": {
                "amount": "19.95",
                "basis": "ONE_OFF",
                "currency": "EUR",
                "taxBasis": "GROSS"
              },
              "omission": "setupCharge gehört zu conditions der Konditionsantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von setupCharge aus conditions der Konditionsantwort von GET /products/{productId} lesen."
            }
          }
        },
        "required": [
          "durationId",
          "paymentId",
          "priceType",
          "regularPayment",
          "setupCharge"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Die ausgewählten Produktoptionen und dazu berechneten Beträge. Diese Ansicht dient der Auswahl vor Einreichung des Vertrags und enthält keine Widerrufstage."
        }
      },
      "ProductDetailsResponse": {
        "additionalProperties": false,
        "description": "Produktinformationen, Anforderungen und wählbare Optionen bei noch unvollständiger Konditionsauswahl. Eine Listung oder Typangabe allein bestätigt keine Buchbarkeit außerhalb des angebotenen Neuvertragsumfangs.",
        "properties": {
          "addonProduct": {
            "description": "Kennzeichnet die Produkteigenschaft als Zusatzprodukt. Die Metadaten sind keine Freigabe eines Add-on-Abschlusses.",
            "type": "boolean",
            "x-partner-doc": {
              "description": "Kennzeichnet die Produkteigenschaft als Zusatzprodukt. Die Metadaten sind keine Freigabe eines Add-on-Abschlusses.",
              "example": false,
              "omission": "addonProduct gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von addonProduct aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          },
          "bundleComponents": {
            "description": "Ausgewiesene Produktbeziehungen des Katalogs. Sie sind keine bereits angelegten Verträge und keine Freigabe eines Bundleabschlusses.",
            "items": {
              "$ref": "#/components/schemas/ProductSummary"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Ausgewiesene Produktbeziehungen des Katalogs. Sie sind keine bereits angelegten Verträge und keine Freigabe eines Bundleabschlusses.",
              "example": [
                {
                  "name": "Synthetische Produktbeziehung",
                  "productId": "51f866e9-2307-47c6-8de3-e6b1f24f8d31"
                }
              ],
              "omission": "Keine Produktbeziehungen in dieser Antwort mitgeteilt; daraus weder einen angelegten Bundlevertrag noch eine Abschlussfreigabe ableiten.",
              "source": "Den Wert von bundleComponents aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          },
          "categoryId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung der Produktkategorie.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung der Produktkategorie.",
              "example": "40000000-0000-4000-8000-000000000001",
              "omission": "Keine Kategoriezuordnung in diesem Produkteintrag mitgeteilt; die Zuordnung nicht aus dem Produktnamen ableiten.",
              "source": "Den Wert von categoryId aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          },
          "customerRequirements": {
            "additionalProperties": false,
            "description": "Die für die Kundenauswahl zu beachtenden Anforderungen des Produkts.",
            "properties": {
              "idCardNumberRequired": {
                "description": "Zeigt an, ob für den Kunden dieses Produkts eine verwendbare Ausweisnummer vorhanden sein muss.",
                "type": "boolean",
                "x-partner-doc": {
                  "description": "Zeigt an, ob für den Kunden dieses Produkts eine verwendbare Ausweisnummer vorhanden sein muss.",
                  "example": true,
                  "omission": "Die Produktanforderungen enthalten diese Angabe ausdrücklich. Fehlt sie, ist die Antwort unvollständig; fehlend nicht als false behandeln.",
                  "source": "customerRequirements.idCardNumberRequired aus der Auswahlantwort von GET /products/{productId} lesen."
                }
              }
            },
            "required": [
              "idCardNumberRequired"
            ],
            "type": "object",
            "x-partner-doc": {
              "description": "Die für die Kundenauswahl zu beachtenden Anforderungen des Produkts.",
              "example": {
                "idCardNumberRequired": true
              },
              "omission": "customerRequirements gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von customerRequirements aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          },
          "description": {
            "description": "Anzeigebeschreibung des Produkts.",
            "type": "string",
            "x-partner-doc": {
              "description": "Anzeigebeschreibung des Produkts.",
              "example": "Synthetische Erläuterung",
              "omission": "Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.",
              "source": "Den Wert von description aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          },
          "durations": {
            "description": "Die angebotenen aktiven Laufzeitoptionen. Eine Option bewusst über ihre Kennung wählen.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "durationId": {
                  "$ref": "#/components/schemas/ResourceId",
                  "description": "Kennung der bewusst ausgewählten Laufzeitoption des Produkts.",
                  "x-partner-doc": {
                    "description": "Kennung der bewusst ausgewählten Laufzeitoption des Produkts.",
                    "example": "17ef5d55-617c-429a-b523-637625346856",
                    "omission": "Jeder ausgegebene Laufzeiteintrag enthält durationId; ein Eintrag ohne dieses Feld ist unvollständig.",
                    "source": "Den Wert von durationId im gewählten Eintrag von durations der Produktdetailantwort lesen."
                  }
                },
                "durationMonths": {
                  "description": "Die zu dieser Laufzeitoption gehörende Dauer in Monaten.",
                  "type": "integer",
                  "x-partner-doc": {
                    "description": "Die zu dieser Laufzeitoption gehörende Dauer in Monaten.",
                    "example": 24,
                    "omission": "Jeder ausgegebene Laufzeiteintrag enthält durationMonths; ein Eintrag ohne dieses Feld ist unvollständig.",
                    "source": "Den Wert von durationMonths im gewählten Eintrag von durations der Produktdetailantwort lesen."
                  }
                }
              },
              "required": [
                "durationId",
                "durationMonths"
              ],
              "type": "object"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Die angebotenen aktiven Laufzeitoptionen. Eine Option bewusst über ihre Kennung wählen.",
              "example": [
                {
                  "durationId": "17ef5d55-617c-429a-b523-637625346856",
                  "durationMonths": 24
                }
              ],
              "omission": "durations gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von durations aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          },
          "name": {
            "description": "Anzeigename des Produkts.",
            "type": "string",
            "x-partner-doc": {
              "description": "Anzeigename des Produkts.",
              "example": "Synthetische Bezeichnung",
              "omission": "Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.",
              "source": "Den Wert von name aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          },
          "payments": {
            "description": "Die angebotenen aktiven Zahlweisen. Eine Option bewusst über ihre Kennung wählen.",
            "items": {
              "additionalProperties": false,
              "properties": {
                "paymentId": {
                  "$ref": "#/components/schemas/ResourceId",
                  "description": "Kennung der bewusst ausgewählten Zahlweise des Produkts.",
                  "x-partner-doc": {
                    "description": "Kennung der bewusst ausgewählten Zahlweise des Produkts.",
                    "example": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
                    "omission": "Jeder ausgegebene Zahlweiseneintrag enthält paymentId; ein Eintrag ohne dieses Feld ist unvollständig.",
                    "source": "Den Wert von paymentId im gewählten Eintrag von payments der Produktdetailantwort lesen."
                  }
                },
                "paymentType": {
                  "description": "Das zu dieser Zahlweise gehörende Zahlungsintervall.",
                  "enum": [
                    "MONTHLY",
                    "QUARTERLY",
                    "HALF_YEARLY",
                    "YEARLY"
                  ],
                  "type": "string",
                  "x-partner-doc": {
                    "description": "Das zu dieser Zahlweise gehörende Zahlungsintervall.",
                    "example": "MONTHLY",
                    "omission": "Jeder ausgegebene Zahlweiseneintrag enthält paymentType; ein Eintrag ohne dieses Feld ist unvollständig.",
                    "source": "Den Wert von paymentType im gewählten Eintrag von payments der Produktdetailantwort lesen."
                  }
                }
              },
              "required": [
                "paymentId",
                "paymentType"
              ],
              "type": "object"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Die angebotenen aktiven Zahlweisen. Eine Option bewusst über ihre Kennung wählen.",
              "example": [
                {
                  "paymentId": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
                  "paymentType": "MONTHLY"
                }
              ],
              "omission": "payments gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von payments aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          },
          "priceTypes": {
            "description": "Die für dieses Produkt angebotenen Preisarten. Daraus vor der Konditionsberechnung eine zulässige Auswahl treffen.",
            "items": {
              "$ref": "#/components/schemas/PriceType"
            },
            "type": "array",
            "uniqueItems": true,
            "x-partner-doc": {
              "description": "Die für dieses Produkt angebotenen Preisarten. Daraus vor der Konditionsberechnung eine zulässige Auswahl treffen.",
              "example": [
                "AGB"
              ],
              "omission": "priceTypes gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von priceTypes aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          },
          "productId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des bewusst gewählten Produkts.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des bewusst gewählten Produkts.",
              "example": "51f866e9-2307-47c6-8de3-e6b1f24f8d31",
              "omission": "productId gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von productId aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          },
          "productType": {
            "description": "Mitgeteilter Produkttyp. Die Typanzeige allein erweitert den unterstützten Abschlussumfang nicht.",
            "enum": [
              "MOBILE",
              "LANDLINE",
              "LEASING"
            ],
            "type": "string",
            "x-partner-doc": {
              "description": "Mitgeteilter Produkttyp. Die Typanzeige allein erweitert den unterstützten Abschlussumfang nicht.",
              "example": "LANDLINE",
              "omission": "Die Antwort teilt keinen belegten Produkttyp mit; den Typ nicht aus einer UUID oder einem Namen raten.",
              "source": "Den Wert von productType aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          },
          "promotions": {
            "description": "Die für die Produktauswahl angebotenen Promotionen. Keine erste Promotion automatisch übernehmen.",
            "items": {
              "$ref": "#/components/schemas/PromotionOption"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Die für die Produktauswahl angebotenen Promotionen. Keine erste Promotion automatisch übernehmen.",
              "example": [
                {
                  "name": "Synthetische Promotion",
                  "promotionId": "70000000-0000-4000-8000-000000000001"
                }
              ],
              "omission": "promotions gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von promotions aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          },
          "serialNumbers": {
            "$ref": "#/components/schemas/SerialRequirements",
            "description": "Konfiguration der Seriennummernerfassung dieses Produkts: aktiviert oder deaktiviert, Anzahl der Plätze und Angaben zu den einzelnen Eingabefeldern.",
            "x-partner-doc": {
              "condition": "Bei enabled=true verlangt der Vertragsrequest die vollständige konfigurierte Anzahl von Plätzen. Dies ist das Konfigurationsobjekt, nicht die Liste der eingegebenen Serienwerte.",
              "description": "Konfiguration der Seriennummernerfassung dieses Produkts: aktiviert oder deaktiviert, Anzahl der Plätze und Angaben zu den einzelnen Eingabefeldern.",
              "example": {
                "enabled": false
              },
              "omission": "serialNumbers gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von serialNumbers aus der Auswahlantwort von GET /products/{productId} lesen."
            }
          }
        },
        "required": [
          "productId",
          "customerRequirements",
          "serialNumbers",
          "addonProduct",
          "durations",
          "payments",
          "priceTypes",
          "promotions"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Produktinformationen, Anforderungen und wählbare Optionen bei noch unvollständiger Konditionsauswahl. Eine Listung oder Typangabe allein bestätigt keine Buchbarkeit außerhalb des angebotenen Neuvertragsumfangs."
        }
      },
      "ProductSummary": {
        "description": "Kurze Produktangaben aus einer Produktliste oder einer ausgewiesenen Produktbeziehung. Die Details und Anforderungen vor einer Einreichung gesondert lesen.",
        "properties": {
          "categoryId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung der Produktkategorie.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung der Produktkategorie.",
              "example": "40000000-0000-4000-8000-000000000001",
              "omission": "Keine Kategoriezuordnung in diesem Produkteintrag mitgeteilt; die Zuordnung nicht aus dem Produktnamen ableiten.",
              "source": "Den Wert von categoryId aus einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen lesen."
            }
          },
          "description": {
            "description": "Anzeigebeschreibung des Produkts.",
            "type": "string",
            "x-partner-doc": {
              "description": "Anzeigebeschreibung des Produkts.",
              "example": "Synthetische Erläuterung",
              "omission": "Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.",
              "source": "Den Wert von description aus einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen lesen."
            }
          },
          "name": {
            "description": "Anzeigename des Produkts.",
            "type": "string",
            "x-partner-doc": {
              "description": "Anzeigename des Produkts.",
              "example": "Synthetische Bezeichnung",
              "omission": "Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.",
              "source": "Den Wert von name aus einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen lesen."
            }
          },
          "productId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Öffentliche Kennung des bewusst gewählten Produkts.",
            "x-partner-doc": {
              "description": "Öffentliche Kennung des bewusst gewählten Produkts.",
              "example": "51f866e9-2307-47c6-8de3-e6b1f24f8d31",
              "omission": "productId gehört zu einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von productId aus einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen lesen."
            }
          }
        },
        "required": [
          "productId"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Kurze Produktangaben aus einer Produktliste oder einer ausgewiesenen Produktbeziehung. Die Details und Anforderungen vor einer Einreichung gesondert lesen."
        }
      },
      "PromotionOption": {
        "description": "Eine für die Produktauswahl angebotene Promotion mit den tatsächlich verfügbaren Zusatzangaben. Nur die ausdrücklich gewählte und aktuell zulässige Promotion verwenden.",
        "properties": {
          "description": {
            "description": "Anzeigebeschreibung der Promotion.",
            "type": "string",
            "x-partner-doc": {
              "description": "Anzeigebeschreibung der Promotion.",
              "example": "Synthetische Erläuterung",
              "omission": "Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.",
              "source": "Den Wert von description aus einem Eintrag in promotions der Produktdetailantwort lesen."
            }
          },
          "discountPercent": {
            "description": "Ausgewiesener prozentualer Nachlass der Promotion. Der tatsächlich berechnete Preis kommt aus der Konditionsantwort.",
            "pattern": "^-?[0-9]+(?:\\.[0-9]+)?(?![\\s\\S])",
            "type": "string",
            "x-partner-doc": {
              "description": "Ausgewiesener prozentualer Nachlass der Promotion. Der tatsächlich berechnete Preis kommt aus der Konditionsantwort.",
              "example": "10.00",
              "omission": "Kein Nachlassprozentsatz mitgeteilt; den Zahlbetrag aus den berechneten Konditionen lesen.",
              "source": "Den Wert von discountPercent aus einem Eintrag in promotions der Produktdetailantwort lesen."
            }
          },
          "durationMonths": {
            "description": "Ausgewiesene Dauer der Promotion in Monaten.",
            "type": "integer",
            "x-partner-doc": {
              "description": "Ausgewiesene Dauer der Promotion in Monaten.",
              "example": 24,
              "omission": "Keine Promotionsdauer mitgeteilt; sie nicht aus dem Auswahlzeitraum oder der Vertragslaufzeit berechnen.",
              "source": "Den Wert von durationMonths aus einem Eintrag in promotions der Produktdetailantwort lesen."
            }
          },
          "name": {
            "description": "Anzeigename der Promotion.",
            "type": "string",
            "x-partner-doc": {
              "description": "Anzeigename der Promotion.",
              "example": "Synthetische Bezeichnung",
              "omission": "Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.",
              "source": "Den Wert von name aus einem Eintrag in promotions der Produktdetailantwort lesen."
            }
          },
          "promotionId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der ausgewählten befristeten Promotion.",
            "x-partner-doc": {
              "description": "Kennung der ausgewählten befristeten Promotion.",
              "example": "70000000-0000-4000-8000-000000000001",
              "omission": "promotionId gehört zu einem Eintrag in promotions der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von promotionId aus einem Eintrag in promotions der Produktdetailantwort lesen."
            }
          },
          "renewalPromotion": {
            "description": "Mitgeteilte Zuordnung der Promotion zu einer Verlängerung. Daraus folgt kein zusätzlicher Abschlussweg dieses Profils.",
            "type": "boolean",
            "x-partner-doc": {
              "description": "Mitgeteilte Zuordnung der Promotion zu einer Verlängerung. Daraus folgt kein zusätzlicher Abschlussweg dieses Profils.",
              "example": false,
              "omission": "Keine Zuordnung zu einer Verlängerung mitgeteilt; daraus keine Zulässigkeit für einen Neuabschluss ableiten.",
              "source": "Den Wert von renewalPromotion aus einem Eintrag in promotions der Produktdetailantwort lesen."
            }
          },
          "selectionFrom": {
            "description": "Ausgewiesener Beginn des Auswahlzeitraums dieser Promotion.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Ausgewiesener Beginn des Auswahlzeitraums dieser Promotion.",
              "example": "2026-11-01",
              "omission": "Kein Beginn des Auswahlzeitraums mitgeteilt; daraus keine unbegrenzte oder bereits zulässige Auswahl ableiten.",
              "source": "Den Wert von selectionFrom aus einem Eintrag in promotions der Produktdetailantwort lesen."
            }
          },
          "selectionTo": {
            "description": "Ausgewiesenes Ende des Auswahlzeitraums dieser Promotion.",
            "format": "date",
            "type": "string",
            "x-partner-doc": {
              "description": "Ausgewiesenes Ende des Auswahlzeitraums dieser Promotion.",
              "example": "2026-11-01",
              "omission": "Kein Ende des Auswahlzeitraums mitgeteilt; daraus keine unbegrenzte Gültigkeit ableiten.",
              "source": "Den Wert von selectionTo aus einem Eintrag in promotions der Produktdetailantwort lesen."
            }
          },
          "setupCharge": {
            "$ref": "#/components/schemas/ConditionAmount",
            "description": "Ausgewiesenes einmaliges Einrichtungsentgelt mit Währung und Steuerbasis.",
            "x-partner-doc": {
              "description": "Ausgewiesenes einmaliges Einrichtungsentgelt mit Währung und Steuerbasis.",
              "example": {
                "amount": "19.95",
                "basis": "ONE_OFF",
                "currency": "EUR",
                "taxBasis": "GROSS"
              },
              "omission": "Kein eigenes Einrichtungsentgelt dieser Promotion mitgeteilt; das tatsächlich berechnete Entgelt aus den Konditionen lesen.",
              "source": "Den Wert von setupCharge aus einem Eintrag in promotions der Produktdetailantwort lesen."
            }
          }
        },
        "required": [
          "promotionId"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Eine für die Produktauswahl angebotene Promotion mit den tatsächlich verfügbaren Zusatzangaben. Nur die ausdrücklich gewählte und aktuell zulässige Promotion verwenden."
        }
      },
      "RequestId": {
        "description": "Supportkennung des aktuellen HTTP-Aufrufs. Sie dient der Zuordnung einer Antwort und ist keine Vertrags- oder Idempotenzkennung.",
        "maxLength": 100,
        "pattern": "^[A-Za-z0-9._:-]{1,100}$",
        "type": "string",
        "x-partner-doc": {
          "description": "Supportkennung des aktuellen HTTP-Aufrufs. Sie dient der Zuordnung einer Antwort und ist keine Vertrags- oder Idempotenzkennung."
        }
      },
      "ResourceId": {
        "$ref": "#/components/schemas/Uuid",
        "description": "Öffentliche Kennung einer konkreten Ressource. Die passende Kennung aus der dafür vorgesehenen Antwort übernehmen; Anzeigenamen oder Geschäftsnummern ersetzen sie nicht.",
        "x-partner-doc": {
          "description": "Öffentliche Kennung einer konkreten Ressource. Die passende Kennung aus der dafür vorgesehenen Antwort übernehmen; Anzeigenamen oder Geschäftsnummern ersetzen sie nicht."
        }
      },
      "RiskDecisionRequest": {
        "additionalProperties": false,
        "description": "Die ausdrückliche Risikoübernahme durch einen aktuell dazu berechtigten Entscheider. Sie ersetzt weder die erforderliche Unterschrift noch eine fehlende Endfassung.",
        "properties": {
          "decidedByAccountId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung des aktiven menschlichen Entscheiders, der diese Fachentscheidung treffen darf. Eine Verkäuferkennung allein genügt nicht.",
            "x-partner-doc": {
              "condition": "Die konkrete Aktionsberechtigung wird auch bei Wiederholung geprüft.",
              "description": "Kennung des aktiven menschlichen Entscheiders, der diese Fachentscheidung treffen darf. Eine Verkäuferkennung allein genügt nicht.",
              "example": "693ce612-51cd-4b82-a9b3-8138851b573e",
              "omission": "Für diese Entscheidung erforderlich; fehlt decidedByAccountId, wird der Aufruf als ungültig abgewiesen. API-Zugang und Verkäufer werden nicht automatisch als Entscheider eingesetzt.",
              "source": "Die Kennung des aktiven zugehörigen Menschen, der die konkrete Entscheidung treffen darf; über die eingerichtete Benutzerzuordnung bereitstellen."
            }
          },
          "riskAccepted": {
            "const": true,
            "description": "Die bewusste Übernahme des im geeigneten Vorgang vorgelegten Risikos durch den benannten berechtigten Entscheider.",
            "type": "boolean",
            "x-partner-doc": {
              "condition": "Nur für einen geeigneten Vorgang mit bestätigter zugehöriger Unterschrift und Endfassung; unklare technische Zustände werden dadurch nicht geheilt.",
              "description": "Die bewusste Übernahme des im geeigneten Vorgang vorgelegten Risikos durch den benannten berechtigten Entscheider.",
              "example": true,
              "omission": "Bei der Risikoentscheidung ausdrücklich true angeben. Ohne riskAccepted=true wird der Aufruf als ungültig abgewiesen.",
              "source": "Die ausdrücklich getroffene Risikoentscheidung des benannten berechtigten Menschen."
            }
          }
        },
        "required": [
          "decidedByAccountId",
          "riskAccepted"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Die ausdrückliche Risikoübernahme durch einen aktuell dazu berechtigten Entscheider. Sie ersetzt weder die erforderliche Unterschrift noch eine fehlende Endfassung."
        }
      },
      "SalesContext": {
        "description": "Verkäufer und gegebenenfalls Filiale dieses Verkaufs. Die Verkäuferauswahl ist von dem technischen API-Zugang und einer späteren menschlichen Fachentscheidung getrennt.",
        "properties": {
          "branchId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der gewählten Filiale. Eine explizite ungültige Filiale wird nicht durch eine andere ersetzt.",
            "x-partner-doc": {
              "condition": "Die explizite Filiale muss aktiv und dem eigenen Partner zugeordnet sein. Die wirksame Auswahl bleibt bei identischer Wiederholung erhalten.",
              "description": "Kennung der gewählten Filiale. Eine explizite ungültige Filiale wird nicht durch eine andere ersetzt.",
              "example": "30000000-0000-4000-8000-000000000001",
              "omission": "Keine aktive Filiale: ohne Zuordnung, soweit zulässig. Genau eine aktive zugehörige Filiale: diese wird geprüft und zugeordnet. Mehrere: ausdrücklich auswählen. null ist kein Auslassen.",
              "source": "Die gewünschte Kennung aus GET /sales-context auswählen; Antworten geben die verwendete Verkaufszuordnung wieder."
            }
          },
          "sellerAccountId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung des bewusst ausgewählten Verkäufers dieses Verkaufs.",
            "x-partner-doc": {
              "description": "Kennung des bewusst ausgewählten Verkäufers dieses Verkaufs.",
              "example": "20000000-0000-4000-8000-000000000001",
              "omission": "Bei der Vertragseinreichung muss der Verkäufer ausdrücklich angegeben werden; fehlt sellerAccountId, wird die Einreichung als ungültig abgewiesen. Der API-Zugang und die Listenposition ersetzen die Auswahl nicht.",
              "source": "Die gewünschte Kennung aus GET /sales-context auswählen; Antworten geben die verwendete Verkaufszuordnung wieder."
            }
          }
        },
        "required": [
          "sellerAccountId"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Verkäufer und gegebenenfalls Filiale dieses Verkaufs. Die Verkäuferauswahl ist von dem technischen API-Zugang und einer späteren menschlichen Fachentscheidung getrennt."
        }
      },
      "SalesContextResponse": {
        "description": "Die aktuell autorisierte Auswahl von Verkäufern und Filialen. Dieser lesende Aufruf legt keine Verkaufssitzung an und ersetzt die Prüfung beim Einreichen nicht.",
        "properties": {
          "branches": {
            "description": "Die aktuell auswählbaren Filialen mit Kennung und Anzeigename.",
            "items": {
              "$ref": "#/components/schemas/BranchSummary"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Die aktuell auswählbaren Filialen mit Kennung und Anzeigename.",
              "example": [
                {
                  "branchId": "30000000-0000-4000-8000-000000000001",
                  "displayName": "Testfiliale Nord"
                }
              ],
              "omission": "GET /sales-context liefert branches als Liste, gegebenenfalls leer. Eine fehlende Liste ist keine bestätigte leere Auswahl.",
              "source": "Aus der Antwort von GET /sales-context."
            }
          },
          "sellerAccounts": {
            "description": "Die aktuell auswählbaren Verkäufer mit Kennung und Anzeigename.",
            "items": {
              "$ref": "#/components/schemas/SellerSummary"
            },
            "type": "array",
            "x-partner-doc": {
              "description": "Die aktuell auswählbaren Verkäufer mit Kennung und Anzeigename.",
              "example": [
                {
                  "displayName": "Ada Beispiel",
                  "sellerAccountId": "20000000-0000-4000-8000-000000000001"
                }
              ],
              "omission": "GET /sales-context liefert sellerAccounts als Liste, gegebenenfalls leer. Eine fehlende Liste ist keine bestätigte leere Auswahl.",
              "source": "Aus der Antwort von GET /sales-context."
            }
          }
        },
        "required": [
          "sellerAccounts",
          "branches"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Die aktuell autorisierte Auswahl von Verkäufern und Filialen. Dieser lesende Aufruf legt keine Verkaufssitzung an und ersetzt die Prüfung beim Einreichen nicht."
        }
      },
      "SellerSummary": {
        "description": "Ein auswählbarer Verkäufer mit öffentlicher Kennung und Anzeigename.",
        "properties": {
          "displayName": {
            "description": "Anzeigename für die bewusste Auswahl. Für spätere Requests die zugehörige Kennung verwenden.",
            "examples": [
              "Ada Beispiel"
            ],
            "type": "string",
            "x-partner-doc": {
              "description": "Anzeigename für die bewusste Auswahl. Für spätere Requests die zugehörige Kennung verwenden.",
              "example": "Ada Beispiel",
              "omission": "Jeder ausgegebene Eintrag enthält displayName; fehlt das Feld, ist der Auswahleintrag unvollständig.",
              "source": "Aus der Antwort von GET /sales-context."
            }
          },
          "sellerAccountId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung des bewusst ausgewählten Verkäufers dieses Verkaufs.",
            "x-partner-doc": {
              "description": "Kennung des bewusst ausgewählten Verkäufers dieses Verkaufs.",
              "example": "20000000-0000-4000-8000-000000000001",
              "omission": "Jeder ausgegebene Eintrag enthält sellerAccountId; fehlt das Feld, ist der Auswahleintrag unvollständig.",
              "source": "Aus der Antwort von GET /sales-context."
            }
          }
        },
        "required": [
          "sellerAccountId",
          "displayName"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Ein auswählbarer Verkäufer mit öffentlicher Kennung und Anzeigename."
        }
      },
      "SerialFieldRequirement": {
        "description": "Vorgaben für ein einzelnes Feld eines Geräteeintrags. Schreibbarkeit, Verwendung bei benannten Einträgen und Eingabeformat gemeinsam auswerten.",
        "properties": {
          "configuredActive": {
            "description": "Zeigt an, ob dieses Gerätefeld in der Produktkonfiguration verwendet wird.",
            "type": "boolean",
            "x-partner-doc": {
              "description": "Zeigt an, ob dieses Gerätefeld in der Produktkonfiguration verwendet wird.",
              "example": true,
              "omission": "configuredActive gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von configuredActive aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen."
            }
          },
          "label": {
            "description": "Anzeigebezeichnung dieses Gerätefeldes.",
            "type": "string",
            "x-partner-doc": {
              "description": "Anzeigebezeichnung dieses Gerätefeldes.",
              "example": "Seriennummer",
              "omission": "Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.",
              "source": "Den Wert von label aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen."
            }
          },
          "mask": {
            "description": "Am Produkt gespeicherter Maskenhinweis für die Darstellung der Eingabe.",
            "type": "string",
            "x-partner-doc": {
              "condition": "Die API definiert dafür keine allgemeine Regex- oder Maskensprache und interpretiert diesen Hinweis nicht als zusätzliche Eingabeprüfung. Den Hinweis nicht in eine erfundene Regex umwandeln; die dokumentierte DATE-Form und die Feldpflichten gelten unabhängig davon.",
              "description": "Am Produkt gespeicherter Maskenhinweis für die Darstellung der Eingabe.",
              "example": "SYNTHETIC-MASK",
              "omission": "Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.",
              "source": "Den Wert von mask aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen."
            }
          },
          "requiredWhenNamed": {
            "description": "Zeigt an, ob ein benannter Geräteeintrag für dieses Feld einen ausgefüllten Wert benötigt.",
            "type": "boolean",
            "x-partner-doc": {
              "description": "Zeigt an, ob ein benannter Geräteeintrag für dieses Feld einen ausgefüllten Wert benötigt.",
              "example": true,
              "omission": "requiredWhenNamed gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von requiredWhenNamed aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen."
            }
          },
          "type": {
            "description": "Darstellungshinweis für dieses konfigurierte Eingabefeld. Der Vertragsrequest übermittelt den erfassten Wert als Zeichenfolge, auch bei CHECKBOX oder RATING.",
            "enum": [
              "STANDARD",
              "DATE",
              "CHECKBOX",
              "RATING",
              "MEMO"
            ],
            "type": "string",
            "x-partner-doc": {
              "condition": "DATE wird als TT.MM.JJJJ übermittelt. CHECKBOX und RATING haben in diesem API-Weg kein zusätzliches Werteformat: Auch hier senden Sie Text, keine JSON-Booleans oder Zahlen. Zeichenfolgen wie \"true\", \"false\", \"1\" oder \"4\" sind Text und werden nicht automatisch in Boolean oder eine Bewertungsskala umgewandelt. Verwenden Sie für Ihre Erfassung eine einheitliche Textdarstellung; eine besondere Skala oder Maskensprache ist nicht vorgegeben. Feldpflichten und inaktive Felder gelten weiterhin.",
              "description": "Darstellungshinweis für dieses konfigurierte Eingabefeld. Der Vertragsrequest übermittelt den erfassten Wert als Zeichenfolge, auch bei CHECKBOX oder RATING.",
              "example": "STANDARD",
              "omission": "Kein Darstellungstyp mitgeteilt; daraus keinen anderen Datentyp für den Vertragsrequest ableiten, der den erfassten Wert als Zeichenfolge übermittelt.",
              "source": "Den Wert von type aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen."
            }
          },
          "writable": {
            "description": "Zeigt an, ob dieses Gerätefeld in der Eingabe verwendet werden darf.",
            "type": "boolean",
            "x-partner-doc": {
              "description": "Zeigt an, ob dieses Gerätefeld in der Eingabe verwendet werden darf.",
              "example": true,
              "omission": "writable gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von writable aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen."
            }
          }
        },
        "required": [
          "configuredActive",
          "writable",
          "requiredWhenNamed"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Vorgaben für ein einzelnes Feld eines Geräteeintrags. Schreibbarkeit, Verwendung bei benannten Einträgen und Eingabeformat gemeinsam auswerten."
        }
      },
      "SerialNumberInput": {
        "additionalProperties": false,
        "description": "Ein Geräteeintrag innerhalb der vorgegebenen Slotliste. Welche Felder verwendet werden dürfen und wann ein Wert nötig ist, ergibt sich aus den Serienmetadaten des Produkts.",
        "properties": {
          "additional1": {
            "description": "Erste zusätzliche Geräteangabe entsprechend der Produktkonfiguration.",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.",
              "description": "Erste zusätzliche Geräteangabe entsprechend der Produktkonfiguration.",
              "example": "Synthetische Zusatzangabe",
              "omission": "Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.",
              "source": "Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen."
            }
          },
          "additional2": {
            "description": "Zweite zusätzliche Geräteangabe entsprechend der Produktkonfiguration.",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.",
              "description": "Zweite zusätzliche Geräteangabe entsprechend der Produktkonfiguration.",
              "example": "Synthetische Zusatzangabe",
              "omission": "Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.",
              "source": "Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen."
            }
          },
          "name": {
            "description": "Bezeichnung dieses Geräteeintrags; sie bestimmt, ob die Regeln für einen benannten Eintrag greifen.",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.",
              "description": "Bezeichnung dieses Geräteeintrags; sie bestimmt, ob die Regeln für einen benannten Eintrag greifen.",
              "example": "Gerät 1",
              "omission": "Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.",
              "source": "Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen."
            }
          },
          "serialNumber1": {
            "description": "Erste Serienangabe des Geräteeintrags entsprechend der Produktkonfiguration.",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.",
              "description": "Erste Serienangabe des Geräteeintrags entsprechend der Produktkonfiguration.",
              "example": "SYNTHETIC-SN-001",
              "omission": "Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.",
              "source": "Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen."
            }
          },
          "serialNumber2": {
            "description": "Zweite Serienangabe des Geräteeintrags entsprechend der Produktkonfiguration.",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.",
              "description": "Zweite Serienangabe des Geräteeintrags entsprechend der Produktkonfiguration.",
              "example": "SYNTHETIC-SN-002",
              "omission": "Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.",
              "source": "Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen."
            }
          }
        },
        "type": "object",
        "x-partner-doc": {
          "description": "Ein Geräteeintrag innerhalb der vorgegebenen Slotliste. Welche Felder verwendet werden dürfen und wann ein Wert nötig ist, ergibt sich aus den Serienmetadaten des Produkts."
        }
      },
      "SerialNumbersInput": {
        "description": "Die vom ausgewählten Produkt vorgegebene Liste von Geräteeinträgen. Bei aktivierter Erfassung die vollständige konfigurierte Anzahl von Einträgen senden; bei deaktivierter Erfassung das Feld auslassen.",
        "items": {
          "$ref": "#/components/schemas/SerialNumberInput"
        },
        "type": "array",
        "x-partner-doc": {
          "description": "Die vom ausgewählten Produkt vorgegebene Liste von Geräteeinträgen. Bei aktivierter Erfassung die vollständige konfigurierte Anzahl von Einträgen senden; bei deaktivierter Erfassung das Feld auslassen."
        }
      },
      "SerialRequirements": {
        "allOf": [
          {
            "if": {
              "properties": {
                "enabled": {
                  "const": true,
                  "description": "Zeigt an, ob das Produkt die Erfassung von Geräte- und Serienangaben verwendet.",
                  "x-partner-doc": {
                    "description": "Zeigt an, ob das Produkt die Erfassung von Geräte- und Serienangaben verwendet.",
                    "example": true,
                    "omission": "enabled gehört zu serialNumbers der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
                    "source": "Den Wert von enabled aus serialNumbers der Produktdetailantwort lesen."
                  }
                }
              },
              "required": [
                "enabled"
              ]
            },
            "then": {
              "required": [
                "slotCount",
                "fields"
              ]
            }
          }
        ],
        "description": "Produktspezifische Vorgaben für Geräte- und Serienangaben. Aktivierung, Anzahl der Einträge und Feldmetadaten gemeinsam auswerten; daraus folgt keine pauschale Mindestzahl benannter Geräte.",
        "properties": {
          "description": {
            "description": "Die zur Anzeige vorgesehene Erläuterung.",
            "type": "string",
            "x-partner-doc": {
              "description": "Die zur Anzeige vorgesehene Erläuterung.",
              "example": "Synthetische Erläuterung",
              "omission": "Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.",
              "source": "Den Wert von description aus serialNumbers der Produktdetailantwort lesen."
            }
          },
          "enabled": {
            "description": "Zeigt an, ob das Produkt die Erfassung von Geräte- und Serienangaben verwendet.",
            "type": "boolean",
            "x-partner-doc": {
              "description": "Zeigt an, ob das Produkt die Erfassung von Geräte- und Serienangaben verwendet.",
              "example": true,
              "omission": "enabled gehört zu serialNumbers der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von enabled aus serialNumbers der Produktdetailantwort lesen."
            }
          },
          "fields": {
            "additionalProperties": false,
            "description": "Die Vorgaben der einzelnen Felder eines Geräteeintrags.",
            "properties": {
              "additional1": {
                "$ref": "#/components/schemas/SerialFieldRequirement",
                "description": "Die Vorgaben für das Gerätefeld additional1.",
                "x-partner-doc": {
                  "condition": "Zusammen mit enabled, slotCount und den Regeln für benannte Einträge auswerten.",
                  "description": "Die Vorgaben für das Gerätefeld additional1.",
                  "example": {
                    "configuredActive": false,
                    "requiredWhenNamed": false,
                    "writable": false
                  },
                  "omission": "Bei aktivierter Serienerfassung gehört diese Feldkonfiguration zur vollständigen Konfiguration; fehlt sie, keine eigene Eingabefreigabe oder Pflicht ableiten.",
                  "source": "Die Konfiguration für additional1 unter serialNumbers.fields der Produktdetailantwort lesen."
                }
              },
              "additional2": {
                "$ref": "#/components/schemas/SerialFieldRequirement",
                "description": "Die Vorgaben für das Gerätefeld additional2.",
                "x-partner-doc": {
                  "condition": "Zusammen mit enabled, slotCount und den Regeln für benannte Einträge auswerten.",
                  "description": "Die Vorgaben für das Gerätefeld additional2.",
                  "example": {
                    "configuredActive": false,
                    "requiredWhenNamed": false,
                    "writable": false
                  },
                  "omission": "Bei aktivierter Serienerfassung gehört diese Feldkonfiguration zur vollständigen Konfiguration; fehlt sie, keine eigene Eingabefreigabe oder Pflicht ableiten.",
                  "source": "Die Konfiguration für additional2 unter serialNumbers.fields der Produktdetailantwort lesen."
                }
              },
              "name": {
                "$ref": "#/components/schemas/SerialFieldRequirement",
                "description": "Die Vorgaben für das Gerätefeld name.",
                "x-partner-doc": {
                  "condition": "Zusammen mit enabled, slotCount und den Regeln für benannte Einträge auswerten.",
                  "description": "Die Vorgaben für das Gerätefeld name.",
                  "example": {
                    "configuredActive": true,
                    "requiredWhenNamed": true,
                    "writable": true
                  },
                  "omission": "Bei aktivierter Serienerfassung gehört diese Feldkonfiguration zur vollständigen Konfiguration; fehlt sie, keine eigene Eingabefreigabe oder Pflicht ableiten.",
                  "source": "Die Konfiguration für name unter serialNumbers.fields der Produktdetailantwort lesen."
                }
              },
              "serialNumber1": {
                "$ref": "#/components/schemas/SerialFieldRequirement",
                "description": "Die Vorgaben für das Gerätefeld serialNumber1.",
                "x-partner-doc": {
                  "condition": "Zusammen mit enabled, slotCount und den Regeln für benannte Einträge auswerten.",
                  "description": "Die Vorgaben für das Gerätefeld serialNumber1.",
                  "example": {
                    "configuredActive": true,
                    "requiredWhenNamed": true,
                    "writable": true
                  },
                  "omission": "Bei aktivierter Serienerfassung gehört diese Feldkonfiguration zur vollständigen Konfiguration; fehlt sie, keine eigene Eingabefreigabe oder Pflicht ableiten.",
                  "source": "Die Konfiguration für serialNumber1 unter serialNumbers.fields der Produktdetailantwort lesen."
                }
              },
              "serialNumber2": {
                "$ref": "#/components/schemas/SerialFieldRequirement",
                "description": "Die Vorgaben für das Gerätefeld serialNumber2.",
                "x-partner-doc": {
                  "condition": "Zusammen mit enabled, slotCount und den Regeln für benannte Einträge auswerten.",
                  "description": "Die Vorgaben für das Gerätefeld serialNumber2.",
                  "example": {
                    "configuredActive": false,
                    "requiredWhenNamed": false,
                    "writable": false
                  },
                  "omission": "Bei aktivierter Serienerfassung gehört diese Feldkonfiguration zur vollständigen Konfiguration; fehlt sie, keine eigene Eingabefreigabe oder Pflicht ableiten.",
                  "source": "Die Konfiguration für serialNumber2 unter serialNumbers.fields der Produktdetailantwort lesen."
                }
              }
            },
            "required": [
              "name",
              "serialNumber1",
              "serialNumber2",
              "additional1",
              "additional2"
            ],
            "type": "object",
            "x-partner-doc": {
              "condition": "Relevant bei enabled=true; daraus keine automatische Mindestzahl benannter Geräte erzeugen.",
              "description": "Die Vorgaben der einzelnen Felder eines Geräteeintrags.",
              "example": {
                "additional1": {
                  "configuredActive": false,
                  "requiredWhenNamed": false,
                  "writable": false
                },
                "additional2": {
                  "configuredActive": false,
                  "requiredWhenNamed": false,
                  "writable": false
                },
                "name": {
                  "configuredActive": true,
                  "requiredWhenNamed": true,
                  "writable": true
                },
                "serialNumber1": {
                  "configuredActive": true,
                  "requiredWhenNamed": true,
                  "writable": true
                },
                "serialNumber2": {
                  "configuredActive": false,
                  "requiredWhenNamed": false,
                  "writable": false
                }
              },
              "omission": "Bei deaktivierter Serienerfassung werden diese Vorgaben nicht benötigt; bei aktivierter Erfassung die mitgeteilte vollständige Konfiguration verwenden.",
              "source": "Den Wert von fields aus serialNumbers der Produktdetailantwort lesen."
            }
          },
          "header": {
            "description": "Die für die Geräteerfassung vorgesehene Überschrift.",
            "type": "string",
            "x-partner-doc": {
              "description": "Die für die Geräteerfassung vorgesehene Überschrift.",
              "example": "Geräteangaben",
              "omission": "Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.",
              "source": "Den Wert von header aus serialNumbers der Produktdetailantwort lesen."
            }
          },
          "slotCount": {
            "description": "Die vollständig zu übermittelnde Anzahl der Geräteeinträge. Sie ist keine Mindestzahl benannter Geräte.",
            "minimum": 0,
            "type": "integer",
            "x-partner-doc": {
              "condition": "Relevant bei enabled=true; daraus keine automatische Mindestzahl benannter Geräte erzeugen.",
              "description": "Die vollständig zu übermittelnde Anzahl der Geräteeinträge. Sie ist keine Mindestzahl benannter Geräte.",
              "example": 1,
              "omission": "Bei deaktivierter Serienerfassung werden diese Vorgaben nicht benötigt; bei aktivierter Erfassung die mitgeteilte vollständige Konfiguration verwenden.",
              "source": "Den Wert von slotCount aus serialNumbers der Produktdetailantwort lesen."
            }
          }
        },
        "required": [
          "enabled"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Produktspezifische Vorgaben für Geräte- und Serienangaben. Aktivierung, Anzahl der Einträge und Feldmetadaten gemeinsam auswerten; daraus folgt keine pauschale Mindestzahl benannter Geräte."
        }
      },
      "Signature": {
        "allOf": [
          {
            "if": {
              "properties": {
                "status": {
                  "description": "Gemeldeter Stand der Gesamtunterzeichnung der zugehörigen Vertragsfassung. Eine einzelne Unterzeichnernachricht ist kein Gesamtabschluss.",
                  "enum": [
                    "NOT_STARTED",
                    "PENDING"
                  ],
                  "x-partner-doc": {
                    "description": "Gemeldeter Stand der Gesamtunterzeichnung der zugehörigen Vertragsfassung. Eine einzelne Unterzeichnernachricht ist kein Gesamtabschluss.",
                    "example": "NOT_STARTED",
                    "omission": "status gehört zu jedem ausgegebenen signature-Objekt. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
                    "source": "Den Wert von signature.status aus der berechtigten Vorgangsantwort lesen."
                  }
                }
              },
              "required": [
                "status"
              ]
            },
            "then": {
              "not": {
                "required": [
                  "confirmedAt"
                ]
              }
            }
          }
        ],
        "dependentRequired": {
          "confirmedAt": [
            "contentRevisionId",
            "signatureAttemptId"
          ],
          "signatureAttemptId": [
            "contentRevisionId"
          ]
        },
        "description": "Der gemeldete Unterzeichnungsstand der zugehörigen Vertragsfassung. Ein geöffneter Link oder eine Browserrückkehr bestätigt keine abgeschlossene Unterschrift.",
        "properties": {
          "confirmedAt": {
            "description": "Genauer Zeitpunkt der bestätigten Gesamtunterzeichnung, soweit ausdrücklich mitgeteilt. In der aktuellen klassischen Vorgangsantwort wird dieses Feld nicht ausgegeben; nicht darauf warten.",
            "format": "date-time",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur einen ausdrücklich ausgewiesenen Bestätigungszeitpunkt verwenden; beim noch nicht begonnenen oder ausstehenden Unterzeichnen keinen Zeitwert ergänzen.",
              "description": "Genauer Zeitpunkt der bestätigten Gesamtunterzeichnung, soweit ausdrücklich mitgeteilt. In der aktuellen klassischen Vorgangsantwort wird dieses Feld nicht ausgegeben; nicht darauf warten.",
              "example": "2026-10-24T10:00:00Z",
              "omission": "Erwartetes Verhalten des aktuellen klassischen Ablaufs. Den Zeitpunkt nicht aus Vertragsdatum, Empfangszeit oder Browserrückkehr ergänzen.",
              "source": "Im aktuellen klassischen Ablauf wird kein genauer Bestätigungszeitpunkt in diesem Antwortfeld geliefert."
            }
          },
          "contentRevisionId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.",
            "x-partner-doc": {
              "description": "Kennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.",
              "example": "a8b2d351-71c6-4a85-9b24-2044951c3002",
              "omission": "Keine Fassungskennung der Unterzeichnung mitgeteilt; eine Vertrags- oder Vorgangskennung ersetzt sie nicht.",
              "source": "Den Wert von signature.contentRevisionId aus der berechtigten Vorgangsantwort lesen."
            }
          },
          "signatureAttemptId": {
            "$ref": "#/components/schemas/ResourceId",
            "description": "Kennung des zugehörigen Unterzeichnungsvorgangs. Wiederzustellung und erneutes Lesen bedeuten keine neue Unterzeichnung.",
            "x-partner-doc": {
              "description": "Kennung des zugehörigen Unterzeichnungsvorgangs. Wiederzustellung und erneutes Lesen bedeuten keine neue Unterzeichnung.",
              "example": "a8b2d351-71c6-4a85-9b24-2044951c3003",
              "omission": "Keine Kennung des Unterzeichnungsvorgangs mitgeteilt; aus erneutem Lesen oder Wiederzustellung keine neue Unterzeichnung ableiten.",
              "source": "Den Wert von signature.signatureAttemptId aus der berechtigten Vorgangsantwort lesen."
            }
          },
          "signingUrl": {
            "description": "Ein tatsächlich bereitgestellter Unterzeichnungslink. Die Einladung kann auch ohne Link in der API-Antwort erfolgen.",
            "format": "uri",
            "type": "string",
            "x-partner-doc": {
              "condition": "Nur einen tatsächlich bereitgestellten Link verwenden, niemals selbst aus Kennungen konstruieren.",
              "description": "Ein tatsächlich bereitgestellter Unterzeichnungslink. Die Einladung kann auch ohne Link in der API-Antwort erfolgen.",
              "example": "https://sign.example/synthetic-only",
              "omission": "Die Unterzeichnung kann über die versandte Einladung erfolgen; ein API-Link ist nicht garantiert.",
              "source": "Den Wert von signature.signingUrl aus der berechtigten Vorgangsantwort lesen."
            }
          },
          "status": {
            "description": "Gemeldeter Stand der Gesamtunterzeichnung der zugehörigen Vertragsfassung. Eine einzelne Unterzeichnernachricht ist kein Gesamtabschluss.",
            "examples": [
              "PENDING",
              "SIGNED",
              "NOT_STARTED",
              "DECLINED",
              "WITHDRAWN",
              "UNKNOWN"
            ],
            "type": "string",
            "x-partner-doc": {
              "description": "Gemeldeter Stand der Gesamtunterzeichnung der zugehörigen Vertragsfassung. Eine einzelne Unterzeichnernachricht ist kein Gesamtabschluss.",
              "example": "PENDING",
              "omission": "status gehört zu jedem ausgegebenen signature-Objekt. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.",
              "source": "Den Wert von signature.status aus der berechtigten Vorgangsantwort lesen."
            }
          }
        },
        "required": [
          "status"
        ],
        "type": "object",
        "x-partner-doc": {
          "description": "Der gemeldete Unterzeichnungsstand der zugehörigen Vertragsfassung. Ein geöffneter Link oder eine Browserrückkehr bestätigt keine abgeschlossene Unterschrift."
        }
      },
      "TraceId": {
        "description": "Zusätzliche Diagnosekennung einer Anfrage, sofern die Antwort eine solche ausweist. Sie verleiht keine Berechtigung.",
        "maxLength": 32,
        "minLength": 32,
        "pattern": "^(?!0{32}$)[0-9a-f]{32}$",
        "type": "string",
        "x-partner-doc": {
          "description": "Zusätzliche Diagnosekennung einer Anfrage, sofern die Antwort eine solche ausweist. Sie verleiht keine Berechtigung."
        }
      },
      "Uuid": {
        "description": "Öffentliche Kennung einer konkreten Ressource. Die passende Kennung aus der dafür vorgesehenen Antwort übernehmen; Anzeigenamen oder Geschäftsnummern ersetzen sie nicht.",
        "examples": [
          "00000000-0000-4000-8000-000000000001"
        ],
        "format": "uuid",
        "type": "string",
        "x-partner-doc": {
          "description": "Öffentliche Kennung einer konkreten Ressource. Die passende Kennung aus der dafür vorgesehenen Antwort übernehmen; Anzeigenamen oder Geschäftsnummern ersetzen sie nicht."
        }
      }
    },
    "securitySchemes": {
      "PartnerAccessToken": {
        "bearerFormat": "JWT",
        "description": "Verwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.",
        "scheme": "bearer",
        "type": "http"
      }
    }
  },
  "info": {
    "description": "# Schnellstart – Vom API-Zugang zum unterschriebenen Neuvertrag\n\nMit der Partner-API reichen Sie einen Vertrag für Ihren Kunden ein. Sie wählen Verkäufer, Filiale und Angebot und übermitteln die Kundendaten. SmartPay legt den Vertrag an und schickt dem Kunden eine E-Mail zur Unterschrift. Nach Unterschrift und erfolgreicher Prüfung können Sie den fertigen Vertrag und seine PDF abrufen.\n\n**Wichtig:** Eine erfolgreiche Antwort auf `POST /contracts` bestätigt zunächst nur die Annahme. Erst der Vorgangsstatus `COMPLETED` bestätigt den erfolgreichen Abschluss.\n\n[A – Zugang](#description/a-authentifizierung) · [B – Verkäufer und Filiale](#description/b-verk%C3%A4ufer-und-filiale) · [C – Angebot und Kunde](#description/c-kunde-produkt-und-konditionen) · [D – Einreichen](#description/d-vertrag-einreichen) · [E – Unterschreiben](#description/e-unterschrift) · [F – Ergebnis und PDF](#description/f-abschluss-und-dokument) · [G – Antwort fehlt](#description/g-fehler-und-wiederaufnahme)\n\n**Feldreferenz:** [Vertrag anlegen](#description/vertrag-anlegen) · [Bearbeitungsstand lesen](#description/bearbeitungsstand-lesen) · [Vertrag lesen](#description/vertrag-lesen). Dort stehen auch alle verschachtelten Felder, Pflichtangaben und Bedingungen.\n\nWiederholen Sie Aufrufe sicher und nennen Sie bei Fehlern die passende Kennung: [HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose). Für den normalen Ablauf ist kein Tracingsystem erforderlich.\n\nDieser Leitfaden gilt für einen klassischen **nichtmobilen NEW_CONTRACT-Einzelvertrag**. Zusatzprodukte, Bundles, Mobilfunk, Verlängerungen und Tarifwechsel gehören nicht zu diesem Angebot. Alle Werte in den Beispielen sind erfunden. Verwenden Sie bei der Integration Ihre eigenen freigegebenen Angebote und Kundendaten.\n\n## A – Authentifizierung\n\nFür Ihre Umgebung erhalten Sie die API-Adresse und einen eingerichteten Zugang mit Client-ID und Secret. Die Dienste haben unterschiedliche Aufgaben:\n\n| Dienst | Ihre Verwendung |\n| --- | --- |\n| auth.* | Hier holen Sie ein zeitlich begrenztes Zugriffstoken. |\n| api.* | Hier suchen Sie Angebote, reichen Verträge ein und lesen Ergebnisse. |\n| app.* | Backoffice für berechtigte Mitarbeiter; kein Bestandteil Ihrer API-Aufrufkette. |\n\nDie konkreten Hostnamen erhalten Sie bei der Einrichtung. Die folgenden API-Pfade enthalten `/v2` bereits einmal; hängen Sie sie an den bereitgestellten api.*-Ursprung an. Beziehen Sie das Zugriffstoken über den eingerichteten auth.*-Identitätsdienst und verwenden Sie es anschließend als Bearer-Token bei api.*.\n\nDen `issuer` erhalten Sie aus der Zugangskonfiguration der jeweiligen Umgebung. Lesen Sie dessen OIDC Discovery, vergleichen Sie den zurückgegebenen issuer mit Ihrer Konfiguration und übernehmen Sie `token_endpoint` als `{{tokenEndpoint}}`. Damit müssen Sie keine Staging- oder Produktionsadresse aus einem DEV-Beispiel erraten.\n\nDer nachgewiesene eingerichtete Zugang verwendet `client_secret_post`: Client-ID und Secret werden form-urlencoded im Requestbody gesendet. `client_secret_basic` verwendet stattdessen den Authorization-Header. Verwenden Sie nur das für Ihren Zugang bestätigte Verfahren. `token_endpoint_auth_methods_supported` nennt die verfügbaren Verfahren des Dienstes, nicht automatisch das für Ihren Client eingerichtete Verfahren.\n\nBeispielrequest mit absichtlich unbrauchbaren Zugangsdaten:\n\n```http\nPOST {{tokenEndpoint}}\nContent-Type: application/x-www-form-urlencoded\nAccept: application/json\n\ngrant_type=client_credentials&client_id=synthetic-partner-client&client_secret=synthetic-example-only-not-a-secret\n```\n\nBeispielantwort **HTTP 200**:\n\n<!-- oauth-example:token-response -->\n```json\n{\n  \"access_token\": \"SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\",\n  \"token_type\": \"Bearer\",\n  \"expires_in\": 300\n}\n```\n\nNehmen Sie `access_token` als Bearer-Token für die API-Aufrufe. `expires_in` gibt die Gültigkeit in Sekunden an. Holen Sie nach Ablauf ein neues Token. Der folgende API-Aufruf zeigt denselben unbrauchbaren Beispieltoken:\n\n```http\nGET /v2/sales-context\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\n```\n\nClientsecret und echte Token gehören ausschließlich in Ihre geschützte Konfiguration. Geben Sie sie nicht in Beispieldateien, Protokollen oder Screenshots weiter. TLS-Prüfung eingeschaltet lassen.\n\n## B – Verkäufer und Filiale\n\nLassen Sie sich die Verkäufer und Filialen anzeigen, die Ihr Zugang verwenden darf:\n\n```http\nGET /v2/sales-context\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\n```\n\nAntwort **HTTP 200**:\n\n<!-- example:sales-context -->\n```json\n{\n  \"sellerAccounts\": [\n    {\n      \"sellerAccountId\": \"20000000-0000-4000-8000-000000000001\",\n      \"displayName\": \"Ada Beispiel\"\n    }\n  ],\n  \"branches\": [\n    {\n      \"branchId\": \"30000000-0000-4000-8000-000000000001\",\n      \"displayName\": \"Testfiliale Nord\"\n    }\n  ]\n}\n```\n\nWählen Sie den Verkäufer anhand seines Namens und verwenden Sie seine `sellerAccountId`. Wählen Sie gegebenenfalls eine Filiale mit `branchId`. Eine UUID ist eine eindeutige Kennung; Namen dienen nur der Anzeige. Das Beispiel verwendet Ada Beispiel und Testfiliale Nord.\n\nDieser Teil kommt später unter `salesContext` in den Vertragsrequest:\n\n<!-- example:sales-context-input -->\n```json\n{\n  \"sellerAccountId\": \"20000000-0000-4000-8000-000000000001\",\n  \"branchId\": \"30000000-0000-4000-8000-000000000001\"\n}\n```\n\nBei mehreren Filialen müssen Sie auswählen. Gibt es genau eine aktive Filiale, kann SmartPay sie nach Prüfung zuordnen, wenn Sie branchId auslassen. Ohne aktive Filiale bleibt die Zuordnung leer, soweit der Verkauf erlaubt ist. [Alle Regeln zu salesContext und branchId](#description/vertrag-anlegen).\n\n## C – Kunde, Produkt und Konditionen\n\n**Angebot auswählen:** Lesen Sie zuerst Ihre Kategorien und danach die Produkte der gewählten Kategorie. Wählen Sie jeweils bewusst anhand der Antwort; nicht automatisch den ersten Listeneintrag.\n\n```http\nGET /v2/categories\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\n```\n\nAntwort **HTTP 200**:\n\n<!-- example:categories -->\n```json\n{\n  \"items\": [\n    {\n      \"categoryId\": \"40000000-0000-4000-8000-000000000001\",\n      \"name\": \"Synthetische Beispielkategorie\"\n    }\n  ]\n}\n```\n\n```http\nGET /v2/categories/40000000-0000-4000-8000-000000000001/products\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\n```\n\nAntwort **HTTP 200**:\n\n<!-- example:products -->\n```json\n{\n  \"items\": [\n    {\n      \"productId\": \"51f866e9-2307-47c6-8de3-e6b1f24f8d31\",\n      \"categoryId\": \"40000000-0000-4000-8000-000000000001\",\n      \"name\": \"Synthetisches Beispielprodukt\"\n    }\n  ]\n}\n```\n\nLesen Sie die Angaben und Auswahlmöglichkeiten des Produkts. `usage=NEW_CONTRACT` sagt, dass Sie einen Neuvertrag vorbereiten:\n\n```http\nGET /v2/products/51f866e9-2307-47c6-8de3-e6b1f24f8d31?usage=NEW_CONTRACT\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\n```\n\nAntwort **HTTP 200**:\n\n<!-- example:product-details -->\n```json\n{\n  \"productId\": \"51f866e9-2307-47c6-8de3-e6b1f24f8d31\",\n  \"categoryId\": \"40000000-0000-4000-8000-000000000001\",\n  \"name\": \"Synthetisches Beispielprodukt\",\n  \"customerRequirements\": {\n    \"idCardNumberRequired\": true\n  },\n  \"serialNumbers\": {\n    \"enabled\": false\n  },\n  \"addonProduct\": false,\n  \"durations\": [\n    {\n      \"durationId\": \"17ef5d55-617c-429a-b523-637625346856\",\n      \"durationMonths\": 24\n    }\n  ],\n  \"payments\": [\n    {\n      \"paymentId\": \"95012da7-bd0c-4b4a-b181-a43bff8578d0\",\n      \"paymentType\": \"MONTHLY\"\n    }\n  ],\n  \"priceTypes\": [\n    \"AGB\"\n  ],\n  \"promotions\": []\n}\n```\n\nDas Produkt nennt Laufzeiten in `durations`, Zahlweisen in `payments` und erlaubte Preisarten in `priceTypes`. Das Beispiel wählt 24 Monate, monatliche Zahlung und AGB. Promotionen wählen Sie nur nach der angebotenen Preisart und deren Bedingungen. [Felder und Bedingungen](#description/weitere-ein-und-ausgaben).\n\nLesen Sie mit Ihrer vollständigen Auswahl die berechneten Preise:\n\n```http\nGET /v2/products/51f866e9-2307-47c6-8de3-e6b1f24f8d31?usage=NEW_CONTRACT&durationId=17ef5d55-617c-429a-b523-637625346856&paymentId=95012da7-bd0c-4b4a-b181-a43bff8578d0&priceType=AGB\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\n```\n\nAntwort **HTTP 200**:\n\n<!-- example:product-conditions -->\n```json\n{\n  \"productId\": \"51f866e9-2307-47c6-8de3-e6b1f24f8d31\",\n  \"conditions\": {\n    \"durationId\": \"17ef5d55-617c-429a-b523-637625346856\",\n    \"paymentId\": \"95012da7-bd0c-4b4a-b181-a43bff8578d0\",\n    \"priceType\": \"AGB\",\n    \"regularPayment\": {\n      \"amount\": \"10.50\",\n      \"currency\": \"EUR\",\n      \"basis\": \"PAYMENT_INTERVAL\",\n      \"taxBasis\": \"GROSS\"\n    },\n    \"setupCharge\": {\n      \"amount\": \"19.95\",\n      \"currency\": \"EUR\",\n      \"basis\": \"ONE_OFF\",\n      \"taxBasis\": \"GROSS\"\n    }\n  }\n}\n```\n\nÜbernehmen Sie die gewählten Kennungen in den Vertragsrequest. Die Preisbeträge sind Antworten von SmartPay und werden nicht zurückgesendet. Beachten Sie Währung, brutto/netto und den Zahlungsbezug: `PAYMENT_INTERVAL` gilt je Zahlperiode, `ONE_OFF` einmalig.\n\n**Neukundendaten erfassen:** Sammeln Sie Person, Adresse, E-Mail, Telefonkontakt und Bankverbindung. Die Anlage geschieht gemeinsam mit dem Vertrag; Sie benötigen keinen separaten Kundenanlage-Aufruf. Für dieses Produkt ist `idCardNumberRequired: true`, deshalb enthält das folgende Beispiel eine Ausweisnummer:\n\n<!-- example:new-customer-input -->\n```json\n{\n  \"person\": {\n    \"firstname\": \"Anna\",\n    \"lastname\": \"Muster\",\n    \"salutationType\": \"MADAM\",\n    \"birthdate\": \"1985-04-12\",\n    \"idCardNumber\": \"SYNTHETIC-GUIDE-ID-001\"\n  },\n  \"address\": {\n    \"street\": \"Beispielstraße 10\",\n    \"zip\": \"10115\",\n    \"city\": \"Berlin\",\n    \"country\": \"DE\"\n  },\n  \"email\": \"anna.muster@example.invalid\",\n  \"bank\": {\n    \"iban\": \"DE89370400440532013000\",\n    \"holder\": \"Anna Muster\"\n  },\n  \"phone\": \"+493000000000\",\n  \"externalCustomerNumber\": \"PARTNER-SYNTHETIC-1001\"\n}\n```\n\nDiese Angaben kommen unter `customer.newCustomer` in den Vertragsrequest. Die Bankinhaberin ist dieselbe Person. Bei diesem deutschen IBAN-Beispiel werden BIC und Bankname von SmartPay nach den bestehenden Regeln ermittelt. Für andere Fälle prüfen Sie die Bankfelder. [Person, Adresse, Kontakte, Bank sowie Firma/Steuerdaten vollständig nachlesen](#description/vertrag-anlegen).\n\nWenn Sie einen bestehenden Kunden verwenden möchten, folgen Sie stattdessen der [Bestandskundenalternative](#description/alternative-bestandskunden-suchen-und-verwenden).\n\n## D – Vertrag einreichen\n\nSetzen Sie die Teile zusammen: Ihre Geschäftsreferenz, Verkäufer/Filiale, ausgewähltes Angebot und Konditionen sowie die Neukundendaten. `externalReference` ist Ihre eigene eindeutige Zuordnung zu diesem Auftrag. `debitDay` ist der gewünschte Einzugstag. [Vollständige Feldreferenz](#description/vertrag-anlegen).\n\nVergeben Sie außerdem einen `Idempotency-Key`. Halten Sie Key, externalReference und Inhalt für diese Einreichung und jede Wiederholung stabil. Ein Klick auf Wiederholen darf keine neue Zufallsreferenz erzeugen. [HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).\n\n```http\nPOST /v2/contracts\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\nContent-Type: application/json\nIdempotency-Key: synthetic-guide-create-001\n```\n\n<!-- example:create-request -->\n```json\n{\n  \"externalReference\": \"synthetic-guide-new-001\",\n  \"salesContext\": {\n    \"sellerAccountId\": \"20000000-0000-4000-8000-000000000001\",\n    \"branchId\": \"30000000-0000-4000-8000-000000000001\"\n  },\n  \"productId\": \"51f866e9-2307-47c6-8de3-e6b1f24f8d31\",\n  \"durationId\": \"17ef5d55-617c-429a-b523-637625346856\",\n  \"paymentId\": \"95012da7-bd0c-4b4a-b181-a43bff8578d0\",\n  \"priceType\": \"AGB\",\n  \"customer\": {\n    \"newCustomer\": {\n      \"person\": {\n        \"firstname\": \"Anna\",\n        \"lastname\": \"Muster\",\n        \"salutationType\": \"MADAM\",\n        \"birthdate\": \"1985-04-12\",\n        \"idCardNumber\": \"SYNTHETIC-GUIDE-ID-001\"\n      },\n      \"address\": {\n        \"street\": \"Beispielstraße 10\",\n        \"zip\": \"10115\",\n        \"city\": \"Berlin\",\n        \"country\": \"DE\"\n      },\n      \"email\": \"anna.muster@example.invalid\",\n      \"bank\": {\n        \"iban\": \"DE89370400440532013000\",\n        \"holder\": \"Anna Muster\"\n      },\n      \"phone\": \"+493000000000\",\n      \"externalCustomerNumber\": \"PARTNER-SYNTHETIC-1001\"\n    }\n  },\n  \"debitDay\": 5\n}\n```\n\nAntwort **HTTP 201**:\n\n<!-- example:pending-signature -->\n```json\n{\n  \"operationId\": \"a8b2d351-71c6-4a85-9b24-2044951c3001\",\n  \"contractId\": \"73530a36-0c02-4a38-9292-7a2b185cc9d0\",\n  \"type\": \"NEW_CONTRACT\",\n  \"externalReference\": \"synthetic-guide-new-001\",\n  \"status\": \"PENDING_SIGNATURE\",\n  \"contentRevisionId\": \"a8b2d351-71c6-4a85-9b24-2044951c3002\",\n  \"signature\": {\n    \"status\": \"PENDING\",\n    \"contentRevisionId\": \"a8b2d351-71c6-4a85-9b24-2044951c3002\",\n    \"signatureAttemptId\": \"a8b2d351-71c6-4a85-9b24-2044951c3003\"\n  },\n  \"salesContext\": {\n    \"sellerAccountId\": \"20000000-0000-4000-8000-000000000001\",\n    \"branchId\": \"30000000-0000-4000-8000-000000000001\"\n  }\n}\n```\n\nSpeichern Sie `operationId` und `contractId` zusammen mit Ihrer externalReference. Der Status `PENDING_SIGNATURE` bedeutet: angenommen, aber noch nicht unterschrieben und noch nicht abgeschlossen. Die Kundenanlage gehört zu diesem Aufruf; ein identischer Replay legt keinen zweiten Kunden an.\n\n## E – Unterschrift\n\nSmartPay sendet die Einladung an die E-Mail-Adresse des Kunden. Der Kunde unterschreibt über den Link in der E-Mail, außerhalb Ihrer API-Anbindung. Sie müssen keinen Abschlussaufruf senden und den Vertrags-POST dafür nicht wiederholen.\n\nDer Signaturdienst meldet die abgeschlossene Unterschrift an SmartPay. SmartPay prüft die authentifizierte Meldung, übernimmt die unterschriebene PDF und verarbeitet den Vertrag weiter. Sie fragen den Signaturdienst nicht nach seinem Status ab. Ein Linkaufruf oder eine Browserrückkehr allein gilt noch nicht als fertige Unterschrift.\n\n## F – Abschluss und Dokument\n\nLesen Sie den Bearbeitungsstand über die operationId aus D:\n\n```http\nGET /v2/contract-operations/a8b2d351-71c6-4a85-9b24-2044951c3001\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\n```\n\nAntwort **HTTP 200**:\n\n<!-- example:completed -->\n```json\n{\n  \"operationId\": \"a8b2d351-71c6-4a85-9b24-2044951c3001\",\n  \"contractId\": \"73530a36-0c02-4a38-9292-7a2b185cc9d0\",\n  \"type\": \"NEW_CONTRACT\",\n  \"externalReference\": \"synthetic-guide-new-001\",\n  \"status\": \"COMPLETED\",\n  \"contentRevisionId\": \"a8b2d351-71c6-4a85-9b24-2044951c3002\",\n  \"signature\": {\n    \"status\": \"SIGNED\",\n    \"contentRevisionId\": \"a8b2d351-71c6-4a85-9b24-2044951c3002\",\n    \"signatureAttemptId\": \"a8b2d351-71c6-4a85-9b24-2044951c3003\"\n  },\n  \"documents\": [\n    {\n      \"documentId\": \"a8b2d351-71c6-4a85-9b24-2044951c3004\",\n      \"contractId\": \"73530a36-0c02-4a38-9292-7a2b185cc9d0\",\n      \"operationId\": \"a8b2d351-71c6-4a85-9b24-2044951c3001\",\n      \"contentRevisionId\": \"a8b2d351-71c6-4a85-9b24-2044951c3002\",\n      \"signatureAttemptId\": \"a8b2d351-71c6-4a85-9b24-2044951c3003\",\n      \"purpose\": \"CONTRACT\",\n      \"phase\": \"SIGNED\",\n      \"availability\": \"AVAILABLE\",\n      \"sha256\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\n    }\n  ],\n  \"localAppliedAt\": \"2026-10-15T10:05:00Z\",\n  \"salesContext\": {\n    \"sellerAccountId\": \"20000000-0000-4000-8000-000000000001\",\n    \"branchId\": \"30000000-0000-4000-8000-000000000001\"\n  }\n}\n```\n\n`COMPLETED` bedeutet, dass SmartPay den Vertrag einschließlich der erforderlichen Prüfungen und Abschlussarbeiten erfolgreich abgeschlossen hat. `localAppliedAt` ist der bestätigte Abschlusszeitpunkt. Eine unterschriebene PDF allein ist noch kein erfolgreicher Vertragsabschluss. Bei einem anderen Status lesen Sie dessen Bedeutung in [Bearbeitungsstand lesen](#description/bearbeitungsstand-lesen).\n\nLesen Sie danach die gespeicherten Vertragsdaten über die contractId. Diese Antwort beschreibt den Vertrag; sie ist ein anderes Modell als der Bearbeitungsstand:\n\n```http\nGET /v2/contracts/73530a36-0c02-4a38-9292-7a2b185cc9d0\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\n```\n\nAntwort **HTTP 200**:\n\n<!-- example:contract -->\n```json\n{\n  \"contractId\": \"73530a36-0c02-4a38-9292-7a2b185cc9d0\",\n  \"customerId\": \"11111111-1111-4111-8111-111111111111\",\n  \"productId\": \"51f866e9-2307-47c6-8de3-e6b1f24f8d31\",\n  \"salesContext\": {\n    \"sellerAccountId\": \"20000000-0000-4000-8000-000000000001\",\n    \"branchId\": \"30000000-0000-4000-8000-000000000001\"\n  },\n  \"documents\": [\n    {\n      \"documentId\": \"a8b2d351-71c6-4a85-9b24-2044951c3004\",\n      \"contractId\": \"73530a36-0c02-4a38-9292-7a2b185cc9d0\",\n      \"purpose\": \"CONTRACT\",\n      \"availability\": \"AVAILABLE\",\n      \"sha256\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\n    }\n  ]\n}\n```\n\nDie ausgegebene customerId ist die Kennung des angelegten Kunden. Die Dokumentliste nennt die verfügbare Vertragsfassung. [Vertrags- und Dokumentfelder](#description/vertrag-lesen).\n\nLaden Sie das dort verfügbare Dokument mit seiner documentId:\n\n```http\nGET /v2/contracts/73530a36-0c02-4a38-9292-7a2b185cc9d0/documents/a8b2d351-71c6-4a85-9b24-2044951c3004\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/pdf\n```\n\n```http\nHTTP/1.1 200 OK\nContent-Type: application/pdf\n\n<GESPEICHERTE_PDF_BYTES>\n```\n\nPrüfen Sie SHA256 der empfangenen Bytes gegen `documents[].sha256`. Eine documentId bezeichnet genau diese Dateifassung. Der a…a-Hash im Beispiel ist nur ein Platzhalter, keine tatsächlich erzeugte PDF.\n\n## G – Fehler und Wiederaufnahme\n\nFalls die Antwort auf die Einreichung ausbleibt, kann der Auftrag trotzdem angenommen sein. Suchen Sie zuerst mit Ihrer unveränderten externalReference:\n\n```http\nGET /v2/contract-operations?externalReference=synthetic-guide-new-001\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\n```\n\nAntwort **HTTP 200**:\n\n<!-- example:reference-search -->\n```json\n{\n  \"items\": [\n    {\n      \"operationId\": \"a8b2d351-71c6-4a85-9b24-2044951c3001\",\n      \"contractId\": \"73530a36-0c02-4a38-9292-7a2b185cc9d0\",\n      \"type\": \"NEW_CONTRACT\",\n      \"externalReference\": \"synthetic-guide-new-001\",\n      \"status\": \"COMPLETED\",\n      \"contentRevisionId\": \"a8b2d351-71c6-4a85-9b24-2044951c3002\",\n      \"signature\": {\n        \"status\": \"SIGNED\",\n        \"contentRevisionId\": \"a8b2d351-71c6-4a85-9b24-2044951c3002\",\n        \"signatureAttemptId\": \"a8b2d351-71c6-4a85-9b24-2044951c3003\"\n      },\n      \"documents\": [\n        {\n          \"documentId\": \"a8b2d351-71c6-4a85-9b24-2044951c3004\",\n          \"contractId\": \"73530a36-0c02-4a38-9292-7a2b185cc9d0\",\n          \"operationId\": \"a8b2d351-71c6-4a85-9b24-2044951c3001\",\n          \"contentRevisionId\": \"a8b2d351-71c6-4a85-9b24-2044951c3002\",\n          \"signatureAttemptId\": \"a8b2d351-71c6-4a85-9b24-2044951c3003\",\n          \"purpose\": \"CONTRACT\",\n          \"phase\": \"SIGNED\",\n          \"availability\": \"AVAILABLE\",\n          \"sha256\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\n        }\n      ],\n      \"localAppliedAt\": \"2026-10-15T10:05:00Z\",\n      \"salesContext\": {\n        \"sellerAccountId\": \"20000000-0000-4000-8000-000000000001\",\n        \"branchId\": \"30000000-0000-4000-8000-000000000001\"\n      }\n    }\n  ]\n}\n```\n\nVerwenden Sie die gefundene operationId, um den aktuellen Stand zu lesen. Falls eine Wiederholung nötig ist, senden Sie denselben Requestbody aus D mit demselben Idempotency-Key und derselben externalReference. Nicht blind mit einer neuen Referenz anlegen. [Fehler und Wiederaufnahme im Detail](#description/fehler-und-wiederaufnahme-im-detail).\n\n## Alternative: Bestandskunden suchen und verwenden\n\nDiese Alternative ersetzt die Neukundendaten vor der ersten Einreichung. Die folgenden Beispiel-IDs stehen hier für die Ausgangssituation eines bereits bestehenden Kunden. Sie führen die Suche nicht erst nach der Neukundenanlage aus.\n\n```http\nPOST /v2/customers/search\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\nContent-Type: application/json\n```\n\n<!-- example:own-search-request -->\n```json\n{\n  \"mode\": \"OWN\",\n  \"filters\": {\n    \"customerNumber\": \"K12345\"\n  },\n  \"offset\": 0,\n  \"limit\": 25\n}\n```\n\nAntwort **HTTP 200**:\n\n<!-- example:own-search-response -->\n```json\n{\n  \"mode\": \"OWN\",\n  \"items\": [\n    {\n      \"customerId\": \"11111111-1111-4111-8111-111111111111\",\n      \"customerNumber\": \"K12345\",\n      \"firstname\": \"Anna\",\n      \"lastname\": \"Muster\"\n    }\n  ],\n  \"offset\": 0,\n  \"limit\": 25,\n  \"hasMore\": false\n}\n```\n\nOWN sucht in Ihrem berechtigten Kundenbestand. Mindestens ein Filter muss gesetzt sein; mehrere Kriterien schränken die Suche gemeinsam ein. Wählen Sie den passenden Treffer bewusst. `customerNumber` ist die SmartPay-Nummer, `externalCustomerNumber` Ihre eigene Partnerkundennummer. Ein Treffer gibt keine fremden Verträge frei.\n\nStatt newCustomer senden Sie nur customerId; die übrigen Auswahlen bleiben gleich:\n\n```http\nPOST /v2/contracts\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\nContent-Type: application/json\nIdempotency-Key: synthetic-guide-create-001\n```\n\n<!-- example:existing-customer-create-request -->\n```json\n{\n  \"externalReference\": \"synthetic-guide-new-001\",\n  \"salesContext\": {\n    \"sellerAccountId\": \"20000000-0000-4000-8000-000000000001\",\n    \"branchId\": \"30000000-0000-4000-8000-000000000001\"\n  },\n  \"productId\": \"51f866e9-2307-47c6-8de3-e6b1f24f8d31\",\n  \"durationId\": \"17ef5d55-617c-429a-b523-637625346856\",\n  \"paymentId\": \"95012da7-bd0c-4b4a-b181-a43bff8578d0\",\n  \"priceType\": \"AGB\",\n  \"customer\": {\n    \"customerId\": \"11111111-1111-4111-8111-111111111111\"\n  },\n  \"debitDay\": 5\n}\n```\n\nBei Annahme erhalten Sie ebenfalls HTTP 201 und eine Vorgangsantwort. Nach tatsächlicher Annahme ist ein Wechsel zwischen `newCustomer` und `customerId` bei gleicher Referenz oder gleichem Key geänderter Inhalt und ergibt 409. Ein identischer Replay verwendet immer die ursprünglich angenommene Variante.\n\nIDENTIFY ist eine getrennte Suchmöglichkeit: ausschließlich die gemeinsame Übereinstimmung von Nachname, Geburt und Ausweisnummer. Sie wird nur ausdrücklich angefordert und liefert weniger Daten als OWN. Es gibt keinen automatischen Wechsel aus OWN.\n\n## Alternative: bewusste Risikoübernahme\n\nNur wenn SmartPay einen geeigneten Vorgang zur Risikoentscheidung vorlegt, verwenden Sie diesen Weg. Für einen regulär erfolgreich geprüften Vertrag ist er kein Pflichtschritt. Ein dazu berechtigter Mitarbeiter muss die Entscheidung bewusst treffen; seine Account-UUID wird als decidedByAccountId übergeben.\n\n```http\nPOST /v2/contract-operations/a8b2d351-71c6-4a85-9b24-2044951c3001/activate-on-own-risk\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\nContent-Type: application/json\nIdempotency-Key: synthetic-guide-risk-001\n```\n\n<!-- example:risk-request -->\n```json\n{\n  \"decidedByAccountId\": \"693ce612-51cd-4b82-a9b3-8138851b573e\",\n  \"riskAccepted\": true\n}\n```\n\nriskAccepted muss ausdrücklich true sein. Erwartet: HTTP 200 mit dem tatsächlich erreichten Vorgangsstatus. Die aktuelle Unterschrift und die unterschriebene Endfassung sind weiterhin erforderlich. UNKNOWN oder eine fehlende Unterschrift lassen sich damit nicht bestätigen. Nach Annahme setzt SmartPay zulässige Schritte selbst fort. Die bisherigen Verkäufer-/Filialdaten bleiben bestehen.\n\n## Alternative: zulässiges Verwerfen\n\nEin berechtigter Mitarbeiter kann einen noch verwerfbaren Vorgang bewusst beenden. Dies ist keine Kündigung oder Rückabwicklung eines bereits erfüllten Vertrags. Die Beispiel-IDs zeigen eine Alternative vor Abschluss, nicht das Verwerfen des COMPLETED-Beispiels.\n\n```http\nPOST /v2/contract-operations/a8b2d351-71c6-4a85-9b24-2044951c3001/discard\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\nContent-Type: application/json\nIdempotency-Key: synthetic-guide-discard-001\n```\n\n<!-- example:discard-request -->\n```json\n{\n  \"decidedByAccountId\": \"693ce612-51cd-4b82-a9b3-8138851b573e\"\n}\n```\n\nBestätigt verworfen: **HTTP 200**, status DISCARDED:\n\n<!-- example:discarded -->\n```json\n{\n  \"operationId\": \"a8b2d351-71c6-4a85-9b24-2044951c3001\",\n  \"contractId\": \"73530a36-0c02-4a38-9292-7a2b185cc9d0\",\n  \"type\": \"NEW_CONTRACT\",\n  \"externalReference\": \"synthetic-guide-new-001\",\n  \"status\": \"DISCARDED\"\n}\n```\n\nNoch nicht bestätigt: **HTTP 202**, status DISCARD_PENDING:\n\n<!-- example:discard-pending -->\n```json\n{\n  \"operationId\": \"a8b2d351-71c6-4a85-9b24-2044951c3001\",\n  \"contractId\": \"73530a36-0c02-4a38-9292-7a2b185cc9d0\",\n  \"type\": \"NEW_CONTRACT\",\n  \"externalReference\": \"synthetic-guide-new-001\",\n  \"status\": \"DISCARD_PENDING\"\n}\n```\n\nDISCARD_PENDING oder OUTCOME_UNKNOWN ist noch kein bestätigtes DISCARDED. Lesen Sie weiter den Vorgangsstand; ein späteres Signaturereignis darf einen bereits bestätigt verworfenen Vorgang nicht erneut aktivieren.\n\n## Optionale Partnercallbacks\n\nWenn Sie Nachrichten über Änderungen empfangen möchten, geben Sie vor der ersten Einreichung `callbackUrl: \"https://partner.example/smartpay/callbacks\"` an. Diese Adresse ist nur ein Beispiel. Der echte HTTPS-Empfänger und sein separater Signaturschlüssel müssen vorher eingerichtet sein. Ohne callbackUrl funktioniert derselbe Vertragsablauf; Sie lesen den Stand dann selbst über die API.\n\nSmartPay sendet unter anderem `contract.operation.updated` an Ihren Empfänger. Beispiel für den abgeschlossenen Vorgang:\n\n```http\nPOST <VEREINBARTE_CALLBACK_URL>\nContent-Type: application/json\nSmartPay-Signature: t=<FRISCHER_UNIXZEITSTEMPEL>,v1=<HMAC_SHA256_HEX>\n```\n\n<!-- example:completed-callback -->\n```json\n{\n  \"eventId\": \"90000000-0000-4000-8000-000000000001\",\n  \"type\": \"contract.operation.updated\",\n  \"occurredAt\": \"2026-10-15T10:05:00Z\",\n  \"operationId\": \"a8b2d351-71c6-4a85-9b24-2044951c3001\",\n  \"contractId\": \"73530a36-0c02-4a38-9292-7a2b185cc9d0\",\n  \"externalReference\": \"synthetic-guide-new-001\",\n  \"status\": \"COMPLETED\",\n  \"documents\": [\n    {\n      \"documentId\": \"a8b2d351-71c6-4a85-9b24-2044951c3004\",\n      \"contractId\": \"73530a36-0c02-4a38-9292-7a2b185cc9d0\",\n      \"purpose\": \"CONTRACT\",\n      \"availability\": \"AVAILABLE\",\n      \"sha256\": \"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\n    }\n  ]\n}\n```\n\nPrüfen Sie HMAC-SHA256 mit dem separaten Resellerschlüssel über UTF8(t + '.') und danach die exakten unveränderten Bodybytes, bevor Sie JSON umformatieren. Vergleichen Sie konstantzeitlich und prüfen Sie ein enges Zeitfenster, zum Beispiel 300 Sekunden. Speichern Sie die gültige Nachricht dauerhaft und deduplizieren Sie nach eventId. Bestätigen Sie dann mit 2xx, beispielsweise HTTP 204. Wiederholungen haben dieselbe eventId und dieselben Bodybytes, aber einen frischen Zeitstempel und eine dazu passende Signatur.\n\nDie beiden ausgehenden Webhooks beschreiben die genauen Zustellregeln. Eine Nachricht ist eine Benachrichtigung und erteilt keine zusätzlichen Zugriffsrechte.\n\n## Fehler und Wiederaufnahme im Detail\n\nEin identischer Replay kann die gespeicherte erste HTTP-201-Antwort mit damaligem PENDING_SIGNATURE zurückgeben. Den aktuellen Fortschritt lesen Sie deshalb immer mit dem Vorgangs-GET. Eine leere Referenzsuche beweist nicht, dass ein gleichzeitiger Auftrag niemals angenommen wurde. Geänderter Inhalt bei gebundenem Key oder widersprüchlicher externalReference ergibt 409.\n\n| HTTP | Was Sie tun |\n| --- | --- |\n| 400 | Eingaben anhand der Fehlerkennung und Feldreferenz korrigieren; [Ablehnung der Vertragsvorbereitung](#description/ablehnung-der-vertragsvorbereitung). |\n| 401 | Token/Zugang prüfen; nach Ablauf ein neues Token beziehen. |\n| 403 | Freigabe und Berechtigung für die konkrete Aktion/Ressource prüfen lassen. |\n| 404 | Kennung und Zugriffsberechtigung prüfen. |\n| 409 | Konflikt oder noch fehlende Voraussetzung anhand von code klären. |\n| 5xx oder Antwortverlust | Nicht von Nichtannahme ausgehen; denselben Auftrag wiederfinden. |\n\nBei einer Supportanfrage requestId und Korrelationskennung übergeben. Keine Token, Secrets, Ausweisnummern oder Suchwerte protokollieren. [HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose) erklärt, welche Kennung zu welchem Aufruf gehört.\n\n## Ablehnung der Vertragsvorbereitung\n\nBei HTTP 400 lesen Sie code und message. Wenn eine einzelne Angabe sicher zugeordnet werden kann, nennt details deren öffentlichen JSON-Feldpfad und einen Korrekturhinweis. Die Antwort zeigt keine eingegebenen Personen- oder Bankwerte. Eine leere oder fehlende Liste bedeutet nicht, dass alle übrigen Angaben geprüft oder fehlerfrei sind.\n\n| code | Bedeutung und nächster Schritt |\n| --- | --- |\n| `INVALID_REQUEST` | Die Vertragsanfrage ist ungültig. Bitte prüfen Sie Format und Angaben. |\n| `REQUIRED_FIELD_MISSING` | Eine für den Vertrag erforderliche Angabe fehlt. |\n| `INVALID_FIELD_VALUE` | Eine Vertragsangabe ist ungültig. |\n| `WITHDRAWAL_SELECTION_REQUIRED` | Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird. |\n| `BRANCH_SELECTION_REQUIRED` | Bitte wählen Sie eine Filiale aus GET /sales-context für diesen Verkauf aus. |\n| `CUSTOMER_ADDRESS_NOT_VERIFIED` | Die Kombination aus Postleitzahl und Ort konnte nicht bestätigt werden. Bitte prüfen Sie beide Angaben. |\n| `CUSTOMER_IBAN_INVALID` | Die IBAN ist ungültig. Bitte prüfen Sie die Bankverbindung. |\n| `CUSTOMER_BANK_DETAILS_INVALID` | Die angegebenen Bankdaten passen nicht zur Bankverbindung. Bitte prüfen Sie BIC und Bankname. |\n| `CUSTOMER_BANK_INVALID` | Die Bankangaben sind nicht zulässig oder unvollständig. Bitte prüfen Sie die erforderlichen Bankangaben. |\n| `CUSTOMER_DATA_INCOMPLETE` | Die gespeicherten Kundendaten sind für diesen Vertrag nicht vollständig. |\n| `CUSTOMER_ID_CARD_REQUIRED` | Für dieses Produkt ist eine gültige Ausweisnummer des Kunden erforderlich. |\n| `INVALID_CONDITION_SELECTION` | Die gewählten Konditionen sind für dieses Produkt nicht zulässig. Bitte lesen Sie die aktuellen Auswahlmöglichkeiten erneut. |\n| `DEBIT_DAY_INVALID` | Der gewählte Lastschrifttag ist für diesen Vertrag nicht zulässig. |\n| `REQUESTED_START_DATE_INVALID` | Der gewünschte Vertragsbeginn liegt außerhalb des zulässigen Zeitraums. |\n| `PREPARATION_NOT_ALLOWED` | Die Vertragsvorbereitung ist mit diesen Angaben nicht zulässig. Bitte wenden Sie sich mit der Supportkennung an SmartPay. |\n\nBeispiel: Die erforderliche ausdrückliche Widerrufsauswahl fehlt. Geben Sie withdrawalRightSelected bewusst entsprechend dem Verkauf an; das Beispiel schreibt keinen Wert vor. HTTP 400:\n\n<!-- example:preparation-error -->\n```json\n{\n  \"code\": \"WITHDRAWAL_SELECTION_REQUIRED\",\n  \"message\": \"Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.\",\n  \"requestId\": \"synthetic-request-rejected-001\",\n  \"details\": [\n    {\n      \"field\": \"withdrawalRightSelected\",\n      \"code\": \"WITHDRAWAL_SELECTION_REQUIRED\",\n      \"message\": \"Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.\"\n    }\n  ]\n}\n```\n\nWenn die Vertragsvorbereitung einen bereits angelegten Vorgang bestätigt ablehnt, bleibt der sichere Grund bei GET /contract-operations/{operationId} unter processingIssue lesbar. Eine zugeteilte contractId beweist dabei nicht, dass ein Vertrag angelegt wurde. Synthetisches Beispiel für HTTP 200:\n\n<!-- example:rejected-preparation -->\n```json\n{\n  \"operationId\": \"a8b2d351-71c6-4a85-9b24-2044951c3001\",\n  \"contractId\": \"73530a36-0c02-4a38-9292-7a2b185cc9d0\",\n  \"type\": \"NEW_CONTRACT\",\n  \"externalReference\": \"synthetic-guide-new-001\",\n  \"status\": \"REJECTED\",\n  \"processingIssue\": {\n    \"code\": \"WITHDRAWAL_SELECTION_REQUIRED\",\n    \"message\": \"Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.\",\n    \"details\": [\n      {\n        \"field\": \"withdrawalRightSelected\",\n        \"code\": \"WITHDRAWAL_SELECTION_REQUIRED\",\n        \"message\": \"Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.\"\n      }\n    ]\n  }\n}\n```\n\nEine identische Wiederholung einer bestätigten Ablehnung führt die Vorbereitung nicht erneut aus. Ein geänderter Inhalt bei bereits gebundenem Idempotency-Key oder externalReference bleibt ein Konflikt. Für einen bewusst korrigierten neuen Auftrag verwenden Sie einen neuen Schlüssel und eine neue Geschäftsreferenz. Ein Fehler vor der ersten dauerhaften Annahme ist davon zu unterscheiden.\n\nBei historischen Ablehnungen, deren konkreter Grund nicht gespeichert wurde, bleibt nur die allgemeine Kennung PREPARATION_REJECTED. SmartPay ergänzt keine vermutete Ursache. Technische Fehler oder eine unverständliche interne Antwort werden nicht als bestätigte Eingabeablehnung ausgegeben. Bei 5xx oder Antwortverlust zuerst den bestehenden Vorgang wiederfinden; nicht blind neu anlegen. 403 und 404 behalten ihren Zugangs- und Ressourcenschutz. Für Supportfälle requestId übergeben.\n\n## HTTP-Header – sichere Aufrufe und Fehlerdiagnose\n\nFür normale SmartPay-Aufrufe senden Sie das Zugriffstoken als `Authorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE`. Bei JSON-Eingaben kommt `Content-Type: application/json` hinzu. Die drei Vertragsaktionen benötigen außerdem einen Idempotency-Key. Die beiden Diagnoseangaben X-Correlation-Id und traceparent sind optional; sie ersetzen weder das Token noch den Wiederholungsschutz.\n\n### Idempotency-Key – verpflichtend bei Vertragsaktionen\n\nVerwenden Sie 1–200 druckbare ASCII-Zeichen ohne Leerzeichen; beispielsweise eine UUID oder eine stabile technische Kennung.\n\nMit diesem Schlüssel erkennt SmartPay die Wiederholung derselben beabsichtigten Aktion und verhindert doppelte Fachwirkungen. Pflicht ist er bei `POST /contracts`, `POST /contract-operations/{operationId}/activate-on-own-risk` und `POST /contract-operations/{operationId}/discard`, außerdem `POST /contracts/{contractId}/withdraw`, `POST /contracts/{contractId}/terminate` und `POST /contracts/{contractId}/reactivate`. Lesende Aufrufe brauchen ihn nicht, auch nicht `POST /customers/search`.\n\nBeispiel: Sie reichen einen Vertrag ein. SmartPay nimmt ihn an, aber die HTTP-Antwort erreicht Ihr System nicht. Eine Wiederholung sendet **denselben Schlüssel, dieselbe externalReference und denselben Inhalt**. Speichern Sie diese Werte vor dem ersten Senden. Ein neuer eigenständiger Auftrag bekommt einen neuen Schlüssel und seine eigene Geschäftsreferenz. Erzeugen Sie beim technischen Wiederholen keine neue Kennung.\n\nDie Kennung gehört zur jeweiligen Aktion und ihrem Ziel. Für eine spätere Risikoentscheidung oder das Verwerfen desselben Vorgangs verwenden Sie einen eigenen Aktionsschlüssel; bei Wiederholung dieser Entscheidung behalten Sie ihn und den Entscheidungsinhalt bei. Ein gebundener Schlüssel mit geändertem Inhalt für dieselbe Aktion kann `409 Conflict` ergeben. Auch eine bereits gebundene externalReference mit abweichendem Vertragsauftrag ist ein Konflikt; ein neuer Schlüssel hebt diese Bindung nicht auf.\n\nEin Replay der Vertragsanlage kann die gespeicherte frühere Annahmeantwort `201 PENDING_SIGNATURE` liefern, obwohl der Kunde inzwischen unterschrieben hat. Damit wird die ursprüngliche Annahme bestätigt, kein aktueller Fortschritt gemeldet. Auch eine angenommene Risikoentscheidung kann ihre frühere fachliche Antwort wiedergeben. Beim Verwerfen kann der Abgleich dagegen von `202 DISCARD_PENDING` zu `200 DISCARDED` fortschreiten. Lesen Sie den aktuellen Bearbeitungsstand über `GET /contract-operations/{operationId}`. Die Antwortheader gehören bei jeder Wiederholung zum aktuellen HTTP-Aufruf.\n\n### X-Correlation-Id – optional für zusammengehörige Aufrufe\n\nWenn Sie mehrere Aufrufe gemeinsam untersuchen möchten, können Sie dieselbe Korrelationskennung mitsenden, etwa beim Einreichen und späteren Lesen desselben Vorgangs. Sie wählen eine Diagnosekennung ohne Kundendaten oder Zugangsdaten. Sie erteilt keine Berechtigung und verhindert keine doppelte Verarbeitung.\n\nZulässig nach `SupportId`: 1 bis 100 ASCII-Zeichen; Buchstaben A–Z/a–z, Ziffern 0–9 sowie Punkt, Unterstrich, Doppelpunkt und Bindestrich. Keine Leerzeichen oder Umlaute. Die genaue Regel lautet `^[A-Za-z0-9._:-]{1,100}$`. Bei fehlender, ungültiger oder mehrfach gesendeter Angabe erzeugt SmartPay eine neue Kennung. Übernehmen Sie deshalb die **tatsächlich verwendete X-Correlation-Id aus der Antwort**, bevor Sie sie für die nächsten zusammengehörigen Aufrufe weiterverwenden.\n\nHeaderausschnitt zur Vertragsanlage; der JSON-Body ist der unveränderte Request aus D:\n\n```http\nPOST /v2/contracts\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nContent-Type: application/json\nIdempotency-Key: synthetic-guide-create-001\nX-Correlation-Id: synthetic-correlation-001\n```\n\nBeispielhafte Antwortheader:\n\n```http\nHTTP/1.1 201 Created\nX-Request-Id: synthetic-request-001\nX-Correlation-Id: synthetic-correlation-001\n```\n\nDie Statusabfrage verwendet die Kennung aus dieser Antwort. Sie hat einen eigenen X-Request-Id:\n\n```http\nGET /v2/contract-operations/a8b2d351-71c6-4a85-9b24-2044951c3001\nAuthorization: Bearer SYNTHETIC_ACCESS_TOKEN_DO_NOT_USE\nAccept: application/json\nX-Correlation-Id: synthetic-correlation-001\n```\n\n```http\nHTTP/1.1 200 OK\nX-Request-Id: synthetic-request-002\nX-Correlation-Id: synthetic-correlation-001\n```\n\n### traceparent – optional bei bereits vorhandenem Tracing\n\nWenn Ihre Integration bereits verteiltes Tracing verwendet, können Sie einen gültigen W3C-Tracekontext mitsenden. Für eine normale Vertragsanlage müssen Sie kein Tracing einrichten. Ein gültiger synthetischer Header ist:\n\n```http\ntraceparent: 00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01\n```\n\nDas Beispiel enthält Version 00, eine 32-stellige hexadezimale Trace-ID, eine 16-stellige hexadezimale Parent-ID und Trace-Flags. Senden Sie den Kontext Ihres Tracingsystems; verwenden Sie diesen Beispielwert nicht als feste Kennung für alle Aufrufe. Die Angabe garantiert weder eine vollständige Ablaufspur noch deren durchgängige Weitergabe oder Speicherung. Eine Berechtigung oder einen Idempotenznachweis liefert sie nicht.\n\n### X-Request-Id – Antwortkennung für genau einen HTTP-Aufruf\n\nSmartPay vergibt für jeden Aufruf eine neue Kennung und liefert sie im Antwortheader `X-Request-Id`. In einer Fehlerantwort steht dieselbe Kennung in `requestId`. Übermitteln Sie sie zusammen mit Zeitpunkt, HTTP-Status und betroffenem Pfad an den Support. Auch ein identischer Replay erhält eine neue Aufrufkennung. Senden Sie dafür keine eigene X-Request-Id als Ersatz.\n\nIm obigen Beispiel unterscheiden sich die Kennungen so:\n\n| <span class=\"partner-header-label\">Kennung</span> | Bedeutung im Beispiel |\n| --- | --- |\n| `X-Request-Id` | `synthetic-request-001` gehört nur zum POST; `synthetic-request-002` nur zum GET. |\n| `X-Correlation-Id` | `synthetic-correlation-001` verbindet beide Aufrufe für die Diagnose. |\n| `externalReference` | `synthetic-guide-new-001` steht im Vertragsbody und bezeichnet Ihren Geschäftsauftrag. |\n| `Idempotency-Key` | `synthetic-guide-create-001` steht beim POST im Header und schützt die Wiederholung dieser Aktion. Der GET benötigt ihn nicht. |\n\nKeine dieser Kennungen ersetzt das Zugriffstoken. Für Supportnachweise keine Tokens, Secrets, Ausweisnummern oder vollständigen Kundendaten protokollieren.\n\n## Beispiele und nachgewiesener Umfang\n\nDie Beispiele sind Schema- und Zusammenhangsprüfungen mit erfundenen Daten. Der verbundene Ablauf ist mit einem gesonderten damaligen Testsatz in lokalem DEV nachgewiesen. Diese Anleitung bestätigt keine Erreichbarkeit von Staging oder Produktion und löst keinen neuen Vertrag aus.\n\n\n## Aufrufgrenzen und Wiederholung\n\nSmartPay prüft zuerst Ihren Zugang und die aktuelle Berechtigung. Die folgenden gemeinsamen Budgets schützen die Verfügbarkeit. Bei HTTP 429 warten Sie die Sekunden aus `Retry-After` ab; bei Vertragsaktionen behalten Sie denselben Idempotency-Key und Inhalt. Ist der Schutzspeicher vorübergehend nicht verfügbar, antwortet die API fehlerschließend mit HTTP 503 und `Retry-After`. Eine unklare Antwort bestätigt keine Nichtausführung: lesen Sie den vorhandenen Vorgang.\n\nPro Zugang und konkretem lesenden Aufruf: 60 Einheiten, Nachfüllung 2 pro Sekunde. Pro Zugang und konkreter Vertragsaktion: 6 Einheiten, 0.2 pro Sekunde. Pro Vertriebspartner über alle Aufrufe: 120 Einheiten, 4 pro Sekunde. Maximal 12 gleichzeitige Aufrufe pro Vertriebspartner und 32 dienstweit. Jeder Aufruf kostet eine Einheit. Kundensuche zählt als lesender Aufruf.\n\nHTTP-Header insgesamt höchstens 16384 Bytes. Der gesamte Requestbody muss innerhalb von 5 Sekunden übertragen sein. Größenfehler sind 413 (Body) beziehungsweise 431 (Header). Beim Überschreiten der Transportfrist kann die Verbindung geschlossen werden.\n\n| Aufruf | Maximaler Body in Bytes | Bearbeitungsfrist |\n| --- | ---: | ---: |\n| `GET /sales-context` | 1024 | 15 s |\n| `POST /customers/search` | 16384 | 15 s |\n| `GET /categories` | 1024 | 15 s |\n| `GET /categories/{categoryId}/products` | 1024 | 15 s |\n| `GET /products/{productId}` | 1024 | 15 s |\n| `POST /contracts` | 262144 | 45 s |\n| `GET /contract-operations/{operationId}` | 1024 | 15 s |\n| `GET /contract-actions/{operationId}` | 1024 | 15 s |\n| `GET /contract-operations` | 1024 | 15 s |\n| `POST /contract-operations/{operationId}/activate-on-own-risk` | 8192 | 45 s |\n| `POST /contract-operations/{operationId}/discard` | 8192 | 45 s |\n| `GET /contracts/{contractId}` | 1024 | 15 s |\n| `GET /contracts/{contractId}/documents/{documentId}` | 1024 | 30 s |\n| `POST /contracts/{contractId}/withdraw` | 8192 | 45 s |\n| `POST /contracts/{contractId}/terminate` | 8192 | 45 s |\n| `POST /contracts/{contractId}/reactivate` | 8192 | 45 s |\n\n# Feldreferenz\n\nDie Feldblöcke folgen den veröffentlichten Schemas. Pflicht gilt innerhalb des jeweiligen vorhandenen Objekts; Fachbedingungen und unbekannte historische Angaben bleiben davon getrennt. Ein Beispielwert setzt keinen Default und erteilt keine Berechtigung.\n\n## Vertrag anlegen\n\nEinreichung eines klassischen nichtmobilen Einzel-Neuvertrags mit bewusst gewähltem Verkaufskontext, Produkt und Optionen. Einen Neukunden oder einen berechtigt verwendbaren Bestandskunden wählen; keine Preise oder Verarbeitungsergebnisse vorgeben.\n\n### NewContractRequest\n\n**`externalReference` — Pflicht**\n\nIhre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Eine eigene Geschäftsreferenz für genau diese Einreichung festlegen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;synthetic-guide-new-001&quot;</code></span>\n- **Bei Auslassen:** Ihre Geschäftsreferenz muss bei der Vertragseinreichung angegeben werden; fehlt externalReference, wird die Einreichung als ungültig abgewiesen.\n\n**`salesContext` — Pflicht**\n\nDer Verkäufer und die gegebenenfalls zugeordnete Filiale dieses Verkaufs. Verkäufer und Filiale sind keine Kundendaten.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Verkäufer und gegebenenfalls Filiale bewusst aus GET /sales-context auswählen und deren Kennungen für diesen Verkauf übermitteln.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;branchId&quot;:&quot;30000000-0000-4000-8000-000000000001&quot;,&quot;sellerAccountId&quot;:&quot;20000000-0000-4000-8000-000000000001&quot;}</code></span>\n- **Bei Auslassen:** Für die Vertragseinreichung erforderlich. Fehlt salesContext, wird die Einreichung als ungültig abgewiesen; eine vorherige Abfrage ersetzt die Angabe nicht.\n\n**`productId` — Pflicht**\n\nÖffentliche Kennung des bewusst gewählten Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Produktkennung aus der berechtigten Produktliste oder Produktdetailantwort; Antworten nennen das zugehörige Produkt.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;51f866e9-2307-47c6-8de3-e6b1f24f8d31&quot;</code></span>\n- **Bei Auslassen:** Die Produktkennung muss bei der Vertragseinreichung angegeben werden; fehlt productId, wird die Einreichung als ungültig abgewiesen. Auch bei nur einer angebotenen Option erfolgt keine automatische Auswahl.\n\n**`durationId` — Pflicht**\n\nKennung der bewusst ausgewählten Laufzeitoption des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Laufzeitkennung aus ProductDetailsResponse.durations bewusst auswählen; Konditions- und Vertragsantworten nennen die verwendete Option.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;17ef5d55-617c-429a-b523-637625346856&quot;</code></span>\n- **Bei Auslassen:** Die Laufzeitkennung muss bei der Vertragseinreichung angegeben werden; fehlt durationId, wird die Einreichung als ungültig abgewiesen. Auch bei nur einer angebotenen Option erfolgt keine automatische Auswahl.\n\n**`paymentId` — Pflicht**\n\nKennung der bewusst ausgewählten Zahlweise des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Zahlweisenkennung aus ProductDetailsResponse.payments bewusst auswählen; Konditions- und Vertragsantworten nennen die verwendete Option.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;95012da7-bd0c-4b4a-b181-a43bff8578d0&quot;</code></span>\n- **Bei Auslassen:** Die Zahlweisenkennung muss bei der Vertragseinreichung angegeben werden; fehlt paymentId, wird die Einreichung als ungültig abgewiesen. Auch bei nur einer angebotenen Option erfolgt keine automatische Auswahl.\n\n**`priceType` — Pflicht**\n\nDie für das Produkt angebotene und bewusst ausgewählte Preisart.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"AGB\",\"PROMO\",\"PROMO_TEMP\"]\n- **Herkunft:** Eine der in ProductDetailsResponse.priceTypes angebotenen Preisarten bewusst auswählen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;AGB&quot;</code></span>\n- **Bei Auslassen:** Die Preisart muss bei der Vertragseinreichung angegeben werden; fehlt priceType, wird die Einreichung als ungültig abgewiesen. Auch bei nur einer angebotenen Option erfolgt keine automatische Auswahl.\n\n**`promotionId` — Bedingt laut Schema**\n\nKennung der ausgewählten befristeten Promotion.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Passende Promotionskennung aus ProductDetailsResponse.promotions auswählen; Antworten weisen die zugeordnete Promotion aus.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;70000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Bei anderen Preisarten keine Promotion mitsenden; bei der befristeten Preisart die konkrete Promotion auswählen.\n- **Bedingung:** Wenn priceType vorhanden und priceType = \"PROMO_TEMP\"; Fachbedingung: Nur bei priceType=PROMO_TEMP angeben; bei AGB oder PROMO ist promotionId nicht zulässig. Die Promotion muss aktuell aktiv, dem Produkt zugeordnet und für den Neuabschluss zulässig sein; eine nur für Verlängerungen vorgesehene Promotion ist nicht verwendbar. Die befristete Promotion setzt die Zahlweise MONTHLY voraus.\n\n**`customer` — Pflicht**\n\nAlternative Auswahl zwischen neuen Kundendaten und einem berechtigt verwendbaren Bestandskunden.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Neue Kundendaten ausdrücklich erfassen oder eine berechtigt verwendbare customerId wählen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;newCustomer&quot;:{&quot;address&quot;:{&quot;city&quot;:&quot;Berlin&quot;,&quot;country&quot;:&quot;DE&quot;,&quot;street&quot;:&quot;Beispielstraße 10&quot;,&quot;zip&quot;:&quot;10115&quot;},&quot;bank&quot;:{&quot;holder&quot;:&quot;Anna Muster&quot;,&quot;iban&quot;:&quot;DE89370400440532013000&quot;},&quot;email&quot;:&quot;anna.muster@example.invalid&quot;,&quot;externalCustomerNumber&quot;:&quot;PARTNER-SYNTHETIC-1001&quot;,&quot;person&quot;:{&quot;birthdate&quot;:&quot;1985-04-12&quot;,&quot;firstname&quot;:&quot;Anna&quot;,&quot;idCardNumber&quot;:&quot;SYNTHETIC-GUIDE-ID-001&quot;,&quot;lastname&quot;:&quot;Muster&quot;,&quot;salutationType&quot;:&quot;MADAM&quot;},&quot;phone&quot;:&quot;+493000000000&quot;}}</code></span>\n- **Bei Auslassen:** Bei jeder Vertragseinreichung genau eine Kundenauswahl angeben: newCustomer oder customerId. Ohne customer wird die Einreichung als ungültig abgewiesen; ein Suchtreffer wird nicht automatisch übernommen.\n- **Bedingung:** Fachbedingung: Genau eine Variante verwenden: newCustomer oder customerId.\n\n**`serialNumbers` — Optional laut Schema**\n\nDie zum Produkt vorgegebene beziehungsweise im Vertrag ausgewiesene Liste von Geräteeinträgen.\n\n- **Format/Werte:** Liste; Elemente: SerialNumberInput\n- **Herkunft:** Konfiguration aus ProductDetailsResponse.serialNumbers lesen; echte Gerätewerte passend dazu erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;name&quot;:&quot;Gerät 1&quot;,&quot;serialNumber1&quot;:&quot;SYNTHETIC-SN-001&quot;}]</code></span>\n- **Bei Auslassen:** Bei enabled=false auslassen. Bei enabled=true die vollständige Slotliste ausdrücklich übermitteln; keine leere Ersatzliste erzeugen.\n- **Bedingung:** Fachbedingung: Bei enabled=true genau slotCount Einträge. Bei slotCount=0 ist [] möglich. Nur freigegebene Felder verwenden; bei benannten Einträgen die dafür verlangten Werte ausfüllen.\n\n**`debitDay` — Pflicht**\n\nGewünschter Einzugstag innerhalb des Monats.\n\n- **Format/Werte:** Ganzzahl\n- **Herkunft:** Mit dem Kunden vereinbarten Tag aus den im aktuellen Anlageweg unterstützten Werten wählen: 1, 5, 10, 15, 20, 25 oder 30.\n- **Beispiel:** <span class=\"partner-field\"><code>5</code></span>\n- **Bei Auslassen:** Der vereinbarte Einzugstag muss bei der Vertragseinreichung angegeben werden; fehlt debitDay, wird die Einreichung als ungültig abgewiesen.\n- **Bedingung:** Fachbedingung: Nur die Werte 1, 5, 10, 15, 20, 25 und 30 sind im bestehenden Anlageweg zulässig; diese Fachprüfung ist strenger als der allgemeine Ganzzahltyp des Schemas.\n\n**`withdrawalRightSelected` — Optional laut Schema**\n\nBewusste Wahl zum Widerrufsrecht: true übernimmt die konfigurierten Widerrufstage des Produkts; false verwendet im bestehenden Ablauf 0 Widerrufstage. Dies ist keine allgemeine Frist- oder Verzichtsbefugnis.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Die bewusste Wahl des Kunden übernehmen. Ob diese Auswahl für Ihren Zugang angeboten werden muss, bei der Zugangseinrichtung bestätigen lassen; GET /sales-context liefert diese Einstellung nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>false</code></span>\n- **Bei Auslassen:** Ist die Auswahl für Ihren Zugang bei einem Privatkunden ohne Firma freigegeben, führt Auslassen zu HTTP 400 mit code WITHDRAWAL_SELECTION_REQUIRED. Sonst erfolgt keine solche Auswahl; der vorhandene Ablauf verwendet 0 konfigurierte Widerrufstage.\n- **Bedingung:** Fachbedingung: Bei freigegebener Auswahl und Kunde ohne Firma ausdrücklich true oder false aus der bewussten Entscheidung übermitteln. True übernimmt die am Produkt konfigurierten Tage; false verwendet 0 Tage. Ohne Freigabe oder bei Firma ist true unzulässig. Keine allgemeine Aussage zu gesetzlichen Rechten.\n\n**`requestedStartDate` — Optional laut Schema**\n\nGewünschter Vertragsbeginn. Er wird auf den für Produkt und Zugang zulässigen Zeitraum geprüft.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den mit dem Kunden gewünschten Vertragsbeginn für diese Einreichung erfassen; den zulässigen Zeitraum für Produkt und Zugang beachten.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Bei Auslassen wird der aktuelle Tag im vorhandenen Anlageweg zugrunde gelegt.\n- **Bedingung:** Fachbedingung: Der zulässige Zeitraum reicht im üblichen Anlageweg von heute bis sechs Monate voraus. Ein für Rückdatierung freigegebener Zugang kann bis einen Monat zurückreichen; daraus folgt keine allgemeine Rückdatierungsbefugnis.\n\n**`callbackUrl` — Optional laut Schema**\n\nOptionales HTTPS-Ziel für Benachrichtigungen zu genau diesem Vorgang. Es benötigt einen eingerichteten separaten Callbackschlüssel.\n\n- **Format/Werte:** Zeichenfolge; Format: uri; Mindestlänge: 1; Höchstlänge: 4096\n- **Herkunft:** Den vorab eingerichteten erreichbaren HTTPS-Empfänger des Partners einsetzen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;https://partner.example/smartpay/callbacks&quot;</code></span>\n- **Bei Auslassen:** Für diesen Vorgang werden keine ausgehenden Partnercallbacks angefordert; der Vertragsablauf funktioniert weiter.\n- **Bedingung:** Fachbedingung: Vor erster Annahme muss der separate Callbackschlüssel verfügbar sein. Keine Zugangsdaten oder URL-Fragmente, keine internen oder lokalen Ziele und keine Redirects. Ziel und Inhalt bei Replay nicht ändern.\n\n**`type` — Optional laut Schema**\n\nOptionales Fachlabel des Neuvertrags. Es muss nicht gesetzt werden; der verwendete Vertragsendpunkt bestimmt die Vertragsart.\n\n- **Format/Werte:** Zeichenfolge; Fester Wert: \"NEW_CONTRACT\"\n- **Herkunft:** Falls benötigt, das in diesem öffentlichen Profil beschriebene Fachlabel verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;NEW_CONTRACT&quot;</code></span>\n- **Bei Auslassen:** Das Fachlabel kann ausgelassen werden; der Vertrags-POST bleibt dieselbe Neuvertragseinreichung.\n- **Bedingung:** Fachbedingung: Falls angegeben, im öffentlichen Profil NEW_CONTRACT verwenden. Die Dokumentation führt keine zusätzliche Laufzeitprüfung unbekannter Außenfelder ein.\n\n\n\n#### salesContext · SalesContext\n\n**`salesContext.sellerAccountId` — Pflicht**\n\nKennung des bewusst ausgewählten Verkäufers dieses Verkaufs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die gewünschte Kennung aus GET /sales-context auswählen; Antworten geben die verwendete Verkaufszuordnung wieder.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;20000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Bei der Vertragseinreichung muss der Verkäufer ausdrücklich angegeben werden; fehlt sellerAccountId, wird die Einreichung als ungültig abgewiesen. Der API-Zugang und die Listenposition ersetzen die Auswahl nicht.\n\n**`salesContext.branchId` — Optional laut Schema**\n\nKennung der gewählten Filiale. Eine explizite ungültige Filiale wird nicht durch eine andere ersetzt.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die gewünschte Kennung aus GET /sales-context auswählen; Antworten geben die verwendete Verkaufszuordnung wieder.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;30000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Keine aktive Filiale: ohne Zuordnung, soweit zulässig. Genau eine aktive zugehörige Filiale: diese wird geprüft und zugeordnet. Mehrere: ausdrücklich auswählen. null ist kein Auslassen.\n- **Bedingung:** Fachbedingung: Die explizite Filiale muss aktiv und dem eigenen Partner zugeordnet sein. Die wirksame Auswahl bleibt bei identischer Wiederholung erhalten.\n\n\n\n#### customer · CustomerSelection\n\n**`customer.customerId` — Bedingt laut Schema**\n\nÖffentliche Kennung des Kunden. Sie ist weder die SmartPay-Kundennummer noch Ihre Partnerkundennummer.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die Kennung eines berechtigt verwendbaren Bestandskunden, etwa aus der zulässigen Kundensuche.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;11111111-1111-4111-8111-111111111111&quot;</code></span>\n- **Bei Auslassen:** In der Bestandskundenvariante erforderlich. Ohne customerId müssen stattdessen vollständige newCustomer-Daten übermittelt werden; beide Varianten zugleich sind unzulässig.\n- **Bedingung:** In der Alternative: customerId vorhanden und newCustomer fehlt; Pflicht innerhalb der gewählten Alternative; Fachbedingung: Nicht gemeinsam mit newCustomer; ein Suchtreffer erteilt keine fremden Vertrags- oder Änderungsrechte.\n\n**`customer.newCustomer` — Bedingt laut Schema**\n\nVollständige Neukundendaten für die gemeinsame Anlage mit dem Vertrag. Keine vorgelagerte Kundenerstellung ist erforderlich.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Die Kundendaten für diese gemeinsame Kunden- und Vertragsanlegung erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;address&quot;:{&quot;city&quot;:&quot;Berlin&quot;,&quot;country&quot;:&quot;DE&quot;,&quot;street&quot;:&quot;Beispielstraße 10&quot;,&quot;zip&quot;:&quot;10115&quot;},&quot;bank&quot;:{&quot;holder&quot;:&quot;Anna Muster&quot;,&quot;iban&quot;:&quot;DE89370400440532013000&quot;},&quot;email&quot;:&quot;anna.muster@example.invalid&quot;,&quot;externalCustomerNumber&quot;:&quot;PARTNER-SYNTHETIC-1001&quot;,&quot;person&quot;:{&quot;birthdate&quot;:&quot;1985-04-12&quot;,&quot;firstname&quot;:&quot;Anna&quot;,&quot;idCardNumber&quot;:&quot;SYNTHETIC-GUIDE-ID-001&quot;,&quot;lastname&quot;:&quot;Muster&quot;,&quot;salutationType&quot;:&quot;MADAM&quot;},&quot;phone&quot;:&quot;+493000000000&quot;}</code></span>\n- **Bei Auslassen:** In der Neukundenvariante erforderlich. Ohne newCustomer muss stattdessen bewusst eine berechtigt verwendbare customerId übermittelt werden; beide Varianten zugleich sind unzulässig.\n- **Bedingung:** In der Alternative: newCustomer vorhanden und customerId fehlt; Pflicht innerhalb der gewählten Alternative; Fachbedingung: Nicht gemeinsam mit customerId. Nach Annahme die gewählte Variante bei Replay unverändert beibehalten.\n\n\n\n#### customer.newCustomer · NewCustomerInput\n\n**`customer.newCustomer.person` — Pflicht**\n\nDie Personendaten des Neukunden.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Die Personendaten des Neukunden für die gemeinsame Kunden- und Vertragsanlegung erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;birthdate&quot;:&quot;1985-04-12&quot;,&quot;firstname&quot;:&quot;Anna&quot;,&quot;idCardNumber&quot;:&quot;SYNTHETIC-GUIDE-ID-001&quot;,&quot;lastname&quot;:&quot;Muster&quot;,&quot;salutationType&quot;:&quot;MADAM&quot;}</code></span>\n- **Bei Auslassen:** Personendaten müssen bei customer.newCustomer angegeben werden; fehlt person, wird die Neukundeneinreichung als ungültig abgewiesen.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist\n\n**`customer.newCustomer.address` — Pflicht**\n\nDie Anschrift des Neukunden.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Die tatsächliche Anschrift des Neukunden mit Straße und Hausnummer, Postleitzahl, Ort und Land erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;city&quot;:&quot;Berlin&quot;,&quot;country&quot;:&quot;DE&quot;,&quot;street&quot;:&quot;Beispielstraße 10&quot;,&quot;zip&quot;:&quot;10115&quot;}</code></span>\n- **Bei Auslassen:** Die Anschrift muss bei customer.newCustomer angegeben werden; fehlt address, wird die Neukundeneinreichung als ungültig abgewiesen.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist\n\n**`customer.newCustomer.email` — Pflicht**\n\nDie Haupt-E-Mail-Adresse des Kunden. Sie ist auch für die Unterzeichnung relevant.\n\n- **Format/Werte:** Zeichenfolge; Format: email\n- **Herkunft:** Die vom Neukunden angegebene Haupt-E-Mail-Adresse erfassen; sie wird im Unterzeichnungsablauf verwendet.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;anna.muster@example.invalid&quot;</code></span>\n- **Bei Auslassen:** Die Haupt-E-Mail-Adresse muss bei customer.newCustomer angegeben werden; fehlt email, wird die Neukundeneinreichung als ungültig abgewiesen.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist\n\n**`customer.newCustomer.bank` — Pflicht**\n\nDie Bankverbindung des Neukunden für den vorhandenen Zahlungsweg.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Die für den Zahlungsweg des Neukunden vorgesehene Bankverbindung erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;holder&quot;:&quot;Anna Muster&quot;,&quot;iban&quot;:&quot;DE89370400440532013000&quot;}</code></span>\n- **Bei Auslassen:** Die Bankverbindung muss bei customer.newCustomer angegeben werden; fehlt bank, wird die Neukundeneinreichung als ungültig abgewiesen.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist\n\n**`customer.newCustomer.company` — Optional laut Schema**\n\nFirma des Kunden, sofern eine Firma erfasst wird. Dies eröffnet keine zusätzliche Vertragsart.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Die vom Neukunden angegebene Firma erfassen, sofern der Kunde unter einer Firma geführt werden soll.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Beispiel GmbH&quot;</code></span>\n- **Bei Auslassen:** Es wird keine Firma für den Neukunden erfasst.\n- **Bedingung:** In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist; Fachbedingung: Eine angegebene Firma wird auf Plausibilität geprüft und nach den vorhandenen Regeln aufbereitet.\n\n**`customer.newCustomer.phone` — Bedingt laut Schema**\n\nTelefonkontakt des Kunden; unabhängig davon, ob das bestellte Produkt Mobilfunk betrifft.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Die vom Neukunden angegebene Telefonnummer als Kundenkontakt erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;+493000000000&quot;</code></span>\n- **Bei Auslassen:** Der jeweils andere Telefonkontakt muss vorhanden sein; beide gleichzeitig auszulassen ist nicht zulässig.\n- **Bedingung:** In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist; mindestens eines von phone, mobile; Fachbedingung: Mindestens phone oder mobile angeben. Kundenkontakt ist keine Mobilfunkbestellung.\n\n**`customer.newCustomer.mobile` — Bedingt laut Schema**\n\nMobiltelefonkontakt des Kunden. Dieses Feld ist keine Mobilfunkbestellung.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Die vom Neukunden angegebene Mobiltelefonnummer als Kundenkontakt erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;+491700000000&quot;</code></span>\n- **Bei Auslassen:** Der jeweils andere Telefonkontakt muss vorhanden sein; beide gleichzeitig auszulassen ist nicht zulässig.\n- **Bedingung:** In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist; mindestens eines von phone, mobile; Fachbedingung: Mindestens phone oder mobile angeben. Kundenkontakt ist keine Mobilfunkbestellung.\n\n**`customer.newCustomer.vatId` — Optional laut Schema**\n\nUmsatzsteuer-Identifikationsnummer des Kunden im zulässigen Steuerkontext.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1; Höchstlänge: 64\n- **Herkunft:** Die vom Kunden für den zutreffenden Steuerkontext angegebene USt-ID übernehmen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-VAT-001&quot;</code></span>\n- **Bei Auslassen:** Bei einer Anschrift in Deutschland wird keine USt-ID übermittelt; bei ausländischer Anschrift ist sie im aktuellen Anlageweg erforderlich.\n- **Bedingung:** In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist; Fachbedingung: Bei ausländischer Anschrift sowie für REVERSE_CHARGE angeben. Die Angabe wird von umgebenden Leerzeichen bereinigt und großgeschrieben; dies ist keine amtliche Bestätigung.\n\n**`customer.newCustomer.taxRegime` — Optional laut Schema**\n\nDer angeforderte zulässige Steuerkontext des Kunden. Eine Angabe verleiht keine freie Wahl der Besteuerung.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"STANDARD\",\"REVERSE_CHARGE\"]\n- **Herkunft:** Den im konkreten Kunden- und Länderkontext zulässigen Steuerkontext verwenden; die Bedingungen für REVERSE_CHARGE beachten.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;STANDARD&quot;</code></span>\n- **Bei Auslassen:** Es bleibt der reguläre Steuerkontext STANDARD des Anlagewegs.\n- **Bedingung:** In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist; Fachbedingung: REVERSE_CHARGE verlangt eine ausländische Anschrift und eine USt-ID; bei deutscher Anschrift ist diese Wahl nicht zulässig.\n\n**`customer.newCustomer.externalCustomerNumber` — Optional laut Schema**\n\nIhre eigene Kundennummer beim Partner. Die SmartPay-Kundennummer wird getrennt von SmartPay vergeben.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Ihre eigene Kundennummer aus dem Partnersystem.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PARTNER-SYNTHETIC-1001&quot;</code></span>\n- **Bei Auslassen:** Es wird keine eigene Partnerkundennummer übermittelt; SmartPay vergibt die eigene customerNumber unabhängig davon.\n- **Bedingung:** In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist\n\n\n\n#### customer.newCustomer.person · PersonInput\n\n**`customer.newCustomer.person.firstname` — Pflicht**\n\nVorname der Person.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Den vom Neukunden angegebenen Vornamen erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Anna&quot;</code></span>\n- **Bei Auslassen:** Bei customer.newCustomer.person erforderlich; fehlt firstname, wird die Neukundeneinreichung als ungültig abgewiesen.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer.person, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist\n\n**`customer.newCustomer.person.lastname` — Pflicht**\n\nNachname der Person.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Den vom Neukunden angegebenen Nachnamen erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Muster&quot;</code></span>\n- **Bei Auslassen:** Bei customer.newCustomer.person erforderlich; fehlt lastname, wird die Neukundeneinreichung als ungültig abgewiesen.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer.person, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist\n\n**`customer.newCustomer.person.salutationType` — Pflicht**\n\nDie gewählte Anrede der Person.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"MISTER\",\"MADAM\",\"DIVERSE\"]\n- **Herkunft:** Die vom Neukunden gewählte Anrede aus den angebotenen Anredewerten übernehmen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;MADAM&quot;</code></span>\n- **Bei Auslassen:** Bei customer.newCustomer.person erforderlich; fehlt salutationType, wird die Neukundeneinreichung als ungültig abgewiesen.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer.person, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist\n\n**`customer.newCustomer.person.title` — Optional laut Schema**\n\nTitel der Person, soweit er erfasst werden soll.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den vom Neukunden angegebenen Titel übernehmen, falls er erfasst werden soll.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Dr.&quot;</code></span>\n- **Bei Auslassen:** Es wird kein Titel übermittelt; keine automatische Titelzuordnung ist festgelegt.\n- **Bedingung:** In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist\n\n**`customer.newCustomer.person.birthdate` — Pflicht**\n\nGeburtsdatum der Person als Kalendertag.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Das tatsächliche Geburtsdatum des Neukunden als Kalendertag erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;1985-04-12&quot;</code></span>\n- **Bei Auslassen:** Bei customer.newCustomer.person erforderlich; fehlt birthdate, wird die Neukundeneinreichung als ungültig abgewiesen.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer.person, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist\n\n**`customer.newCustomer.person.idCardNumber` — Optional laut Schema**\n\nAusweisnummer der Person. Ein Platzhalter ist kein erforderlicher Ausweisnachweis.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Aus der tatsächlichen Ausweisangabe des Kunden; Produktanforderung zuvor in customerRequirements.idCardNumberRequired lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-GUIDE-ID-001&quot;</code></span>\n- **Bei Auslassen:** Nur zulässig, wenn das gewählte Produkt keine Ausweisangabe verlangt.\n- **Bedingung:** In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist; Fachbedingung: Bei idCardNumberRequired=true eine verwendbare nichtleere Ausweisnummer angeben; „Keine Angabe“ ist dafür kein Ersatz.\n\n\n\n#### customer.newCustomer.address · AddressInput\n\n**`customer.newCustomer.address.street` — Pflicht**\n\nStraße und Hausnummer als gemeinsame Anschriftszeile.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Aus der tatsächlichen Anschrift des Neukunden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Beispielstraße 10&quot;</code></span>\n- **Bei Auslassen:** Bei customer.newCustomer.address erforderlich; fehlt street, wird die Neukundeneinreichung als ungültig abgewiesen.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer.address, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist\n\n**`customer.newCustomer.address.zip` — Pflicht**\n\nPostleitzahl der Anschrift.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Aus der tatsächlichen Anschrift des Neukunden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10115&quot;</code></span>\n- **Bei Auslassen:** Bei customer.newCustomer.address erforderlich; fehlt zip, wird die Neukundeneinreichung als ungültig abgewiesen.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer.address, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist; Fachbedingung: Bei deutscher Anschrift müssen Ort und Postleitzahl zu einer im Anlageweg vorhandenen Zuordnung passen.\n\n**`customer.newCustomer.address.city` — Pflicht**\n\nOrt der Anschrift.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Aus der tatsächlichen Anschrift des Neukunden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Berlin&quot;</code></span>\n- **Bei Auslassen:** Bei customer.newCustomer.address erforderlich; fehlt city, wird die Neukundeneinreichung als ungültig abgewiesen.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer.address, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist; Fachbedingung: Bei deutscher Anschrift müssen Ort und Postleitzahl zu einer im Anlageweg vorhandenen Zuordnung passen.\n\n**`customer.newCustomer.address.country` — Pflicht**\n\nLänderschlüssel der Kundenanschrift aus der im Anlageweg unterstützten Länderauswahl.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Aus der tatsächlichen Anschrift des Neukunden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;DE&quot;</code></span>\n- **Bei Auslassen:** Bei customer.newCustomer.address erforderlich; fehlt country, wird die Neukundeneinreichung als ungültig abgewiesen.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer.address, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist; Fachbedingung: Im aktuellen Anlageweg werden DE, AT, CH, FR, NL und CZ unterstützt. Bei deutscher Anschrift müssen Ort und Postleitzahl zusammenpassen; bei ausländischer Anschrift ist zusätzlich eine USt-ID nötig.\n\n\n\n#### customer.newCustomer.bank · BankInput\n\n**`customer.newCustomer.bank.iban` — Pflicht**\n\nIBAN des zu verwendenden Kontos. Eine syntaktische Angabe allein ist noch kein erfolgreicher Banknachweis.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Aus der tatsächlichen Bankverbindung des Kunden; die Bankzuordnung wird bei Einreichung geprüft.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;DE89370400440532013000&quot;</code></span>\n- **Bei Auslassen:** Bei customer.newCustomer.bank erforderlich; fehlt iban, wird die Neukundeneinreichung als ungültig abgewiesen. Andere Kundendaten ersetzen die IBAN nicht.\n- **Bedingung:** Pflicht innerhalb von customer.newCustomer.bank, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist; Fachbedingung: Die IBAN muss gültig sein und eine verwendbare Bankzuordnung erlauben; Leerzeichen werden für die Prüfung bereinigt.\n\n**`customer.newCustomer.bank.bic` — Optional laut Schema**\n\nBIC der Bank.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Aus der tatsächlichen Bankverbindung des Kunden; die Bankzuordnung wird bei Einreichung geprüft.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;COBADEFFXXX&quot;</code></span>\n- **Bei Auslassen:** Bei bekannter Bankzuordnung wird der Wert daraus ermittelt. Für eine unbekannte ausländische Bankzuordnung ist eine ausdrückliche Angabe nötig.\n- **Bedingung:** In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist; Fachbedingung: Übermittelte Werte dürfen der ermittelten Bankzuordnung nicht widersprechen. Eine angegebene BIC wird zusätzlich geprüft.\n\n**`customer.newCustomer.bank.name` — Optional laut Schema**\n\nName der Bank.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Aus der tatsächlichen Bankverbindung des Kunden; die Bankzuordnung wird bei Einreichung geprüft.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Beispielbank&quot;</code></span>\n- **Bei Auslassen:** Bei bekannter Bankzuordnung wird der Wert daraus ermittelt. Für eine unbekannte ausländische Bankzuordnung ist eine ausdrückliche Angabe nötig.\n- **Bedingung:** In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist; Fachbedingung: Übermittelte Werte dürfen der ermittelten Bankzuordnung nicht widersprechen. Eine angegebene BIC wird zusätzlich geprüft.\n\n**`customer.newCustomer.bank.holder` — Optional laut Schema**\n\nKontoinhaber der Bankverbindung. Er ist nicht automatisch mit dem Unterzeichner gleichzusetzen.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Den tatsächlichen Kontoinhaber erfassen, wenn er ausdrücklich übermittelt werden soll; andernfalls gilt die beschriebene Ableitung aus Firma oder Person.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Anna Muster&quot;</code></span>\n- **Bei Auslassen:** Der Kontoinhaber wird aus der Firma oder andernfalls aus Vor- und Nachname übernommen.\n- **Bedingung:** In der Alternative: newCustomer vorhanden und customerId fehlt; Wenn customer.newCustomer in der gewählten Variante vorhanden ist\n\n\n\n#### serialNumbers[] · SerialNumberInput\n\n**`serialNumbers[].name` — Optional laut Schema**\n\nBezeichnung dieses Geräteeintrags; sie bestimmt, ob die Regeln für einen benannten Eintrag greifen.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Gerät 1&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`serialNumbers[].serialNumber1` — Optional laut Schema**\n\nErste Serienangabe des Geräteeintrags entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-SN-001&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`serialNumbers[].serialNumber2` — Optional laut Schema**\n\nZweite Serienangabe des Geräteeintrags entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-SN-002&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`serialNumbers[].additional1` — Optional laut Schema**\n\nErste zusätzliche Geräteangabe entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Zusatzangabe&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`serialNumbers[].additional2` — Optional laut Schema**\n\nZweite zusätzliche Geräteangabe entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Zusatzangabe&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n\n\n## Bearbeitungsstand lesen\n\nDer aktuelle Stand eines eigenen Vertragsvorgangs mit Referenzen, Unterzeichnungsstand und gegebenenfalls verfügbaren Konditionen oder Dokumenten. Annahme, Unterschrift und bestätigter Fachabschluss sind getrennte Tatsachen.\n\n### Bedeutung der Vorgangszustände\n\n- **`PREPARED`:** Der Vorgang ist vorbereitet. Eine erforderliche Unterzeichnung oder weitere Fachbearbeitung kann noch ausstehen.\n- **`PENDING_SIGNATURE`:** Die benötigte Gesamtunterzeichnung der zugehörigen Vertragsfassung steht noch aus.\n- **`REQUIRES_REVIEW`:** Eine fachliche Prüfung oder bewusste Entscheidung ist erforderlich; nicht als bestätigten Abschluss behandeln.\n- **`SCHEDULED`:** Die weitere Bearbeitung ist zu einem Termin vorgesehen. Die Planung bestätigt noch keine Ausführung.\n- **`PROCESSING`:** Die Bearbeitung läuft beziehungsweise ist noch nicht als abgeschlossen bestätigt.\n- **`OUTCOME_UNKNOWN`:** Der Ausgang eines Bearbeitungsschritts ist nicht sicher bestätigt. Keine zweite Einreichung oder erneute Fachentscheidung blind auslösen.\n- **`COMPLETED`:** Gesamtunterzeichnung, zugehörige Endfassung, erforderliche Risikoentscheidung und initiale Fachwirkungen sind bestätigt. Spätere reguläre Rechnungen und Einzüge gehören nicht zu diesem Abschlussnachweis.\n- **`REJECTED`:** Die Vorbereitung wurde abgewiesen. Daraus folgt kein bestätigter Vertragsabschluss.\n- **`DISCARD_PENDING`:** Die Verwerfentscheidung wurde angenommen; zulässige Rücknahme und Nichtfortsetzung sind noch nicht bestätigt.\n- **`DISCARDED`:** Das zulässige Verwerfen und die Nichtfortsetzung sind bestätigt. Dies ist keine allgemeine Kündigung eines erfüllten Vertrags.\n\n### ContractOperation\n\n**`operationId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertragsvorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von operationId lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;</code></span>\n- **Bei Auslassen:** operationId gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n\n**`contractId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von contractId lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** contractId gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n\n**`type` — Pflicht**\n\nArt dieses Vertragsvorgangs im angebotenen Neuvertragsumfang.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NEW_CONTRACT\"]\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von type lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;NEW_CONTRACT&quot;</code></span>\n- **Bei Auslassen:** type gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n\n**`externalReference` — Pflicht**\n\nIhre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Die bei Einreichung vom Partner gewählte Geschäftsreferenz, unverändert zurückgegeben.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;synthetic-guide-new-001&quot;</code></span>\n- **Bei Auslassen:** externalReference gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n\n**`status` — Pflicht**\n\nDer aktuelle Bearbeitungsstand des Vorgangs. COMPLETED bezeichnet den bestätigten Fachabschluss, nicht nur eine Unterschrift.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PREPARED\",\"PENDING_SIGNATURE\",\"REQUIRES_REVIEW\",\"SCHEDULED\",\"PROCESSING\",\"OUTCOME_UNKNOWN\",\"COMPLETED\",\"REJECTED\",\"DISCARD_PENDING\",\"DISCARDED\"]\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von status lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;COMPLETED&quot;</code></span>\n- **Bei Auslassen:** status gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n\n**`signature` — Optional laut Schema**\n\nDer gemeldete Unterzeichnungsstand der zugehörigen Vertragsfassung.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von signature lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;contentRevisionId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;,&quot;signatureAttemptId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;,&quot;status&quot;:&quot;SIGNED&quot;}</code></span>\n- **Bei Auslassen:** Kein Unterzeichnungsstand in dieser Antwort ausgewiesen; eine Browserrückkehr oder eine frühere Einladung bestätigt keine Gesamtunterzeichnung.\n\n**`processingIssue` — Optional laut Schema**\n\nEin aktuell ausgewiesener Hinderungs- oder Klärungsgrund der weiteren Bearbeitung.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von processingIssue lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;code&quot;:&quot;SIGNED_DOCUMENT_PENDING&quot;,&quot;message&quot;:&quot;Die Endfassung ist noch nicht verfügbar.&quot;}</code></span>\n- **Bei Auslassen:** Kein Hinderungsgrund in dieser Antwort ausgewiesen; daraus allein keinen erfolgreichen Fachabschluss ableiten, sondern status beachten.\n\n**`salesContext` — Optional laut Schema**\n\nDer Verkäufer und die gegebenenfalls zugeordnete Filiale dieses Verkaufs.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von salesContext lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;branchId&quot;:&quot;30000000-0000-4000-8000-000000000001&quot;,&quot;sellerAccountId&quot;:&quot;20000000-0000-4000-8000-000000000001&quot;}</code></span>\n- **Bei Auslassen:** Die Antwort weist keinen gebundenen Verkaufskontext aus; eine heutige Auswahl aus GET /sales-context ergänzt ihn nicht.\n\n**`documents` — Optional laut Schema**\n\nDie in dieser Antwort ausgewiesenen konkreten Dokumentfassungen. Verfügbarkeit und gegebenenfalls Prüfsumme vor einem Download beachten.\n\n- **Format/Werte:** Liste; Elemente: DocumentMetadata\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von documents lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;availability&quot;:&quot;AVAILABLE&quot;,&quot;contentRevisionId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;,&quot;contractId&quot;:&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;,&quot;documentId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3004&quot;,&quot;operationId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;,&quot;phase&quot;:&quot;SIGNED&quot;,&quot;purpose&quot;:&quot;CONTRACT&quot;,&quot;sha256&quot;:&quot;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;,&quot;signatureAttemptId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;}]</code></span>\n- **Bei Auslassen:** Keine Dokumentliste in dieser Antwort ausgewiesen; eine fehlende Eigenschaft ist keine ausdrücklich leere Liste und bestätigt keine Dateiverfügbarkeit.\n\n**`requestedAt` — Optional laut Schema**\n\nDer für die Einreichung ausgewiesene Zeitpunkt.\n\n- **Format/Werte:** Zeichenfolge; Format: date-time\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von requestedAt lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-10-24T10:00:00Z&quot;</code></span>\n- **Bei Auslassen:** Kein Einreichungszeitpunkt mitgeteilt; die Zeit dieses Leseaufrufs ersetzt den ursprünglichen Zeitpunkt nicht.\n\n**`localAppliedAt` — Optional laut Schema**\n\nZeitpunkt des bestätigten Fachabschlusses. Eine bloße Annahme oder Unterschrift genügt dafür nicht.\n\n- **Format/Werte:** Zeichenfolge; Format: date-time\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von localAppliedAt lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-10-24T10:00:00Z&quot;</code></span>\n- **Bei Auslassen:** Ein bestätigter Fachabschlusszeitpunkt wird nicht ausgewiesen; Annahme- oder Unterzeichnungszeit nicht ersatzweise verwenden.\n\n**`billingEffectiveDate` — Optional laut Schema**\n\nDas für die Abrechnung ausgewiesene Wirksamkeitsdatum.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von billingEffectiveDate lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Kein Abrechnungsdatum in dieser Antwort ausgewiesen; Wunschstart und Vertragsbeginn ersetzen es nicht.\n\n**`providerScheduledDate` — Optional laut Schema**\n\nEin ausdrücklich mitgeteilter geplanter Leistungstermin. Ein Plan ist noch keine bestätigte Ausführung. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.\n- **Bedingung:** Fachbedingung: Nur auswerten, wenn die Antwort diese zusätzliche Leistungsangabe ausdrücklich enthält. Daraus entsteht kein weiterer unterstützter Abschlussweg.\n\n**`providerConfirmedAt` — Optional laut Schema**\n\nEin ausdrücklich mitgeteilter Bestätigungszeitpunkt einer angebundenen Leistung. Er ersetzt keinen Fachabschluss des Vorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: date-time\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von providerConfirmedAt lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-10-24T10:00:00Z&quot;</code></span>\n- **Bei Auslassen:** Kein Bestätigungszeitpunkt einer angebundenen Leistung mitgeteilt; ein Plantermin oder der Vorgangsstatus ersetzt diesen Nachweis nicht.\n- **Bedingung:** Fachbedingung: Nur auswerten, wenn die Antwort diese zusätzliche Leistungsangabe ausdrücklich enthält. Daraus entsteht kein weiterer unterstützter Abschlussweg.\n\n**`conditions` — Optional laut Schema**\n\nDie ausgewiesenen Konditionen einschließlich ausgewählter Optionen und berechneter Beträge.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von conditions lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;durationId&quot;:&quot;17ef5d55-617c-429a-b523-637625346856&quot;,&quot;paymentId&quot;:&quot;95012da7-bd0c-4b4a-b181-a43bff8578d0&quot;,&quot;priceType&quot;:&quot;AGB&quot;,&quot;regularPayment&quot;:{&quot;amount&quot;:&quot;10.50&quot;,&quot;basis&quot;:&quot;PAYMENT_INTERVAL&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;},&quot;setupCharge&quot;:{&quot;amount&quot;:&quot;19.95&quot;,&quot;basis&quot;:&quot;ONE_OFF&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}}</code></span>\n- **Bei Auslassen:** Keine Vorgangskonditionen in dieser Antwort ausgewiesen; keine Preise aus heutigen Produktangaben ergänzen.\n\n**`firstPaymentDate` — Optional laut Schema**\n\nDer für den Vertrag ausgewiesene erste Zahlungstermin. Nicht allein aus Vertragsbeginn oder Regelrate ableiten. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.\n\n**`renewalStartDate` — Optional laut Schema**\n\nBeginn einer weiteren Vertragsperiode, soweit eine Antwort diesen Termin ausweist. Im aktuellen klassischen Neuvertragsablauf und Vertragsabruf wird das Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Ablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Ablaufs; keinen Termin selbst ergänzen.\n\n**`endMinimumPeriod` — Optional laut Schema**\n\nDas ausgewiesene Ende der Mindestvertragslaufzeit. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.\n\n**`endNoticePeriod` — Optional laut Schema**\n\nDer für den Vertrag ausgewiesene Termin der Kündigungsfrist. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.\n\n**`withdrawalUntilDate` — Optional laut Schema**\n\nDas ausgewiesene Ende des Widerrufszeitraums. Keine eigene Frist aus dieser Angabe neu berechnen. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.\n\n**`serialNumbers` — Optional laut Schema**\n\nDie zum Produkt vorgegebene beziehungsweise im Vertrag ausgewiesene Liste von Geräteeinträgen.\n\n- **Format/Werte:** Liste; Elemente: SerialNumberInput\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von serialNumbers lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;name&quot;:&quot;Gerät 1&quot;,&quot;serialNumber1&quot;:&quot;SYNTHETIC-SN-001&quot;}]</code></span>\n- **Bei Auslassen:** Keine Geräteeinträge in dieser Antwort ausgewiesen; die ursprüngliche Eingabe ist kein Beleg des gespeicherten Gerätestands.\n\n**`requestedStartDate` — Optional laut Schema**\n\nGewünschter Vertragsbeginn. Er wird auf den für Produkt und Zugang zulässigen Zeitraum geprüft.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von requestedStartDate lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Kein Wunschstart in dieser Antwort ausgewiesen; daraus keinen tatsächlichen Vertragsbeginn ableiten.\n\n**`contentRevisionId` — Bedingt laut Schema**\n\nKennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von contentRevisionId lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;</code></span>\n- **Bei Auslassen:** Keine Fassungskennung in dieser Antwort ausgewiesen; contractId und operationId ersetzen diese Zuordnung nicht.\n- **Bedingung:** Wenn signature vorhanden und signature.contentRevisionId vorhanden\n\n**`providerOutcome` — Optional laut Schema**\n\nEin ausdrücklich ausgewiesener Ausgang einer angebundenen Leistung. Eine unklare Rückmeldung ist kein bestätigter Erfolg oder sicherer Nichterfolg. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;UNKNOWN&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.\n- **Bedingung:** Fachbedingung: Nur auswerten, wenn die Antwort diese zusätzliche Leistungsangabe ausdrücklich enthält. Daraus entsteht kein weiterer unterstützter Abschlussweg.\n\n\n\n#### signature · Signature\n\n**`signature.status` — Pflicht**\n\nGemeldeter Stand der Gesamtunterzeichnung der zugehörigen Vertragsfassung. Eine einzelne Unterzeichnernachricht ist kein Gesamtabschluss.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von signature.status aus der berechtigten Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PENDING&quot;</code></span>\n- **Bei Auslassen:** status gehört zu jedem ausgegebenen signature-Objekt. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von signature, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`signature.signingUrl` — Optional laut Schema**\n\nEin tatsächlich bereitgestellter Unterzeichnungslink. Die Einladung kann auch ohne Link in der API-Antwort erfolgen.\n\n- **Format/Werte:** Zeichenfolge; Format: uri\n- **Herkunft:** Den Wert von signature.signingUrl aus der berechtigten Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;https://sign.example/synthetic-only&quot;</code></span>\n- **Bei Auslassen:** Die Unterzeichnung kann über die versandte Einladung erfolgen; ein API-Link ist nicht garantiert.\n- **Bedingung:** Fachbedingung: Nur einen tatsächlich bereitgestellten Link verwenden, niemals selbst aus Kennungen konstruieren.\n\n**`signature.contentRevisionId` — Bedingt laut Schema**\n\nKennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von signature.contentRevisionId aus der berechtigten Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;</code></span>\n- **Bei Auslassen:** Keine Fassungskennung der Unterzeichnung mitgeteilt; eine Vertrags- oder Vorgangskennung ersetzt sie nicht.\n- **Bedingung:** Wenn signatureAttemptId vorhanden; Wenn confirmedAt vorhanden\n\n**`signature.signatureAttemptId` — Bedingt laut Schema**\n\nKennung des zugehörigen Unterzeichnungsvorgangs. Wiederzustellung und erneutes Lesen bedeuten keine neue Unterzeichnung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von signature.signatureAttemptId aus der berechtigten Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;</code></span>\n- **Bei Auslassen:** Keine Kennung des Unterzeichnungsvorgangs mitgeteilt; aus erneutem Lesen oder Wiederzustellung keine neue Unterzeichnung ableiten.\n- **Bedingung:** Wenn confirmedAt vorhanden\n\n**`signature.confirmedAt` — Optional laut Schema**\n\nGenauer Zeitpunkt der bestätigten Gesamtunterzeichnung, soweit ausdrücklich mitgeteilt. In der aktuellen klassischen Vorgangsantwort wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date-time\n- **Herkunft:** Im aktuellen klassischen Ablauf wird kein genauer Bestätigungszeitpunkt in diesem Antwortfeld geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-10-24T10:00:00Z&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Ablaufs. Den Zeitpunkt nicht aus Vertragsdatum, Empfangszeit oder Browserrückkehr ergänzen.\n- **Bedingung:** Fachbedingung: Nur einen ausdrücklich ausgewiesenen Bestätigungszeitpunkt verwenden; beim noch nicht begonnenen oder ausstehenden Unterzeichnen keinen Zeitwert ergänzen.\n\n\n\n#### processingIssue · ProcessingIssue\n\n**`processingIssue.code` — Pflicht**\n\nMaschinenlesbare Fehler- oder Hinderungskennung für die gezielte Behandlung des gemeldeten Falls.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von processingIssue.code aus dem aktuell berechtigt gelesenen Vorgang auswerten.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;INVALID_REQUEST&quot;</code></span>\n- **Bei Auslassen:** code gehört zu jedem ausgegebenen processingIssue-Objekt. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von processingIssue, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`processingIssue.message` — Pflicht**\n\nLesbare Erläuterung des gemeldeten Fehlers oder Hinderungsgrunds.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von processingIssue.message aus dem aktuell berechtigt gelesenen Vorgang auswerten.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Die Eingabe konnte nicht verarbeitet werden.&quot;</code></span>\n- **Bei Auslassen:** message gehört zu jedem ausgegebenen processingIssue-Objekt. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von processingIssue, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`processingIssue.details` — Optional laut Schema**\n\nDauerhaft gespeicherte sichere Feldhinweise zur bestätigten Vorbereitungsablehnung. Bei älteren Vorgängen kann nur eine allgemeine Ablehnung vorhanden sein; die ursprüngliche Ursache wird nicht nachträglich erraten.\n\n- **Format/Werte:** Liste; null; Elemente: ErrorDetail\n- **Herkunft:** Aus dem gespeicherten processingIssue des eigenen Vorgangs.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;code&quot;:&quot;WITHDRAWAL_SELECTION_REQUIRED&quot;,&quot;field&quot;:&quot;withdrawalRightSelected&quot;,&quot;message&quot;:&quot;Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.&quot;}]</code></span>\n- **Bei Auslassen:** Keine zusätzlichen Feldhinweise mitgeteilt; daraus keine Fehlerfreiheit der übrigen Angaben ableiten.\n\n\n\n#### processingIssue.details[] · ErrorDetail\n\n**`processingIssue.details[].field` — Pflicht**\n\nÖffentlicher JSON-Feldpfad der betroffenen Angabe, sofern eine einzelne Angabe sicher benannt werden kann.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 100\n- **Herkunft:** Aus details der Fehlerantwort oder des gespeicherten processingIssue.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;withdrawalRightSelected&quot;</code></span>\n- **Bei Auslassen:** Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.\n- **Bedingung:** Pflicht innerhalb von processingIssue.details[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`processingIssue.details[].code` — Pflicht**\n\nMaschinenlesbare Fehlerkennung zu dieser Feldangabe.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 100\n- **Herkunft:** Aus derselben Feldangabe; gemeinsam mit field und message auswerten.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;WITHDRAWAL_SELECTION_REQUIRED&quot;</code></span>\n- **Bei Auslassen:** Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.\n- **Bedingung:** Pflicht innerhalb von processingIssue.details[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`processingIssue.details[].message` — Pflicht**\n\nSichere Erläuterung, welche Angabe zu prüfen oder nachzureichen ist. Sie enthält keine eingegebenen Personen- oder Bankwerte.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 500\n- **Herkunft:** Aus der betreffenden Feldangabe.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.&quot;</code></span>\n- **Bei Auslassen:** Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.\n- **Bedingung:** Pflicht innerhalb von processingIssue.details[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### salesContext · SalesContext\n\n**`salesContext.sellerAccountId` — Pflicht**\n\nKennung des bewusst ausgewählten Verkäufers dieses Verkaufs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die gewünschte Kennung aus GET /sales-context auswählen; Antworten geben die verwendete Verkaufszuordnung wieder.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;20000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Bei der Vertragseinreichung muss der Verkäufer ausdrücklich angegeben werden; fehlt sellerAccountId, wird die Einreichung als ungültig abgewiesen. Der API-Zugang und die Listenposition ersetzen die Auswahl nicht.\n- **Bedingung:** Pflicht innerhalb von salesContext, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`salesContext.branchId` — Optional laut Schema**\n\nKennung der gewählten Filiale. Eine explizite ungültige Filiale wird nicht durch eine andere ersetzt.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die gewünschte Kennung aus GET /sales-context auswählen; Antworten geben die verwendete Verkaufszuordnung wieder.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;30000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Keine aktive Filiale: ohne Zuordnung, soweit zulässig. Genau eine aktive zugehörige Filiale: diese wird geprüft und zugeordnet. Mehrere: ausdrücklich auswählen. null ist kein Auslassen.\n- **Bedingung:** Fachbedingung: Die explizite Filiale muss aktiv und dem eigenen Partner zugeordnet sein. Die wirksame Auswahl bleibt bei identischer Wiederholung erhalten.\n\n\n\n#### documents[] · DocumentMetadata\n\n**`documents[].documentId` — Pflicht**\n\nKennung genau der referenzierten Dateifassung. Geänderte PDF-Bytes erhalten eine andere Kennung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von documents[].documentId aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3004&quot;</code></span>\n- **Bei Auslassen:** documentId gehört zu jedem ausgegebenen Dokumenteintrag. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von documents[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`documents[].contractId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von documents[].contractId aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** contractId gehört zu jedem ausgegebenen Dokumenteintrag. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von documents[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`documents[].operationId` — Bedingt laut Schema**\n\nÖffentliche Kennung des zugehörigen Vertragsvorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn signatureAttemptId vorhanden; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].contentRevisionId` — Bedingt laut Schema**\n\nKennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn signatureAttemptId vorhanden; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].signatureAttemptId` — Bedingt laut Schema**\n\nKennung des zugehörigen Unterzeichnungsvorgangs. Wiederzustellung und erneutes Lesen bedeuten keine neue Unterzeichnung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn phase vorhanden und phase in [\"SIGNING_INPUT\",\"SIGNED\"]; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].purpose` — Optional laut Schema**\n\nFachlicher Zweck des Dokuments, etwa Vertragsdokument oder Änderungsdokument. Der Zweck allein bestätigt keine Unterschrift.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"CONTRACT\",\"AMENDMENT\"]\n- **Herkunft:** Den Wert von documents[].purpose aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;CONTRACT&quot;</code></span>\n- **Bei Auslassen:** Kein Dokumentzweck mitgeteilt; Dateiname und bloße Dateiexistenz belegen weder den Zweck noch eine Unterschrift.\n- **Bedingung:** Fachbedingung: Der Zweck allein bestätigt keine Gesamtunterzeichnung.\n\n**`documents[].phase` — Optional laut Schema**\n\nEinordnung als Vorschau, Unterzeichnungsvorlage oder signierte Endfassung, sofern diese Herkunft tatsächlich ausgewiesen wird.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PREVIEW\",\"SIGNING_INPUT\",\"SIGNED\"]\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SIGNED&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].availability` — Optional laut Schema**\n\nMitgeteilter Zustand der Dokumentverfügbarkeit. Eine technische Abrufstörung darf nicht als nachgewiesenes Fehlen einer Datei behandelt werden.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PENDING\",\"AVAILABLE\",\"MISSING\"]\n- **Herkunft:** Den Wert von documents[].availability aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;AVAILABLE&quot;</code></span>\n- **Bei Auslassen:** Keine Verfügbarkeit aus anderen Statuswerten ableiten.\n- **Bedingung:** Fachbedingung: Beim aktuellen Vertragsabruf werden tatsächlich verfügbare Dateien referenziert. Eine fehlende Datei oder technische Störung kann stattdessen die dokumentierte Fehlerantwort auslösen.\n\n**`documents[].sha256` — Bedingt laut Schema**\n\nPrüfsumme exakt der referenzierten Dateibytes. Mit SHA256 des tatsächlich heruntergeladenen PDFs vergleichen.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^[0-9a-f]{64}$\"; Mindestlänge: 64; Höchstlänge: 64\n- **Herkunft:** Den Wert von documents[].sha256 aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;</code></span>\n- **Bei Auslassen:** Ohne ausgewiesene Prüfsumme keinen Hash oder Dateibeleg erfinden.\n- **Bedingung:** Wenn contentRevisionId vorhanden und availability vorhanden und availability = \"AVAILABLE\"; Fachbedingung: Nur für tatsächlich verfügbare, genau dieser Fassung zugeordnete Bytes auswerten.\n\n**`documents[].coveredContractIds` — Optional laut Schema**\n\nVerträge, deren Bezug zu dieser Dokumentfassung ausdrücklich ausgewiesen wird. Eine gemeinsame Datei allein erteilt keine weiteren Vertragsrechte.\n\n- **Format/Werte:** Liste; keine doppelten Listenelemente; Elemente: ResourceId\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>[&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;]</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n\n\n#### conditions · ContractConditions\n\n**`conditions.durationId` — Optional laut Schema**\n\nKennung der bewusst ausgewählten Laufzeitoption des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Laufzeitkennung lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;17ef5d55-617c-429a-b523-637625346856&quot;</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Laufzeitkennung aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`conditions.paymentId` — Optional laut Schema**\n\nKennung der bewusst ausgewählten Zahlweise des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Zahlweisenkennung lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;95012da7-bd0c-4b4a-b181-a43bff8578d0&quot;</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Zahlweisenkennung aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`conditions.priceType` — Optional laut Schema**\n\nDie für das Produkt angebotene und bewusst ausgewählte Preisart.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"AGB\",\"PROMO\",\"PROMO_TEMP\"]\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Preisart lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;AGB&quot;</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Preisart aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`conditions.promotionId` — Optional laut Schema**\n\nKennung der ausgewählten befristeten Promotion.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Promotionskennung lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;70000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Promotionskennung aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`conditions.debitDay` — Optional laut Schema**\n\nGewählter beziehungsweise ausgewiesener Tag im Monat für den Lastschrifteinzug. Dies ist kein vollständiges Datum.\n\n- **Format/Werte:** Ganzzahl\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Angabe zum Einzugstag lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>5</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Angabe zum Einzugstag aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`conditions.regularPayment` — Optional laut Schema**\n\nAusgewiesene Regelrate mit Währung, Steuerbasis und Zahlungsbezug. Sie ist nicht automatisch der Betrag des ersten Einzugs.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesenen Betrag zusammen mit Währung, Steuerbasis und Zahlungsbezug lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;10.50&quot;,&quot;basis&quot;:&quot;PAYMENT_INTERVAL&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** Kein Betrag für diese Position mitgeteilt; dies bedeutet weder 0 noch Gebührenfreiheit. Keine heutigen Produktpreise ergänzen.\n- **Bedingung:** Fachbedingung: Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.\n\n**`conditions.promotionalPayment` — Optional laut Schema**\n\nAusgewiesene Rate während der zugeordneten Promotion. Der aktuelle Vertragsabruf gibt dieses Feld nicht aus; Produktkonditions- oder Vorgangsantworten sind gesondert zu betrachten.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in conditions der Vorgangsantwort ausgewiesenen Promotionsbetrag zusammen mit Währung, Steuerbasis und Zahlungsbezug lesen; der aktuelle Vertragsabruf gibt diesen Wert nicht aus.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;9.50&quot;,&quot;basis&quot;:&quot;PAYMENT_INTERVAL&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** Beim aktuellen GET /contracts/{contractId} wird dieses Feld nicht ausgegeben; keine Rate oder Dauer daraus berechnen.\n- **Bedingung:** Fachbedingung: Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.\n\n**`conditions.promotionDurationMonths` — Optional laut Schema**\n\nAusgewiesene Dauer der zugeordneten Promotion in Monaten. Der aktuelle Vertragsabruf gibt dieses Feld nicht aus; Produktkonditions- oder Vorgangsantworten sind gesondert zu betrachten.\n\n- **Format/Werte:** Ganzzahl\n- **Herkunft:** Die in conditions der Vorgangsantwort ausgewiesene Promotionsdauer lesen; der aktuelle Vertragsabruf gibt diesen Wert nicht aus.\n- **Beispiel:** <span class=\"partner-field\"><code>3</code></span>\n- **Bei Auslassen:** Beim aktuellen GET /contracts/{contractId} wird dieses Feld nicht ausgegeben; keine Rate oder Dauer daraus berechnen.\n\n**`conditions.setupCharge` — Optional laut Schema**\n\nAusgewiesenes einmaliges Einrichtungsentgelt mit Währung und Steuerbasis.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesenen Betrag zusammen mit Währung, Steuerbasis und Zahlungsbezug lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;19.95&quot;,&quot;basis&quot;:&quot;ONE_OFF&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** Kein Betrag für diese Position mitgeteilt; dies bedeutet weder 0 noch Gebührenfreiheit. Keine heutigen Produktpreise ergänzen.\n- **Bedingung:** Fachbedingung: Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.\n\n**`conditions.withdrawalDays` — Optional laut Schema**\n\nDie aus der zulässigen Auswahl bestimmten Widerrufstage. Dies ist keine freie Tageswahl des Partners.\n\n- **Format/Werte:** Ganzzahl; Minimum: 0\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Anzahl der Widerrufstage lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>14</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Anzahl der Widerrufstage aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n\n\n#### conditions.regularPayment · ConditionAmount\n\n**`conditions.regularPayment.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.regularPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.regularPayment.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.regularPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.regularPayment.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.regularPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.regularPayment.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.regularPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### conditions.promotionalPayment · ConditionAmount\n\n**`conditions.promotionalPayment.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.promotionalPayment.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.promotionalPayment.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.promotionalPayment.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### conditions.setupCharge · ConditionAmount\n\n**`conditions.setupCharge.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.setupCharge.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.setupCharge.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.setupCharge.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### serialNumbers[] · SerialNumberInput\n\n**`serialNumbers[].name` — Optional laut Schema**\n\nBezeichnung dieses Geräteeintrags; sie bestimmt, ob die Regeln für einen benannten Eintrag greifen.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Gerät 1&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`serialNumbers[].serialNumber1` — Optional laut Schema**\n\nErste Serienangabe des Geräteeintrags entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-SN-001&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`serialNumbers[].serialNumber2` — Optional laut Schema**\n\nZweite Serienangabe des Geräteeintrags entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-SN-002&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`serialNumbers[].additional1` — Optional laut Schema**\n\nErste zusätzliche Geräteangabe entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Zusatzangabe&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`serialNumbers[].additional2` — Optional laut Schema**\n\nZweite zusätzliche Geräteangabe entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Zusatzangabe&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n\n\n## Vertrag lesen\n\nDie über den berechtigten Vertragsabruf gelieferten Vertragswerte und Dokumentreferenzen. Nicht ausgegebene Werte dürfen nicht durch aktuelle Produktangaben oder eigene Berechnungen ersetzt werden.\n\n### Contract\n\n**`contractId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von contractId lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** contractId gehört zu jeder erfolgreichen Vertragsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n\n**`contractNumber` — Optional laut Schema**\n\nDie von SmartPay vergebene fachliche Vertragsnummer. Für Ressourcenaufrufe die contractId verwenden.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von contractNumber lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;V-SYNTHETIC-1001&quot;</code></span>\n- **Bei Auslassen:** Keine fachliche Vertragsnummer mitgeteilt; für Ressourcenaufrufe weiterhin die contractId verwenden.\n\n**`customerId` — Optional laut Schema**\n\nÖffentliche Kennung des Kunden. Sie ist weder die SmartPay-Kundennummer noch Ihre Partnerkundennummer.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von customerId lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;11111111-1111-4111-8111-111111111111&quot;</code></span>\n- **Bei Auslassen:** Die Vertragsantwort teilt keine Kundenkennung mit; keine Zuordnung aus einem früheren Suchtreffer ergänzen.\n\n**`productId` — Optional laut Schema**\n\nÖffentliche Kennung des bewusst gewählten Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von productId lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;51f866e9-2307-47c6-8de3-e6b1f24f8d31&quot;</code></span>\n- **Bei Auslassen:** Die Vertragsantwort teilt keine Produktkennung mit; keine Kennung aus dem heutigen Produktkatalog ergänzen.\n\n**`salesContext` — Optional laut Schema**\n\nDer Verkäufer und die gegebenenfalls zugeordnete Filiale dieses Verkaufs.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von salesContext lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;branchId&quot;:&quot;30000000-0000-4000-8000-000000000001&quot;,&quot;sellerAccountId&quot;:&quot;20000000-0000-4000-8000-000000000001&quot;}</code></span>\n- **Bei Auslassen:** Der historische Verkaufskontext ist in dieser Vertragsantwort nicht ausgewiesen; die heute auswählbaren Verkäufer und Filialen ersetzen ihn nicht.\n\n**`documents` — Optional laut Schema**\n\nDie konkreten Dokumentfassungen des Vertrags. Der aktuelle erfolgreiche Vertragsabruf liefert stets eine Liste, bei fehlenden Dokumentzuordnungen gegebenenfalls []. Bei vorhandener Zuordnung kann eine nicht abrufbare Datei stattdessen einen dokumentierten Fehler auslösen.\n\n- **Format/Werte:** Liste; Elemente: DocumentMetadata\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von documents lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;availability&quot;:&quot;AVAILABLE&quot;,&quot;contractId&quot;:&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;,&quot;documentId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3004&quot;,&quot;purpose&quot;:&quot;CONTRACT&quot;,&quot;sha256&quot;:&quot;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;}]</code></span>\n- **Bei Auslassen:** Der aktuelle erfolgreiche GET liefert diese Liste; für andere Antworten ist aus einer fehlenden Eigenschaft keine leere Dokumentliste abzuleiten.\n\n**`conditions` — Optional laut Schema**\n\nDie ausgewiesenen Konditionen einschließlich ausgewählter Optionen und berechneter Beträge.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von conditions lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;durationId&quot;:&quot;17ef5d55-617c-429a-b523-637625346856&quot;,&quot;paymentId&quot;:&quot;95012da7-bd0c-4b4a-b181-a43bff8578d0&quot;,&quot;priceType&quot;:&quot;AGB&quot;,&quot;regularPayment&quot;:{&quot;amount&quot;:&quot;10.50&quot;,&quot;basis&quot;:&quot;PAYMENT_INTERVAL&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;},&quot;setupCharge&quot;:{&quot;amount&quot;:&quot;19.95&quot;,&quot;basis&quot;:&quot;ONE_OFF&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}}</code></span>\n- **Bei Auslassen:** Historische Konditionen sind in dieser Vertragsantwort nicht ausgewiesen; heutige Produktpreise ersetzen die gespeicherten Vertragswerte nicht.\n\n**`firstPaymentDate` — Optional laut Schema**\n\nDer für den Vertrag ausgewiesene erste Zahlungstermin. Nicht allein aus Vertragsbeginn oder Regelrate ableiten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von firstPaymentDate lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Ein erster Zahlungstermin ist nicht mitgeteilt; weder den Vertragsbeginn noch den nächsten Einzugstag ersatzweise verwenden.\n\n**`renewalStartDate` — Optional laut Schema**\n\nBeginn einer weiteren Vertragsperiode, soweit eine Antwort diesen Termin ausweist. Im aktuellen klassischen Neuvertragsablauf und Vertragsabruf wird das Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Ablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Ablaufs; keinen Termin selbst ergänzen.\n\n**`endMinimumPeriod` — Optional laut Schema**\n\nDas ausgewiesene Ende der Mindestvertragslaufzeit.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von endMinimumPeriod lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Das Ende der Mindestlaufzeit ist nicht mitgeteilt; keinen Termin aus heutigen Produktlaufzeiten berechnen.\n\n**`endNoticePeriod` — Optional laut Schema**\n\nDer für den Vertrag ausgewiesene Termin der Kündigungsfrist.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von endNoticePeriod lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Ein Termin zur Kündigungsfrist ist nicht mitgeteilt; keinen Termin aus heutigen Produktregeln berechnen.\n\n**`withdrawalUntilDate` — Optional laut Schema**\n\nDas ausgewiesene Ende des Widerrufszeitraums. Keine eigene Frist aus dieser Angabe neu berechnen.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von withdrawalUntilDate lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Das Ende des Widerrufszeitraums ist nicht mitgeteilt; keine Frist aus anderen Vertragsdaten ergänzen.\n\n**`serialNumbers` — Optional laut Schema**\n\nDie zum Produkt vorgegebene beziehungsweise im Vertrag ausgewiesene Liste von Geräteeinträgen.\n\n- **Format/Werte:** Liste; Elemente: SerialNumberInput\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von serialNumbers lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;name&quot;:&quot;Gerät 1&quot;,&quot;serialNumber1&quot;:&quot;SYNTHETIC-SN-001&quot;}]</code></span>\n- **Bei Auslassen:** Die Vertragsantwort enthält keine Geräteeinträge; eine fehlende Eigenschaft belegt keine ausdrücklich leere Geräteliste.\n\n**`startDate` — Optional laut Schema**\n\nDer tatsächlich im Vertrag ausgewiesene Vertragsbeginn.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von startDate lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Ein Vertragsbeginn ist nicht mitgeteilt; einen früheren Wunschstart nicht als tatsächlichen Beginn übernehmen.\n\n**`signDate` — Optional laut Schema**\n\nDas im Vertrag ausgewiesene Unterzeichnungsdatum. Es ist kein genauer Bestätigungszeitpunkt des Vorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von signDate lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Ein Unterzeichnungsdatum ist nicht mitgeteilt; Annahmezeit oder Browserrückkehr ersetzen es nicht.\n\n**`contractStatus` — Optional laut Schema**\n\nDer vom Vertragsabruf oder Vertragsereignis gemeldete Vertragszustand. Er ist vom Bearbeitungsstatus eines Vorgangs zu unterscheiden.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den in GET /contracts/{contractId} ausgegebenen Wert von contractStatus lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SIGNED&quot;</code></span>\n- **Bei Auslassen:** Ein Vertragszustand ist nicht mitgeteilt; der Bearbeitungsstatus eines Vorgangs ersetzt ihn nicht.\n\n**`endDate` — Optional laut Schema**\n\nTatsächlich gespeichertes Vertragsende, sofern vorhanden. Nach Reaktivierung nicht ausgegeben.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2027-11-01&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`resignDate` — Optional laut Schema**\n\nTatsächlich gespeichertes Datum von Kündigung oder Widerruf, sofern vorhanden. Nach Reaktivierung nicht ausgegeben.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2027-11-01&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n\n\n#### salesContext · SalesContext\n\n**`salesContext.sellerAccountId` — Pflicht**\n\nKennung des bewusst ausgewählten Verkäufers dieses Verkaufs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die gewünschte Kennung aus GET /sales-context auswählen; Antworten geben die verwendete Verkaufszuordnung wieder.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;20000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Bei der Vertragseinreichung muss der Verkäufer ausdrücklich angegeben werden; fehlt sellerAccountId, wird die Einreichung als ungültig abgewiesen. Der API-Zugang und die Listenposition ersetzen die Auswahl nicht.\n- **Bedingung:** Pflicht innerhalb von salesContext, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`salesContext.branchId` — Optional laut Schema**\n\nKennung der gewählten Filiale. Eine explizite ungültige Filiale wird nicht durch eine andere ersetzt.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die gewünschte Kennung aus GET /sales-context auswählen; Antworten geben die verwendete Verkaufszuordnung wieder.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;30000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Keine aktive Filiale: ohne Zuordnung, soweit zulässig. Genau eine aktive zugehörige Filiale: diese wird geprüft und zugeordnet. Mehrere: ausdrücklich auswählen. null ist kein Auslassen.\n- **Bedingung:** Fachbedingung: Die explizite Filiale muss aktiv und dem eigenen Partner zugeordnet sein. Die wirksame Auswahl bleibt bei identischer Wiederholung erhalten.\n\n\n\n#### documents[] · DocumentMetadata\n\n**`documents[].documentId` — Pflicht**\n\nKennung genau der referenzierten Dateifassung. Geänderte PDF-Bytes erhalten eine andere Kennung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von documents[].documentId aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3004&quot;</code></span>\n- **Bei Auslassen:** documentId gehört zu jedem ausgegebenen Dokumenteintrag. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von documents[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`documents[].contractId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von documents[].contractId aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** contractId gehört zu jedem ausgegebenen Dokumenteintrag. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von documents[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`documents[].operationId` — Bedingt laut Schema**\n\nÖffentliche Kennung des zugehörigen Vertragsvorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn signatureAttemptId vorhanden; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].contentRevisionId` — Bedingt laut Schema**\n\nKennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn signatureAttemptId vorhanden; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].signatureAttemptId` — Bedingt laut Schema**\n\nKennung des zugehörigen Unterzeichnungsvorgangs. Wiederzustellung und erneutes Lesen bedeuten keine neue Unterzeichnung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn phase vorhanden und phase in [\"SIGNING_INPUT\",\"SIGNED\"]; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].purpose` — Optional laut Schema**\n\nFachlicher Zweck des Dokuments, etwa Vertragsdokument oder Änderungsdokument. Der Zweck allein bestätigt keine Unterschrift.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"CONTRACT\",\"AMENDMENT\"]\n- **Herkunft:** Den Wert von documents[].purpose aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;CONTRACT&quot;</code></span>\n- **Bei Auslassen:** Kein Dokumentzweck mitgeteilt; Dateiname und bloße Dateiexistenz belegen weder den Zweck noch eine Unterschrift.\n- **Bedingung:** Fachbedingung: Der Zweck allein bestätigt keine Gesamtunterzeichnung.\n\n**`documents[].phase` — Optional laut Schema**\n\nEinordnung als Vorschau, Unterzeichnungsvorlage oder signierte Endfassung, sofern diese Herkunft tatsächlich ausgewiesen wird.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PREVIEW\",\"SIGNING_INPUT\",\"SIGNED\"]\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SIGNED&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].availability` — Optional laut Schema**\n\nMitgeteilter Zustand der Dokumentverfügbarkeit. Eine technische Abrufstörung darf nicht als nachgewiesenes Fehlen einer Datei behandelt werden.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PENDING\",\"AVAILABLE\",\"MISSING\"]\n- **Herkunft:** Den Wert von documents[].availability aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;AVAILABLE&quot;</code></span>\n- **Bei Auslassen:** Keine Verfügbarkeit aus anderen Statuswerten ableiten.\n- **Bedingung:** Fachbedingung: Beim aktuellen Vertragsabruf werden tatsächlich verfügbare Dateien referenziert. Eine fehlende Datei oder technische Störung kann stattdessen die dokumentierte Fehlerantwort auslösen.\n\n**`documents[].sha256` — Bedingt laut Schema**\n\nPrüfsumme exakt der referenzierten Dateibytes. Mit SHA256 des tatsächlich heruntergeladenen PDFs vergleichen.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^[0-9a-f]{64}$\"; Mindestlänge: 64; Höchstlänge: 64\n- **Herkunft:** Den Wert von documents[].sha256 aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;</code></span>\n- **Bei Auslassen:** Ohne ausgewiesene Prüfsumme keinen Hash oder Dateibeleg erfinden.\n- **Bedingung:** Wenn contentRevisionId vorhanden und availability vorhanden und availability = \"AVAILABLE\"; Fachbedingung: Nur für tatsächlich verfügbare, genau dieser Fassung zugeordnete Bytes auswerten.\n\n**`documents[].coveredContractIds` — Optional laut Schema**\n\nVerträge, deren Bezug zu dieser Dokumentfassung ausdrücklich ausgewiesen wird. Eine gemeinsame Datei allein erteilt keine weiteren Vertragsrechte.\n\n- **Format/Werte:** Liste; keine doppelten Listenelemente; Elemente: ResourceId\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>[&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;]</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n\n\n#### conditions · ContractConditions\n\n**`conditions.durationId` — Optional laut Schema**\n\nKennung der bewusst ausgewählten Laufzeitoption des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Laufzeitkennung lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;17ef5d55-617c-429a-b523-637625346856&quot;</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Laufzeitkennung aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`conditions.paymentId` — Optional laut Schema**\n\nKennung der bewusst ausgewählten Zahlweise des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Zahlweisenkennung lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;95012da7-bd0c-4b4a-b181-a43bff8578d0&quot;</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Zahlweisenkennung aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`conditions.priceType` — Optional laut Schema**\n\nDie für das Produkt angebotene und bewusst ausgewählte Preisart.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"AGB\",\"PROMO\",\"PROMO_TEMP\"]\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Preisart lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;AGB&quot;</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Preisart aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`conditions.promotionId` — Optional laut Schema**\n\nKennung der ausgewählten befristeten Promotion.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Promotionskennung lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;70000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Promotionskennung aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`conditions.debitDay` — Optional laut Schema**\n\nGewählter beziehungsweise ausgewiesener Tag im Monat für den Lastschrifteinzug. Dies ist kein vollständiges Datum.\n\n- **Format/Werte:** Ganzzahl\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Angabe zum Einzugstag lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>5</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Angabe zum Einzugstag aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`conditions.regularPayment` — Optional laut Schema**\n\nAusgewiesene Regelrate mit Währung, Steuerbasis und Zahlungsbezug. Sie ist nicht automatisch der Betrag des ersten Einzugs.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesenen Betrag zusammen mit Währung, Steuerbasis und Zahlungsbezug lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;10.50&quot;,&quot;basis&quot;:&quot;PAYMENT_INTERVAL&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** Kein Betrag für diese Position mitgeteilt; dies bedeutet weder 0 noch Gebührenfreiheit. Keine heutigen Produktpreise ergänzen.\n- **Bedingung:** Fachbedingung: Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.\n\n**`conditions.promotionalPayment` — Optional laut Schema**\n\nAusgewiesene Rate während der zugeordneten Promotion. Der aktuelle Vertragsabruf gibt dieses Feld nicht aus; Produktkonditions- oder Vorgangsantworten sind gesondert zu betrachten.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in conditions der Vorgangsantwort ausgewiesenen Promotionsbetrag zusammen mit Währung, Steuerbasis und Zahlungsbezug lesen; der aktuelle Vertragsabruf gibt diesen Wert nicht aus.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;9.50&quot;,&quot;basis&quot;:&quot;PAYMENT_INTERVAL&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** Beim aktuellen GET /contracts/{contractId} wird dieses Feld nicht ausgegeben; keine Rate oder Dauer daraus berechnen.\n- **Bedingung:** Fachbedingung: Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.\n\n**`conditions.promotionDurationMonths` — Optional laut Schema**\n\nAusgewiesene Dauer der zugeordneten Promotion in Monaten. Der aktuelle Vertragsabruf gibt dieses Feld nicht aus; Produktkonditions- oder Vorgangsantworten sind gesondert zu betrachten.\n\n- **Format/Werte:** Ganzzahl\n- **Herkunft:** Die in conditions der Vorgangsantwort ausgewiesene Promotionsdauer lesen; der aktuelle Vertragsabruf gibt diesen Wert nicht aus.\n- **Beispiel:** <span class=\"partner-field\"><code>3</code></span>\n- **Bei Auslassen:** Beim aktuellen GET /contracts/{contractId} wird dieses Feld nicht ausgegeben; keine Rate oder Dauer daraus berechnen.\n\n**`conditions.setupCharge` — Optional laut Schema**\n\nAusgewiesenes einmaliges Einrichtungsentgelt mit Währung und Steuerbasis.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesenen Betrag zusammen mit Währung, Steuerbasis und Zahlungsbezug lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;19.95&quot;,&quot;basis&quot;:&quot;ONE_OFF&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** Kein Betrag für diese Position mitgeteilt; dies bedeutet weder 0 noch Gebührenfreiheit. Keine heutigen Produktpreise ergänzen.\n- **Bedingung:** Fachbedingung: Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.\n\n**`conditions.withdrawalDays` — Optional laut Schema**\n\nDie aus der zulässigen Auswahl bestimmten Widerrufstage. Dies ist keine freie Tageswahl des Partners.\n\n- **Format/Werte:** Ganzzahl; Minimum: 0\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Anzahl der Widerrufstage lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>14</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Anzahl der Widerrufstage aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n\n\n#### conditions.regularPayment · ConditionAmount\n\n**`conditions.regularPayment.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.regularPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.regularPayment.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.regularPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.regularPayment.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.regularPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.regularPayment.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.regularPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### conditions.promotionalPayment · ConditionAmount\n\n**`conditions.promotionalPayment.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.promotionalPayment.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.promotionalPayment.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.promotionalPayment.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### conditions.setupCharge · ConditionAmount\n\n**`conditions.setupCharge.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.setupCharge.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.setupCharge.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.setupCharge.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### serialNumbers[] · SerialNumberInput\n\n**`serialNumbers[].name` — Optional laut Schema**\n\nBezeichnung dieses Geräteeintrags; sie bestimmt, ob die Regeln für einen benannten Eintrag greifen.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Gerät 1&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`serialNumbers[].serialNumber1` — Optional laut Schema**\n\nErste Serienangabe des Geräteeintrags entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-SN-001&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`serialNumbers[].serialNumber2` — Optional laut Schema**\n\nZweite Serienangabe des Geräteeintrags entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-SN-002&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`serialNumbers[].additional1` — Optional laut Schema**\n\nErste zusätzliche Geräteangabe entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Zusatzangabe&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`serialNumbers[].additional2` — Optional laut Schema**\n\nZweite zusätzliche Geräteangabe entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Zusatzangabe&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n\n\n## Weitere Ein- und Ausgaben\n\n### ApiErrorEnvelope\n\n**`code` — Pflicht**\n\nMaschinenlesbare Fehler- oder Hinderungskennung für die gezielte Behandlung des gemeldeten Falls.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^[A-Za-z0-9._:-]{1,100}$\"; Höchstlänge: 100\n- **Herkunft:** Aus der aktuellen Fehlerantwort beziehungsweise dem Hinderungsgrund des Vorgangs.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;INVALID_REQUEST&quot;</code></span>\n- **Bei Auslassen:** code gehört zu der beschriebenen Fehlerantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n\n**`message` — Pflicht**\n\nLesbare Erläuterung des gemeldeten Fehlers oder Hinderungsgrunds.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 500\n- **Herkunft:** Aus der aktuellen Fehlerantwort beziehungsweise dem Hinderungsgrund des Vorgangs.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Die Eingabe konnte nicht verarbeitet werden.&quot;</code></span>\n- **Bei Auslassen:** message gehört zu der beschriebenen Fehlerantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n\n**`requestId` — Pflicht**\n\nSupportkennung des aktuellen HTTP-Aufrufs; sie stimmt mit dem Antwortheader X-Request-Id überein.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^[A-Za-z0-9._:-]{1,100}$\"; Höchstlänge: 100\n- **Herkunft:** Aus der aktuellen Fehlerantwort beziehungsweise dem Hinderungsgrund des Vorgangs.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;synthetic-request-001&quot;</code></span>\n- **Bei Auslassen:** requestId gehört zu der beschriebenen Fehlerantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n\n**`details` — Pflicht**\n\nZusätzliche sichere Feldhinweise. Bei bekannten Ablehnungen der Vertragsvorbereitung enthält die Liste höchstens einen Hinweis mit öffentlichem Feldpfad, Code und Korrekturtext. Ohne sicher benennbares Feld bleibt sie leer.\n\n- **Format/Werte:** Liste; Höchstelemente: 100; Elemente: ErrorDetail\n- **Herkunft:** Aus der aktuellen Fehlerantwort.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;code&quot;:&quot;WITHDRAWAL_SELECTION_REQUIRED&quot;,&quot;field&quot;:&quot;withdrawalRightSelected&quot;,&quot;message&quot;:&quot;Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.&quot;}]</code></span>\n- **Bei Auslassen:** details ist eine Liste; ohne zusätzliche Feldhinweise wird eine leere Liste geliefert.\n\n\n\n#### details[] · ErrorDetail\n\n**`details[].field` — Pflicht**\n\nÖffentlicher JSON-Feldpfad der betroffenen Angabe, sofern eine einzelne Angabe sicher benannt werden kann.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 100\n- **Herkunft:** Aus details der Fehlerantwort oder des gespeicherten processingIssue.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;withdrawalRightSelected&quot;</code></span>\n- **Bei Auslassen:** Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.\n- **Bedingung:** Pflicht innerhalb von details[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`details[].code` — Pflicht**\n\nMaschinenlesbare Fehlerkennung zu dieser Feldangabe.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 100\n- **Herkunft:** Aus derselben Feldangabe; gemeinsam mit field und message auswerten.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;WITHDRAWAL_SELECTION_REQUIRED&quot;</code></span>\n- **Bei Auslassen:** Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.\n- **Bedingung:** Pflicht innerhalb von details[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`details[].message` — Pflicht**\n\nSichere Erläuterung, welche Angabe zu prüfen oder nachzureichen ist. Sie enthält keine eingegebenen Personen- oder Bankwerte.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 500\n- **Herkunft:** Aus der betreffenden Feldangabe.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.&quot;</code></span>\n- **Bei Auslassen:** Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.\n- **Bedingung:** Pflicht innerhalb von details[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n### BranchSummary\n\n**`branchId` — Pflicht**\n\nKennung der gewählten Filiale. Eine explizite ungültige Filiale wird nicht durch eine andere ersetzt.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus der Antwort von GET /sales-context.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;30000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Jeder ausgegebene Eintrag enthält branchId; fehlt das Feld, ist der Auswahleintrag unvollständig.\n\n**`displayName` — Pflicht**\n\nAnzeigename für die bewusste Auswahl. Für spätere Requests die zugehörige Kennung verwenden.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Aus der Antwort von GET /sales-context.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Ada Beispiel&quot;</code></span>\n- **Bei Auslassen:** Jeder ausgegebene Eintrag enthält displayName; fehlt das Feld, ist der Auswahleintrag unvollständig.\n\n\n\n### CategoriesResponse\n\n**`items` — Pflicht**\n\nDie Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.\n\n- **Format/Werte:** Liste; Elemente: CategorySummary\n- **Herkunft:** Den Wert von items aus GET /categories lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;categoryId&quot;:&quot;40000000-0000-4000-8000-000000000001&quot;,&quot;name&quot;:&quot;Synthetische Beispielkategorie&quot;}]</code></span>\n- **Bei Auslassen:** items gehört zu GET /categories. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen. Eine vorhandene leere Liste bedeutet, dass dieser Aufruf keine Einträge liefert.\n\n\n\n#### items[] · CategorySummary\n\n**`items[].categoryId` — Pflicht**\n\nÖffentliche Kennung der Produktkategorie.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von categoryId aus einem Eintrag in items von GET /categories lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;40000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** categoryId gehört zu einem Eintrag in items von GET /categories. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].name` — Optional laut Schema**\n\nAnzeigename der Kategorie.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von name aus einem Eintrag in items von GET /categories lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Bezeichnung&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n\n**`items[].description` — Optional laut Schema**\n\nAnzeigebeschreibung der Kategorie.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von description aus einem Eintrag in items von GET /categories lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Erläuterung&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n\n\n\n### CategoryProductsResponse\n\n**`items` — Pflicht**\n\nDie Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.\n\n- **Format/Werte:** Liste; Elemente: ProductSummary\n- **Herkunft:** Den Wert von items aus GET /categories/{categoryId}/products lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;categoryId&quot;:&quot;40000000-0000-4000-8000-000000000001&quot;,&quot;name&quot;:&quot;Synthetisches Beispielprodukt&quot;,&quot;productId&quot;:&quot;51f866e9-2307-47c6-8de3-e6b1f24f8d31&quot;}]</code></span>\n- **Bei Auslassen:** items gehört zu GET /categories/{categoryId}/products. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen. Eine vorhandene leere Liste bedeutet, dass dieser Aufruf keine Einträge liefert.\n\n\n\n#### items[] · ProductSummary\n\n**`items[].productId` — Pflicht**\n\nÖffentliche Kennung des bewusst gewählten Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von productId aus einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;51f866e9-2307-47c6-8de3-e6b1f24f8d31&quot;</code></span>\n- **Bei Auslassen:** productId gehört zu einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].categoryId` — Optional laut Schema**\n\nÖffentliche Kennung der Produktkategorie.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von categoryId aus einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;40000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Keine Kategoriezuordnung in diesem Produkteintrag mitgeteilt; die Zuordnung nicht aus dem Produktnamen ableiten.\n\n**`items[].name` — Optional laut Schema**\n\nAnzeigename des Produkts.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von name aus einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Bezeichnung&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n\n**`items[].description` — Optional laut Schema**\n\nAnzeigebeschreibung des Produkts.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von description aus einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Erläuterung&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n\n\n\n### ContractActionOperation\n\n**`operationId` — Pflicht**\n\nKennung dieser dauerhaft gespeicherten Vertragsaktion.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3010&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`contractId` — Pflicht**\n\nKennung des betroffenen eigenen Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`customerId` — Pflicht**\n\nGespeicherte Kundenbeziehung dieses Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;b17bd08d-41ca-4c01-a674-96004c10d100&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`type` — Pflicht**\n\nArt dieser Vertragsaktion.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"WITHDRAW_CONTRACT\",\"TERMINATE_CONTRACT\",\"REACTIVATE_CONTRACT\"]\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;WITHDRAW_CONTRACT&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`status` — Pflicht**\n\nBearbeitungsstand dieser Aktion. COMPLETED bestätigt deren Fachwirkung, nicht einen neuen Vertragsabschluss. OUTCOME_UNKNOWN wird ausschließlich abgeglichen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PROCESSING\",\"OUTCOME_UNKNOWN\",\"COMPLETED\",\"REJECTED\"]\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;COMPLETED&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`requestedAt` — Pflicht**\n\nDauerhaft gespeicherter Annahmezeitpunkt.\n\n- **Format/Werte:** Zeichenfolge; Format: date-time\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-10-27T12:00:00Z&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`previousContractStatus` — Optional laut Schema**\n\nVor der Aktion tatsächlich bestätigter Vertragszustand.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SIGNED&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`contractStatus` — Optional laut Schema**\n\nNach der Aktion bestätigter Vertragszustand. Bei unbestätigtem Ausgang wird kein Zielzustand behauptet.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"CONTRADICTED\",\"RESIGNED\",\"SIGNED\"]\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;CONTRADICTED&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`endDate` — Optional laut Schema**\n\nTatsächlich in Alt gespeichertes Vertragsende nach ordentlicher Kündigung; keine eigene V2-Fristberechnung.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2027-11-01&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`localAppliedAt` — Optional laut Schema**\n\nZeitpunkt des vorhandenen Alt-Änderungsbelegs, dessen Speicherung bestätigt wurde. Kein Providerzeitpunkt.\n\n- **Format/Werte:** Zeichenfolge; Format: date-time\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-10-27T12:00:01Z&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`affectedContractIds` — Optional laut Schema**\n\nKennungen der tatsächlich betroffenen eigenen Haupt- und abhängigen Verträge. Bei unbestätigtem Ergebnis werden keine betroffenen Objekte behauptet.\n\n- **Format/Werte:** Liste; Elemente: ResourceId\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>[&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;]</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`processingIssue` — Optional laut Schema**\n\nAktueller Hinderungs- oder Klärungsgrund.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Gespeicherter Vorgangsstand.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;code&quot;:&quot;CONTRACT_ACTION_OUTCOME_UNKNOWN&quot;,&quot;message&quot;:&quot;Die Ausführung wird abgeglichen.&quot;}</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Hinderungsgrund ausgewiesen; status bleibt maßgeblich.\n\n\n\n#### processingIssue · ProcessingIssue\n\n**`processingIssue.code` — Pflicht**\n\nMaschinenlesbare Fehler- oder Hinderungskennung für die gezielte Behandlung des gemeldeten Falls.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von processingIssue.code aus dem aktuell berechtigt gelesenen Vorgang auswerten.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;INVALID_REQUEST&quot;</code></span>\n- **Bei Auslassen:** code gehört zu jedem ausgegebenen processingIssue-Objekt. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von processingIssue, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`processingIssue.message` — Pflicht**\n\nLesbare Erläuterung des gemeldeten Fehlers oder Hinderungsgrunds.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von processingIssue.message aus dem aktuell berechtigt gelesenen Vorgang auswerten.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Die Eingabe konnte nicht verarbeitet werden.&quot;</code></span>\n- **Bei Auslassen:** message gehört zu jedem ausgegebenen processingIssue-Objekt. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von processingIssue, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`processingIssue.details` — Optional laut Schema**\n\nDauerhaft gespeicherte sichere Feldhinweise zur bestätigten Vorbereitungsablehnung. Bei älteren Vorgängen kann nur eine allgemeine Ablehnung vorhanden sein; die ursprüngliche Ursache wird nicht nachträglich erraten.\n\n- **Format/Werte:** Liste; null; Elemente: ErrorDetail\n- **Herkunft:** Aus dem gespeicherten processingIssue des eigenen Vorgangs.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;code&quot;:&quot;WITHDRAWAL_SELECTION_REQUIRED&quot;,&quot;field&quot;:&quot;withdrawalRightSelected&quot;,&quot;message&quot;:&quot;Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.&quot;}]</code></span>\n- **Bei Auslassen:** Keine zusätzlichen Feldhinweise mitgeteilt; daraus keine Fehlerfreiheit der übrigen Angaben ableiten.\n\n\n\n#### processingIssue.details[] · ErrorDetail\n\n**`processingIssue.details[].field` — Pflicht**\n\nÖffentlicher JSON-Feldpfad der betroffenen Angabe, sofern eine einzelne Angabe sicher benannt werden kann.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 100\n- **Herkunft:** Aus details der Fehlerantwort oder des gespeicherten processingIssue.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;withdrawalRightSelected&quot;</code></span>\n- **Bei Auslassen:** Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.\n- **Bedingung:** Pflicht innerhalb von processingIssue.details[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`processingIssue.details[].code` — Pflicht**\n\nMaschinenlesbare Fehlerkennung zu dieser Feldangabe.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 100\n- **Herkunft:** Aus derselben Feldangabe; gemeinsam mit field und message auswerten.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;WITHDRAWAL_SELECTION_REQUIRED&quot;</code></span>\n- **Bei Auslassen:** Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.\n- **Bedingung:** Pflicht innerhalb von processingIssue.details[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`processingIssue.details[].message` — Pflicht**\n\nSichere Erläuterung, welche Angabe zu prüfen oder nachzureichen ist. Sie enthält keine eingegebenen Personen- oder Bankwerte.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 500\n- **Herkunft:** Aus der betreffenden Feldangabe.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.&quot;</code></span>\n- **Bei Auslassen:** Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.\n- **Bedingung:** Pflicht innerhalb von processingIssue.details[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n### ContractOperationUpdatedEvent\n\n**`eventId` — Pflicht**\n\nKennung dieser Benachrichtigung. Mehrfachzustellungen desselben Ereignisses anhand dieser Kennung erkennen.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;90000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.operation.updated-Ereignis enthält eventId. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`type` — Pflicht**\n\nEreignistyp dieser Benachrichtigung: contract.operation.updated.\n\n- **Format/Werte:** Zeichenfolge; Fester Wert: \"contract.operation.updated\"\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;contract.operation.updated&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.operation.updated-Ereignis enthält type. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`occurredAt` — Pflicht**\n\nMitgeteilter Zeitpunkt des Ereignisses. Er ist weder der Empfangszeitpunkt noch allein ein Abschlussnachweis.\n\n- **Format/Werte:** Zeichenfolge; Format: date-time\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-10-24T10:00:00Z&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.operation.updated-Ereignis enthält occurredAt. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`contractId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.operation.updated-Ereignis enthält contractId. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`operationId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertragsvorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.operation.updated-Ereignis enthält operationId. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`externalReference` — Pflicht**\n\nIhre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;synthetic-guide-new-001&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.operation.updated-Ereignis enthält externalReference. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`status` — Pflicht**\n\nDer aktuell gemeldete Zustand dieses Objekts.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PREPARED\",\"PENDING_SIGNATURE\",\"REQUIRES_REVIEW\",\"SCHEDULED\",\"PROCESSING\",\"OUTCOME_UNKNOWN\",\"COMPLETED\",\"REJECTED\",\"DISCARD_PENDING\",\"DISCARDED\"]\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;COMPLETED&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.operation.updated-Ereignis enthält status. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`documents` — Optional laut Schema**\n\nDie in dieser Antwort ausgewiesenen konkreten Dokumentfassungen. Verfügbarkeit und gegebenenfalls Prüfsumme vor einem Download beachten.\n\n- **Format/Werte:** Liste; Elemente: DocumentMetadata\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;availability&quot;:&quot;AVAILABLE&quot;,&quot;contentRevisionId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;,&quot;contractId&quot;:&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;,&quot;documentId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3004&quot;,&quot;operationId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;,&quot;phase&quot;:&quot;SIGNED&quot;,&quot;purpose&quot;:&quot;CONTRACT&quot;,&quot;sha256&quot;:&quot;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;,&quot;signatureAttemptId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;}]</code></span>\n- **Bei Auslassen:** Das Ereignis teilt diesen Wert nicht mit; bei Bedarf den aktuellen berechtigten Vorgang oder Vertrag lesen.\n\n\n\n#### documents[] · DocumentMetadata\n\n**`documents[].documentId` — Pflicht**\n\nKennung genau der referenzierten Dateifassung. Geänderte PDF-Bytes erhalten eine andere Kennung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von documents[].documentId aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3004&quot;</code></span>\n- **Bei Auslassen:** documentId gehört zu jedem ausgegebenen Dokumenteintrag. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von documents[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`documents[].contractId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von documents[].contractId aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** contractId gehört zu jedem ausgegebenen Dokumenteintrag. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von documents[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`documents[].operationId` — Bedingt laut Schema**\n\nÖffentliche Kennung des zugehörigen Vertragsvorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn signatureAttemptId vorhanden; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].contentRevisionId` — Bedingt laut Schema**\n\nKennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn signatureAttemptId vorhanden; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].signatureAttemptId` — Bedingt laut Schema**\n\nKennung des zugehörigen Unterzeichnungsvorgangs. Wiederzustellung und erneutes Lesen bedeuten keine neue Unterzeichnung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn phase vorhanden und phase in [\"SIGNING_INPUT\",\"SIGNED\"]; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].purpose` — Optional laut Schema**\n\nFachlicher Zweck des Dokuments, etwa Vertragsdokument oder Änderungsdokument. Der Zweck allein bestätigt keine Unterschrift.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"CONTRACT\",\"AMENDMENT\"]\n- **Herkunft:** Den Wert von documents[].purpose aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;CONTRACT&quot;</code></span>\n- **Bei Auslassen:** Kein Dokumentzweck mitgeteilt; Dateiname und bloße Dateiexistenz belegen weder den Zweck noch eine Unterschrift.\n- **Bedingung:** Fachbedingung: Der Zweck allein bestätigt keine Gesamtunterzeichnung.\n\n**`documents[].phase` — Optional laut Schema**\n\nEinordnung als Vorschau, Unterzeichnungsvorlage oder signierte Endfassung, sofern diese Herkunft tatsächlich ausgewiesen wird.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PREVIEW\",\"SIGNING_INPUT\",\"SIGNED\"]\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SIGNED&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].availability` — Optional laut Schema**\n\nMitgeteilter Zustand der Dokumentverfügbarkeit. Eine technische Abrufstörung darf nicht als nachgewiesenes Fehlen einer Datei behandelt werden.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PENDING\",\"AVAILABLE\",\"MISSING\"]\n- **Herkunft:** Den Wert von documents[].availability aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;AVAILABLE&quot;</code></span>\n- **Bei Auslassen:** Keine Verfügbarkeit aus anderen Statuswerten ableiten.\n- **Bedingung:** Fachbedingung: Beim aktuellen Vertragsabruf werden tatsächlich verfügbare Dateien referenziert. Eine fehlende Datei oder technische Störung kann stattdessen die dokumentierte Fehlerantwort auslösen.\n\n**`documents[].sha256` — Bedingt laut Schema**\n\nPrüfsumme exakt der referenzierten Dateibytes. Mit SHA256 des tatsächlich heruntergeladenen PDFs vergleichen.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^[0-9a-f]{64}$\"; Mindestlänge: 64; Höchstlänge: 64\n- **Herkunft:** Den Wert von documents[].sha256 aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;</code></span>\n- **Bei Auslassen:** Ohne ausgewiesene Prüfsumme keinen Hash oder Dateibeleg erfinden.\n- **Bedingung:** Wenn contentRevisionId vorhanden und availability vorhanden und availability = \"AVAILABLE\"; Fachbedingung: Nur für tatsächlich verfügbare, genau dieser Fassung zugeordnete Bytes auswerten.\n\n**`documents[].coveredContractIds` — Optional laut Schema**\n\nVerträge, deren Bezug zu dieser Dokumentfassung ausdrücklich ausgewiesen wird. Eine gemeinsame Datei allein erteilt keine weiteren Vertragsrechte.\n\n- **Format/Werte:** Liste; keine doppelten Listenelemente; Elemente: ResourceId\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>[&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;]</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n\n\n### ContractOperationsResponse\n\n**`items` — Pflicht**\n\nDie Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.\n\n- **Format/Werte:** Liste; Höchstelemente: 1; Elemente: ContractOperation\n- **Herkunft:** Die von GET /contract-operations zur unveränderten externalReference zurückgegebene Vorgangsliste lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;contentRevisionId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;,&quot;contractId&quot;:&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;,&quot;documents&quot;:[{&quot;availability&quot;:&quot;AVAILABLE&quot;,&quot;contentRevisionId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;,&quot;contractId&quot;:&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;,&quot;documentId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3004&quot;,&quot;operationId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;,&quot;phase&quot;:&quot;SIGNED&quot;,&quot;purpose&quot;:&quot;CONTRACT&quot;,&quot;sha256&quot;:&quot;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;,&quot;signatureAttemptId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;}],&quot;externalReference&quot;:&quot;synthetic-guide-new-001&quot;,&quot;localAppliedAt&quot;:&quot;2026-10-15T10:05:00Z&quot;,&quot;operationId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;,&quot;salesContext&quot;:{&quot;branchId&quot;:&quot;30000000-0000-4000-8000-000000000001&quot;,&quot;sellerAccountId&quot;:&quot;20000000-0000-4000-8000-000000000001&quot;},&quot;signature&quot;:{&quot;contentRevisionId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;,&quot;signatureAttemptId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;,&quot;status&quot;:&quot;SIGNED&quot;},&quot;status&quot;:&quot;COMPLETED&quot;,&quot;type&quot;:&quot;NEW_CONTRACT&quot;}]</code></span>\n- **Bei Auslassen:** Die erfolgreiche Suche enthält items, gegebenenfalls als []. Ein fehlendes items-Feld ist keine leere Trefferliste.\n\n\n\n#### items[] · ContractOperation\n\n**`items[].operationId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertragsvorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von operationId lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;</code></span>\n- **Bei Auslassen:** operationId gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].contractId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von contractId lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** contractId gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].type` — Pflicht**\n\nArt dieses Vertragsvorgangs im angebotenen Neuvertragsumfang.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NEW_CONTRACT\"]\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von type lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;NEW_CONTRACT&quot;</code></span>\n- **Bei Auslassen:** type gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].externalReference` — Pflicht**\n\nIhre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Die bei Einreichung vom Partner gewählte Geschäftsreferenz, unverändert zurückgegeben.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;synthetic-guide-new-001&quot;</code></span>\n- **Bei Auslassen:** externalReference gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].status` — Pflicht**\n\nDer aktuelle Bearbeitungsstand des Vorgangs. COMPLETED bezeichnet den bestätigten Fachabschluss, nicht nur eine Unterschrift.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PREPARED\",\"PENDING_SIGNATURE\",\"REQUIRES_REVIEW\",\"SCHEDULED\",\"PROCESSING\",\"OUTCOME_UNKNOWN\",\"COMPLETED\",\"REJECTED\",\"DISCARD_PENDING\",\"DISCARDED\"]\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von status lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;COMPLETED&quot;</code></span>\n- **Bei Auslassen:** status gehört zu jeder erfolgreichen Vorgangsantwort. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].signature` — Optional laut Schema**\n\nDer gemeldete Unterzeichnungsstand der zugehörigen Vertragsfassung.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von signature lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;contentRevisionId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;,&quot;signatureAttemptId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;,&quot;status&quot;:&quot;SIGNED&quot;}</code></span>\n- **Bei Auslassen:** Kein Unterzeichnungsstand in dieser Antwort ausgewiesen; eine Browserrückkehr oder eine frühere Einladung bestätigt keine Gesamtunterzeichnung.\n\n**`items[].processingIssue` — Optional laut Schema**\n\nEin aktuell ausgewiesener Hinderungs- oder Klärungsgrund der weiteren Bearbeitung.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von processingIssue lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;code&quot;:&quot;SIGNED_DOCUMENT_PENDING&quot;,&quot;message&quot;:&quot;Die Endfassung ist noch nicht verfügbar.&quot;}</code></span>\n- **Bei Auslassen:** Kein Hinderungsgrund in dieser Antwort ausgewiesen; daraus allein keinen erfolgreichen Fachabschluss ableiten, sondern status beachten.\n\n**`items[].salesContext` — Optional laut Schema**\n\nDer Verkäufer und die gegebenenfalls zugeordnete Filiale dieses Verkaufs.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von salesContext lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;branchId&quot;:&quot;30000000-0000-4000-8000-000000000001&quot;,&quot;sellerAccountId&quot;:&quot;20000000-0000-4000-8000-000000000001&quot;}</code></span>\n- **Bei Auslassen:** Die Antwort weist keinen gebundenen Verkaufskontext aus; eine heutige Auswahl aus GET /sales-context ergänzt ihn nicht.\n\n**`items[].documents` — Optional laut Schema**\n\nDie in dieser Antwort ausgewiesenen konkreten Dokumentfassungen. Verfügbarkeit und gegebenenfalls Prüfsumme vor einem Download beachten.\n\n- **Format/Werte:** Liste; Elemente: DocumentMetadata\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von documents lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;availability&quot;:&quot;AVAILABLE&quot;,&quot;contentRevisionId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;,&quot;contractId&quot;:&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;,&quot;documentId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3004&quot;,&quot;operationId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;,&quot;phase&quot;:&quot;SIGNED&quot;,&quot;purpose&quot;:&quot;CONTRACT&quot;,&quot;sha256&quot;:&quot;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;,&quot;signatureAttemptId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;}]</code></span>\n- **Bei Auslassen:** Keine Dokumentliste in dieser Antwort ausgewiesen; eine fehlende Eigenschaft ist keine ausdrücklich leere Liste und bestätigt keine Dateiverfügbarkeit.\n\n**`items[].requestedAt` — Optional laut Schema**\n\nDer für die Einreichung ausgewiesene Zeitpunkt.\n\n- **Format/Werte:** Zeichenfolge; Format: date-time\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von requestedAt lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-10-24T10:00:00Z&quot;</code></span>\n- **Bei Auslassen:** Kein Einreichungszeitpunkt mitgeteilt; die Zeit dieses Leseaufrufs ersetzt den ursprünglichen Zeitpunkt nicht.\n\n**`items[].localAppliedAt` — Optional laut Schema**\n\nZeitpunkt des bestätigten Fachabschlusses. Eine bloße Annahme oder Unterschrift genügt dafür nicht.\n\n- **Format/Werte:** Zeichenfolge; Format: date-time\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von localAppliedAt lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-10-24T10:00:00Z&quot;</code></span>\n- **Bei Auslassen:** Ein bestätigter Fachabschlusszeitpunkt wird nicht ausgewiesen; Annahme- oder Unterzeichnungszeit nicht ersatzweise verwenden.\n\n**`items[].billingEffectiveDate` — Optional laut Schema**\n\nDas für die Abrechnung ausgewiesene Wirksamkeitsdatum.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von billingEffectiveDate lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Kein Abrechnungsdatum in dieser Antwort ausgewiesen; Wunschstart und Vertragsbeginn ersetzen es nicht.\n\n**`items[].providerScheduledDate` — Optional laut Schema**\n\nEin ausdrücklich mitgeteilter geplanter Leistungstermin. Ein Plan ist noch keine bestätigte Ausführung. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.\n- **Bedingung:** Fachbedingung: Nur auswerten, wenn die Antwort diese zusätzliche Leistungsangabe ausdrücklich enthält. Daraus entsteht kein weiterer unterstützter Abschlussweg.\n\n**`items[].providerConfirmedAt` — Optional laut Schema**\n\nEin ausdrücklich mitgeteilter Bestätigungszeitpunkt einer angebundenen Leistung. Er ersetzt keinen Fachabschluss des Vorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: date-time\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von providerConfirmedAt lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-10-24T10:00:00Z&quot;</code></span>\n- **Bei Auslassen:** Kein Bestätigungszeitpunkt einer angebundenen Leistung mitgeteilt; ein Plantermin oder der Vorgangsstatus ersetzt diesen Nachweis nicht.\n- **Bedingung:** Fachbedingung: Nur auswerten, wenn die Antwort diese zusätzliche Leistungsangabe ausdrücklich enthält. Daraus entsteht kein weiterer unterstützter Abschlussweg.\n\n**`items[].conditions` — Optional laut Schema**\n\nDie ausgewiesenen Konditionen einschließlich ausgewählter Optionen und berechneter Beträge.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von conditions lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;durationId&quot;:&quot;17ef5d55-617c-429a-b523-637625346856&quot;,&quot;paymentId&quot;:&quot;95012da7-bd0c-4b4a-b181-a43bff8578d0&quot;,&quot;priceType&quot;:&quot;AGB&quot;,&quot;regularPayment&quot;:{&quot;amount&quot;:&quot;10.50&quot;,&quot;basis&quot;:&quot;PAYMENT_INTERVAL&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;},&quot;setupCharge&quot;:{&quot;amount&quot;:&quot;19.95&quot;,&quot;basis&quot;:&quot;ONE_OFF&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}}</code></span>\n- **Bei Auslassen:** Keine Vorgangskonditionen in dieser Antwort ausgewiesen; keine Preise aus heutigen Produktangaben ergänzen.\n\n**`items[].firstPaymentDate` — Optional laut Schema**\n\nDer für den Vertrag ausgewiesene erste Zahlungstermin. Nicht allein aus Vertragsbeginn oder Regelrate ableiten. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.\n\n**`items[].renewalStartDate` — Optional laut Schema**\n\nBeginn einer weiteren Vertragsperiode, soweit eine Antwort diesen Termin ausweist. Im aktuellen klassischen Neuvertragsablauf und Vertragsabruf wird das Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Ablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Ablaufs; keinen Termin selbst ergänzen.\n\n**`items[].endMinimumPeriod` — Optional laut Schema**\n\nDas ausgewiesene Ende der Mindestvertragslaufzeit. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.\n\n**`items[].endNoticePeriod` — Optional laut Schema**\n\nDer für den Vertrag ausgewiesene Termin der Kündigungsfrist. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.\n\n**`items[].withdrawalUntilDate` — Optional laut Schema**\n\nDas ausgewiesene Ende des Widerrufszeitraums. Keine eigene Frist aus dieser Angabe neu berechnen. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.\n\n**`items[].serialNumbers` — Optional laut Schema**\n\nDie zum Produkt vorgegebene beziehungsweise im Vertrag ausgewiesene Liste von Geräteeinträgen.\n\n- **Format/Werte:** Liste; Elemente: SerialNumberInput\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von serialNumbers lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;name&quot;:&quot;Gerät 1&quot;,&quot;serialNumber1&quot;:&quot;SYNTHETIC-SN-001&quot;}]</code></span>\n- **Bei Auslassen:** Keine Geräteeinträge in dieser Antwort ausgewiesen; die ursprüngliche Eingabe ist kein Beleg des gespeicherten Gerätestands.\n\n**`items[].requestedStartDate` — Optional laut Schema**\n\nGewünschter Vertragsbeginn. Er wird auf den für Produkt und Zugang zulässigen Zeitraum geprüft.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von requestedStartDate lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Kein Wunschstart in dieser Antwort ausgewiesen; daraus keinen tatsächlichen Vertragsbeginn ableiten.\n\n**`items[].contentRevisionId` — Bedingt laut Schema**\n\nKennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den in der Einreichungs-, Entscheidungs- oder Vorgangsantwort ausgegebenen Wert von contentRevisionId lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;</code></span>\n- **Bei Auslassen:** Keine Fassungskennung in dieser Antwort ausgewiesen; contractId und operationId ersetzen diese Zuordnung nicht.\n- **Bedingung:** Wenn signature vorhanden und signature.contentRevisionId vorhanden\n\n**`items[].providerOutcome` — Optional laut Schema**\n\nEin ausdrücklich ausgewiesener Ausgang einer angebundenen Leistung. Eine unklare Rückmeldung ist kein bestätigter Erfolg oder sicherer Nichterfolg. Im aktuellen klassischen Neuvertragsvorgang wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Im aktuellen klassischen Vorgangsablauf wird zu diesem Schemafeld kein Antwortwert geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;UNKNOWN&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Vorgangsablaufs; keinen Wert selbst ergänzen.\n- **Bedingung:** Fachbedingung: Nur auswerten, wenn die Antwort diese zusätzliche Leistungsangabe ausdrücklich enthält. Daraus entsteht kein weiterer unterstützter Abschlussweg.\n\n\n\n#### items[].signature · Signature\n\n**`items[].signature.status` — Pflicht**\n\nGemeldeter Stand der Gesamtunterzeichnung der zugehörigen Vertragsfassung. Eine einzelne Unterzeichnernachricht ist kein Gesamtabschluss.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von signature.status aus der berechtigten Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PENDING&quot;</code></span>\n- **Bei Auslassen:** status gehört zu jedem ausgegebenen signature-Objekt. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[].signature, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].signature.signingUrl` — Optional laut Schema**\n\nEin tatsächlich bereitgestellter Unterzeichnungslink. Die Einladung kann auch ohne Link in der API-Antwort erfolgen.\n\n- **Format/Werte:** Zeichenfolge; Format: uri\n- **Herkunft:** Den Wert von signature.signingUrl aus der berechtigten Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;https://sign.example/synthetic-only&quot;</code></span>\n- **Bei Auslassen:** Die Unterzeichnung kann über die versandte Einladung erfolgen; ein API-Link ist nicht garantiert.\n- **Bedingung:** Fachbedingung: Nur einen tatsächlich bereitgestellten Link verwenden, niemals selbst aus Kennungen konstruieren.\n\n**`items[].signature.contentRevisionId` — Bedingt laut Schema**\n\nKennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von signature.contentRevisionId aus der berechtigten Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;</code></span>\n- **Bei Auslassen:** Keine Fassungskennung der Unterzeichnung mitgeteilt; eine Vertrags- oder Vorgangskennung ersetzt sie nicht.\n- **Bedingung:** Wenn signatureAttemptId vorhanden; Wenn confirmedAt vorhanden\n\n**`items[].signature.signatureAttemptId` — Bedingt laut Schema**\n\nKennung des zugehörigen Unterzeichnungsvorgangs. Wiederzustellung und erneutes Lesen bedeuten keine neue Unterzeichnung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von signature.signatureAttemptId aus der berechtigten Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;</code></span>\n- **Bei Auslassen:** Keine Kennung des Unterzeichnungsvorgangs mitgeteilt; aus erneutem Lesen oder Wiederzustellung keine neue Unterzeichnung ableiten.\n- **Bedingung:** Wenn confirmedAt vorhanden\n\n**`items[].signature.confirmedAt` — Optional laut Schema**\n\nGenauer Zeitpunkt der bestätigten Gesamtunterzeichnung, soweit ausdrücklich mitgeteilt. In der aktuellen klassischen Vorgangsantwort wird dieses Feld nicht ausgegeben; nicht darauf warten.\n\n- **Format/Werte:** Zeichenfolge; Format: date-time\n- **Herkunft:** Im aktuellen klassischen Ablauf wird kein genauer Bestätigungszeitpunkt in diesem Antwortfeld geliefert.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-10-24T10:00:00Z&quot;</code></span>\n- **Bei Auslassen:** Erwartetes Verhalten des aktuellen klassischen Ablaufs. Den Zeitpunkt nicht aus Vertragsdatum, Empfangszeit oder Browserrückkehr ergänzen.\n- **Bedingung:** Fachbedingung: Nur einen ausdrücklich ausgewiesenen Bestätigungszeitpunkt verwenden; beim noch nicht begonnenen oder ausstehenden Unterzeichnen keinen Zeitwert ergänzen.\n\n\n\n#### items[].processingIssue · ProcessingIssue\n\n**`items[].processingIssue.code` — Pflicht**\n\nMaschinenlesbare Fehler- oder Hinderungskennung für die gezielte Behandlung des gemeldeten Falls.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von processingIssue.code aus dem aktuell berechtigt gelesenen Vorgang auswerten.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;INVALID_REQUEST&quot;</code></span>\n- **Bei Auslassen:** code gehört zu jedem ausgegebenen processingIssue-Objekt. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[].processingIssue, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].processingIssue.message` — Pflicht**\n\nLesbare Erläuterung des gemeldeten Fehlers oder Hinderungsgrunds.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von processingIssue.message aus dem aktuell berechtigt gelesenen Vorgang auswerten.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Die Eingabe konnte nicht verarbeitet werden.&quot;</code></span>\n- **Bei Auslassen:** message gehört zu jedem ausgegebenen processingIssue-Objekt. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[].processingIssue, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].processingIssue.details` — Optional laut Schema**\n\nDauerhaft gespeicherte sichere Feldhinweise zur bestätigten Vorbereitungsablehnung. Bei älteren Vorgängen kann nur eine allgemeine Ablehnung vorhanden sein; die ursprüngliche Ursache wird nicht nachträglich erraten.\n\n- **Format/Werte:** Liste; null; Elemente: ErrorDetail\n- **Herkunft:** Aus dem gespeicherten processingIssue des eigenen Vorgangs.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;code&quot;:&quot;WITHDRAWAL_SELECTION_REQUIRED&quot;,&quot;field&quot;:&quot;withdrawalRightSelected&quot;,&quot;message&quot;:&quot;Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.&quot;}]</code></span>\n- **Bei Auslassen:** Keine zusätzlichen Feldhinweise mitgeteilt; daraus keine Fehlerfreiheit der übrigen Angaben ableiten.\n\n\n\n#### items[].processingIssue.details[] · ErrorDetail\n\n**`items[].processingIssue.details[].field` — Pflicht**\n\nÖffentlicher JSON-Feldpfad der betroffenen Angabe, sofern eine einzelne Angabe sicher benannt werden kann.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 100\n- **Herkunft:** Aus details der Fehlerantwort oder des gespeicherten processingIssue.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;withdrawalRightSelected&quot;</code></span>\n- **Bei Auslassen:** Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].processingIssue.details[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].processingIssue.details[].code` — Pflicht**\n\nMaschinenlesbare Fehlerkennung zu dieser Feldangabe.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 100\n- **Herkunft:** Aus derselben Feldangabe; gemeinsam mit field und message auswerten.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;WITHDRAWAL_SELECTION_REQUIRED&quot;</code></span>\n- **Bei Auslassen:** Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].processingIssue.details[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].processingIssue.details[].message` — Pflicht**\n\nSichere Erläuterung, welche Angabe zu prüfen oder nachzureichen ist. Sie enthält keine eingegebenen Personen- oder Bankwerte.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 500\n- **Herkunft:** Aus der betreffenden Feldangabe.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Bitte geben Sie ausdrücklich an, ob das Widerrufsrecht für diesen Vertrag gewählt wird.&quot;</code></span>\n- **Bei Auslassen:** Wenn ein Feldhinweis ausgegeben wird, muss diese Angabe darin vorhanden sein; eine unvollständige Fehlerantwort nicht durch eigene Fachwerte ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].processingIssue.details[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### items[].salesContext · SalesContext\n\n**`items[].salesContext.sellerAccountId` — Pflicht**\n\nKennung des bewusst ausgewählten Verkäufers dieses Verkaufs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die gewünschte Kennung aus GET /sales-context auswählen; Antworten geben die verwendete Verkaufszuordnung wieder.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;20000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Bei der Vertragseinreichung muss der Verkäufer ausdrücklich angegeben werden; fehlt sellerAccountId, wird die Einreichung als ungültig abgewiesen. Der API-Zugang und die Listenposition ersetzen die Auswahl nicht.\n- **Bedingung:** Pflicht innerhalb von items[].salesContext, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].salesContext.branchId` — Optional laut Schema**\n\nKennung der gewählten Filiale. Eine explizite ungültige Filiale wird nicht durch eine andere ersetzt.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die gewünschte Kennung aus GET /sales-context auswählen; Antworten geben die verwendete Verkaufszuordnung wieder.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;30000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Keine aktive Filiale: ohne Zuordnung, soweit zulässig. Genau eine aktive zugehörige Filiale: diese wird geprüft und zugeordnet. Mehrere: ausdrücklich auswählen. null ist kein Auslassen.\n- **Bedingung:** Fachbedingung: Die explizite Filiale muss aktiv und dem eigenen Partner zugeordnet sein. Die wirksame Auswahl bleibt bei identischer Wiederholung erhalten.\n\n\n\n#### items[].documents[] · DocumentMetadata\n\n**`items[].documents[].documentId` — Pflicht**\n\nKennung genau der referenzierten Dateifassung. Geänderte PDF-Bytes erhalten eine andere Kennung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von documents[].documentId aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3004&quot;</code></span>\n- **Bei Auslassen:** documentId gehört zu jedem ausgegebenen Dokumenteintrag. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[].documents[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].documents[].contractId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von documents[].contractId aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** contractId gehört zu jedem ausgegebenen Dokumenteintrag. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[].documents[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].documents[].operationId` — Bedingt laut Schema**\n\nÖffentliche Kennung des zugehörigen Vertragsvorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn signatureAttemptId vorhanden; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`items[].documents[].contentRevisionId` — Bedingt laut Schema**\n\nKennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn signatureAttemptId vorhanden; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`items[].documents[].signatureAttemptId` — Bedingt laut Schema**\n\nKennung des zugehörigen Unterzeichnungsvorgangs. Wiederzustellung und erneutes Lesen bedeuten keine neue Unterzeichnung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn phase vorhanden und phase in [\"SIGNING_INPUT\",\"SIGNED\"]; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`items[].documents[].purpose` — Optional laut Schema**\n\nFachlicher Zweck des Dokuments, etwa Vertragsdokument oder Änderungsdokument. Der Zweck allein bestätigt keine Unterschrift.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"CONTRACT\",\"AMENDMENT\"]\n- **Herkunft:** Den Wert von documents[].purpose aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;CONTRACT&quot;</code></span>\n- **Bei Auslassen:** Kein Dokumentzweck mitgeteilt; Dateiname und bloße Dateiexistenz belegen weder den Zweck noch eine Unterschrift.\n- **Bedingung:** Fachbedingung: Der Zweck allein bestätigt keine Gesamtunterzeichnung.\n\n**`items[].documents[].phase` — Optional laut Schema**\n\nEinordnung als Vorschau, Unterzeichnungsvorlage oder signierte Endfassung, sofern diese Herkunft tatsächlich ausgewiesen wird.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PREVIEW\",\"SIGNING_INPUT\",\"SIGNED\"]\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SIGNED&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`items[].documents[].availability` — Optional laut Schema**\n\nMitgeteilter Zustand der Dokumentverfügbarkeit. Eine technische Abrufstörung darf nicht als nachgewiesenes Fehlen einer Datei behandelt werden.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PENDING\",\"AVAILABLE\",\"MISSING\"]\n- **Herkunft:** Den Wert von documents[].availability aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;AVAILABLE&quot;</code></span>\n- **Bei Auslassen:** Keine Verfügbarkeit aus anderen Statuswerten ableiten.\n- **Bedingung:** Fachbedingung: Beim aktuellen Vertragsabruf werden tatsächlich verfügbare Dateien referenziert. Eine fehlende Datei oder technische Störung kann stattdessen die dokumentierte Fehlerantwort auslösen.\n\n**`items[].documents[].sha256` — Bedingt laut Schema**\n\nPrüfsumme exakt der referenzierten Dateibytes. Mit SHA256 des tatsächlich heruntergeladenen PDFs vergleichen.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^[0-9a-f]{64}$\"; Mindestlänge: 64; Höchstlänge: 64\n- **Herkunft:** Den Wert von documents[].sha256 aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;</code></span>\n- **Bei Auslassen:** Ohne ausgewiesene Prüfsumme keinen Hash oder Dateibeleg erfinden.\n- **Bedingung:** Wenn contentRevisionId vorhanden und availability vorhanden und availability = \"AVAILABLE\"; Fachbedingung: Nur für tatsächlich verfügbare, genau dieser Fassung zugeordnete Bytes auswerten.\n\n**`items[].documents[].coveredContractIds` — Optional laut Schema**\n\nVerträge, deren Bezug zu dieser Dokumentfassung ausdrücklich ausgewiesen wird. Eine gemeinsame Datei allein erteilt keine weiteren Vertragsrechte.\n\n- **Format/Werte:** Liste; keine doppelten Listenelemente; Elemente: ResourceId\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>[&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;]</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n\n\n#### items[].conditions · ContractConditions\n\n**`items[].conditions.durationId` — Optional laut Schema**\n\nKennung der bewusst ausgewählten Laufzeitoption des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Laufzeitkennung lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;17ef5d55-617c-429a-b523-637625346856&quot;</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Laufzeitkennung aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`items[].conditions.paymentId` — Optional laut Schema**\n\nKennung der bewusst ausgewählten Zahlweise des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Zahlweisenkennung lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;95012da7-bd0c-4b4a-b181-a43bff8578d0&quot;</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Zahlweisenkennung aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`items[].conditions.priceType` — Optional laut Schema**\n\nDie für das Produkt angebotene und bewusst ausgewählte Preisart.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"AGB\",\"PROMO\",\"PROMO_TEMP\"]\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Preisart lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;AGB&quot;</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Preisart aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`items[].conditions.promotionId` — Optional laut Schema**\n\nKennung der ausgewählten befristeten Promotion.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Promotionskennung lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;70000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Promotionskennung aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`items[].conditions.debitDay` — Optional laut Schema**\n\nGewählter beziehungsweise ausgewiesener Tag im Monat für den Lastschrifteinzug. Dies ist kein vollständiges Datum.\n\n- **Format/Werte:** Ganzzahl\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Angabe zum Einzugstag lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>5</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Angabe zum Einzugstag aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n**`items[].conditions.regularPayment` — Optional laut Schema**\n\nAusgewiesene Regelrate mit Währung, Steuerbasis und Zahlungsbezug. Sie ist nicht automatisch der Betrag des ersten Einzugs.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesenen Betrag zusammen mit Währung, Steuerbasis und Zahlungsbezug lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;10.50&quot;,&quot;basis&quot;:&quot;PAYMENT_INTERVAL&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** Kein Betrag für diese Position mitgeteilt; dies bedeutet weder 0 noch Gebührenfreiheit. Keine heutigen Produktpreise ergänzen.\n- **Bedingung:** Fachbedingung: Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.\n\n**`items[].conditions.promotionalPayment` — Optional laut Schema**\n\nAusgewiesene Rate während der zugeordneten Promotion. Der aktuelle Vertragsabruf gibt dieses Feld nicht aus; Produktkonditions- oder Vorgangsantworten sind gesondert zu betrachten.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in conditions der Vorgangsantwort ausgewiesenen Promotionsbetrag zusammen mit Währung, Steuerbasis und Zahlungsbezug lesen; der aktuelle Vertragsabruf gibt diesen Wert nicht aus.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;9.50&quot;,&quot;basis&quot;:&quot;PAYMENT_INTERVAL&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** Beim aktuellen GET /contracts/{contractId} wird dieses Feld nicht ausgegeben; keine Rate oder Dauer daraus berechnen.\n- **Bedingung:** Fachbedingung: Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.\n\n**`items[].conditions.promotionDurationMonths` — Optional laut Schema**\n\nAusgewiesene Dauer der zugeordneten Promotion in Monaten. Der aktuelle Vertragsabruf gibt dieses Feld nicht aus; Produktkonditions- oder Vorgangsantworten sind gesondert zu betrachten.\n\n- **Format/Werte:** Ganzzahl\n- **Herkunft:** Die in conditions der Vorgangsantwort ausgewiesene Promotionsdauer lesen; der aktuelle Vertragsabruf gibt diesen Wert nicht aus.\n- **Beispiel:** <span class=\"partner-field\"><code>3</code></span>\n- **Bei Auslassen:** Beim aktuellen GET /contracts/{contractId} wird dieses Feld nicht ausgegeben; keine Rate oder Dauer daraus berechnen.\n\n**`items[].conditions.setupCharge` — Optional laut Schema**\n\nAusgewiesenes einmaliges Einrichtungsentgelt mit Währung und Steuerbasis.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesenen Betrag zusammen mit Währung, Steuerbasis und Zahlungsbezug lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;19.95&quot;,&quot;basis&quot;:&quot;ONE_OFF&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** Kein Betrag für diese Position mitgeteilt; dies bedeutet weder 0 noch Gebührenfreiheit. Keine heutigen Produktpreise ergänzen.\n- **Bedingung:** Fachbedingung: Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.\n\n**`items[].conditions.withdrawalDays` — Optional laut Schema**\n\nDie aus der zulässigen Auswahl bestimmten Widerrufstage. Dies ist keine freie Tageswahl des Partners.\n\n- **Format/Werte:** Ganzzahl; Minimum: 0\n- **Herkunft:** Die in conditions dieser Vorgangs- oder Vertragsantwort ausgewiesene Anzahl der Widerrufstage lesen; dies ist die für den Vertrag oder Vorgang mitgeteilte Zuordnung.\n- **Beispiel:** <span class=\"partner-field\"><code>14</code></span>\n- **Bei Auslassen:** Die Antwort weist keine Anzahl der Widerrufstage aus; heutige Produktauswahl und eigene Berechnungen ersetzen den gespeicherten Wert nicht.\n\n\n\n#### items[].conditions.regularPayment · ConditionAmount\n\n**`items[].conditions.regularPayment.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].conditions.regularPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].conditions.regularPayment.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].conditions.regularPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].conditions.regularPayment.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].conditions.regularPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].conditions.regularPayment.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].conditions.regularPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### items[].conditions.promotionalPayment · ConditionAmount\n\n**`items[].conditions.promotionalPayment.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].conditions.promotionalPayment.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].conditions.promotionalPayment.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].conditions.promotionalPayment.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### items[].conditions.setupCharge · ConditionAmount\n\n**`items[].conditions.setupCharge.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].conditions.setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].conditions.setupCharge.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].conditions.setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].conditions.setupCharge.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].conditions.setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`items[].conditions.setupCharge.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von items[].conditions.setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### items[].serialNumbers[] · SerialNumberInput\n\n**`items[].serialNumbers[].name` — Optional laut Schema**\n\nBezeichnung dieses Geräteeintrags; sie bestimmt, ob die Regeln für einen benannten Eintrag greifen.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Gerät 1&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`items[].serialNumbers[].serialNumber1` — Optional laut Schema**\n\nErste Serienangabe des Geräteeintrags entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-SN-001&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`items[].serialNumbers[].serialNumber2` — Optional laut Schema**\n\nZweite Serienangabe des Geräteeintrags entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-SN-002&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`items[].serialNumbers[].additional1` — Optional laut Schema**\n\nErste zusätzliche Geräteangabe entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Zusatzangabe&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n**`items[].serialNumbers[].additional2` — Optional laut Schema**\n\nZweite zusätzliche Geräteangabe entsprechend der Produktkonfiguration.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Tatsächliche Geräteangaben passend zu den serialNumbers-Feldmetadaten des gewählten Produkts erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Zusatzangabe&quot;</code></span>\n- **Bei Auslassen:** Nach den Feldmetadaten behandeln; ein inaktives Feld auslassen und bei einem benannten Eintrag die verlangten aktiven Felder ausfüllen.\n- **Bedingung:** Fachbedingung: Nur als writable ausgewiesene Felder senden. Bei einem Feld vom Typ DATE gilt das vorhandene Format dd.MM.yyyy; keine eigene Formatumwandlung aus dem Feldnamen ableiten.\n\n\n\n### ContractReactivationRequest\n\n**`decidedByAccountId` — Pflicht**\n\nAccount-UUID des aktiven eigenen Entscheiders aus GET /sales-context. SmartPay prüft die vorhandene Alt-Aktionsberechtigung serverseitig; keine Kundenkennung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Account-UUID aus GET /sales-context.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;20000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Erforderlich; ohne berechtigten Entscheider wird die Aktion abgewiesen.\n\n**`includeAddons` — Optional laut Schema**\n\nZusatzverträge entsprechend der vorhandenen Alt-Auswahl ebenfalls bearbeiten. Ohne Angabe false; konfigurierte Bundle-Kinder folgen unabhängig davon den bestehenden Alt-Regeln.\n\n- **Format/Werte:** Boolean; Default laut Schema: false\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>false</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n\n\n### ContractTerminationRequest\n\n**`decidedByAccountId` — Pflicht**\n\nAccount-UUID des aktiven eigenen Entscheiders aus GET /sales-context. SmartPay prüft die vorhandene Alt-Aktionsberechtigung serverseitig; keine Kundenkennung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Account-UUID aus GET /sales-context.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;20000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Erforderlich; ohne berechtigten Entscheider wird die Aktion abgewiesen.\n\n**`requestedEndDate` — Optional laut Schema**\n\nOptionaler späterer Beendigungstermin, ausschließlich nach vorhandener Alt-Frist- und Vertragsperiodenprüfung. Ohne Angabe bestimmt Alt den frühestmöglichen zulässigen Termin.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2027-11-01&quot;</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n**`includeAddons` — Optional laut Schema**\n\nZusatzverträge entsprechend der vorhandenen Alt-Auswahl ebenfalls bearbeiten. Ohne Angabe false; konfigurierte Bundle-Kinder folgen unabhängig davon den bestehenden Alt-Regeln.\n\n- **Format/Werte:** Boolean; Default laut Schema: false\n- **Herkunft:** Aus der bewusst gewählten Anfrage beziehungsweise dem bestätigten Vertragsaktionsvorgang.\n- **Beispiel:** <span class=\"partner-field\"><code>false</code></span>\n- **Bei Auslassen:** Pflichtfelder müssen angegeben werden. Optionale Antwortwerte werden nur bei tatsächlichem Nachweis ausgegeben.\n\n\n\n### ContractUpdatedEvent\n\n**`eventId` — Pflicht**\n\nKennung dieser Benachrichtigung. Mehrfachzustellungen desselben Ereignisses anhand dieser Kennung erkennen.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;90000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.updated-Ereignis enthält eventId. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`type` — Pflicht**\n\nEreignistyp dieser Benachrichtigung: contract.updated.\n\n- **Format/Werte:** Zeichenfolge; Fester Wert: \"contract.updated\"\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;contract.updated&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.updated-Ereignis enthält type. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`occurredAt` — Pflicht**\n\nMitgeteilter Zeitpunkt des Ereignisses. Er ist weder der Empfangszeitpunkt noch allein ein Abschlussnachweis.\n\n- **Format/Werte:** Zeichenfolge; Format: date-time\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-10-24T10:00:00Z&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.updated-Ereignis enthält occurredAt. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`contractId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.updated-Ereignis enthält contractId. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`operationId` — Optional laut Schema**\n\nÖffentliche Kennung des zugehörigen Vertragsvorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;</code></span>\n- **Bei Auslassen:** Das Ereignis teilt diesen Wert nicht mit; bei Bedarf den aktuellen berechtigten Vorgang oder Vertrag lesen.\n\n**`externalReference` — Pflicht**\n\nIhre Geschäftsreferenz für diese Einreichung. Sie bleibt beim Wiederfinden und bei identischen Wiederholungen unverändert.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;synthetic-guide-new-001&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.updated-Ereignis enthält externalReference. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`contractStatus` — Pflicht**\n\nDer vom Vertragsabruf oder Vertragsereignis gemeldete Vertragszustand. Er ist vom Bearbeitungsstatus eines Vorgangs zu unterscheiden.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SIGNED&quot;</code></span>\n- **Bei Auslassen:** Ein vollständiges contract.updated-Ereignis enthält contractStatus. Fehlt das Feld, ist die Nachricht unvollständig; keinen Ersatzwert einsetzen.\n\n**`documents` — Optional laut Schema**\n\nDie in dieser Antwort ausgewiesenen konkreten Dokumentfassungen. Verfügbarkeit und gegebenenfalls Prüfsumme vor einem Download beachten.\n\n- **Format/Werte:** Liste; Elemente: DocumentMetadata\n- **Herkunft:** Aus dem nach erfolgreicher Signaturprüfung gelesenen Partnercallback.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;availability&quot;:&quot;AVAILABLE&quot;,&quot;contentRevisionId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;,&quot;contractId&quot;:&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;,&quot;documentId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3004&quot;,&quot;operationId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;,&quot;phase&quot;:&quot;SIGNED&quot;,&quot;purpose&quot;:&quot;CONTRACT&quot;,&quot;sha256&quot;:&quot;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;,&quot;signatureAttemptId&quot;:&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;}]</code></span>\n- **Bei Auslassen:** Das Ereignis teilt diesen Wert nicht mit; bei Bedarf den aktuellen berechtigten Vorgang oder Vertrag lesen.\n\n\n\n#### documents[] · DocumentMetadata\n\n**`documents[].documentId` — Pflicht**\n\nKennung genau der referenzierten Dateifassung. Geänderte PDF-Bytes erhalten eine andere Kennung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von documents[].documentId aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3004&quot;</code></span>\n- **Bei Auslassen:** documentId gehört zu jedem ausgegebenen Dokumenteintrag. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von documents[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`documents[].contractId` — Pflicht**\n\nÖffentliche Kennung des zugehörigen Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von documents[].contractId aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** contractId gehört zu jedem ausgegebenen Dokumenteintrag. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von documents[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`documents[].operationId` — Bedingt laut Schema**\n\nÖffentliche Kennung des zugehörigen Vertragsvorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn signatureAttemptId vorhanden; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].contentRevisionId` — Bedingt laut Schema**\n\nKennung der zugehörigen Vertragsfassung, deren Inhalt zur Unterzeichnung gehört.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3002&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn signatureAttemptId vorhanden; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].signatureAttemptId` — Bedingt laut Schema**\n\nKennung des zugehörigen Unterzeichnungsvorgangs. Wiederzustellung und erneutes Lesen bedeuten keine neue Unterzeichnung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3003&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Wenn phase vorhanden und phase in [\"SIGNING_INPUT\",\"SIGNED\"]; Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].purpose` — Optional laut Schema**\n\nFachlicher Zweck des Dokuments, etwa Vertragsdokument oder Änderungsdokument. Der Zweck allein bestätigt keine Unterschrift.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"CONTRACT\",\"AMENDMENT\"]\n- **Herkunft:** Den Wert von documents[].purpose aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;CONTRACT&quot;</code></span>\n- **Bei Auslassen:** Kein Dokumentzweck mitgeteilt; Dateiname und bloße Dateiexistenz belegen weder den Zweck noch eine Unterschrift.\n- **Bedingung:** Fachbedingung: Der Zweck allein bestätigt keine Gesamtunterzeichnung.\n\n**`documents[].phase` — Optional laut Schema**\n\nEinordnung als Vorschau, Unterzeichnungsvorlage oder signierte Endfassung, sofern diese Herkunft tatsächlich ausgewiesen wird.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PREVIEW\",\"SIGNING_INPUT\",\"SIGNED\"]\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SIGNED&quot;</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n**`documents[].availability` — Optional laut Schema**\n\nMitgeteilter Zustand der Dokumentverfügbarkeit. Eine technische Abrufstörung darf nicht als nachgewiesenes Fehlen einer Datei behandelt werden.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"PENDING\",\"AVAILABLE\",\"MISSING\"]\n- **Herkunft:** Den Wert von documents[].availability aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;AVAILABLE&quot;</code></span>\n- **Bei Auslassen:** Keine Verfügbarkeit aus anderen Statuswerten ableiten.\n- **Bedingung:** Fachbedingung: Beim aktuellen Vertragsabruf werden tatsächlich verfügbare Dateien referenziert. Eine fehlende Datei oder technische Störung kann stattdessen die dokumentierte Fehlerantwort auslösen.\n\n**`documents[].sha256` — Bedingt laut Schema**\n\nPrüfsumme exakt der referenzierten Dateibytes. Mit SHA256 des tatsächlich heruntergeladenen PDFs vergleichen.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^[0-9a-f]{64}$\"; Mindestlänge: 64; Höchstlänge: 64\n- **Herkunft:** Den Wert von documents[].sha256 aus der berechtigten Vertrags- oder Vorgangsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;</code></span>\n- **Bei Auslassen:** Ohne ausgewiesene Prüfsumme keinen Hash oder Dateibeleg erfinden.\n- **Bedingung:** Wenn contentRevisionId vorhanden und availability vorhanden und availability = \"AVAILABLE\"; Fachbedingung: Nur für tatsächlich verfügbare, genau dieser Fassung zugeordnete Bytes auswerten.\n\n**`documents[].coveredContractIds` — Optional laut Schema**\n\nVerträge, deren Bezug zu dieser Dokumentfassung ausdrücklich ausgewiesen wird. Eine gemeinsame Datei allein erteilt keine weiteren Vertragsrechte.\n\n- **Format/Werte:** Liste; keine doppelten Listenelemente; Elemente: ResourceId\n- **Herkunft:** Nur aus einer Vorgangsantwort, die diese Dokumentzuordnung tatsächlich ausweist; GET /contracts/{contractId} liefert diese Felder aktuell nicht.\n- **Beispiel:** <span class=\"partner-field\"><code>[&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;]</code></span>\n- **Bei Auslassen:** Die entsprechende Herkunft oder Zuordnung wird nicht mitgeteilt; sie nicht aus Vertragsstatus, Dateinamen oder Dateiexistenz ableiten.\n- **Bedingung:** Fachbedingung: Nur bei ausdrücklich belegter Zuordnung in einer Vorgangsantwort. Der Vertragsabruf gibt diese erweiterten Herkunftsangaben aktuell nicht aus.\n\n\n\n### ContractWithdrawalRequest\n\n**`decidedByAccountId` — Pflicht**\n\nAccount-UUID des aktiven eigenen Entscheiders aus GET /sales-context. SmartPay prüft die vorhandene Alt-Aktionsberechtigung serverseitig; keine Kundenkennung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Account-UUID aus GET /sales-context.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;20000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Erforderlich; ohne berechtigten Entscheider wird die Aktion abgewiesen.\n\n\n\n### CustomerSearchRequest\n\n**`mode` — Optional laut Schema**\n\nDie ausdrücklich gewählte beziehungsweise wirksam verwendete Art der Kundensuche.\n\n- **Format/Werte:** Zeichenfolge; Fester Wert: \"OWN\"; Default laut Schema: \"OWN\"\n- **Herkunft:** Für diese Suchvariante den Suchmodus OWN verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;OWN&quot;</code></span>\n- **Bei Auslassen:** Bei Auslassen wird OWN verwendet; IDENTIFY muss ausdrücklich angefordert werden.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest\n\n**`filters` — Pflicht**\n\nDie gemeinsam anzuwendenden Fachfilter der Kundensuche.\n\n- **Format/Werte:** Objekt; keine zusätzlichen Objektfelder\n- **Herkunft:** Die für diesen Suchaufruf tatsächlich bekannten Kundendaten als gemeinsam anzuwendende Vergleichsangaben erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;customerNumber&quot;:&quot;K12345&quot;}</code></span>\n- **Bei Auslassen:** Bei OWN ein filters-Objekt mit mindestens einem wirksamen Fachfilter angeben; ohne Filter wird der Suchaufruf als ungültig abgewiesen.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest; Fachbedingung: Für OWN mindestens einen wirksamen Fachfilter; für IDENTIFY Nachname, Geburtstag und Ausweisnummer gemeinsam verwenden.\n\n**`offset` — Optional laut Schema**\n\nAnzahl der passenden Treffer, die vor dieser Ergebnisseite übersprungen werden.\n\n- **Format/Werte:** Ganzzahl; Minimum: 0; Default laut Schema: 0\n- **Herkunft:** Die gewünschte Startposition für diese Ergebnisseite festlegen; für die erste Seite 0 verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>0</code></span>\n- **Bei Auslassen:** Der Suchaufruf beginnt bei offset=0.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest\n\n**`limit` — Optional laut Schema**\n\nDie gewünschte beziehungsweise angewandte maximale Anzahl von Treffern dieser Seite.\n\n- **Format/Werte:** Ganzzahl; Minimum: 1; Maximum: 100; Default laut Schema: 25\n- **Herkunft:** Die gewünschte maximale Anzahl von Treffern dieser Ergebnisseite zwischen 1 und 100 festlegen.\n- **Beispiel:** <span class=\"partner-field\"><code>25</code></span>\n- **Bei Auslassen:** Der Suchaufruf verwendet limit=25.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest\n\n\n\n#### filters · OwnSearchFilters\n\n**`filters.lastname` — Optional laut Schema**\n\nNachname der Person.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Den bekannten Nachnamen des gesuchten Kunden verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Muster&quot;</code></span>\n- **Bei Auslassen:** Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest; Fachbedingung: Teiltreffer innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam. Keine eigene Wildcardsprache voraussetzen.\n\n**`filters.firstname` — Optional laut Schema**\n\nVorname der Person.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Den bekannten Vornamen des gesuchten Kunden verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Anna&quot;</code></span>\n- **Bei Auslassen:** Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest; Fachbedingung: Teiltreffer innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam. Keine eigene Wildcardsprache voraussetzen.\n\n**`filters.city` — Optional laut Schema**\n\nOrt der Anschrift.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Den bekannten Ort der Kundenanschrift verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Berlin&quot;</code></span>\n- **Bei Auslassen:** Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest; Fachbedingung: Teiltreffer innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam. Keine eigene Wildcardsprache voraussetzen.\n\n**`filters.street` — Optional laut Schema**\n\nStraße und Hausnummer als gemeinsame Anschriftszeile.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Die bekannte Straße mit Hausnummer der Kundenanschrift verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Beispielstraße 10&quot;</code></span>\n- **Bei Auslassen:** Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest; Fachbedingung: Teiltreffer innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam. Keine eigene Wildcardsprache voraussetzen.\n\n**`filters.zip` — Optional laut Schema**\n\nPostleitzahl der Anschrift.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Die bekannte Postleitzahl der Kundenanschrift verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10115&quot;</code></span>\n- **Bei Auslassen:** Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest; Fachbedingung: Gleichheitsvergleich innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam.\n\n**`filters.email` — Optional laut Schema**\n\nDie Haupt-E-Mail-Adresse des Kunden. Sie ist auch für die Unterzeichnung relevant.\n\n- **Format/Werte:** Zeichenfolge; Format: email; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Die bekannte Haupt-E-Mail-Adresse des gesuchten Kunden verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;anna.muster@example.invalid&quot;</code></span>\n- **Bei Auslassen:** Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest; Fachbedingung: Gleichheitsvergleich innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam.\n\n**`filters.birthdate` — Optional laut Schema**\n\nGeburtsdatum der Person als Kalendertag.\n\n- **Format/Werte:** Zeichenfolge; Format: date; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Das bekannte Geburtsdatum des gesuchten Kunden verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;1985-04-12&quot;</code></span>\n- **Bei Auslassen:** Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest; Fachbedingung: Gleichheitsvergleich innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam.\n\n**`filters.externalCustomerNumber` — Optional laut Schema**\n\nIhre eigene Kundennummer beim Partner. Die SmartPay-Kundennummer wird getrennt von SmartPay vergeben.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Ihre im Partnersystem geführte und bei SmartPay hinterlegte eigene Kundennummer verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PARTNER-SYNTHETIC-1001&quot;</code></span>\n- **Bei Auslassen:** Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest; Fachbedingung: Teiltreffer innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam. Keine eigene Wildcardsprache voraussetzen.\n\n**`filters.serviceCardNumber` — Optional laut Schema**\n\nKundenkarte beziehungsweise Servicekartennummer eines passenden eigenen Vertrags als Suchkriterium.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Die bekannte Servicekartennummer eines eigenen berechtigten Vertrags verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-CARD-001&quot;</code></span>\n- **Bei Auslassen:** Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest; Fachbedingung: Teiltreffer innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam. Keine eigene Wildcardsprache voraussetzen.\n\n**`filters.customerNumber` — Optional laut Schema**\n\nVon SmartPay vergebene Kundennummer. Sie ist von Ihrer eigenen Partnerkundennummer und der Kunden-UUID getrennt.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^K[0-9]{5,}(?![\\\\s\\\\S])\"; Mindestlänge: 1\n- **Herkunft:** Die bereits bekannte, von SmartPay vergebene Kundennummer verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;K12345&quot;</code></span>\n- **Bei Auslassen:** Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest; Fachbedingung: Gleichheitsvergleich innerhalb des eigenen berechtigten Bestands; weitere Kriterien wirken gemeinsam.\n\n**`filters.familyMemberLastname` — Optional laut Schema**\n\nNachname eines zugeordneten Angehörigen als Suchkriterium innerhalb eigener berechtigter Verträge.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Den bekannten Nachnamen eines dem eigenen berechtigten Vertrag zugeordneten Angehörigen verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Muster&quot;</code></span>\n- **Bei Auslassen:** Dieses Kriterium schränkt die Suche nicht ein; mindestens ein anderes wirksames Kriterium muss gesendet werden.\n- **Bedingung:** In der Alternative: Modell OwnCustomerSearchRequest; Fachbedingung: Nur die zu eigenen berechtigten Verträgen zugeordneten Angehörigen werden berücksichtigt.\n\n\n\n**`mode` — Bedingt laut Schema**\n\nDie ausdrücklich gewählte beziehungsweise wirksam verwendete Art der Kundensuche.\n\n- **Format/Werte:** Zeichenfolge; Fester Wert: \"IDENTIFY\"\n- **Herkunft:** Für diese Suchvariante den Suchmodus IDENTIFY verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;IDENTIFY&quot;</code></span>\n- **Bei Auslassen:** Für die Identifikationssuche muss mode=IDENTIFY ausdrücklich angegeben werden. Ohne mode gilt die eigene Suche OWN mit deren Filterregeln; vollständige Identifikationsangaben wählen den Modus nicht automatisch.\n- **Bedingung:** In der Alternative: Modell IdentifyCustomerSearchRequest; Pflicht innerhalb der gewählten Alternative\n\n**`filters` — Pflicht**\n\nDie gemeinsam anzuwendenden Fachfilter der Kundensuche.\n\n- **Format/Werte:** Objekt; keine zusätzlichen Objektfelder\n- **Herkunft:** Die für diesen Suchaufruf tatsächlich bekannten Kundendaten als gemeinsam anzuwendende Vergleichsangaben erfassen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;birthdate&quot;:&quot;1985-04-12&quot;,&quot;idCardNumber&quot;:&quot;SYNTHETIC-GUIDE-ID-001&quot;,&quot;lastname&quot;:&quot;Muster&quot;}</code></span>\n- **Bei Auslassen:** Bei IDENTIFY filters mit Nachname, Geburtsdatum und Ausweisnummer gemeinsam angeben; fehlt eine dieser Angaben, wird der Suchaufruf als ungültig abgewiesen.\n- **Bedingung:** In der Alternative: Modell IdentifyCustomerSearchRequest; Fachbedingung: Für OWN mindestens einen wirksamen Fachfilter; für IDENTIFY Nachname, Geburtstag und Ausweisnummer gemeinsam verwenden.\n\n**`offset` — Optional laut Schema**\n\nAnzahl der passenden Treffer, die vor dieser Ergebnisseite übersprungen werden.\n\n- **Format/Werte:** Ganzzahl; Minimum: 0; Default laut Schema: 0\n- **Herkunft:** Die gewünschte Startposition für diese Ergebnisseite festlegen; für die erste Seite 0 verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>0</code></span>\n- **Bei Auslassen:** Der Suchaufruf beginnt bei offset=0.\n- **Bedingung:** In der Alternative: Modell IdentifyCustomerSearchRequest\n\n**`limit` — Optional laut Schema**\n\nDie gewünschte beziehungsweise angewandte maximale Anzahl von Treffern dieser Seite.\n\n- **Format/Werte:** Ganzzahl; Minimum: 1; Maximum: 100; Default laut Schema: 25\n- **Herkunft:** Die gewünschte maximale Anzahl von Treffern dieser Ergebnisseite zwischen 1 und 100 festlegen.\n- **Beispiel:** <span class=\"partner-field\"><code>25</code></span>\n- **Bei Auslassen:** Der Suchaufruf verwendet limit=25.\n- **Bedingung:** In der Alternative: Modell IdentifyCustomerSearchRequest\n\n\n\n#### filters · IdentifySearchFilters\n\n**`filters.lastname` — Pflicht**\n\nNachname der Person.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Aus den tatsächlich bekannten Identifikationsangaben der zu identifizierenden Person.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Muster&quot;</code></span>\n- **Bei Auslassen:** Bei mode=IDENTIFY erforderlich; fehlt lastname, wird der Suchaufruf als ungültig abgewiesen. Es erfolgt kein automatischer Wechsel zu OWN.\n- **Bedingung:** In der Alternative: Modell IdentifyCustomerSearchRequest; Fachbedingung: Nachname, Geburtsdatum und Ausweisnummer müssen gemeinsam übereinstimmen. Ausweisplatzhalter sind kein Trefferbeleg.\n\n**`filters.birthdate` — Pflicht**\n\nGeburtsdatum der Person als Kalendertag.\n\n- **Format/Werte:** Zeichenfolge; Format: date; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Aus den tatsächlich bekannten Identifikationsangaben der zu identifizierenden Person.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;1985-04-12&quot;</code></span>\n- **Bei Auslassen:** Bei mode=IDENTIFY erforderlich; fehlt birthdate, wird der Suchaufruf als ungültig abgewiesen. Es erfolgt kein automatischer Wechsel zu OWN.\n- **Bedingung:** In der Alternative: Modell IdentifyCustomerSearchRequest; Fachbedingung: Nachname, Geburtsdatum und Ausweisnummer müssen gemeinsam übereinstimmen. Ausweisplatzhalter sind kein Trefferbeleg.\n\n**`filters.idCardNumber` — Pflicht**\n\nAusweisnummer der Person. Ein Platzhalter ist kein erforderlicher Ausweisnachweis.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"\\\\S\"; Mindestlänge: 1\n- **Herkunft:** Aus den tatsächlich bekannten Identifikationsangaben der zu identifizierenden Person.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-GUIDE-ID-001&quot;</code></span>\n- **Bei Auslassen:** Bei mode=IDENTIFY erforderlich; fehlt idCardNumber, wird der Suchaufruf als ungültig abgewiesen. Es erfolgt kein automatischer Wechsel zu OWN.\n- **Bedingung:** In der Alternative: Modell IdentifyCustomerSearchRequest; Fachbedingung: Nachname, Geburtsdatum und Ausweisnummer müssen gemeinsam übereinstimmen. Ausweisplatzhalter sind kein Trefferbeleg.\n\n\n\n### CustomerSearchResponse\n\n**`mode` — Pflicht**\n\nDie ausdrücklich gewählte beziehungsweise wirksam verwendete Art der Kundensuche.\n\n- **Format/Werte:** Zeichenfolge; Fester Wert: \"OWN\"\n- **Herkunft:** Den tatsächlich bearbeiteten Suchmodus aus der Antwort von POST /customers/search lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;OWN&quot;</code></span>\n- **Bei Auslassen:** Jede erfolgreiche Suchantwort enthält mode; fehlt das Feld, ist die Ergebnisseite unvollständig.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items` — Pflicht**\n\nDie Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.\n\n- **Format/Werte:** Liste; Höchstelemente: 100; Elemente: OwnCustomerSummary\n- **Herkunft:** Die Trefferliste dieser Seite aus der Antwort von POST /customers/search lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;customerId&quot;:&quot;11111111-1111-4111-8111-111111111111&quot;,&quot;customerNumber&quot;:&quot;K12345&quot;,&quot;firstname&quot;:&quot;Anna&quot;,&quot;lastname&quot;:&quot;Muster&quot;}]</code></span>\n- **Bei Auslassen:** Jede erfolgreiche Suchantwort enthält items; fehlt das Feld, ist die Ergebnisseite unvollständig. Eine vorhandene leere Liste bedeutet keine Treffer für diesen Aufruf.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}; Fachbedingung: Der Trefferumfang folgt mode: eigene Kundendaten bei OWN, schmale Identifikationsdaten bei IDENTIFY.\n\n**`offset` — Pflicht**\n\nAnzahl der passenden Treffer, die vor dieser Ergebnisseite übersprungen werden.\n\n- **Format/Werte:** Ganzzahl; Minimum: 0\n- **Herkunft:** Den für diese Ergebnisseite tatsächlich angewandten Offset aus der Suchantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>0</code></span>\n- **Bei Auslassen:** Jede erfolgreiche Suchantwort enthält offset; fehlt das Feld, ist die Ergebnisseite unvollständig.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`limit` — Pflicht**\n\nDie gewünschte beziehungsweise angewandte maximale Anzahl von Treffern dieser Seite.\n\n- **Format/Werte:** Ganzzahl; Minimum: 1; Maximum: 100\n- **Herkunft:** Das für diese Ergebnisseite tatsächlich angewandte Limit aus der Suchantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>25</code></span>\n- **Bei Auslassen:** Jede erfolgreiche Suchantwort enthält limit; fehlt das Feld, ist die Ergebnisseite unvollständig.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`hasMore` — Pflicht**\n\nZeigt an, ob nach dieser Ergebnisseite weitere passende Treffer vorliegen.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Die von SmartPay ermittelte Angabe zu weiteren passenden berechtigten Treffern aus der Suchantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>false</code></span>\n- **Bei Auslassen:** Jede erfolgreiche Suchantwort enthält hasMore; fehlt das Feld, ist die Ergebnisseite unvollständig.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`mode` — Pflicht**\n\nDie ausdrücklich gewählte beziehungsweise wirksam verwendete Art der Kundensuche.\n\n- **Format/Werte:** Zeichenfolge; Fester Wert: \"IDENTIFY\"\n- **Herkunft:** Den tatsächlich bearbeiteten Suchmodus aus der Antwort von POST /customers/search lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;IDENTIFY&quot;</code></span>\n- **Bei Auslassen:** Jede erfolgreiche Suchantwort enthält mode; fehlt das Feld, ist die Ergebnisseite unvollständig.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"IDENTIFY\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/CustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items` — Pflicht**\n\nDie Treffer beziehungsweise Einträge dieser Antwort. Die Listenposition ist keine automatische Auswahl.\n\n- **Format/Werte:** Liste; Höchstelemente: 100; Elemente: CustomerSummary\n- **Herkunft:** Die Trefferliste dieser Seite aus der Antwort von POST /customers/search lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;city&quot;:&quot;Musterstadt&quot;,&quot;company&quot;:&quot;Beispielfirma&quot;,&quot;customerId&quot;:&quot;33333333-3333-4333-8333-333333333333&quot;,&quot;firstname&quot;:&quot;Clara&quot;,&quot;lastname&quot;:&quot;Muster&quot;,&quot;zip&quot;:&quot;12345&quot;},{&quot;city&quot;:&quot;Musterstadt&quot;,&quot;customerId&quot;:&quot;44444444-4444-4444-8444-444444444444&quot;,&quot;firstname&quot;:&quot;David&quot;,&quot;lastname&quot;:&quot;Muster&quot;,&quot;zip&quot;:&quot;12345&quot;}]</code></span>\n- **Bei Auslassen:** Jede erfolgreiche Suchantwort enthält items; fehlt das Feld, ist die Ergebnisseite unvollständig. Eine vorhandene leere Liste bedeutet keine Treffer für diesen Aufruf.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"IDENTIFY\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/CustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}; Fachbedingung: Der Trefferumfang folgt mode: eigene Kundendaten bei OWN, schmale Identifikationsdaten bei IDENTIFY.\n\n**`offset` — Pflicht**\n\nAnzahl der passenden Treffer, die vor dieser Ergebnisseite übersprungen werden.\n\n- **Format/Werte:** Ganzzahl; Minimum: 0\n- **Herkunft:** Den für diese Ergebnisseite tatsächlich angewandten Offset aus der Suchantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>0</code></span>\n- **Bei Auslassen:** Jede erfolgreiche Suchantwort enthält offset; fehlt das Feld, ist die Ergebnisseite unvollständig.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"IDENTIFY\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/CustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`limit` — Pflicht**\n\nDie gewünschte beziehungsweise angewandte maximale Anzahl von Treffern dieser Seite.\n\n- **Format/Werte:** Ganzzahl; Minimum: 1; Maximum: 100\n- **Herkunft:** Das für diese Ergebnisseite tatsächlich angewandte Limit aus der Suchantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>25</code></span>\n- **Bei Auslassen:** Jede erfolgreiche Suchantwort enthält limit; fehlt das Feld, ist die Ergebnisseite unvollständig.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"IDENTIFY\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/CustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`hasMore` — Pflicht**\n\nZeigt an, ob nach dieser Ergebnisseite weitere passende Treffer vorliegen.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Die von SmartPay ermittelte Angabe zu weiteren passenden berechtigten Treffern aus der Suchantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>false</code></span>\n- **Bei Auslassen:** Jede erfolgreiche Suchantwort enthält hasMore; fehlt das Feld, ist die Ergebnisseite unvollständig.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"IDENTIFY\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/CustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n\n\n#### items[] · OwnCustomerSummary\n\n**`items[].customerId` — Pflicht**\n\nÖffentliche Kennung des Kunden. Sie ist weder die SmartPay-Kundennummer noch Ihre Partnerkundennummer.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von customerId lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;11111111-1111-4111-8111-111111111111&quot;</code></span>\n- **Bei Auslassen:** customerId gehört zu jedem ausgegebenen Kundentreffer. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}; Fachbedingung: Der Treffer erteilt keine zusätzlichen Rechte zum Lesen fremder Verträge oder zum Ändern gemeinsamer Kundendaten.\n\n**`items[].customerNumber` — Optional laut Schema**\n\nVon SmartPay vergebene Kundennummer. Sie ist von Ihrer eigenen Partnerkundennummer und der Kunden-UUID getrennt.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von customerNumber lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;K12345&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items[].firstname` — Optional laut Schema**\n\nVorname der Person.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von firstname lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Anna&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items[].lastname` — Optional laut Schema**\n\nNachname der Person.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von lastname lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Muster&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items[].company` — Optional laut Schema**\n\nFirma des Kunden, sofern eine Firma erfasst wird. Dies eröffnet keine zusätzliche Vertragsart.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von company lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Beispiel GmbH&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items[].email` — Optional laut Schema**\n\nDie Haupt-E-Mail-Adresse des Kunden. Sie ist auch für die Unterzeichnung relevant.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von email lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;anna.muster@example.invalid&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items[].zip` — Optional laut Schema**\n\nPostleitzahl der Anschrift.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von zip lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10115&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items[].city` — Optional laut Schema**\n\nOrt der Anschrift.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von city lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Berlin&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items[].externalCustomerNumber` — Optional laut Schema**\n\nIhre eigene Kundennummer beim Partner. Die SmartPay-Kundennummer wird getrennt von SmartPay vergeben.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von externalCustomerNumber lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PARTNER-SYNTHETIC-1001&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"OWN\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/OwnCustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n\n\n#### items[] · CustomerSummary\n\n**`items[].customerId` — Pflicht**\n\nÖffentliche Kennung des Kunden. Sie ist weder die SmartPay-Kundennummer noch Ihre Partnerkundennummer.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von customerId lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;11111111-1111-4111-8111-111111111111&quot;</code></span>\n- **Bei Auslassen:** customerId gehört zu jedem ausgegebenen Kundentreffer. Fehlt das Feld, ist diese Antwort unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von items[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"IDENTIFY\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/CustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}; Fachbedingung: Der Treffer erteilt keine zusätzlichen Rechte zum Lesen fremder Verträge oder zum Ändern gemeinsamer Kundendaten.\n\n**`items[].firstname` — Optional laut Schema**\n\nVorname der Person.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von firstname lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Anna&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"IDENTIFY\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/CustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items[].lastname` — Optional laut Schema**\n\nNachname der Person.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von lastname lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Muster&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"IDENTIFY\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/CustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items[].company` — Optional laut Schema**\n\nFirma des Kunden, sofern eine Firma erfasst wird. Dies eröffnet keine zusätzliche Vertragsart.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von company lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Beispiel GmbH&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"IDENTIFY\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/CustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items[].zip` — Optional laut Schema**\n\nPostleitzahl der Anschrift.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von zip lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10115&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"IDENTIFY\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/CustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n**`items[].city` — Optional laut Schema**\n\nOrt der Anschrift.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den im Trefferobjekt von POST /customers/search ausgewiesenen Wert von city lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Berlin&quot;</code></span>\n- **Bei Auslassen:** Diese Bestandsangabe ist im Treffer nicht mitgeteilt; der schmale Suchtreffer ist kein vollständiger Kundendatensatz und erteilt keine zusätzlichen Rechte.\n- **Bedingung:** In der Alternative: mode vorhanden und items vorhanden und offset vorhanden und limit vorhanden und hasMore vorhanden und mode = \"IDENTIFY\" und items: Schema-Bedingung {\"items\":{\"$ref\":\"#/components/schemas/CustomerSummary\"},\"maxItems\":100} und offset: Schema-Bedingung {\"minimum\":0} und limit: Schema-Bedingung {\"maximum\":100,\"minimum\":1} und Schema-Bedingung {\"additionalProperties\":false}\n\n\n\n### DiscardRequest\n\n**`decidedByAccountId` — Pflicht**\n\nKennung des aktiven menschlichen Entscheiders, der diese Fachentscheidung treffen darf. Eine Verkäuferkennung allein genügt nicht.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die Kennung des aktiven zugehörigen Menschen, der die konkrete Entscheidung treffen darf; über die eingerichtete Benutzerzuordnung bereitstellen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;693ce612-51cd-4b82-a9b3-8138851b573e&quot;</code></span>\n- **Bei Auslassen:** Für diese Entscheidung erforderlich; fehlt decidedByAccountId, wird der Aufruf als ungültig abgewiesen. API-Zugang und Verkäufer werden nicht automatisch als Entscheider eingesetzt.\n- **Bedingung:** Fachbedingung: Die konkrete Aktionsberechtigung wird auch bei Wiederholung geprüft.\n\n\n\n### ProductConditionsResponse\n\n**`productId` — Pflicht**\n\nÖffentliche Kennung des bewusst gewählten Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von productId aus der Konditionsantwort von GET /products/{productId} bei vollständiger Auswahl lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;51f866e9-2307-47c6-8de3-e6b1f24f8d31&quot;</code></span>\n- **Bei Auslassen:** productId gehört zu der Konditionsantwort von GET /products/{productId} bei vollständiger Auswahl. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n**`conditions` — Pflicht**\n\nDie ausgewiesenen Konditionen einschließlich ausgewählter Optionen und berechneter Beträge.\n\n- **Format/Werte:** Objekt; keine zusätzlichen Objektfelder\n- **Herkunft:** Den Wert von conditions aus der Konditionsantwort von GET /products/{productId} bei vollständiger Auswahl lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;durationId&quot;:&quot;17ef5d55-617c-429a-b523-637625346856&quot;,&quot;paymentId&quot;:&quot;95012da7-bd0c-4b4a-b181-a43bff8578d0&quot;,&quot;priceType&quot;:&quot;AGB&quot;,&quot;regularPayment&quot;:{&quot;amount&quot;:&quot;10.50&quot;,&quot;basis&quot;:&quot;PAYMENT_INTERVAL&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;},&quot;setupCharge&quot;:{&quot;amount&quot;:&quot;19.95&quot;,&quot;basis&quot;:&quot;ONE_OFF&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}}</code></span>\n- **Bei Auslassen:** conditions gehört zu der Konditionsantwort von GET /products/{productId} bei vollständiger Auswahl. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n\n\n#### conditions · ProductDetailConditions\n\n**`conditions.durationId` — Pflicht**\n\nKennung der bewusst ausgewählten Laufzeitoption des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von durationId aus conditions der Konditionsantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;17ef5d55-617c-429a-b523-637625346856&quot;</code></span>\n- **Bei Auslassen:** durationId gehört zu conditions der Konditionsantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n**`conditions.paymentId` — Pflicht**\n\nKennung der bewusst ausgewählten Zahlweise des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von paymentId aus conditions der Konditionsantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;95012da7-bd0c-4b4a-b181-a43bff8578d0&quot;</code></span>\n- **Bei Auslassen:** paymentId gehört zu conditions der Konditionsantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n**`conditions.priceType` — Pflicht**\n\nDie für das Produkt angebotene und bewusst ausgewählte Preisart.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"AGB\",\"PROMO\",\"PROMO_TEMP\"]\n- **Herkunft:** Den Wert von priceType aus conditions der Konditionsantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;AGB&quot;</code></span>\n- **Bei Auslassen:** priceType gehört zu conditions der Konditionsantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n**`conditions.promotionId` — Optional laut Schema**\n\nKennung der ausgewählten befristeten Promotion.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von promotionId aus conditions der Konditionsantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;70000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Keine entsprechende Promotionsangabe in dieser Konditionsantwort mitgeteilt; eine fehlende Angabe ist kein Nullbetrag und keine eigene Promotionsauswahl.\n\n**`conditions.regularPayment` — Pflicht**\n\nAusgewiesene Regelrate mit Währung, Steuerbasis und Zahlungsbezug. Sie ist nicht automatisch der Betrag des ersten Einzugs.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den Wert von regularPayment aus conditions der Konditionsantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;10.50&quot;,&quot;basis&quot;:&quot;PAYMENT_INTERVAL&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** regularPayment gehört zu conditions der Konditionsantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Fachbedingung: Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.\n\n**`conditions.promotionalPayment` — Optional laut Schema**\n\nAusgewiesene Rate während der zugeordneten Promotion.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den Wert von promotionalPayment aus conditions der Konditionsantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;9.50&quot;,&quot;basis&quot;:&quot;PAYMENT_INTERVAL&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** Keine entsprechende Promotionsangabe in dieser Konditionsantwort mitgeteilt; eine fehlende Angabe ist kein Nullbetrag und keine eigene Promotionsauswahl.\n- **Bedingung:** Fachbedingung: Nur auswerten, wenn die berechnete Produktkonditionsantwort diese Angabe zur ausgewählten Promotion tatsächlich ausweist.\n\n**`conditions.promotionDurationMonths` — Optional laut Schema**\n\nAusgewiesene Dauer der zugeordneten Promotion in Monaten.\n\n- **Format/Werte:** Ganzzahl\n- **Herkunft:** Den Wert von promotionDurationMonths aus conditions der Konditionsantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>3</code></span>\n- **Bei Auslassen:** Keine entsprechende Promotionsangabe in dieser Konditionsantwort mitgeteilt; eine fehlende Angabe ist kein Nullbetrag und keine eigene Promotionsauswahl.\n- **Bedingung:** Fachbedingung: Nur auswerten, wenn die berechnete Produktkonditionsantwort diese Angabe zur ausgewählten Promotion tatsächlich ausweist.\n\n**`conditions.setupCharge` — Pflicht**\n\nAusgewiesenes einmaliges Einrichtungsentgelt mit Währung und Steuerbasis.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den Wert von setupCharge aus conditions der Konditionsantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;19.95&quot;,&quot;basis&quot;:&quot;ONE_OFF&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** setupCharge gehört zu conditions der Konditionsantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Fachbedingung: Betrag nur mit belegter Währung, Steuerbasis und Zahlungsbezug auswerten. Nicht ausgegebene Beträge nicht aus heutigen Produktpreisen ergänzen.\n\n\n\n#### conditions.regularPayment · ConditionAmount\n\n**`conditions.regularPayment.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n\n**`conditions.regularPayment.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n\n**`conditions.regularPayment.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n\n**`conditions.regularPayment.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n\n\n\n#### conditions.promotionalPayment · ConditionAmount\n\n**`conditions.promotionalPayment.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.promotionalPayment.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.promotionalPayment.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`conditions.promotionalPayment.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von conditions.promotionalPayment, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### conditions.setupCharge · ConditionAmount\n\n**`conditions.setupCharge.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n\n**`conditions.setupCharge.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n\n**`conditions.setupCharge.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n\n**`conditions.setupCharge.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n\n\n\n### ProductDetailsResponse\n\n**`productId` — Pflicht**\n\nÖffentliche Kennung des bewusst gewählten Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von productId aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;51f866e9-2307-47c6-8de3-e6b1f24f8d31&quot;</code></span>\n- **Bei Auslassen:** productId gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n**`categoryId` — Optional laut Schema**\n\nÖffentliche Kennung der Produktkategorie.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von categoryId aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;40000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Keine Kategoriezuordnung in diesem Produkteintrag mitgeteilt; die Zuordnung nicht aus dem Produktnamen ableiten.\n\n**`name` — Optional laut Schema**\n\nAnzeigename des Produkts.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von name aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Bezeichnung&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n\n**`description` — Optional laut Schema**\n\nAnzeigebeschreibung des Produkts.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von description aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Erläuterung&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n\n**`productType` — Optional laut Schema**\n\nMitgeteilter Produkttyp. Die Typanzeige allein erweitert den unterstützten Abschlussumfang nicht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"MOBILE\",\"LANDLINE\",\"LEASING\"]\n- **Herkunft:** Den Wert von productType aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;LANDLINE&quot;</code></span>\n- **Bei Auslassen:** Die Antwort teilt keinen belegten Produkttyp mit; den Typ nicht aus einer UUID oder einem Namen raten.\n\n**`customerRequirements` — Pflicht**\n\nDie für die Kundenauswahl zu beachtenden Anforderungen des Produkts.\n\n- **Format/Werte:** Objekt; keine zusätzlichen Objektfelder\n- **Herkunft:** Den Wert von customerRequirements aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;idCardNumberRequired&quot;:true}</code></span>\n- **Bei Auslassen:** customerRequirements gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n**`serialNumbers` — Pflicht**\n\nKonfiguration der Seriennummernerfassung dieses Produkts: aktiviert oder deaktiviert, Anzahl der Plätze und Angaben zu den einzelnen Eingabefeldern.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den Wert von serialNumbers aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;enabled&quot;:false}</code></span>\n- **Bei Auslassen:** serialNumbers gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Fachbedingung: Bei enabled=true verlangt der Vertragsrequest die vollständige konfigurierte Anzahl von Plätzen. Dies ist das Konfigurationsobjekt, nicht die Liste der eingegebenen Serienwerte.\n\n**`addonProduct` — Pflicht**\n\nKennzeichnet die Produkteigenschaft als Zusatzprodukt. Die Metadaten sind keine Freigabe eines Add-on-Abschlusses.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von addonProduct aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>false</code></span>\n- **Bei Auslassen:** addonProduct gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n**`bundleComponents` — Optional laut Schema**\n\nAusgewiesene Produktbeziehungen des Katalogs. Sie sind keine bereits angelegten Verträge und keine Freigabe eines Bundleabschlusses.\n\n- **Format/Werte:** Liste; Elemente: ProductSummary\n- **Herkunft:** Den Wert von bundleComponents aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;name&quot;:&quot;Synthetische Produktbeziehung&quot;,&quot;productId&quot;:&quot;51f866e9-2307-47c6-8de3-e6b1f24f8d31&quot;}]</code></span>\n- **Bei Auslassen:** Keine Produktbeziehungen in dieser Antwort mitgeteilt; daraus weder einen angelegten Bundlevertrag noch eine Abschlussfreigabe ableiten.\n\n**`durations` — Pflicht**\n\nDie angebotenen aktiven Laufzeitoptionen. Eine Option bewusst über ihre Kennung wählen.\n\n- **Format/Werte:** Liste; Elemente: object\n- **Herkunft:** Den Wert von durations aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;durationId&quot;:&quot;17ef5d55-617c-429a-b523-637625346856&quot;,&quot;durationMonths&quot;:24}]</code></span>\n- **Bei Auslassen:** durations gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n**`payments` — Pflicht**\n\nDie angebotenen aktiven Zahlweisen. Eine Option bewusst über ihre Kennung wählen.\n\n- **Format/Werte:** Liste; Elemente: object\n- **Herkunft:** Den Wert von payments aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;paymentId&quot;:&quot;95012da7-bd0c-4b4a-b181-a43bff8578d0&quot;,&quot;paymentType&quot;:&quot;MONTHLY&quot;}]</code></span>\n- **Bei Auslassen:** payments gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n**`priceTypes` — Pflicht**\n\nDie für dieses Produkt angebotenen Preisarten. Daraus vor der Konditionsberechnung eine zulässige Auswahl treffen.\n\n- **Format/Werte:** Liste; keine doppelten Listenelemente; Elemente: PriceType\n- **Herkunft:** Den Wert von priceTypes aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[&quot;AGB&quot;]</code></span>\n- **Bei Auslassen:** priceTypes gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n**`promotions` — Pflicht**\n\nDie für die Produktauswahl angebotenen Promotionen. Keine erste Promotion automatisch übernehmen.\n\n- **Format/Werte:** Liste; Elemente: PromotionOption\n- **Herkunft:** Den Wert von promotions aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;name&quot;:&quot;Synthetische Promotion&quot;,&quot;promotionId&quot;:&quot;70000000-0000-4000-8000-000000000001&quot;}]</code></span>\n- **Bei Auslassen:** promotions gehört zu der Auswahlantwort von GET /products/{productId}. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n\n\n#### customerRequirements · ProductDetailsResponse\n\n**`customerRequirements.idCardNumberRequired` — Pflicht**\n\nZeigt an, ob für den Kunden dieses Produkts eine verwendbare Ausweisnummer vorhanden sein muss.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** customerRequirements.idCardNumberRequired aus der Auswahlantwort von GET /products/{productId} lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** Die Produktanforderungen enthalten diese Angabe ausdrücklich. Fehlt sie, ist die Antwort unvollständig; fehlend nicht als false behandeln.\n\n\n\n#### serialNumbers · SerialRequirements\n\n**`serialNumbers.enabled` — Pflicht**\n\nZeigt an, ob das Produkt die Erfassung von Geräte- und Serienangaben verwendet.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von enabled aus serialNumbers der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** enabled gehört zu serialNumbers der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n\n**`serialNumbers.slotCount` — Bedingt laut Schema**\n\nDie vollständig zu übermittelnde Anzahl der Geräteeinträge. Sie ist keine Mindestzahl benannter Geräte.\n\n- **Format/Werte:** Ganzzahl; Minimum: 0\n- **Herkunft:** Den Wert von slotCount aus serialNumbers der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>1</code></span>\n- **Bei Auslassen:** Bei deaktivierter Serienerfassung werden diese Vorgaben nicht benötigt; bei aktivierter Erfassung die mitgeteilte vollständige Konfiguration verwenden.\n- **Bedingung:** Wenn enabled vorhanden und enabled = true; Fachbedingung: Relevant bei enabled=true; daraus keine automatische Mindestzahl benannter Geräte erzeugen.\n\n**`serialNumbers.header` — Optional laut Schema**\n\nDie für die Geräteerfassung vorgesehene Überschrift.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von header aus serialNumbers der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Geräteangaben&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n\n**`serialNumbers.description` — Optional laut Schema**\n\nDie zur Anzeige vorgesehene Erläuterung.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von description aus serialNumbers der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Erläuterung&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n\n**`serialNumbers.fields` — Bedingt laut Schema**\n\nDie Vorgaben der einzelnen Felder eines Geräteeintrags.\n\n- **Format/Werte:** Objekt; keine zusätzlichen Objektfelder\n- **Herkunft:** Den Wert von fields aus serialNumbers der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;additional1&quot;:{&quot;configuredActive&quot;:false,&quot;requiredWhenNamed&quot;:false,&quot;writable&quot;:false},&quot;additional2&quot;:{&quot;configuredActive&quot;:false,&quot;requiredWhenNamed&quot;:false,&quot;writable&quot;:false},&quot;name&quot;:{&quot;configuredActive&quot;:true,&quot;requiredWhenNamed&quot;:true,&quot;writable&quot;:true},&quot;serialNumber1&quot;:{&quot;configuredActive&quot;:true,&quot;requiredWhenNamed&quot;:true,&quot;writable&quot;:true},&quot;serialNumber2&quot;:{&quot;configuredActive&quot;:false,&quot;requiredWhenNamed&quot;:false,&quot;writable&quot;:false}}</code></span>\n- **Bei Auslassen:** Bei deaktivierter Serienerfassung werden diese Vorgaben nicht benötigt; bei aktivierter Erfassung die mitgeteilte vollständige Konfiguration verwenden.\n- **Bedingung:** Wenn enabled vorhanden und enabled = true; Fachbedingung: Relevant bei enabled=true; daraus keine automatische Mindestzahl benannter Geräte erzeugen.\n\n\n\n#### serialNumbers.fields · SerialRequirements\n\n**`serialNumbers.fields.name` — Pflicht**\n\nDie Vorgaben für das Gerätefeld name.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Die Konfiguration für name unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;configuredActive&quot;:true,&quot;requiredWhenNamed&quot;:true,&quot;writable&quot;:true}</code></span>\n- **Bei Auslassen:** Bei aktivierter Serienerfassung gehört diese Feldkonfiguration zur vollständigen Konfiguration; fehlt sie, keine eigene Eingabefreigabe oder Pflicht ableiten.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: Zusammen mit enabled, slotCount und den Regeln für benannte Einträge auswerten.\n\n**`serialNumbers.fields.serialNumber1` — Pflicht**\n\nDie Vorgaben für das Gerätefeld serialNumber1.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Die Konfiguration für serialNumber1 unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;configuredActive&quot;:true,&quot;requiredWhenNamed&quot;:true,&quot;writable&quot;:true}</code></span>\n- **Bei Auslassen:** Bei aktivierter Serienerfassung gehört diese Feldkonfiguration zur vollständigen Konfiguration; fehlt sie, keine eigene Eingabefreigabe oder Pflicht ableiten.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: Zusammen mit enabled, slotCount und den Regeln für benannte Einträge auswerten.\n\n**`serialNumbers.fields.serialNumber2` — Pflicht**\n\nDie Vorgaben für das Gerätefeld serialNumber2.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Die Konfiguration für serialNumber2 unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;configuredActive&quot;:false,&quot;requiredWhenNamed&quot;:false,&quot;writable&quot;:false}</code></span>\n- **Bei Auslassen:** Bei aktivierter Serienerfassung gehört diese Feldkonfiguration zur vollständigen Konfiguration; fehlt sie, keine eigene Eingabefreigabe oder Pflicht ableiten.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: Zusammen mit enabled, slotCount und den Regeln für benannte Einträge auswerten.\n\n**`serialNumbers.fields.additional1` — Pflicht**\n\nDie Vorgaben für das Gerätefeld additional1.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Die Konfiguration für additional1 unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;configuredActive&quot;:false,&quot;requiredWhenNamed&quot;:false,&quot;writable&quot;:false}</code></span>\n- **Bei Auslassen:** Bei aktivierter Serienerfassung gehört diese Feldkonfiguration zur vollständigen Konfiguration; fehlt sie, keine eigene Eingabefreigabe oder Pflicht ableiten.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: Zusammen mit enabled, slotCount und den Regeln für benannte Einträge auswerten.\n\n**`serialNumbers.fields.additional2` — Pflicht**\n\nDie Vorgaben für das Gerätefeld additional2.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Die Konfiguration für additional2 unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;configuredActive&quot;:false,&quot;requiredWhenNamed&quot;:false,&quot;writable&quot;:false}</code></span>\n- **Bei Auslassen:** Bei aktivierter Serienerfassung gehört diese Feldkonfiguration zur vollständigen Konfiguration; fehlt sie, keine eigene Eingabefreigabe oder Pflicht ableiten.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: Zusammen mit enabled, slotCount und den Regeln für benannte Einträge auswerten.\n\n\n\n#### serialNumbers.fields.name · SerialFieldRequirement\n\n**`serialNumbers.fields.name.label` — Optional laut Schema**\n\nAnzeigebezeichnung dieses Gerätefeldes.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von label aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Seriennummer&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.name.configuredActive` — Pflicht**\n\nZeigt an, ob dieses Gerätefeld in der Produktkonfiguration verwendet wird.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von configuredActive aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** configuredActive gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.name, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.name.writable` — Pflicht**\n\nZeigt an, ob dieses Gerätefeld in der Eingabe verwendet werden darf.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von writable aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** writable gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.name, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.name.requiredWhenNamed` — Pflicht**\n\nZeigt an, ob ein benannter Geräteeintrag für dieses Feld einen ausgefüllten Wert benötigt.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von requiredWhenNamed aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** requiredWhenNamed gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.name, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.name.type` — Optional laut Schema**\n\nDarstellungshinweis für dieses konfigurierte Eingabefeld. Der Vertragsrequest übermittelt den erfassten Wert als Zeichenfolge, auch bei CHECKBOX oder RATING.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"STANDARD\",\"DATE\",\"CHECKBOX\",\"RATING\",\"MEMO\"]\n- **Herkunft:** Den Wert von type aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;STANDARD&quot;</code></span>\n- **Bei Auslassen:** Kein Darstellungstyp mitgeteilt; daraus keinen anderen Datentyp für den Vertragsrequest ableiten, der den erfassten Wert als Zeichenfolge übermittelt.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: DATE wird als TT.MM.JJJJ übermittelt. CHECKBOX und RATING haben in diesem API-Weg kein zusätzliches Werteformat: Auch hier senden Sie Text, keine JSON-Booleans oder Zahlen. Zeichenfolgen wie \"true\", \"false\", \"1\" oder \"4\" sind Text und werden nicht automatisch in Boolean oder eine Bewertungsskala umgewandelt. Verwenden Sie für Ihre Erfassung eine einheitliche Textdarstellung; eine besondere Skala oder Maskensprache ist nicht vorgegeben. Feldpflichten und inaktive Felder gelten weiterhin.\n\n**`serialNumbers.fields.name.mask` — Optional laut Schema**\n\nAm Produkt gespeicherter Maskenhinweis für die Darstellung der Eingabe.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von mask aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-MASK&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: Die API definiert dafür keine allgemeine Regex- oder Maskensprache und interpretiert diesen Hinweis nicht als zusätzliche Eingabeprüfung. Den Hinweis nicht in eine erfundene Regex umwandeln; die dokumentierte DATE-Form und die Feldpflichten gelten unabhängig davon.\n\n\n\n#### serialNumbers.fields.serialNumber1 · SerialFieldRequirement\n\n**`serialNumbers.fields.serialNumber1.label` — Optional laut Schema**\n\nAnzeigebezeichnung dieses Gerätefeldes.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von label aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Seriennummer&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.serialNumber1.configuredActive` — Pflicht**\n\nZeigt an, ob dieses Gerätefeld in der Produktkonfiguration verwendet wird.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von configuredActive aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** configuredActive gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.serialNumber1, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.serialNumber1.writable` — Pflicht**\n\nZeigt an, ob dieses Gerätefeld in der Eingabe verwendet werden darf.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von writable aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** writable gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.serialNumber1, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.serialNumber1.requiredWhenNamed` — Pflicht**\n\nZeigt an, ob ein benannter Geräteeintrag für dieses Feld einen ausgefüllten Wert benötigt.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von requiredWhenNamed aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** requiredWhenNamed gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.serialNumber1, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.serialNumber1.type` — Optional laut Schema**\n\nDarstellungshinweis für dieses konfigurierte Eingabefeld. Der Vertragsrequest übermittelt den erfassten Wert als Zeichenfolge, auch bei CHECKBOX oder RATING.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"STANDARD\",\"DATE\",\"CHECKBOX\",\"RATING\",\"MEMO\"]\n- **Herkunft:** Den Wert von type aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;STANDARD&quot;</code></span>\n- **Bei Auslassen:** Kein Darstellungstyp mitgeteilt; daraus keinen anderen Datentyp für den Vertragsrequest ableiten, der den erfassten Wert als Zeichenfolge übermittelt.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: DATE wird als TT.MM.JJJJ übermittelt. CHECKBOX und RATING haben in diesem API-Weg kein zusätzliches Werteformat: Auch hier senden Sie Text, keine JSON-Booleans oder Zahlen. Zeichenfolgen wie \"true\", \"false\", \"1\" oder \"4\" sind Text und werden nicht automatisch in Boolean oder eine Bewertungsskala umgewandelt. Verwenden Sie für Ihre Erfassung eine einheitliche Textdarstellung; eine besondere Skala oder Maskensprache ist nicht vorgegeben. Feldpflichten und inaktive Felder gelten weiterhin.\n\n**`serialNumbers.fields.serialNumber1.mask` — Optional laut Schema**\n\nAm Produkt gespeicherter Maskenhinweis für die Darstellung der Eingabe.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von mask aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-MASK&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: Die API definiert dafür keine allgemeine Regex- oder Maskensprache und interpretiert diesen Hinweis nicht als zusätzliche Eingabeprüfung. Den Hinweis nicht in eine erfundene Regex umwandeln; die dokumentierte DATE-Form und die Feldpflichten gelten unabhängig davon.\n\n\n\n#### serialNumbers.fields.serialNumber2 · SerialFieldRequirement\n\n**`serialNumbers.fields.serialNumber2.label` — Optional laut Schema**\n\nAnzeigebezeichnung dieses Gerätefeldes.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von label aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Seriennummer&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.serialNumber2.configuredActive` — Pflicht**\n\nZeigt an, ob dieses Gerätefeld in der Produktkonfiguration verwendet wird.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von configuredActive aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** configuredActive gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.serialNumber2, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.serialNumber2.writable` — Pflicht**\n\nZeigt an, ob dieses Gerätefeld in der Eingabe verwendet werden darf.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von writable aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** writable gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.serialNumber2, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.serialNumber2.requiredWhenNamed` — Pflicht**\n\nZeigt an, ob ein benannter Geräteeintrag für dieses Feld einen ausgefüllten Wert benötigt.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von requiredWhenNamed aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** requiredWhenNamed gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.serialNumber2, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.serialNumber2.type` — Optional laut Schema**\n\nDarstellungshinweis für dieses konfigurierte Eingabefeld. Der Vertragsrequest übermittelt den erfassten Wert als Zeichenfolge, auch bei CHECKBOX oder RATING.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"STANDARD\",\"DATE\",\"CHECKBOX\",\"RATING\",\"MEMO\"]\n- **Herkunft:** Den Wert von type aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;STANDARD&quot;</code></span>\n- **Bei Auslassen:** Kein Darstellungstyp mitgeteilt; daraus keinen anderen Datentyp für den Vertragsrequest ableiten, der den erfassten Wert als Zeichenfolge übermittelt.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: DATE wird als TT.MM.JJJJ übermittelt. CHECKBOX und RATING haben in diesem API-Weg kein zusätzliches Werteformat: Auch hier senden Sie Text, keine JSON-Booleans oder Zahlen. Zeichenfolgen wie \"true\", \"false\", \"1\" oder \"4\" sind Text und werden nicht automatisch in Boolean oder eine Bewertungsskala umgewandelt. Verwenden Sie für Ihre Erfassung eine einheitliche Textdarstellung; eine besondere Skala oder Maskensprache ist nicht vorgegeben. Feldpflichten und inaktive Felder gelten weiterhin.\n\n**`serialNumbers.fields.serialNumber2.mask` — Optional laut Schema**\n\nAm Produkt gespeicherter Maskenhinweis für die Darstellung der Eingabe.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von mask aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-MASK&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: Die API definiert dafür keine allgemeine Regex- oder Maskensprache und interpretiert diesen Hinweis nicht als zusätzliche Eingabeprüfung. Den Hinweis nicht in eine erfundene Regex umwandeln; die dokumentierte DATE-Form und die Feldpflichten gelten unabhängig davon.\n\n\n\n#### serialNumbers.fields.additional1 · SerialFieldRequirement\n\n**`serialNumbers.fields.additional1.label` — Optional laut Schema**\n\nAnzeigebezeichnung dieses Gerätefeldes.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von label aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Seriennummer&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.additional1.configuredActive` — Pflicht**\n\nZeigt an, ob dieses Gerätefeld in der Produktkonfiguration verwendet wird.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von configuredActive aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** configuredActive gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.additional1, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.additional1.writable` — Pflicht**\n\nZeigt an, ob dieses Gerätefeld in der Eingabe verwendet werden darf.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von writable aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** writable gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.additional1, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.additional1.requiredWhenNamed` — Pflicht**\n\nZeigt an, ob ein benannter Geräteeintrag für dieses Feld einen ausgefüllten Wert benötigt.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von requiredWhenNamed aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** requiredWhenNamed gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.additional1, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.additional1.type` — Optional laut Schema**\n\nDarstellungshinweis für dieses konfigurierte Eingabefeld. Der Vertragsrequest übermittelt den erfassten Wert als Zeichenfolge, auch bei CHECKBOX oder RATING.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"STANDARD\",\"DATE\",\"CHECKBOX\",\"RATING\",\"MEMO\"]\n- **Herkunft:** Den Wert von type aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;STANDARD&quot;</code></span>\n- **Bei Auslassen:** Kein Darstellungstyp mitgeteilt; daraus keinen anderen Datentyp für den Vertragsrequest ableiten, der den erfassten Wert als Zeichenfolge übermittelt.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: DATE wird als TT.MM.JJJJ übermittelt. CHECKBOX und RATING haben in diesem API-Weg kein zusätzliches Werteformat: Auch hier senden Sie Text, keine JSON-Booleans oder Zahlen. Zeichenfolgen wie \"true\", \"false\", \"1\" oder \"4\" sind Text und werden nicht automatisch in Boolean oder eine Bewertungsskala umgewandelt. Verwenden Sie für Ihre Erfassung eine einheitliche Textdarstellung; eine besondere Skala oder Maskensprache ist nicht vorgegeben. Feldpflichten und inaktive Felder gelten weiterhin.\n\n**`serialNumbers.fields.additional1.mask` — Optional laut Schema**\n\nAm Produkt gespeicherter Maskenhinweis für die Darstellung der Eingabe.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von mask aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-MASK&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: Die API definiert dafür keine allgemeine Regex- oder Maskensprache und interpretiert diesen Hinweis nicht als zusätzliche Eingabeprüfung. Den Hinweis nicht in eine erfundene Regex umwandeln; die dokumentierte DATE-Form und die Feldpflichten gelten unabhängig davon.\n\n\n\n#### serialNumbers.fields.additional2 · SerialFieldRequirement\n\n**`serialNumbers.fields.additional2.label` — Optional laut Schema**\n\nAnzeigebezeichnung dieses Gerätefeldes.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von label aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Seriennummer&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.additional2.configuredActive` — Pflicht**\n\nZeigt an, ob dieses Gerätefeld in der Produktkonfiguration verwendet wird.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von configuredActive aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** configuredActive gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.additional2, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.additional2.writable` — Pflicht**\n\nZeigt an, ob dieses Gerätefeld in der Eingabe verwendet werden darf.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von writable aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** writable gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.additional2, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.additional2.requiredWhenNamed` — Pflicht**\n\nZeigt an, ob ein benannter Geräteeintrag für dieses Feld einen ausgefüllten Wert benötigt.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von requiredWhenNamed aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** requiredWhenNamed gehört zu den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von serialNumbers.fields.additional2, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist; Wenn serialNumbers.fields in der gewählten Variante vorhanden ist\n\n**`serialNumbers.fields.additional2.type` — Optional laut Schema**\n\nDarstellungshinweis für dieses konfigurierte Eingabefeld. Der Vertragsrequest übermittelt den erfassten Wert als Zeichenfolge, auch bei CHECKBOX oder RATING.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"STANDARD\",\"DATE\",\"CHECKBOX\",\"RATING\",\"MEMO\"]\n- **Herkunft:** Den Wert von type aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;STANDARD&quot;</code></span>\n- **Bei Auslassen:** Kein Darstellungstyp mitgeteilt; daraus keinen anderen Datentyp für den Vertragsrequest ableiten, der den erfassten Wert als Zeichenfolge übermittelt.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: DATE wird als TT.MM.JJJJ übermittelt. CHECKBOX und RATING haben in diesem API-Weg kein zusätzliches Werteformat: Auch hier senden Sie Text, keine JSON-Booleans oder Zahlen. Zeichenfolgen wie \"true\", \"false\", \"1\" oder \"4\" sind Text und werden nicht automatisch in Boolean oder eine Bewertungsskala umgewandelt. Verwenden Sie für Ihre Erfassung eine einheitliche Textdarstellung; eine besondere Skala oder Maskensprache ist nicht vorgegeben. Feldpflichten und inaktive Felder gelten weiterhin.\n\n**`serialNumbers.fields.additional2.mask` — Optional laut Schema**\n\nAm Produkt gespeicherter Maskenhinweis für die Darstellung der Eingabe.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von mask aus den Feldmetadaten unter serialNumbers.fields der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;SYNTHETIC-MASK&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n- **Bedingung:** Wenn serialNumbers.fields in der gewählten Variante vorhanden ist; Fachbedingung: Die API definiert dafür keine allgemeine Regex- oder Maskensprache und interpretiert diesen Hinweis nicht als zusätzliche Eingabeprüfung. Den Hinweis nicht in eine erfundene Regex umwandeln; die dokumentierte DATE-Form und die Feldpflichten gelten unabhängig davon.\n\n\n\n#### bundleComponents[] · ProductSummary\n\n**`bundleComponents[].productId` — Pflicht**\n\nÖffentliche Kennung des bewusst gewählten Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von productId aus einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;51f866e9-2307-47c6-8de3-e6b1f24f8d31&quot;</code></span>\n- **Bei Auslassen:** productId gehört zu einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von bundleComponents[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`bundleComponents[].categoryId` — Optional laut Schema**\n\nÖffentliche Kennung der Produktkategorie.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von categoryId aus einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;40000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Keine Kategoriezuordnung in diesem Produkteintrag mitgeteilt; die Zuordnung nicht aus dem Produktnamen ableiten.\n\n**`bundleComponents[].name` — Optional laut Schema**\n\nAnzeigename des Produkts.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von name aus einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Bezeichnung&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n\n**`bundleComponents[].description` — Optional laut Schema**\n\nAnzeigebeschreibung des Produkts.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von description aus einem Produkteintrag der berechtigten Produktliste oder der Produktbeziehungen lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Erläuterung&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n\n\n\n#### durations[] · ProductDetailsResponse\n\n**`durations[].durationId` — Pflicht**\n\nKennung der bewusst ausgewählten Laufzeitoption des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von durationId im gewählten Eintrag von durations der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;17ef5d55-617c-429a-b523-637625346856&quot;</code></span>\n- **Bei Auslassen:** Jeder ausgegebene Laufzeiteintrag enthält durationId; ein Eintrag ohne dieses Feld ist unvollständig.\n- **Bedingung:** Pflicht innerhalb von durations[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`durations[].durationMonths` — Pflicht**\n\nDie zu dieser Laufzeitoption gehörende Dauer in Monaten.\n\n- **Format/Werte:** Ganzzahl\n- **Herkunft:** Den Wert von durationMonths im gewählten Eintrag von durations der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>24</code></span>\n- **Bei Auslassen:** Jeder ausgegebene Laufzeiteintrag enthält durationMonths; ein Eintrag ohne dieses Feld ist unvollständig.\n- **Bedingung:** Pflicht innerhalb von durations[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### payments[] · ProductDetailsResponse\n\n**`payments[].paymentId` — Pflicht**\n\nKennung der bewusst ausgewählten Zahlweise des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von paymentId im gewählten Eintrag von payments der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;95012da7-bd0c-4b4a-b181-a43bff8578d0&quot;</code></span>\n- **Bei Auslassen:** Jeder ausgegebene Zahlweiseneintrag enthält paymentId; ein Eintrag ohne dieses Feld ist unvollständig.\n- **Bedingung:** Pflicht innerhalb von payments[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`payments[].paymentType` — Pflicht**\n\nDas zu dieser Zahlweise gehörende Zahlungsintervall.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"MONTHLY\",\"QUARTERLY\",\"HALF_YEARLY\",\"YEARLY\"]\n- **Herkunft:** Den Wert von paymentType im gewählten Eintrag von payments der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;MONTHLY&quot;</code></span>\n- **Bei Auslassen:** Jeder ausgegebene Zahlweiseneintrag enthält paymentType; ein Eintrag ohne dieses Feld ist unvollständig.\n- **Bedingung:** Pflicht innerhalb von payments[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### promotions[] · PromotionOption\n\n**`promotions[].promotionId` — Pflicht**\n\nKennung der ausgewählten befristeten Promotion.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Den Wert von promotionId aus einem Eintrag in promotions der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;70000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** promotionId gehört zu einem Eintrag in promotions der Produktdetailantwort. Fehlt das Feld, ist dieses Antwortobjekt unvollständig; keinen Ersatzwert einsetzen.\n- **Bedingung:** Pflicht innerhalb von promotions[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`promotions[].name` — Optional laut Schema**\n\nAnzeigename der Promotion.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von name aus einem Eintrag in promotions der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Bezeichnung&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n\n**`promotions[].description` — Optional laut Schema**\n\nAnzeigebeschreibung der Promotion.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Den Wert von description aus einem Eintrag in promotions der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Synthetische Erläuterung&quot;</code></span>\n- **Bei Auslassen:** Kein zusätzlicher Anzeigetext für dieses Feld mitgeteilt; daraus keine fachliche Auswahl oder Eingabeanforderung ableiten.\n\n**`promotions[].discountPercent` — Optional laut Schema**\n\nAusgewiesener prozentualer Nachlass der Promotion. Der tatsächlich berechnete Preis kommt aus der Konditionsantwort.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von discountPercent aus einem Eintrag in promotions der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.00&quot;</code></span>\n- **Bei Auslassen:** Kein Nachlassprozentsatz mitgeteilt; den Zahlbetrag aus den berechneten Konditionen lesen.\n\n**`promotions[].durationMonths` — Optional laut Schema**\n\nAusgewiesene Dauer der Promotion in Monaten.\n\n- **Format/Werte:** Ganzzahl\n- **Herkunft:** Den Wert von durationMonths aus einem Eintrag in promotions der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>24</code></span>\n- **Bei Auslassen:** Keine Promotionsdauer mitgeteilt; sie nicht aus dem Auswahlzeitraum oder der Vertragslaufzeit berechnen.\n\n**`promotions[].setupCharge` — Optional laut Schema**\n\nAusgewiesenes einmaliges Einrichtungsentgelt mit Währung und Steuerbasis.\n\n- **Format/Werte:** Objekt\n- **Herkunft:** Den Wert von setupCharge aus einem Eintrag in promotions der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>{&quot;amount&quot;:&quot;19.95&quot;,&quot;basis&quot;:&quot;ONE_OFF&quot;,&quot;currency&quot;:&quot;EUR&quot;,&quot;taxBasis&quot;:&quot;GROSS&quot;}</code></span>\n- **Bei Auslassen:** Kein eigenes Einrichtungsentgelt dieser Promotion mitgeteilt; das tatsächlich berechnete Entgelt aus den Konditionen lesen.\n\n**`promotions[].selectionFrom` — Optional laut Schema**\n\nAusgewiesener Beginn des Auswahlzeitraums dieser Promotion.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den Wert von selectionFrom aus einem Eintrag in promotions der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Kein Beginn des Auswahlzeitraums mitgeteilt; daraus keine unbegrenzte oder bereits zulässige Auswahl ableiten.\n\n**`promotions[].selectionTo` — Optional laut Schema**\n\nAusgewiesenes Ende des Auswahlzeitraums dieser Promotion.\n\n- **Format/Werte:** Zeichenfolge; Format: date\n- **Herkunft:** Den Wert von selectionTo aus einem Eintrag in promotions der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;2026-11-01&quot;</code></span>\n- **Bei Auslassen:** Kein Ende des Auswahlzeitraums mitgeteilt; daraus keine unbegrenzte Gültigkeit ableiten.\n\n**`promotions[].renewalPromotion` — Optional laut Schema**\n\nMitgeteilte Zuordnung der Promotion zu einer Verlängerung. Daraus folgt kein zusätzlicher Abschlussweg dieses Profils.\n\n- **Format/Werte:** Boolean\n- **Herkunft:** Den Wert von renewalPromotion aus einem Eintrag in promotions der Produktdetailantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>false</code></span>\n- **Bei Auslassen:** Keine Zuordnung zu einer Verlängerung mitgeteilt; daraus keine Zulässigkeit für einen Neuabschluss ableiten.\n\n\n\n#### promotions[].setupCharge · ConditionAmount\n\n**`promotions[].setupCharge.amount` — Pflicht**\n\nDer ausgegebene Geldbetrag als Dezimalzeichenfolge. Den Betrag immer mit den übrigen Geldmetadaten auswerten.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^-?[0-9]+(?:\\\\.[0-9]+)?(?![\\\\s\\\\S])\"\n- **Herkunft:** Den Wert von amount im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;10.50&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält amount; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von promotions[].setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`promotions[].setupCharge.currency` — Pflicht**\n\nWährung, auf die sich der Betrag bezieht.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"EUR\"]\n- **Herkunft:** Den Wert von currency im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;EUR&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält currency; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von promotions[].setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`promotions[].setupCharge.basis` — Pflicht**\n\nZahlungsbezug des Betrags, etwa je Zahlungsintervall oder einmalig. Ohne diesen Bezug sind Beträge nicht sinnvoll vergleichbar.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"ANNUAL\",\"PAYMENT_INTERVAL\",\"ONE_OFF\",\"PRORATION\"]\n- **Herkunft:** Den Wert von basis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;PAYMENT_INTERVAL&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält basis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von promotions[].setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`promotions[].setupCharge.taxBasis` — Pflicht**\n\nSteuerliche Darstellung des Betrags. Nicht ohne passende Grundlage zwischen Netto und Brutto umrechnen.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NET\",\"GROSS\",\"NO_TAX\"]\n- **Herkunft:** Den Wert von taxBasis im betreffenden Betragsobjekt der Produktkonditions-, Vorgangs- oder Vertragsantwort lesen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;GROSS&quot;</code></span>\n- **Bei Auslassen:** Jedes ausgegebene Betragsobjekt enthält taxBasis; ohne dieses Feld ist der Betrag unvollständig. Keinen Wert selbst ergänzen.\n- **Bedingung:** Pflicht innerhalb von promotions[].setupCharge, wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n### RiskDecisionRequest\n\n**`decidedByAccountId` — Pflicht**\n\nKennung des aktiven menschlichen Entscheiders, der diese Fachentscheidung treffen darf. Eine Verkäuferkennung allein genügt nicht.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Die Kennung des aktiven zugehörigen Menschen, der die konkrete Entscheidung treffen darf; über die eingerichtete Benutzerzuordnung bereitstellen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;693ce612-51cd-4b82-a9b3-8138851b573e&quot;</code></span>\n- **Bei Auslassen:** Für diese Entscheidung erforderlich; fehlt decidedByAccountId, wird der Aufruf als ungültig abgewiesen. API-Zugang und Verkäufer werden nicht automatisch als Entscheider eingesetzt.\n- **Bedingung:** Fachbedingung: Die konkrete Aktionsberechtigung wird auch bei Wiederholung geprüft.\n\n**`riskAccepted` — Pflicht**\n\nDie bewusste Übernahme des im geeigneten Vorgang vorgelegten Risikos durch den benannten berechtigten Entscheider.\n\n- **Format/Werte:** Boolean; Fester Wert: true\n- **Herkunft:** Die ausdrücklich getroffene Risikoentscheidung des benannten berechtigten Menschen.\n- **Beispiel:** <span class=\"partner-field\"><code>true</code></span>\n- **Bei Auslassen:** Bei der Risikoentscheidung ausdrücklich true angeben. Ohne riskAccepted=true wird der Aufruf als ungültig abgewiesen.\n- **Bedingung:** Fachbedingung: Nur für einen geeigneten Vorgang mit bestätigter zugehöriger Unterschrift und Endfassung; unklare technische Zustände werden dadurch nicht geheilt.\n\n\n\n### SalesContextResponse\n\n**`sellerAccounts` — Pflicht**\n\nDie aktuell auswählbaren Verkäufer mit Kennung und Anzeigename.\n\n- **Format/Werte:** Liste; Elemente: SellerSummary\n- **Herkunft:** Aus der Antwort von GET /sales-context.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;displayName&quot;:&quot;Ada Beispiel&quot;,&quot;sellerAccountId&quot;:&quot;20000000-0000-4000-8000-000000000001&quot;}]</code></span>\n- **Bei Auslassen:** GET /sales-context liefert sellerAccounts als Liste, gegebenenfalls leer. Eine fehlende Liste ist keine bestätigte leere Auswahl.\n\n**`branches` — Pflicht**\n\nDie aktuell auswählbaren Filialen mit Kennung und Anzeigename.\n\n- **Format/Werte:** Liste; Elemente: BranchSummary\n- **Herkunft:** Aus der Antwort von GET /sales-context.\n- **Beispiel:** <span class=\"partner-field\"><code>[{&quot;branchId&quot;:&quot;30000000-0000-4000-8000-000000000001&quot;,&quot;displayName&quot;:&quot;Testfiliale Nord&quot;}]</code></span>\n- **Bei Auslassen:** GET /sales-context liefert branches als Liste, gegebenenfalls leer. Eine fehlende Liste ist keine bestätigte leere Auswahl.\n\n\n\n#### sellerAccounts[] · SellerSummary\n\n**`sellerAccounts[].sellerAccountId` — Pflicht**\n\nKennung des bewusst ausgewählten Verkäufers dieses Verkaufs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus der Antwort von GET /sales-context.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;20000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Jeder ausgegebene Eintrag enthält sellerAccountId; fehlt das Feld, ist der Auswahleintrag unvollständig.\n- **Bedingung:** Pflicht innerhalb von sellerAccounts[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`sellerAccounts[].displayName` — Pflicht**\n\nAnzeigename für die bewusste Auswahl. Für spätere Requests die zugehörige Kennung verwenden.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Aus der Antwort von GET /sales-context.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Ada Beispiel&quot;</code></span>\n- **Bei Auslassen:** Jeder ausgegebene Eintrag enthält displayName; fehlt das Feld, ist der Auswahleintrag unvollständig.\n- **Bedingung:** Pflicht innerhalb von sellerAccounts[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n#### branches[] · BranchSummary\n\n**`branches[].branchId` — Pflicht**\n\nKennung der gewählten Filiale. Eine explizite ungültige Filiale wird nicht durch eine andere ersetzt.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus der Antwort von GET /sales-context.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;30000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Jeder ausgegebene Eintrag enthält branchId; fehlt das Feld, ist der Auswahleintrag unvollständig.\n- **Bedingung:** Pflicht innerhalb von branches[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n**`branches[].displayName` — Pflicht**\n\nAnzeigename für die bewusste Auswahl. Für spätere Requests die zugehörige Kennung verwenden.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Aus der Antwort von GET /sales-context.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Ada Beispiel&quot;</code></span>\n- **Bei Auslassen:** Jeder ausgegebene Eintrag enthält displayName; fehlt das Feld, ist der Auswahleintrag unvollständig.\n- **Bedingung:** Pflicht innerhalb von branches[], wenn dieses Objekt beziehungsweise Listenelement vorhanden ist\n\n\n\n### Parameter und Header\n\n#### Parameter · Parameter\n\n**`header.Idempotency-Key` — Pflicht**\n\nIhre Kennung für dieselbe fachliche Einreichung oder Entscheidung. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^[!-~]+$\"; Mindestlänge: 1; Höchstlänge: 200\n- **Herkunft:** Einmal je beabsichtigter Einreichung beziehungsweise Entscheidung im Partnersystem festlegen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;synthetic-guide-create-001&quot;</code></span>\n- **Bei Auslassen:** Für die beschriebenen fachlichen Schreibaufrufe verpflichtend; ohne Idempotency-Key wird der Aufruf als ungültig abgewiesen. POST /customers/search benötigt ihn nicht.\n- **Bedingung:** Fachbedingung: Bei identischer Wiederholung dieselbe Kennung und denselben Inhalt senden; geänderter Inhalt kann einen 409-Konflikt auslösen.\n\n**`header.traceparent` — Optional laut Schema**\n\nOptionale W3C-Tracekontextangabe für die Diagnose. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Nur einen tatsächlich vorhandenen gültigen Tracekontext des aufrufenden Systems übernehmen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01&quot;</code></span>\n- **Bei Auslassen:** Es wird kein eigener Tracekontext übermittelt; daraus keine Trace-Id-Ausgabe voraussetzen.\n- **Bedingung:** Fachbedingung: Die Angabe erteilt keine Berechtigung und garantiert keinen Diagnoseexport.\n\n**`header.X-Correlation-Id` — Optional laut Schema**\n\nOptionale Korrelationskennung zur Zuordnung zusammengehöriger Aufrufe. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Eine gültige Diagnosekennung des Partnersystems verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;synthetic-correlation-001&quot;</code></span>\n- **Bei Auslassen:** Fehlt X-Correlation-Id oder ist die Angabe ungültig, verwendet SmartPay eine neue Korrelationskennung. Den tatsächlich ausgegebenen Antwortwert auswerten.\n- **Bedingung:** Fachbedingung: Keine Token, Kundensuchwerte oder Berechtigungsbehauptungen in diese Kennung aufnehmen.\n\n**`path.contractId` — Pflicht**\n\nKennung des konkreten Vertrags, den Sie berechtigt lesen möchten.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus der Einreichungs- oder Vorgangsantwort übernehmen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** Die Vertragskennung muss im Ressourcenpfad stehen; Vertragsnummer und Kundenkennung ersetzen sie nicht.\n- **Bedingung:** Fachbedingung: Die Berechtigung wird für genau diesen Vertrag geprüft.\n\n**`path.documentId` — Pflicht**\n\nKennung genau der gewünschten PDF-Fassung.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus den für den betreffenden Vertrag beziehungsweise Vorgang ausgegebenen Dokumentmetadaten übernehmen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3004&quot;</code></span>\n- **Bei Auslassen:** Die Dokumentkennung muss im Ressourcenpfad stehen; ohne sie wird keine neueste oder beliebige PDF-Fassung ausgewählt.\n- **Bedingung:** Fachbedingung: Mit dem zugehörigen Vertrag verwenden; geänderte Bytes haben eine andere Kennung.\n\n**`path.operationId` — Pflicht**\n\nKennung des konkreten Vertragsvorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus der Einreichungsantwort oder dem Wiederfinden über externalReference übernehmen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;a8b2d351-71c6-4a85-9b24-2044951c3001&quot;</code></span>\n- **Bei Auslassen:** Die Vorgangskennung muss im Ressourcenpfad stehen; Geschäftsreferenz und Vertragsnummer ersetzen sie nicht.\n- **Bedingung:** Fachbedingung: Nur eigene berechtigt sichtbare Vorgänge lesen oder darüber zulässige Entscheidungen treffen.\n\n**`query.externalReference` — Pflicht**\n\nGeschäftsreferenz, über die Sie Ihren eigenen Vorgang wiederfinden.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** Die bei der Einreichung verwendete externalReference unverändert übernehmen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;synthetic-guide-new-001&quot;</code></span>\n- **Bei Auslassen:** Die unveränderte Geschäftsreferenz muss für diesen Wiederfindeaufruf als externalReference übermittelt werden; ohne sie ist der Aufruf unvollständig.\n- **Bedingung:** Fachbedingung: Keine neue Referenz erzeugen, um einen unklaren bisherigen Einreichungsausgang zu umgehen.\n\n**`path.productId` — Pflicht**\n\nKennung des bewusst ausgewählten Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus der berechtigten Produktliste übernehmen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;51f866e9-2307-47c6-8de3-e6b1f24f8d31&quot;</code></span>\n- **Bei Auslassen:** Die Produktkennung muss im Ressourcenpfad stehen; ohne sie ist dieser Aufruf unvollständig.\n- **Bedingung:** Fachbedingung: Die Listung allein bestätigt noch keine zulässige klassische Einzelvertragsbestellung.\n\n**`path.categoryId` — Pflicht**\n\nKennung der bewusst gewählten Produktkategorie.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Aus GET /categories übernehmen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;40000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Die Kategoriekennung muss im Ressourcenpfad stehen; ohne sie ist dieser Aufruf unvollständig.\n\n**`query.usage` — Pflicht**\n\nVerwendungszweck der Produktabfrage für den angebotenen Einzel-Neuvertrag.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"NEW_CONTRACT\"]\n- **Herkunft:** Für diesen öffentlichen Ablauf NEW_CONTRACT verwenden.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;NEW_CONTRACT&quot;</code></span>\n- **Bei Auslassen:** Es gibt keinen automatisch angenommenen Verwendungszweck der Produktabfrage.\n- **Bedingung:** Fachbedingung: Dieser Produktdetailpfad beschreibt den klassischen Neuvertrag; andere Abschlussarten werden dadurch nicht freigegeben.\n\n**`query.durationId` — Optional laut Schema**\n\nKennung der bewusst ausgewählten Laufzeitoption des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Laufzeitkennung aus ProductDetailsResponse.durations bewusst auswählen; Konditions- und Vertragsantworten nennen die verwendete Option.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;17ef5d55-617c-429a-b523-637625346856&quot;</code></span>\n- **Bei Auslassen:** Solange die Konditionsauswahl nicht vollständig ist, liefert die Abfrage Produktinformationen und Optionen statt berechneter Konditionen.\n- **Bedingung:** Fachbedingung: Für berechnete Konditionen durationId, paymentId und priceType bewusst wählen. Bei priceType=PROMO_TEMP wird zusätzlich eine passende befristete Promotion benötigt.\n\n**`query.paymentId` — Optional laut Schema**\n\nKennung der bewusst ausgewählten Zahlweise des Produkts.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Zahlweisenkennung aus ProductDetailsResponse.payments bewusst auswählen; Konditions- und Vertragsantworten nennen die verwendete Option.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;95012da7-bd0c-4b4a-b181-a43bff8578d0&quot;</code></span>\n- **Bei Auslassen:** Solange die Konditionsauswahl nicht vollständig ist, liefert die Abfrage Produktinformationen und Optionen statt berechneter Konditionen.\n- **Bedingung:** Fachbedingung: Für berechnete Konditionen durationId, paymentId und priceType bewusst wählen. Bei priceType=PROMO_TEMP wird zusätzlich eine passende befristete Promotion benötigt.\n\n**`query.priceType` — Optional laut Schema**\n\nDie für das Produkt angebotene und bewusst ausgewählte Preisart.\n\n- **Format/Werte:** Zeichenfolge; Werte: [\"AGB\",\"PROMO\",\"PROMO_TEMP\"]\n- **Herkunft:** Eine der in ProductDetailsResponse.priceTypes angebotenen Preisarten bewusst auswählen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;AGB&quot;</code></span>\n- **Bei Auslassen:** Solange die Konditionsauswahl nicht vollständig ist, liefert die Abfrage Produktinformationen und Optionen statt berechneter Konditionen.\n- **Bedingung:** Fachbedingung: Für berechnete Konditionen durationId, paymentId und priceType bewusst wählen. Bei priceType=PROMO_TEMP wird zusätzlich eine passende befristete Promotion benötigt.\n\n**`query.promotionId` — Optional laut Schema**\n\nKennung der ausgewählten befristeten Promotion.\n\n- **Format/Werte:** Zeichenfolge; Format: uuid\n- **Herkunft:** Passende Promotionskennung aus ProductDetailsResponse.promotions auswählen; Antworten weisen die zugeordnete Promotion aus.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;70000000-0000-4000-8000-000000000001&quot;</code></span>\n- **Bei Auslassen:** Solange die Konditionsauswahl nicht vollständig ist, liefert die Abfrage Produktinformationen und Optionen statt berechneter Konditionen.\n- **Bedingung:** Fachbedingung: Für berechnete Konditionen durationId, paymentId und priceType bewusst wählen. Bei priceType=PROMO_TEMP wird zusätzlich eine passende befristete Promotion benötigt.\n\n**`header.SmartPay-Signature` — Pflicht**\n\nSignaturheader des ausgehenden Partnercallbacks mit Zeitstempel und HMAC-SHA256 über Zeitstempel und exakte Bodybytes.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^t=[0-9]+,v1=[0-9a-f]{64}$\"\n- **Herkunft:** Unverändert aus dem empfangenen HTTP-Header SmartPay-Signature lesen und mit dem separaten Resellerschlüssel prüfen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;t=1792836000,v1=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;</code></span>\n- **Bei Auslassen:** Ohne gültigen Signaturheader die Nachricht nicht als authentifizierten SmartPay-Callback verarbeiten.\n- **Bedingung:** Fachbedingung: HMAC über UTF8(t + '.') gefolgt von den exakten Bodybytes konstantzeitlich prüfen; ein enges Zeitfenster verwenden und anschließend nach eventId deduplizieren. Wiederzustellungen haben frischen Zeitstempel und Signatur bei gleichbleibendem Ereignis und Body.\n\n**`header.SmartPay-Signature` — Pflicht**\n\nSignaturheader des ausgehenden Partnercallbacks mit Zeitstempel und HMAC-SHA256 über Zeitstempel und exakte Bodybytes.\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^t=[0-9]+,v1=[0-9a-f]{64}$\"\n- **Herkunft:** Unverändert aus dem empfangenen HTTP-Header SmartPay-Signature lesen und mit dem separaten Resellerschlüssel prüfen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;t=1792836000,v1=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa&quot;</code></span>\n- **Bei Auslassen:** Ohne gültigen Signaturheader die Nachricht nicht als authentifizierten SmartPay-Callback verarbeiten.\n- **Bedingung:** Fachbedingung: HMAC über UTF8(t + '.') gefolgt von den exakten Bodybytes konstantzeitlich prüfen; ein enges Zeitfenster verwenden und anschließend nach eventId deduplizieren. Wiederzustellungen haben frischen Zeitstempel und Signatur bei gleichbleibendem Ereignis und Body.\n\n\n\n#### Antwortheader · Header\n\n**`response-header.CorrelationId` — Pflicht**\n\nTatsächlich verwendete Korrelationskennung des Aufrufs. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^[A-Za-z0-9._:-]{1,100}$\"; Höchstlänge: 100\n- **Herkunft:** Aus dem Antwortheader X-Correlation-Id übernehmen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;synthetic-correlation-001&quot;</code></span>\n- **Bei Auslassen:** Der beschriebene API-Aufruf liefert die tatsächlich verwendete Korrelationskennung. Eine fehlende Kennung nicht aus Kundendaten ergänzen.\n\n**`response-header.RequestId` — Pflicht**\n\nSupportkennung dieses HTTP-Aufrufs. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^[A-Za-z0-9._:-]{1,100}$\"; Höchstlänge: 100\n- **Herkunft:** Aus dem Antwortheader X-Request-Id; in Fehlerantworten auch requestId.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;synthetic-request-001&quot;</code></span>\n- **Bei Auslassen:** Der beschriebene API-Aufruf liefert diese Supportkennung auch bei Fehlern und Wiederholungen; eine fehlende Kennung nicht durch Vertrags- oder Geschäftsreferenzen ersetzen.\n- **Bedingung:** Fachbedingung: Bei Replay gehört die Kennung zum aktuellen Aufruf, nicht zur früheren Annahmeantwort.\n\n**`response-header.RetryAfter` — Optional laut Schema**\n\nMindestwartezeit in ganzen Sekunden vor einem erneuten Aufruf nach technischer Überlast oder vorübergehend ausgefallenem Zugriffsschutz.\n\n- **Format/Werte:** Zeichenfolge; Höchstlänge: 100\n- **Herkunft:** Aus dem Antwortheader Retry-After.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;1&quot;</code></span>\n- **Bei Auslassen:** Bei den dokumentierten Schutzantworten 429 und PROTECTION_UNAVAILABLE/503 wird dieser Header mitgeliefert.\n\n**`response-header.TraceId` — Optional laut Schema**\n\nZusätzliche Tracekennung, soweit eine tatsächliche Diagnosezuordnung besteht. Siehe [HTTP-Header: sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose).\n\n- **Format/Werte:** Zeichenfolge; Muster: \"^(?!0{32}$)[0-9a-f]{32}$\"; Mindestlänge: 32; Höchstlänge: 32\n- **Herkunft:** Aus dem Antwortheader X-Trace-Id übernehmen.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;4bf92f3577b34da6a3ce929d0e0e4736&quot;</code></span>\n- **Bei Auslassen:** Es ist keine Tracekennung mitgeteilt; keine eigene aus requestId oder Vertrag erzeugen.\n- **Bedingung:** Fachbedingung: Die Antwort gibt diesen Header nur bei tatsächlich vorhandenem gültigem Tracekontext aus.\n\n**`response-header.BearerChallenge` — Pflicht**\n\nHinweis auf die notwendige Bearer-Authentifizierung bei einer 401-Antwort.\n\n- **Format/Werte:** Zeichenfolge; Mindestlänge: 1\n- **Herkunft:** Aus dem Antwortheader WWW-Authenticate.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;Bearer error=\\&quot;invalid_token\\&quot;&quot;</code></span>\n- **Bei Auslassen:** Auslassen ist hier nicht als Verzicht auf Authentifizierung festgelegt.\n- **Bedingung:** Fachbedingung: Den Zugang über den eingerichteten Identitätsdienst erneuern; keine API-Tokenroute aus diesem Header ableiten.\n\n**`response-header.OperationLocation` — Pflicht**\n\nAdresse des zugehörigen Vertragsvorgangs.\n\n- **Format/Werte:** Zeichenfolge; Format: uri-reference\n- **Herkunft:** Aus dem Location-Header der entsprechenden erfolgreichen Antwort.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;/v2/contract-operations/a8b2d351-71c6-4a85-9b24-2044951c3001&quot;</code></span>\n- **Bei Auslassen:** Auslassen ist nicht als anderer Vorgangsort festgelegt.\n- **Bedingung:** Fachbedingung: Die Adresse ist kein zusätzlicher Abschluss- oder Unterzeichnungsaufruf.\n\n**`response-header.ContractLocation` — Pflicht**\n\nAdresse des zugehörigen Vertrags.\n\n- **Format/Werte:** Zeichenfolge; Format: uri-reference\n- **Herkunft:** Aus dem Location-Header der entsprechenden erfolgreichen Antwort.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;/v2/contracts/73530a36-0c02-4a38-9292-7a2b185cc9d0&quot;</code></span>\n- **Bei Auslassen:** Auslassen ist nicht als anderer Vertragsort festgelegt.\n- **Bedingung:** Fachbedingung: Beim Zusammensetzen mit dem bereitgestellten Ursprung die Basis /v2 nur einmal verwenden.\n\n**`response-header.Location` — Optional laut Schema**\n\nAdresse des gespeicherten Aktionsvorgangs.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** HTTP-Antwort auf diese Vertragsaktion.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;/v2/contract-actions/10000000-0000-4000-8000-000000000040&quot;</code></span>\n- **Bei Auslassen:** Ohne diesen Header die operationId aus dem Antwortbody verwenden.\n\n**`response-header.Location` — Optional laut Schema**\n\nAdresse des gespeicherten Aktionsvorgangs.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** HTTP-Antwort auf diese Vertragsaktion.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;/v2/contract-actions/10000000-0000-4000-8000-000000000040&quot;</code></span>\n- **Bei Auslassen:** Ohne diesen Header die operationId aus dem Antwortbody verwenden.\n\n**`response-header.Location` — Optional laut Schema**\n\nAdresse des gespeicherten Aktionsvorgangs.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** HTTP-Antwort auf diese Vertragsaktion.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;/v2/contract-actions/10000000-0000-4000-8000-000000000040&quot;</code></span>\n- **Bei Auslassen:** Ohne diesen Header die operationId aus dem Antwortbody verwenden.\n\n**`response-header.Location` — Optional laut Schema**\n\nAdresse des gespeicherten Aktionsvorgangs.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** HTTP-Antwort auf diese Vertragsaktion.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;/v2/contract-actions/10000000-0000-4000-8000-000000000040&quot;</code></span>\n- **Bei Auslassen:** Ohne diesen Header die operationId aus dem Antwortbody verwenden.\n\n**`response-header.Location` — Optional laut Schema**\n\nAdresse des gespeicherten Aktionsvorgangs.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** HTTP-Antwort auf diese Vertragsaktion.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;/v2/contract-actions/10000000-0000-4000-8000-000000000040&quot;</code></span>\n- **Bei Auslassen:** Ohne diesen Header die operationId aus dem Antwortbody verwenden.\n\n**`response-header.Location` — Optional laut Schema**\n\nAdresse des gespeicherten Aktionsvorgangs.\n\n- **Format/Werte:** Zeichenfolge\n- **Herkunft:** HTTP-Antwort auf diese Vertragsaktion.\n- **Beispiel:** <span class=\"partner-field\"><code>&quot;/v2/contract-actions/10000000-0000-4000-8000-000000000040&quot;</code></span>\n- **Bei Auslassen:** Ohne diesen Header die operationId aus dem Antwortbody verwenden.\n\n\n",
    "summary": "Vertrag einreichen, Unterschrift abwarten und Vertrags-PDF abrufen",
    "title": "SmartPay Partner-API · UC-V2-001",
    "version": "0.7-draft"
  },
  "openapi": "3.1.2",
  "paths": {
    "/categories": {
      "get": {
        "description": "Lesen Sie Ihre verfügbaren Produktkategorien und wählen Sie eine categoryId.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "listCategories",
        "parameters": [
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "guide": {
                    "$ref": "#/components/examples/GuideCategories"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/CategoriesResponse"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "X-Correlation-Id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/RequestId"
              },
              "X-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Kategorien lesen"
      }
    },
    "/categories/{categoryId}/products": {
      "get": {
        "description": "Lesen Sie die sichtbaren aktiven Produkte der gewählten Kategorie. Verwenden Sie für diesen Leitfaden ein nichtmobiles Einzelprodukt ohne Zusatzprodukt-/Bundleabschluss.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "listCategoryProducts",
        "parameters": [
          {
            "$ref": "#/components/parameters/categoryId"
          },
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "guide": {
                    "$ref": "#/components/examples/GuideProducts"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/CategoryProductsResponse"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "X-Correlation-Id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/RequestId"
              },
              "X-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "404": {
            "$ref": "#/components/responses/PartnerNotFound"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Produkte einer Kategorie lesen"
      }
    },
    "/contract-actions/{operationId}": {
      "get": {
        "description": "Lesen Sie den gespeicherten Status Ihrer bereits angenommenen Vertragsaktion unter dem vom Aktionsaufruf zurückgegebenen Location-Pfad. Dieser GET löst keine Fachwirkung, Wiederholung, Alt-Abfrage oder Nachverarbeitung aus. COMPLETED bestätigt ausschließlich die gespeicherte Ausführung dieser Aktion.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "getContractActionOperation",
        "parameters": [
          {
            "$ref": "#/components/parameters/operationId"
          },
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "ReactivatedContractAction": {
                    "$ref": "#/components/examples/ReactivatedContractAction"
                  },
                  "TerminatedContractAction": {
                    "$ref": "#/components/examples/TerminatedContractAction"
                  },
                  "WithdrawnContractAction": {
                    "$ref": "#/components/examples/WithdrawnContractAction"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ContractActionOperation"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "X-Correlation-Id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/RequestId"
              },
              "X-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "404": {
            "$ref": "#/components/responses/PartnerNotFound"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Gespeicherte Vertragsaktion lesen"
      }
    },
    "/contract-operations": {
      "get": {
        "description": "Finden Sie Ihren Vorgang über die unveränderte externalReference wieder, insbesondere nach einer unklaren Einreichungsantwort. Eine leere Antwort beweist nicht, dass ein gleichzeitiger Aufruf niemals angenommen wurde.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)\n\n[Ablehnung der Vertragsvorbereitung](#description/ablehnung-der-vertragsvorbereitung)",
        "operationId": "findContractOperations",
        "parameters": [
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          },
          {
            "$ref": "#/components/parameters/ExternalReferenceQuery"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "empty": {
                    "$ref": "#/components/examples/EmptyOperationSearch"
                  },
                  "guide": {
                    "$ref": "#/components/examples/GuideReferenceSearch"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ContractOperationsResponse"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "X-Correlation-Id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/RequestId"
              },
              "X-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Vorgang über Geschäftsreferenz finden"
      }
    },
    "/contract-operations/{operationId}": {
      "get": {
        "description": "Lesen Sie den aktuellen Bearbeitungsstand Ihres Neuvertragsvorgangs. Dieser GET startet keine Unterschrift oder Vertragsverarbeitung. COMPLETED bestätigt den Vertragsabschluss. Andere Zustände und ihre Hindernisse bleiben sichtbar.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)\n\n[Ablehnung der Vertragsvorbereitung](#description/ablehnung-der-vertragsvorbereitung)",
        "operationId": "getContractOperation",
        "parameters": [
          {
            "$ref": "#/components/parameters/operationId"
          },
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "rejectedPreparation": {
                    "$ref": "#/components/examples/RejectedPreparation"
                  },
                  "singleContractCompleted": {
                    "$ref": "#/components/examples/SingleContractCompleted"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ContractOperation"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "X-Correlation-Id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/RequestId"
              },
              "X-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "404": {
            "$ref": "#/components/responses/PartnerNotFound"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Gespeicherten Vorgang lesen"
      }
    },
    "/contract-operations/{operationId}/activate-on-own-risk": {
      "post": {
        "description": "Nur für einen geeigneten zur Risikoentscheidung vorgelegten eigenen Vorgang. Ein berechtigter aktiver Entscheider muss die Risikoübernahme bewusst bestätigen. Aktuelle Unterschrift und unterschriebene Endfassung bleiben erforderlich. Verkäufer und Filiale werden nicht geändert. Die Antwort nennt den tatsächlich erreichten Stand; die Entscheidung bedeutet nicht automatisch COMPLETED. Idempotency-Key ist verpflichtend. Halten Sie Key, Ziel und Inhalt für dieselbe Aktion und deren Wiederholung unverändert; bei der Vertragsanlage auch die externalReference. Ein identischer Replay erzeugt keine zweite Wirkung. Geänderter Inhalt bei gebundenem Key oder widersprüchlicher Referenz kann 409 ergeben. Die erste Annahmeantwort ersetzt nicht den aktuellen Vorgangsstatus.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "activateContractOperationOnOwnRisk",
        "parameters": [
          {
            "$ref": "#/components/parameters/operationId"
          },
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "riskDecision": {
                  "$ref": "#/components/examples/RiskDecision"
                }
              },
              "schema": {
                "$ref": "#/components/schemas/RiskDecisionRequest"
              }
            }
          },
          "description": "Fachliche Eingabe gemäß Schema; Ressourcen bewusst wählen.",
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/SavedRiskDecision"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "404": {
            "$ref": "#/components/responses/PartnerNotFound"
          },
          "409": {
            "$ref": "#/components/responses/PartnerConflict"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Geeigneten Risikovorgang bewusst freigeben"
      }
    },
    "/contract-operations/{operationId}/discard": {
      "post": {
        "description": "Verwerfen Sie einen noch zulässig verwerfbaren eigenen Vorgang mit einem berechtigten Entscheider. HTTP200 mit DISCARDED bestätigt das Verwerfen; HTTP202 bleibt ausstehend. Dies ist keine Kündigung oder Rückabwicklung eines bereits erfüllten Vertrags. Idempotency-Key ist verpflichtend. Halten Sie Key, Ziel und Inhalt für dieselbe Aktion und deren Wiederholung unverändert; bei der Vertragsanlage auch die externalReference. Ein identischer Replay erzeugt keine zweite Wirkung. Geänderter Inhalt bei gebundenem Key oder widersprüchlicher Referenz kann 409 ergeben. Die erste Annahmeantwort ersetzt nicht den aktuellen Vorgangsstatus.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "discardContractOperation",
        "parameters": [
          {
            "$ref": "#/components/parameters/operationId"
          },
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "discardDecision": {
                  "$ref": "#/components/examples/DiscardDecision"
                }
              },
              "schema": {
                "$ref": "#/components/schemas/DiscardRequest"
              }
            }
          },
          "description": "Fachliche Eingabe gemäß Schema; Ressourcen bewusst wählen.",
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/DiscardedOperation"
          },
          "202": {
            "$ref": "#/components/responses/AcceptedDiscard"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "404": {
            "$ref": "#/components/responses/PartnerNotFound"
          },
          "409": {
            "$ref": "#/components/responses/PartnerConflict"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Geeigneten Vorgang bewusst verwerfen"
      }
    },
    "/contracts": {
      "post": {
        "description": "Reichen Sie den Vertrag mit Neukundendaten oder einer bewusst gewählten Bestandskundenkennung ein. HTTP201 bestätigt die Annahme, nicht den erfolgreichen Vertragsabschluss. SmartPay versendet die Einladung zur Unterschrift und verarbeitet die bestätigte Unterschrift selbständig weiter. Lesen Sie anschließend den Vorgangsstand. Bei optionaler callbackUrl werden Empfänger und Schlüsselvoraussetzungen vor der ersten Annahme geprüft; ohne URL entfällt diese Voraussetzung. Idempotency-Key ist verpflichtend. Halten Sie Key, Ziel und Inhalt für dieselbe Aktion und deren Wiederholung unverändert; bei der Vertragsanlage auch die externalReference. Ein identischer Replay erzeugt keine zweite Wirkung. Geänderter Inhalt bei gebundenem Key oder widersprüchlicher Referenz kann 409 ergeben. Die erste Annahmeantwort ersetzt nicht den aktuellen Vorgangsstatus.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)\n\n[Ablehnung der Vertragsvorbereitung](#description/ablehnung-der-vertragsvorbereitung)",
        "operationId": "createContract",
        "parameters": [
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "existingCustomerA": {
                  "$ref": "#/components/examples/MinimalExistingCustomerA"
                },
                "guide": {
                  "$ref": "#/components/examples/GuideCreateRequest"
                },
                "newCustomerA": {
                  "$ref": "#/components/examples/MinimalNewContractA"
                }
              },
              "schema": {
                "$ref": "#/components/schemas/CreateContractRequest"
              }
            }
          },
          "description": "Fachliche Eingabe gemäß Schema; Ressourcen bewusst wählen.",
          "required": true
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/ExistingOperation"
          },
          "201": {
            "$ref": "#/components/responses/CreatedContract"
          },
          "400": {
            "content": {
              "application/json": {
                "examples": {
                  "InvalidCustomerAddress": {
                    "$ref": "#/components/examples/InvalidCustomerAddress"
                  },
                  "InvalidCustomerIban": {
                    "$ref": "#/components/examples/InvalidCustomerIban"
                  },
                  "MissingWithdrawalSelection": {
                    "$ref": "#/components/examples/MissingWithdrawalSelection"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "X-Correlation-Id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/RequestId"
              },
              "X-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "404": {
            "$ref": "#/components/responses/PartnerNotFound"
          },
          "409": {
            "$ref": "#/components/responses/PartnerConflict"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Klassischen Einzel-Neuvertrag einreichen"
      }
    },
    "/contracts/{contractId}": {
      "get": {
        "description": "Lesen Sie die gespeicherten Vertragswerte und verfügbaren Dokumentreferenzen. Nicht ausgegebene historische Angaben bleiben unbekannt. Vertragsstatus und Bearbeitungsstatus sind unterschiedliche Angaben.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "getContract",
        "parameters": [
          {
            "$ref": "#/components/parameters/contractId"
          },
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "guide": {
                    "$ref": "#/components/examples/GuideContract"
                  },
                  "storedRead": {
                    "$ref": "#/components/examples/StoredContractRead"
                  }
                },
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Contract"
                    },
                    {
                      "not": {
                        "required": [
                          "mobileActivationMaterial"
                        ]
                      }
                    }
                  ]
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "X-Correlation-Id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/RequestId"
              },
              "X-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "404": {
            "$ref": "#/components/responses/PartnerNotFound"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Gespeicherten Vertrag lesen"
      }
    },
    "/contracts/{contractId}/documents/{documentId}": {
      "get": {
        "description": "Laden Sie die dem Vertrag zugeordnete konkrete PDF-Fassung. Die Antwort enthält application/pdf; vergleichen Sie die empfangenen Bytes mit dem ausgewiesenen sha256. Fehlende Berechtigung, noch nicht verfügbare beziehungsweise fehlende Fassung und technische Speicherfehler sind unterschiedliche Fehlerfälle.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "getContractDocument",
        "parameters": [
          {
            "$ref": "#/components/parameters/contractId"
          },
          {
            "$ref": "#/components/parameters/documentId"
          },
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/Document"
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "404": {
            "$ref": "#/components/responses/PartnerNotFound"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorEnvelope"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "X-Correlation-Id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/RequestId"
              },
              "X-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              }
            }
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Gespeicherte PDF-Fassung herunterladen"
      }
    },
    "/contracts/{contractId}/reactivate": {
      "post": {
        "description": "Reaktivieren Sie einen zulässig widerrufenen oder gekündigten eigenen Vertrag mit belegter früherer Aktivierung. Die bestehenden Frist- und Verbundregeln bleiben erforderlich. Ein verworfener Neuvertragsentwurf wird dadurch nicht aktiviert. HTTP200 bestätigt SIGNED. Idempotency-Key ist verpflichtend. Halten Sie Key, Ziel und Inhalt für dieselbe Aktion und deren Wiederholung unverändert; bei der Vertragsanlage auch die externalReference. Ein identischer Replay erzeugt keine zweite Wirkung. Geänderter Inhalt bei gebundenem Key oder widersprüchlicher Referenz kann 409 ergeben. Die erste Annahmeantwort ersetzt nicht den aktuellen Vorgangsstatus.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "reactivateContract",
        "parameters": [
          {
            "$ref": "#/components/parameters/contractId"
          },
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContractReactivationRequest"
              }
            }
          },
          "description": "Fachliche Eingabe gemäß Schema; Ressourcen bewusst wählen.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "confirmed": {
                    "$ref": "#/components/examples/ReactivatedContractAction"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ContractActionOperation"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "Location": {
                "description": "Adresse des gespeicherten Aktionsvorgangs.",
                "schema": {
                  "type": "string"
                },
                "x-partner-doc": {
                  "description": "Adresse des gespeicherten Aktionsvorgangs.",
                  "example": "/v2/contract-actions/10000000-0000-4000-8000-000000000040",
                  "omission": "Ohne diesen Header die operationId aus dem Antwortbody verwenden.",
                  "source": "HTTP-Antwort auf diese Vertragsaktion."
                }
              }
            }
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContractActionOperation"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "Location": {
                "description": "Adresse des gespeicherten Aktionsvorgangs.",
                "schema": {
                  "type": "string"
                },
                "x-partner-doc": {
                  "description": "Adresse des gespeicherten Aktionsvorgangs.",
                  "example": "/v2/contract-actions/10000000-0000-4000-8000-000000000040",
                  "omission": "Ohne diesen Header die operationId aus dem Antwortbody verwenden.",
                  "source": "HTTP-Antwort auf diese Vertragsaktion."
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "404": {
            "$ref": "#/components/responses/PartnerNotFound"
          },
          "409": {
            "$ref": "#/components/responses/PartnerConflict"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Widerrufenen oder gekündigten Vertrag reaktivieren"
      }
    },
    "/contracts/{contractId}/terminate": {
      "post": {
        "description": "Kündigen Sie einen eigenen Vertrag ordentlich zum vorhandenen frühestmöglichen Termin oder einem ausdrücklich gewählten zulässigen späteren Datum. includeAddons ist optional und standardmäßig false; Bundlekinder folgen den bestehenden Regeln. HTTP200 bestätigt RESIGNED und das gespeicherte endDate. Keine außerordentliche Kündigung. Idempotency-Key ist verpflichtend. Halten Sie Key, Ziel und Inhalt für dieselbe Aktion und deren Wiederholung unverändert; bei der Vertragsanlage auch die externalReference. Ein identischer Replay erzeugt keine zweite Wirkung. Geänderter Inhalt bei gebundenem Key oder widersprüchlicher Referenz kann 409 ergeben. Die erste Annahmeantwort ersetzt nicht den aktuellen Vorgangsstatus.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "terminateContract",
        "parameters": [
          {
            "$ref": "#/components/parameters/contractId"
          },
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContractTerminationRequest"
              }
            }
          },
          "description": "Fachliche Eingabe gemäß Schema; Ressourcen bewusst wählen.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "confirmed": {
                    "$ref": "#/components/examples/TerminatedContractAction"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ContractActionOperation"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "Location": {
                "description": "Adresse des gespeicherten Aktionsvorgangs.",
                "schema": {
                  "type": "string"
                },
                "x-partner-doc": {
                  "description": "Adresse des gespeicherten Aktionsvorgangs.",
                  "example": "/v2/contract-actions/10000000-0000-4000-8000-000000000040",
                  "omission": "Ohne diesen Header die operationId aus dem Antwortbody verwenden.",
                  "source": "HTTP-Antwort auf diese Vertragsaktion."
                }
              }
            }
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContractActionOperation"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "Location": {
                "description": "Adresse des gespeicherten Aktionsvorgangs.",
                "schema": {
                  "type": "string"
                },
                "x-partner-doc": {
                  "description": "Adresse des gespeicherten Aktionsvorgangs.",
                  "example": "/v2/contract-actions/10000000-0000-4000-8000-000000000040",
                  "omission": "Ohne diesen Header die operationId aus dem Antwortbody verwenden.",
                  "source": "HTTP-Antwort auf diese Vertragsaktion."
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "404": {
            "$ref": "#/components/responses/PartnerNotFound"
          },
          "409": {
            "$ref": "#/components/responses/PartnerConflict"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Bestehenden Vertrag ordentlich kündigen"
      }
    },
    "/contracts/{contractId}/withdraw": {
      "post": {
        "description": "Widerrufen Sie einen eigenen bereits aktivierten Vertrag innerhalb seiner zulässigen Widerrufsfrist. Ein berechtigter Entscheider ist erforderlich. HTTP200 bestätigt CONTRADICTED, HTTP202 einen gespeicherten noch ungeklärten Aktionsvorgang. Idempotency-Key ist verpflichtend. Halten Sie Key, Ziel und Inhalt für dieselbe Aktion und deren Wiederholung unverändert; bei der Vertragsanlage auch die externalReference. Ein identischer Replay erzeugt keine zweite Wirkung. Geänderter Inhalt bei gebundenem Key oder widersprüchlicher Referenz kann 409 ergeben. Die erste Annahmeantwort ersetzt nicht den aktuellen Vorgangsstatus.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "withdrawContract",
        "parameters": [
          {
            "$ref": "#/components/parameters/contractId"
          },
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          },
          {
            "$ref": "#/components/parameters/IdempotencyKey"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ContractWithdrawalRequest"
              }
            }
          },
          "description": "Fachliche Eingabe gemäß Schema; Ressourcen bewusst wählen.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "confirmed": {
                    "$ref": "#/components/examples/WithdrawnContractAction"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/ContractActionOperation"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "Location": {
                "description": "Adresse des gespeicherten Aktionsvorgangs.",
                "schema": {
                  "type": "string"
                },
                "x-partner-doc": {
                  "description": "Adresse des gespeicherten Aktionsvorgangs.",
                  "example": "/v2/contract-actions/10000000-0000-4000-8000-000000000040",
                  "omission": "Ohne diesen Header die operationId aus dem Antwortbody verwenden.",
                  "source": "HTTP-Antwort auf diese Vertragsaktion."
                }
              }
            }
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ContractActionOperation"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "Location": {
                "description": "Adresse des gespeicherten Aktionsvorgangs.",
                "schema": {
                  "type": "string"
                },
                "x-partner-doc": {
                  "description": "Adresse des gespeicherten Aktionsvorgangs.",
                  "example": "/v2/contract-actions/10000000-0000-4000-8000-000000000040",
                  "omission": "Ohne diesen Header die operationId aus dem Antwortbody verwenden.",
                  "source": "HTTP-Antwort auf diese Vertragsaktion."
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "404": {
            "$ref": "#/components/responses/PartnerNotFound"
          },
          "409": {
            "$ref": "#/components/responses/PartnerConflict"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Bestehenden Vertrag widerrufen"
      }
    },
    "/customers/search": {
      "post": {
        "description": "Suchen Sie einen bestehenden Kunden. OWN ist der Standard und bleibt auf Ihren berechtigten Bestand begrenzt; mindestens ein Filter ist erforderlich. IDENTIFY muss ausdrücklich gewählt werden und verlangt die gemeinsame Übereinstimmung von Nachname, Geburt und Ausweisnummer. Es gibt keine automatische Kundenauswahl. Ein Treffer erlaubt keinen Zugriff auf fremde Verträge. Offset ist standardmäßig0, Limit25 und zulässig1–100. Dieser lesende POST benötigt keinen Idempotency-Key.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "searchCustomers",
        "parameters": [
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "devIdentify": {
                  "value": {
                    "filters": {
                      "birthdate": "1990-01-02",
                      "idCardNumber": "UCV2-DEV-ID-SHARED",
                      "lastname": "UCV2SearchDEV20261022"
                    },
                    "limit": 25,
                    "mode": "IDENTIFY",
                    "offset": 0
                  }
                },
                "devOwn": {
                  "value": {
                    "filters": {
                      "externalCustomerNumber": "UCV2-DEV-EASY",
                      "firstname": "Own Beta",
                      "lastname": "UCV2SearchDEV20261022"
                    },
                    "limit": 25,
                    "mode": "OWN",
                    "offset": 0
                  }
                },
                "guide": {
                  "$ref": "#/components/examples/GuideOwnSearchRequest"
                },
                "identify": {
                  "$ref": "#/components/examples/IdentifySearch"
                },
                "own": {
                  "$ref": "#/components/examples/OwnSearch"
                }
              },
              "schema": {
                "$ref": "#/components/schemas/CustomerSearchRequest"
              }
            }
          },
          "description": "Fachliche Eingabe gemäß Schema; Ressourcen bewusst wählen.",
          "required": true
        },
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "devIdentify": {
                    "value": {
                      "hasMore": false,
                      "items": [
                        {
                          "city": "DEV Teststadt",
                          "company": "UC-V2-001 DEV Suche",
                          "customerId": "be00b144-6398-4c57-8b6e-79f66513c884",
                          "firstname": "Foreign Gamma",
                          "lastname": "UCV2SearchDEV20261022",
                          "zip": "00000"
                        },
                        {
                          "city": "DEV Teststadt",
                          "company": "UC-V2-001 DEV Suche",
                          "customerId": "4e63f48d-e7ba-458b-842f-f2e06eb8b64c",
                          "firstname": "Own Alpha",
                          "lastname": "UCV2SearchDEV20261022",
                          "zip": "00000"
                        }
                      ],
                      "limit": 25,
                      "mode": "IDENTIFY",
                      "offset": 0
                    }
                  },
                  "devOwn": {
                    "value": {
                      "hasMore": false,
                      "items": [
                        {
                          "city": "DEV Teststadt",
                          "company": "UC-V2-001 DEV Suche",
                          "customerId": "3cbeced3-c265-4dba-a190-1d94aace9a06",
                          "customerNumber": "K19391",
                          "email": "ucv2-search-beta@example.invalid",
                          "externalCustomerNumber": "UCV2-DEV-EASY",
                          "firstname": "Own Beta",
                          "lastname": "UCV2SearchDEV20261022",
                          "zip": "00000"
                        }
                      ],
                      "limit": 25,
                      "mode": "OWN",
                      "offset": 0
                    }
                  },
                  "empty": {
                    "$ref": "#/components/examples/EmptyCustomerSearch"
                  },
                  "emptyIdentify": {
                    "$ref": "#/components/examples/EmptyIdentifyCustomerSearch"
                  },
                  "guide": {
                    "$ref": "#/components/examples/GuideOwnSearchResponse"
                  },
                  "identifyPage": {
                    "$ref": "#/components/examples/IdentifyCustomerSearchPage"
                  },
                  "ownPage": {
                    "$ref": "#/components/examples/OwnCustomerSearchPage"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/CustomerSearchResponse"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "X-Correlation-Id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/RequestId"
              },
              "X-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Kunden suchen"
      }
    },
    "/products/{productId}": {
      "get": {
        "description": "Lesen Sie Produktangaben, Anforderungen und auswählbare Konditionen mit usage=NEW_CONTRACT. Ohne vollständige Auswahl erhalten Sie die Optionen. Mit vollständiger zulässiger Auswahl erhalten Sie nur productId und berechnete conditions. Wählen Sie Laufzeit, Zahlweise, Preisart und gegebenenfalls Promotion ausdrücklich; es gibt keine automatische Erstauswahl. Beträge, Währung, Steuerbasis und Zahlungsbezug gemeinsam auswerten.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "getProduct",
        "parameters": [
          {
            "$ref": "#/components/parameters/productId"
          },
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          },
          {
            "description": "Verwendungszweck der Produktabfrage für den angebotenen Einzel-Neuvertrag.",
            "in": "query",
            "name": "usage",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/OperationType"
            },
            "x-partner-doc": {
              "condition": "Dieser Produktdetailpfad beschreibt den klassischen Neuvertrag; andere Abschlussarten werden dadurch nicht freigegeben.",
              "description": "Verwendungszweck der Produktabfrage für den angebotenen Einzel-Neuvertrag.",
              "example": "NEW_CONTRACT",
              "omission": "Es gibt keinen automatisch angenommenen Verwendungszweck der Produktabfrage.",
              "source": "Für diesen öffentlichen Ablauf NEW_CONTRACT verwenden."
            }
          },
          {
            "description": "Kennung der bewusst ausgewählten Laufzeitoption des Produkts.",
            "in": "query",
            "name": "durationId",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ResourceId"
            },
            "x-partner-doc": {
              "condition": "Für berechnete Konditionen durationId, paymentId und priceType bewusst wählen. Bei priceType=PROMO_TEMP wird zusätzlich eine passende befristete Promotion benötigt.",
              "description": "Kennung der bewusst ausgewählten Laufzeitoption des Produkts.",
              "example": "17ef5d55-617c-429a-b523-637625346856",
              "omission": "Solange die Konditionsauswahl nicht vollständig ist, liefert die Abfrage Produktinformationen und Optionen statt berechneter Konditionen.",
              "source": "Laufzeitkennung aus ProductDetailsResponse.durations bewusst auswählen; Konditions- und Vertragsantworten nennen die verwendete Option."
            }
          },
          {
            "description": "Kennung der bewusst ausgewählten Zahlweise des Produkts.",
            "in": "query",
            "name": "paymentId",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ResourceId"
            },
            "x-partner-doc": {
              "condition": "Für berechnete Konditionen durationId, paymentId und priceType bewusst wählen. Bei priceType=PROMO_TEMP wird zusätzlich eine passende befristete Promotion benötigt.",
              "description": "Kennung der bewusst ausgewählten Zahlweise des Produkts.",
              "example": "95012da7-bd0c-4b4a-b181-a43bff8578d0",
              "omission": "Solange die Konditionsauswahl nicht vollständig ist, liefert die Abfrage Produktinformationen und Optionen statt berechneter Konditionen.",
              "source": "Zahlweisenkennung aus ProductDetailsResponse.payments bewusst auswählen; Konditions- und Vertragsantworten nennen die verwendete Option."
            }
          },
          {
            "description": "Die für das Produkt angebotene und bewusst ausgewählte Preisart.",
            "in": "query",
            "name": "priceType",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/PriceType"
            },
            "x-partner-doc": {
              "condition": "Für berechnete Konditionen durationId, paymentId und priceType bewusst wählen. Bei priceType=PROMO_TEMP wird zusätzlich eine passende befristete Promotion benötigt.",
              "description": "Die für das Produkt angebotene und bewusst ausgewählte Preisart.",
              "example": "AGB",
              "omission": "Solange die Konditionsauswahl nicht vollständig ist, liefert die Abfrage Produktinformationen und Optionen statt berechneter Konditionen.",
              "source": "Eine der in ProductDetailsResponse.priceTypes angebotenen Preisarten bewusst auswählen."
            }
          },
          {
            "description": "Kennung der ausgewählten befristeten Promotion.",
            "in": "query",
            "name": "promotionId",
            "required": false,
            "schema": {
              "$ref": "#/components/schemas/ResourceId"
            },
            "x-partner-doc": {
              "condition": "Für berechnete Konditionen durationId, paymentId und priceType bewusst wählen. Bei priceType=PROMO_TEMP wird zusätzlich eine passende befristete Promotion benötigt.",
              "description": "Kennung der ausgewählten befristeten Promotion.",
              "example": "70000000-0000-4000-8000-000000000001",
              "omission": "Solange die Konditionsauswahl nicht vollständig ist, liefert die Abfrage Produktinformationen und Optionen statt berechneter Konditionen.",
              "source": "Passende Promotionskennung aus ProductDetailsResponse.promotions auswählen; Antworten weisen die zugeordnete Promotion aus."
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "productDetails": {
                    "$ref": "#/components/examples/GuideProductDetails"
                  },
                  "selectedConditions": {
                    "$ref": "#/components/examples/GuideProductConditions"
                  }
                },
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ProductDetailsResponse"
                    },
                    {
                      "$ref": "#/components/schemas/ProductConditionsResponse"
                    }
                  ]
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "X-Correlation-Id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/RequestId"
              },
              "X-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "404": {
            "$ref": "#/components/responses/PartnerNotFound"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Produkt und Konditionen auswählen"
      }
    },
    "/sales-context": {
      "get": {
        "description": "Lesen Sie die verfügbaren Verkäufer und Filialen. Wählen Sie die gespeicherten Kennungen für die Vertragseinreichung; displayName dient der Anzeige. Der Aufruf reserviert nichts.\n\nVerwenden Sie das Bearer-Token Ihres eingerichteten Zugangs. Der Zugang muss aktuell freigeschaltet sein. SmartPay prüft bei jedem Aufruf, ob Sie die gewünschte Aktion für den betreffenden Vertrag oder Datensatz ausführen dürfen.\n\n[HTTP-Header – sichere Aufrufe und Fehlerdiagnose](#description/http-header-sichere-aufrufe-und-fehlerdiagnose)\n\n[Aufrufgrenzen und Wiederholung](#description/aufrufgrenzen-und-wiederholung)",
        "operationId": "getSalesContext",
        "parameters": [
          {
            "$ref": "#/components/parameters/PartnerCorrelation"
          },
          {
            "$ref": "#/components/parameters/TraceParent"
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "examples": {
                  "guide": {
                    "$ref": "#/components/examples/GuideSalesContext"
                  }
                },
                "schema": {
                  "$ref": "#/components/schemas/SalesContextResponse"
                }
              }
            },
            "description": "Antwort gemäß Schema und tatsächlichem HTTP-Status.",
            "headers": {
              "X-Correlation-Id": {
                "$ref": "#/components/headers/CorrelationId"
              },
              "X-Request-Id": {
                "$ref": "#/components/headers/RequestId"
              },
              "X-Trace-Id": {
                "$ref": "#/components/headers/TraceId"
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/InvalidRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthenticated"
          },
          "403": {
            "$ref": "#/components/responses/PartnerForbidden"
          },
          "413": {
            "$ref": "#/components/responses/PayloadTooLarge"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          },
          "431": {
            "$ref": "#/components/responses/RequestHeadersTooLarge"
          },
          "500": {
            "$ref": "#/components/responses/PartnerInternalError"
          },
          "502": {
            "$ref": "#/components/responses/BadGateway"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          },
          "504": {
            "$ref": "#/components/responses/GatewayTimeout"
          },
          "default": {
            "$ref": "#/components/responses/OtherError"
          }
        },
        "security": [
          {
            "PartnerAccessToken": []
          }
        ],
        "summary": "Verkäufer und Filialen lesen"
      }
    }
  },
  "servers": [
    {
      "description": "API-Basis; /v2 genau einmal verwenden.",
      "url": "/v2"
    }
  ],
  "webhooks": {
    "contract.operation.updated": {
      "post": {
        "description": "Optionaler ausgehender HTTPS-POST an das beim Vorgang angenommene callbackUrl. Ohne URL funktioniert derselbe Fachablauf ohne Nachricht. Separater Resellerschlüssel, nicht API-Clientsecret. SmartPay-Signature enthält t=<Unixsekunden>,v1=<kleine Hex-HMAC-SHA256>; signiert werden UTF8(t + '.') und die exakten Bodybytes. Konstantzeitlich und innerhalb eines engen Zeitfensters (z. B. 300 Sekunden) prüfen; dauerhaft nach eventId deduplizieren. Wiederholung behält eventId und Body, hat frischen Zeitstempel/Signatur. At-least-once, keine feste Reihenfolge oder Exactly-once-Zusage. Gesperrter Zugang wird vor neuen Versuchen geprüft. Keine Fachfreigabe durch Empfang oder Zustellbestätigung.",
        "operationId": "receiveContractOperationUpdated",
        "parameters": [
          {
            "description": "t=<Unixsekunden>,v1=<HMAC-SHA256>; Signatur über UTF8(t + '.') und exakte Bodybytes.",
            "in": "header",
            "name": "SmartPay-Signature",
            "required": true,
            "schema": {
              "pattern": "^t=[0-9]+,v1=[0-9a-f]{64}$",
              "type": "string"
            },
            "x-partner-doc": {
              "condition": "HMAC über UTF8(t + '.') gefolgt von den exakten Bodybytes konstantzeitlich prüfen; ein enges Zeitfenster verwenden und anschließend nach eventId deduplizieren. Wiederzustellungen haben frischen Zeitstempel und Signatur bei gleichbleibendem Ereignis und Body.",
              "description": "Signaturheader des ausgehenden Partnercallbacks mit Zeitstempel und HMAC-SHA256 über Zeitstempel und exakte Bodybytes.",
              "example": "t=1792836000,v1=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
              "omission": "Ohne gültigen Signaturheader die Nachricht nicht als authentifizierten SmartPay-Callback verarbeiten.",
              "source": "Unverändert aus dem empfangenen HTTP-Header SmartPay-Signature lesen und mit dem separaten Resellerschlüssel prüfen."
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "confirmed": {
                  "$ref": "#/components/examples/PartnerContractOperationUpdated"
                }
              },
              "schema": {
                "$ref": "#/components/schemas/ContractOperationUpdatedEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Empfang bestätigt; gleiche eventId dauerhaft deduplizieren."
          },
          "default": {
            "description": "Netzwerk/Timeout,408,429,5xx begrenzt wiederholen; Redirects nicht verfolgen, sonstige Nicht-2xx terminal. Connect höchstens3s, Gesamtfrist10s, Workflowtimeout15s, Abstand30s, höchstens5 geclaimte Versuche; bei unklarem Ausgang dieselben Eventbytes erneut möglich."
          }
        },
        "summary": "Optionaler Partnercallback: contract.operation.updated"
      }
    },
    "contract.updated": {
      "post": {
        "description": "Optionaler ausgehender HTTPS-POST an das beim Vorgang angenommene callbackUrl. Ohne URL funktioniert derselbe Fachablauf ohne Nachricht. Separater Resellerschlüssel, nicht API-Clientsecret. SmartPay-Signature enthält t=<Unixsekunden>,v1=<kleine Hex-HMAC-SHA256>; signiert werden UTF8(t + '.') und die exakten Bodybytes. Konstantzeitlich und innerhalb eines engen Zeitfensters (z. B. 300 Sekunden) prüfen; dauerhaft nach eventId deduplizieren. Wiederholung behält eventId und Body, hat frischen Zeitstempel/Signatur. At-least-once, keine feste Reihenfolge oder Exactly-once-Zusage. Gesperrter Zugang wird vor neuen Versuchen geprüft. Keine Fachfreigabe durch Empfang oder Zustellbestätigung.",
        "operationId": "receiveContractUpdated",
        "parameters": [
          {
            "description": "t=<Unixsekunden>,v1=<HMAC-SHA256>; Signatur über UTF8(t + '.') und exakte Bodybytes.",
            "in": "header",
            "name": "SmartPay-Signature",
            "required": true,
            "schema": {
              "pattern": "^t=[0-9]+,v1=[0-9a-f]{64}$",
              "type": "string"
            },
            "x-partner-doc": {
              "condition": "HMAC über UTF8(t + '.') gefolgt von den exakten Bodybytes konstantzeitlich prüfen; ein enges Zeitfenster verwenden und anschließend nach eventId deduplizieren. Wiederzustellungen haben frischen Zeitstempel und Signatur bei gleichbleibendem Ereignis und Body.",
              "description": "Signaturheader des ausgehenden Partnercallbacks mit Zeitstempel und HMAC-SHA256 über Zeitstempel und exakte Bodybytes.",
              "example": "t=1792836000,v1=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
              "omission": "Ohne gültigen Signaturheader die Nachricht nicht als authentifizierten SmartPay-Callback verarbeiten.",
              "source": "Unverändert aus dem empfangenen HTTP-Header SmartPay-Signature lesen und mit dem separaten Resellerschlüssel prüfen."
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "examples": {
                "confirmed": {
                  "$ref": "#/components/examples/PartnerContractUpdated"
                }
              },
              "schema": {
                "$ref": "#/components/schemas/ContractUpdatedEvent"
              }
            }
          },
          "required": true
        },
        "responses": {
          "2XX": {
            "description": "Empfang bestätigt; gleiche eventId dauerhaft deduplizieren."
          },
          "default": {
            "description": "Netzwerk/Timeout,408,429,5xx begrenzt wiederholen; Redirects nicht verfolgen, sonstige Nicht-2xx terminal. Connect höchstens3s, Gesamtfrist10s, Workflowtimeout15s, Abstand30s, höchstens5 geclaimte Versuche; bei unklarem Ausgang dieselben Eventbytes erneut möglich."
          }
        },
        "summary": "Optionaler Partnercallback: contract.updated"
      }
    }
  },
  "x-generated-from": {
    "limitations": [
      "Unterstützt ist der klassische nichtmobile Einzel-Neuvertrag; andere Vertragsarten werden hier nicht angeboten.",
      "Ein lesbares Produkt ist nicht automatisch für jede Vertragsart buchbar.",
      "Die tatsächliche Bereitstellung einer Umgebung wird bei der Zugangseinrichtung vereinbart."
    ],
    "profile": "UC-V2-001-classical-single-new-contract",
    "sha256": "aa815b800b4f589344e1432ff55f307302bf2fabe9d34c5da8f8c2ff64d64d56",
    "source": "docs/api/uc-v2-001/draft/uc-v2-001.openapi.json"
  }
}
