Skip to Content
GuíasSubir Certificado (CSD)

Subir Certificado (CSD)

Esta guia explica como subir y gestionar tus Certificados de Sello Digital (CSD) en FactuLink para poder firmar y timbrar CFDIs.


Que es un CSD

Un Certificado de Sello Digital (CSD) es un par de archivos que el SAT emite a cada contribuyente para firmar digitalmente sus comprobantes fiscales (CFDIs). Sin un CSD activo no puedes timbrar facturas.

El CSD es diferente a la e.firma (FIEL):

CSDe.firma (FIEL)
UsoFirmar CFDIsTramites fiscales generales
Emitido porSAT (portal de tramites)SAT (oficinas)
Vigencia4 anos4 anos
Archivos.cer + .key.cer + .key

No subas tu e.firma a FactuLink. Solo se requiere el CSD.


Archivos necesarios

Para subir un CSD necesitas tres elementos:

  1. Certificado (.cer) — Archivo publico que contiene tu informacion fiscal
  2. Llave privada (.key) — Archivo privado para firmar. Se almacena cifrado en nuestros servidores
  3. Contrasena — La contrasena que estableciste al generar el CSD en el portal del SAT

Archivos de prueba: El sandbox de FactuLink incluye un CSD demo precargado — no necesitas subir tu CSD real para probar el flujo. Nunca subas tu CSD productivo (.cer/.key reales) al sandbox: la llave privada quedaría almacenada en un ambiente de menor confianza. Tu CSD real solo va en producción (sk_live_).


Subir CSD

POST/api/v1/csds

El upload se hace via multipart/form-data con los tres campos:

curl -X POST https://api.factulink.com.mx/api/v1/csds \
-H "Authorization: Bearer sk_test_4b7e2f1a8d9c3e6b5f0a1d2c4e7f8a9b" \
-F "cer=@/ruta/a/certificado.cer" \
-F "key=@/ruta/a/llave.key" \
-F "password=MiContrasena123"
POST/api/v1/csds201
Response
{
"id": "csd_01HQ3KC8V2M5XNRP7WBTF6D3AH",
"rfc": "EKU9003173C9",
"serial_number": "30001000000500003456",
"valid_from": "2024-01-01T00:00:00Z",
"valid_to": "2028-01-01T00:00:00Z",
"is_default": true,
"status": "active",
"created_at": "2026-04-05T10:32:00Z"
}

Posibles errores

CodigoDescripcion
csd_password_invalidLa contrasena no corresponde a la llave privada
csd_expiredEl certificado ya vencio
csd_rfc_mismatchEl RFC del CSD no coincide con el RFC del tenant
csd_already_existsYa existe un CSD activo con el mismo numero de serie

Establecer CSD como default

Si tienes multiples CSDs (por ejemplo, al renovar antes de que venza el anterior), puedes establecer cual usar como predeterminado para timbrar:

PATCH/api/v1/csds/:id
curl -X PATCH https://api.factulink.com.mx/api/v1/csds/csd_01HQ3KC8V2M5XNRP7WBTF6D3AH \
-H "Authorization: Bearer sk_test_4b7e2f1a8d9c3e6b5f0a1d2c4e7f8a9b" \
-H "Content-Type: application/json" \
-d '{
  "is_default": true
}'
PATCH/api/v1/csds/:id200
Response
{
"id": "csd_01HQ3KC8V2M5XNRP7WBTF6D3AH",
"rfc": "EKU9003173C9",
"serial_number": "30001000000500003456",
"valid_from": "2024-01-01T00:00:00Z",
"valid_to": "2028-01-01T00:00:00Z",
"is_default": true,
"status": "active",
"created_at": "2026-04-05T10:32:00Z"
}

Al establecer un CSD como default, el anterior pierde esa marca automaticamente. Solo puede haber un CSD default por tenant a la vez.


Listar CSDs

Consulta todos los CSDs asociados a tu tenant:

GET/api/v1/csds
curl -X GET https://api.factulink.com.mx/api/v1/csds \
-H "Authorization: Bearer sk_test_4b7e2f1a8d9c3e6b5f0a1d2c4e7f8a9b"
GET/api/v1/csds200
Response
{
"data": [
  {
    "id": "csd_01HQ3KC8V2M5XNRP7WBTF6D3AH",
    "rfc": "EKU9003173C9",
    "serial_number": "30001000000500003456",
    "valid_from": "2024-01-01T00:00:00Z",
    "valid_to": "2028-01-01T00:00:00Z",
    "is_default": true,
    "status": "active",
    "created_at": "2026-04-05T10:32:00Z"
  }
],
"pagination": {
  "has_more": false,
  "next_cursor": null,
  "limit": 20
}
}

Alertas de vencimiento

FactuLink monitorea automaticamente la fecha de vencimiento de tus CSDs y envia notificaciones:

Dias antes del vencimientoAccion
30 diasNotificacion por email al administrador del tenant
15 diasSegunda notificacion + alerta en el dashboard
7 diasNotificacion diaria hasta renovar
VencidoEl CSD se marca como expired y no se puede usar para timbrar

Si tienes webhooks configurados, recibiras eventos csd.expiring_soon y csd.expired.

Recomendacion: Sube el nuevo CSD antes de que venza el anterior y marcalo como default. El CSD anterior seguira disponible para consultas pero no se usara para timbrar nuevos CFDIs.


Siguientes pasos

Last updated on