| [ Web Proxy ] |
| Viewing: https://docs.stripe.com/radar/customer-abuse | [Back] [Original] |
The Customer Evaluation API provides risk intelligence for your registration and login flows to detect multi-accounting patterns and suspicious account sharing:
The multi_accounting signal identifies whether a single fraudulent actor is registering multiple accounts to abuse your service.
The account_sharing signal identifies whether a single user account is being used simultaneously in multiple locations.
Request to join the preview for multi-account and account sharing abuse signals.
Enter your email to request access.
To request a customer evaluation to detect abuse:
Customer object). You can also pass user-identifying information directly instead of a customer ID. For more details, see Entityless evaluations.CustomerEvaluation when customers register or log in.The following diagram shows the high-level interactions between you (the business), Stripe, and your end customer at registration time.
Before requesting a customer evaluation, you must capture device metadata from the client using Stripe.js. Pass the Radar Sessions token from the response to your server to use it in the Customer Evaluation request.
Radar Sessions expire shortly after creationcreate the session as close to submitting the evaluation as possible to avoid a timeout.
If stripe.createRadarSession() fails or times out (for example, due to an ad blocker or network error), you can still request an evaluation by passing the users IP address using client_details.data instead of client_details.radar_session. You can also include user_agent and referrer to improve signal quality. For referrer, use document.referrer from the client if available.
curl https://api.stripe.com/v1/radar/customer_evaluations \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -H "Stripe-Version: 2026-03-25.preview" \ -d event_type=registration \ -d "evaluation_context[0][type]=customer_details" \ --data-urlencode "evaluation_context[0][customer_details][customer]=cus_****" \ -d "evaluation_context[1][type]=client_details" \ -d "evaluation_context[1][client_details][data][ip]=203.0.113.42" \ --data-urlencode "evaluation_context[1][client_details][data][user_agent]=Mozilla/5.0 ..." \ --data-urlencode "evaluation_context[1][client_details][data][referrer]=https://example.com/signup"
An IP-only evaluation produces less accurate scores than a full Radar Session because it lacks device-level signals. When possible, resolve the root cause of session creation failures rather than relying on this fallback long-term. See Radar Session troubleshooting for more information.
After you create a Radar Session to capture device metadata, request a CustomerEvaluation to get risk signals from Stripe.
Use the registration event type to evaluate new user registrations. You can reference an existing Customer. To ensure accurate fraud detection, preserve the customer ID to use in future payment requests.
curl https://api.stripe.com/v1/radar/customer_evaluations \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -H "Stripe-Version: 2026-03-25.preview" \ -d event_type=registration \ -d "evaluation_context[0][type]=customer_details" \ --data-urlencode "evaluation_context[0][customer_details][customer]=cus_****" \ -d "evaluation_context[1][type]=client_details" \ --data-urlencode "evaluation_context[1][client_details][radar_session]=rse_****"
Use the login event type to evaluate user login attempts and detect account sharing patterns. Use the same customer ID that you created during registration.
curl https://api.stripe.com/v1/radar/customer_evaluations \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -H "Stripe-Version: 2026-03-25.preview" \ -d event_type=login \ -d "evaluation_context[0][type]=customer_details" \ --data-urlencode "evaluation_context[0][customer_details][customer]=cus_****" \ -d "evaluation_context[1][type]=client_details" \ --data-urlencode "evaluation_context[1][client_details][radar_session]=rse_****"
Stripe returns risk signals in the response based on the evaluation type. Use these signals to make informed decisions about allowing or blocking the action.
| Evaluation type | Signal returned | Description |
|---|---|---|
registration | multi_accounting | Risk that the same end customer is registering multiple times |
login | account_sharing | Risk that the same account is being used from multiple locations simultaneously |
Each signal returns a score from 0 to 100 and a corresponding risk_level that categorizes the score into a qualitative band. Use the risk_level to make quick decisions, or use the raw score for fine-grained control.
| Risk level | Score range | Description |
|---|---|---|
highest | 75-100 | Indicates a high risk of abuse. Consider blocking or requiring additional verification. |
elevated | 6574 | Indicates an elevated risk of abuse. Consider applying additional friction or review. |
normal | 064 | Indicates typical risk. No additional action recommended. |
If you cant create a Customer object for your architecture at registration time, pass user-identifying information in customer_details.customer_data instead of customer_details.customer.
Use the Customer object whenever possible. It helps Stripe make more accurate risk assessments over time.
In customer_details, provide a customer_data object instead of a customer ID. Include as many of the following fields as possible. Providing more identifiers improves the accuracy of the evaluation.
| Field | Type | Description |
|---|---|---|
customer_data.email | String (optional) | The customers email address. |
customer_data.name | String (optional) | The customers name. |
customer_data.phone | String (optional) | The customers phone number. |
curl https://api.stripe.com/v1/radar/customer_evaluations \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -H "Stripe-Version: 2026-03-25.preview" \ -d event_type=registration \ -d "evaluation_context[0][type]=customer_details" \ --data-urlencode "evaluation_context[0][customer_details][customer_data][email]=jenny.rosen@example.com" \ -d "evaluation_context[0][customer_details][customer_data][name]=Jenny Rosen" \ --data-urlencode "evaluation_context[0][customer_details][customer_data][phone]=+15558675309" \ -d "evaluation_context[1][type]=client_details" \ --data-urlencode "evaluation_context[1][client_details][radar_session]=rse_****"
After you act on a customer evaluation, report the outcome back to Stripe so we can improve future evaluations for your account.
Call the report endpoint with the status parameter to indicate the action you took:
curl https://api.stripe.com/v1/radar/customer_evaluations/cuseval_abc123/report \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -H "Stripe-Version: 2026-05-27.preview" \ -d status=blocked
| Status | When to use | Example |
|---|---|---|
allowed | You allowed the registration or login to proceed without restrictions. | A user registers and receives full access to your platform. |
restricted | You allowed the registration or login to proceed, but applied restrictions based on the risk signal. | A new account gains access but receives fewer promotional credits, is placed on a probationary tier, or has limited access to certain features until additional verification. |
blocked | You blocked the registration or login entirely. The user wasnt granted access. | A registration attempt is rejected outright, and the user cant create an account. |
Reporting outcomes trains Stripes models to better distinguish abusive from legitimate behavior on your platform.
Use the following test email addresses in your evaluation requests to simulate specific risk scores in test mode:
| Email address | Risk level | Score |
|---|---|---|
high_scoring_email@example.com | highest | 80 |
elevated_scoring_email@example.com | elevated | 65 |
normal_scoring_email@example.com | normal | 20 |
When creating payments, you must use the same customer ID that you used for the customer evaluation. This helps with providing accurate risk assessments by connecting registration, login, and payment activity for the same customer.
curl https://api.stripe.com/v1/payment_intents \ -u "sk_test_wU7nrJCZspk1NPDxiQgAF05q:" \ -H "Stripe-Version: 2026-03-25.preview" \ -d amount=1000 \ -d currency=usd \ --data-urlencode "customer=cus_****" \ --data-urlencode "payment_method=pm_****" \ -d confirm=true
The customer parameter at the time of payment must match the customer ID used when creating the CustomerEvaluation.
| Web Proxy Viewer | New URL | Original Page |