ChargeAfter is aligning its webhook naming, which will require merchants to gradually adapt to new domain/event types names.

Old WebhookNew Webhook
account.approvedapplication.approved
account.prequalifiedapplication.prequalified
account.pending-lenderapplication.pending-lender
account.pending-consumerapplication.pending-consumer
account.declinedapplication.declined
postsale.authorizepostsale.authorize.accepted
postsale.settlepostsale.settle.accepted
postsale.refundpostsale.refund.accepted

Webhooks in the application and disputes domains will be released in the coming week. See below for their descriptions and payloads.

Application Webhooks

The following webhooks notify merchants of various application lifecycle events.

If additional information is needed about an application, you can use the Get application status API.

application.created

This event notification is sent when an application session has started.

It is an alternative to the onApplicationCreated callback in the ChargeAfter SDK.

This notification is especially useful with applications that were created using the omni-link API in which the merchant only has the linkID after the link creation. Using this notification, the merchant can track any application created with a particular link.

Payload

{
  "eventType": "application.created",
  "createdAt": "string",
  "applicationId": "string"
}

Field descriptions

  • eventType (type: string)
    The name of the webhook.
  • createdAt (type: ISO 8601-formatted string)
    Timecode of when the webhook was created.
  • applicationId (type: string)
    Unique identifier of the application. The application ID may be used later to retrieve application information.

application.prequalified

This event notification is sent when the lender prequalifies the application.

Note: If a consumer is prequalified by more than one lender, then one webhook will be sent per lender.

Payload

{
  "eventType": "application.prequalified",
  "createdAt": "string",
  "applicationId": "string",
  "lenderId": "string",
  "amount": 123.45
}

Field descriptions

  • eventType (type: string)
    The name of the webhook.
  • createdAt (type: ISO 8601-formatted string)
    Timecode of when the webhook was created.
  • applicationId (type: string)
    Unique identifier of the application. The application ID may be used later to retrieve application information.
  • lenderId (type: string)
    Unique identifier of the lender.
  • amount (type: number)
    The amount for which the application is prequalified.

application.approved

This event notification is sent when the lender approved the application.

Payload

{
  "eventType": "application.approved",
  "createdAt": "string",
  "applicationId": "string",
  "lenderId": "string",
  "amount": 123.45
}

Field descriptions

  • eventType (type: string)
    The name of the webhook.
  • createdAt (type: ISO 8601-formatted string)
    Timecode of when the webhook was created.
  • applicationId (type: string)
    Unique identifier of the application. The application ID may be used later to retrieve application information.
  • lenderId (type: string)
    Unique identifier of the lender.
  • amount (type: number)
    The amount for which the application is approved.

application.pending-lender

This event notification is sent when the lender starts the review of the application.

Payload

{
  "eventType": "application.pending-lender",
  "createdAt": "string",
  "applicationId": "string",
  "lenderId": "string",
  "reason": "string"
}

Field descriptions

  • eventType (type: string)
    The name of the webhook.
  • createdAt (type: ISO 8601-formatted string)
    Timecode of when the webhook was created.
  • applicationId (type: string)
    Unique identifier of the application. The application ID may be used later to retrieve application information.
  • lenderId (type: string)
    Unique identifier of the lender.
  • reason (type: string)
    Application status reason.

application.pending-consumer

This event notification is sent after the lender has started the review of the application and additional action is required by the consumer.

Payload

{
  "eventType": "application.pending-consumer",
  "createdAt": "string",
  "applicationId": "string",
  "lenderId": "string",
  "reason": "string"
}

Field descriptions

eventType (type: string)
The name of the webhook.

createdAt (type: ISO 8601-formatted string)
Timecode of when the webhook was created.

applicationId (type: string)
Unique identifier of the application. The application ID may be used later to retrieve application information.

lenderId (type: string)
Unique identifier of the lender.

reason (type: string)
Application status reason.

application.pending-merchant

This event notification is sent after the lender has started the review of the application and additional action is required by the merchant.

Payload

{
  "eventType": "application.pending-merchant",
  "createdAt": "string",
  "applicationId": "string",
  "lenderId": "string",
  "reason": "string"
}

Field descriptions

eventType (type: string)
The name of the webhook.

createdAt (type: ISO 8601-formatted string)
Timecode of when the webhook was created.

applicationId (type: string)
Unique identifier of the application. The application ID may be used later to retrieve application information.

lenderId (type: string)
Unique identifier of the lender.

reason (type: string)
Application status reason.

application.declined

This event notification is sent when the lender declines the application.

Note: If a consumer is prequalified by more than one lender, then one webhook will be sent per lender.

Payload

{
  "eventType": "application.declined",
  "createdAt": "string",
  "applicationId": "string",
  "lenderId": "string"
}

Field descriptions

  • eventType (type: string)
    The name of the webhook.
  • createdAt (type: ISO 8601-formatted string)
    Timecode of when the webhook was created.
  • applicationId (type: string)
    Unique identifier of the application. The application ID may be used later to retrieve application information.
  • lenderId (type: string)
    Unique identifier of the lender.

application.cancelled

This event notification is sent when the application is cancelled by the lender.

Payload

{
  "eventType": "application.cancelled",
  "createdAt": "string",
  "applicationId": "string",
  "lenderId": "string"
}

Field descriptions

  • eventType (type: string)
    The name of the webhook.
  • createdAt (type: ISO 8601-formatted string)
    Timecode of when the webhook was created.
  • applicationId (type: string)
    Unique identifier of the application. The application ID may be used later to retrieve application information.
  • lenderId (type: string)
    Unique identifier of the lender.

application.apply-confirmed

This event notification is sent when the consumer has confirmed their Apply request at the end of the application process.

This notification enables merchants to know when an application has completed successfully and to use the returned token to create a charge if applicable.

Note: This webhook will soon be deprecated. We will inform you of its replacement.

Payload

{
  "eventType": "application.checkout-confirmed",
  "createdAt": "string",
  "applicationId": "string",
  "lenderId": "string",
  "amount": 123.45,
  "token": "string"
}

Field descriptions

  • eventType (type: string)
    The name of the webhook.
  • createdAt (type: ISO 8601-formatted string)
    Timecode of when the webhook was created.
  • applicationId (type: string)
    Unique identifier of identify the application. The application ID may be used later to retrieve application information.
  • lenderId (type: string)
    Unique identifier of the lender.
  • amount (type: number)
    The amount for which the account is approved.
  • token (type: string)
    The confirmation token that can be used to create a charge.

application.checkout-confirmed

This event notification is sent when the consumer has confirmed their Checkout request at the end of the application process.

This notification enables merchants to know when an application has completed successfully and to use the returned token to create a charge if applicable.

Payload

{
  "eventType": "application.checkout-confirmed",
  "createdAt": "string",
  "applicationId": "string",
  "accountId": string,
  "lenderId": "string",
  "amount": 123.45,
  "token": "string"
}

Field descriptions

  • eventType (type: string)
    The name of the webhook.
  • createdAt (type: ISO 8601-formatted string)
    Timecode of when the webhook was created.
  • applicationId (type: string)
    Unique identifier of identify the application. The application ID may be used later to retrieve application information.
  • accountId: (type: string)
    Unique identifier of the account.
  • lenderId (type: string)
    Unique identifier of the lender.
  • amount (type: number)
    The amount for which the account is approved.
  • token (type: string)
    The confirmation token that can be used to create a charge.

Disputes Webhooks

The following webhooks notify of various dispute lifecycle events.

disputes.created

This event notification is sent when a dispute has been created.

Payload

{
  "eventType": "disputes.created",
  "createdAt": "string",
  "disputeId": "string",
  "lenderDisputeId": "string",
  "lenderId": "string"
}

Field descriptions

  • eventType (type: string)
    The name of the webhook.
  • createdAt (type: ISO 8601-formatted string)
    Timecode of when the webhook was created.
  • disputeId (type: string)
    Unique identifier of the dispute, created by ChargeAfter.
  • lenderDisputeId (type: string)
    Unique identifier of the dispute, created by the lender.
  • lenderId (type: string)
    Unique identifier of the lender.

disputes.lender.updated

This event notification is sent when a dispute assigned to the lender is updated.

Payload

{
  "eventType": "disputes.lender.updated",
  "createdAt": "string",
  "disputeId": "string",
  "lenderDisputeId": "string"
}

Field descriptions

  • eventType (type: string)
    The name of the webhook.
  • createdAt (type: ISO 8601-formatted string)
    Timecode of when the webhook was created.
  • disputeId (type: string)
    Unique identifier of the dispute, created by ChargeAfter.
  • lenderDisputeId (type: string)
    Unique identifier of the dispute, created by the lender.

disputes.resolved

This event notification is sent when a dispute is resolved.

Payload

{
  "eventType": "disputes.resolved",
  "createdAt": "string",
  "disputeId": "string",
  "lenderDisputeId": "string"
}

Field descriptions

  • eventType (type: string)
    The name of the webhook.
  • createdAt (type: ISO 8601-formatted string)
    Timecode of when the webhook was created.
  • disputeId (type: string)
    Unique identifier of the dispute, created by ChargeAfter.
  • lenderDisputeId (type: string)
    Unique identifier of the dispute, created by the lender.

Two additional parameters were added to the payload of the Consumer Confirmation webhook:

  • linkId(optional)
  • consumerId

The full payload is as follows:

{
  "applicationId":"string",
  "accountToken":"string",
  "confirmationToken":"string",
  "linkId":"string",
  "consumerId":"string"
}

For more information, see Merchants Notifications.

The payload of the GET /v2/checkout/applications/{applicationId}/status endpoint that retrieves the status of an application has been upgraded.

The following response parameters have been added:

  • applicationStatus: The latest application status corresponding to the applicationId.
    Possible values:
    • Prequalified
    • PendingConsumer
    • PendingLender
    • Approved
    • Authorized
    • Declined
  • account: The latest lender account to which the consumer was redirected in ChargeAfter's Checkout flow with the details of the lender and the remaining credit info.
    • lenderName
    • lenderId
    • creditInfo (subject to lender support of OTB/open to buy)
      • maxAmount
      • availableCredit
  • confirmedOffer: The confirmed offer that was used for Checkout.
    • code
    • financialProductType
    • amount
    • defaultApr
    • promoSettings
      • numberOfPeriods
      • periodicPayment
      • periodType
      • apr

Below is a sample 200 response with the new parameters marked:























Note: Backwards compatibility is supported.

New Consumer Management calls are available to:

The following Consumer Management calls have been moved to the Legacy section of the API Reference Guide:

Note: The new "Get consumer details" call improves usability compared to the legacy "Get consumer info" call.

Funding API

In the 5th May release, GET /v2/post-sale/fundings/report payload was enhanced with an additional field:

  • merchantTransactionId (String)
    • The merchants' transaction identifier that was sent to ChargeAfter when settle\refund API was called.

The payload with the additional field.

{  
  "records": [  
    {  
      "chargeId": "6663c0bd6c45635eaea75aaa",  
      "discountAmount": 10,  
      "email": "[email protected]",  
      "firstName": "John",  
      "fundedAt": "2023-11-03T00:00:00Z",  
      "lastName": "Smith",  
      "lenderName": "Finara",  
      "merchantOrderId": "12345",  
      "netAmount": 89.99,  
      "status": "RECONCILED",  
      "transactionAmount": 99.99,  
      "transactionDate": "2023-11-03T00:00:00Z",  
      "transactionId": "6663c0bd6c45635eaea75aaa",  
      "transactionType": "Settle",  
      "productType":"LineOfCredit",  
      "promoCode":"123",
      "merchantTransactionId":"12345",
      "updatedAt": "2023-11-03T00:00:00Z"  
    }  
  ]  
}

Funding API

We keep updating our API, exposing more options to our merchants, when integrating with our funding API. In the 5th March release, GET /v2/post-sale/fundings/report payload was enhanced with two more fields:

  • ProductType (String)
    • The product type of the original lender's offer for the purchase.
    • Possible values:
      "LineOfCredit",
      "Installments",
      "LeaseToOwn",
      "MerchantSelfFinancing"
  • PromoCode (String)
    • The promo code of the original lender's offer for the purchase.
      • Example: "123"

The payload with the additional two fields

{
  "records": [
    {
      "chargeId": "6663c0bd6c45635eaea75aaa",
      "discountAmount": 10,
      "email": "[email protected]",
      "firstName": "John",
      "fundedAt": "2023-11-03T00:00:00Z",
      "lastName": "Smith",
      "lenderName": "Finara",
      "merchantOrderId": "12345",
      "netAmount": 89.99,
      "status": "RECONCILED",
      "transactionAmount": 99.99,
      "transactionDate": "2023-11-03T00:00:00Z",
      "transactionId": "6663c0bd6c45635eaea75aaa",
      "transactionType": "Settle",
      "productType":"LineOfCredit",
      "promoCode":"123",
      "updatedAt": "2023-11-03T00:00:00Z"
    }
  ]
}

Funding API

📘

New API Addition 🚀

GET /v2/post-sale/fundings/report is live now and will replace in future
GET /v1 /post-sale/fundings/records and GET /v2/post-sale/fundings/records .

Currently, the ChargeAfter Reconciliation service, also called Funding API, enables merchants to reconcile transactions against the lender's records.
To improve our service, we are upgrading the reconciliation in several ways, mainly around providing order reconciliation instead of single transaction reconciliation.
It will enable our service to be more accurate, exposing a clear status for the whole order (including possible partial settlement or refunds) and also to provide a better performance.

This upgrade comes also with a filtering of the errors (or missing) out of the default responses and therefore merchants interested in retrieving those missing should make sure to use the proper properties as defined below

Important Notes:

  • The API responses were not changed between /records and /report, except for the reconciliation status (see below). Therefore almost no development change should apply here besides changing the API endpoint to handle the response, as well as adapting the status if a specific logic was built around those.
  • We improved the reconciliation status value UNRECONCILED from a single value to a more precise 2- value status:
    TYPE_MISMATCH will be used whenever the transaction types don't match.
    AMOUNT_MISMATCH will be used when the transaction amounts don't match.
  • By default, the results of this API call will not include a transaction in status “MISSING” (lender transaction for which we did not find any match in our system). If you would like to also receive those transactions, please make sure to set the showMissing input param (boolean) as TRUE.

Charges API

  • Payload and Parameters were updated with info about Required, MaxLength, and possible expected values (enums).
  • Additional Explanations and examples of the HTTP responses were added.