> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://documentation.sayari.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://documentation.sayari.com/_mcp/server.

# Resolution Upload

POST https://api.sayari.com/v1/projects/{projectId}/resolutions
Content-Type: application/json

This endpoint is deprecated. This endpoint allows you to upload entities in bulk.

Reference: https://documentation.sayari.com/api/api-reference/resolution/resolution-upload

## Authentication

- OAuth2 — send the obtained token as `Authorization: Bearer <token>`

## Servers

- `https://api.sayari.com` (Production, default)
- `https://api.internal.sayari.com` (Dev)
- `https://api.uk.sayari.com` (Production_UK)

## Request

### Path parameters

- `projectId` (string, required) — Unique identifier of the project

### Body (application/json)

This endpoint expects a ResolutionUploadBody.

- `filename` (string, required)
- `data` (list of ResolutionBody, required)
- `enable_llm_clean` (boolean, optional) — Whether to enable LLM-based data cleaning to remove noise and standardize entity attributes. Defaults to true if not supplied. Set to false to disable LLM cleaning.

## Response

### 200

- `file` (string, required)
- `uploaded` (string, required)
- `count` (integer, required)

## Errors

### 400 Bad Request

- `any`

### 401 Unauthorized

- `any`

### 405 Method Not Allowed

- `status` (integer, required)
- `message` (list of string, required)
- `success` (boolean, required)

### 406 Not Acceptable

- `status` (integer, required)
- `message` (list of string, required)
- `success` (boolean, required)

### 429 Rate Limit Exceeded

- `any`

### 500 Internal Server Error

- `any`

## Types

### ResolutionBody

- `name` (list of string, optional) — Entity name
- `identifier` (BothIdentifierTypes, optional) — Entity identifier. Can be from either the [Identifier Type](/sayari-library/ontology/enumerated-types#identifier-type) or [Weak Identifier Type](/sayari-library/ontology/enumerated-types#weak-identifier-type) enums.
- `address` (list of string, optional) — Entity address
- `city` (string, optional) — Entity city that contains the provided city name.
- `state` (string, optional) — Entity state that contains the provided state name.
- `country` (list of enum, optional) — Entity country - must be ISO (3166) Trigram i.e., `USA`. See complete list [here](/sayari-library/ontology/enumerated-types#country)
  - Allowed values: `ABW`, `AFG`, `AGO`, `AIA`, `ALA`, `ALB`, `AND`, `ARE`, `ARG`, `ARM`, `ASM`, `ATA`, `ATF`, `ATG`, `AUS`, `AUT`, `AZE`, `BDI`, `BEL`, `BEN`, `BES`, `BFA`, `BGD`, `BGR`, `BHR`, `BHS`, `BIH`, `BLM`, `BLR`, `BLZ`, `BMU`, `BOL`, `BRA`, `BRB`, `BRN`, `BTN`, `BVT`, `BWA`, `CAF`, `CAN`, `CCK`, `CHE`, `CHL`, `CHN`, `CIV`, `CMR`, `COD`, `COG`, `COK`, `COL`, `COM`, `CPV`, `CRI`, `CUB`, `CUW`, `CXR`, `CYM`, `CYP`, `CZE`, `DEU`, `DJI`, `DMA`, `DNK`, `DOM`, `DZA`, `ECU`, `EGY`, `ERI`, `ESH`, `ESP`, `EST`, `ETH`, `FIN`, `FJI`, `FLK`, `FRA`, `FRO`, `FSM`, `GAB`, `GBR`, `GEO`, `GGY`, `GHA`, `GIB`, `GIN`, `GLP`, `GMB`, `GNB`, `GNQ`, `GRC`, `GRD`, `GRL`, `GTM`, `GUF`, `GUM`, `GUY`, `HKG`, `HMD`, `HND`, `HRV`, `HTI`, `HUN`, `IDN`, `IMN`, `IND`, `IOT`, `IRL`, `IRN`, `IRQ`, `ISL`, `ISR`, `ITA`, `JAM`, `JEY`, `JOR`, `JPN`, `KAZ`, `KEN`, `KGZ`, `KHM`, `KIR`, `KNA`, `KOR`, `KWT`, `LAO`, `LBN`, `LBR`, `LBY`, `LCA`, `LIE`, `LKA`, `LSO`, `LTU`, `LUX`, `LVA`, `MAC`, `MAF`, `MAR`, `MCO`, `MDA`, `MDG`, `MDV`, `MEX`, `MHL`, `MKD`, `MLI`, `MLT`, `MMR`, `MNE`, `MNG`, `MNP`, `MOZ`, `MRT`, `MSR`, `MTQ`, `MUS`, `MWI`, `MYS`, `MYT`, `NAM`, `NCL`, `NER`, `NFK`, `NGA`, `NIC`, `NIU`, `NLD`, `NOR`, `NPL`, `NRU`, `NZL`, `OMN`, `PAK`, `PAN`, `PCN`, `PER`, `PHL`, `PLW`, `PNG`, `POL`, `PRI`, `PRK`, `PRT`, `PRY`, `PSE`, `PYF`, `QAT`, `REU`, `RKS`, `ROU`, `RUS`, `RWA`, `SAU`, `SDN`, `SEN`, `SGP`, `SGS`, `SHN`, `SJM`, `SLB`, `SLE`, `SLV`, `SMR`, `SOM`, `SPM`, `SRB`, `SSD`, `STP`, `SUR`, `SVK`, `SVN`, `SWE`, `SWZ`, `SXM`, `SYC`, `SYR`, `TCA`, `TCD`, `TGO`, `THA`, `TJK`, `TKL`, `TKM`, `TLS`, `TON`, `TTO`, `TUN`, `TUR`, `TUV`, `TWN`, `TZA`, `UGA`, `UKR`, `UMI`, `UNK`, `URY`, `USA`, `UZB`, `VAT`, `VCT`, `VEN`, `VGB`, `VIR`, `VNM`, `VUT`, `WLF`, `WSM`, `XXX`, `YEM`, `ZAF`, `ZMB`, `ZWE`
- `date_of_birth` (list of string, optional) — Entity date of birth
- `contact` (list of string, optional) — Entity contact
- `type` (list of enum, optional) — [Entity type](/sayari-library/ontology/entities). If multiple values are passed for any field, the endpoint will match entities with ANY of the values.
  - Allowed values: `account`, `aircraft`, `company`, `contract`, `generic`, `government_organization`, `intellectual_property`, `legal_matter`, `person`, `property`, `security`, `shipment`, `tradename`, `transaction`, `unknown`, `vessel`
- `profile` (enum, optional) — Specifies the search algorithm to use. `corporate` (default) is optimized for accurate entity attribute matching, ideal for business verification. `suppliers` is tailored for matching entities with trade data, suitable for supply chain use cases. `search` mimics /search/entity behavior, best for name-only matches.
  - Allowed values: `corporate`, `suppliers`, `search`, `screen`
- `name_min_percentage` (integer, optional) — Adding this param enables an alternative matching logic. It will set a minimum percentage of tokens needed to match with user input to be considered a "hit". Accepts integers from 0 to 100 inclusive.
- `name_min_tokens` (integer, optional) — Adding this param enables an alternative matching logic. It sets the minimum number of matching tokens the resolved hits need to have in common with the user input to be considered a "hit". Accepts non-negative integers.
- `tags` (list of string, optional) — An array of tag labels to associate with each resolved entity
- `minimum_score_threshold` (integer, optional) — Specifies the minimum score required to pass, which controls the strictness of the matching threshold. The default value is 77, and tuned for general use-case accuracy. Increase the value for stricter matching, reduce to loosen.
- `search_fallback` (boolean, optional) — Enables a name search fallback when either the corporate or supplier profiles fails to find a match. When invoked, the fallback will make a call similar to /search/entity on name only. By default set to false.
- `cutoff_threshold` (integer, optional) — Specifies the window of similar results returned in the match group. Increase for fewer multiple matches, decrease to open the aperture and allow for more matches. Default is .8
- `candidate_pool_size` (integer, optional) — Specifies the maximum number of entity candidates considered during search. Default is 50. Higher values increase match pool size but also increase latency.
- `skip_post_process` (boolean, optional) — Bypasses the post-processing setps and re-ranking. Useful for debugging. By default set to false, set to true to enable.
- `enable_llm_clean` (boolean, optional) — Whether to enable LLM-based data cleaning to remove noise and standardize entity attributes. Defaults to true if not supplied. Set to false to disable LLM cleaning.

### BothIdentifierTypes

## Examples

### Example 1

**Request**

```json
{
  "filename": "vbeck.json",
  "data": [
    {
      "name": [
        "victoria beckham limited"
      ],
      "tags": [
        "spice girls"
      ]
    }
  ]
}
```

**Response**

```json
{
  "file": "vbeck.json",
  "uploaded": "2024-10-02T20:53:24.007Z",
  "count": 7
}
```

**SDK Code**

```python
import requests

url = "https://api.sayari.com/v1/projects/V03eYM/resolutions"

payload = {
    "filename": "vbeck.json",
    "data": [
        {
            "name": ["victoria beckham limited"],
            "tags": ["spice girls"]
        }
    ]
}
headers = {
    "Authorization": "<token>.",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.sayari.com/v1/projects/V03eYM/resolutions';
const options = {
  method: 'POST',
  headers: {Authorization: '<token>.', 'Content-Type': 'application/json'},
  body: '{"filename":"vbeck.json","data":[{"name":["victoria beckham limited"],"tags":["spice girls"]}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.sayari.com/v1/projects/V03eYM/resolutions"

	payload := strings.NewReader("{\n  \"filename\": \"vbeck.json\",\n  \"data\": [\n    {\n      \"name\": [\n        \"victoria beckham limited\"\n      ],\n      \"tags\": [\n        \"spice girls\"\n      ]\n    }\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<token>.")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.sayari.com/v1/projects/V03eYM/resolutions")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<token>.'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"filename\": \"vbeck.json\",\n  \"data\": [\n    {\n      \"name\": [\n        \"victoria beckham limited\"\n      ],\n      \"tags\": [\n        \"spice girls\"\n      ]\n    }\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.sayari.com/v1/projects/V03eYM/resolutions")
  .header("Authorization", "<token>.")
  .header("Content-Type", "application/json")
  .body("{\n  \"filename\": \"vbeck.json\",\n  \"data\": [\n    {\n      \"name\": [\n        \"victoria beckham limited\"\n      ],\n      \"tags\": [\n        \"spice girls\"\n      ]\n    }\n  ]\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.sayari.com/v1/projects/V03eYM/resolutions', [
  'body' => '{
  "filename": "vbeck.json",
  "data": [
    {
      "name": [
        "victoria beckham limited"
      ],
      "tags": [
        "spice girls"
      ]
    }
  ]
}',
  'headers' => [
    'Authorization' => '<token>.',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.sayari.com/v1/projects/V03eYM/resolutions");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<token>.");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"filename\": \"vbeck.json\",\n  \"data\": [\n    {\n      \"name\": [\n        \"victoria beckham limited\"\n      ],\n      \"tags\": [\n        \"spice girls\"\n      ]\n    }\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "<token>.",
  "Content-Type": "application/json"
]
let parameters = [
  "filename": "vbeck.json",
  "data": [
    [
      "name": ["victoria beckham limited"],
      "tags": ["spice girls"]
    ]
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.sayari.com/v1/projects/V03eYM/resolutions")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

### Example 2

**Request**

```json
{
  "filename": "testblah.csv",
  "data": [
    {
      "name": [
        "Chongqing Jingyou Zhicai New Materials Co. ABC XYZ Blah Blah Nonsense 1 489 929 49492 1839 1848"
      ],
      "address": [
        "4-2, Building B2, No. 5, Middle Mount Huangshan Avenue, Gaoxinyuan, Dazhulin Street, Liangjiang New District, Chongqing,Chongqing,continuation,CN"
      ],
      "country": [
        "CHN"
      ]
    }
  ],
  "enable_llm_clean": false
}
```

**Response**

```json
{
  "file": "vbeck.json",
  "uploaded": "2024-10-02T20:53:24.007Z",
  "count": 7
}
```

**SDK Code**

```python
import requests

url = "https://api.sayari.com/v1/projects/V03eYM/resolutions"

payload = {
    "filename": "testblah.csv",
    "data": [
        {
            "name": ["Chongqing Jingyou Zhicai New Materials Co. ABC XYZ Blah Blah Nonsense 1 489 929 49492 1839 1848"],
            "address": ["4-2, Building B2, No. 5, Middle Mount Huangshan Avenue, Gaoxinyuan, Dazhulin Street, Liangjiang New District, Chongqing,Chongqing,continuation,CN"],
            "country": ["CHN"]
        }
    ],
    "enable_llm_clean": False
}
headers = {
    "Authorization": "<token>.",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://api.sayari.com/v1/projects/V03eYM/resolutions';
const options = {
  method: 'POST',
  headers: {Authorization: '<token>.', 'Content-Type': 'application/json'},
  body: '{"filename":"testblah.csv","data":[{"name":["Chongqing Jingyou Zhicai New Materials Co. ABC XYZ Blah Blah Nonsense 1 489 929 49492 1839 1848"],"address":["4-2, Building B2, No. 5, Middle Mount Huangshan Avenue, Gaoxinyuan, Dazhulin Street, Liangjiang New District, Chongqing,Chongqing,continuation,CN"],"country":["CHN"]}],"enable_llm_clean":false}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api.sayari.com/v1/projects/V03eYM/resolutions"

	payload := strings.NewReader("{\n  \"filename\": \"testblah.csv\",\n  \"data\": [\n    {\n      \"name\": [\n        \"Chongqing Jingyou Zhicai New Materials Co. ABC XYZ Blah Blah Nonsense 1 489 929 49492 1839 1848\"\n      ],\n      \"address\": [\n        \"4-2, Building B2, No. 5, Middle Mount Huangshan Avenue, Gaoxinyuan, Dazhulin Street, Liangjiang New District, Chongqing,Chongqing,continuation,CN\"\n      ],\n      \"country\": [\n        \"CHN\"\n      ]\n    }\n  ],\n  \"enable_llm_clean\": false\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "<token>.")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://api.sayari.com/v1/projects/V03eYM/resolutions")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = '<token>.'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"filename\": \"testblah.csv\",\n  \"data\": [\n    {\n      \"name\": [\n        \"Chongqing Jingyou Zhicai New Materials Co. ABC XYZ Blah Blah Nonsense 1 489 929 49492 1839 1848\"\n      ],\n      \"address\": [\n        \"4-2, Building B2, No. 5, Middle Mount Huangshan Avenue, Gaoxinyuan, Dazhulin Street, Liangjiang New District, Chongqing,Chongqing,continuation,CN\"\n      ],\n      \"country\": [\n        \"CHN\"\n      ]\n    }\n  ],\n  \"enable_llm_clean\": false\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api.sayari.com/v1/projects/V03eYM/resolutions")
  .header("Authorization", "<token>.")
  .header("Content-Type", "application/json")
  .body("{\n  \"filename\": \"testblah.csv\",\n  \"data\": [\n    {\n      \"name\": [\n        \"Chongqing Jingyou Zhicai New Materials Co. ABC XYZ Blah Blah Nonsense 1 489 929 49492 1839 1848\"\n      ],\n      \"address\": [\n        \"4-2, Building B2, No. 5, Middle Mount Huangshan Avenue, Gaoxinyuan, Dazhulin Street, Liangjiang New District, Chongqing,Chongqing,continuation,CN\"\n      ],\n      \"country\": [\n        \"CHN\"\n      ]\n    }\n  ],\n  \"enable_llm_clean\": false\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.sayari.com/v1/projects/V03eYM/resolutions', [
  'body' => '{
  "filename": "testblah.csv",
  "data": [
    {
      "name": [
        "Chongqing Jingyou Zhicai New Materials Co. ABC XYZ Blah Blah Nonsense 1 489 929 49492 1839 1848"
      ],
      "address": [
        "4-2, Building B2, No. 5, Middle Mount Huangshan Avenue, Gaoxinyuan, Dazhulin Street, Liangjiang New District, Chongqing,Chongqing,continuation,CN"
      ],
      "country": [
        "CHN"
      ]
    }
  ],
  "enable_llm_clean": false
}',
  'headers' => [
    'Authorization' => '<token>.',
    'Content-Type' => 'application/json',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://api.sayari.com/v1/projects/V03eYM/resolutions");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "<token>.");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"filename\": \"testblah.csv\",\n  \"data\": [\n    {\n      \"name\": [\n        \"Chongqing Jingyou Zhicai New Materials Co. ABC XYZ Blah Blah Nonsense 1 489 929 49492 1839 1848\"\n      ],\n      \"address\": [\n        \"4-2, Building B2, No. 5, Middle Mount Huangshan Avenue, Gaoxinyuan, Dazhulin Street, Liangjiang New District, Chongqing,Chongqing,continuation,CN\"\n      ],\n      \"country\": [\n        \"CHN\"\n      ]\n    }\n  ],\n  \"enable_llm_clean\": false\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "<token>.",
  "Content-Type": "application/json"
]
let parameters = [
  "filename": "testblah.csv",
  "data": [
    [
      "name": ["Chongqing Jingyou Zhicai New Materials Co. ABC XYZ Blah Blah Nonsense 1 489 929 49492 1839 1848"],
      "address": ["4-2, Building B2, No. 5, Middle Mount Huangshan Avenue, Gaoxinyuan, Dazhulin Street, Liangjiang New District, Chongqing,Chongqing,continuation,CN"],
      "country": ["CHN"]
    ]
  ],
  "enable_llm_clean": false
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api.sayari.com/v1/projects/V03eYM/resolutions")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```