# PartnerHub API — Full Reference (LLM consolidation) > Generated from the OpenAPI spec and the workflow state machines. > Raw OpenAPI: https://sandbox.partner.miete24.com/api/docs.jsonopenapi > Consolidated OpenAPI (with x-extensions): https://sandbox.partner.miete24.com/developers/openapi.json ## Guides & concepts These narrative guides live in the developer portal; follow the links for the full text. - [Introduction](https://sandbox.partner.miete24.com/developers) - [For AI](https://sandbox.partner.miete24.com/developers/ai) - [Getting Started](https://sandbox.partner.miete24.com/developers/getting-started) - [Authentication](https://sandbox.partner.miete24.com/developers/authentication) - [Versioning & Deprecation](https://sandbox.partner.miete24.com/developers/versioning) - [Create a Quote](https://sandbox.partner.miete24.com/developers/use-cases/create-a-quote) - [Financing & Solvency](https://sandbox.partner.miete24.com/developers/use-cases/financing) - [e-Signature](https://sandbox.partner.miete24.com/developers/use-cases/e-signature) - [Lifecycle](https://sandbox.partner.miete24.com/developers/lifecycle) ## API reference ### Calculation Rental price calculation endpoints. #### POST /api/calculate Creates a Calculation resource. Creates a Calculation resource. **Request body** | Property | Type | Required | Description | | --- | --- | --- | --- | | serviceCost | number\|null | no | | | paymentInterval | string | no | Zahlungsweise; Default monthly. monthly schlägt den konfigurierten Aufschlag (PH-577) auf die Monatsrate auf, quarterly nicht. | | durations | array | yes | | | calculationTypes | array | yes | | | acquisitionCost | number\|null | no | | | productSector | string | no | API write accessor: accepts the raw JSON string so invalid values surface as Choice violations instead of enum denormalization fatals (PH-984). | | categorySlug | string\|null | no | only for internal use for now | | installationCost | number\|null | no | | | userType | string | no | | **Request example** ```json { "paymentInterval": "monthly", "durations": [ 12, 24, 36, 48, 60, 72, 84, 96, 120 ], "calculationTypes": [ "leasing", "partial_amortisation_leasing", "rent_to_own" ], "acquisitionCost": 1000.23, "margin": 0.03, "productSector": "IT_AND_OFFICE_EQUIPMENT", "public": true, "active": true, "distributionHub": "https://example.com/", "distributionHubOverride": "https://example.com/" } ``` **Responses** | Status | Description | Schema | | --- | --- | --- | | 201 | Calculation resource created | Calculation | | 400 | Invalid input | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X POST 'https://sandbox.partner.miete24.com/api/calculate' \ -H 'X-Api-Key: YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"paymentInterval":"monthly","durations":[12,24,36,48,60,72,84,96,120],"calculationTypes":["leasing","partial_amortisation_leasing","rent_to_own"],"acquisitionCost":1000.23,"margin":0.03,"productSector":"IT_AND_OFFICE_EQUIPMENT","public":true,"active":true,"distributionHub":"https://example.com/","distributionHubOverride":"https://example.com/"}' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/calculate', { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({"paymentInterval":"monthly","durations":[12,24,36,48,60,72,84,96,120],"calculationTypes":["leasing","partial_amortisation_leasing","rent_to_own"],"acquisitionCost":1000.23,"margin":0.03,"productSector":"IT_AND_OFFICE_EQUIPMENT","public":true,"active":true,"distributionHub":"https://example.com/","distributionHubOverride":"https://example.com/"}), }); const data = await response.json(); ``` #### POST /api/calculate/estimate Creates a Calculation resource. Creates a Calculation resource. **Request body** | Property | Type | Required | Description | | --- | --- | --- | --- | | serviceCost | number\|null | no | | | paymentInterval | string | no | Zahlungsweise; Default monthly. monthly schlägt den konfigurierten Aufschlag (PH-577) auf die Monatsrate auf, quarterly nicht. | | durations | array | yes | | | calculationTypes | array | yes | | | acquisitionCost | number\|null | no | | | productSector | string | no | API write accessor: accepts the raw JSON string so invalid values surface as Choice violations instead of enum denormalization fatals (PH-984). | | categorySlug | string\|null | no | only for internal use for now | | installationCost | number\|null | no | | | userType | string | no | | **Request example** ```json { "paymentInterval": "monthly", "durations": [ 12, 24, 36, 48, 60, 72, 84, 96, 120 ], "calculationTypes": [ "leasing", "partial_amortisation_leasing", "rent_to_own" ], "acquisitionCost": 1000.23, "margin": 0.03, "productSector": "IT_AND_OFFICE_EQUIPMENT", "public": true, "active": true, "distributionHub": "https://example.com/", "distributionHubOverride": "https://example.com/" } ``` **Responses** | Status | Description | Schema | | --- | --- | --- | | 201 | Calculation resource created | Calculation.CalculationResponse | | 400 | Invalid input | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X POST 'https://sandbox.partner.miete24.com/api/calculate/estimate' \ -H 'X-Api-Key: YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"paymentInterval":"monthly","durations":[12,24,36,48,60,72,84,96,120],"calculationTypes":["leasing","partial_amortisation_leasing","rent_to_own"],"acquisitionCost":1000.23,"margin":0.03,"productSector":"IT_AND_OFFICE_EQUIPMENT","public":true,"active":true,"distributionHub":"https://example.com/","distributionHubOverride":"https://example.com/"}' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/calculate/estimate', { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({"paymentInterval":"monthly","durations":[12,24,36,48,60,72,84,96,120],"calculationTypes":["leasing","partial_amortisation_leasing","rent_to_own"],"acquisitionCost":1000.23,"margin":0.03,"productSector":"IT_AND_OFFICE_EQUIPMENT","public":true,"active":true,"distributionHub":"https://example.com/","distributionHubOverride":"https://example.com/"}), }); const data = await response.json(); ``` #### POST /api/calculate/estimate/bulk Estimate several products in one call (2-50 items). Creates a Calculation resource. **Request example** ```json { "items": [ { "acquisitionCost": 1000.23, "durations": [ 24, 36, 48 ], "serviceCost": 4, "productSector": "IT_AND_OFFICE_EQUIPMENT", "calculationTypes": [ "leasing", "rent_to_own", "rent" ] }, { "acquisitionCost": 2500, "durations": [ 36 ], "serviceCost": 4, "productSector": "IT_AND_OFFICE_EQUIPMENT", "calculationTypes": [ "leasing" ] } ] } ``` **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | | | **cURL** ```bash curl -X POST 'https://sandbox.partner.miete24.com/api/calculate/estimate/bulk' \ -H 'X-Api-Key: YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"items":[{"acquisitionCost":1000.23,"durations":[24,36,48],"serviceCost":4,"productSector":"IT_AND_OFFICE_EQUIPMENT","calculationTypes":["leasing","rent_to_own","rent"]},{"acquisitionCost":2500,"durations":[36],"serviceCost":4,"productSector":"IT_AND_OFFICE_EQUIPMENT","calculationTypes":["leasing"]}]}' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/calculate/estimate/bulk', { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({"items":[{"acquisitionCost":1000.23,"durations":[24,36,48],"serviceCost":4,"productSector":"IT_AND_OFFICE_EQUIPMENT","calculationTypes":["leasing","rent_to_own","rent"]},{"acquisitionCost":2500,"durations":[36],"serviceCost":4,"productSector":"IT_AND_OFFICE_EQUIPMENT","calculationTypes":["leasing"]}]}), }); const data = await response.json(); ``` ### Quote Rental quotes for end customers. #### GET /api/quotes/{id} Retrieves a Quote resource. Retrieves a Quote resource. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | Quote identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | Quote resource | Quote | | 404 | Resource not found | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/quotes/{id}' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/quotes/{id}', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` ### Quote Request Quote requests submitted by partners. #### GET /api/quote_requests Retrieves the collection of QuoteRequest resources. Retrieves the collection of QuoteRequest resources. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | page | query | integer | no | The collection page number | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | QuoteRequest collection | array | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/quote_requests' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/quote_requests', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### POST /api/quote_requests Creates a QuoteRequest resource. Creates a QuoteRequest resource. **Request body** | Property | Type | Required | Description | | --- | --- | --- | --- | | email | string | yes | Contact email address of the applicant. | | name | string\|null | no | Contact person full name (optional). | | phone | string\|null | no | Contact phone number (optional). | | company | string\|null | no | Company or organization name (optional). | | message | string\|null | no | Free-text note for the quote request (optional). | | acknowledgedPrivacy | boolean | no | Confirms the applicant accepts the privacy policy; must be true. | | firstName | string | yes | Contact person given name. | | lastName | string | yes | Contact person family name. | | customerType | string | yes | Customer classification: company, sole proprietor, or private person. | | street | string | yes | Street name of the contact address. | | houseNumber | string\|null | no | House or building number (optional). | | postalCode | string | yes | Postal / ZIP code of the address. | | city | string | yes | City or town of the address. | | country | string | yes | Country of the address. | | crefoNo | string\|null | no | Optional Crefo credit-rating number for solvency checks. | | category | mixed | no | Product category the request relates to (optional). | | calculation | string\|null | yes | Rental price calculation the request is based on (required). | **Request example** ```json { "customerType": "company", "calculation": "https://example.com/" } ``` **Responses** | Status | Description | Schema | | --- | --- | --- | | 201 | QuoteRequest resource created | QuoteRequest-quote_request.read | | 400 | Invalid input | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X POST 'https://sandbox.partner.miete24.com/api/quote_requests' \ -H 'X-Api-Key: YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"customerType":"company","calculation":"https://example.com/"}' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/quote_requests', { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({"customerType":"company","calculation":"https://example.com/"}), }); const data = await response.json(); ``` #### GET /api/quote_requests/{id} Retrieves a QuoteRequest resource. Retrieves a QuoteRequest resource. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | QuoteRequest identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | QuoteRequest resource | QuoteRequest-quote_request.read | | 404 | Resource not found | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/quote_requests/{id}' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/quote_requests/{id}', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` ### Cart Shopping cart and checkout. #### POST /api/carts Creates a Cart resource. Creates a Cart resource. **Request body** | Property | Type | Required | Description | | --- | --- | --- | --- | | items | array | yes | | **Request example** ```json { "items": [ { "productNumber": "P-100200", "productName": "Industrial Drill Press", "productSku": "SKU-DRILL-5000", "quantity": 2, "price": 4540.11, "productOptions": { "color": "blue", "size": "M" }, "categoryId": 3, "categorySlug": "hardware", "devices": [ { "bwBaselineCount": 1000, "bwBaselinePrice": 0.01, "bwOveragePrice": 0.02, "colorBaselineCount": 200, "colorBaselinePrice": 0.05, "colorOveragePrice": 0.07, "scanBaselineCount": 300, "scanBaselinePrice": 0.03, "scanOveragePrice": 0.04, "locked": false }, { "bwBaselineCount": 1500, "bwBaselinePrice": 0.01, "bwOveragePrice": 0.02, "locked": false } ] } ] } ``` **Responses** | Status | Description | Schema | | --- | --- | --- | | 201 | Cart resource created | Cart.CartFinancingResponse-cart.financing | | 400 | Invalid input | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X POST 'https://sandbox.partner.miete24.com/api/carts' \ -H 'X-Api-Key: YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"items":[{"productNumber":"P-100200","productName":"Industrial Drill Press","productSku":"SKU-DRILL-5000","quantity":2,"price":4540.11,"productOptions":{"color":"blue","size":"M"},"categoryId":3,"categorySlug":"hardware","devices":[{"bwBaselineCount":1000,"bwBaselinePrice":0.01,"bwOveragePrice":0.02,"colorBaselineCount":200,"colorBaselinePrice":0.05,"colorOveragePrice":0.07,"scanBaselineCount":300,"scanBaselinePrice":0.03,"scanOveragePrice":0.04,"locked":false},{"bwBaselineCount":1500,"bwBaselinePrice":0.01,"bwOveragePrice":0.02,"locked":false}]}]}' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/carts', { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({"items":[{"productNumber":"P-100200","productName":"Industrial Drill Press","productSku":"SKU-DRILL-5000","quantity":2,"price":4540.11,"productOptions":{"color":"blue","size":"M"},"categoryId":3,"categorySlug":"hardware","devices":[{"bwBaselineCount":1000,"bwBaselinePrice":0.01,"bwOveragePrice":0.02,"colorBaselineCount":200,"colorBaselinePrice":0.05,"colorOveragePrice":0.07,"scanBaselineCount":300,"scanBaselinePrice":0.03,"scanOveragePrice":0.04,"locked":false},{"bwBaselineCount":1500,"bwBaselinePrice":0.01,"bwOveragePrice":0.02,"locked":false}]}]}), }); const data = await response.json(); ``` #### GET /api/carts/{id} Retrieves a Cart resource. Retrieves a Cart resource. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | Cart identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | Cart resource | Cart.CartFinancingResponse-cart.financing_cart.status | | 404 | Resource not found | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/carts/{id}' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/carts/{id}', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### PUT /api/carts/{id} Replaces the Cart resource. Replaces the Cart resource. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | Cart identifier | **Request body** | Property | Type | Required | Description | | --- | --- | --- | --- | | items | array | yes | | **Request example** ```json { "items": [ { "productNumber": "P-100200", "productName": "Industrial Drill Press", "productSku": "SKU-DRILL-5000", "quantity": 2, "price": 4540.11, "productOptions": { "color": "blue", "size": "M" }, "categoryId": 3, "categorySlug": "hardware", "devices": [ { "bwBaselineCount": 1000, "bwBaselinePrice": 0.01, "bwOveragePrice": 0.02, "colorBaselineCount": 200, "colorBaselinePrice": 0.05, "colorOveragePrice": 0.07, "scanBaselineCount": 300, "scanBaselinePrice": 0.03, "scanOveragePrice": 0.04, "locked": false }, { "bwBaselineCount": 1500, "bwBaselinePrice": 0.01, "bwOveragePrice": 0.02, "locked": false } ] } ] } ``` **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | Cart resource updated | Cart.CartFinancingResponse-cart.financing | | 400 | Invalid input | | | 404 | Resource not found | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X PUT 'https://sandbox.partner.miete24.com/api/carts/{id}' \ -H 'X-Api-Key: YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"items":[{"productNumber":"P-100200","productName":"Industrial Drill Press","productSku":"SKU-DRILL-5000","quantity":2,"price":4540.11,"productOptions":{"color":"blue","size":"M"},"categoryId":3,"categorySlug":"hardware","devices":[{"bwBaselineCount":1000,"bwBaselinePrice":0.01,"bwOveragePrice":0.02,"colorBaselineCount":200,"colorBaselinePrice":0.05,"colorOveragePrice":0.07,"scanBaselineCount":300,"scanBaselinePrice":0.03,"scanOveragePrice":0.04,"locked":false},{"bwBaselineCount":1500,"bwBaselinePrice":0.01,"bwOveragePrice":0.02,"locked":false}]}]}' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/carts/{id}', { method: 'PUT', headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({"items":[{"productNumber":"P-100200","productName":"Industrial Drill Press","productSku":"SKU-DRILL-5000","quantity":2,"price":4540.11,"productOptions":{"color":"blue","size":"M"},"categoryId":3,"categorySlug":"hardware","devices":[{"bwBaselineCount":1000,"bwBaselinePrice":0.01,"bwOveragePrice":0.02,"colorBaselineCount":200,"colorBaselinePrice":0.05,"colorOveragePrice":0.07,"scanBaselineCount":300,"scanBaselinePrice":0.03,"scanOveragePrice":0.04,"locked":false},{"bwBaselineCount":1500,"bwBaselinePrice":0.01,"bwOveragePrice":0.02,"locked":false}]}]}), }); const data = await response.json(); ``` #### POST /api/carts/{id}/checkout Creates a Cart resource. Creates a Cart resource. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | Cart identifier | **Request body** | Property | Type | Required | Description | | --- | --- | --- | --- | | duration | integer | yes | Ausgewählte Laufzeit in Monaten | | financingType | string | yes | Financing type. Use "print_plan" (PH-590) to check the cart out as a Print-Plan contract: the cart items per-device click-billing data (CartItemCreateDto.devices) plus the printPlanContractTerms block are turned into a Print-Plan quote. serviceCost and customSlaFileName are not allowed for print_plan. PH-755: "print_plan_3kdg_12verl" and "print_plan_6kdg_12verl" are Print-Plan contract variants that behave identically but send their own producttype to GRENKE. | | paymentInterval | string | no | Zahlungsweise; Default monthly. | | commission | integer | no | Provisionsstufe in Prozent; Default 0. Es sind nur Stufen zulässig, für die dem Partner eine Mietfaktorenliste zugeordnet ist. | | quoteNumber | string\|null | no | Optional custom quote number. | | printPlanContractTerms | mixed | no | Print-Plan contract terms (PH-590); only applied when financingType=print_plan. Optional — defaults: 5% page coverage, 15% color ratio, full maintenance. | | customer | CustomerData-cart.checkout | yes | Kundendaten | | serviceCost | number\|null | no | Monatliche Servicegebühr für die Miete. | | customSlaFileName | string\|null | no | Kairos "file" identifier of the custom SLA selected for this quote. | **Request example** ```json { "duration": 36, "financingType": "leasing", "paymentInterval": "monthly", "commission": 0, "quoteNumber": "PARTNER-2026-001", "printPlanContractTerms": { "pageCoverage": 5, "colorRatio": 15, "maintenanceTonerColor": true, "maintenanceDrums": true, "maintenanceStaples": true, "maintenancePaper": true }, "customer": { "firstName": "Anna", "lastName": "Schmidt", "email": "anna.schmidt@example.com", "street": "Hauptstrasse", "houseNumber": "12a", "zipCode": "10115", "city": "Berlin", "country": "Deutschland", "phone": "+49 30 1234567", "company": "Schmidt GmbH", "vatId": "DE123456789" }, "serviceCost": 4.5, "customSlaFileName": "gold-sla.pdf" } ``` **Responses** | Status | Description | Schema | | --- | --- | --- | | 201 | Cart resource created | Cart.CheckoutResponseDto-checkout.response | | 400 | Invalid input | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X POST 'https://sandbox.partner.miete24.com/api/carts/{id}/checkout' \ -H 'X-Api-Key: YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"duration":36,"financingType":"leasing","paymentInterval":"monthly","commission":0,"quoteNumber":"PARTNER-2026-001","printPlanContractTerms":{"pageCoverage":5,"colorRatio":15,"maintenanceTonerColor":true,"maintenanceDrums":true,"maintenanceStaples":true,"maintenancePaper":true},"customer":{"firstName":"Anna","lastName":"Schmidt","email":"anna.schmidt@example.com","street":"Hauptstrasse","houseNumber":"12a","zipCode":"10115","city":"Berlin","country":"Deutschland","phone":"+49 30 1234567","company":"Schmidt GmbH","vatId":"DE123456789"},"serviceCost":4.5,"customSlaFileName":"gold-sla.pdf"}' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/carts/{id}/checkout', { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({"duration":36,"financingType":"leasing","paymentInterval":"monthly","commission":0,"quoteNumber":"PARTNER-2026-001","printPlanContractTerms":{"pageCoverage":5,"colorRatio":15,"maintenanceTonerColor":true,"maintenanceDrums":true,"maintenanceStaples":true,"maintenancePaper":true},"customer":{"firstName":"Anna","lastName":"Schmidt","email":"anna.schmidt@example.com","street":"Hauptstrasse","houseNumber":"12a","zipCode":"10115","city":"Berlin","country":"Deutschland","phone":"+49 30 1234567","company":"Schmidt GmbH","vatId":"DE123456789"},"serviceCost":4.5,"customSlaFileName":"gold-sla.pdf"}), }); const data = await response.json(); ``` ### Contract Rental contracts. #### GET /api/contracts/{id} Retrieves a Contract resource. Retrieves a Contract resource. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | Contract identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | Contract resource | Contract | | 404 | Resource not found | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/contracts/{id}' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/contracts/{id}', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### PATCH /api/contracts/{id}/edit-contract-number Updates the Contract resource. Updates the Contract resource. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | Contract identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | Contract resource updated | Contract.ContractNumberResponse | | 400 | Invalid input | | | 403 | Forbidden | | | 404 | Resource not found | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X PATCH 'https://sandbox.partner.miete24.com/api/contracts/{id}/edit-contract-number' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/contracts/{id}/edit-contract-number', { method: 'PATCH', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` ### Financing Case Financing cases and their status. #### GET /api/financing_cases Retrieves the collection of FinancingCase resources. Retrieves the collection of FinancingCase resources. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | page | query | integer | no | The collection page number | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | FinancingCase collection | array | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/financing_cases' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/financing_cases', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### GET /api/financing_cases/{id} Retrieves a FinancingCase resource. Retrieves a FinancingCase resource. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | FinancingCase identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | FinancingCase resource | FinancingCase-financing_case.read | | 404 | Resource not found | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/financing_cases/{id}' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/financing_cases/{id}', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### POST /api/financing_cases/{id}/cancel Cancel a financing case Cancels a financing case owned by the calling partner: the associated quote and, where applicable, contract are transitioned to CANCELED, document tokens are invalidated and open callback requests are closed. Requires a valid API key (ROLE_API_USER) and only operates on financing cases belonging to the calling partner. Status rules: a partner may cancel while the case is in a regular status. Cancellation past internal-approval points is reserved for the Miete24 Approval Team and is refused for partners — quotes in IN_PROGRESS, REJECTED_BY_CUSTOMER or FINANCE_REJECTED, and contracts after signing (signed, post_processing_required, delivery_approved, invoice_checked, completed). A signed contract therefore stays active even when its quote is canceled; an already canceled case is terminal. On success the financer / distribution hub is notified by email (where a contact address is configured) and, for partners with an active webhook endpoint, a financing_case.status_changed webhook is emitted. Responds 204 on success, 401 without a valid API key, 403 for a case owned by another partner, 404 if the case does not exist, and 422 if the case cannot be canceled in its current status. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | FinancingCase identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 204 | FinancingCase resource created | | | 400 | Invalid input | | | 403 | Forbidden | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X POST 'https://sandbox.partner.miete24.com/api/financing_cases/{id}/cancel' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/financing_cases/{id}/cancel', { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` ### Financing Document Documents attached to a financing case. #### DELETE /api/documents/{id} [DISABLED] Delete a document [DISABLED] Soft-deletes the document. Not available: document deletion via API is out of scope and stays disabled for now. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | FinancingDocument identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 204 | FinancingDocument resource deleted | | | 403 | Forbidden | | | 404 | Resource not found | | **cURL** ```bash curl -X DELETE 'https://sandbox.partner.miete24.com/api/documents/{id}' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/documents/{id}', { method: 'DELETE', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### GET /api/documents/{id} Get document metadata Returns metadata (name, size, category, review status, etc.) for a single document. Answers 404 for documents that are not available to you — the same set the document list omits. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | FinancingDocument identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | FinancingDocument resource | FinancingDocument.FinancingDocumentResponse-financing_document.read | | 403 | Forbidden | | | 404 | Resource not found | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/documents/{id}' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/documents/{id}', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### GET /api/documents/{id}/download Download document file Downloads the actual file content of a document belonging to one of your financing cases. Only documents you are entitled to receive are served: files you provided yourself, plus the signed contract and the signed handover confirmation. Documents the end customer provided, Miete24-internal documents and superseded versions are not available and answer with 404 — the same documents are omitted from the document list. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | FinancingDocument identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | FinancingDocument resource | FinancingDocument | | 403 | Forbidden | | | 404 | Resource not found | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/documents/{id}/download' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/documents/{id}/download', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### GET /api/financing-cases/{financingCaseId}/documents List the documents of a financing case you may access Returns the documents of the specified financing case that are available to you: the files you provided yourself, plus the signed contract and the signed handover confirmation. Customer-provided documents, Miete24-internal documents and superseded versions are omitted, so every returned downloadUrl is guaranteed to work. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | financingCaseId | path | string | yes | FinancingDocument identifier | | page | query | integer | no | The collection page number | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | FinancingDocument collection | array | | 403 | Forbidden | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/financing-cases/{financingCaseId}/documents' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/financing-cases/{financingCaseId}/documents', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### POST /api/financing-cases/{financingCaseId}/documents Upload a document to a financing case Uploads a file (PDF, PNG, JPG, max 10MB) to the specified financing case. Requires category. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | financingCaseId | path | string | yes | FinancingDocument identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 201 | FinancingDocument resource created | FinancingDocument.FinancingDocumentResponse-financing_document.read | | 400 | Invalid input | | | 403 | Forbidden | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X POST 'https://sandbox.partner.miete24.com/api/financing-cases/{financingCaseId}/documents' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/financing-cases/{financingCaseId}/documents', { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` ### Document Request Requests for customer documents. #### GET /api/financing-cases/{financingCaseId}/document-requests List all document requests for a financing case Returns all requested documents, information requests, and fill-and-return templates for the specified financing case. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | financingCaseId | path | string | yes | DocumentRequestListResource identifier | | page | query | integer | no | The collection page number | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | DocumentRequestListResource collection | array | | 403 | Forbidden | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/financing-cases/{financingCaseId}/document-requests' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/financing-cases/{financingCaseId}/document-requests', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### GET /api/financing-cases/{financingCaseId}/document-requests/fill-and-return-templates/{templateId}/download Download a fill-and-return template Downloads the template file for a fill-and-return document request. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | financingCaseId | path | string | yes | FillAndReturnTemplateDownloadResource identifier | | templateId | path | string | yes | FillAndReturnTemplateDownloadResource identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | FillAndReturnTemplateDownloadResource resource | FillAndReturnTemplateDownloadResource | | 403 | Forbidden | | | 404 | Resource not found | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/financing-cases/{financingCaseId}/document-requests/fill-and-return-templates/{templateId}/download' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/financing-cases/{financingCaseId}/document-requests/fill-and-return-templates/{templateId}/download', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### POST /api/financing-cases/{financingCaseId}/document-requests/information/{informationId}/respond Respond to an information request Submits a text response to an information request on a financing case. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | financingCaseId | path | string | yes | InformationResponseRequest identifier | | informationId | path | string | yes | InformationResponseRequest identifier | **Request body** | Property | Type | Required | Description | | --- | --- | --- | --- | | response | string\|null | no | | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | InformationResponseRequest resource created | InformationResponseRequest.DocumentRequestItemResponse | | 400 | Invalid input | | | 403 | Forbidden | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X POST 'https://sandbox.partner.miete24.com/api/financing-cases/{financingCaseId}/document-requests/information/{informationId}/respond' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/financing-cases/{financingCaseId}/document-requests/information/{informationId}/respond', { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` ### E-Signature Electronic signing of contracts. #### POST /api/financing-cases/{financingCaseId}/start-esignature Start the eSignature process for a financing case Submits authorized persons and starts the eSignature process. The financing case must have a quote in FINANCE_ACCEPTED status. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | financingCaseId | path | string | yes | StartESignatureRequest identifier | **Request body** | Property | Type | Required | Description | | --- | --- | --- | --- | | authorizedPersons | array | yes | Persons authorized to sign; at least one is required. | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | StartESignatureRequest resource created | StartESignatureRequest.StartESignatureResponse | | 400 | Invalid input | | | 403 | Forbidden | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X POST 'https://sandbox.partner.miete24.com/api/financing-cases/{financingCaseId}/start-esignature' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/financing-cases/{financingCaseId}/start-esignature', { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` ### Webhook Endpoint Webhook endpoint management. #### GET /api/webhook_endpoints Retrieves the collection of WebhookEndpoint resources. Retrieves the collection of WebhookEndpoint resources. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | page | query | integer | no | The collection page number | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | WebhookEndpoint collection | array | | 403 | Forbidden | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/webhook_endpoints' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/webhook_endpoints', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### POST /api/webhook_endpoints Creates a WebhookEndpoint resource. Creates a WebhookEndpoint resource. **Request body** | Property | Type | Required | Description | | --- | --- | --- | --- | | url | string\|null | yes | HTTPS URL that receives event notifications via POST. | | active | boolean | no | Whether deliveries to this endpoint are enabled. | **Request example** ```json { "url": "https://crm.example.com/webhooks/printer4you", "active": true } ``` **Responses** | Status | Description | Schema | | --- | --- | --- | | 201 | WebhookEndpoint resource created | WebhookEndpoint.WebhookEndpointSecretResponse-webhook_endpoint.secret | | 400 | Invalid input | | | 403 | Forbidden | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X POST 'https://sandbox.partner.miete24.com/api/webhook_endpoints' \ -H 'X-Api-Key: YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{"url":"https://crm.example.com/webhooks/printer4you","active":true}' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/webhook_endpoints', { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY', 'Content-Type': 'application/json', }, body: JSON.stringify({"url":"https://crm.example.com/webhooks/printer4you","active":true}), }); const data = await response.json(); ``` #### DELETE /api/webhook_endpoints/{ulid} Removes the WebhookEndpoint resource. Removes the WebhookEndpoint resource. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | ulid | path | string | yes | WebhookEndpoint identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 204 | WebhookEndpoint resource deleted | | | 403 | Forbidden | | | 404 | Resource not found | | **cURL** ```bash curl -X DELETE 'https://sandbox.partner.miete24.com/api/webhook_endpoints/{ulid}' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/webhook_endpoints/{ulid}', { method: 'DELETE', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### GET /api/webhook_endpoints/{ulid} Retrieves a WebhookEndpoint resource. Retrieves a WebhookEndpoint resource. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | ulid | path | string | yes | WebhookEndpoint identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | WebhookEndpoint resource | WebhookEndpoint-webhook_endpoint.read | | 403 | Forbidden | | | 404 | Resource not found | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/webhook_endpoints/{ulid}' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/webhook_endpoints/{ulid}', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` #### PATCH /api/webhook_endpoints/{ulid} Updates the WebhookEndpoint resource. Updates the WebhookEndpoint resource. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | ulid | path | string | yes | WebhookEndpoint identifier | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | WebhookEndpoint resource updated | WebhookEndpoint-webhook_endpoint.read | | 400 | Invalid input | | | 403 | Forbidden | | | 404 | Resource not found | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X PATCH 'https://sandbox.partner.miete24.com/api/webhook_endpoints/{ulid}' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/webhook_endpoints/{ulid}', { method: 'PATCH', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` ### Product Category Product category catalog. #### GET /api/product-categories List all product categories Returns all available product categories with id, slug, and name. Use the slug in cart checkout requests (categorySlug field) for precise AfA duration validation. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | page | query | integer | no | The collection page number | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | ProductCategoriesResource collection | array | | 403 | Forbidden | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/product-categories' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/product-categories', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` ### Product Sector Product sector catalog. #### GET /api/product-sectors List the allowed product sectors of the authenticated partner Returns the product sectors the authenticated partner is allowed to use, each with its machine-readable value and a human-readable label. Partners without a configured allowlist receive all sectors. Use the value in cart checkout requests to stay within the allowed sectors. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | page | query | integer | no | The collection page number | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | ProductSectorsResource collection | array | | 403 | Forbidden | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/product-sectors' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/product-sectors', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` ### SLA Service level agreements. #### GET /api/sla-files List custom SLA files available for the authenticated partner Returns the list of custom SLA descriptors (name + file identifier) fetched from Kairos for the authenticated partner's distribution hub. Soft-deleted SLAs are filtered out. Returns an empty list if the partner has no hub, the hub is not connected to Kairos, or Kairos is temporarily unreachable. **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | page | query | integer | no | The collection page number | **Responses** | Status | Description | Schema | | --- | --- | --- | | 200 | SlaFileListResource collection | array | | 403 | Forbidden | | **cURL** ```bash curl -X GET 'https://sandbox.partner.miete24.com/api/sla-files' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/sla-files', { method: 'GET', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` ### Sandbox Sandbox test endpoints. #### POST /api/sandbox/financing_cases/{id}/finance-decision Sandbox only: trigger a finance decision for a test financing case Sandbox-only endpoint for integration partners: drives the quote of a test financing case to FINANCE_ACCEPTED or FINANCE_REJECTED end-to-end, without an HMAC signature, response hash or Kairos call. Requires a sandbox API key (ROLE_API_USER) and only operates on financing cases owned by the calling partner. The quote state machine is driven directly, so the same downstream subscribers (partner mails, webhooks) fire as for a real decision. Responds 204 on success, 422 when the quote is in a non-decidable state, and 404 outside the sandbox environment (where the endpoint is inactive). **Parameters** | Name | In | Type | Required | Description | | --- | --- | --- | --- | --- | | id | path | string | yes | FinancingCase identifier | **Request body** | Property | Type | Required | Description | | --- | --- | --- | --- | | decision | string\|null | yes | | **Responses** | Status | Description | Schema | | --- | --- | --- | | 204 | FinancingCase resource created | | | 400 | Invalid input | | | 403 | Forbidden | | | 422 | Unprocessable entity | | **cURL** ```bash curl -X POST 'https://sandbox.partner.miete24.com/api/sandbox/financing_cases/{id}/finance-decision' \ -H 'X-Api-Key: YOUR_API_KEY' ``` **JavaScript** ```javascript const response = await fetch('https://sandbox.partner.miete24.com/api/sandbox/financing_cases/{id}/finance-decision', { method: 'POST', headers: { 'X-Api-Key': 'YOUR_API_KEY', }, }); const data = await response.json(); ``` ## Lifecycles ### Quote Lifecycle The full server-side state machine of a rental quote, from draft to completion. **Transitions** | Transition | From | To | | --- | --- | --- | | finalize | in_progress | in_review | | reactivate | review_expired | in_review | | apply_changes | change_requested | in_review | | accept_by_customer | in_review | accepted_by_customer | | accept_by_customer | in_progress | accepted_by_customer | | request_finance_review | accepted_by_customer | finance_review | | request_finance_review_direct | in_progress | finance_review | | finance_accept | finance_review | finance_accepted | | finance_accept | manual_finance_review | finance_accepted | | finance_accept | finance_questions | finance_accepted | | finance_accept | finance_rejected | finance_accepted | | complete | finance_accepted | completed | | request_changes | in_review | change_requested | | finance_needs_help | finance_review | finance_questions | | finance_needs_help | manual_finance_review | finance_questions | | start_manual_finance_review | accepted_by_customer | manual_finance_review | | start_manual_finance_review | in_progress | manual_finance_review | | reject_by_customer | in_review | rejected_by_customer | | expire | in_review | review_expired | | cancel | in_progress | canceled | | cancel | in_review | canceled | | cancel | review_expired | canceled | | cancel | change_requested | canceled | | cancel | accepted_by_customer | canceled | | cancel | rejected_by_customer | canceled | | cancel | finance_review | canceled | | cancel | manual_finance_review | canceled | | cancel | finance_questions | canceled | | cancel | finance_accepted | canceled | | cancel | finance_rejected | canceled | | cancel | completed | canceled | | finance_reject | finance_review | finance_rejected | | finance_reject | manual_finance_review | finance_rejected | | finance_reject | finance_questions | finance_rejected | | finance_resume | finance_rejected | finance_accepted | ```mermaid graph TB place0(["in_progress"]) place1(("in_review")) place2(("review_expired")) place3(("change_requested")) place4(("accepted_by_customer")) place5(("rejected_by_customer")) place6(("finance_review")) place7(("manual_finance_review")) place8(("finance_questions")) place9(("finance_accepted")) place10(("finance_rejected")) place11(("completed")) place12(("canceled")) place0-->|"finalize"|place1 place2-->|"reactivate"|place1 place3-->|"apply_changes"|place1 place1-->|"accept_by_customer"|place4 place0-->|"accept_by_customer"|place4 place4-->|"request_finance_review"|place6 place0-->|"request_finance_review_direct"|place6 place6-->|"finance_accept"|place9 place7-->|"finance_accept"|place9 place8-->|"finance_accept"|place9 place10-->|"finance_accept"|place9 place9-->|"complete"|place11 place1-->|"request_changes"|place3 place6-->|"finance_needs_help"|place8 place7-->|"finance_needs_help"|place8 place4-->|"start_manual_finance_review"|place7 place0-->|"start_manual_finance_review"|place7 place1-->|"reject_by_customer"|place5 place1-->|"expire"|place2 place0-->|"cancel"|place12 place1-->|"cancel"|place12 place2-->|"cancel"|place12 place3-->|"cancel"|place12 place4-->|"cancel"|place12 place5-->|"cancel"|place12 place6-->|"cancel"|place12 place7-->|"cancel"|place12 place8-->|"cancel"|place12 place9-->|"cancel"|place12 place10-->|"cancel"|place12 place11-->|"cancel"|place12 place6-->|"finance_reject"|place10 place7-->|"finance_reject"|place10 place8-->|"finance_reject"|place10 place10-->|"finance_resume"|place9 ``` ### Financing Flow The financing states of a quote (a filtered view of the quote lifecycle), from finance review to acceptance. **Transitions** | Transition | From | To | | --- | --- | --- | | request_finance_review | accepted_by_customer | finance_review | | request_finance_review_direct | in_progress | finance_review | | finance_accept | finance_review | finance_accepted | | finance_accept | manual_finance_review | finance_accepted | | finance_accept | finance_questions | finance_accepted | | finance_accept | finance_rejected | finance_accepted | | complete | finance_accepted | completed | | finance_needs_help | finance_review | finance_questions | | finance_needs_help | manual_finance_review | finance_questions | | start_manual_finance_review | accepted_by_customer | manual_finance_review | | start_manual_finance_review | in_progress | manual_finance_review | | finance_reject | finance_review | finance_rejected | | finance_reject | manual_finance_review | finance_rejected | | finance_reject | finance_questions | finance_rejected | | finance_resume | finance_rejected | finance_accepted | ```mermaid graph TB place0(["accepted_by_customer"]) place1(("finance_review")) place2(("in_progress")) place3(("finance_accepted")) place4(("manual_finance_review")) place5(("finance_questions")) place6(("finance_rejected")) place7(("completed")) place0-->|"request_finance_review"|place1 place2-->|"request_finance_review_direct"|place1 place1-->|"finance_accept"|place3 place4-->|"finance_accept"|place3 place5-->|"finance_accept"|place3 place6-->|"finance_accept"|place3 place3-->|"complete"|place7 place1-->|"finance_needs_help"|place5 place4-->|"finance_needs_help"|place5 place0-->|"start_manual_finance_review"|place4 place2-->|"start_manual_finance_review"|place4 place1-->|"finance_reject"|place6 place4-->|"finance_reject"|place6 place5-->|"finance_reject"|place6 place6-->|"finance_resume"|place3 ``` ### Contract Lifecycle The state machine of a signed contract, from signing to completion. **Transitions** | Transition | From | To | | --- | --- | --- | | sign | wait_for_signing | signed | | deliver | signed | delivery_approved | | deliver | post_processing_required | delivery_approved | | invoice_check | delivery_approved | invoice_checked | | complete | invoice_checked | completed | | post_processing | signed | post_processing_required | | cancel | wait_for_signing | canceled | | cancel | signed | canceled | | cancel | post_processing_required | canceled | | cancel | delivery_approved | canceled | | cancel | invoice_checked | canceled | | cancel | completed | canceled | ```mermaid graph TB place0(["wait_for_signing"]) place1(("signed")) place2(("post_processing_required")) place3(("delivery_approved")) place4(("invoice_checked")) place5(("completed")) place6(("canceled")) place0-->|"sign"|place1 place1-->|"deliver"|place3 place2-->|"deliver"|place3 place3-->|"invoice_check"|place4 place4-->|"complete"|place5 place1-->|"post_processing"|place2 place0-->|"cancel"|place6 place1-->|"cancel"|place6 place2-->|"cancel"|place6 place3-->|"cancel"|place6 place4-->|"cancel"|place6 place5-->|"cancel"|place6 ``` ### Quote Request Lifecycle The state machine of a partner quote request. **Transitions** | Transition | From | To | | --- | --- | --- | | convert_to_quote | pending | converted | | reject | pending | rejected | ```mermaid graph TB place0(["pending"]) place1(("converted")) place2(("rejected")) place0-->|"convert_to_quote"|place1 place0-->|"reject"|place2 ``` ## Data-model relationships | From | Property | To | Cardinality | | --- | --- | --- | --- | | Calculation | response | CalculationResponse | one | | Calculation.BulkCalculationResponse | results | BulkCalculationItemResult | many | | Calculation.CalculationResponse | offers | OfferItem | many | | Calculation.CalculationResponse | request | CalculateRentalPriceRequest | one | | CalculationResponse | offers | OfferItem | many | | CalculationResponse | request | CalculateRentalPriceRequest | one | | Cart.CartCheckoutRequest-cart.checkout | customer | CustomerData-cart.checkout | one | | Cart.CartCheckoutRequest.jsonld-cart.checkout | customer | CustomerData.jsonld-cart.checkout | one | | Cart.CartCreateDto-cart.create | items | CartItemCreateDto-cart.create | many | | Cart.CartCreateDto.jsonld-cart.create | items | CartItemCreateDto.jsonld-cart.create | many | | Cart.CartFinancingResponse-cart.financing | financingOptions | CartFinancingOptions-cart.financing | one | | Cart.CartFinancingResponse-cart.financing | items | CartItemFinancingResponse-cart.financing | many | | Cart.CartFinancingResponse-cart.financing_cart.status | financingOptions | CartFinancingOptions-cart.financing_cart.status | one | | Cart.CartFinancingResponse-cart.financing_cart.status | items | CartItemFinancingResponse-cart.financing_cart.status | many | | Cart.CartFinancingResponse.jsonld-cart.financing | financingOptions | CartFinancingOptions.jsonld-cart.financing | one | | Cart.CartFinancingResponse.jsonld-cart.financing | items | CartItemFinancingResponse.jsonld-cart.financing | many | | Cart.CartFinancingResponse.jsonld-cart.financing_cart.status | financingOptions | CartFinancingOptions.jsonld-cart.financing_cart.status | one | | Cart.CartFinancingResponse.jsonld-cart.financing_cart.status | items | CartItemFinancingResponse.jsonld-cart.financing_cart.status | many | | CartItemFinancingResponse-cart.financing | financingOptions | CartFinancingOptions-cart.financing | one | | CartItemFinancingResponse-cart.financing_cart.status | financingOptions | CartFinancingOptions-cart.financing_cart.status | one | | CartItemFinancingResponse.jsonld-cart.financing | financingOptions | CartFinancingOptions.jsonld-cart.financing | one | | CartItemFinancingResponse.jsonld-cart.financing_cart.status | financingOptions | CartFinancingOptions.jsonld-cart.financing_cart.status | one | | Contract | authorizedPersons | AuthorizedPerson | many | | Contract | contactAddress | ContractAddress | one | | Contract | customer | Customer | one | | Contract | items | ContractItem | many | | Contract | shippingAddress | ContractAddress | one | | Customer | addresses | Address | many | | Customer | authorizedPersons | AuthorizedPerson | many | | Customer | contactAddresses | Address | many | | Customer | partner | Partner | one | | Customer | shippingAddresses | Address | many | | FinancingCase-financing_case.read | partner | Partner-financing_case.read | one | | FinancingCase-financing_case.read | quotes | Quote-financing_case.read | many | | FinancingCase-financing_case.read | requestedDocuments | RequestedDocument-financing_case.read | many | | FinancingCase-financing_case.read | requestedFillAndReturns | RequestedFillAndReturn-financing_case.read | many | | FinancingCase-financing_case.read | requestedInformation | RequestedInformation-financing_case.read | many | | FinancingCase-financing_case.read | requestedItems | RequestedItemInterface-financing_case.read | many | | FinancingCase.jsonld-financing_case.read | partner | Partner.jsonld-financing_case.read | one | | FinancingCase.jsonld-financing_case.read | quotes | Quote.jsonld-financing_case.read | many | | FinancingCase.jsonld-financing_case.read | requestedDocuments | RequestedDocument.jsonld-financing_case.read | many | | FinancingCase.jsonld-financing_case.read | requestedFillAndReturns | RequestedFillAndReturn.jsonld-financing_case.read | many | | FinancingCase.jsonld-financing_case.read | requestedInformation | RequestedInformation.jsonld-financing_case.read | many | | FinancingCase.jsonld-financing_case.read | requestedItems | RequestedItemInterface.jsonld-financing_case.read | many | | Profile | addresses | Address | many | | Quote | activeFinancingResponses | Collection | one | | Quote | authorizedPersons | AuthorizedPerson | many | | Quote | items | QuoteItem | many | | Quote | partner | Partner | one | | Quote | quoteFeedbacks | QuoteFeedback | many | | Quote-financing_case.read | authorizedPersons | AuthorizedPerson-financing_case.read | many | | Quote-financing_case.read | items | QuoteItem-financing_case.read | many | | Quote.jsonld-financing_case.read | authorizedPersons | AuthorizedPerson.jsonld-financing_case.read | many | | Quote.jsonld-financing_case.read | items | QuoteItem.jsonld-financing_case.read | many | | RequestedDocument | activeResponseDocuments | FinancingDocument | many | | RequestedDocument | responseDocuments | FinancingDocument | many | | RequestedDocument | transmittableResponseDocuments | FinancingDocument | many | | RequestedDocument | verifiedResponseDocuments | FinancingDocument | many | | RequestedFillAndReturn | activeResponseDocuments | FinancingDocument | many | | RequestedFillAndReturn | responseDocuments | FinancingDocument | many | | RequestedFillAndReturn | transmittableResponseDocuments | FinancingDocument | many | | RequestedFillAndReturn | verifiedResponseDocuments | FinancingDocument | many | | StartESignatureRequest | authorizedPersons | AuthorizedPersonData | many | | User | customers | Customer | many | | User | distributionHubs | DistributionHub | many | | User | dois | DOI | many | | User | quotes | Quote | many | | WebhookEndpoint | partner | Partner | one | ## Schemas Component schemas and their allowed values, from the OpenAPI spec. ### Address | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | partner | mixed | | no | | | isDefault | boolean | | no | | | id | integer | | no | | | street | string | | yes | | | number | string | | yes | | | postalCode | string | | yes | | | city | string | | yes | | | country | string | | yes | | | type | string | | no | | | default | boolean | | no | | | shippingAddress | boolean | | no | | | contactAddress | boolean | | no | | ### Address-financing_case.read _No documented properties._ ### Address.jsonld-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | ### AuthorizedPerson | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | firstName | string | | yes | | | lastName | string | | yes | | | email | string | | yes | | | confirmedByExternal | boolean | | no | | | soloSigneePermitted | boolean | | no | | | createdAt | string | | no | | | updatedAt | string | | no | | ### AuthorizedPerson-financing_case.read _No documented properties._ ### AuthorizedPerson.jsonld-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | ### AuthorizedPersonData | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | firstName | string | | yes | Given name of the authorized signer. | | lastName | string | | yes | Family name of the authorized signer. | | email | string | | yes | Email address the signature invitation is sent to. | | soloSigneePermitted | boolean | | no | If true this person may sign alone (default false). | ### BulkCalculationItemResult | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | index | integer | | no | | | success | boolean | | no | | | response | mixed | | no | | | error | array\|null | | no | | ### CalculateRentalPriceRequest | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | allowedProductSectors | array | | no | | | serviceCost | number\|null | | no | | | paymentInterval | string | monthly, quarterly | no | Zahlungsweise; Default monthly. monthly schlägt den konfigurierten Aufschlag (PH-577) auf die Monatsrate auf, quarterly nicht. | | durations | array | | yes | | | type | integer\|null | 0, 1, 2, | no | | | calculationTypes | array | | yes | | | partner | mixed | | no | | | acquisitionCost | number\|null | | no | | | margin | number | | no | | | productSector | string | IT_AND_OFFICE_EQUIPMENT, TESVOLT_ENERGY_STORAGE, RENEWABLE_ENERGY_AND_ENERGY_STORAGE, FURNITURE_AND_HOME_ACCESSORIES, MEDICAL_DEVICES, KITCHEN_AND_GASTRONOMY_EQUIPMENT, EVENT_TECHNOLOGY, HOME_AND_ENTERTAINMENT_ELECTRONICS, CONSTRUCTION_MACHINERY_AND_TOOLS, TRANSPORT_AND_LOGISTICS_EQUIPMENT, PHOTO_AND_VIDEO_TECHNOLOGY, FITNESS_AND_SPORTS_EQUIPMENT, SECURITY_EQUIPMENT, POINT_OF_SALES, OTHERS | no | API write accessor: accepts the raw JSON string so invalid values surface as Choice violations instead of enum denormalization fatals (PH-984). | | category | mixed | | no | | | categorySlug | string\|null | | no | only for internal use for now | | installationCost | number\|null | | no | | | public | boolean | | no | | | active | boolean | | no | | | distributionHub | string\|null | | no | | | persistedRentalFactor | string\|null | | no | Rental factor (DECIMAL(7,3) string) frozen onto the source quote (PH-486), or null for ad-hoc estimates that must price from the live lookup. | | commission | integer | | no | Commission tier the price is resolved for, in percent (PH-899). | | userType | string | customer, partner | no | | | requestType | integer | 0, 1, 2 | no | | | completeAcquisitionCost | number | | no | | | partnerCalculation | boolean | | no | | | selectedCalculationTypes | array | | no | | | selectedDurations | array | | no | | | distributionHubOverride | string\|null | | no | | | complete | boolean | | no | A request is complete when a ProductSector can be resolved (either set explicitly or derived from a Category). Single source of truth for the boundary validation, the controller pre-form check, and the form-builder defense-in-depth guard. | ### Calculation | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | uri | string\|null | | no | | | requestFormUri | string\|null | | no | | | id | string\|null | | no | | | quote | mixed | | no | | | createdAt | string | | no | | | partner | mixed | | no | | | category | mixed | | no | | | response | CalculationResponse | | no | | ### Calculation.BulkCalculationResponse | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | results | array | | no | | ### Calculation.CalculateRentalPriceRequest | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | allowedProductSectors | array | | no | | | serviceCost | number\|null | | no | | | paymentInterval | string | monthly, quarterly | no | Zahlungsweise; Default monthly. monthly schlägt den konfigurierten Aufschlag (PH-577) auf die Monatsrate auf, quarterly nicht. | | durations | array | | yes | | | type | integer\|null | 0, 1, 2, | no | | | calculationTypes | array | | yes | | | partner | mixed | | no | | | acquisitionCost | number\|null | | no | | | margin | number | | no | | | productSector | string | IT_AND_OFFICE_EQUIPMENT, TESVOLT_ENERGY_STORAGE, RENEWABLE_ENERGY_AND_ENERGY_STORAGE, FURNITURE_AND_HOME_ACCESSORIES, MEDICAL_DEVICES, KITCHEN_AND_GASTRONOMY_EQUIPMENT, EVENT_TECHNOLOGY, HOME_AND_ENTERTAINMENT_ELECTRONICS, CONSTRUCTION_MACHINERY_AND_TOOLS, TRANSPORT_AND_LOGISTICS_EQUIPMENT, PHOTO_AND_VIDEO_TECHNOLOGY, FITNESS_AND_SPORTS_EQUIPMENT, SECURITY_EQUIPMENT, POINT_OF_SALES, OTHERS | no | API write accessor: accepts the raw JSON string so invalid values surface as Choice violations instead of enum denormalization fatals (PH-984). | | category | mixed | | no | | | categorySlug | string\|null | | no | only for internal use for now | | installationCost | number\|null | | no | | | public | boolean | | no | | | active | boolean | | no | | | distributionHub | string\|null | | no | | | persistedRentalFactor | string\|null | | no | Rental factor (DECIMAL(7,3) string) frozen onto the source quote (PH-486), or null for ad-hoc estimates that must price from the live lookup. | | commission | integer | | no | Commission tier the price is resolved for, in percent (PH-899). | | userType | string | customer, partner | no | | | requestType | integer | 0, 1, 2 | no | | | completeAcquisitionCost | number | | no | | | partnerCalculation | boolean | | no | | | selectedCalculationTypes | array | | no | | | selectedDurations | array | | no | | | distributionHubOverride | string\|null | | no | | | complete | boolean | | no | A request is complete when a ProductSector can be resolved (either set explicitly or derived from a Category). Single source of truth for the boundary validation, the controller pre-form check, and the form-builder defense-in-depth guard. | ### Calculation.CalculationResponse | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | offers | array | | no | | | request | CalculateRentalPriceRequest | | no | | | currency | string | | no | | | selectedOffer | mixed | | no | | ### CalculationResponse | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | offers | array | | no | | | request | CalculateRentalPriceRequest | | no | | | currency | string | | no | | | selectedOffer | mixed | | no | | ### Cart.CartCheckoutRequest-cart.checkout | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | duration | integer | | yes | Ausgewählte Laufzeit in Monaten | | financingType | string | rent, rent_to_own, leasing, print_plan, print_plan_3kdg_12verl, print_plan_6kdg_12verl | yes | Financing type. Use "print_plan" (PH-590) to check the cart out as a Print-Plan contract: the cart items per-device click-billing data (CartItemCreateDto.devices) plus the printPlanContractTerms block are turned into a Print-Plan quote. serviceCost and customSlaFileName are not allowed for print_plan. PH-755: "print_plan_3kdg_12verl" and "print_plan_6kdg_12verl" are Print-Plan contract variants that behave identically but send their own producttype to GRENKE. | | paymentInterval | string | monthly, quarterly | no | Zahlungsweise; Default monthly. | | commission | integer | | no | Provisionsstufe in Prozent; Default 0. Es sind nur Stufen zulässig, für die dem Partner eine Mietfaktorenliste zugeordnet ist. | | quoteNumber | string\|null | | no | Optional custom quote number. | | printPlanContractTerms | mixed | | no | Print-Plan contract terms (PH-590); only applied when financingType=print_plan. Optional — defaults: 5% page coverage, 15% color ratio, full maintenance. | | customer | CustomerData-cart.checkout | | yes | Kundendaten | | serviceCost | number\|null | | no | Monatliche Servicegebühr für die Miete. | | customSlaFileName | string\|null | | no | Kairos "file" identifier of the custom SLA selected for this quote. | ### Cart.CartCheckoutRequest.jsonld-cart.checkout | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | duration | integer | | yes | Ausgewählte Laufzeit in Monaten | | financingType | string | rent, rent_to_own, leasing, print_plan, print_plan_3kdg_12verl, print_plan_6kdg_12verl | yes | Financing type. Use "print_plan" (PH-590) to check the cart out as a Print-Plan contract: the cart items per-device click-billing data (CartItemCreateDto.devices) plus the printPlanContractTerms block are turned into a Print-Plan quote. serviceCost and customSlaFileName are not allowed for print_plan. PH-755: "print_plan_3kdg_12verl" and "print_plan_6kdg_12verl" are Print-Plan contract variants that behave identically but send their own producttype to GRENKE. | | paymentInterval | string | monthly, quarterly | no | Zahlungsweise; Default monthly. | | commission | integer | | no | Provisionsstufe in Prozent; Default 0. Es sind nur Stufen zulässig, für die dem Partner eine Mietfaktorenliste zugeordnet ist. | | quoteNumber | string\|null | | no | Optional custom quote number. | | printPlanContractTerms | mixed | | no | Print-Plan contract terms (PH-590); only applied when financingType=print_plan. Optional — defaults: 5% page coverage, 15% color ratio, full maintenance. | | customer | CustomerData.jsonld-cart.checkout | | yes | Kundendaten | | serviceCost | number\|null | | no | Monatliche Servicegebühr für die Miete. | | customSlaFileName | string\|null | | no | Kairos "file" identifier of the custom SLA selected for this quote. | ### Cart.CartCreateDto-cart.create | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | items | array | | yes | | ### Cart.CartCreateDto.jsonld-cart.create | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | items | array | | yes | | ### Cart.CartFinancingResponse-cart.financing | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | purchasePrice | number | | no | | | financingOptions | CartFinancingOptions-cart.financing | | no | Finanzierungsoptionen für den gesamten Warenkorb | | items | array | | no | Finanzierungsoptionen für einzelne Positionen | | cartId | string | | no | | | recurringServiceFee | number | | no | Recurring Print-Plan service fee; null for non-Print-Plan carts. | ### Cart.CartFinancingResponse-cart.financing_cart.status | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | purchasePrice | number | | no | | | financingOptions | CartFinancingOptions-cart.financing_cart.status | | no | Finanzierungsoptionen für den gesamten Warenkorb | | items | array | | no | Finanzierungsoptionen für einzelne Positionen | | cartId | string | | no | | | recurringServiceFee | number | | no | Recurring Print-Plan service fee; null for non-Print-Plan carts. | ### Cart.CartFinancingResponse.jsonld-cart.financing | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | purchasePrice | number | | no | | | financingOptions | CartFinancingOptions.jsonld-cart.financing | | no | Finanzierungsoptionen für den gesamten Warenkorb | | items | array | | no | Finanzierungsoptionen für einzelne Positionen | | cartId | string | | no | | | recurringServiceFee | number | | no | Recurring Print-Plan service fee; null for non-Print-Plan carts. | ### Cart.CartFinancingResponse.jsonld-cart.financing_cart.status | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | purchasePrice | number | | no | | | financingOptions | CartFinancingOptions.jsonld-cart.financing_cart.status | | no | Finanzierungsoptionen für den gesamten Warenkorb | | items | array | | no | Finanzierungsoptionen für einzelne Positionen | | cartId | string | | no | | | recurringServiceFee | number | | no | Recurring Print-Plan service fee; null for non-Print-Plan carts. | ### Cart.CheckoutResponseDto-checkout.response | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | financeCaseId | string | | no | The UUID of the financing case | | financeCaseLink | string | | no | Absolute URL to the financing case detail page | | quoteId | string | | no | | | quoteLink | string | | no | | | message | string\|null | | no | Optional message | | recurringServiceFee | number | | no | Server-computed recurring Print-Plan service fee. Present only for financingType=print_plan; null for rent/leasing/rent_to_own. | | idempotencyNotice | string\|null | | no | Transition-period hint (PH-573): set when the request omitted the Idempotency-Key header, pointing callers to the upcoming requirement. | ### Cart.CheckoutResponseDto.jsonld-checkout.response | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | financeCaseId | string | | no | The UUID of the financing case | | financeCaseLink | string | | no | Absolute URL to the financing case detail page | | quoteId | string | | no | | | quoteLink | string | | no | | | message | string\|null | | no | Optional message | | recurringServiceFee | number | | no | Server-computed recurring Print-Plan service fee. Present only for financingType=print_plan; null for rent/leasing/rent_to_own. | | idempotencyNotice | string\|null | | no | Transition-period hint (PH-573): set when the request omitted the Idempotency-Key header, pointing callers to the upcoming requirement. | ### CartFinancingOptions-cart.financing | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | rent | array | | no | Mietoptionen für unterschiedliche Laufzeiten | | rentToOwn | array | | no | Mietkaufoptionen für unterschiedliche Laufzeiten | | leasing | array | | no | Leasingoptionen für unterschiedliche Laufzeiten | | printPlan | array | | no | Print-Plan options for different durations. | | partialAmortisationLeasing | array | | no | Partial-amortisation leasing options for different durations (PH-480). | | printPlan3Kdg12Verl | array | | no | Print-Plan (3-month cancellation / 12-month renewal) options per duration. | | printPlan6Kdg12Verl | array | | no | Print-Plan (6-month cancellation / 12-month renewal) options per duration. | ### CartFinancingOptions-cart.financing_cart.status | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | rent | array | | no | Mietoptionen für unterschiedliche Laufzeiten | | rentToOwn | array | | no | Mietkaufoptionen für unterschiedliche Laufzeiten | | leasing | array | | no | Leasingoptionen für unterschiedliche Laufzeiten | | printPlan | array | | no | Print-Plan options for different durations. | | partialAmortisationLeasing | array | | no | Partial-amortisation leasing options for different durations (PH-480). | | printPlan3Kdg12Verl | array | | no | Print-Plan (3-month cancellation / 12-month renewal) options per duration. | | printPlan6Kdg12Verl | array | | no | Print-Plan (6-month cancellation / 12-month renewal) options per duration. | ### CartFinancingOptions.jsonld-cart.financing | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | rent | array | | no | Mietoptionen für unterschiedliche Laufzeiten | | rentToOwn | array | | no | Mietkaufoptionen für unterschiedliche Laufzeiten | | leasing | array | | no | Leasingoptionen für unterschiedliche Laufzeiten | | printPlan | array | | no | Print-Plan options for different durations. | | partialAmortisationLeasing | array | | no | Partial-amortisation leasing options for different durations (PH-480). | | printPlan3Kdg12Verl | array | | no | Print-Plan (3-month cancellation / 12-month renewal) options per duration. | | printPlan6Kdg12Verl | array | | no | Print-Plan (6-month cancellation / 12-month renewal) options per duration. | ### CartFinancingOptions.jsonld-cart.financing_cart.status | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | rent | array | | no | Mietoptionen für unterschiedliche Laufzeiten | | rentToOwn | array | | no | Mietkaufoptionen für unterschiedliche Laufzeiten | | leasing | array | | no | Leasingoptionen für unterschiedliche Laufzeiten | | printPlan | array | | no | Print-Plan options for different durations. | | partialAmortisationLeasing | array | | no | Partial-amortisation leasing options for different durations (PH-480). | | printPlan3Kdg12Verl | array | | no | Print-Plan (3-month cancellation / 12-month renewal) options per duration. | | printPlan6Kdg12Verl | array | | no | Print-Plan (6-month cancellation / 12-month renewal) options per duration. | ### CartItemCreateDto-cart.create | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | productNumber | string | | no | | | productName | string | | no | | | productSku | string\|null | | no | | | quantity | integer | | no | | | price | number | | no | | | productOptions | array\|null | | no | | | productSector | string\|null | IT_AND_OFFICE_EQUIPMENT, TESVOLT_ENERGY_STORAGE, RENEWABLE_ENERGY_AND_ENERGY_STORAGE, FURNITURE_AND_HOME_ACCESSORIES, MEDICAL_DEVICES, KITCHEN_AND_GASTRONOMY_EQUIPMENT, EVENT_TECHNOLOGY, HOME_AND_ENTERTAINMENT_ELECTRONICS, CONSTRUCTION_MACHINERY_AND_TOOLS, TRANSPORT_AND_LOGISTICS_EQUIPMENT, PHOTO_AND_VIDEO_TECHNOLOGY, FITNESS_AND_SPORTS_EQUIPMENT, SECURITY_EQUIPMENT, POINT_OF_SALES, OTHERS, | no | Product sector classification for financing calculations | | categoryId | integer\|null | | no | Optional category ID for precise AfA duration validation. Takes precedence over categorySlug. If omitted, categorySlug is used as fallback. | | categorySlug | string\|null | | no | Optional category slug for precise AfA duration validation. If categoryId is provided, this field is ignored. | | devices | array | | no | Optional Print-Plan per-device click-billing data (PH-590). One entry per physical unit, so the number of devices must equal the item quantity. Leave empty for regular rent/leasing items. Carried into a Print-Plan quote when the cart is checked out with financingType=print_plan. | ### CartItemCreateDto.jsonld-cart.create | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | productNumber | string | | no | | | productName | string | | no | | | productSku | string\|null | | no | | | quantity | integer | | no | | | price | number | | no | | | productOptions | array\|null | | no | | | productSector | string\|null | IT_AND_OFFICE_EQUIPMENT, TESVOLT_ENERGY_STORAGE, RENEWABLE_ENERGY_AND_ENERGY_STORAGE, FURNITURE_AND_HOME_ACCESSORIES, MEDICAL_DEVICES, KITCHEN_AND_GASTRONOMY_EQUIPMENT, EVENT_TECHNOLOGY, HOME_AND_ENTERTAINMENT_ELECTRONICS, CONSTRUCTION_MACHINERY_AND_TOOLS, TRANSPORT_AND_LOGISTICS_EQUIPMENT, PHOTO_AND_VIDEO_TECHNOLOGY, FITNESS_AND_SPORTS_EQUIPMENT, SECURITY_EQUIPMENT, POINT_OF_SALES, OTHERS, | no | Product sector classification for financing calculations | | categoryId | integer\|null | | no | Optional category ID for precise AfA duration validation. Takes precedence over categorySlug. If omitted, categorySlug is used as fallback. | | categorySlug | string\|null | | no | Optional category slug for precise AfA duration validation. If categoryId is provided, this field is ignored. | | devices | array | | no | Optional Print-Plan per-device click-billing data (PH-590). One entry per physical unit, so the number of devices must equal the item quantity. Leave empty for regular rent/leasing items. Carried into a Print-Plan quote when the cart is checked out with financingType=print_plan. | ### CartItemFinancingResponse-cart.financing | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | productNumber | string | | no | | | productName | string | | no | | | productSku | string\|null | | no | | | quantity | integer | | no | | | unitPrice | number | | no | | | totalPrice | number | | no | | | financingOptions | CartFinancingOptions-cart.financing | | no | Finanzierungsoptionen für diesen Artikel | | devices | array | | no | Print-Plan per-device click-billing data (PH-590), echoed from the stored cart. Empty for regular rent/leasing items. | ### CartItemFinancingResponse-cart.financing_cart.status | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | productNumber | string | | no | | | productName | string | | no | | | productSku | string\|null | | no | | | quantity | integer | | no | | | unitPrice | number | | no | | | totalPrice | number | | no | | | financingOptions | CartFinancingOptions-cart.financing_cart.status | | no | Finanzierungsoptionen für diesen Artikel | | devices | array | | no | Print-Plan per-device click-billing data (PH-590), echoed from the stored cart. Empty for regular rent/leasing items. | ### CartItemFinancingResponse.jsonld-cart.financing | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | productNumber | string | | no | | | productName | string | | no | | | productSku | string\|null | | no | | | quantity | integer | | no | | | unitPrice | number | | no | | | totalPrice | number | | no | | | financingOptions | CartFinancingOptions.jsonld-cart.financing | | no | Finanzierungsoptionen für diesen Artikel | | devices | array | | no | Print-Plan per-device click-billing data (PH-590), echoed from the stored cart. Empty for regular rent/leasing items. | ### CartItemFinancingResponse.jsonld-cart.financing_cart.status | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | productNumber | string | | no | | | productName | string | | no | | | productSku | string\|null | | no | | | quantity | integer | | no | | | unitPrice | number | | no | | | totalPrice | number | | no | | | financingOptions | CartFinancingOptions.jsonld-cart.financing_cart.status | | no | Finanzierungsoptionen für diesen Artikel | | devices | array | | no | Print-Plan per-device click-billing data (PH-590), echoed from the stored cart. Empty for regular rent/leasing items. | ### Category | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer\|null | | no | | | parentCategory | mixed | | no | | | productSector | string\|null | IT_AND_OFFICE_EQUIPMENT, TESVOLT_ENERGY_STORAGE, RENEWABLE_ENERGY_AND_ENERGY_STORAGE, FURNITURE_AND_HOME_ACCESSORIES, MEDICAL_DEVICES, KITCHEN_AND_GASTRONOMY_EQUIPMENT, EVENT_TECHNOLOGY, HOME_AND_ENTERTAINMENT_ELECTRONICS, CONSTRUCTION_MACHINERY_AND_TOOLS, TRANSPORT_AND_LOGISTICS_EQUIPMENT, PHOTO_AND_VIDEO_TECHNOLOGY, FITNESS_AND_SPORTS_EQUIPMENT, SECURITY_EQUIPMENT, POINT_OF_SALES, OTHERS, | yes | | | articleType | integer\|null | 0, 1, 2, | yes | | | grenkeObjectTypeId | integer\|null | | no | | | slug | string\|null | | no | | | afaMinMonths | integer\|null | | no | | | afaMaxMonths | integer\|null | | no | | | hasPrintPlanCapability | boolean | | no | Marks categories whose products can carry Print-Plan master data (PH-524). Drives Form visibility, validation and Wizard pre-fill for Drucker/Kopierer-style articles; checked instead of slug/name matches so the trigger stays language-independent and extensible. | | updatedAt | string\|null | | no | | | name | string | | no | | | effectiveAfaMinMonths | integer\|null | | no | Resolve effective AfA minimum months with parent category fallback. | | effectiveAfaMaxMonths | integer\|null | | no | Resolve effective AfA maximum months with parent category fallback. | | printPlanCapability | boolean | | no | | ### Category-quote_request.read _No documented properties._ ### Category.jsonld-quote_request.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | ### Collection | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | empty | boolean | | no | Checks whether the collection is empty (contains no elements). | | keys | mixed | | no | Gets all keys/indices of the collection. | | values | array | | no | Gets all values of the collection. | | iterator | mixed | | no | | ### Contract | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | contractNumber | string\|null | | no | | | id | string\|null | | no | | | updatedAt | string | | no | | | authorizedPersons | array | | no | | | createdAt | string | | yes | | | validUntil | string\|null | | no | | | status | string | wait_for_signing, signed, post_processing_required, delivery_approved, invoice_checked, completed, canceled | no | | | customer | Customer | | yes | | | items | array | | no | | | completedAt | string\|null | | no | | | deletedAt | string\|null | | no | | | quote | string\|null | | no | | | deleted | boolean | | no | | | shippingAddress | ContractAddress | | no | | | contactAddress | ContractAddress | | no | | | monthlyCosts | number | | no | | | salesVolume | number | | no | Contract revenue = Σ acquisition values across all items. Semantic alias for the sum over the historically misleadingly-named monthlyPrice field. Aggregated per partner by ContractRepository::getTotalSalesVolumeMapByPartners (same convention as FinancingCase::getTotalValue in the contract branch). | ### Contract.AddContractNumberRequest | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | contractNumber | string\|null | | no | Reference number assigned to the contract for partner-side tracking. | ### Contract.ContractNumberResponse | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | string | | no | | | contractNumber | string\|null | | no | | ### ContractAddress | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | contract | string | | no | | | id | integer | | no | | | street | string | | yes | | | number | string | | yes | | | postalCode | string | | yes | | | city | string | | yes | | | country | string | | yes | | | type | string | | no | | | shippingAddress | boolean | | no | | | contactAddress | boolean | | no | | ### ContractItem | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | contract | string\|null | | no | | | serialNumber | string\|null | | no | | | product | string\|null | | no | | | productName | string\|null | | no | Snapshot of Product.name taken at contract creation (PH-510). | | productSubtitle | string\|null | | no | Snapshot of Product.subtitle taken at contract creation (PH-510). | | productSku | string\|null | | no | Snapshot of Product.number (SKU) taken at contract creation (PH-510). | | monthlyPrice | number | | no | | | salesValue | number | | no | Per-item acquisition value. Semantic alias for the historically misleadingly-named monthlyPrice field — ContractItem::create copies QuoteItem.pricePerItem (per-item acquisition value) into this column. New code should use this method; getMonthlyPrice is retained for backwards compatibility (templates, not-yet-migrated callers). | ### Customer | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer\|null | | no | | | customerNumber | string\|null | | no | | | firstName | string\|null | | no | | | lastName | string\|null | | no | | | companyName | string\|null | | no | | | email | string\|null | | no | | | phone | string\|null | | no | | | phoneCountryIso | string\|null | | no | | | phoneExt | string\|null | | no | | | customerType | string | company, freelancer, public_institution | no | | | user | mixed | | no | | | addresses | array
| | no | | | authorizedPersons | array | | no | Customer-side authorized persons only (the customer's own master data). | | crefoNo | string\|null | | no | | | callbackRoutingMode | string | use_default, route_to_partner, route_to_customer | no | | | partner | Partner | | no | | | defaultShippingAddress | mixed | | no | | | shippingAddresses | array
| | no | | | defaultContactAddress | mixed | | no | | | contactAddresses | array
| | no | | | name | string | | no | | | fullName | string | | no | | | revenue | number | | no | | | solvencyCheckCompanyName | string\|null | | no | | | solvencyCheckAddress | mixed | | no | | | currentSolvencyStatus | string | | no | | ### Customer-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer\|null | | no | | | customerNumber | string\|null | | no | | | firstName | string\|null | | no | | | lastName | string\|null | | no | | | companyName | string\|null | | no | | | email | string\|null | | no | | | customerType | string | company, freelancer, public_institution | no | | ### Customer.jsonld-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | id | integer\|null | | no | | | customerNumber | string\|null | | no | | | firstName | string\|null | | no | | | lastName | string\|null | | no | | | companyName | string\|null | | no | | | email | string\|null | | no | | | customerType | string | company, freelancer, public_institution | no | | ### CustomerData-cart.checkout | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | firstName | string | | no | | | lastName | string | | no | | | email | string | | no | | | street | string | | no | | | houseNumber | string | | no | | | zipCode | string | | no | | | city | string | | no | | | country | string | | no | | | phone | string\|null | | no | | | company | string | | no | | | vatId | string\|null | | no | | ### CustomerData.jsonld-cart.checkout | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | firstName | string | | no | | | lastName | string | | no | | | email | string | | no | | | street | string | | no | | | houseNumber | string | | no | | | zipCode | string | | no | | | city | string | | no | | | country | string | | no | | | phone | string\|null | | no | | | company | string | | no | | | vatId | string\|null | | no | | ### DOI | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | hash | string | | no | | | user | mixed | | no | | | validity | string | | no | | | expired | boolean | | no | | ### DistributionHub | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer\|null | | no | | | title | string | | yes | | | deliveryProofMethod | string | own_delivery_note, docusign_handover_confirmation | no | Delivery-proof method for this grenke hub (PH-700). | | externalId | string\|null | | no | | | supplierId | string\|null | | no | | | contactEmail | string\|null | | no | | | billingEmail | string\|null | | no | Returns the billing email, falling back to contactEmail if not set or empty. | | supplierEmail | string\|null | | no | Returns the hub's optional supplier email (PH-734). Unlike contactEmail/billingEmail there is NO ENV fallback and no raw variant: there is no shared grenke default to leak, so this already returns only the hub's own configured address (or null). | | kairosEnabled | boolean | | no | | | partnerInvoiceEqualsGrenkeInvoice | boolean | | no | | | allowPartnerSigneeManagement | boolean | | no | | | billingCountersignerType | string\|null | | no | | | billingCountersignerSigningGroupId | string\|null | | no | | | billingCountersignerSigningGroupName | string\|null | | no | | | billingCountersignerUserId | string\|null | | no | | | billingCountersignerUserName | string\|null | | no | | | billingCountersignerUserEmail | string\|null | | no | | | centralBackofficeSigningGroupId | string\|null | | no | | | centralBackofficeSigningGroupName | string\|null | | no | | | typeEnum | string | grenke | no | | | rawContactEmail | string\|null | | no | Returns the hub's own configured contact email WITHOUT the DEFAULT_GRENKE_CANCEL_MAIL_ADDRESS fallback. Use for routing that must only reach a hub's real mailbox (not the shared Grenke default). | | rawBillingEmail | string\|null | | no | | ### DocumentRequestListResource.DocumentRequestItemResponse | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | type | string | | no | | | label | string | | no | | | status | string | | no | | | category | string\|null | | no | | | templateDownloadUrl | string\|null | | no | | | requestedAt | string | | no | | ### FillAndReturnTemplateDownloadResource _No documented properties._ ### FinancingCase-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | string\|null | | no | | | caseNumber | string\|null | | no | | | quoteRequest | string\|null | | no | | | quotes | array | | no | | | contracts | array | | no | | | documents | array | | no | | | requestedDocuments | array | | no | | | requestedInformation | array | | no | | | requestedFillAndReturns | array | | no | | | documentsRequired | boolean | | no | | | status | string\|null | | no | | | createdAt | string | | no | | | updatedAt | string\|null | | no | | | deletedAt | string\|null | | no | | | customer | mixed | | no | | | partner | Partner-financing_case.read | | no | | | requestedItems | array | | no | Returns merged list of all requested items (documents + information + fill-and-return), sorted by requestedAt. | | type | string | | no | | | financingRequest | boolean | | no | | | contractNumber | string | | no | | | quoteNumber | string | | no | | | customerType | string\|null | | no | | | customerCompanyName | string\|null | | no | | | customerName | string\|null | | no | | | productSector | string\|null | | no | | | message | string\|null | | no | | | monthlyRate | number\|null | | no | | | totalValue | mixed | | no | | | calculationType | string\|null | rent, leasing, rent_to_own, print_plan, partial_amortisation_leasing, print_plan_3kdg_12verl, print_plan_6kdg_12verl, | no | | | duration | integer\|null | | no | | | financingNumber | string\|null | | no | | | openCallbackRequestCount | integer | | no | | ### FinancingCase.SandboxFinanceDecisionRequest | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | decision | string\|null | accepted, rejected | yes | | ### FinancingCase.jsonld-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | id | string\|null | | no | | | caseNumber | string\|null | | no | | | quoteRequest | string\|null | | no | | | quotes | array | | no | | | contracts | array | | no | | | documents | array | | no | | | requestedDocuments | array | | no | | | requestedInformation | array | | no | | | requestedFillAndReturns | array | | no | | | documentsRequired | boolean | | no | | | status | string\|null | | no | | | createdAt | string | | no | | | updatedAt | string\|null | | no | | | deletedAt | string\|null | | no | | | customer | mixed | | no | | | partner | Partner.jsonld-financing_case.read | | no | | | requestedItems | array | | no | Returns merged list of all requested items (documents + information + fill-and-return), sorted by requestedAt. | | type | string | | no | | | financingRequest | boolean | | no | | | contractNumber | string | | no | | | quoteNumber | string | | no | | | customerType | string\|null | | no | | | customerCompanyName | string\|null | | no | | | customerName | string\|null | | no | | | productSector | string\|null | | no | | | message | string\|null | | no | | | monthlyRate | number\|null | | no | | | totalValue | mixed | | no | | | calculationType | string\|null | rent, leasing, rent_to_own, print_plan, partial_amortisation_leasing, print_plan_3kdg_12verl, print_plan_6kdg_12verl, | no | | | duration | integer\|null | | no | | | financingNumber | string\|null | | no | | | openCallbackRequestCount | integer | | no | | ### FinancingDocument | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | financingCase | string | | no | | | file | string\|null | | no | Not mapped to the DB. Vich handles this transient property. | | fileName | string\|null | | no | | | fileSize | integer\|null | | no | | | fileMimeType | string\|null | | no | | | originalName | string\|null | | no | | | uploadedByUserId | string\|null | | no | | | uploadedByName | string\|null | | no | | | uploadSource | string\|null | partner_api, response_partner, response_customer, response_hub, response_m24, portal_m24, system, | no | Provenance channel recorded at creation (PH-784). NULL = legacy row created before the column existed — treated as unknown provenance. | | source | string\|null | partner, customer, internal, system, | no | PH-375: origin of the document, derived server-side at upload time. | | category | string | business_registration, annual_financial_statement, business_assessment, self_disclosure, medical_license, purchase_offer, notarized_transfer_contract, land_register_extract, property_owner_consent, partnership_agreement, birth_date, private_address, founding_date, employee_count, self_disclosure_template, default_guarantee, articles_of_association, sale_leaseback_invoice, power_of_attorney, representative_id_cards, organization_chart, shareholder_list, vehicle_title, rate_adjustment_letter, partner_invoice, grenke_invoice, delivery_proof, delivery_note, handover_confirmation, signed_contract, private_guarantee, corporate_guarantee, supplementary_prepayment, supplementary_free_start, supplementary_vending, revocation_notice, voucher, supplementary_third_party, gwg_form_correction, schufa_guarantee_notice, print_plan_contract_draft, other | no | | | description | string\|null | | no | | | status | string\|null | pending_review, verified, rejected, superseded, | no | | | requestedDocument | mixed | | no | | | requestedFillAndReturn | mixed | | no | | | authorizedPerson | mixed | | no | | | createdAt | string | | no | | | updatedAt | string | | no | | | deletedAt | string\|null | | no | | | deleted | boolean | | no | | ### FinancingDocument.FinancingDocumentResponse-financing_document.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | financingCaseId | string | | no | | | originalName | string | | no | | | mimeType | string | | no | | | fileSize | integer | | no | File size in bytes | | category | string | business_registration, annual_financial_statement, business_assessment, self_disclosure, medical_license, purchase_offer, notarized_transfer_contract, land_register_extract, property_owner_consent, partnership_agreement, birth_date, private_address, founding_date, employee_count, self_disclosure_template, default_guarantee, articles_of_association, sale_leaseback_invoice, power_of_attorney, representative_id_cards, organization_chart, shareholder_list, vehicle_title, rate_adjustment_letter, partner_invoice, grenke_invoice, delivery_proof, delivery_note, handover_confirmation, signed_contract, private_guarantee, corporate_guarantee, supplementary_prepayment, supplementary_free_start, supplementary_vending, revocation_notice, voucher, supplementary_third_party, gwg_form_correction, schufa_guarantee_notice, print_plan_contract_draft, other | no | Document category | | description | string\|null | | no | | | status | string\|null | pending_review, verified, rejected | no | Review state: pending_review awaits our check, verified was accepted, rejected needs a new upload. Superseded versions are not listed. | | uploadedAt | string | | no | | | downloadUrl | string | | no | | | source | string\|null | partner, customer, internal, system, | no | Origin of the document (partner, customer, internal, system). null for documents uploaded before this field was introduced. | ### FinancingDocument.FinancingDocumentResponse.jsonld-financing_document.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | id | integer | | no | | | financingCaseId | string | | no | | | originalName | string | | no | | | mimeType | string | | no | | | fileSize | integer | | no | File size in bytes | | category | string | business_registration, annual_financial_statement, business_assessment, self_disclosure, medical_license, purchase_offer, notarized_transfer_contract, land_register_extract, property_owner_consent, partnership_agreement, birth_date, private_address, founding_date, employee_count, self_disclosure_template, default_guarantee, articles_of_association, sale_leaseback_invoice, power_of_attorney, representative_id_cards, organization_chart, shareholder_list, vehicle_title, rate_adjustment_letter, partner_invoice, grenke_invoice, delivery_proof, delivery_note, handover_confirmation, signed_contract, private_guarantee, corporate_guarantee, supplementary_prepayment, supplementary_free_start, supplementary_vending, revocation_notice, voucher, supplementary_third_party, gwg_form_correction, schufa_guarantee_notice, print_plan_contract_draft, other | no | Document category | | description | string\|null | | no | | | status | string\|null | pending_review, verified, rejected | no | Review state: pending_review awaits our check, verified was accepted, rejected needs a new upload. Superseded versions are not listed. | | uploadedAt | string | | no | | | downloadUrl | string | | no | | | source | string\|null | partner, customer, internal, system, | no | Origin of the document (partner, customer, internal, system). null for documents uploaded before this field was introduced. | ### FinancingDocument.FinancingDocumentUploadRequest-financing_document.write _No documented properties._ ### InformationResponseRequest | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | response | string\|null | | no | | ### InformationResponseRequest.DocumentRequestItemResponse | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | type | string | | no | | | label | string | | no | | | status | string | | no | | | category | string\|null | | no | | | templateDownloadUrl | string\|null | | no | | | requestedAt | string | | no | | ### OfferItem | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | totalCosts | string | | no | | | monthlyCosts | string | | no | | | calculationType | string | rent, leasing, rent_to_own, print_plan, partial_amortisation_leasing, print_plan_3kdg_12verl, print_plan_6kdg_12verl | no | | | duration | integer | | no | | | factor | number\|null | | no | | | appliedSurchargePercent | number | | no | Payment-interval surcharge percent folded into monthlyCosts (0 when none). | | appliedSurchargeAmount | number | | no | Absolute surcharge amount (€) folded into monthlyCosts (0 when none). | ### Partner | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | createdAt | string\|null | | no | | | id | integer\|null | | no | | | name | string | | no | | | status | string | ACTIVE, INACTIVE, IN_REVIEW, PENDING, BLOCKED | no | | | callbackRoutingMode | string | use_default, route_to_partner, route_to_customer | no | | | initials | string | | no | | | registrationHash | string | | no | | | calculationPage | string | | no | | | defaultAcquisitionCost | number | | no | | | allowedProductSectors | array | | no | | | currentSolvencyStatus | string | | no | | | active | boolean | | no | | | inReview | boolean | | no | | | blocked | boolean | | no | | | brandingAltText | string | | no | Logo alt-text for branded touchpoints: the explicit brand name when set, otherwise the partner's name (PH-535 AC-6). | ### Partner-financing_case.read _No documented properties._ ### Partner.jsonld-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | ### PartnerContactListResource.PartnerContactData | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | firstName | string | | no | | | lastName | string | | no | | | company | string | | no | | | location | string | | no | | ### PrintPlanContractTermsDto-cart.checkout | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | pageCoverage | number | | no | Page coverage / Schwaerzungsgrad S/W in percent (ISO/IEC 19752 default 5%). | | colorRatio | number | | no | Color ratio / Farbanteil in percent (default 15%). | | maintenanceTonerColor | boolean | | no | | | maintenanceDrums | boolean | | no | | | maintenanceStaples | boolean | | no | | | maintenancePaper | boolean | | no | | ### PrintPlanContractTermsDto.jsonld-cart.checkout | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | pageCoverage | number | | no | Page coverage / Schwaerzungsgrad S/W in percent (ISO/IEC 19752 default 5%). | | colorRatio | number | | no | Color ratio / Farbanteil in percent (default 15%). | | maintenanceTonerColor | boolean | | no | | | maintenanceDrums | boolean | | no | | | maintenanceStaples | boolean | | no | | | maintenancePaper | boolean | | no | | ### ProductCategoriesResource.ProductCategoryResponse | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | slug | string\|null | | no | | | name | string\|null | | no | | | hasPrintPlanCapability | boolean | | no | Whether this category is Print-Plan-capable (PH-590/PH-524). Items in a cart referencing such a category get Print-Plan financing options. | ### ProductSectorsResource.ProductSectorResponse | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | value | string | | no | | | label | string | | no | | ### Profile | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | firstName | string | | no | | | lastName | string | | no | | | phone | string\|null | | no | | | phoneCountryIso | string\|null | | no | | | phoneExt | string\|null | | no | | | company | string\|null | | no | | | addresses | array
| | no | | | user | mixed | | no | | ### Quote | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | quoteNumber | string | | yes | | | calculationType | string | rent, leasing, rent_to_own, print_plan, partial_amortisation_leasing, print_plan_3kdg_12verl, print_plan_6kdg_12verl | yes | | | duration | integer | | yes | | | customer | mixed | | yes | | | distributionHub | string\|null | | no | | | shippingAddress | mixed | | no | | | calculation | string\|null | | no | | | id | string\|null | | no | | | status | string | | no | | | createdAt | string | | no | | | updatedAt | string | | no | | | statusUpdatedAt | string | | no | | | items | array | | no | | | inReviewSince | string\|null | | no | | | hasReceivedReminder | boolean | | no | | | reminderCount | integer | | no | | | lastReminderAt | string\|null | | no | | | grenkeSubmissionStatus | string\|null | pending, submitted, failed, | no | Denormalised status of the latest Grenke submission for this quote. | | lastGrenkeSubmissionAt | string\|null | | no | Timestamp of the latest Grenke submission for this quote. | | contract | string\|null | | no | | | cart | string\|null | | no | Source cart for API-driven quote creation (cart checkout). | | financingResponses | array | | no | | | apiCall | boolean | | no | | | financeRejectedOverride | boolean | | no | PH-736: transient (non-persisted) flag set by the dedicated approval-team override action right before applying FINANCE_ACCEPT out of FINANCE_REJECTED. The workflow guard only lets that override transition through when this flag is set, so the generic flow route (and any other apply path) cannot lift a rejected quote without going through the reason + type-to-confirm flow. | | authorizedPersons | array | | no | | | quoteFeedbacks | array | | no | | | quoteRequest | string\|null | | no | | | financingNumber | string\|null | | no | | | processingFee | string\|null | | no | | | recurringService | string\|null | | no | | | rentalFactor | string\|null | | no | Rental factor (percentage) frozen onto the quote at build time (PH-486). | | residualValue | string\|null | | no | Residual value (percentage) frozen onto the quote at build time (PH-884). | | specialAgreements | string\|null | | no | | | paymentInterval | string\|null | monthly, quarterly, | no | | | deletedAt | string\|null | | no | | | partner | Partner | | yes | | | deleted | boolean | | no | | | totalValue | mixed | | no | | | monthlyCosts | number\|null | | no | | | monthlyRateAllIn | number\|null | | no | All-in monthly rate shown to partners (detail view, offer PDF) and summed per quote in FinancingCase::getMonthlyRate(). | | selectedOffer | mixed | | no | | | inReview | boolean | | no | | | activeFinancingResponses | Collection | | no | | | receivedReminder | boolean | | no | | | productSector | string\|null | IT_AND_OFFICE_EQUIPMENT, TESVOLT_ENERGY_STORAGE, RENEWABLE_ENERGY_AND_ENERGY_STORAGE, FURNITURE_AND_HOME_ACCESSORIES, MEDICAL_DEVICES, KITCHEN_AND_GASTRONOMY_EQUIPMENT, EVENT_TECHNOLOGY, HOME_AND_ENTERTAINMENT_ELECTRONICS, CONSTRUCTION_MACHINERY_AND_TOOLS, TRANSPORT_AND_LOGISTICS_EQUIPMENT, PHOTO_AND_VIDEO_TECHNOLOGY, FITNESS_AND_SPORTS_EQUIPMENT, SECURITY_EQUIPMENT, POINT_OF_SALES, OTHERS, | no | | | contactPhone | string\|null | | no | | | contactEmail | string\|null | | no | | | financingCaseId | string\|null | | no | Returns the financing case ID for API serialization. | | effectiveShippingAddress | mixed | | no | Returns the effective shipping address (Quote-specific or Customer default) | | commissionPercentage | integer | | no | The commission tier the quote is currently priced with, in percent. | ### Quote-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | quoteNumber | string | | yes | | | calculationType | string | rent, leasing, rent_to_own, print_plan, partial_amortisation_leasing, print_plan_3kdg_12verl, print_plan_6kdg_12verl | yes | | | duration | integer | | yes | | | customer | mixed | | yes | | | distributionHub | string\|null | | no | | | shippingAddress | mixed | | no | | | id | string\|null | | no | | | status | string | | no | | | createdAt | string | | no | | | updatedAt | string | | no | | | statusUpdatedAt | string | | no | | | items | array | | no | | | financingResponses | array | | no | | | authorizedPersons | array | | no | | | financingNumber | string\|null | | no | | ### Quote.jsonld-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | quoteNumber | string | | yes | | | calculationType | string | rent, leasing, rent_to_own, print_plan, partial_amortisation_leasing, print_plan_3kdg_12verl, print_plan_6kdg_12verl | yes | | | duration | integer | | yes | | | customer | mixed | | yes | | | distributionHub | string\|null | | no | | | shippingAddress | mixed | | no | | | id | string\|null | | no | | | status | string | | no | | | createdAt | string | | no | | | updatedAt | string | | no | | | statusUpdatedAt | string | | no | | | items | array | | no | | | financingResponses | array | | no | | | authorizedPersons | array | | no | | | financingNumber | string\|null | | no | | ### QuoteFeedback | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | quote | string\|null | | no | | | text | string\|null | | no | | | action | string | request_changes, reject_by_customer | no | | | createdAt | string | | no | | ### QuoteItem | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | position | integer | | no | | | quantity | integer | | no | | | pricePerItem | number | | no | | | total | number | | no | | ### QuoteItem-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | position | integer | | no | | | quantity | integer | | no | | | pricePerItem | number | | no | | | total | number | | no | | ### QuoteItem.jsonld-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | position | integer | | no | | | quantity | integer | | no | | | pricePerItem | number | | no | | | total | number | | no | | ### QuoteRequest | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | createdAt | string | | no | | | partner | mixed | | no | | | status | string | | no | | | quote | string\|null | | no | | | redirectUrl | string | | no | | | phoneCountryIso | string\|null | | no | | | phoneExt | string\|null | | no | | | category | mixed | | no | | | deletedAt | string\|null | | no | | | calculation | string\|null | | no | | | email | string | | no | | | name | string\|null | | no | | | phone | string\|null | | no | | | company | string\|null | | no | | | message | string\|null | | no | | | firstName | string\|null | | no | | | lastName | string\|null | | no | | | customerType | string | company, freelancer, public_institution | no | | | street | string\|null | | no | | | houseNumber | string\|null | | no | | | postalCode | string\|null | | no | | | city | string\|null | | no | | | country | string\|null | | no | | | crefoNo | string\|null | | no | | | deleted | boolean | | no | | | productSector | string\|null | | no | | | financingCase | string\|null | | no | | | solvencyCheckCompanyName | string\|null | | no | Get the company name for solvency check. | | solvencyCheckAddress | mixed | | no | Get the address for solvency check. | | currentSolvencyStatus | string | | no | | ### QuoteRequest-quote_request.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | createdAt | string | | no | | | status | string | | no | | | category | mixed | | no | | | email | string | | no | | | name | string\|null | | no | | | phone | string\|null | | no | | | company | string\|null | | no | | | message | string\|null | | no | | | firstName | string\|null | | no | | | lastName | string\|null | | no | | | customerType | string | company, freelancer, public_institution | no | | | street | string\|null | | no | | | houseNumber | string\|null | | no | | | postalCode | string\|null | | no | | | city | string\|null | | no | | | country | string\|null | | no | | | crefoNo | string\|null | | no | | | productSector | string\|null | | no | | ### QuoteRequest.QuoteRequest | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | email | string | | yes | Contact email address of the applicant. | | name | string\|null | | no | Contact person full name (optional). | | phone | string\|null | | no | Contact phone number (optional). | | company | string\|null | | no | Company or organization name (optional). | | message | string\|null | | no | Free-text note for the quote request (optional). | | acknowledgedPrivacy | boolean | | no | Confirms the applicant accepts the privacy policy; must be true. | | firstName | string | | yes | Contact person given name. | | lastName | string | | yes | Contact person family name. | | customerType | string | company, freelancer, public_institution | yes | Customer classification: company, sole proprietor, or private person. | | street | string | | yes | Street name of the contact address. | | houseNumber | string\|null | | no | House or building number (optional). | | postalCode | string | | yes | Postal / ZIP code of the address. | | city | string | | yes | City or town of the address. | | country | string | | yes | Country of the address. | | crefoNo | string\|null | | no | Optional Crefo credit-rating number for solvency checks. | | category | mixed | | no | Product category the request relates to (optional). | | calculation | string\|null | | yes | Rental price calculation the request is based on (required). | ### QuoteRequest.jsonld-quote_request.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | id | integer | | no | | | createdAt | string | | no | | | status | string | | no | | | category | mixed | | no | | | email | string | | no | | | name | string\|null | | no | | | phone | string\|null | | no | | | company | string\|null | | no | | | message | string\|null | | no | | | firstName | string\|null | | no | | | lastName | string\|null | | no | | | customerType | string | company, freelancer, public_institution | no | | | street | string\|null | | no | | | houseNumber | string\|null | | no | | | postalCode | string\|null | | no | | | city | string\|null | | no | | | country | string\|null | | no | | | crefoNo | string\|null | | no | | | productSector | string\|null | | no | | ### RequestedDocument | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | financingCase | string | | no | | | category | string\|null | business_registration, annual_financial_statement, business_assessment, self_disclosure, medical_license, purchase_offer, notarized_transfer_contract, land_register_extract, property_owner_consent, partnership_agreement, birth_date, private_address, founding_date, employee_count, self_disclosure_template, default_guarantee, articles_of_association, sale_leaseback_invoice, power_of_attorney, representative_id_cards, organization_chart, shareholder_list, vehicle_title, rate_adjustment_letter, partner_invoice, grenke_invoice, delivery_proof, delivery_note, handover_confirmation, signed_contract, private_guarantee, corporate_guarantee, supplementary_prepayment, supplementary_free_start, supplementary_vending, revocation_notice, voucher, supplementary_third_party, gwg_form_correction, schufa_guarantee_notice, print_plan_contract_draft, other, | no | | | recipientType | string | service, billing | no | | | customName | string\|null | | no | | | responseDocuments | array | | no | | | requestedAt | string | | no | | | status | string | pending, not_available, provided, sent, accepted, rejected | no | | | providedAt | string\|null | | no | | | optional | boolean | | no | | | transmittedToGrenkeAt | string\|null | | no | | | targetAudience | string | customer, partner, miete24 | no | The audience is chosen once, when the request item is created. | | label | string | | no | | | itemType | string | | no | | | fulfilled | boolean | | no | | | editable | boolean | | no | Whether the recipient can still act on this item: nothing has been uploaded yet, or a reviewer sent the submission back for a replacement. | | reviewable | boolean | | no | | | notAvailable | boolean | | no | | | internalOnly | boolean | | no | | | transmittableToGrenke | boolean | | no | | | verifiedResponseDocuments | array | | no | | | activeResponseDocuments | array | | no | Returns every response document that has not been superseded — useful for "currently provided" UI listings that should include PENDING_REVIEW and VERIFIED but hide retired re-uploads. | | transmittableResponseDocuments | array | | no | Returns every response document that may still be forwarded to Grenke — the lifecycle states reviewers have not actively retired. Grenke transmission currently fires when the parent item is PROVIDED/ACCEPTED, so PENDING_REVIEW uploads are valid attachments. REJECTED, SUPERSEDED and NULL-status (legacy/future orphan rows) are excluded — default-deny keeps unknown states out of the outbound envelope. | | latestPendingResponseDocument | string\|null | | no | | ### RequestedDocument-financing_case.read _No documented properties._ ### RequestedDocument.jsonld-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | ### RequestedFillAndReturn | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | financingCase | string | | no | | | label | string | | no | | | category | string\|null | business_registration, annual_financial_statement, business_assessment, self_disclosure, medical_license, purchase_offer, notarized_transfer_contract, land_register_extract, property_owner_consent, partnership_agreement, birth_date, private_address, founding_date, employee_count, self_disclosure_template, default_guarantee, articles_of_association, sale_leaseback_invoice, power_of_attorney, representative_id_cards, organization_chart, shareholder_list, vehicle_title, rate_adjustment_letter, partner_invoice, grenke_invoice, delivery_proof, delivery_note, handover_confirmation, signed_contract, private_guarantee, corporate_guarantee, supplementary_prepayment, supplementary_free_start, supplementary_vending, revocation_notice, voucher, supplementary_third_party, gwg_form_correction, schufa_guarantee_notice, print_plan_contract_draft, other, | no | | | recipientType | string | service, billing | no | | | templateFile | string\|null | | no | Not mapped to the DB. Vich handles this transient property. | | templateFileName | string\|null | | no | | | templateFileSize | integer\|null | | no | | | templateFileMimeType | string\|null | | no | | | templateOriginalName | string\|null | | no | | | updatedAt | string | | no | | | responseDocuments | array | | no | | | requestedAt | string | | no | | | status | string | pending, not_available, provided, sent, accepted, rejected | no | | | providedAt | string\|null | | no | | | optional | boolean | | no | | | transmittedToGrenkeAt | string\|null | | no | | | targetAudience | string | customer, partner, miete24 | no | The audience is chosen once, when the request item is created. | | itemType | string | | no | | | fulfilled | boolean | | no | | | editable | boolean | | no | Whether the recipient can still act on this item: nothing has been uploaded yet, or a reviewer sent the submission back for a replacement. | | reviewable | boolean | | no | | | notAvailable | boolean | | no | | | internalOnly | boolean | | no | | | transmittableToGrenke | boolean | | no | | | verifiedResponseDocuments | array | | no | | | activeResponseDocuments | array | | no | Returns every response document that has not been superseded — useful for "currently provided" UI listings that should include PENDING_REVIEW and VERIFIED but hide retired re-uploads. | | transmittableResponseDocuments | array | | no | Returns every response document that may still be forwarded to Grenke — the lifecycle states reviewers have not actively retired. Grenke transmission currently fires when the parent item is PROVIDED/ACCEPTED, so PENDING_REVIEW uploads are valid attachments. REJECTED, SUPERSEDED and NULL-status (legacy/future orphan rows) are excluded — default-deny keeps unknown states out of the outbound envelope. | | latestPendingResponseDocument | string\|null | | no | | ### RequestedFillAndReturn-financing_case.read _No documented properties._ ### RequestedFillAndReturn.jsonld-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | ### RequestedInformation-financing_case.read _No documented properties._ ### RequestedInformation.jsonld-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | ### RequestedItemInterface-financing_case.read _No documented properties._ ### RequestedItemInterface.jsonld-financing_case.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | ### SlaFileListResource.SlaFileResponse | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | name | string | | no | | | file | string | | no | | ### StartESignatureRequest | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | authorizedPersons | array | | yes | Persons authorized to sign; at least one is required. | ### StartESignatureRequest.StartESignatureResponse | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | financingNumber | string | | no | | | quoteStatus | string | | no | | ### User | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | locale | string | | no | | | createdAt | string | | no | | | approvedAt | string\|null | | no | | | lastLoginAt | string\|null | | no | | | registrationReminderFirstSentAt | string\|null | | no | Set when the 24h reminder is handed to the mailer (PH-946). Written at enqueue time, not on delivery — the mailer bus is async, so a marker that waited for the SentMessageEvent would let the hourly cron mail again. | | registrationReminderLastSentAt | string\|null | | no | Same for the 7d reminder; once set, the user leaves the candidate set. | | dois | array | | no | | | profile | mixed | | no | | | customers | array | | no | | | quotes | array | | no | | | googleAuthenticatorEnabled | boolean\|null | | no | | | emailAuthEnabled | boolean\|null | | no | | | roleInCompany | string\|null | | no | | | invitedBy | mixed | | no | | | distributionHubs | array | | no | | | partner | mixed | | no | | | email | string | | no | | | roles | array | | no | | | userIdentifier | string | | no | A visual identifier that represents this user. | | partnerManager | boolean | | no | | | approved | boolean | | no | | | activeRegistrationDoi | boolean | | no | | | blocked | boolean | | no | | | hashValid | boolean | | no | | | googleAuthenticatorUsername | string | | no | | | emailAuthRecipient | string | | no | | | backupCode | array | | no | | | twoFactorAuthEnabled | boolean | | no | | | name | string | | no | | | approvalTeam | boolean | | no | | ### WebhookEndpoint | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | integer | | no | | | ulid | string | | no | Opaque public identifier exposed via the API. Generated in the create processor; never the integer PK, to avoid resource enumeration. | | partner | Partner | | no | | | url | string | | no | | | secretEncrypted | string | | no | The signing secret, encrypted at rest. Never serialized. | | active | boolean | | no | | | createdAt | string | | no | | | updatedAt | string | | no | | ### WebhookEndpoint-webhook_endpoint.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | ulid | string | | no | Opaque public identifier exposed via the API. Generated in the create processor; never the integer PK, to avoid resource enumeration. | | url | string | | no | | | active | boolean | | no | | | createdAt | string | | no | | | updatedAt | string | | no | | ### WebhookEndpoint.WebhookEndpointCreateDto-webhook_endpoint.create | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | url | string\|null | | yes | HTTPS URL that receives event notifications via POST. | | active | boolean | | no | Whether deliveries to this endpoint are enabled. | ### WebhookEndpoint.WebhookEndpointCreateDto.jsonld-webhook_endpoint.create | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | url | string\|null | | yes | HTTPS URL that receives event notifications via POST. | | active | boolean | | no | Whether deliveries to this endpoint are enabled. | ### WebhookEndpoint.WebhookEndpointSecretResponse-webhook_endpoint.secret | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | id | string | | no | | | url | string | | no | | | active | boolean | | no | | | secret | string | | no | | | createdAt | string | | no | | ### WebhookEndpoint.WebhookEndpointSecretResponse.jsonld-webhook_endpoint.secret | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | id | string | | no | | | url | string | | no | | | active | boolean | | no | | | secret | string | | no | | | createdAt | string | | no | | ### WebhookEndpoint.WebhookEndpointUpdateDto-webhook_endpoint.update | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | url | string\|null | | no | Updated HTTPS delivery URL; omit to leave unchanged. | | active | boolean\|null | | no | Updated activation flag; omit to leave unchanged. | ### WebhookEndpoint.jsonld-webhook_endpoint.read | Property | Type | Allowed values | Required | Description | | --- | --- | --- | --- | --- | | @context | mixed | | no | | | @id | string | | no | | | @type | string | | no | | | ulid | string | | no | Opaque public identifier exposed via the API. Generated in the create processor; never the integer PK, to avoid resource enumeration. | | url | string | | no | | | active | boolean | | no | | | createdAt | string | | no | | | updatedAt | string | | no | |