> For the complete documentation index, see [llms.txt](https://legacy-docs.usesmileid.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://legacy-docs.usesmileid.com/products/for-individuals-kyc/one-time-aml.md).

# One Time AML

The One Time AML Check product allows you to perform due diligence on your customers by screening them against global watchlists, politically exposed persons lists, and adverse media publications. The product returns whether the screened customers are found on any of these lists and the corresponding details, which can be used to assess the customers’ associated risks. This is a one time check and any updates will not be provided when risks change.

## Integration Options

Currently only available via the [Rest API](/integration-options/rest-api.md).

## Endpoint

Request type: POST

<table><thead><tr><th width="211.92523193359375">Environment</th><th>Endpoint</th></tr></thead><tbody><tr><td>Sandbox</td><td>https://testapi.smileidentity.com/v1/one-time-aml-screening</td></tr><tr><td>Production</td><td>https://api.smileidentity.com/v1/one-time-aml-screening</td></tr></tbody></table>

## Request Values

The One Time AML Check product requires the following input parameters which should be contained in a JSON body object submitted to the endpoint

<table data-header-hidden><thead><tr><th width="268.3974609375"></th><th width="115"></th><th width="108"></th><th></th></tr></thead><tbody><tr><td><strong>Name</strong></td><td><strong>Type</strong></td><td><strong>Required</strong></td><td><strong>Description</strong></td></tr><tr><td>partner_id</td><td>string</td><td>Yes</td><td>A unique number assigned by Smile ID to your account. Can be found in the portal<a href="https://portal.usesmileid.com/api-key"> here</a></td></tr><tr><td>source_sdk</td><td>string</td><td>No</td><td>The integration option you are using. For rest api send the value as <code>rest_api</code></td></tr><tr><td>source_sdk_version</td><td>string</td><td>No</td><td>The version of the integration option you are using. Send value as <code>1.0.0</code></td></tr><tr><td>signature</td><td>string</td><td>Yes</td><td>The outgoing signature to authenticate the request from you to Smile ID. You can read more about calculating the signature <a href="https://docs.usesmileid.com/integration-options/rest-api/signing-your-api-request/generate-signature">here</a></td></tr><tr><td>timestamp</td><td>string</td><td>Yes</td><td>The timestamp used to calculate the signature in ISO date/time format</td></tr><tr><td>user_id</td><td>string</td><td>Yes</td><td><p>A value generated by you, so you can track users on your end. This value must be unique, can be any string and can follow your identifier convention<br></p><p>Note: If you intend to enhance your due diligence and perform KYC on the customer e.g. <a href="/pages/-Ma8nT2Mq9GpFM0FnxJO">Biometric KYC</a> or <a href="/pages/-MaHwPly0NB0pLuy2Ghj">Document Verification</a>, you can re-use the <code>user_id</code> by setting the <code>search_existing_user</code> key to true. A unique job_id is still required.</p></td></tr><tr><td>job_id</td><td>string</td><td>Yes</td><td>A value generated by you, so you can track jobs on your end. This value must be unique, can be any string and can follow your identifier convention.</td></tr><tr><td>countries</td><td>array</td><td>Yes</td><td>An array that takes the customer’s known nationalities <a data-footnote-ref href="#user-content-fn-1">in 2-character format</a> e.g. Nigeria is <code>NG</code>, Kenya is <code>KE</code>, etc.</td></tr><tr><td>full_name</td><td>string</td><td>Yes</td><td>The full name of the customer</td></tr><tr><td>birth_year*</td><td>string</td><td>No</td><td>The customer’s year of birth, in the format <code>yyyy</code>.</td></tr><tr><td>strict_match</td><td>boolean</td><td>No</td><td>The key provides flexibility in matching logic, allowing partners to specify whether they prefer strict or more lenient matching criteria per job search. Default value of the key is <code>true</code>.</td></tr><tr><td>search_existing_user</td><td>boolean</td><td>No</td><td><p>If you intend to re-use the name and year of birth of a user’s previous KYC job, you can pass the boolean with the value set to true.<br></p><p>Note: You can only re-use name and year of birth from a user’s previously successful <a href="/pages/-Ma8nT2Mq9GpFM0FnxJO">Biometric KYC</a> or <a href="/pages/-MaHwPly0NB0pLuy2Ghj">Document Verification</a>, you are still required to pass the nationality in the countries field</p></td></tr><tr><td>aliases</td><td>array of strings</td><td>No</td><td>An optional list of secondary or alternative names (e.g. maiden names, transliterations, nicknames) to include in the screening search. This broadens match coverage beyond the primary <code>full_name</code>.</td></tr></tbody></table>

{% hint style="info" %}
\*we highly recommend sending the `birth_year` to reduce the number of false matches
{% endhint %}

### Example JSON Body

```json
{
  "birth_year": "1984",
  "countries": ["US"],
  "full_name": "John Leo Doe",
  "aliases": ["John Doe", "J.L. Doe"],
  "job_id": "3ba0e15e-1a56-4799-a94d-b0e084f50256",
  "partner_id": "023",
  "search_existing_user": false,
  "strict_match": true,
  "signature": "...",
  "timestamp": "2021-08-12T17:57:00.614879",
  "user_id": "4cb0f26-2b567-5800-b05e-c0f095g6036"
}
```

## Return Values

The One Time AML Check product returns details of the customer screening and additional basic information about the user such as aliases, addresses, date of births, etc. whenever available.\\

<table data-header-hidden><thead><tr><th width="231"></th><th width="140"></th><th width="198"></th><th></th></tr></thead><tbody><tr><td><strong>Name</strong></td><td><strong>Type</strong></td><td><strong>Description</strong></td><td><strong>Return Values</strong></td></tr><tr><td>SmileJobID</td><td>string</td><td>The Smile internal reference number for the job. Please include this when contacting support on a job related issue</td><td><br></td></tr><tr><td>signature</td><td>string</td><td>The incoming signature, you can use this to verify that the response is from Smile ID</td><td><br></td></tr><tr><td>timestamp</td><td>string</td><td>The incoming timestamp in ISO date/time format, use this to calculate the incoming signature</td><td><br></td></tr><tr><td>ResultCode</td><td>string</td><td>Numeric value of the outcome of the One Time AML Check job</td><td>For the list of potential result codes, check <a href="#result-codes-and-result-texts">Result Code and Result Texts</a> below</td></tr><tr><td>ResultText</td><td>string</td><td>Textual value of the job outcome. Human readable value for the result</td><td>For the list of potential result texts, check <a href="#result-codes-and-result-texts">Result Code and Result Texts</a> below</td></tr><tr><td>Actions</td><td>object</td><td>A JSON object containing the actions performed in the job. Currently only states whether the screened customer matched at least one record in our global watchlists, politically exposed persons list or an adverse article has been published about the person</td><td><br></td></tr><tr><td>Actions.Listed</td><td>string</td><td>Does the screened customer match any list or have had any adverse media published about them</td><td><p><code>Listed</code><br></p><p>or</p><p><code>Not Listed</code></p></td></tr><tr><td>PartnerParams</td><td>object</td><td>A JSON object containing the job references and any additional key-value pair you sent with the request</td><td><br></td></tr><tr><td>StrictMatch</td><td>boolean</td><td>Providing partners with clear visibility into the matching logic applied to their request.</td><td><code>True</code><br><br>or<br><br><code>False</code></td></tr><tr><td>PartnerParams.user_id</td><td>string</td><td>The unique user reference that was included in the request</td><td><br></td></tr><tr><td>PartnerParams.job_id</td><td>string</td><td>The unique job reference that was included in the request</td><td><br></td></tr><tr><td>PartnerParams.job_type</td><td>string</td><td>The numerical representation of the product you performed</td><td><code>10</code></td></tr><tr><td><p>no_of_persons_found</p><p><br></p></td><td>integer</td><td>The numbers of persons that matched with the customer based on the search parameters</td><td><br></td></tr><tr><td>people</td><td>array of objects</td><td>A JSON array containing JSON objects of each person that matches the customer based on the search parameters</td><td><br></td></tr><tr><td>people[].name</td><td>string</td><td>The name of the person that matches the customer based on the search parameters</td><td><br></td></tr><tr><td>people[].addresses</td><td>array of strings</td><td>A JSON array containing all the known addresses of the person that matches the customer based on the search parameters</td><td><br></td></tr><tr><td>people[].aliases</td><td>array of strings</td><td>A JSON array containing all the known aliases of the person that matches the customer based on the search parameters</td><td><br></td></tr><tr><td>people[].dates_of_birth</td><td>array of strings</td><td>A JSON array containing all the known dates of birth of the person that matches the customer based on the search parameters</td><td><br></td></tr><tr><td>people[].nationalities</td><td>array of strings</td><td>A JSON array containing all the known nationalities of the person that matches the customer based on the search parameters</td><td><br></td></tr><tr><td>people[].sanctions</td><td>array of objects</td><td>A JSON array containing JSON objects of each sanctions listing of the person that matches the customer based on the search parameters</td><td><br></td></tr><tr><td>people[].sanctions[].date_of_birth</td><td>string</td><td>The date of birth in the sanctions listing</td><td><br></td></tr><tr><td>people[].sanctions[].nationality</td><td>string</td><td>The nationality in the sanctions listing</td><td><br></td></tr><tr><td>people[].sanctions[].source_details</td><td>object</td><td>The source details of the sanctions listing</td><td><br></td></tr><tr><td>people[].sanctions[].source_details.listed_date</td><td>string</td><td>The date the sanction was listed</td><td><br></td></tr><tr><td>people[].sanctions[].source_details.source_link</td><td>array of strings</td><td>Links to the source of the sanctions listing</td><td><br></td></tr><tr><td>people[].sanctions[].source_details.source_name</td><td>string</td><td>Name of the source of the sanctions listing</td><td><br></td></tr><tr><td>people[].sanctions[].source_details.source_type</td><td>string</td><td>The type of source</td><td><code>Sanctions</code></td></tr><tr><td>people[].enforcement_action</td><td>array of objects</td><td>A JSON array containing JSON objects of each enforcement action of the person that matches the customer based on the search parameters</td><td><br></td></tr><tr><td>people[].enforcement_action[].description</td><td>string</td><td>Details of the enforcement action</td><td><br></td></tr><tr><td>people[].enforcement_action[].date</td><td>string</td><td>The date the enforcement action was enacted</td><td><br></td></tr><tr><td>people[].enforcement_action[].source_details</td><td>object</td><td>The source details of the enforcement action</td><td><br></td></tr><tr><td>people[].enforcement_action[].source_details.source_name</td><td>string</td><td>Name of the source of the enforcement action</td><td><br></td></tr><tr><td>people[].enforcement_action[].source_details.source_link</td><td>string</td><td>Link to the source of the enforcement action</td><td><br></td></tr><tr><td>people[].pep</td><td>object</td><td>A JSON objects containing details of the political positions of the person that matches the customer based on the search parameters</td><td><br></td></tr><tr><td>people[].pep.pep_level</td><td>string</td><td>The level of political influence the person that matches the customer based on the search parameters holds or held in a country</td><td><p><code>1</code> - high<br></p><p>or<br></p><p><code>2</code> - medium<br></p><p>or</p><p><code>3</code> - low<br><br>or<br><br><code>Former PEP</code></p></td></tr><tr><td>people[].pep.political_positions</td><td>array of objects</td><td>A JSON array containing JSON objects of all the political positions the person that matches the customer based on the search parameters holds or held in a country</td><td><br></td></tr><tr><td>people[].pep.political_positions[].country</td><td>string</td><td>The country where the political position is/was held. Note, this might be different from the person’s nationality</td><td><br></td></tr><tr><td>people[].pep.political_positions[].position</td><td>string</td><td>The actual political position held</td><td><br></td></tr><tr><td>people[].pep.political_positions[].from</td><td>string</td><td>The date the person commenced holding the political position</td><td><br></td></tr><tr><td>people[].pep.political_positions[].to</td><td>string</td><td>The date the person stopped holding the political position (if applicable)</td><td><br></td></tr><tr><td>people[].pep.sources</td><td>array of objects</td><td>A JSON array containing JSON objects of all the sources of the political positions</td><td><br></td></tr><tr><td>people[].pep.sources[].source_link</td><td>string</td><td>Link to the source of the political position</td><td><br></td></tr><tr><td>people[].pep.sources[].source_name</td><td>string</td><td>Link to the source name of the political position</td><td><br></td></tr><tr><td>people[].associations</td><td>array of objects</td><td>A JSON array containing JSON objects of all sanctioned or politically exposed affiliates of the person that matches the customer based on the search parameters</td><td><br></td></tr><tr><td>people[].associations[].association_type</td><td>string</td><td>The association type to the affiliate</td><td><p><code>PEP</code></p><p>or<br></p><p><code>SANCTIONS</code></p></td></tr><tr><td>people[].associations[].name</td><td>string</td><td>Name of the affiliate</td><td><br></td></tr><tr><td>people[].associations[].relationship</td><td>string</td><td>The relationship between the affiliate and the person that matches the customer based on the search parameters</td><td><br></td></tr><tr><td>people[].news_summary[].newsCategory</td><td>string</td><td>The name of the news category eg Financial Crime</td><td><br></td></tr><tr><td>people[].news_summary[].numberOfArticles</td><td>integer</td><td>The total number of articles published under this category for the person</td><td><br></td></tr><tr><td>people[].news[]</td><td>array of objects</td><td>A JSON array containing JSON objects of all news publications written about the person that matches the customer based on the search parameters</td><td><br></td></tr><tr><td>people[].news[].body</td><td>string</td><td>A summary of the news article</td><td><br></td></tr><tr><td>people[].news[].title</td><td>string</td><td>The title of the news article</td><td><br></td></tr><tr><td>people[].news[].url</td><td>string</td><td>A link to the news article. Note: some links might expire</td><td><br></td></tr><tr><td>people[].news[].news_category</td><td>string</td><td>The category of the news article eg. financial_crime</td><td><br></td></tr><tr><td>people[].news[].published_date</td><td>string</td><td>The date the article was published</td><td><br></td></tr><tr><td>people[].news[].publisher</td><td>string</td><td>The media outlet that published the article</td><td><br></td></tr></tbody></table>

### Example JSON Response

```json
{
  "Actions": {
    "Listed": "Listed"
  },
  "PartnerParams": {
    "job_type": 10,
    "user_id": "4cb0f26-2b567-5800-b05e-c0f095g6036",
    "job_id": "3ba0e15e-1a56-4799-a94d-b0e084f50256"
  },
  "SmileJobID": "0000000411",
  "no_of_persons_found": 1,
  "people": [
    {
      "addresses": ["Burbank"],
      "aliases": ["John Doe"],
      "associations": [
        {
          "association_type": "PEP",
          "name": "Bob Smith",
          "relationship": "Bob Smith is an associate of John Leo Doe"
        }
      ],
      "dates_of_birth": ["1984-07-16"],
      "name": "John Leo Doe",
      "nationalities": ["American"],
      "pep": {
        "pep_level": "1",
        "political_positions": [
          {
            "country": "United States",
            "from": "2020-01-05",
            "position": "Representative",
            "to": "2022-01-05"
          },
          {
            "country": "United States",
            "from": "2022-01-05",
            "position": "Senator",
            "to": null
          }
        ],
        "sources": [
          {
            "source_link": "https://www.senate.gov/senators/",
            "source_name": "senate.gov"
          }
        ]
      },
      "ref": "adaaa3d7-0007-4db8-b454-0b0000f00b0f",
      "sanctions": [
        {
          "date_of_birth": "",
          "nationality": "American",
          "source_details": {
            "listed_date": "2020-01-05",
            "source_link": ["https://sanctionslist.com"],
            "source_name": "Office of Foreign Assets Control (OFAC)",
            "source_type": "Sanctions"
          }
        }
      ],
      "news_summary": [
         {
            "newsCategory": "informational",
            "numberOfArticles": 1
         }
      ],
      "news": [
        {
          "published_date": "2021-09-24",
          "publisher": "Regulatory Times",
          "url": "https://regulatorytimes.com/article",
          "title": "Jon Doe angered regulators",
          "body": "Jon Doe angered regulators yesterday by going against regulators",
          "category": "informational"
        }
      ],
    }
  ],
  "ResultCode": "1030",
  "ResultText": "Found on list",
  "signature": "...",
  "StrictMatch": true,
  "timestamp": "2023-02-17T16:24:16.835Z"
}
```

## Error Codes

Error codes occur when there is a general failure that prevents the system from processing the job. AML Check jobs that return errors do not show up in the job list page of the portal.\\

<table data-header-hidden><thead><tr><th width="144.33333333333331"></th><th width="247"></th><th></th></tr></thead><tbody><tr><td><strong>Code</strong></td><td><strong>Text</strong></td><td><strong>Description</strong></td></tr><tr><td>2205</td><td>You are not authorized to do that.</td><td>An invalid signature/timestamp was used to sign the request. You can troubleshoot the error <a href="https://docs.usesmileid.com/further-reading/troubleshooting/troubleshooting-error-2204-and-2205-youre-not-authorized-to-do-that">here</a>.</td></tr><tr><td>2210</td><td>No enrolled user found</td><td>You attempted to re-use KYC from a previous Biometric KYC or Document Verification job but the user id was not found in the system. Check the user id or remove the search_existing_user key and re-run the job</td></tr><tr><td>2210</td><td>No KYC data found for this user</td><td>You attempted to re-use KYC of a previous user, however the user does not have any personal information e.g. a SmartSelfieTM Registration job was performed on the user. Remove the <code>search_existing_user</code> key, then send the user’s full name, nationality and year of birth with a new <code>job_id</code> but the same <code>user_</code>id</td></tr><tr><td>2210</td><td>No name found in prior KYC</td><td>You attempted to re-use the KYC of a previous user, however the user’s Biometric KYC or Document Verification job did not return a name. This can happen in rare cases where there is a bug in the ID authority database. Remove the <code>search_existing_user</code> key, then send the user’s full name, nationality and year of birth with a new job_id but the same <code>user_id</code></td></tr><tr><td>2210</td><td>No date of birth found in prior KYC</td><td>You attempted to re-use the KYC of a previous user, however the user’s Biometric KYC or Document Verification job did not return a date of birth. Remove the <code>search_existing_user</code> key, then send the user’s full name, nationality and year of birth with a new <code>job_id</code> but the same <code>user_id</code></td></tr><tr><td>2223</td><td>User KYC data is beyond the data retention expiration date</td><td>You attempted to re-use KYC from a previous Biometric KYC or Document Verification job but the job is past its data retention period and all personal information of the user has been deleted</td></tr><tr><td>2401</td><td>System Error</td><td><br></td></tr><tr><td>2403</td><td>Invalid JSON</td><td>The JSON is wrongly formatted or has an invalid structure</td></tr><tr><td>2413</td><td>&#x3C;key> is required</td><td>The required key &#x3C;key> is missing in the request body. Add the key and run the request again.</td></tr><tr><td>2414</td><td>This feature requires you to activate ID Validation for your Smile ID account</td><td>The AML Check product is not activated for your account. You can contact support to activate the product</td></tr><tr><td>2420</td><td>Production is not enabled for this account. Please complete your KYC with Smile ID.</td><td>You have not completed your KYC. You can read about our KYC requirement <a href="https://docs.usesmileid.com/getting-started/complete-your-kyc">here</a>.</td></tr></tbody></table>

## Result Codes and Result Texts

One Time AML check jobs that are processed successfully can have the following result codes

| **Code** | **Text**                    | **Description**                                                                             |
| -------- | --------------------------- | ------------------------------------------------------------------------------------------- |
| 1030     | Listed                      | The search parameters matched at least one person in our system                             |
| 1031     | Not found on list           | The search parameters did not match any persons in our system                               |
| 1017     | Not found on list - warning | The search parameters matched at least one person in our system but only returns news media |
| 1023     | No match found              | Refine your query by adding strict\_match or birth\_year                                    |
| 1015     | Database Unavailable        | The One Time AML Check database is currently unavailable                                    |

[^1]: [ISO 3166-2 codes](https://en.wikipedia.org/wiki/ISO_3166-2)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://legacy-docs.usesmileid.com/products/for-individuals-kyc/one-time-aml.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
