Leer un documento de identidad
Un flujo de registro se traba justo cuando alguien tiene que volver a escribir a mano el número de un documento. Este endpoint lee una cédula, licencia o carné fotografiado o escaneado y devuelve los campos impresos como datos estructurados, para que el proceso siga andando en vez de detenerse en un teclado.
Ejecútela online
Ejecute esto en nuestros servidores con su cuenta. Las herramientas gratuitas corren en su navegador; esta cobra de su saldo del KIT según el precio de arriba.
Pensada para el momento previo a la confianza
Todo flujo de KYC, arriendo o verificación de edad choca con el mismo obstáculo: alguien tiene que confirmar que el documento frente a la cámara dice lo que el formulario afirma. Este endpoint lee cédulas nacionales, licencias de conducir y carnés de residencia, y entrega los campos impresos como datos limpios en lugar de una foto que alguien debe entrecerrar los ojos para leer.
Qué recibe de vuelta
Envía una imagen del frente del documento y recibe el nombre completo del titular, el número de documento, la fecha de nacimiento, la fecha de vencimiento y la autoridad emisora cuando aparece, cada uno etiquetado según el campo de origen. La respuesta es información estructurada pura, no una copia de la tarjeta, algo clave para equipos que guardan los datos extraídos pero nunca conservan la imagen original.
El consentimiento es parte de la solicitud, no un añadido
Los documentos de identificación llevan datos personales, así que este endpoint se diseñó con una regla simple: lo envía porque el titular del documento aceptó la verificación, y nosotros no reutilizamos esa imagen para nada más que producir su resultado. Cuando vence el período de retención, el archivo se elimina; nada de lo que envía se usa para entrenar ni mejorar modelos.
Cómo se comporta la solicitud
Llama a POST /ocr/id-document con la imagen y recibe un task_id de inmediato. La tarea corre de forma asíncrona y la respuesta llega a su webhook, o puede recuperarla desde un enlace firmado válido por 24 horas. Si el documento resulta ilegible tras tres reintentos internos, recibe un error claro en vez de un cobro.
Dónde encaja en una canalización
Como la llamada es asíncrona y se cobra por tarea completada, muchos equipos la conectan directo a sus colas de registro o verificación: un usuario sube una foto, su backend dispara la solicitud, y para cuando el resto del formulario de alta termina de validarse, los campos extraídos suelen estar ya en su base de datos listos para que un humano o un motor de reglas los revise.
Qué puede hacer con ella
Apertura de cuentas en servicios regulados
Una fintech captura la foto de una licencia durante el registro y autocompleta el nombre legal y la fecha de nacimiento del solicitante sin pedirle que los escriba dos veces.
Check-in de alquileres de corta estancia
Un administrador de propiedades escanea la cédula del huésped al llegar para registrar el nombre y el número de documento junto a la reserva, sin que la recepción lo transcriba a mano.
Verificación de edad en la entrada
Una plataforma de eventos lee la fecha de nacimiento de una identificación subida para confirmar elegibilidad antes de emitir la entrada, sin guardar la foto después.
Ingreso de documentos en recursos humanos
Una agencia de personal procesa por lotes las identificaciones de nuevos contratados durante la noche y extrae los números de documento hacia el sistema de RR. HH. antes del turno de la mañana.
Preguntas frecuentes
¿Para qué sirve la API de OCR de documentos de identidad?
Lee una foto o escaneo de una cédula, licencia de conducir o carné de residencia y devuelve los campos impresos como datos estructurados para flujos de KYC, registro o check-in.
¿Hay plan gratuito o prueba?
No hay capa gratuita: las capas gratis se abusan y ralentizan a todos. El acceso funciona con un saldo prepago de ForHosting KIT: se recarga desde $10.00 (no caduca) y cada solicitud se cobra a su precio publicado, así que una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens ni créditos inventados, y una tarea fallida no se cobra.
¿Cuánto cuesta?
$0.010 por solicitud más $0.0575 por imagen procesada, cobrado solo sobre tareas completadas. Una tarea fallida nunca se cobra.
¿Qué tipos de documento admite?
Cédulas nacionales, licencias de conducir y carnés de residencia con un diseño impreso estándar son el objetivo principal; el resultado depende de la legibilidad de la imagen.
¿Cómo obtengo el resultado?
Envía la solicitud a POST /ocr/id-document, recibe un task_id de inmediato, y recoge la salida por webhook firmado o por un enlace firmado válido durante 24 horas.
¿Guardan la imagen del documento?
No. Las imágenes y los resultados se eliminan al cerrarse la ventana de retención, y nada de lo enviado se usa para entrenar modelos.
¿Qué pasa si la foto de la identificación está borrosa o recortada?
El sistema reintenta internamente hasta tres veces; si aún así no logra leer el documento, recibe un error claro y no se le cobra.
¿Puedo procesar muchas identificaciones a la vez?
Sí, cada documento es una tarea asíncrona independiente, así que puede enviar un lote de imágenes y recoger los resultados conforme cada tarea termina, sin esperar una llamada síncrona única.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, y pronto desde nuestra app, el email y Telegram.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/ocr/id-document \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/ocr/id-document", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/ocr/id-document",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/ocr/id-document", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/ocr/id-document", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"image": "https://ejemplo.com/imagen.jpg"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "ocr.id_document",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 25 |
max_pages | 10 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
422 | task_failed | La tarea falló tras 3 reintentos. No se cobra. |