Reporting returns and decisions
Improve accuracy by reporting outcomes
It's critical that you report ACH activity (both decisions and returns) back to Plaid - reporting enables Plaid to help you tune your rule logic to optimize your integration.
For both decisions and returns, you can use API endpoints (recommended) or upload the transactions manually via the Signal Dashboard.
Reporting decisions
Reporting a decision allows Plaid to know that the transaction was processed. Once it knows the transaction was processed, if Signal doesn't hear about a corresponding return, it assumes the transaction was successful.
Plaid will automatically infer decisions for customers using Signal Rules with only ACCEPT
or REROUTE
results. There is no need to report decisions back to Plaid for these transactions unless the decision has changed (for example, your processor refused to process an ACCEPT
ed transaction).
If your rules integration uses REVIEW
results, then you'll need to call /signal/decision/report
once you've made the final determination for the transaction and it is convenient to do so.
If your integration is directly reading scores and attributes instead of using Signal Rules, then you'll need to call /signal/decision/report
for all transactions.
Reporting returns
To report an ACH return to Plaid, call /signal/return/report
as soon as you're aware of the ACH return and it's convenient to do so.
Dashboard upload
If you would prefer to not report decisions and returns via API, you can upload them via the data import page in the Dashboard. It is recommended you upload reports on a weekly basis.
The CSV files for uploading decisions and returns must follow the schemas defined below. Ensure your data is properly formatted to avoid processing errors.
Decision File CSV Schema
Column Name | Required? | Data Type | Description |
---|---|---|---|
client_transaction_id | Yes | String | Unique identifier for the transaction used in /signal/evaluate |
initiated | Yes | Boolean | Whether the transaction was initiated for processing or not. |
days_funds_on_hold | No | Integer | Number of days the funds were held before being released, if applicable to your usecase. |
amount_instantly_available | No | Integer | The amount made available instantly in cents, if relevant for your account funding usecase |
Return File CSV Schema
Column Name | Required? | Data Type | Description |
---|---|---|---|
client_transaction_id | Yes | String | Unique identifier for the transaction used in /signal/evaluate |
return_code | Yes | String | The ACH return code (e.g., R01, R02, R10) |
returned_at | No | String | Timestamp of when the return occurred in ISO 8601 format (YYYY-MM-DDThh:mm:ssTZD) |