Evaluate a planned ACH transaction
POST /signal/evaluate
Use /signal/evaluate to evaluate a planned ACH transaction to get a return risk assessment (such as a risk score and risk tier) and additional risk signals.
In order to obtain a valid score for an ACH transaction, Plaid must have an access token for the account, and the Item must be healthy (receiving product updates) or have recently been in a healthy state. If the transaction does not meet eligibility requirements, an error will be returned corresponding to the underlying cause. If /signal/evaluate is called on the same transaction multiple times within a 24-hour period, cached results may be returned. For more information please refer to the error documentation on Item errors and Link in Update Mode.
Note: This request may take some time to complete if Signal is being added to an existing Item. This is because Plaid must communicate directly with the institution when retrieving the data for the first time.
Request Body
Required
SignalEvaluateRequest defines the request schema for /signal/evaluate
Parameters
client_id
client_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.
secret
secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
access_token
account_id
account_id of the account that is the funding source for the proposed transaction. The account_id is returned in the /accounts/get endpoint as well as the onSuccess callback metadata.
This will return an INVALID_ACCOUNT_ID error if the account has been removed at the bank or if the account_id is no longer valid.
client_transaction_id
amount
102.05)
user_present
true if the end user is present while initiating the ACH transfer and the endpoint is being called; false otherwise (for example, when the ACH transfer is scheduled and the end user is not present, or you call this endpoint after the ACH transfer but before submitting the Nacha file for ACH processing).
client_user_id
client_user_id.
is_recurring
true if the ACH transaction is a part of recurring schedule (for example, a monthly repayment); false otherwise
default_payment_method
SAME_DAY_ACH: Same Day ACH by NACHA. The debit transaction is processed and settled on the same day
STANDARD_ACH: standard ACH by NACHA
MULTIPLE_PAYMENT_METHODS: if there is no default debit rail or there are multiple payment methods
Possible values: SAME_DAY_ACH, STANDARD_ACH, MULTIPLE_PAYMENT_METHODS
user
/signal/evaluate or /signal/processor/evaluate, this field is optional, but strongly recommended to increase the accuracy of Signal results.
name
prefix
given_name
middle_name
family_name
suffix
phone_number
email_address
address
city
region
"NC"
street
"564 Main Street, APT 15"
postal_code
country
device
/signal/evaluate or /signal/processor/evaluate, this field is optional, but strongly recommended to increase the accuracy of Signal results.
ip_address
user_agent
risk_profile_key
risk_profile_key is deprecated. Please provide ruleset instead.
ruleset_key
Response
SignalEvaluateResponse defines the response schema for /signal/evaluate
Response Properties
request_id
scores
customer_initiated_return_risk
score
risk_tier
score into a useful action.
A tier corresponding to the projected likelihood that the transaction, if initiated, will be subject to a return.
In the customer_initiated_return_risk object, there are five risk tiers corresponding to the scores:
1: Predicted customer-initiated return incidence rate between 0.00% - 0.02%
2: Predicted customer-initiated return incidence rate between 0.02% - 0.05%
3: Predicted customer-initiated return incidence rate between 0.05% - 0.1%
4: Predicted customer-initiated return incidence rate between 0.1% - 0.5%
5: Predicted customer-initiated return incidence rate greater than 0.5%
bank_initiated_return_risk
score
risk_tier
score into a useful action.
In the bank_initiated_return_risk object, there are eight risk tiers corresponding to the scores:
1: Predicted bank-initiated return incidence rate between 0.0% - 0.5%
2: Predicted bank-initiated return incidence rate between 0.5% - 1.5%
3: Predicted bank-initiated return incidence rate between 1.5% - 3%
4: Predicted bank-initiated return incidence rate between 3% - 5%
5: Predicted bank-initiated return incidence rate between 5% - 10%
6: Predicted bank-initiated return incidence rate between 10% - 15%
7: Predicted bank-initiated return incidence rate between 15% and 50%
8: Predicted bank-initiated return incidence rate greater than 50%
core_attributes
days_since_first_plaid_connection: The number of days since the first time the Item was connected to an application via Plaid
plaid_connections_count_7d: The number of times the Item has been connected to applications via Plaid over the past 7 days
plaid_connections_count_30d: The number of times the Item has been connected to applications via Plaid over the past 30 days
total_plaid_connections_count: The number of times the Item has been connected to applications via Plaid
is_savings_or_money_market_account: Indicates whether the ACH transaction funding account is a savings/money market account
For the full list and detailed documentation of core attributes available, or to request that core attributes not be returned, contact Sales or your Plaid account manager
unauthorized_transactions_count_7d
unauthorized_transactions_count_30d
unauthorized_transactions_count_60d
unauthorized_transactions_count_90d
nsf_overdraft_transactions_count_7d
nsf_overdraft_transactions_count_30d
nsf_overdraft_transactions_count_60d
nsf_overdraft_transactions_count_90d
days_since_first_plaid_connection
plaid_connections_count_7d
plaid_connections_count_30d
total_plaid_connections_count
is_savings_or_money_market_account
total_credit_transactions_amount_10d
total_debit_transactions_amount_10d
p50_credit_transactions_amount_28d
p50_debit_transactions_amount_28d
p95_credit_transactions_amount_28d
p95_debit_transactions_amount_28d
days_with_negative_balance_count_90d
p90_eod_balance_30d
p90_eod_balance_60d
p90_eod_balance_90d
p10_eod_balance_30d
p10_eod_balance_60d
p10_eod_balance_90d
available_balance
balance_last_updated time. The available balance is the current balance less any outstanding holds or debits that have not yet posted to the account.
current_balance
balance_last_updated time. The current balance is the total amount of funds in the account.
balance_last_updated
phone_change_count_28d
phone_change_count_90d
email_change_count_28d
email_change_count_90d
address_change_count_28d
address_change_count_90d
plaid_non_oauth_authentication_attempts_count_3d
plaid_non_oauth_authentication_attempts_count_7d
plaid_non_oauth_authentication_attempts_count_30d
failed_plaid_non_oauth_authentication_attempts_count_3d
failed_plaid_non_oauth_authentication_attempts_count_7d
failed_plaid_non_oauth_authentication_attempts_count_30d
debit_transactions_count_10d
credit_transactions_count_10d
debit_transactions_count_30d
credit_transactions_count_30d
debit_transactions_count_60d
credit_transactions_count_60d
debit_transactions_count_90d
credit_transactions_count_90d
total_debit_transactions_amount_30d
total_credit_transactions_amount_30d
total_debit_transactions_amount_60d
total_credit_transactions_amount_60d
total_debit_transactions_amount_90d
total_credit_transactions_amount_90d
p50_eod_balance_30d
p50_eod_balance_60d
p50_eod_balance_90d
p50_eod_balance_31d_to_60d
p50_eod_balance_61d_to_90d
p90_eod_balance_31d_to_60d
p90_eod_balance_61d_to_90d
p10_eod_balance_31d_to_60d
p10_eod_balance_61d_to_90d
transactions_last_updated
is_account_closed
is_account_frozen_or_restricted
distinct_ip_addresses_count_3d
distinct_ip_addresses_count_7d
distinct_ip_addresses_count_30d
distinct_ip_addresses_count_90d
distinct_user_agents_count_3d
distinct_user_agents_count_7d
distinct_user_agents_count_30d
distinct_user_agents_count_90d
distinct_ssl_tls_connection_sessions_count_3d
distinct_ssl_tls_connection_sessions_count_7d
distinct_ssl_tls_connection_sessions_count_30d
distinct_ssl_tls_connection_sessions_count_90d
days_since_account_opening
balance_to_transaction_amount_ratio
available_or_current_balance and dividing it by the transaction amount. Useful to say “10% buffer”, for example. This is a convenience function to build Signal Rules upon.
risk_profile
ruleset instead.
key
outcome
ruleset
ruleset_key is not provided, this field will be omitted. This feature is currently in closed beta; to request access, contact your account manager.
ruleset_key
result
ACCEPT: Accept the transaction for processing.
REROUTE: Reroute the transaction to a different payment method, as this transaction is too risky.
REVIEW: Review the transaction before proceeding.
triggered_rule_details
internal_note
custom_action_key
custom_action_key for an ACCEPT result.
outcome
result or triggered_rule_details.custom_action_key instead.
warnings
warning_type
warning_code
ITEM_LOGIN_REQUIRED warning, we recommend re-authenticating your user by implementing Link’s update mode. This will guide your user to fix their credentials, allowing Plaid to start fetching data again for future Signal requests.
warning_message