{"openapi":"3.1.0","info":{"title":"idea15 Timbrado","version":"1.0.0","description":"Timbra CFDI 4.0 y Retenciones 2.0 con una sola petición. Todos los métodos son POST con cuerpo JSON y autenticación básica. HTTP 200 es un desenlace (Codigo 100 timbrado, 506 ya estaba timbrado, otro: rechazo); HTTP 503 es «no se sabe»: reintenta con el mismo cuerpo."},"servers":[{"url":"https://pruebas.timbrado.idea15.com","description":"Pruebas"},{"url":"https://timbrado.idea15.com","description":"Producción"}],"security":[{"basica":[]}],"components":{"securitySchemes":{"basica":{"type":"http","scheme":"basic"}}},"paths":{"/api/TimbrarCfdiObj":{"post":{"operationId":"TimbrarCfdiObj","summary":"Arma el XML desde un JSON, lo sella con tu CSD y lo timbra.","description":"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.\n\nLa misma factura dos veces responde 506 con el mismo UUID: reintentar nunca timbra doble.","tags":["Timbrar"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"comprobante":{"type":"object","additionalProperties":true,"description":"El CFDI 4.0: Emisor, Receptor, Conceptos, Impuestos y sus complementos. Las llaves no distinguen mayúsculas."},"retenciones":{"type":"object","additionalProperties":true,"description":"Un CFDI de Retenciones 2.0, en lugar de comprobante."},"obtenerPDF":{"type":"boolean","description":"Regresa también el PDF en PDFBase64."},"user":{"type":"string","description":"Por compatibilidad con el servicio anterior. Si viene user, debe ser el de tu autenticación."},"password":{"type":"string","description":"Por compatibilidad con el servicio anterior. Si viene user, debe ser el de tu autenticación."}},"required":["comprobante"]},"example":{"comprobante":{"Exportacion":"01","LugarExpedicion":"94734","MetodoPago":"PUE","TipoDeComprobante":"I","Total":"116.00","Moneda":"MXN","SubTotal":"100.00","FormaPago":"03","Fecha":"2026-10-29T21:19:05","Folio":"1","Serie":"PRUEBA","Emisor":{"Rfc":"EKU9003173C9","Nombre":"ESCUELA KEMPER URGATE","RegimenFiscal":"601"},"Receptor":{"Rfc":"EKU9003173C9","Nombre":"ESCUELA KEMPER URGATE","UsoCFDI":"G03","RegimenFiscalReceptor":"601","DomicilioFiscalReceptor":"94734"},"Conceptos":[{"ClaveProdServ":"84111506","Cantidad":"1","ClaveUnidad":"E48","Descripcion":"Servicio de prueba","ValorUnitario":"100.00","Importe":"100.000000","ObjetoImp":"02","Impuestos":{"Traslados":[{"Base":"100.000000","Impuesto":"002","TipoFactor":"Tasa","TasaOCuota":"0.160000","Importe":"16.000000"}]}}],"Impuestos":{"Traslados":[{"Base":"100.00","Impuesto":"002","TipoFactor":"Tasa","TasaOCuota":"0.160000","Importe":"16.00"}],"TotalImpuestosTrasladados":"16.00"}}}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» timbrado, «506» ya estaba timbrado; cualquier otro, el rechazo."},"Mensaje":{"type":"string","description":"Qué pasó, en español. En un rechazo, la regla del SAT que no se cumplió."},"UUID":{"type":"string","description":"El folio fiscal. Sólo con 100 o 506."},"XMLBase64":{"type":"string","contentEncoding":"base64","description":"El CFDI timbrado, completo. Sólo con 100 o 506."},"PDFBase64":{"type":"string","contentEncoding":"base64","description":"El PDF, si lo pediste con obtenerPDF; si no, null."},"IdSeguimiento":{"type":"string","description":"La huella del comprobante: con ella preguntas después por su desenlace (seguimientoCFDI)."}}},"example":{"Codigo":"100","Mensaje":"Comprobante timbrado exitosamente","UUID":"988B5F3A-889E-4C9C-BAC7-0FEE99589858","XMLBase64":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxj…","PDFBase64":null,"IdSeguimiento":"8ce2fefe4ebfae89987a6b49d2f4acbf09542845e2be24e0091cb3aa9ad00d43"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/selladoTimbCFDI":{"post":{"operationId":"selladoTimbCFDI","summary":"Sella y timbra un CFDI 4.0 que ya armaste.","description":"Para cuando tu sistema ya arma el XML. Lo mandas sin sello; el servicio pone NoCertificado, Certificado y Sello con tu CSD y lo timbra.","tags":["Timbrar"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"xmlBase64":{"type":"string","contentEncoding":"base64","description":"El XML del CFDI 4.0 en base64, sin sello."},"obtenerPDF":{"type":"boolean","description":"Regresa también el PDF en PDFBase64."}},"required":["xmlBase64"]},"example":{"xmlBase64":"<factura.xml en base64>","obtenerPDF":false}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» timbrado, «506» ya estaba timbrado; cualquier otro, el rechazo."},"Mensaje":{"type":"string","description":"Qué pasó, en español. En un rechazo, la regla del SAT que no se cumplió."},"UUID":{"type":"string","description":"El folio fiscal. Sólo con 100 o 506."},"XMLBase64":{"type":"string","contentEncoding":"base64","description":"El CFDI timbrado, completo. Sólo con 100 o 506."},"PDFBase64":{"type":"string","contentEncoding":"base64","description":"El PDF, si lo pediste con obtenerPDF; si no, null."},"IdSeguimiento":{"type":"string","description":"La huella del comprobante: con ella preguntas después por su desenlace (seguimientoCFDI)."}}},"example":{"Codigo":"100","Mensaje":"Comprobante timbrado exitosamente","UUID":"BD96D7AB-C6DD-442D-A1DA-FA12D107771B","XMLBase64":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxj…","PDFBase64":null,"IdSeguimiento":"3a05d5e9e99dcdb8796d2792732b5fc3f8640d7cea6311d5f0b8e34cee77ae61"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/TimbradoCFDI":{"post":{"operationId":"TimbradoCFDI","summary":"Timbra un CFDI o una Retención que tú ya sellaste con tu CSD.","description":"Para cuando tu sistema sella por su cuenta y no quieres guardar tu sello aquí. Mandas el XML ya sellado, CFDI 4.0 o Retenciones 2.0, y el servicio lo timbra tal como llega: el mismo texto, con tu Addenda si trae una.\n\nAntes de mandarlo al PAC se revisa que el sello sea de un CSD del emisor y que firme este comprobante. Si algo cambió después de sellarlo, responde 302 sin gastar el envío.\n\nPara cancelar sí necesitas tu sello en la cuenta: cárgalo con CargarCertificado.","tags":["Timbrar"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"xmlBase64":{"type":"string","contentEncoding":"base64","description":"El XML ya sellado (con Sello, Certificado y NoCertificado), en UTF-8."},"obtenerPDF":{"type":"boolean","description":"Regresa también el PDF en PDFBase64."}},"required":["xmlBase64"]},"example":{"xmlBase64":"<factura-sellada.xml en base64>","obtenerPDF":false}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» timbrado, «506» ya estaba timbrado; cualquier otro, el rechazo."},"Mensaje":{"type":"string","description":"Qué pasó, en español. En un rechazo, la regla del SAT que no se cumplió."},"UUID":{"type":"string","description":"El folio fiscal. Sólo con 100 o 506."},"XMLBase64":{"type":"string","contentEncoding":"base64","description":"El CFDI timbrado, completo. Sólo con 100 o 506."},"PDFBase64":{"type":"string","contentEncoding":"base64","description":"El PDF, si lo pediste con obtenerPDF; si no, null."},"IdSeguimiento":{"type":"string","description":"La huella del comprobante: con ella preguntas después por su desenlace (seguimientoCFDI)."}}},"example":{"Codigo":"100","Mensaje":"Comprobante timbrado exitosamente","UUID":"A85C5E3B-7D9A-42A6-90C7-8757A7E5CC60","XMLBase64":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxj…","PDFBase64":null,"IdSeguimiento":"acc8643f7d06074425938d5e078926620e4f6402e926cacc11288fd7381d70a5"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/seguimientoCFDI":{"post":{"operationId":"seguimientoCFDI","summary":"El desenlace de un timbrado por su IdSeguimiento, sin volver a mandarlo.","description":"Cada respuesta de timbrado trae su IdSeguimiento. Con él preguntas qué pasó con un comprobante que quedó en duda o con una factura grande que se sigue validando.\n\nSi quedó en duda, el servicio lo busca en el PAC por su huella. Nunca lo vuelve a enviar.","tags":["Timbrar"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"IdSeguimiento":{"type":"string","description":"El que regresó la respuesta del timbrado (64 caracteres)."}},"required":["IdSeguimiento"]},"example":{"IdSeguimiento":"8ce2fefe4ebfae89987a6b49d2f4acbf09542845e2be24e0091cb3aa9ad00d43"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» timbrado, «506» ya estaba timbrado; cualquier otro, el rechazo."},"Mensaje":{"type":"string","description":"Qué pasó, en español. En un rechazo, la regla del SAT que no se cumplió."},"UUID":{"type":"string","description":"El folio fiscal. Sólo con 100 o 506."},"XMLBase64":{"type":"string","contentEncoding":"base64","description":"El CFDI timbrado, completo. Sólo con 100 o 506."},"PDFBase64":{"type":"string","contentEncoding":"base64","description":"El PDF, si lo pediste con obtenerPDF; si no, null."},"IdSeguimiento":{"type":"string","description":"La huella del comprobante: con ella preguntas después por su desenlace (seguimientoCFDI)."}}},"example":{"Codigo":"100","Mensaje":"Comprobante timbrado exitosamente","UUID":"988B5F3A-889E-4C9C-BAC7-0FEE99589858","XMLBase64":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxj…","PDFBase64":null,"IdSeguimiento":"8ce2fefe4ebfae89987a6b49d2f4acbf09542845e2be24e0091cb3aa9ad00d43"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/CargarCertificado":{"post":{"operationId":"CargarCertificado","summary":"Guarda el CSD de un RFC para tu cuenta, cifrado.","description":"Se carga una vez por RFC; cargar otro lo reemplaza. Antes de guardarlo se revisa todo: que la llave abra con su contraseña, que corresponda al certificado, que sea un CSD y no la e.firma, que esté vigente y que sea del RFC que dices.\n\nLa llave y su contraseña se guardan cifradas (AES-256-GCM). Sólo tu cuenta puede usar ese sello.","tags":["Sellos"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"certificadoBase64":{"type":"string","contentEncoding":"base64","description":"El archivo .cer."},"llaveBase64":{"type":"string","contentEncoding":"base64","description":"El archivo .key."},"password_Llave":{"type":"string","description":"La contraseña de la llave."},"rfc_certificado":{"type":"string","description":"Si lo mandas, el certificado debe ser de ese RFC."}},"required":["certificadoBase64","llaveBase64","password_Llave"]},"example":{"certificadoBase64":"<EKU9003173C9.cer en base64>","llaveBase64":"<EKU9003173C9.key en base64>","password_Llave":"<CLAVE_LLAVE>"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» si se guardó."},"Mensaje":{"type":"string","description":"Qué pasó; en un error, qué revisar."}}},"example":{"Codigo":"100","Mensaje":"Certificado cargado exitosamente."}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."}}}},"/api/datosCertificado":{"post":{"operationId":"datosCertificado","summary":"RFC, nombre, serie y vigencia del sello que cargaste.","description":"Para saber qué sello tiene tu cuenta para un RFC y cuándo vence. Sólo ves los sellos que cargó tu cuenta.","tags":["Sellos"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rfc_certificado":{"type":"string","description":"El RFC del sello."}},"required":["rfc_certificado"]},"example":{"rfc_certificado":"EKU9003173C9"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» si existe."},"Mensaje":{"type":"string","description":"Qué pasó."},"RFC":{"type":"string","description":"El RFC del sello."},"NomRazonSocial":{"type":"string","description":"El nombre del titular."},"NoCertificado":{"type":"string","description":"La serie del certificado (20 dígitos)."},"InicioVigencia":{"type":"string","description":"Desde y hasta cuándo sirve."},"FinVigencia":{"type":"string","description":"Desde y hasta cuándo sirve."},"TipoCertificado":{"type":"string","description":"Siempre «CSD»."}}},"example":{"Codigo":"100","Mensaje":"Datos recuperados exitosamente.","RFC":"EKU9003173C9","NomRazonSocial":"ESCUELA KEMPER URGATE","NoCertificado":"30001000000500003416","InicioVigencia":"2023-05-18 11:43:51 AM","FinVigencia":"2027-05-18 11:43:51 AM","TipoCertificado":"CSD"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."}}}},"/api/cancelarCFDI":{"post":{"operationId":"cancelarCFDI","summary":"Pide al SAT la cancelación de un CFDI, firmada con tu CSD.","description":"La solicitud se firma con el sello que cargaste para el RFC emisor. El SAT responde de inmediato si la recibió; si el CFDI necesita que el receptor la acepte, queda en proceso hasta que conteste.\n\nPara saber cómo terminó, consulta su estatus con consultarEstatusCFDI.","tags":["Cancelar y consultar"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rfcEmisor":{"type":"string","description":"El RFC del emisor del CFDI."},"uuid":{"type":"string","description":"El folio fiscal a cancelar."},"motivo":{"type":"string","description":"01 con errores con relación, 02 con errores sin relación, 03 no se llevó a cabo, 04 operación nominativa en una factura global."},"uuidRelacionado":{"type":"string","description":"El CFDI que lo sustituye. Obligatorio con el motivo 01."},"rfcReceptor":{"type":"string","description":"Se aceptan por compatibilidad con el servicio anterior."},"total":{"type":"string","description":"Se aceptan por compatibilidad con el servicio anterior."}},"required":["rfcEmisor","uuid","motivo"]},"example":{"rfcEmisor":"EKU9003173C9","rfcReceptor":"EKU9003173C9","uuid":"988B5F3A-889E-4C9C-BAC7-0FEE99589858","total":"116.00","motivo":"02","uuidRelacionado":""}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"El código del SAT (201, 202, 203, 204 o 205)."},"Mensaje":{"type":"string","description":"Qué significa."},"Acuse":{"type":"string","description":"El acuse del SAT, en XML."}}},"example":{"Codigo":"205","Mensaje":"El SAT no tiene registrado este folio fiscal","Acuse":"<Acuse Fecha=\"2026-10-29T21:24:26.5212341\" RfcEmisor=\"EKU9003173C9\"><Folios xmlns=\"http://cancelacfd.sat.gob.mx\"><UUID>988B5F3A-889E-4C9C-BAC7-0FEE99589858</UUID><EstatusUUID>205</EstatusUUID></Folios><Signature Id=\"SelloSAT\" xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><SignedInfo><CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/><SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#hmac-sha512\"/><Reference URI=\"\"><Transforms><Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xpath-19991116\"><XPath>not(ancestor-or-self::*[local-name()='Signature'])</XPath></Transform></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha512\"/><DigestValue>+FR9CVmLaeOCE5bd7MLMgIaM3pe9DvC9wmAn107QQJ8Mc22Z3sNoPMnFEFgpfqp+bmeerW6DuwY+OKOLA9Z8/g==</DigestValue></Reference></SignedInfo><SignatureValue>oK8NmWydi+tEK/TMYQfeQPzs7pFBh1RxOUhXi+PN0GlY4BLjItZIWKnstGWJ+EnrBuj3CywB9uGGVa1vSPpd6Q==</SignatureValue><KeyInfo><KeyName>30001000000500002554</KeyName><KeyValue><RSAKeyValue><Modulus>hUcUOoGEtSDAlrF8KegQkGKY8aDAe9tNRkf48uj1+YirDP4cMEd8YEelQY1jLu1GINYKf9N9XxmOfHdL4FUr+cuOgrBviaGWcIsJfZ80IGpvox6kUSHoRt+h32yQayW0HuNOp0b3yiBp9Y6jTdYTFTAVzgzUjf4LfVt8n5FejVZ2xERIyROnGgbK8A4xBsPpFazHQkK2PCiYe+LYBm0Ux9UZYkYJ9Mu9rL5c51Sjgq8JJekorp0BzfKadRrSEFyD2Z6GwB0RswjLZQspojZGxUnqlbldvO6TjFUV4MT7EV8P7f2VTS0yr4qSwx0y080zoK10CbIoJXfsFROHypFj5w==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue></KeyInfo></Signature></Acuse>"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/consultarEstatusCFDI":{"post":{"operationId":"consultarEstatusCFDI","summary":"El estado de un CFDI en el SAT: vigente, cancelado y si se puede cancelar.","description":"Se consulta directo en el servicio público del SAT; si no contesta, por el PAC.","tags":["Cancelar y consultar"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"string","description":"El folio fiscal."},"rfcEmisor":{"type":"string","description":"El RFC del emisor."},"rfcReceptor":{"type":"string","description":"El RFC del receptor."},"total":{"type":"string","description":"El total del CFDI."}},"required":["uuid","rfcEmisor","rfcReceptor","total"]},"example":{"uuid":"988B5F3A-889E-4C9C-BAC7-0FEE99589858","rfcEmisor":"EKU9003173C9","rfcReceptor":"EKU9003173C9","total":"116.00"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» si el SAT lo conoce, «602» si no."},"Mensaje":{"type":"string","description":"La respuesta del SAT."},"Operacion":{"type":"boolean","description":"true si el SAT lo conoce (como en el servicio anterior)."},"Estado":{"type":"string","description":"Vigente, Cancelado o No Encontrado."},"EsCancelable":{"type":"string","description":"Cancelable sin aceptación, con aceptación o no cancelable."},"EstatusCancelacion":{"type":"string","description":"En proceso, cancelado con o sin aceptación, plazo vencido o solicitud rechazada."}}},"example":{"Codigo":"602","Mensaje":"Comprobante no encontrado","Estado":"No Encontrado"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/ConsultarPendientesCFDI":{"post":{"operationId":"ConsultarPendientesCFDI","summary":"Las solicitudes de cancelación que esperan tu respuesta como receptor.","description":"Exige el sello del RFC receptor cargado en tu cuenta: así nadie consulta las solicitudes de un RFC ajeno.","tags":["Como receptor"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rfcReceptor":{"type":"string","description":"Tu RFC como receptor."}},"required":["rfcReceptor"]},"example":{"rfcReceptor":"EKU9003173C9"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"El código del SAT."},"Mensaje":{"type":"string","description":"Qué significa."},"Respuesta":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Una entrada {UUID} por solicitud pendiente."}}},"example":{"Codigo":"1100","Mensaje":"Hay solicitudes pendientes","Respuesta":[{"UUID":"988B5F3A-889E-4C9C-BAC7-0FEE99589858"}]}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/AceptacionCFDI":{"post":{"operationId":"AceptacionCFDI","summary":"Aceptas la cancelación que pidió el emisor.","description":"La respuesta se firma con el sello del receptor que cargó tu cuenta.","tags":["Como receptor"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rfcReceptor":{"type":"string","description":"Tu RFC como receptor."},"UUID":{"type":"string","description":"El folio con la solicitud."}},"required":["rfcReceptor","UUID"]},"example":{"rfcReceptor":"EKU9003173C9","UUID":"988B5F3A-889E-4C9C-BAC7-0FEE99589858"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"El código del SAT (1000 a 1006)."},"Mensaje":{"type":"string","description":"Qué significa."},"Resultado":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Una entrada {Codigo, Respuesta, UUID} por folio, como en el servicio anterior."}}},"example":{"Codigo":"1000","Mensaje":"El SAT recibió la respuesta"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."}}}},"/api/RechazoCFDI":{"post":{"operationId":"RechazoCFDI","summary":"Rechazas la cancelación que pidió el emisor.","description":"Igual que AceptacionCFDI, pero el CFDI sigue vigente.","tags":["Como receptor"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rfcReceptor":{"type":"string","description":"Tu RFC como receptor."},"UUID":{"type":"string","description":"El folio con la solicitud."}},"required":["rfcReceptor","UUID"]},"example":{"rfcReceptor":"EKU9003173C9","UUID":"988B5F3A-889E-4C9C-BAC7-0FEE99589858"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"El código del SAT (1000 a 1006)."},"Mensaje":{"type":"string","description":"Qué significa."},"Resultado":{"type":"array","items":{"type":"object","additionalProperties":true},"description":"Una entrada {Codigo, Respuesta, UUID} por folio, como en el servicio anterior."}}},"example":{"Codigo":"1000","Mensaje":"El SAT recibió la respuesta"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."}}}},"/api/selladoTimbRetencion":{"post":{"operationId":"selladoTimbRetencion","summary":"Sella con tu CSD una Retención 2.0 que ya armaste en XML y la timbra.","description":"Igual que selladoTimbCFDI, pero para el XML de una Retención (retenciones:Retenciones 2.0). Mandas el XML sin Sello, NoCertificado ni Certificado y el servicio lo sella con el CSD que cargaste para el RFC emisor.\n\nSi prefieres mandar la Retención como JSON, usa TimbrarCfdiObj con la llave retenciones.","tags":["Retenciones"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"xmlBase64":{"type":"string","contentEncoding":"base64","description":"La Retención en XML, sin sello."},"obtenerPDF":{"type":"boolean","description":"true para recibir también el PDF."}},"required":["xmlBase64"]},"example":{"xmlBase64":"<retencion.xml en base64>","obtenerPDF":false}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» timbrado, «506» ya estaba timbrado; cualquier otro, el rechazo."},"Mensaje":{"type":"string","description":"Qué pasó, en español. En un rechazo, la regla del SAT que no se cumplió."},"UUID":{"type":"string","description":"El folio fiscal. Sólo con 100 o 506."},"XMLBase64":{"type":"string","contentEncoding":"base64","description":"El CFDI timbrado, completo. Sólo con 100 o 506."},"PDFBase64":{"type":"string","contentEncoding":"base64","description":"El PDF, si lo pediste con obtenerPDF; si no, null."},"IdSeguimiento":{"type":"string","description":"La huella del comprobante: con ella preguntas después por su desenlace (seguimientoCFDI)."}}},"example":{"Codigo":"100","Mensaje":"Comprobante timbrado exitosamente.","UUID":"988B5F3A-889E-4C9C-BAC7-0FEE99589858","XMLBase64":"<la Retención timbrada en base64>","PDFBase64":null,"IdSeguimiento":"8ce2fefe4ebfae89987a6b49d2f4acbf09542845e2be24e0091cb3aa9ad00d43"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/timbradoTXT":{"post":{"operationId":"timbradoTXT","summary":"El layout de texto del servicio anterior: un renglón por nodo, separado por «|».","description":"Es el mismo archivo TXT que mandabas antes por SOAP (TimbradoTXT/CFDI): renglones COM, EMI, REC, CPT, TSL, IMP, IT01 y los de cada complemento (NOM1 a NOM17, PGS1 a PGS8, CEX1 a CEX8, CCP_1 a CCP_25, IMPLOCAL, LEYENDASFISC) y de las addendas privadas (Auxim, Volkswagen, Tonicol, Casa Ley). Las posiciones, las validaciones por renglón y los códigos 502 a 505 son los de siempre.\n\nLos correos de la línea REC reciben el XML (y el PDF si lo pediste). La posición 5 de EMI es la clave del sello (claveCert) cuando el RFC tiene varios.","tags":["Timbrar"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"txtBase64":{"type":"string","contentEncoding":"base64","description":"El archivo TXT en UTF-8."},"obtenerPDF":{"type":"boolean","description":"true para recibir también el PDF."}},"required":["txtBase64"]},"example":{"txtBase64":"<factura.txt en base64>","obtenerPDF":false}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» timbrado, «506» ya estaba timbrado; cualquier otro, el rechazo."},"Mensaje":{"type":"string","description":"Qué pasó, en español. En un rechazo, la regla del SAT que no se cumplió."},"UUID":{"type":"string","description":"El folio fiscal. Sólo con 100 o 506."},"XMLBase64":{"type":"string","contentEncoding":"base64","description":"El CFDI timbrado, completo. Sólo con 100 o 506."},"PDFBase64":{"type":"string","contentEncoding":"base64","description":"El PDF, si lo pediste con obtenerPDF; si no, null."},"IdSeguimiento":{"type":"string","description":"La huella del comprobante: con ella preguntas después por su desenlace (seguimientoCFDI)."}}},"example":{"Codigo":"100","Mensaje":"Comprobante timbrado exitosamente.","UUID":"988B5F3A-889E-4C9C-BAC7-0FEE99589858","XMLBase64":"<el CFDI timbrado en base64>","PDFBase64":null,"IdSeguimiento":"8ce2fefe4ebfae89987a6b49d2f4acbf09542845e2be24e0091cb3aa9ad00d43"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/timbradoTXT-Retenciones":{"post":{"operationId":"timbradoTXTRetenciones","summary":"El layout de texto de Retenciones del servicio anterior (COMR, EMIR, NACR, PER, TOT, IRET…).","description":"El mismo TXT que mandabas por SOAP (TimbradoTXT/Retenciones): renglones COMR, RELRET, EMIR, NACR o EXT, PER, TOT, IRET y los de pagos a extranjeros (P_EXT1 a P_EXT3) y premios. Se sella con el CSD que cargaste para el RFC emisor y se timbra.","tags":["Retenciones"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"txtBase64":{"type":"string","contentEncoding":"base64","description":"El archivo TXT en UTF-8."},"obtenerPDF":{"type":"boolean","description":"true para recibir también el PDF."}},"required":["txtBase64"]},"example":{"txtBase64":"<retencion.txt en base64>","obtenerPDF":false}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» timbrado, «506» ya estaba timbrado; cualquier otro, el rechazo."},"Mensaje":{"type":"string","description":"Qué pasó, en español. En un rechazo, la regla del SAT que no se cumplió."},"UUID":{"type":"string","description":"El folio fiscal. Sólo con 100 o 506."},"XMLBase64":{"type":"string","contentEncoding":"base64","description":"El CFDI timbrado, completo. Sólo con 100 o 506."},"PDFBase64":{"type":"string","contentEncoding":"base64","description":"El PDF, si lo pediste con obtenerPDF; si no, null."},"IdSeguimiento":{"type":"string","description":"La huella del comprobante: con ella preguntas después por su desenlace (seguimientoCFDI)."}}},"example":{"Codigo":"100","Mensaje":"Comprobante timbrado exitosamente.","UUID":"988B5F3A-889E-4C9C-BAC7-0FEE99589858","XMLBase64":"<la Retención timbrada en base64>","PDFBase64":null,"IdSeguimiento":"8ce2fefe4ebfae89987a6b49d2f4acbf09542845e2be24e0091cb3aa9ad00d43"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/acuseCancelacion":{"post":{"operationId":"acuseCancelacion","summary":"El acuse del SAT de una cancelación que pediste aquí.","description":"Cada vez que cancelas (cancelarCFDI o cancelarRetencion) el acuse del SAT se guarda con tu cuenta. Con este método lo vuelves a pedir por el folio fiscal, sin ir al SAT otra vez.\n\nSólo devuelve los acuses de las cancelaciones pedidas con tu cuenta en este servicio.","tags":["Cancelar y consultar"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"string","description":"El folio fiscal cancelado."}},"required":["uuid"]},"example":{"uuid":"988B5F3A-889E-4C9C-BAC7-0FEE99589858"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» si hay acuse."},"Mensaje":{"type":"string","description":"Qué contestó el SAT en esa cancelación."},"Acuse":{"type":"string","description":"El acuse del SAT, en XML."},"UUID":{"type":"string","description":"El folio consultado."}}},"example":{"Codigo":"100","Mensaje":"Solicitud de cancelación recibida","Acuse":"<Acuse …>","UUID":"988B5F3A-889E-4C9C-BAC7-0FEE99589858"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."}}}},"/api/ConsultarRelacionadosCFDI":{"post":{"operationId":"ConsultarRelacionadosCFDI","summary":"Los CFDI relacionados con un folio: los que hay que cancelar antes.","description":"Un CFDI «no cancelable» por tener relacionados vuelve a ser cancelable cuando se cancelan todos ellos. Este método le pregunta al SAT cuáles son, firmando con el sello del emisor que cargaste.\n\nLa respuesta trae los relacionados en dos listas: los hijos (que lo referencian) y los padres (a los que referencia), cada uno con su RFC emisor, RFC receptor y folio.","tags":["Cancelar y consultar"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"string","description":"El folio fiscal a consultar."},"rfcEmisor":{"type":"string","description":"El RFC del emisor del CFDI."}},"required":["uuid","rfcEmisor"]},"example":{"uuid":"988B5F3A-889E-4C9C-BAC7-0FEE99589858","rfcEmisor":"EKU9003173C9"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"El código del SAT: 2000 hay relacionados, 2001 no hay, 2002 el folio no es del receptor."},"Mensaje":{"type":"string","description":"Qué significa."},"Resultado":{"type":"object","additionalProperties":true,"description":"Resultado, UuidConsultado, UuidsRelacionadosHijos.UuidHijo[] y UuidsRelacionadosPadres.UuidPadre[], cada relacionado con RfcEmisor, RfcReceptor y Uuid."}}},"example":{"Codigo":"2001","Mensaje":"No existen CFDI relacionados al folio fiscal","Resultado":{"Resultado":"2001 No existen CFDI relacionados al folio fiscal","UuidConsultado":"988B5F3A-889E-4C9C-BAC7-0FEE99589858","UuidsRelacionadosHijos":{"UuidHijo":[]},"UuidsRelacionadosPadres":{"UuidPadre":[]}}}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/cargarLogo":{"post":{"operationId":"cargarLogo","summary":"El logo que llevan los PDF de lo que emites.","description":"Una imagen PNG, JPG o GIF de hasta 1 MB. Cargar otra la reemplaza. Va en el PDF de cada comprobante cuyo emisor tenga su sello cargado en tu cuenta; en un comprobante de otro emisor nunca.\n\nEs el CargarLogo que algunos servicios anteriores tenían por SOAP; también está en ese .svc.","tags":["PDF"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"logoBase64":{"type":"string","contentEncoding":"base64","description":"La imagen."},"fileName":{"type":"string","description":"El nombre del archivo, para que lo reconozcas."}},"required":["logoBase64"]},"example":{"logoBase64":"<logo.png en base64>","fileName":"logo.png"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» si se guardó."},"Mensaje":{"type":"string","description":"Qué pasó."}}}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."}}}},"/api/cargarPfx":{"post":{"operationId":"cargarPfx","summary":"Guarda el PFX con que se cancelan tus Retenciones.","description":"Se guarda cifrado; su contraseña no: la mandas en cada cancelación. Sin PFX, se usa el CSD que cargaste.","tags":["Retenciones"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rfcEmisor":{"type":"string","description":"El RFC emisor."},"pfxBase64":{"type":"string","contentEncoding":"base64","description":"El archivo .pfx."}},"required":["rfcEmisor","pfxBase64"]},"example":{"rfcEmisor":"EKU9003173C9","pfxBase64":"<EKU9003173C9.pfx en base64>"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» si se guardó."},"Mensaje":{"type":"string","description":"Qué pasó."}}},"example":{"Codigo":"100","Mensaje":"El PFX se guardó correctamente."}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."}}}},"/api/cancelarRetencion":{"post":{"operationId":"cancelarRetencion","summary":"Cancela un CFDI de Retenciones.","description":"Con el PFX que cargaste (y su contraseña en passwordPfx) o, si no hay, con tu CSD.","tags":["Retenciones"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"rfcEmisor":{"type":"string","description":"El RFC emisor."},"uuid":{"type":"string","description":"El folio de la retención."},"motivo":{"type":"string","description":"Los mismos motivos 01 a 04."},"uuidRelacionado":{"type":"string","description":"El que la sustituye, con el motivo 01."},"passwordPfx":{"type":"string","description":"La contraseña del PFX que cargaste."}},"required":["rfcEmisor","uuid","motivo"]},"example":{"rfcEmisor":"EKU9003173C9","uuid":"988B5F3A-889E-4C9C-BAC7-0FEE99589858","motivo":"02","uuidRelacionado":"","passwordPfx":"<CLAVE_PFX>"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"El código del SAT (1201, 1202, 1203, 1205)."},"Mensaje":{"type":"string","description":"Qué significa."},"Acuse":{"type":"string","description":"El acuse del SAT."}}},"example":{"Codigo":"1205","Mensaje":"El SAT no tiene registrado este folio fiscal","Acuse":"<?xml version=\"1.0\"?><Acuse xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" Fecha=\"2026-10-29T21:24:29.6245224\" RfcEmisor=\"EKU9003173C9\" WorkProcessId=\"4f938b80-7e10-403f-b90e-41890aa9df94\" xmlns=\"http://www.sat.gob.mx/esquemas/retencionpago/1\"><Folios><UUID>7C82A8A8-5716-43F1-9E3D-4490488E657F</UUID><EstatusUUID>1205</EstatusUUID><Motivo>02</Motivo><Extemporaneo>true</Extemporaneo></Folios><Signature Id=\"SelloSAT\" xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><SignedInfo><CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\" /><SignatureMethod Algorithm=\"http://www.w3.org/2001/04/xmldsig-more#hmac-sha512\" /><Reference URI=\"\"><Transforms><Transform Algorithm=\"http://www.w3.org/TR/1999/REC-xpath-19991116\"><XPath>not(ancestor-or-self::*[local-name()='Signature'])</XPath></Transform></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2001/04/xmlenc#sha512\" /><DigestValue>EFu5dA+4Ynumopjdc/8E8oOqwuGOHyuuDO9CMVA3OySwZAdYftP2zs8nWbW1VnO+S4TQZaWjwqKNaInDj9wRvg==</DigestValue></Reference></SignedInfo><SignatureValue>CWQ2Dp4wu8ZrLRTvRoTgWUis4TRYbc34Ba+n1xiMzJMU8xgdw8KR4RIWzHdcv5JVAF0aoixxfrbGyhDidS+q9A==</SignatureValue><KeyInfo><KeyName>30001000000500002554</KeyName><KeyValue><RSAKeyValue><Modulus>hUcUOoGEtSDAlrF8KegQkGKY8aDAe9tNRkf48uj1+YirDP4cMEd8YEelQY1jLu1GINYKf9N9XxmOfHdL4FUr+cuOgrBviaGWcIsJfZ80IGpvox6kUSHoRt+h32yQayW0HuNOp0b3yiBp9Y6jTdYTFTAVzgzUjf4LfVt8n5FejVZ2xERIyROnGgbK8A4xBsPpFazHQkK2PCiYe+LYBm0Ux9UZYkYJ9Mu9rL5c51Sjgq8JJekorp0BzfKadRrSEFyD2Z6GwB0RswjLZQspojZGxUnqlbldvO6TjFUV4MT7EV8P7f2VTS0yr4qSwx0y080zoK10CbIoJXfsFROHypFj5w==</Modulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue></KeyInfo></Signature></Acuse>"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."}}}},"/api/estatusRetencion":{"post":{"operationId":"estatusRetencion","summary":"El estado de una retención en el SAT.","description":"No disponible: el SAT no ofrece una consulta por servicio web para Retenciones. El método responde «500» con ese aviso para que tu integración no falle.","tags":["Retenciones"],"deprecated":true,"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"string","description":"El folio de la retención."}},"required":["uuid"]},"example":{"uuid":"988B5F3A-889E-4C9C-BAC7-0FEE99589858"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"Siempre «500»."},"Mensaje":{"type":"string","description":"El aviso."}}},"example":{"Codigo":"500","Mensaje":"La consulta de estatus de Retenciones aún no está disponible."}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."}}}},"/api/consultaPDF-CFDI":{"post":{"operationId":"consultaPDFCFDI","summary":"El PDF de un CFDI, con el mismo diseño de idea15.","description":"Para cualquier CFDI 4.0 o 3.3 que tengas en XML, timbrado aquí o en otro lado.","tags":["PDF"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"xmlBase64":{"type":"string","contentEncoding":"base64","description":"El XML del CFDI."}},"required":["xmlBase64"]},"example":{"xmlBase64":"<factura.xml en base64>"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» si se generó."},"Mensaje":{"type":"string","description":"Qué pasó."},"PDFBase64":{"type":"string","contentEncoding":"base64","description":"El PDF."}}},"example":{"Codigo":"100","Mensaje":"PDF generado exitosamente.","PDFBase64":"JVBERi0xLjMKJf////8KOSAwIG9iago8PAovVHlw…"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/consultaPDF-Retenciones":{"post":{"operationId":"consultaPDFRetenciones","summary":"El PDF de una Retención 2.0.","description":"Para cualquier Retención (retenciones:Retenciones) que tengas en XML, timbrada aquí o en otro lado.","tags":["PDF"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"xmlBase64":{"type":"string","contentEncoding":"base64","description":"El XML de la Retención."}},"required":["xmlBase64"]},"example":{"xmlBase64":"<retencion.xml en base64>"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» si se generó."},"Mensaje":{"type":"string","description":"Qué pasó."},"PDFBase64":{"type":"string","contentEncoding":"base64","description":"El PDF."}}},"example":{"Codigo":"100","Mensaje":"PDF generado exitosamente.","PDFBase64":"<el PDF en base64>"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."},"503":{"description":"No se sabe si se completó, o no se pudo enviar. Reintenta con el mismo cuerpo."}}}},"/api/consultaQR-CFDI":{"post":{"operationId":"consultaQRCFDI","summary":"El código QR de la representación impresa de un CFDI timbrado.","description":"La URL de verificación del SAT con el folio fiscal, los RFC, el total y los últimos ocho caracteres del sello, como imagen PNG. Es el mismo QR que lleva el PDF; sirve si haces tu propia representación impresa.","tags":["PDF"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"xmlBase64":{"type":"string","contentEncoding":"base64","description":"El XML del CFDI, ya timbrado."}},"required":["xmlBase64"]},"example":{"xmlBase64":"<factura-timbrada.xml en base64>"}}}},"responses":{"200":{"description":"Un desenlace: el Codigo dice cuál.","content":{"application/json":{"schema":{"type":"object","properties":{"Codigo":{"type":"string","description":"«100» si se generó."},"Mensaje":{"type":"string","description":"Qué pasó."},"QRBase64":{"type":"string","contentEncoding":"base64","description":"La imagen PNG."}}},"example":{"Codigo":"100","Mensaje":"Código QR generado exitosamente.","QRBase64":"<la imagen PNG en base64>"}}}},"401":{"description":"Usuario o contraseña inválidos (Codigo 102)."},"429":{"description":"Demasiados intentos con credenciales inválidas. Espera los segundos de Retry-After."}}}}}}