# Optimize payment request data
For optimal performance, the [Fraud Detection](https://www.checkout.com/docs/business-operations/prevent-fraud.md) solution relies on quality payment request data for risk rules and Checkout.com's machine learning models.
The more data you provide, the greater the confidence in the data quality and the effectiveness and efficiency at preventing fraud.
We recommend the following:
- Always provide as much data for your payment requests as possible.
- Integrate the [Risk.js package](https://www.checkout.com/docs/developer-resources/sdks/risk-sdks/risk-js-sdk.md), and the [Risk Android SDK](https://www.checkout.com/docs/developer-resources/sdks/risk-sdks/risk-android-sdk.md) or [Risk iOS SDK](https://www.checkout.com/docs/developer-resources/sdks/risk-sdks/risk-ios-sdk.md) for every customer-initiated payment flow.
---
## Data confidence by integration
The data confidence for each type of integration is as follows:
| Integration | Data confidence |
| --- | --- |
| Flow – [Browser](https://www.checkout.com/docs/payments/accept-payments/accept-a-payment-on-your-website.md) and [app](https://www.checkout.com/docs/payments/accept-payments/accept-a-payment-on-your-mobile-app.md) | High |
| [Hosted Payment Pages](https://www.checkout.com/docs/payments/accept-payments/accept-a-payment-on-a-hosted-page.md) | High |
| [Payment Links](https://www.checkout.com/docs/payments/accept-payments/create-a-payment-link.md) | High |
| API with:
- Full card details in the `source` object
- All possible information in the `customer` object
- Risk.js package | High |
| API with:
- Full card details in the `source` object
- All possible information in the `customer` object
- Risk Android SDK or iOS SDK | High |
| API with:
- Full card details in the `source` object
- All possible information in the `customer` object | Medium |
| API with full card details in the `source` object | Low |
---
## Recommended data
We recommend providing the following data points for optimal performance:
| Data point | Contribution to performance | How to provide data |
| --- | --- | --- |
| Billing address country | Required | Gateway |
| Billing address street | Optional | Gateway |
| Billing address ZIP code or post code | Optional but highly recommended | Gateway |
| Customer email | Required | Gateway |
| Customer IP address | Required | Gateway and Risk.js package |
| Customer name | Optional but highly recommended | Gateway |
| Customer phone | Optional but highly recommended | Gateway |
| Device and browser data | Required | Risk.js package |
| Shipping address country, ZIP code or post code | Optional but highly recommended | Gateway |
| Shipping address street | Optional | Gateway |
---
## Device data
If you collect device data through a third-party provider, you can share this data with Checkout.com using the API.
Device data strengthens the risk assessment and enriches your analytics in the Dashboard.
When you call the [Request a payment](https://api-reference.checkout.com/tag/Payments/#operation/requestAPaymentOrPayout!path=0/risk/device&t=request) endpoint, provide the device data in the [`risk.device` object](https://api-reference.checkout.com/tag/Payments/#operation/requestAPaymentOrPayout!path=0/risk/device&t=request).
You can use the following device-signal properties in your [custom rules](https://www.checkout.com/docs/business-operations/prevent-fraud/upgrade-to-pro.md#Custom_rules).
Provide the required data using the API as follows:
| Property | Description | Required data |
| --- | --- | --- |
| `:device_fingerprint:` | The unique device fingerprint.
For web flows, this value is unique to each browser.
Example – `rekyngyfnrte3ckzvgjlhw4jfm` | Provide the device fingerprint in the `risk.device.network.id` field. |
| `:device_ip:` | The device's IP address.
Example – `10.256.35.48`
If `:payment_ip:` is omitted in the payment request, the rule property falls back to `:device_ip:`. | Provide the device IP address in one of the following fields:
- `risk.device.network.ipv4`
- `risk.device.network.ipv6` |
| `:device_ip_city:` | The city associated with the geolocation IP address.
Example – `London` | Provide the device IP address in one of the following fields:
- `risk.device.network.ipv4`
- `risk.device.network.ipv6` |
| `:device_ip_country:` | The ISO-2 [country code](https://www.checkout.com/docs/developer-resources/testing/codes/country-codes.md) associated with the device's IP address.
Example – `GB` | Provide the device IP address in one of the following fields:
- `risk.device.network.ipv4`
- `risk.device.network.ipv6` |
| `:device_browser:` | For web flows, the browser used on the device.
Examples:
- `Chrome`
- `Chrome Mobile iOS`
- `Firefox`
- `Opera`
- `Safari` | Provide the device user agent in the `risk.device.user_agent` field. |
| `:device_browser_is_incognito:` | For web flows, indicates whether the device browser is in incognito mode.
Example – `true` or `false` | Provide the device user agent in the `risk.device.user_agent` field. |
| `:device_model:` | The device model.
Examples:
- `Generic Smartphone`
- `iPad`
- `iPhone`
- `Laptop`
- `Other`
- `Pixel 5`
- `Samsung` | Provide the device user agent in the `risk.device.user_agent` field. |
| `:device_os:` | The device’s operating system (OS).
Examples:
- `Android`
- `Chrome OS`
- `iOS`
- `Linux`
- `Mac OS X`
- `Windows` | Provide the device user agent in the `risk.device.user_agent` field. |
| `:device_os_version:` | The version of the device’s operating system.
Example – `13.3` | Provide the device user agent in the `risk.device.user_agent` field. |
| `:device_timezone:` | The timezone of device's IP address.
Examples:
- `America/Chicago`
- `Asia/Singapore`
- `Europe/London` | Provide the device user agent in the `risk.device.user_agent` field. |
---
## Leverage metadata
In your payment request, you can provide custom `string`, `number`, or `boolean` fields in the `metadata` object. For example:
```json
{
"metadata": {
"my_key": 42
}
}
```
You can [reference metadata](https://www.checkout.com/docs/business-operations/prevent-fraud/create-risk-rules-and-lists.md#Reference_metadata) to create advanced rules for your risk strategies.
For example, if you want to use your own fraud score or account age rule.
> **Information**
>
> Metadata keys and values are case insensitive.