Protect
API reference for Protect endpoints
For how-to guidance, see the Protect documentation.
Endpoints | |
---|---|
/protect/event/send | Send your backend event to Plaid Protect for evaluation |
/protect/event/get | Get event details and trust index score metadata |
/protect/user/insights/get | Get the latest user event details and other metadata |
/protect/report/create | Inform Plaid of a potential fraud or risk incident |
Webhooks | |
---|---|
PROTECT_USER_EVENT | Sent when an event occurs for a user |
Endpoints
/protect/event/send
Send a new event to enrich user data
Send a new event to enrich user data and optionally get a Trust Index score for the event.
Request fields
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.event
protect_session_id
app_visit
user_sign_in
user_sign_up
protect_session_id
request_trust_index
1const request: ProtectEventSendRequest = {2 event: {3 user_sign_in: {},4 timestamp: '2025-05-14T14:42:19.350Z'5 },6 user: {7 client_user_id: 'user-abc'8 },9 };10 try {11 const response = await client.protectEventSend(request);12 const eventId = response.data.event_id;13} catch (error) {14 // handle error15}
Response fields
event_id
trust_index
fraud_attributes
request_id
1{2 "event_id": "protect-event-2be8498f",3 "trust_index": {4 "score": 86,5 "model": "ti-pro-1.0",6 "subscores": {7 "device_and_connection": {8 "score": 879 },10 "bank_account_insights": {11 "score": 8512 }13 },14 "fraud_attributes": {15 "num_distinct_names_on_accounts": 3,16 "identity_match_idv_bank_account": true,17 "idv_id_doc_passed": true18 }19 },20 "request_id": "saKrIBuEB9qJZng"21}
/protect/event/get
Get information about a user event
Get information about a user event including Trust Index score and fraud attributes.
Request fields
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.event_id
1const request: ProtectEventGetRequest = {2 event_id: 'evt_abcdefghij1234567890'3};4 try {5 const response = await client.protectEventGet(request);6 const trustScore = response.data.trust_index.score;7} catch (error) {8 // handle error9}
Response fields
event_id
trust_index
fraud_attributes
request_id
1{2 "event_id": "protect-event-2be8498f",3 "timestamp": "2020-07-24T03:26:02Z",4 "trust_index": {5 "score": 86,6 "model": "ti-pro-1.0",7 "subscores": {8 "device_and_connection": {9 "score": 8710 },11 "bank_account_insights": {12 "score": 8513 }14 }15 },16 "fraud_attributes": {17 "num_distinct_names_on_accounts": 3,18 "identity_match_idv_bank_account": true,19 "idv_id_doc_passed": true,20 "bank_accounts": [21 {22 "account_name": "Premium Checking",23 "account_type": "checking",24 "institution_name": "Huntington Credit Union",25 "account_age_days": 144,26 "num_distinct_owner_names": 327 },28 {29 "account_name": "Credit ***8889",30 "account_type": "credit"31 }32 ]33 },34 "request_id": "saKrIBuEB9qJZng"35}
/protect/user/insights/get
Get Protect user insights
Use this endpoint to get basic information about a user as it relates to their fraud profile with Protect.
Request fields
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.user_id
user_id
or client_user_id
must be provided.client_user_id
user_id
or client_user_id
must be provided.1const request: ProtectUserInsightsGetRequest = {2 client_user_id: 'user-abc'3};4try {5 const response = await client.protectUserInsightsGet(request);6 const trustScore = response.data.latest_scored_event.trust_index.score;7} catch (error) {8 // handle error9}
Response fields
user_id
client_user_id
was provided in the request instead of a user_id
, a new user_id
will be generated if one doesn't already exist for that client_user_id
.latest_scored_event
event_id
event_type
trust_index
fraud_attributes
request_id
1{2 "user_id": "plaid-user-6009db6e",3 "latest_scored_event": {4 "event_id": "protect-event-2be8498f",5 "timestamp": "2020-07-24T03:26:02Z",6 "trust_index": {7 "score": 86,8 "model": "ti-pro-1.0",9 "subscores": {10 "device_and_connection": {11 "score": 8712 },13 "bank_account_insights": {14 "score": 8515 }16 }17 },18 "fraud_attributes": {19 "num_distinct_names_on_accounts": 3,20 "identity_match_idv_bank_account": true,21 "idv_id_doc_passed": true22 }23 },24 "request_id": "saKrIBuEB9qJZng"25}
/protect/report/create
Create a Protect report
Use this endpoint to create a Protect report to document fraud incidents, investigation outcomes, or other risk events. This endpoint allows you to report various types of incidents including account takeovers, identity fraud, unauthorized transactions, and other security events. The reported data helps improve fraud detection models and provides valuable feedback to enhance the overall security of the Plaid network. Reports can be created for confirmed incidents that have been fully investigated, or for suspected incidents that require further review. You can associate reports with specific users, sessions, or transactions to provide comprehensive context about the incident.
Request fields
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.user_id
incident_event
protect_event_id
link_session_id
idv_session_id
signal_client _transaction_id
internal_reference
time
date-time
amount
iso_currency_code
USD
if not specified.USD
value
double
report_confidence
CONFIRMED
indicates the incident has been verified and definitively occurred.SUSPECTED
indicates the incident is believed to have occurred but has not been fully verified.CONFIRMED
, SUSPECTED
report_type
USER_ACCOUNT_TAKEOVER
- Indicates that a legitimate user's account was accessed or controlled by an unauthorized party.FALSE_IDENTITY
- Indicates that a user created an account using stolen or fabricated identity information.STOLEN_IDENTITY
- Indicates that a user created an account using identity information belonging to a real individual without their consent.SYNTHETIC_IDENTITY
- Indicates that a user created an account using a fake or partially fabricated identity (e.g., combining real and fake information to form a new persona).MULTIPLE_USER_ACCOUNTS
- Indicates that the same individual is operating multiple accounts in violation of policy.SCAM_VICTIM
- Indicates that the user was tricked into authorizing or sending funds as part of a scam.BANK_ACCOUNT_TAKEOVER
- Indicates that a user's linked bank account was accessed or misused by an unauthorized party.BANK_CONNECTION_REVOKED
- Indicates that a linked bank account connection was revoked by the financial institution, often due to suspected misuse, fraud, or security concerns.CARD_TESTING
- Indicates that a card was used in small or repeated transactions to test its validity.UNAUTHORIZED_TRANSACTION
- Indicates that a transaction was made without the user's consent or authorization.CARD_CHARGEBACK
- Indicates that a card transaction was reversed via a chargeback claim.ACH_RETURN
- Indicates that an ACH transaction was returned or reversed by the bank.DISPUTE
- Indicates that a user filed a dispute regarding a transaction or account activity.FIRST_PARTY_FRAUD
- Indicates that a user intentionally misrepresented themselves or their actions for financial gain.MISSED_PAYMENT
- Indicates that a user failed to make a required payment on time.LOAN_STACKING
- Indicates that a user applied for or took out multiple loans simultaneously beyond their ability to repay.MONEY_LAUNDERING
- Indicates that funds are being moved through accounts to obscure their illicit origin.NO_FRAUD
- Indicates that an investigation determined no fraudulent activity occurred on user/event (positive label)OTHER
- Indicates that the case involves fraud or financial risk not covered by other report types. Requires notes describing the report.USER_ACCOUNT_TAKEOVER
, FALSE_IDENTITY
, STOLEN_IDENTITY
, SYNTHETIC_IDENTITY
, MULTIPLE_USER_ACCOUNTS
, SCAM_VICTIM
, BANK_ACCOUNT_TAKEOVER
, BANK_CONNECTION_REVOKED
, CARD_TESTING
, UNAUTHORIZED_TRANSACTION
, CARD_CHARGEBACK
, ACH_RETURN
, DISPUTE
, FIRST_PARTY_FRAUD
, MISSED_PAYMENT
, LOAN_STACKING
, MONEY_LAUNDERING
, NO_FRAUD
, OTHER
report_source
INTERNAL_REVIEW
- Incident was identified through internal fraud investigations or review processes.USER_SELF_REPORTED
- Incident was reported directly by the affected user.BANK_FEEDBACK
- Incident was identified through bank feedback, including ACH returns and connection revocations.NETWORK_FEEDBACK
- Incident was identified through card network alerts or chargebacks.AUTOMATED_SYSTEM
- Incident was detected by automated systems such as fraud models or rule engines.THIRD_PARTY_ALERT
- Incident was identified through external vendor or consortium alerts.OTHER
- Incident was identified through a source not covered by other categories.INTERNAL_REVIEW
, USER_SELF_REPORTED
, BANK_FEEDBACK
, NETWORK_FEEDBACK
, AUTOMATED_SYSTEM
, THIRD_PARTY_ALERT
, OTHER
bank_account
account_id
account_number
routing_number
account_number
is present.ach_return_code
R01
), required if report_type
is ACH_RETURN
.notes
report_type
is OTHER
.1024
1const request: ProtectReportCreateRequest = {2 user_id: 'plaid-user-6009db6e',3 incident_event: {4 protect_event_id: 'protect-event-2be8498f',5 time: '2025-10-15T10:30:00Z',6 amount: {7 iso_currency_code: 'USD',8 value: 150.009 },10 internal_reference: 'fraud-case-12345'11 },12 report_confidence: 'CONFIRMED',13 report_type: 'UNAUTHORIZED_TRANSACTION',14 report_source: 'USER_SELF_REPORTED',15 bank_account: {16 account_id: 'BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp',17 account_number: '9900009606',18 routing_number: '011401533'19 }20};21
22try {23 const response = await plaidClient.protectReportCreate(request);24 const reportId = response.data.report_id;25} catch (error) {26 // handle error27}
Response fields
report_id
request_id
1{2 "report_id": "ptrpt_42cF1MNo42r9Xj",3 "request_id": "saKrIBuEB9qJZng"4}
Webhooks
PROTECT_USER_EVENT
Fired when there has been a new user event. The webhook payload contains limited information about the event. For full event details, call /protect/event/get
.
Properties
webhook_type
"PROTECT"
webhook_code
PROTECT_USER_EVENT
event_id
event_type
user_id
1{2 "webhook_type": "PROTECT",3 "webhook_code": "PROTECT_USER_EVENT",4 "user_id": "plaid-user-6009db6e",5 "event_id": "protect-event-2be8498f",6 "timestamp": "2020-07-24T03:26:02Z",7 "event_type": "LINK_COMPLETE"8}