openapi: 3.2.0 info: title: Debitura Webhook Events API version: v1 description: 'Operations tagged WebhookEvents across 2 of this provider''s published API definitions: debitura-collection-partner-api.json, debitura-customer-api.json. Each path carries the servers of the definition it was published in.' servers: - url: https://collectionpartner-api.debitura.com description: Production - url: https://customer-api.debitura.com description: Production tags: - name: WebhookEvents description: Webhooks paths: /webhooks/events: get: tags: - WebhookEvents summary: List webhook events dispatched for a case. description: 'Returns all webhook events dispatched for the given case, scoped to your webhook subscriptions. Results are ordered newest-first. **Use cases:** - Verify that a specific event (e.g. `case.updated`) fired after a state transition. - Inspect the exact payload delivered on each attempt. - Find the event ID to replay via `POST /webhooks/events/{id}/replay`. - Part of the CI-loop ASSERT step: after advancing a test case, query this endpoint to confirm the correct events fired. **Filtering:** - `caseId` (required): restricts to events for this case. - `since` (optional): only returns events created at or after this ISO 8601 timestamp. **Note:** Only events for your subscriptions are returned — events from other collection partners'' subscriptions are never exposed.' parameters: - name: caseId in: query schema: type: string format: uuid - name: since in: query schema: type: string format: date-time responses: '200': description: List of webhook events content: text/plain: schema: type: array items: $ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Models.Webhooks.WebhookEventDto' application/json: schema: type: array items: $ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Models.Webhooks.WebhookEventDto' text/json: schema: type: array items: $ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Models.Webhooks.WebhookEventDto' '400': description: Missing or invalid query parameters 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' security: - ApiKey: [] servers: - url: https://collectionpartner-api.debitura.com description: Production /webhooks/events/{id}/replay: post: tags: - WebhookEvents summary: Replay a specific webhook event. description: 'Re-enqueues the exact payload from a previously recorded event to its original subscription. The event is re-queued as a fresh delivery attempt (attempt 1) using the original payload unchanged. Delivery follows the normal retry schedule if the endpoint is unavailable. **Replay signal:** Replayed deliveries include the header `X-Debitura-Replay: true` so your endpoint can distinguish a replay from a live event and implement idempotency correctly. **When to use:** - Your endpoint was temporarily unavailable and you want to re-deliver a specific event. - You want to test idempotency of your event handler. - Part of CI-loop ASSERT: confirm an event was dispatched via `GET /webhooks/events`, then replay to a different receiver. **Relationship to `replay-last-event`:** `POST /test/cases/{id}/replay-last-event` is a convenience wrapper over this endpoint — it looks up the most recent event ID for you. Use that endpoint when you don''t yet know the event ID; use this endpoint when you have the ID from `GET /webhooks/events`. **Tenant isolation:** Only events belonging to your own subscriptions can be replayed.' parameters: - name: id in: path required: true schema: type: string format: uuid responses: '200': description: Event re-enqueued for delivery content: text/plain: schema: $ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Models.Webhooks.ReplayEventResultDto' application/json: schema: $ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Models.Webhooks.ReplayEventResultDto' text/json: schema: $ref: '#/components/schemas/Debitura.Web.CollectionPartnerApi.Models.Webhooks.ReplayEventResultDto' '400': description: ID missing or empty 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: Event not found or not owned by this collection 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' security: - ApiKey: [] servers: - url: https://collectionpartner-api.debitura.com description: Production components: schemas: Debitura.Web.CollectionPartnerApi.Models.Webhooks.ReplayEventResultDto: type: object properties: eventId: type: string description: The ID of the event that was replayed. format: uuid subscriptionId: type: string description: The subscription the event was re-enqueued to. format: uuid eventType: type: - string - 'null' description: The event type that was replayed (e.g. "case.updated"). additionalProperties: false description: Result of replaying a specific webhook event. 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.Web.CollectionPartnerApi.Models.Webhooks.WebhookEventDto: type: object properties: id: type: string description: 'Unique identifier for this event record. Use this ID to replay the event via `POST /webhooks/events/{id}/replay`.' format: uuid subscriptionId: type: string description: The webhook subscription this event was dispatched to. format: uuid caseId: type: - string - 'null' description: The collection case this event relates to. format: uuid eventType: type: - string - 'null' description: The event type (e.g. "case.assigned", "case.updated", "case.closed", "payment.created", "chat.created"). payload: type: - string - 'null' description: The full JSON payload that was (or will be) delivered. createdAt: type: string description: When this event was first recorded (UTC). format: date-time deliveredAt: type: - string - 'null' description: 'When the event was successfully delivered (UTC). Null if delivery has not yet succeeded.' format: date-time attemptCount: type: integer description: Number of delivery attempts made so far. format: int32 lastResponseCode: type: - integer - 'null' description: HTTP status code returned by the subscriber endpoint on the last attempt. format: int32 lastError: type: - string - 'null' description: Error message from the last failed delivery attempt. Null on successful delivery. additionalProperties: false description: Represents a recorded webhook delivery event. 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.ExternalCustomerAPI.Models.Webhooks.Dtos.WebhookEventDto: type: object properties: id: type: string description: 'Unique identifier for this event record. Use this ID to replay the event via `POST /webhooks/events/{id}/replay`.' format: uuid subscriptionId: type: string description: The webhook subscription this event was dispatched to. format: uuid caseId: type: - string - 'null' description: The collection case this event relates to. format: uuid eventType: type: - string - 'null' description: The event type (e.g. "case.created", "payment.created"). payload: type: - string - 'null' description: The full JSON payload that was (or will be) delivered. createdAt: type: string description: When this event was first recorded (UTC). format: date-time deliveredAt: type: - string - 'null' description: 'When the event was successfully delivered (UTC). Null if delivery has not yet succeeded.' format: date-time attemptCount: type: integer description: Number of delivery attempts made so far. format: int32 lastResponseCode: type: - integer - 'null' description: HTTP status code returned by the subscriber endpoint on the last attempt. format: int32 lastError: type: - string - 'null' description: Error message from the last failed delivery attempt. Null on successful delivery. additionalProperties: false description: Represents a recorded webhook delivery event. Debitura.Web.ExternalCustomerAPI.Models.Webhooks.Dtos.ReplayEventResultDto: type: object properties: eventId: type: string description: The ID of the event that was replayed. format: uuid subscriptionId: type: string description: The subscription the event was re-enqueued to. format: uuid eventType: type: - string - 'null' description: The event type that was replayed. additionalProperties: false description: Result of replaying a specific webhook event. securitySchemes: ApiKey: type: apiKey description: Collection Partner API Key (use XApiKey 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 x-refined-from: - debitura-collection-partner-api.json - debitura-customer-api.json