ListLeadMergeCandidatesAPI mirrors the erdo_list_lead_merge_candidates MCP tool.
curl --request GET \
--url https://api.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates', 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.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates",
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.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates"
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.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates")
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_body{
"candidates": [
{
"candidates": [
{
"canonical_lead_id": "<string>",
"emails": [
"<string>"
],
"merged_into": "<string>",
"phones": [
"<string>"
],
"reference": "<string>"
}
],
"capture": {
"candidate_lead_ids": [
"<string>"
],
"conversion_id": "<string>",
"conversion_status": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"id": "<string>",
"operation_key": "<string>",
"producer": "<string>",
"resolution": "<string>",
"rows_affected": 123
}
}
],
"dataset_id": "<string>",
"dataset_slug": "<string>",
"lead_identity_enabled": true
}{
"code": "not_found",
"details": {},
"message": "<string>"
}API Reference
ListLeadMergeCandidatesAPI mirrors the erdo_list_lead_merge_candidates MCP tool.
GET
/
v1
/
datasets
/
{datasetSlug}
/
lead-candidates
ListLeadMergeCandidatesAPI mirrors the erdo_list_lead_merge_candidates MCP tool.
curl --request GET \
--url https://api.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates', 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.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates",
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.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates"
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.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.erdo.ai/v1/datasets/{datasetSlug}/lead-candidates")
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_body{
"candidates": [
{
"candidates": [
{
"canonical_lead_id": "<string>",
"emails": [
"<string>"
],
"merged_into": "<string>",
"phones": [
"<string>"
],
"reference": "<string>"
}
],
"capture": {
"candidate_lead_ids": [
"<string>"
],
"conversion_id": "<string>",
"conversion_status": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"id": "<string>",
"operation_key": "<string>",
"producer": "<string>",
"resolution": "<string>",
"rows_affected": 123
}
}
],
"dataset_id": "<string>",
"dataset_slug": "<string>",
"lead_identity_enabled": true
}{
"code": "not_found",
"details": {},
"message": "<string>"
}Authorizations
An Erdo API key (erdo_api_...) or scoped token (erdo_token_...).
Path Parameters
Query Parameters
Limit caps the returned captures. Defaults to 50, capped at 200.
Response
Success response
Show child attributes
Show child attributes
at all. Without it an empty candidate list is ambiguous — "we looked and there is nothing to merge" and "nothing here has ever been checked" are the same answer — and a surface that renders the first when the second is true tells somebody the platform verified something it never looked at.

