Fraudulent website signalPrivate preview
Evaluate connected account websites for suspicious or misleading content.
The fraudulent website signal evaluates whether a connected account’s website is deceptive or violates policy. This includes websites for accounts that don’t exist yet on Stripe.
Get early access to the fraudulent website signal.
Enter your email to request access.
Request an evaluation
Use the Account Evaluations API to trigger a fraudulent website evaluation on demand. You can evaluate an existing connected account or provide account data directly.
Evaluate an existing account
You can evaluate a website for an existing account.
curl -X POST https://api.stripe.com/v2/signals/account_evaluations \ -H "Authorization: Bearer sk_test_BQokikJOvBiI2HlWgH4olfQ2" \ -H "Stripe-Version: 2026-08-26.preview" \ --json '{ "account_details": { "account":}, "requested_signals": [ "fraudulent_website" ] }'"{{CONNECTED_ACCOUNT_ID}}"
Evaluate without an existing account
You can evaluate a website before creating a connected account by providing account_ with the business URL. The business_ field is the only required field for an entity-less evaluation. You can provide other fields to improve the accuracy of the assessment.
curl -X POST https://api.stripe.com/v2/signals/account_evaluations \ -H "Authorization: Bearer sk_test_BQokikJOvBiI2HlWgH4olfQ2" \ -H "Stripe-Version: 2026-08-26.preview" \ --json '{ "account_details": { "data": { "defaults": { "profile": { "business_url": "https://example.com" } } } }, "requested_signals": [ "fraudulent_website" ] }'
Webhook events
The evaluation is asynchronous. Listen for:
v2.when you request a fraudulent website evaluation.signals. account_ signal. fraudulent_ website_ ready v2.when you request multiple signals and want one notification after all results are ready.signals. account_ evaluation. complete
These are thin events: data is always {}. Use related_ to fetch the related signal or evaluation.
{ "id": "acctsig_61UDQe5wRb3w1JgCP16UDQb80xSQmM6vEqeUAlKES", "object": "v2.signals.account_signal", "type": "fraudulent_website", "account_details": { "account": "acct_1T42eHAZTJIN1MEb" }, "account_evaluation": "acctevl_61UDQe5wRb3w1JgCP16UDQb80xSQmM6vEqeUAlKES", "created": "2026-02-26T00:43:28.000Z", "fraudulent_website": { "risk_level": "elevated", "details": "The website contains several indicators of potential fraud: product listings use vague descriptions inconsistent with industry norms, the contact page lacks a verifiable address, and images appear to be stock photos presented as original product photos." } }
Alternatively, if you received a v2. event, use related_ to fetch the full evaluation, which includes the signal result in evaluated_:
{ "id": "acctevl_61UDQe5wRb3w1JgCP16UDQb80xSQmM6vEqeUAlKES", "object": "v2.signals.account_evaluation", "account_details": { "account": "acct_1T42eHAZTJIN1MEb" }, "requested_signals": ["fraudulent_website"], "pending_signals": [], "evaluated_signals": { "fraudulent_website": { "signal": "acctsig_61UDQe5wRb3w1JgCP16UDQb80xSQmM6vEqeUAlKES", "evaluated_at": "2026-02-26T00:43:28.000Z", "risk_level": "elevated", "details": "The website contains several indicators of potential fraud: product listings use vague descriptions inconsistent with industry norms, the contact page lacks a verifiable address, and images appear to be stock photos presented as original product photos." } } }
The signal includes the following information:
| Field | Description |
|---|---|
risk_ | The risk level for the website: low, normal, elevated, highest, or unknown. |
details | A plain description of issues found on the website, generated by LLM analysis. If the risk_ is unknown, the explanation includes why we couldn’t complete the evaluation. |
Note
If the website URL is invalid or unreachable, the evaluation returns a risk level of unknown with an explanation of why we couldn’t complete the evaluation.
Test in a sandbox
You can trigger a fraudulent_ evaluation in a sandbox and receive a deterministic result without waiting for a real website crawl. Use one of the reserved test URLs as the business_ in your evaluation request.
| URL | risk_ result |
|---|---|
https://fraudulent-website. | low |
https://fraudulent-website. | normal |
https://fraudulent-website. | elevated |
https://fraudulent-website. | highest |
https://fraudulent-website. | unknown |
| Any other URL | normal (standard mock response) |
Note
Reserved URLs only work in a sandbox. Live mode always performs a real website evaluation.
Test with an existing account
In a sandbox, update your connected account’s business URL to a reserved test URL, then trigger the evaluation.
curl -X POST https://api.stripe.com/v2/core/accounts/\ -H "Authorization: Bearer sk_test_BQokikJOvBiI2HlWgH4olfQ2" \ -H "Stripe-Version: 2026-08-26.preview" \ --json '{ "defaults": { "profile": { "business_url": "https://fraudulent-website.test/elevated" } } }'{{CONNECTED_ACCOUNT_ID}}
curl -X POST https://api.stripe.com/v2/signals/account_evaluations \ -H "Authorization: Bearer sk_test_BQokikJOvBiI2HlWgH4olfQ2" \ -H "Stripe-Version: 2026-08-26.preview" \ --json '{ "account_details": { "account":}, "requested_signals": [ "fraudulent_website" ] }'"{{CONNECTED_ACCOUNT_ID}}"
Test with an entity-less evaluation
Pass a reserved test URL as business_ in account_:
curl -X POST https://api.stripe.com/v2/signals/account_evaluations \ -H "Authorization: Bearer sk_test_BQokikJOvBiI2HlWgH4olfQ2" \ -H "Stripe-Version: 2026-08-26.preview" \ --json '{ "account_details": { "data": { "defaults": { "profile": { "business_url": "https://fraudulent-website.test/highest" } } } }, "requested_signals": [ "fraudulent_website" ] }'
Take action on connected accounts
You can respond to the fraudulent website signals that you receive for a connected account using the Radar tools. See the list of available actions.