Productfy logoLog In

Webhooks

Overview

Use webhooks to listen for specific events on the Productfy system. When an event occurs, a POST request with data is sent to the endpoint of the webhook.

Webhook Setup

Please see step 6 of our Getting Started implementation guide for more information.

Card Transaction

This webhook triggers when a card transaction event occurred. It covers all types of transactions, including declined transactions. You can use this webhook to trigger notifications to your customers about card activity. Note the decline reason codes in these webhooks are defined by our processor here.

Example request body:

{
"id":"Pfy_WebhkEv-glC2hCn2",
"status":"I",
"createdTs":"2021-07-14T03:42:04.927Z",
"callbackUrl":"https://2e72d0c1cf38.ngrok.io/webhooks",
"triggerType":"PymtCard",
"eventPayload":{
"type":"gpa.credit.authorization",
"state":"PENDING",
"amount":"2.2",
"reason": null,
"merchant": {
"name": "STARBUCKS."
},
"accountId":"Pfy_FinA-76EyO7sv963386l4",
"reasonCode": null,
"ledgerImpact":"negative",
"gpaOrderState": "PENDING",
"paymentCardId":"Pfy_PymtCard-Q7nnQ0xtjAm89WL757Z6rQ",
"transactionId":"Pfy_FinTx-QT5RWtntI3b8M6pwtl0r"
"pendingBalance": 1694,
"settledBalance": 4674,
"availableBalance": 1694,
"additionalInformation": null,
"previousTransactionId": null
},
"triggeringEventTs":"2021-07-14T03:42:04.54Z"
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

createdTs

Time that the webhook message was sent to the client system. For example, if a card transaction occurred at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. PymtCard is the trigger type for this webhook.

eventPayload

The data specific to this webhook event:

  • type: The type of card event:
    • authorization
    • authorization.reversal
    • authorization.advice
    • authorization.clearing
    • pindebit.authorization
    • pindebit.authorization.clearing
    • refund
  • state: The transaction state sent to Productfy from the card processor. Allowable values are: PENDING, CLEARED, COMPLETION, DECLINED, ERROR, ALL
  • amount: The amount of the transaction. For example, 2.2 represents $2.20.
  • reason: The reason for a declined transaction (ex. timeout, insufficient funds, fraud score, etc.)
  • merchant: The merchant that initiated the transaction
  • accountId: The ID of the person’s financial account record in the Productfy system.
  • reasonCode: A code related to the reason field
  • ledgerImpact: This specifies whether the transaction is debiting or crediting the ledger. If ledgerImpact is positive then the resulting transaction is a credit, otherwise the transaction is a debit.
  • gpaOrderState: A field passed to us from our processor
  • paymentCardId: The unique ID of this payment card.
  • transactionId: The unique ID of the transaction.
  • pendingBalance: The pending balance of the virtual account at the time the transaction processed
  • settledBalance: The settled balance of the virtual account at the time the transaction processed
  • availableBalance: The available balance of the virtual account at the time the transaction processed
  • additionalInformation: A field passed to us from our processor
  • previousTransactionId: For a card authorization that has multiple clearing transactions (partial clearing) this will show the ID of previous clearing transactions

triggeringEventTs

Time that the triggering event occurred. For example, if a card transaction occurred at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

Account Linked

A third party financial account was successfully linked to a user.

Example request body:

{
"id":"Pfy_WebhkEv-O489wicXm",
"status":"I",
"createdTs":"2021-06-14T19:05:52.011Z",
"callbackUrl":"https://2e72d0c1cf38.ngrok.io/webhooks",
"triggerType":"FinAccCreate",
"eventPayload":{
"ownerId":"Pfy_O-URiW619xZ",
"accountId":"Pfy_FinA-1xLqzzQN9A7ZZzF0",
"organizationId":"Pfy_O-U1lW6XXZy",
"yodleeAccountId":"1243509",
"yodleeProviderAccountId":"1234567"
"yodleeRequestId":"iYyldR9JbKtOXomI0D4qxxILEMA="
},
"triggeringEventTs":"2021-06-14T19:05:32.877Z"
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

createdTs

Time that the webhook message was sent to the client system. For example, if an account was linked at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. FinAccCreate is the trigger type for this webhook.

eventPayload

The data specific to this webhook event:

  • ownerId: Unique ID of the account owner.
  • accountId: The ID of the person’s financial account record in the Productfy system.
  • organizationId: The ID of the organization that the person belongs to.
  • yodleeAccountId: External ID from Yodlee for the person’s financial account in the Yodlee system.
  • yodleeProviderAccountId: The ID of the financial institution that the person’s account belongs to.
  • yodleeRequestId: The ID of the Yodlee request passed back to Productfy

triggeringEventTs

Time that the triggering event occurred. For example, if an account was linked at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

Statement Ready

This webhook triggers when a statement has been generated on one of your customers' accounts. Use this webhook to trigger a notification to your customer that their statement is available.

Example request body:

{
"id":"Pfy_WebhkEv-3tmm7Vt9",
"status":"S",
"createdTs":"2022-02-01T08:43:18.927Z",
"callbackUrl":"https://2e72d0c1cf38.ngrok.io/webhooks",
"triggerType":"FinAccStmtCreate",
"eventPayload":{
"accountId":"Pfy_FinA-hE5vKo8iIJ2OkBs5",
"statementId":"Pfy_AccStmt-5KKUQn8PiB48y6KcwR63Twy",
"effectiveStartTs":"2022-01-01T00:00:00.000Z",
"effectiveEndTs":"2022-01-31T00:00:00.000Z"
},
"triggeringEventTs":"2021-01-27T08:42:03.534Z"
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS(“S”, “Success”),
  • SENDING_IN_PROGRESS(“I”, “Sending In-Progress”),
  • FAILED(“F”, “Failed”),
  • NO_OP(“N”, “No-Op”)

createdTs

Time that the webhook message was sent to the client system. For example, if a statement was ready at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. FinAccStmtCreate is the trigger type for this webhook.

eventPayload

The data specific to this webhook event:

  • accountId: Unique ID of the account.
  • statementId: Unique ID of the statement.
  • effectiveStartTs: The first date of the statement cycle.
  • effectiveEndTs: The last date of the statement cycle.

triggeringEventTs

Time that the triggering event occurred. For example, if a statement was ready at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

Account Transaction Download

A third party linked account has been refreshed with new transactions.

Example request body:

{
"id":"Pfy_WebhkEv-a3K03309",
"status":"I",
"createdTs":"2021-07-14T09:23:18.777Z",
"callbackUrl":"https://2e72d0c1cf38.ngrok.io/webhooks",
"triggerType":"FinAccTxDwnld",
"eventPayload":{
"ownerId":"Pfy_O-x2kfcPeK2",
"accountId":"Pfy_FinA-d3BS139XE6wxG2T4",
"organizationId":"Pfy_O-Kr8cxP1K2",
"yodleeAccountId":"103204781",
"yodleeProviderAccountId":"10340290"
},
"triggeringEventTs":"2021-07-14T09:22:43.351Z"
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

createdTs

Time that the webhook message was sent to the client system. For example, if a new transaction occurred at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. FinAccTxDwnld is the trigger type for this webhook.

eventPayload

The data specific to this webhook event:

  • ownerId: Unique ID of the account owner.
  • accountId: The ID of the person’s financial account record in the Productfy system.
  • organizationId: The ID of the organization that the person belongs to.
  • yodleeAccountId: External ID from Yodlee for the person’s financial account in the Yodlee system.
  • yodleeProviderAccountId: The ID of the financial institution that the person’s account belongs to.

triggeringEventTs

Time that the triggering event occurred. For example, if a new transaction occurred at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

KYC Status

A user’s Know Your Customer (KYC) status was updated. For example, when a new user is onboarded, the user must pass the Know Your Customer (KYC) regulatory requirements before they are allowed access to any financial institution. If Productfy’s internal rules are able to validate the user, then this webhook is triggered with the kycStatus of P.

Example request body:

{
"id":"Pfy_WebhkEv-H5DbX748",
"status":"I",
"createdTs":"2021-07-09T09:15:28.858Z",
"callbackUrl":"https://2e72d0c1cf38.ngrok.io/webhooks",
"triggerType":"KycUpdate",
"eventPayload":{
"personId":"Pfy_P-6wcqlYw6n",
"kycStatus":"F",
"kycDescription":"Automatically failed based on rule engine"
},
"triggeringEventTs":"2021-07-09T09:15:18.223Z"
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

createdTs

Time that the webhook message was sent to the client system. For example, if your KYC status changed at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. KycUpdate is the trigger type for this webhook.

eventPayload

The data specific to this webhook event:

  • personId: Unique ID of the person associated with this webhook event.
  • kycStatus: One of:
    • P - Passed automatically by the system’s rule engine.
    • F - Failed automatically by the system’s rule engine.
    • 1 - Passed manually by a Productfy admin.
    • 0 - Failed manually by a Productfy admin.
  • kycDescription: Description of the event.

triggeringEventTs

Time that the triggering event occurred. For example, if your KYC status changed at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

KYB Status

A user’s Know Your Business (KYB) status was updated. The occurs when the executeKyb API is called on an Organization ID.

Example request body:

{
"id":"Pfy_WebhkEv-0L67Fzk0",
"status":"I",
"eventPayload":{
"cipResult":"1",
"organizationId":"Pfy_O-tV54gPYVr",
"cipResultDescription":"Admin passed the check"
},
"triggeringEventTs":"2022-12-21T10:11:29.992Z",
"createdTs":"2022-12-21T10:11:30.39Z",
"triggerType":"KybCipUpdate",
"callbackUrl":"https://test.com"
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

eventPayload

The data specific to this webhook event:

  • cipResult: The result of the identity validation on the business
  • organizationId: The Productfy Organization ID that KYB was performed on
  • cipResultDescription: The description of the cipResult field

triggeringEventTs

Time that the triggering event occurred. For example, if your KYB status changed at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

createdTs

Time that the webhook message was sent to the client system. For example, if your KYC status changed at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

triggerType

Type of trigger for this webhook event. KybCipUpdate is the trigger type for this webhook.

callbackUrl

The URL of the server listening for webhook events.

ACH Transfer Validation Failed

The ACH transfer request failed validation.

Example request body:

{
"id":"Pfy_WebhkEv-kCNiN5RH",
"status":"I",
"createdTs":"2021-08-25T01:16:03.914Z",
"callbackUrl":"https://oue8gmkis0.execute-api.us-west-2.amazonaws.com/default/webhook-consumer-loc-dev"
"triggerType":"AchTrfVldtnFail",
"eventPayload":{
"status":"VF",
"achTransferRequestId":"Pfy_AchReq-SA4JMOLKpEtF90R6SGr7Cf10"
},
"triggeringEventTs":"2021-08-25T01:16:00.258Z",
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

createdTs

Time that the webhook message was sent to the client system. For example, if your ACH transfer failed validation at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. AchTrfVldtnFail is the trigger type for this webhook.

eventPayload

The data specific to this webhook event:

  • status: One of:
    • VF (Validation Failed)
    • VS (Validation Successful)
    • SI (Submitted to Financial Institution)
    • F (Failed)
    • S (Successful)
  • achTransferRequestId: Unique ID of the ACH transfer request.

triggeringEventTs

Time that the triggering event occurred. For example, if your ACH transfer failed status changed at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

ACH Transfer Passed Validation

The ACH transfer request passed validation.

Example request body:

{
"id":"Pfy_WebhkEv-R34ZV4zC",
"status":"I","
"createdTs":"2021-08-25T01:16:06.473Z",
"callbackUrl":"https://oue8gmkis0.execute-api.us-west-2.amazonaws.com/default/webhook-consumer-loc-dev"
"triggerType":"AchTrfVldtnSccss",
eventPayload":{
"status":"VS",
"achTransferRequestId":"Pfy_AchReq-XEtK7GMqZ7C6qIo8gJX1085a"
},
"triggeringEventTs":"2021-08-25T01:16:00.37Z",
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

createdTs

Time that the webhook message was sent to the client system. For example, if your ACH transfer passed validation at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. AchTrfVldtnSccss is the trigger type for this webhook.

eventPayload

The data specific to this webhook event:

  • status: One of:
    • VF (Validation Failed)
    • VS (Validation Successful)
    • SI (Submitted to Financial Institution)
    • F (Failed)
    • S (Successful)
  • achTransferRequestId: Unique ID of the ACH transfer request.

triggeringEventTs

Time that the triggering event occurred. For example, if your ACH transfer validation status changed at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

ACH Transfer Submitted To Financial Institution

The ACH transfer request was submitted to the financial institution for processing.

Example request body:

{
"id":"Pfy_WebhkEv-7gdW0738",
"status":"I",
"createdTs":"2021-08-25T01:22:01.625Z",
"callbackUrl":"https://oue8gmkis0.execute-api.us-west-2.amazonaws.com/default/webhook-consumer-loc-dev"
"triggerType":"AchTrfSubmit",
"eventPayload":{
"status":"SI",
"achTransferRequestId":"Pfy_AchReq-XEtK7GMqZ7C6qIo8gJX1085a"
},
"triggeringEventTs":"2021-08-25T01:22:00.452Z",
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

createdTs

Time that the webhook message was sent to the client system. For example, if your ACH transfer request was submitted at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. AchTrfSubmit is the trigger type for this webhook.

eventPayload

The data specific to this webhook event:

  • status: One of:
    • VF (Validation Failed)
    • VS (Validation Successful)
    • SI (Submitted to Financial Institution)
    • F (Failed)
    • S (Successful)
  • achTransferRequestId: Unique ID of the ACH transfer request.

triggeringEventTs

Time that the triggering event occurred. For example, if your ACH transfer request was submitted at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

ACH Transfer Failed

The ACH transfer request failed for a reason other than validation.

Example request body:

{
"id":"Pfy_WebhkEv-D7virGkc",
"status":"I",
"createdTs":"2021-08-25T01:22:01.656Z",
"callbackUrl":"https://oue8gmkis0.execute-api.us-west-2.amazonaws.com/default/webhook-consumer-loc-dev"
"triggerType":"AchTrfFail",
"eventPayload":{
"status":"F",
"achTransferRequestId":"Pfy_AchReq-7KJhvlFBL48uYYk1yy636BGc"
},
"triggeringEventTs":"2021-08-25T01:22:00.452Z",
}

Potential Reasons for Failure

Return ReasonDescription
Insufficient FundsThe available balance is not sufficient to cover the dollar value of the debit entry.
Account ClosedPreviously active account has been closed.
No Account / Unable to Locate AccountAccount number structure is valid, but doesn’t match the individual identified in the entry or is not an open account.
Invalid Account NumberAccount number structure is not valid.
Unauthorized Debit to Consumer Account Using Corporate SEC CodeA debit entry was transmitted to a consumer account that was not authorized by the Receiver.
Authorization Revoked by CustomerConsumer who previously authorized entries has revoked authorization with the Originator.
Payment StoppedThe Receiver has requested the stop payment of a specific ACH debit entry.
Uncollected FundsSufficient balance exists, but the value of uncollected items brings available balance below the amount of debit entry.
Customer Advises Originator is Not Known to Receiver and/or Originator is Not Authorized by Receiver to Debit Receiver’s AccountReceiver has no relationship with the Originator or has not authorized the Originator to debit the account.
Customer Advises Entry Not in Accordance with the Terms of the AuthorizationThe debit entry was inaccurate or improperly initiated. Other reasons include source document was ineligible, notice was not provided to the receive or amount was inaccurately obtained.
Account FrozenFunds are unavailable due to action by the RDFI or legal action.
Non-Transaction AccountRDFI policies/regulations restrict activity to account.
Corporate Customer Advises Not AuthorizedReceiver has notified RDFI that corporate debit entry transmitted to a corporate account is not authorized.

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

createdTs

Time that the webhook message was sent to the client system. For example, if your ACH transfer request failed at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. AchTrfFail is the trigger type for this webhook.

eventPayload

The data specific to this webhook event:

  • status: One of:
    • VF (Validation Failed)
    • VS (Validation Successful)
    • SI (Submitted to Financial Institution)
    • F (Failed)
    • S (Successful)
  • achTransferRequestId: Unique ID of the ACH transfer request.

triggeringEventTs

Time that the triggering event occurred. For example, if your ACH transfer request failed at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

ACH Transfer Successful

The ACH transfer request was marked successful.

Example request body:

{
"id":"Pfy_WebhkEv-01LD896k",
"status":"I",
"createdTs":"2021-08-17T22:03:04.19Z",
"callbackUrl":"://oue8gmkis0.execute-api.us-west-2.amazonaws.com/default/webhook-consumer-loc-dev>https://oue8gmkis0.execute-api.us-west-2.amazonaws.com/default/webhook-consumer-loc-dev"
"triggerType":"AchTrfSccss",
"eventPayload":{
"status":"S",
"achTransferRequestId":"Pfy_AchReq-03BBLH719d2UOVK519z7BPnF"
},
"triggeringEventTs":"2021-08-17T22:03:00.155Z",
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

createdTs

Time that the webhook message was sent to the client system. For example, if your ACH transfer succeeded at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. AchTrfSccss is the trigger type for this webhook.

eventPayload

The data specific to this webhook event:

  • status: One of:
    • VF (Validation Failed)
    • VS (Validation Successful)
    • SI (Submitted to Financial Institution)
    • F (Failed)
    • S (Successful)
  • achTransferRequestId: Unique ID of the ACH transfer request.

triggeringEventTs

Time that the triggering event occurred. For example, if your ACH transfer request succeeded at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

ACH Received

This webhook triggers when an ACH transaction is initiated at a third party bank and sent to the account/routing number provided with a Productfy virtual account (e.g. a direct deposit transaction).

Example request body:

{
"id": "Pfy_WebhkEv-12345678",
"status": "S",
"eventPayload": {
"amount": "0.045",
"senderName": "VENMO",
"description": "VERIFYBANK",
"ledgerEntryType": "Credit",
"financialTransactionId": "Pfy_FinTx-teStTrAN33"
},
"triggeringEventTs": "2022-06-27T21:02:08.744Z",
"createdTs": "2022-06-27T20:22:09.368Z",
"triggerType": "DrctDepFinTxCreate",
"callbackUrl": "https://testing.mydomain.com/webhook-endpoint"
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

eventPayload

The data specific to this webhook event:

  • amount: The amount of the ACH transaction received
  • senderName: The name of the originator of the ACH transaction
  • description: The description of the transaction (entered by the originating bank)
  • ledgerEntryType: "Credit" refers to received ACH transactions that increase a virtual account balance. "Debit" refers to transactions that decrease a virtual account balance.
  • financialTransactinoId: The ID of the virtual account transaction created as a result of this ACH

createdTs

Time that the webhook message was sent to the client system. For example, if your ACH transfer succeeded at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. DrctDepFinTxCreate is the trigger type for this webhook.

triggeringEventTs

Time that the triggering event occurred. For example, if your ACH transfer request succeeded at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

Incomplete Credit Card Application

This webhook can be used to fulfill the regulatory obligation of credit cards to send a notification to your customer informing them that their credit card application was denied due to being incomplete. This webhook triggers 7 days after a credit card application has been started but not finished. The start date/time of the credit card application is determined by the Initiate Credit Application API.

Example request body:

{
"id": "Pfy_WebhkEv-12345678",
"status": "S",
"eventPayload": {
"personId": "Pfy_P-f7KSAfZ98",
"personName": "Micky Mouse",
"applicationStart": "2022-10-25T23:28:28",
},
"triggeringEventTs": "2022-06-27T21:02:08.744Z",
"createdTs": "2022-06-27T20:22:09.368Z",
"triggerType": "IncmpltPymtCardApplcSubmit",
"callbackUrl": "https://testing.mydomain.com/webhook-endpoint"
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

eventPayload

The data specific to this webhook event:

  • personId: The Productfy person ID of the end user with the incomplete application
  • personName: The name of the Productfy person ID with the incomplete application
  • applicationStart: The date/time when the application was initiated by the end user

createdTs

Time that the webhook message was sent to the client system. For example, if your ACH transfer succeeded at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. DrctDepFinTxCreate is the trigger type for this webhook.

triggeringEventTs

Time that the triggering event occurred. For example, if your ACH transfer request succeeded at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.

Yodlee Balance Refresh

A third party Yodlee-linked account has been refreshed with updated account balance.

Example Request Body:

{
"id":"Pfy_WebhkEv-1Rnl43E5",
"status":"I",
"createdTs":"2023-03-03T15:15:07.271Z",
"callbackUrl":"https://oue8gmkis0.execute-api.us-west-2.amazonaws.com/default/webhook-consumer-loc-dev"}
"triggerType":"AccBalRfrshCmplt",
"eventPayload":{
"refreshStatus":"SUCCESS",
"financialAccountId":"Pfy_FinA-Uwpqg3IAOfodF8GW",
"currentBalanceAmount":1600.0,
"balanceRefreshTimestamp":"2023-03-03T15:14:06Z",
"currentSettledBalanceAmount":1600.0,
"currentAvailableBalanceAmount":1500.0
},
"triggeringEventTs":"2023-03-03T15:13:16.801Z",
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

SUCCESS("S", "Success"),

SENDING_IN_PROGRESS("I", "Sending In-Progress"),

FAILED("F", "Failed"),

NO_OP("N", "No-Op")

createdTs

Time that the webhook message was sent to the client system.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. AccBalRfrshCmplt is the trigger type for this webhook.

eventPayload

The data specific to this webhook event:

refreshStatus: one of:

SUCCESS

IN_PROGRESS

FAILED

financialAccountId: unique ID of the account

currentBalanceAmount: The balance in the account that is available at the beginning of the business day; it is equal to the ledger balance of the account.

balanceRefreshTimestamp: time that balance refresh occurred

currentSettledBalance: The balance in the account that has been settled

currentAvailableBalanceAmount: The balance in the account that is available for spending. For checking accounts with overdraft, the available balance may include overdraft amount, if the site adds overdraft balance to the available balance.

failedReason: The reason the account balance refresh failed.

triggeringEventTs

Time that the triggering event occurred.

Disbursement Status

This webhook is triggered for clients using our Disbursements product. There are two scenarios where this webhook triggers: 1.) When the Send Disbursement Notification API is called, 2.) When the Cancel Disbursement Request API is called. In both cases the webhook can be used to trigger an email notification to the customer informing of them of what happened.

Example request body:

{
"id": "Pfy_WebhkEv-12345678",
"status": "S",
"createdTs": "2023-04-05T16:44:49.481Z",
"callbackUrl": "https://qa.api.p-latinum.com/webhooks/pfy",
"triggerType": "CnsmrDsbrs",
"eventPayload": {
"token": "Pfy_Tk-DisReq:9MYnlyGg24n8xnIlawLCRlDUpVVOe5z6bBD",
"eventType": "CREATED",
"successful": true,
"personEmail": "test@gmail.com",
"fundingAmount": 122,
"disbursementId": "Pfy_CnsmrDsbrsReq-Mw80eerta78JW0h1MlqB8Q",
"personLastName": "Mouse",
"personFirstName": "Mickey",
"tokenExpirationTs": "2023-04-12T23:59:59.999999-07:00",
"tenantDeploymentEnvironmentId": "Pfy_TnntDeployEnv-o2Q5420WnXov"
},
"triggeringEventTs": "2023-04-05T16:44:49.359Z"
}

The fields in the request body are described below:

id

The unique ID for this webhook event.

status

Status - can be one of the following:

  • SUCCESS("S", "Success"),
  • SENDING_IN_PROGRESS("I", "Sending In-Progress"),
  • FAILED("F", "Failed"),
  • NO_OP("N", "No-Op")

createdTs

Time that the webhook message was sent to the client system. For example, if the API succeeded at 12:00pm but the webhook did not get created until 12:02pm, then 12:02pm is the createdTs.

callbackUrl

The URL of the server listening for webhook events.

triggerType

Type of trigger for this webhook event. CnsmrDsbrs is the trigger type for this webhook.

eventPayload

The data specific to this webhook event:

  • token: This is unique security token generated by Productfy that must be used in the URL you direct customers to for access to their disbursement.
  • eventType: Values are either CREATED or CANCELLED
  • successful: True or false indicating whether there was missing data or an error on the Productfy side
  • personEmail: Email address entered in the disbursement request
  • fundingAmount: Funding amount entered in the disbursement request
  • disbursementId: Disbursement ID of the disbursement that was previously created
  • personLastName: Last name of the customer
  • personFirstName: First name of the customer
  • tokenExpirationTs: Date/time when the token expires (default is 7 days)
  • tenantDeploymentEnvironmentId: client ID

triggeringEventTs

Time that the triggering event occurred. For example, if the API request succeeded at 12:00pm but the webhook did not get created until 12:02pm, then 12:00pm is the triggeringEventTs.