Bakkt uses webhooks for account creation and fiat onboarding notifications, providing detailed updates on account status, transactions, verification requirements, and more. This guide covers how to respond and understand these notifications for effective platform management.


Account Opening Webhook Events

When opening accounts, clients must capture the data in the webhook events to receive detailed status notifications. These notifications are published to the client’s webhook URL that was provided to Bakkt during onboarding. These notifications will provide clients with various updates on the account’s status, including successful account creation, failure, suspension, requests for additional documentation, and more.

The client’s webhook URL will receive a payload that includes these key elements, each providing insight into a specific aspect of the account:

  • requestId: A unique Identifier for the request.

  • partnerPartyRef: The partner’s unique identifier linked to a customer’s account.

  • partnerWebhookType: Specifies the notification type, here as PARTY_EVENT.

  • partyStatus: The account’s current state, with possible values being ACTIVE, INACTIVE, SUSPENDED, LIQUIDATED, UNDER_REVIEW, and CLOSED.

  • reasonCode: Categorizes the rationale behind the current account status.

  • verificationURL: A link for uploading documents to validate customer identity.

    Accompanying these elements, the reason codes will detail the circumstances of the status changes:

    • ACCOUNT_CLOSURE_REQUESTED: The customer has requested account closure.
    • COMPLIANCE_LOCKED: The account is suspended by compliance.
    • LIQUIDATED: The party is restricted to selling cryptocurrencies or withdrawing funds.
    • OTHER: Other unspecified reasons for suspension.
    • CLOSED: Confirmation that the account has been closed.
    • ENROLLMENT: Indicates the account is successfully created and actively enrolled.
    • RISK_KYC: Notification of a failed CIP check.
    • RISK_OFAC: Notification of a failed OFAC screening.
    • PENDING_REVIEW: The account is awaiting a manual compliance review.
    • DOCUMENT_VERIFICATION: Additional documentation is required for identity verification.

Account Creation Webhook Examples

 {
  "requestId": "3f2b3e62-f26c-442d-8d4b-d029d5e9de50",
  "partnerPartyRef": "ABCDEFG123",
  "partnerWebhookType": "PARTY_EVENT",
  "created": "2023-07-14T17:26:42.53873Z",
  "partyStatus": "ACTIVE",
  "reasonCode": "ENROLLMENT",
  "verificationURL": 
  "verificationURLExpiry": 
 }
 {
  "requestId": "3f2b3e62-f26c-442d-8d4b-d029d5e9de50",
  "partnerPartyRef": "ABCDEFG123",
  "partnerWebhookType": "PARTY_EVENT",
  "created": "2023-07-14T17:26:42.53873Z",
  "partyStatus": "INACTIVE",
  "reasonCode": "RISK_KYC",
  "verificationURL":
  "verificationURLExpiry": 
 }
 {
  "requestId": "3f2b3e62-f26c-442d-8d4b-d029d5e9de50",
  "partnerPartyRef": "ABCDEFG123",
  "partnerWebhookType": "PARTY_EVENT",
  "created": "2023-07-14T17:26:42.53873Z",
  "partyStatus": "INACTIVE",
  "reasonCode": "DOCUMENT_VERIFICATION"
  "verificationURL": "https://verify-v2.socure.com/#/t/99f2e00e-3ffd-4c58-8e40-3d6f7934c426",
  "verificationURLExpiry": "2024-02-20T18:58:49.197534912Z"
 }

Client Integration Testing Workflow

ScenarioTesting GuidelinesExpected Webhook Event Details
Account has passed KYC screeningEnroll a user with any PII information (aside from below scenarios)."partyStatus": "ACTIVE"
"reasonCode": "ENROLLMENT"
Account has failed KYC screening on its initial attempt

Clients can expect to receive the same webhook event if the account has failed document verification.
Enroll a user with the following PII:
"familyName": "Dawn",
"givenName": "Maggic",
"personalAddress": {
"city": "New York",
"country": "USA",
"postalCode": "10001",
"state": "NY",
"streetAddress": [
"33 Main Street"
]
},
"taxId": "111111111", "taxIdType": "SSN", "phoneNumber": "+1999-555-7777", "emailAddress": "[email protected]", "dateOfBirth": "1936-01-01",
"partyStatus": "INACTIVE" OR
"partyStatus": "SUSPENDED"

"reasonCode": "RISK_KYC"
Account has failed KYC and has triggered the document verification workflowEnroll a user with the following PII:
"familyName": "Shelar",
"givenName": "Seema",
"phoneNumber": "+18187830871",

OR

Enroll a user with the following PII:
"emailAddress": "[email protected]",
"partyStatus": "INACTIVE" OR
"partyStatus": "SUSPENDED"

"reasonCode": "DOCUMENT_VERIFICATION"
"verificationURL": "https://www.documentverification.sample.kyc.com"
"verificationUrlExpiry": "2024-02-19T16:36:48.608799929Z"

Actual URL and expiry may vary
Account has failed KYC and has entered a manual review queue with the Compliance teamEnroll a user with the following PII:
"familyName": "Doe",
"givenName": "Jane",
"dateOfBirth": "1961-01-01"
"partyStatus": "INACTIVE" OR
"partyStatus": "SUSPENDED"

"reasonCode": "PENDING_REVIEW"
Account has failed OFAC screeningEnroll a user with the following PII:
"emailAddress": "[email protected]",
"partyStatus": "INACTIVE" OR
"partyStatus": "SUSPENDED"

"reasonCode": "RISK_OFAC"

Fiat Onramp Webhook Events

Bakkt will call the webhook provided during onboarding by the Partner, whenever there is a transaction event with the following details.

  • partnerPartyRef Partner’s identifier to a party on their side expected to be unique at the Partner
  • webhookType Type of webhook notification (PARTY_EVENT, BANK_ACCOUNT_LINK, FIAT_EVENT)
  • partyStatus Status of the consumer fiat account (ACTIVE, INACTIVE, SUSPENDED, LIQUIDATED, UNDER_REVIEW, OTP_REQUIRED, CLOSED, OPEN)
  • reasonCode Reason code for the change in status
  • amount The transaction amount
  • bankName Name of the Bank
  • accountLastFour Last 4 digits of the bank account
  • accountType Type of bank account
  • linkStatus Status of the linked account
  • created Date and time the transaction was completed
  • currency Type of currency (USD)
  • transactionId Unique Transaction ID generated by Bakkt
  • partnerTransactionRef Unique Transaction ID specified by partner to a transaction request
  • fiatTransactType Type of transaction (DEPOSIT, WITHDRAW, DEBIT, CREDIT, WITHDRAW_RETURN, DEPOSIT_RETURN, ACH_RETURN_FEE)
  • instrumentType Type of money movement instrument (ACH, WIRE, TPJ, DEBIT_CARD, PARTNER_WRITE_OFF, BAKKT_WRITE_OFF, DECEASED_PARTY, OTHER_ADJUSTMENT)
  • transactionStatus Status of the transaction (PENDING, COMPLETED, DECLINED, CANCELLED)
  • verificationType Status of the verification (MANUAL, INSTANT, SAME_DAY_MICRODEPOSIT, AUTOMATED_MICRODEPOSIT)
  • declineReason Json object that contains type and description fields
    • type Response code for decline
    • description High level description of the decline reason

Fiat Webhook Examples

Party Events

Party Events occur when the status of a partner party link has transitioned to a new status.

{
  "requestId": "3f2b3e62-f26c-442d-8d4b-d029d5e9de50",
  "partnerPartyRef": "e8596570-f058-493b-a667-965b6ea2eb8e",
  "partnerWebhookType": "PARTY_EVENT",
  "created": "2023-07-14T17:26:42.53873Z",
  "partyStatus": "SUSPENDED",
  "reasonCode": "MAX_ACH_RETURNS"
}

Bank Link Events

Bank Link Events occur to pass back the result when bank account link APIs are called.

{
  "requestId": "ca5d9540-1f09-44d8-921b-aeca5caf16c9",
  "partnerPartyRef": "51275f6e-7111-402d-bf98-9a26d60072a61080p",
  "partnerWebhookType": "BANK_ACCOUNT_LINK",
  "created": "2023-08-08T19:12:53.034610562Z",
  "accountLinkingInfo": {
    "bankName": "N/A",
    "accountLastFour": "0000",
    "accountLinkStatus": "PENDING",
    "verificationType": "SAME_DAY_MICRODEPOSIT"
  }
}
{
  "requestId": "ba5d9540-1f09-44d8-921b-aeca5caf16g8",
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "BANK_ACCOUNT_LINK",
  "accountLinkingInfo": {
    "bankName": "Test Bank",
    "accountLastFour": "1234",
    "accountType": "CHECKING",
    "linkStatus": "ACTIVE",
    "verificationType": "INSTANT"
  }
}
{
  "requestId": "3ed1c745-fd19-41d1-8bf3-62d9cfbbb613",
  "partnerPartyRef": "e8596570-f058-493b-a667-965b6ea2eb8e",
  "partnerWebhookType": "BANK_ACCOUNT_LINK",
  "created": "2023-10-09T18:38:11.55377Z",
  "error": {
    "type": "UNSUPPORTED_FINANCIAL_INSTITUTION",
    "description": "Financial Institution provided is unsupported at this time."
  }
}

plaidAccount/link webhooks

{
  "requestId": "3f219bd5-217e-4f83-a562-59008f0a642f",
  "partnerPartyRef": "76fdf7ef-5d42-4886-b5c4-ac86a0cd0b82primary",
  "partnerTransactionRef": "c76a4d11-f2f3-4c9d-b499-9de35d456d04",
  "partnerWebhookType": "BANK_ACCOUNT_LINK",
  "created": "2023-08-29T22:13:02.237002384Z",
  "accountLinkingInfo": {
    "bankName": "N/A",
    "accountLinkStatus": "PENDING"
  }
}
{
  "requestId": "113db51d-dbae-41c2-87df-db21d449217e",
  "partnerPartyRef": "76fdf7ef-5d42-4886-b5c4-ac86a0cd0b82primary",
  "partnerTransactionRef": "c76a4d11-f2f3-4c9d-b499-9de35d456d04",
  "partnerWebhookType": "BANK_ACCOUNT_LINK",
  "created": "2023-08-29T22:13:02.928487492Z",
  "accountLinkingInfo": {
    "bankName": "CITIZENS BANK NA",
    "accountLastFour": "0000",
    "accountType": "CHECKING",
    "accountLinkStatus": "ACTIVE"
  }
}
{
  "requestId": "731e2910-4803-465c-a5f5-ca44a5f3e954",
  "partnerPartyRef": "76fdf7ef-5d42-4886-b5c4-ac86a0cd0b82primary",
  "partnerTransactionRef": "98268502-a058-45b0-ace4-342b78cbbcd5",
  "partnerWebhookType": "BANK_ACCOUNT_LINK",
  "created": "2023-08-29T22:15:02.66265578Z",
  "accountLinkingInfo": {
    "accountLinkStatus": "INACTIVE",
    "plaidErrorCode": "INVALID_PROCESSOR_TOKEN",
    "plaidErrorMessage": " provided processor token is in an invalid format. expected format"
  },
  "error": {
    "type": "SYSTEM_ERROR",
    "description": "Failed to call bank account provider."
  }
}

Fiat Events

ACH

ACH Fiat Events occur to communicate transaction status when the transfer API is used to initiate ACH transactions.

The Standard ACH Flow
{
  "requestId": "ba5d8540-6n78-44d8-921b-aeca5caf16g8",
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 100,
    "created": "2023-05-11T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "5167d1e5-1ff9-49bd-86a2-38d8116c7d67",
    "partnerTransactionRef": "53b16517-7766-4124-ab53-a798c310c139",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "ACH",
    "transactionStatus": "PENDING"
  }
}
{
  "requestId": "ch9d9540-1f09-44d8-876c-aeca5caf16g8",
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 100,
    "created": "2023-05-13T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "4177d1e5-1ff9-4495-86a2-38d8116c7d99",
    "partnerTransactionRef": "77c16517-4513-4124-ab53-a798c310c848",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "ACH",
    "transactionStatus": "COMPLETED"
  }
}
ACH Return Flow

Some ACH transactions can be "returned" for a number of reasons described here, but most often it will be due to insufficient funds. In the case of an ACH return, a webhook with a fiatTransactionType of DEPOSIT_RETURN, and a status of COMPLETE will be sent.

When a partner account is configured to pass an ACH return fee to the end user, a ACH Return Fee webhook will be sent.

{
  "requestId": "ba5d8540-6n78-44d8-921b-aeca5caf16g8",
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 100,
    "created": "2023-05-11T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "5167d1e5-1ff9-49bd-86a2-38d8116c7d67",
    "partnerTransactionRef": "53b16517-7766-4124-ab53-a798c310c139",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "ACH",
    "transactionStatus": "PENDING"
  }
}
{
  "requestId": "ch9d9540-1f09-44d8-876c-aeca5caf16g8",
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 100,
    "created": "2023-05-13T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "4177d1e5-1ff9-4495-86a2-38d8116c7d99",
    "partnerTransactionRef": "53b16517-7766-4124-ab53-a798c310c139",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "ACH",
    "transactionStatus": "COMPLETED"
  }
}
{
  "requestId": "aa4d9788-1f09-44d8-921b-aeca5caf16g8",
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 100,
    "created": "2021-06-11T18:32:24Z",
    "currency": "USD",
    "transactionId": "5167d1e5-1ff9-49bd-86a2-38d8116c7d67",
    "partnerTransactionRef": "53b16517-7766-4124-ab53-a798c310c139",
    "fiatTransactType": "DEPOSIT_RETURN",
    "achReturnCode": "R01",
    "instrumentType": "ACH",
    "transactionStatus": "COMPLETED"
  }
}
{
  "requestId": "ba5d8540-6n78-44d8-921b-aeca5caf16g8",
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 5.63,
    "created": "2023-05-11T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "5167d1e5-1ff9-49bd-86a2-38d8116c7d67",
    "partnerTransactionRef": null,
    "fiatTransactType": "ACH_RETURN_FEE",
    "instrumentType": null,
    "transactionStatus": "COMPLETED"
  }
}
ACH Cancelled Flow

ACH transactions can also be cancelled before they are sent to the ACH network. If a user is suspended after an ACH deposit is created but before the transaction has been transmitted to the ACH network, the transaction will be cancelled.

NOTE: In rare configurations, a cancelled status could be received after a complete.

{
  "requestId": "ba5d8540-6n78-44d8-921b-aeca5caf16g8",
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 100,
    "created": "2023-05-11T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "5167d1e5-1ff9-49bd-86a2-38d8116c7d67",
    "partnerTransactionRef": "53b16517-7766-4124-ab53-a798c310c139",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "ACH",
    "transactionStatus": "PENDING"
  }
}
{
  "requestId": "ba5d8540-6n78-44d8-921b-aeca5caf16g8",
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 100,
    "created": "2023-05-11T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "5167d1e5-1ff9-49bd-86a2-38d8116c7d67",
    "partnerTransactionRef": "77c16517-4513-4124-ab53-a798c310c848",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "ACH",
    "transactionStatus": "CANCELLED"
  }
}
ACH Decline Flow
{
  "requestId": "ba5d8540-6n78-44d8-921b-aeca5caf16g8",
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 100,
    "created": "2023-05-11T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "5167d1e5-1ff9-49bd-86a2-38d8116c7d67",
    "partnerTransactionRef": "53b16517-7766-4124-ab53-a798c310c139",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "ACH",
    "transactionStatus": "PENDING"
  }
}
{
  "requestId": "3d503ebc-a9f3-499e-ba4b-5b99da506d82",
  "partnerPartyRef": "b94ad6a6b82e4f64b17b45fc5b16bbee",
  "partnerTransactionRef": "836da921-02c6-4a7d-8c53-03bd27225afd",
  "partnerWebhookType": "FIAT_EVENT",
  "created": "2024-03-28T16:59:16.06915918Z",
  "fiatEvent": {
    "created": "2024-03-28T16:59:15.98567Z",
    "amount": 25,
    "currency": "USD",
    "partnerTransactionRef": "836da921-02c6-4a7d-8c53-03bd27225afd",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "ACH",
    "transactionStatus": "DECLINED"
  },
  "error": {
    "type": "INVALID_ACH_ROUTING_NUMBER",
    "description": "Invalid ACH routing number."
  },
  "declineReason": {
    "type": "INVALID_ACH_ROUTING_NUMBER",
    "description": "Invalid ACH routing number"
  }
}

Wire

Wire Fiat Events occur to communicate transaction status when the transfer API is used to initiate Wire transactions.

{
  "requestId": "4559ef31-cd52-4872-bd62-7c0eb695e06f",
  "partnerPartyRef": "1386e884-59db-49f2-8988-7d82893ab9e9digital",
  "partnerTransactionRef": "d619c4bc-c61f-4507-9b35-9307f29c0376",
  "partnerWebhookType": "FIAT_EVENT",
  "created": "2023-11-03T21:29:17.972413661Z",
  "fiatEvent": {
    "created": "2023-11-03T21:29:17.79187Z",
    "amount": 10000,
    "currency": "USD",
    "transactionId": "e23afa5b-1d08-4bd5-8684-00062aaaab48",
    "partnerTransactionRef": "d619c4bc-c61f-4507-9b35-9307f29c0376",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "WIRE",
    "transactionStatus": "PENDING",
    "wireReferenceNumber": "44VWgG6Tg",
    "wireRoutingNumber": "101206101",
    "wireAccountNumber": "1842139512",
    "wireSwiftCode": "CITIUS33XXX",
    "wireBankName": "LEAD BANK",
    "wireBankAddress": "115 South River Road Bedford, NH 03110",
    "wireBeneficiaryName": "Bakkt Marketplace",
    "wireBeneficiaryAddress": "10000 Avalon Boulevard, Alpharetta"
  }
}
{
  "requestId": "4559ef31-cd52-4872-bd62-7c0eb695e06f",
  "partnerPartyRef": "1386e884-59db-49f2-8988-7d82893ab9e9digital",
  "partnerTransactionRef": "d619c4bc-c61f-4507-9b35-9307f29c0376",
  "partnerWebhookType": "FIAT_EVENT",
  "created": "2023-11-04T21:29:17.972413661Z",
  "fiatEvent": {
    "created": "2023-11-03T21:29:17.79187Z",
    "amount": 10000,
    "currency": "USD",
    "transactionId": "e23afa5b-1d08-4bd5-8684-00062aaaab48",
    "partnerTransactionRef": "d619c4bc-c61f-4507-9b35-9307f29c0376",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "WIRE",
    "transactionStatus": "COMPLETE"
  }
}
{
  "requestId": "fc9a3454-6a5c-43f6-a504-4bec3d4afe7d",
  "partnerPartyRef": "1386e884-59db-49f2-8988-7d82893ab9e9digital",
  "partnerTransactionRef": "7608902f-3c35-46d0-bca9-0275dc4b42b4",
  "partnerWebhookType": "FIAT_EVENT",
  "created": "2023-11-03T21:34:30.985438525Z",
  "fiatEvent": {
    "created": "2023-11-03T21:34:30.926263Z",
    "amount": 77,
    "currency": "USD",
    "transactionId": "10b9d233-c006-40d0-94b2-7d95013250d9",
    "partnerTransactionRef": "7608902f-3c35-46d0-bca9-0275dc4b42b4",
    "fiatTransactType": "WITHDRAW",
    "instrumentType": "WIRE",
    "transactionStatus": "PENDING"
  }
}
{
  "requestId": "fc9a3454-6a5c-43f6-a504-4bec3d4afe7d",
  "partnerPartyRef": "1386e884-59db-49f2-8988-7d82893ab9e9digital",
  "partnerTransactionRef": "7608902f-3c35-46d0-bca9-0275dc4b42b4",
  "partnerWebhookType": "FIAT_EVENT",
  "created": "2023-11-03T21:34:30.985438525Z",
  "fiatEvent": {
    "created": "2023-11-03T21:34:30.926263Z",
    "amount": 77,
    "currency": "USD",
    "transactionId": "10b9d233-c006-40d0-94b2-7d95013250d9",
    "partnerTransactionRef": "7608902f-3c35-46d0-bca9-0275dc4b42b4",
    "fiatTransactType": "WITHDRAW",
    "instrumentType": "WIRE",
    "transactionStatus": "COMPLETED"
  }
}

TPJ

TPJ Events occur to communicate cash ledger adjustments when a crypto buy or sell has been initiated.

{
  "requestId": "aa9d9540-1f09-44d8-921b-aeca5caf16g7",
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 50,
    "created": "2023-06-01T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "4177d1e5-1ff9-4495-86a2-38d8116c7d99",
    "partnerTransactionRef": "77c16517-4513-4124-ab53-a798c310c848",
    "fiatTransactType": " DEBIT ",
    "instrumentType": "TPJ",
    "transactionStatus": "COMPLETED"
  }
}

Sample Fiat Webhook Event Flows

ACH Return (Pre-Completion)

Consumer makes a deposit(T) and it failed(T+2) due to insufficient balance in his bank account

{
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 100,
    "created": "2023-05-11T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "5167d1e5-1ff9-49bd-86a2-38d8116c7d67",
    "partnerTransactionRef": "53b16517-7766-4124-ab53-a798c310c139",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "ACH",
    "transactionStatus": "PENDING"
  }
}
{
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "piatEvent": {
    "amount": 100,
    "created": "2023-05-13T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "5167d1e5-1ff9-49bd-86a2-38d8116c7d67",
    "partnerTransactionRef": "53b16517-7766-4124-ab53-a798c310c139",
    "fiatTransactType": "DEPOSIT_RETURN",
    "achReturnCode": "R01",
    "instrumentType": "ACH",
    "transactionStatus": "COMPLETED"
  }
}

ACH Return (Post-Completion)

Consumer makes deposit on T and the deposit completes at T+2; then makes a reversal on T+5

{
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 50,
    "created": "2023-05-12T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "4177d1e5-1ff9-4495-86a2-38d8116c7d99",
    "partnerTransactionRef": "77c16517-4513-4124-ab53-a798c310c848",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "ACH",
    "transactionStatus": "PENDING"
  }
}
{
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 50,
    "created": "2023-05-14T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "4177d1e5-1ff9-4495-86a2-38d8116c7d99",
    "partnerTransactionRef": "77c16517-4513-4124-ab53-a798c310c848",
    "fiatTransactType": "DEPOSIT",
    "instrumentType": "ACH",
    "transactionStatus": "COMPLETED"
  }
}
{
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 50,
    "created": "2023-05-17T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "4177d1e5-1ff9-4495-86a2-38d8116c7d99",
    "partnerTransactionRef": "77c16517-4513-4124-ab53-a798c310c848",
    "fiatTransactType": "DEPOSIT_RETURN",
    "achReturnCode": "R10",
    "instrumentType": "ACH",
    "transactionStatus": "COMPLETED"
  }
}

Account Balance Adjusted by Crypto Sale

Client makes a crypto buy using their fiat account; this reduces the fiat account balance

{
  "partnerPartyRef": "53b16517-7766-4124-ab53-a798c310c139",
  "partnerWebhookType": "FIAT_EVENT",
  "fiatEvent": {
    "amount": 50,
    "created": "2023-06-01T18:32:24.448422Z",
    "currency": "USD",
    "transactionId": "4177d1e5-1ff9-4495-86a2-38d8116c7d99",
    "partnerTransactionRef": "77c16517-4513-4124-ab53-a798c310c848",
    "fiatTransactType": "DEBIT",
    "instrumentType": "TPJ",
    "transactionStatus": "COMPLETED"
  }
}