# Reemplazar CSD > `PUT https://api.cfdi.express/v1/merchants/{id}/csd` — Sustituye el CSD del emisor por uno nuevo, típicamente al renovarlo antes de que venza. Mismas validaciones que al subirlo. URL de esta página: https://cfdi.express/docs/api/reemplazar-csd Autenticación: requiere API key (`Authorization: Bearer sk_test_…` o `sk_live_…`) ### Parámetros de ruta | Campo | Tipo | Requerido | Descripción | |---|---|---|---| | `id` | string | sí | Id del emisor. | ### Cuerpo (JSON) | Campo | Tipo | Requerido | Descripción | |---|---|---|---| | `cer` | string | sí | Archivo .cer (DER) en base64. | | `key` | string | sí | Archivo .key (DER, PKCS#8 encriptado) en base64. | | `password` | string | sí | Contraseña de la llave privada. | ## Ejemplos ### cURL ```bash curl -X PUT https://api.cfdi.express/v1/merchants/mkq2f8v3x1t7p9d4n6c0b5rz/csd \ -H "Authorization: Bearer sk_live_..." \ -H "Content-Type: application/json" \ -d @csd-renovado.json ``` ## Respuesta ### 200 OK ```json { "object": "csd", "serialNumber": "30001000000600004821", "rfc": "EKU9003173C9", "validFrom": "2026-06-01T00:00:00.000Z", "validTo": "2030-06-01T00:00:00.000Z", "status": "active", "registeredWithPac": true, "updatedAt": "2026-08-18T16:31:08.771Z" } ``` ## Errores | Status | code | Cuándo aparece | |---|---|---| | 400 | `validation_error` | El subcode identifica el problema del certificado. | | 401 | `unauthorized` | Falta el header Authorization o la llave es inválida. | | 404 | `not_found` | El emisor no existe en tu cuenta. | | 503 | `pac_unavailable` | El PAC no está disponible. | ## Notas - Los CFDIs ya timbrados conservan el sello del certificado con el que se emitieron: reemplazar el CSD no los afecta. ## Relacionados - [POST /v1/merchants/{id}/csd](https://cfdi.express/docs/api/subir-csd) — Subir CSD - [GET /v1/merchants/{id}/csd](https://cfdi.express/docs/api/obtener-csd) — Consultar CSD --- Referencia completa: https://cfdi.express/docs/api · OpenAPI: https://api.cfdi.express/openapi.json · Llaves: https://dash.cfdi.express