openapi: 3.2.0
info:
title: Debitura Collection Partner Ingestion Jobs API
description: 'Welcome to the Debitura Collection Partner API, your gateway to automating debt collection workflows on the world''s leading platform for cross-border debt recovery.
As a trusted partner in Debitura''s network of 500+ collection agencies and law firms across 183 jurisdictions, this API provides the following capabilities:
**Managing Assigned Cases** - For exclusive partners with designated jurisdictions:
- Retrieve and manage cases assigned to your agency
- Track case details, timelines, and communications
- Update case status and payment information
**Submitting Cases to the Network** - Available to all partners:
- Submit new cases on behalf of your clients to our global network
- Track status of cases submitted to partners worldwide
- Provide global coverage to your existing clients and earn a 20% revenue share
- Manage cross-border debt collection through one unified platform
All operations follow our standardized Debt Collection Agreement and no-cure-no-pay model. The API provides the same functionality available through our user-friendly partner portal at https://partner.debitura.com.
For support or inquiries, please reach out to us at contact@debitura.com. To obtain your API key, log into the partner portal and navigate to: https://partner.debitura.com/CollectionPartnerApiKey/Index
📖 Full documentation, guides, and integration walkthroughs: https://docs.debitura.com/collection-partners
NOTE: Authentication requires the XApiKey header with your partner-specific API key. Available features depend on your partnership agreement.'
contact:
name: Debitura Support
url: https://www.debitura.com/integration
email: contact@debitura.com
version: v1
servers:
- url: https://collectionpartner-api.debitura.com
description: Production
security:
- ApiKey: []
tags:
- name: IngestionJobs
description: IngestionJobs
paths:
/ingestion-jobs:
post:
tags:
- IngestionJobs
summary: Enqueue a batch of partner ingest events (notes, payments, status updates).
description: "Creates one AsyncJob of type PartnerIngestDispatch and one AsyncJobOperation per row.\nThe job is processed asynchronously; poll GET /ingestion-jobs/{jobId} for progress.\n \nCurrently supported row types: Note (type = 0).\nPayment and StatusUpdate types are reserved for future use and will return 400 if submitted."
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.CollectionPartnerApi.Controllers.CreateIngestionJobRequest'
application/json:
schema:
$ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Controllers.CreateIngestionJobRequest'
text/json:
schema:
$ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Controllers.CreateIngestionJobRequest'
application/*+json:
schema:
$ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Controllers.CreateIngestionJobRequest'
responses:
'202':
description: Job accepted
content:
text/plain:
schema:
$ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Controllers.CreateIngestionJobResponse'
application/json:
schema:
$ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Controllers.CreateIngestionJobResponse'
text/json:
schema:
$ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Controllers.CreateIngestionJobResponse'
'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'
/ingestion-jobs/{jobId}:
get:
tags:
- IngestionJobs
summary: Poll the status of a previously submitted ingestion job.
description: Returns current status and per-operation counts for the job.
parameters:
- name: jobId
in: path
required: true
schema:
type: string
format: uuid
responses:
'200':
description: Job found
content:
text/plain:
schema:
$ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Controllers.IngestionJobStatusResponse'
application/json:
schema:
$ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Controllers.IngestionJobStatusResponse'
text/json:
schema:
$ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Controllers.IngestionJobStatusResponse'
'404':
description: Job not found or not owned by this partner
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.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.CollectionPartnerApi.Controllers.CreateIngestionJobResponse:
type: object
properties:
jobId:
type: string
format: uuid
rowsQueued:
type: integer
format: int32
additionalProperties: false
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.AsyncJobs.AsyncJobStatus:
enum:
- 0
- 1
- 2
- 3
- 4
type: integer
format: int32
Debitura.Web.CollectionPartnerApi.Controllers.IngestionJobRow:
type: object
properties:
type:
$ref: '#/components/schemas/Debitura.Domain.Model.PartnerIngest.PartnerIngestEventType'
caseId:
type: string
description: The case this event belongs to.
format: uuid
description:
type:
- string
- 'null'
description: Note text (required for Note events).
eventDate:
type:
- string
- 'null'
description: When the event occurred. Omit to use the current time.
format: date-time
externalRef:
type:
- string
- 'null'
description: Your system's reference for this event (optional, for idempotency tracking).
additionalProperties: false
Debitura.Domain.Model.PartnerIngest.PartnerIngestEventType:
enum:
- 0
type: integer
format: int32
Debitura.Web.CollectionPartnerApi.Controllers.IngestionJobStatusResponse:
type: object
properties:
status:
$ref: '#/components/schemas/Debitura.Domain.Model.AsyncJobs.AsyncJobStatus'
rowsTotal:
type: integer
format: int32
rowsSucceeded:
type: integer
format: int32
rowsFailed:
type: integer
format: int32
additionalProperties: false
Debitura.Web.CollectionPartnerApi.Controllers.CreateIngestionJobRequest:
type: object
properties:
rows:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Controllers.IngestionJobRow'
description: 'The list of events to enqueue (max recommended: 1000 rows per call).'
additionalProperties: false
securitySchemes:
ApiKey:
type: apiKey
description: Collection Partner API Key (use XApiKey header)
name: XApiKey
in: header
externalDocs:
description: Debitura developer documentation
url: https://docs.debitura.com