Skip to main content

Event Webhooks

The collectAI event webhooks focus on claim lifecycle changes and we will push subscribed events to your system. You can also pull all of these from the the Events API. But this requires you to pull on a certain interval and a defined time frame. We usually recommend an integration with webhooks to achieve a resource efficient real time integration.

Data structure

All claim events that can occur will have the same data structure defined below.

PayloadDescription
typeThe event type
eventIdThe unique event id
dateThe timestamp when the event occurred in UTC (ISO_8601)
sourceThe collectAI event source the event originates from.
The field is optional and will be null if no source can be provided.
claim.idThe unique claim identifier used by collectAI
claim.merchantIdThe merchant id the claim belongs to
claim.referenceNumberThe claim reference number (provided by the merchant)
claim.customerNumberThe claim customer number (provided by the merchant)

Please refer to the Claims API for the claim fields above.

Example request

POST /your-url HTTP/1.1

Body
{
"type": "FEE_ADDED",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": "ESCALATION",

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345",
...
}
}

Types

Fee step executed

When a fee step has been executed to add a fee to a claim, we will make a POST request to the configured URL.

note

This event is only triggered if the escalation process adds a fee. You can also add fees with the API, but this will not result in a webhook event.

Body

The following information will be provided when a fee was added:

PayloadDescription
actionStep.nameThe name of the action step executed
claim.fee.idThe id of the fee claim item.
claim.fee.typeThe item fee type DUNNING_FEE. It can be with or without a reference to a primary item.
claim.fee.valueThe value of the fee in cents.
claim.fee.currencyThe currency of the fee's value, i.e. EUR

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "FEE_ADDED",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": "ESCALATION",

"actionStep": {
"name": "Add dunning fee 1",
},

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345",

"fee": {
"id": 9876,
"type": "DUNNING_FEE",
"value": "2875",
"currency": "EUR"
}
}
}

Message step executed

When a communication step has been executed and the message has been handed over to our providers, we will make a POST request to the configured URL. In case of invalid (e.g. missing email address) or suppressed contact details, this event will not be sent. A fallback communication will also trigger this event, when we have handed over a message to our providers.

note

The successful delivery of a message is not part of this event definition. In case a message delivery failed, please refer to the following event type Message could not be delivered.

Body

The following information will be provided when a claim is escalated:

PayloadDescription
actionStep.nameThe name of the action step executed
claim.communication.channelSMS, LETTER or EMAIL
claim.communication.referenceUnique identifier for the communication message, i.e. to retrieve it's details or its content from the API.

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "ESCALATED",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": "ESCALATION",

"actionStep": {
"name": "Reminder Email 1",
},

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345",

"communication": {
"channel": "SMS",
"reference": "a6590eb9-497a-4a7f-b5df-xxxxxxxxxxxx"
}
}
}

Message could not be delivered

When a communication step was attempted, but could not be executed or has been executed and our message providers signaled back problems in delivering the message to the customer successfully, we will make a POST request to the configured URL. It can take up to a few days until providers stop trying to deliver a message and signals an error.

note

This type can either follow a Message step executed webhook, when the provider wasn't able to deliver the message or can be be triggered directly, when we weren't able to hand over the message to one of our providers.

Body

The following information will be provided when a claim is escalated:

PayloadDescription
claim.communication.channelSMS, LETTER or EMAIL
claim.communication.referenceUnique identifier for the communication message, i.e. to retrieve its details or its content from the API.
claim.communication.recipientsThe intended recipients of the communication. This may be an array of email addresses, a phone number or a postal address.
claim.communication.error.typeCONFIGURATION_ERROR, CONTACT_ERROR, RENDER_ERROR, SEND_ERROR - see below for more details.

Here are some more details on the failure, depending on the value of claim.communication.error.type:

Error Type
(claim.communication.error.type)
Possible Reason Codes
(claim.communication.error.reasonCode)
Details Object
(claim.communication.error.details)
CONFIGURATION_ERRORINVALID_SENDER_ERROR, COMMUNICATION_PROVIDER_NOT_CONFIGURED--
CONTACT_ERRORINVALID_MOBILE_NUMBER, INVALID_EMAIL_ADDRESS,
INVALID_POSTAL_ADDRESS
{ "details": { "invalidValues": { "phone": "<bad phone>" } } }
RENDER_ERRORPLACEHOLDER_ERROR, SNIPPET_ERROR,
QRBILL_ERROR, INTERNAL_ERROR
---
SEND_ERRORBOUNCE_PERMANENT_GENERAL, BOUNCE_PERMANENT_ON_SUPPRESSION_LIST,
BOUNCE_PERMANENT_ON_GLOBAL_SUPPRESSION_LIST,BOUNCE_TRANSIENT_MBX_FULL,
BOUNCE_TRANSIENT_MESSAGE_TOO_LARGE, BOUNCE_TRANSIENT_CONTENT_REJECTED,
BOUNCE_TRANSIENT_ATTACHMENT_REJECTED,SMS_REJECTED,
SMS_NOT_DELIVERED,SMS_EXPIRED,
INVALID_CLAIM,PROVIDER_ERROR',
{ message: 'some message', smtpCode: '200' }

To learn more about what these codes mean, see here.

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "MESSAGE_NOT_DELIVERED",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": "ESCALATION",

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345",

"communication": {
"channel": "EMAIL",
"reference": "a6590eb9-497a-4a7f-b5df-xxxxxxxxxxxx",
"recipients": ["mail@mail.com"],
"error": {
"type": "SEND_ERROR",
"reasonCode": "BOUNCE_PERMANENT_MBX_NON_EXISTING",
"details": {
"message": "some error occured",
"smtpCode": "200",
...
},
},
}
}
}

Checkpoint step executed

Whenever the claim has reached a custom configured marker step during its lifecycle, we will make a POST request to notify about this.

This could be used to connect external processes into the collectAI reminder process, i.e. triggering internal system processes.

Body

The following information will be provided when a checkpoint is reached

PayloadDescription
actionStep.nameThe name of the action step executed

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "CHECKPOINT_REACHED",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": "ESCALATION",

"actionStep": {
"name": "Reminder Email 1",
},

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345"
}
}

Disputed

When a dispute is triggered by the Debtor or Merchant, we will make a POST request to the configured URL for this claim dispute.

Body

In addition to the common claim wrapper information a disputeReason object will be provided when a dispute is triggered. It does contain justification for a dispute. It contains a type and an optional message for custom reasons. type can have one of the following values:

Dispute ReasonDescription
typeHuman friendly identifier of the dispute option (e.g DEBTOR_ALREADY_PAID)
messageMessage from the customer disputing the claim (only for type OTHER)
disputeIdUnique identifier of the dispute

Example request

POST /your-url HTTP/1.1

Body
{
"type": "DISPUTED",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": null,

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345",

"disputeReason": {
"type": "DEBTOR_ALREADY_PAID"
}
}
}

When dispute reason is OTHER

POST /your-url HTTP/1.1

Body
{
"type": "DISPUTED",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": null,

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345",

"disputeReason": {
"type": "OTHER",
"message": "I have a problem with my bank account."
}
}
}

Payment in progress

When a customer starts a payment process for the given claim, we will make a POST request to the configured URL for this.

Body

The following information will be provided when a payment is in progress inside the payment object:

PayloadDescription
claim.payment.providerNamePayment service provider (PSP) that the user is using to start the payment
claim.payment.paymentMethodSelected payment method of the PSP
claim.payment.amountThe amount in cents that the customer will pay
claim.payment.currencyThe currency of the payment, i.e. EUR
claim.payment.referenceThe reference of the payment, i.e. CAI-8373461
claim.payment.paymentRequestIdUnique identifier of a payment flow
claim.payment.claimTotalAmountThe total amount (in cents) of the claim
claim.payment.claimOutstandingAmountThe outstanding amount (in cents) of the claim

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "PAYMENT_IN_PROGRESS",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": null,

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345",

"payment": {
"providerName": "COMPUTOP",
"paymentMethod": "CREDIT_CARD",
"amount": 1000,
"currency": "EUR",
"reference": "12345",
"paymentRequestId": "c94e523f-45b8-4ab5-95e2-eae570188b18",
"claimTotalAmount": "1600",
"claimOutstandingAmount": "1400"
}
}
}

Payment completed

When a customer concludes the payment process for the given claim, we will make a POST request to the configured URL for this.

Body

The following information will be provided when a payment is finished inside the payment object:

PayloadDescription
claim.payment.providerNamePayment service provider (PSP) that the user is using to start the payment (PAYPAL, COMPUTOP, PAYONE,.. etc.)
claim.payment.paymentMethodSelected payment method of the PSP (CREDIT_CARD, DIRECT_DEBIT, etc.)
claim.payment.providerDetailsPayment provider specific external meta data.
This field is optional and available only for limited payment providers (Computop only)
claim.payment.amountThe amount in cents that the customer will pay
claim.payment.currencyThe currency of the payment, i.e. EUR
claim.payment.claimItemsList of claim items that were paid. See below for more details.
claim.payment.claimTotalAmountThe total amount (in cents) of the claim
claim.payment.claimOutstandingAmountThe outstanding amount (in cents) of the claim
claim.payment.referenceThe reference of the payment, i.e. CAI-8373461
claim.payment.externalTransactionIdExternal unique identifier of a completed transaction (usually set by the payment provider)
claim.payment.paymentRequestIdUnique identifier of a payment flow
claim.payment.transactionIdUnique identifier of a completed transaction

The object claim.payment.claimItems is defined is follows:

Claim ItemDescription
claimItem.idThe unique identifier of the item
claimItem.amountThe amount paid for the item (in cents)
claimItem.type(Optional) The item type. Possible values: PRIMARY, DUNNING_FEE, COLLECTION_FEE
claimItem.reference(Optional) An external reference to your system. The reference should be unique within an item collection
claimItem.customFields(Optional) Additional custom fields in the form of key/value pairs. The value is always a string

The object claim.payment.providerDetails is defined as follows:

  • Computop
    • payId - ID assigned by Computop Paygate for a processed payment
    • ccBrand - credit card brand name, e.g. VISA, MasterCard, etc. Optional and available only for credit card payment method

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "PAYMENT_COMPLETED",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": null,

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345",

"payment": {
"providerName": "COMPUTOP",
"paymentMethod": "CREDIT_CARD",
"amount": 1000,
"currency": "EUR",
"reference": "12345",
"externalTransactionId": "7272hhd",
"transactionId": "12264990-a4f0-47cd-b519-f99c6d2b606a",
"paymentRequestId": "c94e523f-45b8-4ab5-95e2-eae570188b18",
"claimItems": [
{ "id": 1, "amount": 300, "type": "PRIMARY", "reference": "ref-123", "customFields": { "extRef": "ABC123" } },
{ "id": 2, "amount": 700, "type": "DUNNING_FEE", "reference": "ref-123" }
],
"claimTotalAmount": "1600",
"claimOutstandingAmount": "1400",
"providerDetails": {
"payId": "sZGVyTmFtZSI6Ikpv",
"ccBrand": "VISA"
}
}
}
}

Landing page opened

When a customer accesses the details of the landing page, we will make a POST request to the configured URL for this.

Body

The following information will be provided when this webhook type gets emitted.

PayloadDescription
claim.details.communicationTypeType of the communication from which the customer accessed the claim details (SMS, EMAIL, etc.).
Note: This will also be populated when the access can not be linked to a communication message.
claim.details.channelChannel from which the customer accessed the details of the claim (LANDING_PAGE)
claim.details.sessionIdLanding page session which lasts for 1 hour - useful to filter this type of event

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "DETAILS_ACCESSED",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": null,

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345",

"details": {
"communicationType": "SMS",
"channel": "LANDING_PAGE",
"sessionId": "a4lSkLa8GOyfp5saix2xYEqGTJo95t-I"
}
}
}

Payment modalities state change

When a customer requests a payment modality or a merchant changes the status of such request, POST request is being triggered to notify about this.

Body

The following information will be provided inside the paymentModality object when payment modality is requested, or state is changed:

Payment ModalityDescription
claim.paymentModality.typeType of a payment modality (PAYMENT_PLAN, PAYMENT_DEFEREMENT)
claim.paymentModality.stateState of the payment modality request (REQUESTED, APPROVED, REJECTED)
claim.paymentModality.modalityIdPayment modality identifier
claim.paymentModality.requestDataPayment modality request data

The following information will be provided inside the paymentModality.requestData object based on the payment modality type:

Payment Modality TypeFieldDescription
PAYMENT_DEFEREMENTclaim.paymentModality.requestData.defermentDateThe date the customer defers to
PAYMENT_DEFEREMENTclaim.paymentModality.requestData.amount(Conditional) Amount (in cents) the customer promises to pay
PAYMENT_PLAN-No paymentModality.requestData for this type

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "PAYMENT_MODALITY_STATE_CHANGE",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": null,

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "12345",
"referenceNumber": "REF-123",
"customerNumber": "12345",
"paymentModality": {
"type": "PAYMENT_DEFERMENT",
"state": "REQUESTED",
"modalityId": "646c684f-e77c-4448-9465-22677a66d18a",
"requestData": {
"defermentDate": "2021-03-03T00:00:000Z",
"amount": 5000
}
}
}
}

Archived

Whenever a claim transitions to its archived state, we will make a POST request to the configured endpoint.

note

This webhook gets triggered by the escalation process or whenever a claim gets archived via API.

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "ARCHIVED",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": null,

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345"
}
}

End of escalation reached

Whenever a claim is archived automatically because the escalation process has finished, we will make a POST request to the configured endpoint.

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "END_OF_ESCALATION_REACHED",
"date": "2018-08-24T11:32:23Z",
"eventId": "a1daaeb5-7a71-4df1-9278-c635110e3033",
"source": "ESCALATION",

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345"
}
}

Customer data collected

Whenever customer data is collected, we will make a POST request to the configured endpoint.

Body

The following information will be provided inside the customerData object:

Customer DataDescription
customerData.contact.typeThe type of contact provided by the customer. Could be EMAIL OR MOBILE_NUMBER
customerData.contact.valueEmail or mobile number provided by the customer
customerData.contact.ipaddressThe ipaddress of the customer when the contact was collected
customerData.consent1The text of the consent form (checkbox) in the language of the contact page.
customerData.consent2The text of the consent form (checkbox) in the language of the contact page.
customerData.timestampThe time when the customer contact data was collected

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "CUSTOMER_DATA_COLLECTED",
"date": "2023-11-10T15:39:28.123Z",
"eventId": "fc428f52-8a6c-4d20-b403-4087077df83f",
"source": null,

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345",

"customerData": {
"contact": {
"type": "EMAIL",
"value": "email@example.com",
"ipaddress": "10.0.0.10"
},
"consent1": "some-text-1",
"consent2": "some-text-2",
"timestamp": "2023-11-10T15:39:28.123Z"
}
}
}

Customer data verified

Whenever customer data is verified, we will make a POST request to the configured endpoint.

Body

The following information will be provided inside the customerData object:

Customer DataDescription
customerData.contact.typeThe type of contact provided by the customer. Could be EMAIL OR MOBILE_NUMBER
customerData.contact.valueEmail or mobile number provided by the customer
customerData.contact.ipaddressThe ipaddress of the customer when the contact was collected
customerData.consent1The text of the consent form (checkbox) in the language of the contact page.
customerData.consent2The text of the consent form (checkbox) in the language of the contact page.
customerData.timestampThe time when the customer contact data was verified

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "CUSTOMER_DATA_VERIFIED",
"date": "2023-11-10T15:39:28.123Z",
"eventId": "fc428f52-8a6c-4d20-b403-4087077df83f",
"source": null,

"claim": {
"id": 54321,
"merchantId": 1,
"referenceNumber": "REF-123",
"customerNumber": "12345",

"customerData": {
"contact": {
"type": "EMAIL",
"value": "email@example.com",
"ipaddress": "10.0.0.10"
},
"consent1": "some-text-1",
"consent2": "some-text-2",
"timestamp": "2023-11-10T15:39:28.123Z"
}
}
}

SEPA mandate collected

Whenever SEPA mandate is collected, we will make a POST request to the configured endpoint.

Body

The following information will be provided inside the sepaMandate object:

SEPA MandateDescription
sepaMandate.amountThe amount the customer's bank account will be debited
sepaMandate.currencyThe currency of the amount to be debited
sepaMandate.creditorIdThe sepa mandate creditor id of the merchant
sepaMandate.debitCycleThe debit cycle of the SEPA mandate e.g RECURRING, WEEKLY, MONTHLY, QUARTERLY, YEARLY
sepaMandate.ibanThe customer's IBAN
sepaMandate.firstNameThe customer's first name
sepaMandate.lastNameThe customer's last name

The following information will be provided inside the paymentRequest object:

Payment RequestDescription
paymentRequest.idA unique identifier for the payment request associated with the SEPA mandate
paymentRequest.claimItemsThe items in the claim for which this SEPA mandate has been created

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "SEPA_MANDATE_COLLECTED",
"date": "2021-04-19T08:19:53.619Z",
"eventId": "a22d20e2-8f45-4127-8346-fb2d256c8af9",
"source": null,

"claim": {
"id": 4609948,
"merchantId": 1425,
"referenceNumber": "CAI-102",
"customerNumber": "1234567",

"sepaMandate": {
"iban": "DE89370400440532013000",
"amount": 1050,
"currency": "EUR",
"lastName": "Last Name",
"firstName": "First Name",
"creditorId": "DE98ZZZ09999999999",
"debitCycle": "QUARTERLY"
},

"paymentRequest": {
"id": "54364c31-b312-47db-a775-63824daf0300",
"claimItems": [
{
"id": 6374999,
"type": "PRIMARY",
"amount": 100,
"reference": "ABCD2222"
},
{
"id": 6375000,
"type": "DUNNING_FEE",
"amount": 950,
"reference": "ABCD2222"
}
]
}
}
}

Installment plan created

Whenever Installment plan is created, we will make a POST request to the configured endpoint.

Body

The following information will be provided inside the installmentPlan object:

Installment planDescription
installmentPlan.idThe installment plan identifier
installmentPlan.amountThe total sum (including principal and interest) of all installments in cents
installmentPlan.currencyThe currency code (ISO 4217)
installmentPlan.installmentsThe list of installments (see Installment)
installmentPlan.installmentsNumberThe total number of installments
installmentPlan.interestAmountThe total interest sum of all installments in cents
installmentPlan.feeAmountThe total fee sum of all installments in cents
installmentPlan.principalAmountThe total principal sum of all installments in cents
installmentPlan.startDateThe date when the first installment has to be paid
InstallmentDescription
installment.amountThe sum of principal and interest amounts in cents
installment.dueDateThe date until the installment is due to pay
installment.interestAmountThe interest amount in cents
installment.feeAmountThe fee amount in cents
installment.principalAmountThe principal amount in cents
installment.remainingBalanceThe remaining overall balance after current installment is paid
installment.sequentialNumberThe sequential number of installment to maintain the order

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "INSTALLMENT_PLAN_CREATED",
"date": "2022-07-19T08:19:53.619Z",
"eventId": "a22d20e2-8f45-4127-8346-fb2d256c8af9",
"source": null,

"claim": {
"id": 4609948,
"merchantId": 1425,
"referenceNumber": "CAI-102",
"customerNumber": "1234567",

"installmentPlan": {
"id": "988199cb-a08d-4507-8508-d287c8b66daa",
"amount": 150000,
"currency": "EUR",
"startDate": "2022-08-01",
"installments": [
{
"amount": 50000,
"dueDate": "2022-08-01",
"interestAmount": 0,
"feeAmount": null,
"principalAmount": 50000,
"remainingBalance": 100000,
"sequentialNumber": 1
},
{
"amount": 50000,
"dueDate": "2022-09-01",
"interestAmount": 0,
"feeAmount": null,
"principalAmount": 50000,
"remainingBalance": 50000,
"sequentialNumber": 2
},
{
"amount": 50000,
"dueDate": "2022-10-01",
"interestAmount": 0,
"feeAmount": null,
"principalAmount": 50000,
"remainingBalance": 0,
"sequentialNumber": 3
}
],
"installmentsNumber": 3,
"interestAmount": 0,
"feeAmount": null,
"principalAmount": 150000
}
}
}

Installment plan SEPA mandate collected

Whenever Installment plan SEPA mandate is collected, we will make a POST request to the configured endpoint.

Body

The following information will be provided inside the sepaMandate object:

Installment plan SEPA mandate collectedDescription
sepaMandate.sepaMandateIdThe SEPA mandate identifier
sepaMandate.installmentPlanIdThe installment plan identifier
sepaMandate.ibanThe customer's IBAN
sepaMandate.lastNameThe customer's last name
sepaMandate.firstNameThe customer's first name
sepaMandate.debitCycleThe debit cycle of the SEPA mandate e.g RECURRING

Example payload

POST /your-url HTTP/1.1

Body
{
"type": "INSTALLMENT_PLAN_SEPA_MANDATE_COLLECTED",
"date": "2022-07-19T08:19:53.619Z",
"eventId": "a22d20e2-8f45-4127-8346-fb2d256c8af9",
"source": null,

"claim": {
"id": 4609948,
"merchantId": 1425,
"referenceNumber": "CAI-102",
"customerNumber": "1234567",

"sepaMandate": {
"sepaMandateId": "f57aea57-a5e3-40c6-8174-4cefc80ef8bb",
"installmentPlanId": "988199cb-a08d-4507-8508-d287c8b66daa",
"iban": "DE89370400440532013000",
"lastName": "Last Name",
"firstName": "First Name",
"debitCycle": "RECURRING",
}
}
}