| [ Web Proxy ] |
| Viewing: https://docs.stripe.com/radar/fraudulent-website | [Back] [Original] |
The fraudulent website signal evaluates whether a connected accounts website is deceptive or violates policy. This includes websites for accounts that dont exist yet on Stripe.
Get early access to the fraudulent website signal.
Enter your email to request access.
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.
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_wU7nrJCZspk1NPDxiQgAF05q" \ -H "Stripe-Version: 2026-07-29.preview" \ --json '{ "account_details": { "account":}, "requested_signals": [ "fraudulent_website" ] }'"{{CONNECTED_ACCOUNT_ID}}"
You can evaluate a website before creating a connected account by providing account_details.data with the business URL. The business_url 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_wU7nrJCZspk1NPDxiQgAF05q" \ -H "Stripe-Version: 2026-07-29.preview" \ --json '{ "account_details": { "data": { "defaults": { "profile": { "business_url": "https://example.com" } } } }, "requested_signals": [ "fraudulent_website" ] }'
The evaluation is asynchronous. Listen for:
v2.signals.account_signal.fraudulent_website_ready when you request a fraudulent website evaluation.v2.signals.account_evaluation.complete when you request multiple signals and want one notification after all results are ready.These are thin events: data is always {}. Use related_object.id 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.signals.account_evaluation.complete event, use related_object.id to fetch the full evaluation, which includes the signal result in evaluated_signals:
{ "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_level | 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_level is unknown, the explanation includes why we couldnt complete the evaluation. |
If the website URL is invalid or unreachable, the evaluation returns a risk level of unknown with an explanation of why we couldnt complete the evaluation.
You can trigger a fraudulent_website 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_url in your evaluation request.
| URL | risk_level result |
|---|---|
https://fraudulent-website.test/low | low |
https://fraudulent-website.test/normal | normal |
https://fraudulent-website.test/elevated | elevated |
https://fraudulent-website.test/highest | highest |
https://fraudulent-website.test/unknown | unknown |
| Any other URL | normal (standard mock response) |
Reserved URLs only work in a sandbox. Live mode always performs a real website evaluation.
In a sandbox, update your connected accounts 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_wU7nrJCZspk1NPDxiQgAF05q" \ -H "Stripe-Version: 2026-07-29.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_wU7nrJCZspk1NPDxiQgAF05q" \ -H "Stripe-Version: 2026-07-29.preview" \ --json '{ "account_details": { "account":}, "requested_signals": [ "fraudulent_website" ] }'"{{CONNECTED_ACCOUNT_ID}}"
Pass a reserved test URL as business_url in account_details.data:
curl -X POST https://api.stripe.com/v2/signals/account_evaluations \ -H "Authorization: Bearer sk_test_wU7nrJCZspk1NPDxiQgAF05q" \ -H "Stripe-Version: 2026-07-29.preview" \ --json '{ "account_details": { "data": { "defaults": { "profile": { "business_url": "https://fraudulent-website.test/highest" } } } }, "requested_signals": [ "fraudulent_website" ] }'
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.
| Web Proxy Viewer | New URL | Original Page |