Habla con un experto
×
WhatsApp Icon Habla con un agente

API de validación de comprobante de domicilio CFE

Sabrás si el comprobante es real, vigente y de quién es

Cotejamos ante CFE el número de servicio, el titular y el importe exacto del recibo vigente: ese tercer dato es el que un comprobante armado no puede adivinar. Recibes el veredicto en JSON y el PDF oficial para tu expediente.

OCR de foto y PDF Cotejo ante CFE PDF oficial de evidencia Webhook JSON
Obtener API key gratis

validar-comprobante.sh

# Cotejo del comprobante de domicilio ante CFE
curl -X POST https://api.verificamex.com/v1/cfe/validaciones \
  -H "Authorization: Bearer $VMX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "numero_servicio": "50918273645",
    "nombre_titular":  "BENITO PABLO JUAREZ GARCIA",
    "importe":         "104",
    "webhook_url":     "https://tu-app.mx/webhooks/cfe"
  }'

# → 202 Accepted
{
  "job_id": "23133c38d62c",
  "estado": "en_proceso"
}

Por qué un comprobante copiado no pasa el cotejo

Casi cualquier comprobante falso es impecable a la vista. El filtro no es la apariencia del documento: es cuántos datos tienen que coincidir al mismo tiempo contra el registro de CFE, y en qué periodo.

1

Triple candado: servicio, titular e importe

No basta con copiar el número de servicio y el nombre de un recibo real. El cotejo exige además el importe exacto del recibo vigente o del penúltimo. Quien arma un comprobante puede acertar dos datos; los tres, contra el registro oficial y en el periodo correcto, no.

2

Te decimos exactamente qué falló

La respuesta no es un “no válido” opaco. codigo_rechazo señala si lo que no cuadró fue el número de servicio, el titular o el importe. Cada causa corresponde a un fraude distinto y te deja ramificar el flujo en vez de mandar todo a revisión manual.

3

Devolvemos el PDF oficial, no sólo los datos

Además de los campos estructurados, recuperamos el comprobante oficial desde CFE en PDF. Tu expediente guarda el documento de la fuente —no el archivo que subió tu cliente, ni una reconstrucción de sus datos—, que es lo que sostiene una revisión posterior.

4

La vigencia queda demostrada, no prometida

Como el importe se valida contra el último o el penúltimo recibo, un comprobante viejo no puede coincidir aunque sus datos sean reales. La vigencia deja de ser una promesa del documento: es una consecuencia de haber pasado el cotejo.

Probar API gratis

La integración completa: OCR del PDF, cotejo ante CFE y webhook

Todas las peticiones son JSON sobre HTTPS y se autentican con un bearer token. Estos son los payloads reales del flujo, de principio a fin.

Extrae los datos del PDF o la foto

Un multipart/form-data con el archivo. Si el PDF es el nativo del portal de CFE, la extracción se hace sobre la capa de texto y la confianza roza el 100%; si es una fotografía, se aplica OCR con corrección de perspectiva.

El bloque analisis_documento es el que delata al recibo hecho con plantilla: capas de edición, texto superpuesto y qué software generó el archivo.

POST /v1/cfe/ocr

curl -X POST https://api.verificamex.com/v1/cfe/ocr \
  -H "Authorization: Bearer $VMX_API_KEY" \
  -F "[email protected]"

# → 200 OK
{
  "estado": "procesado",
  "confianza": 0.98,
  "formato_detectado": "pdf_nativo",
  "datos": {
    "numero_servicio": "50918273645",
    "nombre_titular": "BENITO PABLO JUAREZ GARCIA",
    "direccion": "AV. HIDALGO 118, CENTRO, 68000 OAXACA DE JUAREZ, OAX.",
    "tarifa": "1C",
    "periodo_facturado": "MAY-JUN 2026",
    "fecha_limite_pago": "2026-07-14",
    "importe": "104.00"
  },
  "analisis_documento": {
    "alterado": false,
    "capas_edicion": 0,
    "texto_superpuesto": false,
    "productor_pdf": "CFE Portal"
  }
}

Coteja los datos ante CFE

Pasas los tres campos que CFE usa para localizar el servicio y tu webhook_url. La API responde en milisegundos con un job_id: no dejamos tu petición HTTP abierta esperando a un tercero.

El importe no es un capricho: CFE lo valida contra el último o penúltimo recibo, así que si coincide, el comprobante es reciente por construcción.

POST /v1/cfe/validaciones

use Illuminate\Support\Facades\Http;

$respuesta = Http::withToken(config('services.verificamex.key'))
    ->post('https://api.verificamex.com/v1/cfe/validaciones', [
        'numero_servicio' => '50918273645',
        'nombre_titular'  => 'BENITO PABLO JUAREZ GARCIA',
        'importe'         => '104',
        'webhook_url'     => route('webhooks.cfe'),
    ]);

$jobId = $respuesta->json('job_id');
// "23133c38d62c" — guárdalo para conciliar el webhook
const respuesta = await fetch("https://api.verificamex.com/v1/cfe/validaciones", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.VMX_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    numero_servicio: "50918273645",
    nombre_titular: "BENITO PABLO JUAREZ GARCIA",
    importe: "104",
    webhook_url: "https://tu-app.mx/webhooks/cfe",
  }),
});

const { job_id } = await respuesta.json();
// "23133c38d62c" — guárdalo para conciliar el webhook
import os, requests

respuesta = requests.post(
    "https://api.verificamex.com/v1/cfe/validaciones",
    headers={"Authorization": f"Bearer {os.environ['VMX_API_KEY']}"},
    json={
        "numero_servicio": "50918273645",
        "nombre_titular": "BENITO PABLO JUAREZ GARCIA",
        "importe": "104",
        "webhook_url": "https://tu-app.mx/webhooks/cfe",
    },
)

job_id = respuesta.json()["job_id"]
# "23133c38d62c" — guárdalo para conciliar el webhook

El veredicto llega a tu endpoint

Cuando CFE responde, hacemos POST a tu webhook_url con el resultado completo. verificado es el booleano que puedes cablear directo a tu motor de decisión; el resto es la evidencia para tu expediente.

Cuando el cotejo procede, datos_oficiales trae el registro tal como lo devuelve CFE y comparacion el contraste campo a campo contra lo que declaró tu cliente.

POST https://tu-app.mx/webhooks/cfe

{
  "job_id": "23133c38d62c",
  "estado": "completado",
  "resultado": {
    "estado": "VALIDADO",
    "verificado": true,
    "mensaje": "El servicio fue localizado en CFE y los datos declarados coinciden con el registro oficial.",
    "codigo_rechazo": null,
    "datos_oficiales": {
      "numero_servicio": "50918273645",
      "nombre_titular": "BENITO PABLO JUAREZ GARCIA",
      "direccion": "AV. HIDALGO 118, CENTRO, 68000 OAXACA DE JUAREZ, OAX.",
      "tarifa": "1C",
      "estatus_servicio": "ACTIVO",
      "periodo_facturado": "MAY-JUN 2026",
      "fecha_limite_pago": "2026-07-14",
      "total_a_pagar": "104.00"
    },
    "comparacion": {
      "numero_servicio": { "coincide": true, "score": 100 },
      "nombre_titular":  { "coincide": true, "score": 100 },
      "importe":         { "coincide": true, "score": 100 }
    },
    "periodo_vigente": {
      "vigente": true,
      "periodo": "MAY-JUN 2026",
      "antiguedad_dias": 23
    },
    "alertas": [],
    "pdf_filename": "comprobante_50918273645.pdf",
    "pdf_base64": "JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBl..."
  }
}
Obtener API key gratis

Qué devuelve la API de comprobante de domicilio

El objeto resultado está diseñado para que tu motor de decisión no tenga que interpretar texto libre.

Campo Tipo Para qué sirve
verificado boolean El único campo que necesitas para aprobar o frenar automáticamente. true sólo si el servicio existe, está activo y los tres datos declarados coinciden.
estado string Veredicto legible: VALIDADO, DATOS_NO_COINCIDEN, SERVICIO_NO_ENCONTRADO o ERROR_FUENTE.
codigo_rechazo string · null Causa exacta del rechazo, para ramificar tu flujo. null cuando verificado es true.
datos_oficiales object · null El registro tal como lo devuelve CFE: titular, dirección del suministro, tarifa, estatus, periodo e importe. Es la evidencia que guardas en el expediente.
comparacion object Contraste campo a campo entre lo declarado y lo oficial, con score de similitud. Útil para tolerar diferencias de acentos o abreviaturas en el nombre.
periodo_vigente object · null Periodo facturado y antiguedad_dias. Te deja aplicar tu propia política de vigencia (por ejemplo, rechazar comprobantes de más de 90 días).
alertas array Señales no bloqueantes que ameritan revisión humana aunque el cotejo haya pasado.
pdf_base64 string · null El comprobante oficial recuperado desde CFE, no el que subió tu cliente. Es el documento que conviene archivar.

Códigos de rechazo y qué fraude representa cada uno

Cada código corresponde a una forma concreta de comprobante falso. Ramifica tu onboarding según cuál llegue.

codigo_rechazo Qué significa en la práctica
IMPORTE_NO_COINCIDE El total declarado no corresponde al último ni al penúltimo recibo del servicio. Casi siempre es un comprobante viejo reciclado o un importe editado.
SERVICIO_NO_ENCONTRADO El número de servicio no existe en CFE. Comprobante inventado con plantilla o RPU mal transcrito.
TITULAR_NO_COINCIDE El servicio existe, pero está a nombre de otra persona. Es el comprobante prestado: el domicilio es real, la relación con tu cliente no.
SERVICIO_INACTIVO El suministro está dado de baja. El domicilio existió, pero hoy nadie vive ahí bajo ese contrato.
DOCUMENTO_ALTERADO El análisis del archivo detectó capas de edición o texto superpuesto sobre el original. Recibo real, retocado.
OCR_ILEGIBLE La imagen no permite extraer los campos mínimos. No es fraude: pide a tu cliente una foto mejor y reintenta.

El comprobante de domicilio es el documento
que todos piden y nadie valida

webhook · comprobante rechazado

{
  "job_id": "23133c38d62c",
  "estado": "completado",
  "resultado": {
    "estado": "DATOS_NO_COINCIDEN",
    "verificado": false,
    "mensaje": "CFE rechazó el registro del servicio: el total a pagar no coincide con nuestro registro, favor de validar la información con su último o penúltimo recibo.",
    "codigo_rechazo": "IMPORTE_NO_COINCIDE",
    "datos_oficiales": null,
    "comparacion": {},
    "alertas": [
      "El importe declarado no corresponde al último ni al penúltimo recibo."
    ],
    "periodo_vigente": null,
    "pdf_base64": null
  }
}

Un recibo de luz se edita con una plantilla en minutos: se cambia el nombre, la dirección o la fecha y pasa cualquier revisión visual. Si tu proceso lo acepta de vista, tu expediente tiene un documento que no prueba nada. Así se ve el momento en que uno de esos comprobantes se cae.

Autenticidad, no apariencia

El veredicto sale del cotejo ante CFE, no de si el documento "se ve bien".

Vigencia confirmada

Como CFE coteja el importe contra el último o penúltimo recibo, un comprobante viejo se cae solo.

Titular real del servicio

Confirma que el domicilio declarado está a nombre de quien dice ser, o detecta el comprobante prestado.

Probar API gratis
Validación de comprobante de domicilio CFE integrada en un onboarding

Características de la API de validación de comprobantes CFE

Todo lo que necesitas para dejar de aceptar comprobantes de domicilio de vista.

OCR de comprobante en PDF, JPG o PNG

Extracción de número de servicio, titular, dirección, tarifa y periodo

Cotejo de titular, importe y vigencia contra el registro de CFE

Detección de PDF alterado: capas de edición y texto superpuesto

Entrega asíncrona por webhook, sin bloquear tu onboarding

Comprobante oficial en PDF para archivar en el expediente

Probar API gratis

Quién usa la API
y qué fraude le detiene

El comprobante de domicilio se pide en casi toda alta. Validarlo cambia lo que ese documento prueba.

Crédito, arrendamiento y altas de clientes

En préstamos y financieras, un domicilio falso vuelve incobrable la cartera: la dirección de cobranza nunca existió. En arrendamiento y proptech, el comprobante prestado o editado es la base del perfil falso del inquilino. En cualquier onboarding con expediente KYC, la validación ante CFE convierte un papel decorativo en evidencia real del domicilio.

Intégralo con la identidad completa

El comprobante validado rinde más junto a la identidad del titular: valida su INE ante la Lista Nominal, su CURP ante RENAPO y extrae los datos de la credencial con OCR de INE en el mismo flujo. Una sola integración, expediente completo.

Integración de la API de comprobante de domicilio CFE en un onboarding digital

Complementa tu expediente con el resto
de las validaciones de identidad

El comprobante de domicilio validado, junto con la identidad del titular, en un solo flujo.

Preguntas frecuentes sobre la API de comprobante de domicilio

Es un servicio que recibe la foto o el PDF de un recibo de CFE, extrae sus datos con OCR y los coteja contra el registro de CFE para confirmar tres cosas: que el servicio existe y está activo, quién es el titular real, y si el comprobante corresponde a un periodo reciente. El veredicto llega en JSON a tu webhook.

El OCR devuelve el número de servicio (RPU), el nombre del titular, la dirección del suministro, la tarifa, el periodo facturado, la fecha límite de pago y el importe total. Funciona tanto sobre el PDF nativo descargado del portal de CFE como sobre la fotografía del recibo impreso.

En dos capas. La primera analiza el documento: capas de edición en el PDF, texto superpuesto, productor del archivo e inconsistencias de formato. La segunda es el cotejo ante CFE: el número de servicio, el titular y el importe se validan contra el registro oficial. Un recibo hecho con plantilla puede verse impecable, pero no corresponde a ningún servicio real y el cotejo lo expone.

Porque CFE valida el importe contra el último o penúltimo recibo del servicio. Ese requisito trabaja a tu favor: si el importe coincide, el comprobante es reciente por construcción, no un recibo de hace tres años reimpreso. Si no coincide, la API responde con el código IMPORTE_NO_COINCIDE, que en la práctica significa comprobante vencido o importe editado.

Tiene que coincidir todo a la vez contra el registro de CFE: el número de servicio, el nombre del titular y el importe exacto del recibo vigente o del penúltimo. Copiar los datos de un recibo real no alcanza, porque el importe cambia cada periodo: un comprobante armado con información correcta pero de hace unos meses ya no cuadra. No se valida cómo se ve el documento, sino que exista un servicio real, a ese nombre, con ese saldo, ahora.

Te entregamos el PDF del comprobante oficial recuperado desde CFE, no el archivo que subió tu cliente ni una reconstrucción de sus datos. Junto con el JSON del veredicto —datos oficiales del servicio, comparación campo a campo y periodo facturado— tu expediente guarda el documento de la fuente y el rastro de cómo se comprobó.

Ambos. El endpoint de OCR acepta PDF, JPG y PNG hasta 10 MB. Si el PDF es el nativo descargado del portal de CFE, la extracción se hace sobre la capa de texto y la confianza es prácticamente total; si es una fotografía, se aplica OCR con corrección de perspectiva. El resto del flujo es idéntico en los dos casos.

Porque la validación consulta a CFE en tiempo real y esa consulta tarda. En vez de dejar tu petición HTTP abierta, la API responde de inmediato con un job_id y te notifica al webhook cuando el veredicto está listo, normalmente en segundos. Así tu onboarding no se bloquea ni depende del tiempo de respuesta de un tercero.

Porque prueban cosas distintas. La INE validada ante la Lista Nominal confirma quién es la persona; el comprobante validado confirma dónde vive de verdad. En crédito y cobranza, el domicilio falso es el que vuelve inlocalizable al deudor; en arrendamiento, es la base del perfil inventado. Un expediente fuerte tiene las dos piezas cotejadas contra su fuente, no una validada y la otra aceptada de vista.

No. El procesamiento se realiza en tiempo real y la información se usa únicamente para la consulta solicitada.

Sí. Al registrarte obtienes tokens de prueba gratis para evaluar la precisión del OCR y el cotejo ante CFE con tus propios comprobantes, antes de integrar nada.

¡Regístrate AHORA!
Obtén tokens de prueba GRATIS

Obtener API key gratis
Valida comprobantes de domicilio CFE gratis con Verificamex