openapi: 3.2.0 info: title: Debitura Customer Divisions API description: 'Welcome to the Debitura Customer API, your gateway to seamlessly integrating your debt collection workflow with our platform. Debitura connects customers with trusted debt collection firms specializing in pre-legal debt recovery. With this API, you can easily upload cases, track their status, and manage your debt collection process efficiently. For any support or inquiries, please reach out to us at contact@debitura.com. To setup an API key, log into your Debitura account and go here: https://app.debitura.com/CreditorApiKey 📖 Full documentation, guides, and integration walkthroughs: https://docs.debitura.com/clients NOTE: if you''re representing a platform and want to provide this feature for your customers, you need a different API. Please contact us.' contact: name: Debitura Support url: https://www.debitura.com/integration/debt-collection-api email: contact@debitura.com version: v1 servers: - url: https://customer-api.debitura.com description: Production security: - ApiKey: [] - Bearer: [] tags: - name: Divisions description: Divisions paths: /divisions: post: tags: - Divisions summary: Create a new division. description: 'Creates a new division for the authenticated creditor. Divisions allow creditors to organize cases under different business units, branches, or departments. **Required Fields:** - companyName - Name of the division - city - City where the division is located - countryCode - ISO 3166-1 alpha-2 country code (e.g. ''US'', ''DE'', ''DK'') **Optional Fields:** - registrationNumber - Company registration number (CVR, VAT, etc.) - address, zipCode, state - Full address details - officeEmail, officePhone - Contact information' parameters: - name: Idempotency-Key in: header description: 'Optional idempotency key (max 255 characters) for safely retrying this request. If a previous request used the same key with an identical body, the original terminal response is replayed verbatim. Reusing the key with a different body returns 422 with `Type: "IdempotencyConflict"`. Field-level 400 validation errors are not stored, so you may fix the request and retry with the same key.' schema: maxLength: 255 type: string requestBody: content: application/json-patch+json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.CreateDivisionRequestDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.CreateDivisionRequestDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.CreateDivisionRequestDto' application/*+json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.CreateDivisionRequestDto' responses: '201': description: Division created successfully content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' '400': description: Invalid request content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' '422': description: Business rule violation content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' get: tags: - Divisions summary: List divisions for the authenticated creditor. description: 'Returns a paginated list of divisions for the authenticated creditor. By default, archived divisions are excluded. Set `includeArchived=true` to include them.' parameters: - name: page in: query schema: type: integer format: int32 default: 1 - name: pageSize in: query schema: type: integer format: int32 default: 10 - name: includeArchived in: query schema: type: boolean default: false responses: '200': description: List of divisions content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionListDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionListDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionListDto' /divisions/{id}: get: tags: - Divisions summary: Get a single division by ID. description: Returns details of a specific division. The division must belong to the authenticated creditor. parameters: - name: id in: path required: true schema: type: string format: uuid responses: '200': description: Division found content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' '404': description: Division not found content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' put: tags: - Divisions summary: Update a division. description: 'Replaces all fields of a division. All required fields must be provided. **Required Fields:** - companyName - Name of the division - city - City where the division is located - countryCode - ISO 3166-1 alpha-2 country code (e.g. ''US'', ''DE'', ''DK'')' parameters: - name: id in: path required: true schema: type: string format: uuid requestBody: content: application/json-patch+json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.UpdateDivisionRequestDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.UpdateDivisionRequestDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.UpdateDivisionRequestDto' application/*+json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.UpdateDivisionRequestDto' responses: '200': description: Division updated successfully content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' '400': description: Invalid request content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' '404': description: Division not found content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' delete: tags: - Divisions summary: Delete a division. description: 'Deletes a division. **Important:** A division cannot be deleted if it is referenced by active cases. If you need to deactivate a division that has cases, use the archive endpoint instead.' parameters: - name: id in: path required: true schema: type: string format: uuid responses: '204': description: Division deleted successfully '404': description: Division not found content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' '422': description: Division cannot be deleted because it has active cases content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' /divisions/{id}/archive: post: tags: - Divisions summary: Archive a division. description: 'Archives a division, making it inactive. Archived divisions are excluded from list results by default. **Important:** This action is irreversible. Archived divisions can still be referenced by existing cases.' parameters: - name: id in: path required: true schema: type: string format: uuid responses: '200': description: Division archived successfully content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' '404': description: Division not found content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' '422': description: Division is already archived content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' /divisions/{id}:archive: post: tags: - Divisions summary: Archive a division. description: 'Archives a division, making it inactive. Archived divisions are excluded from list results by default. **Important:** This action is irreversible. Archived divisions can still be referenced by existing cases.' parameters: - name: id in: path required: true schema: type: string format: uuid responses: '200': description: Division archived successfully content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' '404': description: Division not found content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' '422': description: Division is already archived content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto' components: schemas: Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto: type: object properties: id: type: string format: uuid companyName: type: - string - 'null' registrationNumber: type: - string - 'null' address: type: - string - 'null' zipCode: type: - string - 'null' state: type: - string - 'null' city: type: - string - 'null' country: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionCountryDto' officeEmail: type: - string - 'null' officePhone: type: - string - 'null' isArchived: type: boolean createdUtc: type: string format: date-time updatedUtc: type: - string - 'null' format: date-time additionalProperties: false Debitura.Web.ExternalApi.Contracts.V1.Cases.BusinessErrorApiDTO: type: object properties: type: type: - string - 'null' description: The type of business error (e.g., "MissingDebtCollectionContract", "MissingPowerOfAttorney", "NoPartnerAvailable"). message: type: - string - 'null' description: A human-readable description of the error. solutionUrl: type: - string - 'null' description: "A URL where the user can resolve this specific error (e.g., sign a contract).\n \n\nPartners who want a single URL that walks the user through every pending\nsigning in one chain — instead of forwarding one URL per\n`BusinessErrorApiDTO` — should use\nDebitura.Web.ExternalApi.Contracts.V1.Cases.BusinessErrorResponseApiDTO.SigningHandoff's `CombinedSigningUrl`.\nThe two are complementary: `SolutionUrl` is granular per-error;\n`CombinedSigningUrl` is the chain-walking alternative for signing-related errors." additionalProperties: false description: Represents a business error in the API response. Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto: type: object properties: error: type: - string - 'null' description: Short human-readable error label (legacy field — preserved for backward compatibility). message: type: - string - 'null' description: Human-readable error description (legacy field — preserved for backward compatibility). businessErrors: type: - array - 'null' items: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Cases.BusinessErrorApiDTO' description: Canonical structured error array. Consumers should migrate to reading this field. additionalProperties: false description: "Generic structured error response for API endpoints.\n \nDual-write design: existing fields (Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto.Error / Debitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto.Message etc.)\nare preserved for backward compatibility alongside the canonical\nDebitura.Web.ExternalApi.Contracts.V1.Errors.ApiErrorResponseDto.BusinessErrors array, allowing consumers to migrate at their own pace." Debitura.Domain.Model.Base.PageData: type: object properties: totalResults: type: integer format: int32 pageSize: type: integer format: int32 currentPage: type: integer format: int32 responseCount: type: integer format: int32 totalPages: type: integer format: int32 readOnly: true additionalProperties: false Debitura.Web.ExternalApi.Contracts.V1.Divisions.UpdateDivisionRequestDto: required: - city - companyName - countryCode type: object properties: companyName: maxLength: 200 minLength: 0 type: string registrationNumber: maxLength: 50 minLength: 0 type: - string - 'null' address: type: - string - 'null' zipCode: maxLength: 50 minLength: 0 type: - string - 'null' state: type: - string - 'null' city: minLength: 1 type: string countryCode: maxLength: 2 minLength: 2 type: string officeEmail: maxLength: 250 minLength: 0 type: - string - 'null' format: email officePhone: maxLength: 50 minLength: 0 type: - string - 'null' additionalProperties: false Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionListDto: required: - page type: object properties: page: $ref: '#/components/schemas/Debitura.Domain.Model.Base.PageData' divisions: type: - array - 'null' items: $ref: '#/components/schemas/Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionDto' additionalProperties: false Debitura.Web.ExternalApi.Contracts.V1.Divisions.CreateDivisionRequestDto: required: - city - companyName - countryCode type: object properties: companyName: maxLength: 200 minLength: 0 type: string registrationNumber: maxLength: 50 minLength: 0 type: - string - 'null' address: type: - string - 'null' zipCode: maxLength: 50 minLength: 0 type: - string - 'null' state: type: - string - 'null' city: minLength: 1 type: string countryCode: maxLength: 2 minLength: 2 type: string officeEmail: maxLength: 250 minLength: 0 type: - string - 'null' format: email officePhone: maxLength: 50 minLength: 0 type: - string - 'null' additionalProperties: false Debitura.Web.ExternalApi.Contracts.V1.Divisions.DivisionCountryDto: type: object properties: id: type: integer format: int32 name: type: - string - 'null' alpha2: type: - string - 'null' additionalProperties: false securitySchemes: ApiKey: type: apiKey description: This is for clients who manage their own account. They can get the API key in the platform and set it as the 'XApiKey' in the header. name: XApiKey in: header Bearer: type: http description: This is for referral partners, who are sending in clients to the platform. They get the bearer token from the referral partner Api and can be inserted here. scheme: bearer bearerFormat: JWT externalDocs: description: Debitura developer documentation url: https://docs.debitura.com