> For the complete documentation index, see [llms.txt](https://docs.tutelar.io/tutelar-api-document/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tutelar.io/tutelar-api-document/aml-search/odd-webhook-and-decision-making.md).

# ODD Webhook & Decision Making

Ongoing Due Diligence (ODD) is the continuous monitoring of AML decisions against the search activities to detect deviation and ensure compliance with Anti-Money Laundering (AML) regulations.

ODD has been run in the background based on decision status and finding of oddStatus wise the response will push to the webhook URL.

### Webhook Sample Response Format

{% tabs %}
{% tab title="Odd New Record Response " %}

```json
{
    "oddStatus": "new",
    "oddSearchHistoryId": "SH_QXIATXMPtq",
    "onboardDecisionId": "decision_8WX6knjWAs",
    "searchObject": {
        "mode": "advance",
        "sdnType": "entity",
        "searchParams": {
            "name": "M.G. Vermietungsgesellschaft mbH",
            "date": "1998-02-11",
            "idNumber": "529900YKOMNKL9H6AD64",
            "nationality": "Russia"
        },
        "level": "exact"
    },
    "searchDate": "2026-06-24",
    "searchResults": [
        {
            "sanctionId": "SANCL_YDxfjH2WjR",
            "sdnType": "entity",
            "createdAt": "2025-08-27T23:12:42.643Z",
            "updatedAt": "2026-07-01T00:37:51.276Z",
            "caption": "V.M.G. Vermietungsgesellschaft mbH",
            "datasets": [
                "LEI Reference Data"
            ],
            "address": [
                "Arabellastraße 12, 81925 München"
            ],
            "incorporationDate": [
                "1998-02-11"
            ],
            "scoreResults": {
                "matchScore": 90,
                "riskScore": 100
            },
            "topicTags": [
                "Sanction-linked entity"
            ],
            "idNumber": [
                "HRB 119456",
                "529900YKOMNKL9H6AD64"
            ],
            "birthDate": [],
            "gender": [],
            "phone": [],
            "country": [],
            "nationality": [],
            "topics": []
        }
    ],
    "relation": {
        "decision": {
            "meta": {
                "actionButton": [
                    "true_match",
                    "no_match",
                    "false_positive"
                ]
            }
        }
    }
}
```

{% endtab %}

{% tab title="Odd Update Record Response" %}

```json
{
    "oddStatus": "update",
    "oddSearchHistoryId": "SH_cljEgdfnFy",
    "onboardDecisionId": "decision_TXnOjDikrd",
    "searchObject": {
        "mode": "advance",
        "sdnType": "individual",
        "searchParams": {
            "name": "johnson",
            "idNumber": "BZT67900",
            "nationality": "india",
            "date": "1995-08-09"
        },
        "level": "broad"
    },
    "searchDate": "2025-12-04",
    "deviation": {
        "topics": {
            "old": [
                "Export controlled",
                "Sanctioned entity"
            ],
            "new": [
                "Sanctioned entity",
                "Export controlled",
                "Debarred entity"
            ]
        }
    },
    "searchResults": [
        {
            "sanctionId": "SANCL_fGcdbJu5Qw",
            "sdnType": "individual",
            "createdAt": "2025-08-29T20:57:50.493Z",
            "updatedAt": "2026-06-30T23:53:47.255Z",
            "caption": "Johnson Andre",
            "datasets": [
                "DFAT / Australian sanction",
                "FPS - Belgium Finance Sanction",
                "CA Consolidated Sanction List",
                "CHE SECO",
                "EU Finance Sanction",
                "US CSL (Denied Persons List)",
                "ZAF Targeted Financial Sanctions"
            ],
            "country": [
                "China"
            ],
            "address": [
                "Village de Dieu, Martissant, Port-au-Prince",
                "PORT-AU-PRINCE"
            ],
            "nationality": [
                "China",
                "Haiti"
            ],
            "birthDate": [
                "1997"
            ],
            "gender": [
                "male"
            ],
            "scoreResults": {
                "matchScore": 10,
                "riskScore": 100
            },
            "topicTags": [
                "Debarred entity",
                "Sanctioned entity",
                "Export controlled"
            ],
            "idNumber": [],
            "phone": [],
            "incorporationDate": [],
            "topics": []
        }
    ],
    "relation": {
        "decision": {
            "meta": {
                "actionButton": [
                    "true_match",
                    "no_match",
                    "false_positive"
                ]
            }
        }
    }
}
```

{% endtab %}

{% tab title="Odd Delete Record Response" %}

```json
{
    "oddStatus": "delete",
    "investigationId": "INVES_BPj28P7BFS_decision_aXJvHfMiyX",
    "oddSearchHistoryId": "SH_8kkDPT1osR",
    "onboardDecisionId": "decision_aXJvHfMiyX",
    "searchObject": {
        "mode": "advance",
        "sdnType": "individual",
        "searchParams": {
            "name": "AJ Johnson",
            "idNumber": "CFY097",
            "nationality": "china",
            "date": "1988-09-10"
        },
        "level": "broad"
    },
    "searchDate": "2026-05-08",
    "searchResults": [],
    "relation": {
        "decision": {
            "meta": {
                "actionButton": [
                    "track"
                ]
            }
        }
    }
}
```

{% endtab %}
{% endtabs %}

### ODD Decision Making API&#x20;

This API is used to make **ODD (Ongoing Due Diligence)** decisions based on ODD deviation findings. It supports decision-making for **new**, **updated**, and **deleted** ODD records.

The ODD decision process is used to continuously monitor AML decisions and ensure that any changes identified during ongoing due diligence are handled appropriately.

The API executes the decision based solely on the action requested by the client and updates the corresponding ODD records accordingly.

<mark style="color:green;">`POST`</mark>` ``https://secctrl.tutelar.io/api/v1/aml/search/decision-make/:oddSearchHistoryId`&#x20;

### Header

| Name         | Value                 |
| ------------ | --------------------- |
| Content-Type | `multipart/form-data` |

### Sample Response

{% tabs %}
{% tab title="201: OK " %}

```json
{
   "success": true,
   "code": 201,
   "message": "Decisions created successfully",
   "data": {
       "decisionId": "decision_atanqCUkqz",
       "decisionAt": "2025-12-04T10:39:16.382Z",
       "decisionStatus": "true_match"
   }
}
```

{% endtab %}

{% tab title="422: Unprocessable Entity" %}

```json
{
   "success": false,
   "code": 1001,
   "message": "Invalid Search History Id",
   "data": {}
}
{
   "success": false,
   "code": 1001,
   "message": "Decision Status field is missing",
   "data": {}
}
{
   "success": false,
   "code": 1001,
   "message": "Invalid data received from Decision Status",
   "data": {}
}
{
   "success": false,
   "code": 1001,
   "message": "Invalid Sanction",
   "data": {}
}
{
   "success": false,
   "code": 1001,
   "message": "Already Decision placed for this search id",
   "data": {}
}
{
    "success": false,
    "code": 1001,
    "message": "Please Enter any one sanctionId | adverseResultId",
    "data": {}
}
{
    "success": false,
    "code": 1001,
    "message": "Already Decision placed for this search id",
    "data": {}
}               
```

{% endtab %}
{% endtabs %}

### Path param values &#x20;

<table><thead><tr><th>Path parameter</th><th width="144">Type</th><th>Is Mandatory</th><th>Description</th></tr></thead><tbody><tr><td>oddSearchHistoryId</td><td>String</td><td>yes</td><td>ODD Search history Id will be generated for every Individual search made in the client panel.</td></tr></tbody></table>

### Post values are:

<table><thead><tr><th width="206">Post Parameter</th><th width="135">Type</th><th width="139">Is  Mandatory</th><th>Description</th></tr></thead><tbody><tr><td>decisionStatus</td><td>String</td><td>Yes</td><td>Status of a Decision ( <strong>"true_match," "false_positive,"</strong> or <strong>"no_match" and "track"</strong> )</td></tr><tr><td>sanctionId </td><td>String</td><td>Yes</td><td>sanctionId is a unique identifier. It is required to make a decision only when searchResults data is available. If the decision is Track, the sanctionId is not required for the AML standalone search product.</td></tr><tr><td>remarks</td><td>String</td><td>No</td><td>Add remarks for decision purpose.</td></tr><tr><td>file</td><td>Binary</td><td>No</td><td>Upload reference documents for decision.</td></tr></tbody></table>

### Sample post data format&#x20;

If make decision for aml alone search result

{% tabs %}
{% tab title="Decision with Search Sanction Data" %}

```json
{
   "decisionStatus": "true_match",
   "sanctionId": "SANCL_yZwvS457ed",
   "remarks": "Testing ",
   "file": "sample.pdf"
}
```

{% endtab %}

{% tab title="Decision with No Search Data" %}

```json
{
   "decisionStatus": "track",
   "remarks": "Testing ",
   "file": "sample.pdf"
}
```

{% endtab %}
{% endtabs %}

### **Success response :**

```json
{
   "success": true,
   "code": 201,
   "message": "Decisions created successfully",
   "data": {
       "decisionId": "decision_atanqCUkqz",
       "decisionAt": "2025-12-04T10:39:16.382Z",
       "decisionStatus": "true_match"
   }
}
```

### Failure response :

```json
{
   "success": false,
   "code": 1001,
   "message": "Invalid Search History Id",
   "data": {}
}
{
   "success": false,
   "code": 1001,
   "message": "Decision Status field is missing",
   "data": {}
}
{
   "success": false,
   "code": 1001,
   "message": "Invalid data received from Decision Status",
   "data": {}
}
{
   "success": false,
   "code": 1001,
   "message": "Invalid Sanction",
   "data": {}
}
{
   "success": false,
   "code": 1001,
   "message": "Please provide valid searchData Mode",
   "data": {}
}
{
   "success": false,
   "code": 1001,
   "message": "Enter valid Search Data",
   "data": {}
}
{
   "success": false,
   "code": 1001,
   "message": "Invalid date formate on Search Date ",
   "data": {}
}
{
   "success": false,
   "code": 1001,
   "message": "Please enter Search History Id",
   "data": {}
}
{
   "success": false,
   "code": 1001,
   "message": "Already Decision placed for this search id",
   "data": {}
}
```
