Verificar cara (1:1 contra persona enrolada)
Endpoint
POST https://api.verifik.co/v2/face-recognition/verify
Verifica que una o más imágenes de rostro coincidan con una persona enrolada concreta identificada por id (MongoDB _id de la persona). Devuelve el perfil enrolado y un score de similitud cuando la coincidencia supera min_score. Opcionalmente usa collection_id para acotar la verificación.
Headers
| Nombre | Valor |
|---|---|
| Content-Type | application/json |
| Authorization | Bearer <token> |
Parámetros
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
id | string | Sí | MongoDB _id de la persona enrolada contra la que verificar. |
images | string[] | Sí | Imágenes de rostro en base64 (base64 crudo; mismo sujeto que la persona enrolada). |
min_score | number | Sí | Umbral entre 0.5 y 1. |
search_mode | string | Sí | FAST o ACCURATE. |
collection_id | string | No | Opcional para acotar cuando la persona pertenece a varias colecciones. |
Solicitud
- Node.js
- PHP
- Python
- Go
const fetch = require("node-fetch");
const personId = "68defec6a9a7b4933d5652f3";
async function run() {
const res = await fetch("https://api.verifik.co/v2/face-recognition/verify", {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `Bearer ${process.env.VERIFIK_TOKEN}`,
},
body: JSON.stringify({
id: personId,
images: ["<base64>", "<base64>"],
min_score: 0.75,
search_mode: "FAST",
collection_id: "<optional_collection_mongo_id>",
}),
});
console.log(await res.json());
}
run();
<?php
$personId = "68defec6a9a7b4933d5652f3";
$ch = curl_init("https://api.verifik.co/v2/face-recognition/verify");
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"Authorization: Bearer " . getenv("VERIFIK_TOKEN")
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"id" => $personId,
"images" => ["<base64>", "<base64>"],
"min_score" => 0.75,
"search_mode" => "FAST",
"collection_id" => "<optional_collection_mongo_id>",
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import os, requests
person_id = "68defec6a9a7b4933d5652f3"
url = "https://api.verifik.co/v2/face-recognition/verify"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {os.getenv('VERIFIK_TOKEN')}",
}
payload = {
"id": person_id,
"images": ["<base64>", "<base64>"],
"min_score": 0.75,
"search_mode": "FAST",
"collection_id": "<optional_collection_mongo_id>",
}
r = requests.post(url, json=payload, headers=headers)
print(r.json())
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
)
func main() {
personId := "68defec6a9a7b4933d5652f3"
payload, _ := json.Marshal(map[string]interface{}{
"id": personId,
"images": []string{"<base64>", "<base64>"},
"min_score": 0.75,
"search_mode": "FAST",
"collection_id": "<optional_collection_mongo_id>",
})
req, _ := http.NewRequest("POST", "https://api.verifik.co/v2/face-recognition/verify", bytes.NewReader(payload))
req.Header.Set("Content-Type", "application/json")
req.Header.Set("Authorization", "Bearer "+os.Getenv("VERIFIK_TOKEN"))
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
var out map[string]interface{}
json.NewDecoder(resp.Body).Decode(&out)
fmt.Println(out)
}
Respuesta
- 200
- 401
- 403
- 409
- 500
{
"id": "9DVKW",
"data": {
"match": {
"id": "68defec6a9a7b4933d5652f3",
"name": "Jane Doe",
"score": 0.9132,
"gender": "F",
"date_of_birth": "1990-01-15",
"thumbnails": [
{ "id": "thumb-uuid", "thumbnail": "<base64>" }
],
"collections": []
}
},
"signature": {
"message": "Certified by Verifik.co",
"dateTime": "April 9, 2026 12:12 AM"
}
}
{
"message": "Authentication required",
"code": "UNAUTHORIZED"
}
{
"message": "token_expired",
"code": "FORBIDDEN"
}
{
"message": "\"min_score\" is required",
"code": "MissingParameter"
}
{
"message": "internal_error",
"code": "ERROR"
}
Notas
- 1:1 frente al enrolamiento: A diferencia de Búsqueda facial (1:N), aquí ya sabes qué persona probar; este endpoint puntúa las imágenes de prueba contra ese registro.
- Imágenes: Usa una o más capturas del mismo sujeto; base64 crudo sin prefijo
data:salvo que tu cliente lo añada de forma consistente. - Flujos relacionados: Para comparar dos conjuntos de imágenes sin
idenrolado, usa Comparación facial; para búsqueda en galería, usa Búsqueda facial.