# TyrAds Fraud Suite V2 (SDK)

Fraud Suite v2 Documentation:

{% file src="/files/Dp9eWj3Hh8aD6CGGlwdc" %}

#### 1. The Two-Layer Defense

* Layer 1: User Risk Scoring (Proactive): An automated system that scores every user at the moment they enter the SDK. Using 200+ data sources (including device fingerprints, location, and multi-accounting patterns), it blocks "High Risk" users before they can engage with any offers.
* Layer 2: Anomaly Detection (Reactive): A machine-learning system that monitors in-game activity. If a user bypasses Layer 1 but exhibits abnormal behavior patterns, their progress is rejected in real-time.

#### 2. For Anomaly Detection Layer

Our system analyzes post-install event patterns. If a user’s behavior is flagged as non-human or anomalous, the system triggers an automatic rejection.

Standardized Lookback Rules:

* **14-Day Window**: All conversions are subject to a 14-day lookback window, aligning with industry MMP standards.
* **CPI Model**: If an anomaly is detected within 14 days, both the install and all associated events are retroactively rejected.
* **CPE Model:** The specific anomalous event is rejected, and the user is flagged to prevent all future payouts on that campaign.
* **Post-14 Days**: The initial install remains approved, but specific anomalous events are rejected and non-payable.

#### 2. Technical Integration (Postback Macros)

If you needed to be notified on the rejections to your platform, please do consult Tyrads team to setup a rejected type Postback URL  \[**especially for CPI campaigns where we retroactively reject the install together with the event and make the install non-payable as well]**

The following are the important macros for rejected type postback:

| Macros                | Description                             | Example or Expected Value |
| --------------------- | --------------------------------------- | ------------------------- |
| `{conversion_status}` | The state of conversion                 | `rejected`                |
| `{reject_reason}`     | The rejection reason for the conversion | `Anomoly%20Detection`     |
| `{conversion_id}`     | Unique ID of a specific conversion      | `2563391781`              |

Example of suggested rejected postback URL:

{% tabs %}
{% tab title="Rejected Postback Format Example" %}
[https://your-api-endpoint.com/postback?id={conversion\_id}\&conversion\_status={conversion\_status}\&reject\_reason={reject\_reason}](https://your-api-endpoint.com/postback?id={conversion_id}\&status={conversion_status}\&reason={reject_reason}) + all existing macros setup in Ad Unit that is required
{% endtab %}
{% endtabs %}

***

Rejected postback Integration Checklist

* [ ] Ingest rejected type postback in your system if needed
* [ ] Map rejections using `conversion_id`&#x20;

{% hint style="warning" %}
Please do not reward the user upon receiving the rejected type postback if implementation of rejected postback is required.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sdk-doc.tyrads.com/getting-started/tyrads-fraud-suite-v2-sdk.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
