← Catálogo
SAT1 tokenPOST

Validar CFDI

Consulta el estado de un Comprobante Fiscal Digital por Internet (CFDI) directamente con el servicio oficial del SAT a partir del UUID, los RFC del emisor y receptor, y el monto total. Devuelve el código de estatus, si es cancelable, el estado actual del CFDI, el estatus de cancelación y la validación EFOS del emisor.

Endpoint

POSThttps://api.datosnonstop.com/v1/sat/validar-cfdi

Parámetros

json
{
  "uuid": "44E5AF40-8E46-4AFE-BA70-64F5CDB4A6DC",
  "rfcEmisor": "ABC121109B14",
  "rfcReceptor": "DEF900119Q24",
  "monto": 162.1
}
ParámetroTipoRequeridoDescripción
uuidstringFolio fiscal (UUID) de 36 caracteres del CFDI a validar.
rfcEmisorstringRFC del contribuyente que emitió el CFDI (12 caracteres para personas morales, 13 para personas físicas).
rfcReceptorstringRFC del contribuyente que recibió el CFDI (12 caracteres para personas morales, 13 para personas físicas).
montonumberMonto total del CFDI en pesos mexicanos, exactamente como aparece en el comprobante.

Ejemplo rápido

Coloca tu API key en el header x-api-key y agrega el header Content-Type: application/json para enviar el body como JSON.

curl
curl -X POST https://api.datosnonstop.com/v1/sat/validar-cfdi \
  -H "x-api-key: tu_api_key" \
  -H "Content-Type: application/json" \
  -d '{"uuid":"44E5AF40-8E46-4AFE-BA70-64F5CDB4A6DC","rfcEmisor":"ABC121109B14","rfcReceptor":"DEF900119Q24","monto":162.1}'

Tip

¿Sabías que al pegar un cURL en Postman te crea automáticamente la llamada con todos los elementos?

Token

Cada consulta consume tokens. Lo que no uses, lo conservas — tu saldo se acumula sin fecha de vencimiento ni reinicios. Puedes consultarlo en cualquier momento desde el dashboard o directamente en el header de cada respuesta x-tokens-remaining.

Respuesta

JSON
200 OK
{
  "id": "63b5c073cd0f651ec4322403",
  "status": "found",
  "uuid": "44E5AF40-8E46-4AFE-BA70-64F5CDB4A6DC",
  "rfcEmisor": "ABC121109B14",
  "rfcReceptor": "DEF900119Q24",
  "monto": 162.1,
  "codigoEstatus": "S - Comprobante obtenido satisfactoriamente.",
  "esCancelable": "Cancelable sin aceptación",
  "estado": "Vigente",
  "estatusCancelacion": "",
  "validacionEfos": "200"
}

Respuestas en error

JSON
400 Bad Request
[
  {
    "type": "format",
    "message": "El formato del campo es inválido",
    "field": "uuid"
  },
  {
    "type": "format",
    "message": "El formato del campo es inválido",
    "field": "rfcEmisor"
  },
  {
    "type": "required",
    "message": "El campo es requerido",
    "field": "monto"
  }
]

Campos

Campos de entrada

CampoTipoDescripción
uuidstringFolio fiscal del CFDI en formato UUID estándar (8-4-4-4-12 caracteres hexadecimales separados por guiones). Acepta tanto mayúsculas como minúsculas.
rfcEmisorstringRFC del contribuyente que emitió el CFDI. 12 caracteres para personas morales, 13 para personas físicas.
rfcReceptorstringRFC del contribuyente a favor del cual se expidió el CFDI. 12 caracteres para personas morales, 13 para personas físicas.
montonumberMonto total del CFDI en pesos mexicanos. Debe coincidir exactamente con el valor del campo Total del comprobante.

Campos de respuesta

CampoTipoDescripción
idstringIdentificador interno de la consulta, útil para soporte y trazabilidad.
statusstringResultado de la consulta del CFDI en el SAT. Ver catálogo Status.
uuidstringFolio fiscal consultado (UUID de 36 caracteres).
rfcEmisorstringRFC del emisor enviado en la consulta.
rfcReceptorstringRFC del receptor enviado en la consulta.
montonumberMonto total del CFDI enviado en la consulta.
messagestringDetalle del motivo cuando status es not_found. Solo está presente en respuestas not_found.
codigoEstatusstringCódigo de estatus devuelto por el servicio del SAT al consultar el CFDI. Solo está presente cuando status es found. Ver catálogo Código de estatus.
esCancelablestringCondición de cancelación del CFDI según el SAT. Solo está presente cuando status es found. Ver catálogo Es cancelable.
estadostringEstado actual del CFDI en el SAT. Solo está presente cuando status es found. Ver catálogo Estado.
estatusCancelacionstringDetalle del estatus de cancelación cuando estado es Cancelado. Cadena vacía cuando el CFDI sigue vigente. Ver catálogo Estatus de cancelación.
validacionEfosstringResultado de la verificación del emisor en la lista de Empresas que Facturan Operaciones Simuladas (artículo 69-B del CFF). Solo está presente cuando status es found. Ver catálogo Validación EFOS.

Catálogos

Tablas de referencia para los valores de los campos enumerados en la sección anterior.

Status

Valores posibles del campo status.

ValorDescripción
foundEl CFDI fue localizado en el SAT con los datos enviados. La respuesta incluye el código de estatus, condición de cancelación, estado, estatus de cancelación y validación EFOS.
not_foundEl CFDI no fue localizado en el SAT con los datos enviados. La respuesta incluye el campo message con el detalle.

Código de estatus

Valores posibles del campo codigoEstatus que reporta el SAT al consultar el CFDI.

ValorDescripción
S - Comprobante obtenido satisfactoriamente.El SAT localizó el comprobante con los datos enviados y devolvió la información de validación.
N - 601: La expresión impresa proporcionada no es válida.El SAT no pudo validar el comprobante con los datos enviados (UUID, RFC del emisor, RFC del receptor o monto incorrectos).

Es cancelable

Valores posibles del campo esCancelable según las reglas de cancelación de CFDI 4.0.

ValorDescripción
Cancelable sin aceptaciónEl emisor puede cancelar el CFDI sin requerir la aprobación del receptor.
Cancelable con aceptaciónEl emisor solo puede cancelar el CFDI si el receptor aprueba la solicitud en el Buzón Tributario.
No cancelableEl CFDI no puede ser cancelado en este momento conforme a las reglas del SAT.

Estado

Valores posibles del campo estado que reporta el SAT sobre la vigencia del CFDI.

ValorDescripción
VigenteEl CFDI se encuentra activo y no ha sido cancelado.
CanceladoEl CFDI ha sido cancelado ante el SAT. El detalle del proceso aparece en estatusCancelacion.

Estatus de cancelación

Valores posibles del campo estatusCancelacion cuando el CFDI fue cancelado. Es una cadena vacía cuando el CFDI sigue vigente.

ValorDescripción
El CFDI no ha sido cancelado (estado Vigente).
Cancelado sin aceptaciónEl CFDI fue cancelado por el emisor sin requerir la aprobación del receptor.
Cancelado con aceptaciónEl CFDI fue cancelado por el emisor con la aprobación expresa del receptor en el Buzón Tributario.
Plazo vencidoEl CFDI fue cancelado al vencer el plazo de respuesta del receptor sin que se manifestara una aceptación o rechazo.

Validación EFOS

Resultado del campo validacionEfos al verificar al emisor en el listado de contribuyentes con operaciones presuntamente inexistentes (EFOS, artículo 69-B del CFF).

ValorDescripción
200El emisor no aparece en el listado EFOS publicado por el SAT.
PRESUNTOEl emisor está en la lista preliminar de Empresas que Facturan Operaciones Simuladas (presuntos).
DESVIRTUADOEl emisor desvirtuó la presunción de operaciones inexistentes y fue retirado de la lista.
DEFINITIVOEl emisor fue confirmado como Empresa que Factura Operaciones Simuladas en la lista definitiva.
SENTENCIA FAVORABLEEl emisor obtuvo una sentencia favorable que lo retiró de la lista definitiva.
GLOSADOEl emisor fue retirado de la lista definitiva por revisión administrativa.

Histórico

Endpoint

GEThttps://api.datosnonstop.com/v1/sat/validar-cfdi/historico/{id}

El {id} corresponde al campo id devuelto en la respuesta de la consulta principal.

Si necesitas la lista completa de elementos almacenados, accede a tu dashboard.

La respuesta está sujeta al tiempo de almacenamiento de tu plan. Si requieres más tiempo, cambia de plan en tu dashboard.

Respuesta

JSON
200 OK
{
  "id": "63b5c073cd0f651ec4322403",
  "status": "found",
  "uuid": "44E5AF40-8E46-4AFE-BA70-64F5CDB4A6DC",
  "rfcEmisor": "ABC121109B14",
  "rfcReceptor": "DEF900119Q24",
  "monto": 162.1,
  "codigoEstatus": "S - Comprobante obtenido satisfactoriamente.",
  "esCancelable": "Cancelable sin aceptación",
  "estado": "Vigente",
  "estatusCancelacion": "",
  "validacionEfos": "200"
}

Respuestas en error

JSON
404 Not Found
[
  {
    "type": "not_found",
    "message": "el id no fue encontrado en el historico"
  }
]

Sandbox

Endpoint

POSThttps://sandbox.api.datosnonstop.com/v1/sat/validar-cfdi

Para llamar al sandbox necesitas una API key de sandbox que puedes generar en el dashboard.

curl
curl -X POST https://sandbox.api.datosnonstop.com/v1/sat/validar-cfdi \
  -H "x-api-key: tu_api_key_sandbox" \
  -H "Content-Type: application/json" \
  -d '{"uuid":"44E5AF40-8E46-4AFE-BA70-64F5CDB4A6DC","rfcEmisor":"ABC121109B14","rfcReceptor":"DEF900119Q24","monto":162.1}'

Casos de prueba

Si envías un valor que no esté en la lista, el sandbox devuelve automáticamente una respuesta exitosa con la misma estructura que la de ABC121109B14.

CasoCamporfcEmisor
Caso exitoso — EncontradorfcEmisorABC121109B14
Caso exitoso — No encontradorfcEmisorABD131110A27
Sin tokensrfcEmisorCCCC000000C03
Error internorfcEmisorDDDD000000D04
Unavailable servicerfcEmisorEEEE000000E05

Endpoint histórico

GEThttps://sandbox.api.datosnonstop.com/v1/sat/validar-cfdi/historico/{id}

Para llamar al sandbox necesitas una API key de sandbox que puedes generar en el dashboard.

curl
curl https://sandbox.api.datosnonstop.com/v1/sat/validar-cfdi/historico/63b5c073cd0f651ec4322403 \
  -H "x-api-key: tu_api_key_sandbox"

Casos de prueba histórico

Si envías un valor de id que no esté en la lista, el sandbox devuelve automáticamente una respuesta exitosa con la misma estructura que la de 63b5c073cd0f651ec4322403.

Casoid
Caso exitoso63b5c073cd0f651ec4322403
No encontrado0000000000000000ffffffff
Fuera de rango1111111111111111aaaaaaaa
Error interno2222222222222222bbbbbbbb