curl --request POST \
--url https://api.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"person_ids": [
"<string>"
],
"canonical_person_id": "<string>",
"national_id": "<string>",
"birth_date": "2023-12-25",
"first_name": "<string>",
"last_name": "<string>",
"location": "<string>",
"found_notes": "<string>",
"description": "<string>"
}
'import requests
url = "https://api.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge"
payload = {
"person_ids": ["<string>"],
"canonical_person_id": "<string>",
"national_id": "<string>",
"birth_date": "2023-12-25",
"first_name": "<string>",
"last_name": "<string>",
"location": "<string>",
"found_notes": "<string>",
"description": "<string>"
}
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({
person_ids: ['<string>'],
canonical_person_id: '<string>',
national_id: '<string>',
birth_date: '2023-12-25',
first_name: '<string>',
last_name: '<string>',
location: '<string>',
found_notes: '<string>',
description: '<string>'
})
};
fetch('https://api.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge', 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.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge",
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([
'person_ids' => [
'<string>'
],
'canonical_person_id' => '<string>',
'national_id' => '<string>',
'birth_date' => '2023-12-25',
'first_name' => '<string>',
'last_name' => '<string>',
'location' => '<string>',
'found_notes' => '<string>',
'description' => '<string>'
]),
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://api.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge"
payload := strings.NewReader("{\n \"person_ids\": [\n \"<string>\"\n ],\n \"canonical_person_id\": \"<string>\",\n \"national_id\": \"<string>\",\n \"birth_date\": \"2023-12-25\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"location\": \"<string>\",\n \"found_notes\": \"<string>\",\n \"description\": \"<string>\"\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://api.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"person_ids\": [\n \"<string>\"\n ],\n \"canonical_person_id\": \"<string>\",\n \"national_id\": \"<string>\",\n \"birth_date\": \"2023-12-25\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"location\": \"<string>\",\n \"found_notes\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge")
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 \"person_ids\": [\n \"<string>\"\n ],\n \"canonical_person_id\": \"<string>\",\n \"national_id\": \"<string>\",\n \"birth_date\": \"2023-12-25\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"location\": \"<string>\",\n \"found_notes\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"confidence": "high",
"reason": "<string>",
"status": "pending",
"canonical_person_id": "<string>",
"persons": [
{
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"is_minor": true,
"document_type": "cedula",
"document_id": "<string>",
"birth_date": "2023-12-25",
"age": 1,
"age_label": "<string>",
"gender": {
"handle": "female",
"label": "<string>"
},
"location": "<string>",
"description": "<string>",
"status": {
"handle": "missing",
"label": "<string>"
},
"photo_url": "<string>",
"found_notes": "<string>",
"found_at": "2023-11-07T05:31:56Z",
"finder_name": "<string>",
"finder_phone": "<string>",
"hospital": {
"handle": "miguel_perez_carreno",
"label": "<string>"
},
"hospital_status": {
"handle": "admitted",
"label": "<string>"
},
"verified_at": "2023-11-07T05:31:56Z",
"verified_by": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"sources": [
{
"id": "<string>",
"handle": "form",
"label": "<string>",
"url": "<string>",
"source_id": "<string>",
"notes": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"tips": [
{
"id": "<string>",
"person_id": "<string>",
"sender_name": "<string>",
"sender_phone": "<string>",
"message": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"contact_person_first_name": "<string>",
"contact_person_last_name": "<string>",
"contact_person_phone": "<string>",
"contact_person_email": "<string>",
"contact_person_relationship": "<string>"
}
],
"match_score": 123,
"scan_version": 123,
"audited_by": "<string>",
"audited_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"error": "Person not found."
}{
"error": "Person not found."
}{
"error": "Person not found."
}{
"error": "Person not found."
}{
"error": "Person not found."
}{
"errors": {
"first_name": [
"First name is required."
]
}
}{
"error": "Person not found."
}{
"error": "Person not found."
}{
"error": "Backend is temporarily unavailable. Try again shortly."
}Merge selected duplicate candidates
Requires duplicates:write. Only pending reviews can be merged. Reviews containing a minor or health-sensitive person also require persons:sensitive:read, checked before private-candidate visibility; private candidates otherwise return 404. The source of the API key does not restrict reviews. Send at least two distinct candidates belonging to the review; the canonical person must be active. Unknown fields are rejected. Prior merge pointers are flattened to the canonical person.
curl --request POST \
--url https://api.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"person_ids": [
"<string>"
],
"canonical_person_id": "<string>",
"national_id": "<string>",
"birth_date": "2023-12-25",
"first_name": "<string>",
"last_name": "<string>",
"location": "<string>",
"found_notes": "<string>",
"description": "<string>"
}
'import requests
url = "https://api.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge"
payload = {
"person_ids": ["<string>"],
"canonical_person_id": "<string>",
"national_id": "<string>",
"birth_date": "2023-12-25",
"first_name": "<string>",
"last_name": "<string>",
"location": "<string>",
"found_notes": "<string>",
"description": "<string>"
}
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({
person_ids: ['<string>'],
canonical_person_id: '<string>',
national_id: '<string>',
birth_date: '2023-12-25',
first_name: '<string>',
last_name: '<string>',
location: '<string>',
found_notes: '<string>',
description: '<string>'
})
};
fetch('https://api.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge', 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.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge",
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([
'person_ids' => [
'<string>'
],
'canonical_person_id' => '<string>',
'national_id' => '<string>',
'birth_date' => '2023-12-25',
'first_name' => '<string>',
'last_name' => '<string>',
'location' => '<string>',
'found_notes' => '<string>',
'description' => '<string>'
]),
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://api.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge"
payload := strings.NewReader("{\n \"person_ids\": [\n \"<string>\"\n ],\n \"canonical_person_id\": \"<string>\",\n \"national_id\": \"<string>\",\n \"birth_date\": \"2023-12-25\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"location\": \"<string>\",\n \"found_notes\": \"<string>\",\n \"description\": \"<string>\"\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://api.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"person_ids\": [\n \"<string>\"\n ],\n \"canonical_person_id\": \"<string>\",\n \"national_id\": \"<string>\",\n \"birth_date\": \"2023-12-25\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"location\": \"<string>\",\n \"found_notes\": \"<string>\",\n \"description\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.venezuelateayuda.com/v1/duplicates/{duplicate_id}/merge")
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 \"person_ids\": [\n \"<string>\"\n ],\n \"canonical_person_id\": \"<string>\",\n \"national_id\": \"<string>\",\n \"birth_date\": \"2023-12-25\",\n \"first_name\": \"<string>\",\n \"last_name\": \"<string>\",\n \"location\": \"<string>\",\n \"found_notes\": \"<string>\",\n \"description\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "<string>",
"confidence": "high",
"reason": "<string>",
"status": "pending",
"canonical_person_id": "<string>",
"persons": [
{
"id": "<string>",
"first_name": "<string>",
"last_name": "<string>",
"is_minor": true,
"document_type": "cedula",
"document_id": "<string>",
"birth_date": "2023-12-25",
"age": 1,
"age_label": "<string>",
"gender": {
"handle": "female",
"label": "<string>"
},
"location": "<string>",
"description": "<string>",
"status": {
"handle": "missing",
"label": "<string>"
},
"photo_url": "<string>",
"found_notes": "<string>",
"found_at": "2023-11-07T05:31:56Z",
"finder_name": "<string>",
"finder_phone": "<string>",
"hospital": {
"handle": "miguel_perez_carreno",
"label": "<string>"
},
"hospital_status": {
"handle": "admitted",
"label": "<string>"
},
"verified_at": "2023-11-07T05:31:56Z",
"verified_by": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"sources": [
{
"id": "<string>",
"handle": "form",
"label": "<string>",
"url": "<string>",
"source_id": "<string>",
"notes": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"tips": [
{
"id": "<string>",
"person_id": "<string>",
"sender_name": "<string>",
"sender_phone": "<string>",
"message": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"contact_person_first_name": "<string>",
"contact_person_last_name": "<string>",
"contact_person_phone": "<string>",
"contact_person_email": "<string>",
"contact_person_relationship": "<string>"
}
],
"match_score": 123,
"scan_version": 123,
"audited_by": "<string>",
"audited_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
}{
"error": "Person not found."
}{
"error": "Person not found."
}{
"error": "Person not found."
}{
"error": "Person not found."
}{
"error": "Person not found."
}{
"errors": {
"first_name": [
"First name is required."
]
}
}{
"error": "Person not found."
}{
"error": "Person not found."
}{
"error": "Backend is temporarily unavailable. Try again shortly."
}Authorizations
Send the API key as Authorization: Bearer <api_key>.
Path Parameters
Body
At least two distinct identifiers belonging to this pending review; selections outside the review or with fewer than two distinct existing records return 404.
21Optional. The person to keep as the survivor. Must be one of person_ids (otherwise 422). When omitted, the strongest record is kept automatically.
1Optional. Overrides the national ID the system would pick automatically from the candidates. Use to set a cédula detected in notes.
1Optional when candidates have no conflict. Required when selected candidates have different known birth dates, and must match one of those dates. Automatic merges leave conflicting dates pending.
Optional. Must be sent together with last_name or not at all. Overrides the name the system would pick automatically — useful when records have scrambled or variant spellings.
1Optional. Must be sent together with first_name or not at all.
1Optional. Overrides the location the system would build automatically by combining candidate values.
1Optional. Overrides the notes the system would build automatically by combining candidate values.
1Optional. Overrides the description the system would build automatically (including the "Otros reportes asociados" echo block). Pass null to leave the field empty on the unified profile.
1Response
Updated duplicate review detail.
Show child attributes
Show child attributes

