Search
curl --request GET \
--url https://api.compliapi.com/api/v1/search \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.compliapi.com/api/v1/search"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.compliapi.com/api/v1/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.compliapi.com/api/v1/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.compliapi.com/api/v1/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.compliapi.com/api/v1/search")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.compliapi.com/api/v1/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyData Feeds
Search
Free fuzzy and regex search across every enabled list — names, companies, and identifiers
GET
/
search
Search
curl --request GET \
--url https://api.compliapi.com/api/v1/search \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.compliapi.com/api/v1/search"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.compliapi.com/api/v1/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.compliapi.com/api/v1/search",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.compliapi.com/api/v1/search"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.compliapi.com/api/v1/search")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.compliapi.com/api/v1/search")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_bodyUnauthenticated and free. Fuzzy search across every enabled list, matching listed parties’ names and aliases as well as identifier values (crypto addresses, emails, websites, government IDs) and sanctioned countries. This is the endpoint behind the free SDN search tool.
Searches are burst-limited per client IP (a
Results are ranked active-before-delisted, then exact-before-partial, then by similarity. Unlike the screening endpoints, delisted entities are included (ranked last) with
On the free SDN search tool and the dashboard, the same capability is available by convention: wrap the query in slashes —
429 response carries a Retry-After header) and are never metered or audit-logged — searched values are not stored. For production screening with exact-match semantics, audit history, and a sanctioned/flagged verdict, use the screening endpoints.
string
required
Name, company, or identifier to search for (3–100 characters). Matching is substring plus trigram and word similarity — a typo’d name still matches when it’s close to a word of the listed name (e.g. “ivanof” finds “Vladimir Ivanov”); near-misses rank lower.
string
Comma-separated list slugs to narrow the scope (default: all enabled lists).
integer
default:"10"
Number of results to return (1–25).
string
default:"fuzzy"
fuzzy (default) or regex. With regex, q is treated as a case-insensitive POSIX regular expression matched against identifier values and listed party names — results carry match: "partial" with no similarity ranking, and country designations are not searched. Invalid patterns return 422; patterns that exceed the server’s time budget return 503; environments with regex disabled return 400.Example response
[
{
"entity_type": "government_id",
"value": "RC 1555604",
"match": "partial",
"similarity": 0.412,
"list": "ofac",
"list_name": "US OFAC SDN",
"list_type": "sanctions",
"metadata": {
"type": "Registration Number",
"id_country": "Nigeria",
"sdn_name": "GENERATION CURRENCY BUREAU DE CHANGE LIMITED",
"sdn_type": "Entity",
"programs": "SDGT"
},
"source_url": "https://sanctionssearch.ofac.treas.gov/Details.aspx?id=...",
"removed_at": null
}
]
removed_at set — formerly-listed parties are useful review signal. match is exact when the query equals the identifier value or the listed party’s name; list_type is sanctions, crime, or risk.
Regex example
# Listed Ethereum addresses starting with 0x098b, any list
curl "https://api.compliapi.com/api/v1/search?q=%5E0x098b&mode=regex"
/^0x[a-f0-9]+$/ — and it runs as a regex search; unwrapped queries stay fuzzy.