curl --request POST \
--url https://datamatcher-api.thedatacity.com/api/v1/match \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"id": "demo-sainsburys",
"input_name": "Sainsbury's Supermarkets Ltd"
}
EOFimport requests
url = "https://datamatcher-api.thedatacity.com/api/v1/match"
payload = {
"id": "demo-sainsburys",
"input_name": "Sainsbury's Supermarkets Ltd"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({id: 'demo-sainsburys', input_name: 'Sainsbury\'s Supermarkets Ltd'})
};
fetch('https://datamatcher-api.thedatacity.com/api/v1/match', 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://datamatcher-api.thedatacity.com/api/v1/match",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => 'demo-sainsburys',
'input_name' => 'Sainsbury\'s Supermarkets Ltd'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://datamatcher-api.thedatacity.com/api/v1/match"
payload := strings.NewReader("{\n \"id\": \"demo-sainsburys\",\n \"input_name\": \"Sainsbury's Supermarkets Ltd\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://datamatcher-api.thedatacity.com/api/v1/match")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"demo-sainsburys\",\n \"input_name\": \"Sainsbury's Supermarkets Ltd\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://datamatcher-api.thedatacity.com/api/v1/match")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"demo-sainsburys\",\n \"input_name\": \"Sainsbury's Supermarkets Ltd\"\n}"
response = http.request(request)
puts response.read_body{
"input_name": "Sainsbury's Supermarkets Ltd",
"id": "demo-sainsburys",
"matched_company_number": "3261722",
"matched_company_name": "SAINSBURY'S SUPERMARKETS LTD",
"matched_registered_postcode": "EC1N 2HT",
"active": "Active",
"rigorous_match": true,
"route": "fast",
"confidence": "high",
"reasons": [],
"degraded": []
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Match One
Match a single company to a Companies House number.
curl --request POST \
--url https://datamatcher-api.thedatacity.com/api/v1/match \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data @- <<EOF
{
"id": "demo-sainsburys",
"input_name": "Sainsbury's Supermarkets Ltd"
}
EOFimport requests
url = "https://datamatcher-api.thedatacity.com/api/v1/match"
payload = {
"id": "demo-sainsburys",
"input_name": "Sainsbury's Supermarkets Ltd"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({id: 'demo-sainsburys', input_name: 'Sainsbury\'s Supermarkets Ltd'})
};
fetch('https://datamatcher-api.thedatacity.com/api/v1/match', 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://datamatcher-api.thedatacity.com/api/v1/match",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'id' => 'demo-sainsburys',
'input_name' => 'Sainsbury\'s Supermarkets Ltd'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://datamatcher-api.thedatacity.com/api/v1/match"
payload := strings.NewReader("{\n \"id\": \"demo-sainsburys\",\n \"input_name\": \"Sainsbury's Supermarkets Ltd\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://datamatcher-api.thedatacity.com/api/v1/match")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"demo-sainsburys\",\n \"input_name\": \"Sainsbury's Supermarkets Ltd\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://datamatcher-api.thedatacity.com/api/v1/match")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"demo-sainsburys\",\n \"input_name\": \"Sainsbury's Supermarkets Ltd\"\n}"
response = http.request(request)
puts response.read_body{
"input_name": "Sainsbury's Supermarkets Ltd",
"id": "demo-sainsburys",
"matched_company_number": "3261722",
"matched_company_name": "SAINSBURY'S SUPERMARKETS LTD",
"matched_registered_postcode": "EC1N 2HT",
"active": "Active",
"rigorous_match": true,
"route": "fast",
"confidence": "high",
"reasons": [],
"degraded": []
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Authorizations
Customer API key (dm_live_…)
Body
1 - 512204832Optional full address.
5121632128Response
Match result. Fields reasons, degraded, and error are only included when the API key belongs to a superuser. rigorous_match, route, and confidence are always returned.
Full match result. reasons, degraded, and error only for superuser API keys.
Company name echoed from the request.
Optional correlation id echoed from the request.
Website URL echoed from the request, if provided.
Postcode echoed from the request, if provided.
Full address echoed from the request, if provided.
SIC code echoed from the request, if provided.
Trading / incorporation date hint echoed from the request.
Companies House registration number (CRN) when a match is found; null when unmatched.
Registered company name for the matched CRN, when available.
Registered office postcode for the matched CRN, when available.
Active / inactive (or equivalent) status when known.
True when the slow path cleared the scoring threshold for this candidate. Fast-path exact name matches are also treated as strong evidence for confidence.
How the match was resolved: "fast" (exact name), "slow" (full pipeline), or null when unmatched.
Coarse evidence band. high: fast-path exact name or slow-path with rigorous_match; medium: slow-path without rigorous confirmation; low: weaker path; none: no CRN (or row-level error). Degraded pipeline steps drop the band one notch.
high, medium, low, none Short scoring reason codes (superuser API keys only).
Pipeline steps that were unavailable or weakened for this row (superuser API keys only), e.g. url_gap_fill.
Row-level error message when matching failed (superuser API keys only).