Referencia · Timbrar
TimbrarCfdiObj
Arma el XML desde un JSON, lo sella con tu CSD y lo timbra.
POST
/api/TimbrarCfdiObjMandas 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
| Campo | Para qué |
|---|---|
comprobanteobligatorioobjeto | El CFDI 4.0: Emisor, Receptor, Conceptos, Impuestos y sus complementos. Las llaves no distinguen mayúsculas. |
retencionesobjeto | Un CFDI de Retenciones 2.0, en lugar de comprobante. |
obtenerPDFbooleano | Regresa también el PDF en PDFBase64. |
user · passwordtexto | Por compatibilidad con el servicio anterior. Si viene user, debe ser el de tu autenticación. |
Lo que regresa
| Campo | Para qué |
|---|---|
Codigotexto | «100» timbrado, «506» ya estaba timbrado; cualquier otro, el rechazo. |
Mensajetexto | Qué pasó, en español. En un rechazo, la regla del SAT que no se cumplió. |
UUIDtexto | El folio fiscal. Sólo con 100 o 506. |
XMLBase64base64 | El CFDI timbrado, completo. Sólo con 100 o 506. |
PDFBase64base64 | El PDF, si lo pediste con obtenerPDF; si no, null. |
IdSeguimientotexto | La huella del comprobante: con ella preguntas después por su desenlace (seguimientoCFDI). |
Códigos
| Código | HTTP | Qué significa |
|---|---|---|
| 100 | 200 | Timbrado. |
| 506 | 200 | Ya estaba timbrado: el mismo UUID y el mismo XML. Trátalo como éxito. |
| 301 | 200 | El comprobante no se pudo armar; el mensaje dice qué campo. |
| CFDI40xxx… | 200 | Una regla del SAT no se cumple (la matriz de validaciones); el mensaje dice cuál. |
| 500 | 200 | No hay CSD cargado para el RFC del emisor, o no abre. |
| 500 | 503 | No se sabe si se timbró, o no se pudo enviar. Reintenta con el mismo comprobante. |
| 102 | 401 | Usuario o contraseña inválidos. |
| 105 | 200 | No 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.jsonRespuesta 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.
