Referencia · Timbrar

TimbrarCfdiObj

Arma el XML desde un JSON, lo sella con tu CSD y lo timbra.
POST/api/TimbrarCfdiObj

Mandas el comprobante con los nombres del Anexo 20 del SAT. El servicio arma el XML, lo sella con el CSD que cargaste para el RFC del emisor y lo timbra.

La misma factura dos veces responde 506 con el mismo UUID: reintentar nunca timbra doble.

Lo que mandas

CampoPara qué
comprobanteobligatorioobjetoEl CFDI 4.0: Emisor, Receptor, Conceptos, Impuestos y sus complementos. Las llaves no distinguen mayúsculas.
retencionesobjetoUn CFDI de Retenciones 2.0, en lugar de comprobante.
obtenerPDFbooleanoRegresa también el PDF en PDFBase64.
user · passwordtextoPor compatibilidad con el servicio anterior. Si viene user, debe ser el de tu autenticación.

Lo que regresa

CampoPara qué
Codigotexto«100» timbrado, «506» ya estaba timbrado; cualquier otro, el rechazo.
MensajetextoQué pasó, en español. En un rechazo, la regla del SAT que no se cumplió.
UUIDtextoEl folio fiscal. Sólo con 100 o 506.
XMLBase64base64El CFDI timbrado, completo. Sólo con 100 o 506.
PDFBase64base64El PDF, si lo pediste con obtenerPDF; si no, null.
IdSeguimientotextoLa huella del comprobante: con ella preguntas después por su desenlace (seguimientoCFDI).

Códigos

CódigoHTTPQué significa
100200Timbrado.
506200Ya estaba timbrado: el mismo UUID y el mismo XML. Trátalo como éxito.
301200El comprobante no se pudo armar; el mensaje dice qué campo.
CFDI40xxx…200Una regla del SAT no se cumple (la matriz de validaciones); el mensaje dice cuál.
500200No hay CSD cargado para el RFC del emisor, o no abre.
500503No se sabe si se timbró, o no se pudo enviar. Reintenta con el mismo comprobante.
102401Usuario o contraseña inválidos.
105200No tienes timbres disponibles (sólo en producción). Compra en tu portal y manda el mismo comprobante: no se gastó nada.

Ejemplo

curl https://pruebas.timbrado.idea15.com/api/TimbrarCfdiObj \
  -u "$DUBSARIA_USUARIO:$DUBSARIA_CLAVE" \
  -H "Content-Type: application/json" \
  -d @factura.json
Respuesta real en pruebas · HTTP 200
{
  "Codigo": "100",
  "Mensaje": "Comprobante timbrado exitosamente",
  "UUID": "988B5F3A-889E-4C9C-BAC7-0FEE99589858",
  "XMLBase64": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxj…",
  "PDFBase64": null,
  "IdSeguimiento": "8ce2fefe4ebfae89987a6b49d2f4acbf09542845e2be24e0091cb3aa9ad00d43"
}

Para tener en cuenta

  • Los importes van como texto («116.00»): se copian al XML tal cual, sin redondear.
  • Espera hasta 70 segundos: el servicio se rinde con el PAC antes y te responde.