Saltar al contenido
oden.tax docs
POST /v1/issuers/:issuer_id/signing_certificates

Subir el sello digital

El CSD es lo único que timbra. Hasta que un emisor tenga el suyo, cualquier intento de facturar contesta issuer_not_ready. Esto te deja mandarlo sin abrir el panel.

El certificado va colgado del emisor, no de la cuenta. Un despacho con dos RFC necesita un sello por cada uno: firmar con el del otro es un comprobante que el SAT rechaza.

Lo que estás mandando

Con la llave privada y su contraseña cualquiera puede emitir comprobantes a nombre de ese contribuyente. Van por TLS, se guardan cifradas, y nunca se escriben en un log ni en un reporte de errores.

No hay forma de volver a leerlas. No existe un GET de este recurso, y la respuesta sólo trae lo que el propio SAT publica del certificado: su serie, de quién es y hasta cuándo dura. Tú ya tienes esos bytes; una segunda copia legible sería un segundo lugar del que se pueden filtrar.

Parámetros

data arreglo de strings · requerido
Los archivos en base64. Puede ser el .cer y el .key por separado, el .zip del SAT tal cual, o los dos. No leemos los nombres: qué es cada archivo lo sacamos de su contenido.
passwords arreglo de strings · requerido en la práctica
La contraseña de la llave privada. Se prueba contra todas las llaves que mandes, así que si subes el sello y la e.firma juntos manda las dos y nosotros vemos cuál abre cuál.

Respuesta

201 cuando guardamos al menos uno, con lo que quedó en data. Si no guardamos ninguno contestamos 422 con el mismo cuerpo, y refused dice qué pasó con cada cosa.

id entero
Identificador del certificado dentro de oden.tax.
kind string
csd para el sello, fiel para la e.firma. Lo leemos del keyUsage del certificado, no del nombre del archivo.
certificate_number string
El número de serie que le puso el SAT, veinte dígitos.
tax_id string
El RFC del contribuyente al que pertenece.
valid_from / expires_at string
Su vigencia en ISO 8601. Un CSD dura cuatro años.
usable booleano
Si con éste se puede timbrar hoy. Una e.firma nunca lo es.
refused arreglo
Lo que no guardamos y por qué: wrong_taxpayer, expired, missing_key o bad_password. Un certificado vencido trae además su expires_at, para que puedas compararlo contra el archivo que tengas.

Errores

no_certificate
No reconocimos ningún certificado en lo que mandaste.
issuer_required
La ruta lleva el emisor; revisa que el id sea de uno tuyo.
payload_too_large
El envío pasa de 12 MB. Un CSD y su llave pesan unos pocos kilobytes.
plan_required
La API está incluida en el plan Pro.