Documentación de la API

La API recibe un CFDI 4.0 ya sellado (sin timbrar), lo timbra y te regresa el XML timbrado. Funciona con cualquier lenguaje que pueda hacer una petición HTTPS con JSON.

Dirección
https://ws.timbrando.mx/api/v1/
Formato
JSON en UTF-8 (Content-Type: application/json)
Acceso
Usuario y password que te entrega tu proveedor
Tamaño máximo
10 MB por petición

Modo pruebas y producción

Todo usuario nuevo empieza en modo pruebas: puedes timbrar con tu RFC real para integrar tu sistema, pero los timbres no tienen validez fiscal y no se cobran. Cuando estés listo, tu proveedor te pasa a producción; tu usuario y password no cambian. Todas las respuestas traen el campo "modo" (pruebas o produccion) para que sepas si el timbre es real.

Timbrar: POST /api/v1/timbrar

Petición:

{
  "usuario": "tu_usuario",
  "password": "tu_password",
  "xml_base64": "PD94bWwgdmVyc2lvbj0iMS4wIi...",
  "referencia": "FAC-1234"
}
CampoDescripción
usuario, passwordTus credenciales. También puedes mandarlas por HTTP Basic Auth (encabezado Authorization).
xml_base64El XML del CFDI 4.0 sellado, codificado en base64.
referenciaOpcional. Tu folio interno (máx. 100 caracteres), para rastrear el movimiento.

Respuesta exitosa (HTTP 200):

{
  "ok": true,
  "uuid": "6F1A2B3C-0000-4000-8000-1234567890AB",
  "fecha_timbrado": "2026-10-21T12:00:00",
  "xml_timbrado_base64": "PD94bWwg...",
  "id_movimiento": 1234,
  "modo": "produccion"
}

Importante: este servicio no guarda tus XML. Guarda el xml_timbrado_base64 en tu sistema en cuanto lo recibas.

Respuesta con error (todas tienen el mismo formato):

{
  "ok": false,
  "origen": "edicom",
  "codigo": "CFDI40102",
  "mensaje": "Texto del error",
  "id_movimiento": 1235,
  "modo": "produccion"
}

Códigos de respuesta

HTTPorigenQué significa¿Se cobra?
200—Timbrado correctamente.Sí (en producción)
400validacionPetición inválida: base64 inválido, XML mal formado, no es CFDI 4.0, RFC no dado de alta o sin permiso.No
401autenticacionUsuario o password incorrectos.No
403autenticacion / validacionUsuario bloqueado o desactivado; servicio suspendido para el RFC; límite mensual alcanzado.No
409duplicadoEse mismo XML ya se timbró. Se regresan uuid y fecha_timbrado anteriores; busca el XML en tu sistema.No
422edicomEl PAC o el SAT rechazó el comprobante. codigo y mensaje son los que regresó EDICOM, tal cual.No
429servicioDemasiadas peticiones por minuto; espera un momento.No
503servicioEl PAC no respondió. Si codigo es SIN_RESPUESTA, puede que sí se haya timbrado: no lo reenvíes sin confirmar con tu proveedor.No, salvo que se confirme

Códigos propios de validacion y autenticacion:

codigoDescripción
PETICION_INVALIDAEl cuerpo no es JSON.
SIN_CREDENCIALES, CREDENCIALES_INVALIDASFaltan o no son correctos el usuario y el password.
USUARIO_BLOQUEADODemasiados intentos con password incorrecto; espera unos minutos.
USUARIO_INACTIVOEl usuario fue desactivado.
SIN_XML, BASE64_INVALIDO, XML_MUY_GRANDEProblema con el campo xml_base64.
XML_INVALIDOXML mal formado o que no es CFDI 4.0 (el mensaje dice por qué).
YA_TIMBRADOEl XML ya trae un TimbreFiscalDigital.
RFC_NO_REGISTRADO, RFC_NO_AUTORIZADO, RFC_INACTIVOEl RFC emisor no está dado de alta, tu usuario no tiene permiso para timbrarlo, o está desactivado.
SERVICIO_SUSPENDIDOServicio suspendido para ese RFC; contacta a tu proveedor.
LIMITE_MENSUALSe alcanzó el límite mensual de timbres.
DUPLICADOEse XML ya fue timbrado (HTTP 409).

Probar la conexión: GET /api/v1/estado

Con HTTP Basic Auth. Regresa tu modo, los timbres del mes y los RFC que puedes timbrar.

curl -u tu_usuario:tu_password https://ws.timbrando.mx/api/v1/estado
{
  "ok": true,
  "usuario": "tu_usuario",
  "cliente": "Transportes Ejemplo SA de CV",
  "modo": "pruebas",
  "timbres_mes": 12,
  "rfcs": [{"rfc": "EKU9003173C9", "cliente": "Transportes Ejemplo SA de CV", "activo": true}]
}

Ejemplos

# Linux / macOS
XML64=$(base64 -w0 factura.xml)
curl -sS -X POST https://ws.timbrando.mx/api/v1/timbrar \
  -H "Content-Type: application/json" \
  -d "{\"usuario\":\"tu_usuario\",\"password\":\"tu_password\",\"xml_base64\":\"$XML64\",\"referencia\":\"FAC-1234\"}"

Recomendaciones