Firmar con e.firma
e.firma (antes Firma Electrónica Avanzada) es el certificado digital personal que emite el SAT. En Verificamex Firma, un firmante puede usarlo para firmar un documento directamente con su propio certificado, sin pasar por el flujo guiado de validación de identidad.
Endpoint
Sección titulada «Endpoint»Método: POST https://api.digitafirma.com/v1/sign/{signatureId}
Encabezados de la Solicitud
Sección titulada «Encabezados de la Solicitud»| Encabezado | Valor | Descripción |
|---|---|---|
X-Api-Key | {id}:{secret} | Tu API Key, ver Uso de tokens. |
Content-Type | multipart/form-data | El certificado y la llave se envían como archivos binarios. |
Parámetros de Form-Data
Sección titulada «Parámetros de Form-Data»| Campo | Tipo | Requerido | Descripción |
|---|---|---|---|
cer | file | Sí* | Certificado público de la e.firma (.cer). |
key | file | Sí* | Llave privada de la e.firma (.key). |
pfx | file | Sí* | Alternativa a cer + key: certificado en formato PKCS12 (.pfx). |
password | string | Sí | Contraseña de la llave privada. |
* Envía cer + key, o bien pfx — no es necesario enviar los tres. Si no envías ninguna de las dos combinaciones completas, el endpoint responde con error de validación.
Ejemplo
Sección titulada «Ejemplo»curl --location 'https://api.digitafirma.com/v1/sign/ac110005-9d7a-148c-819d-9cdca24f033e' \ --header 'X-Api-Key: TU_ID:TU_SECRET' \ --form 'cer=@"/ruta/a/certificado.cer"' \ --form 'key=@"/ruta/a/llave.key"' \ --form 'password=contraseña_de_la_llave'{ "data": [ { "type": "signatures", "id": "ac110005-9d7a-148c-819d-9cdca24f033e", "links": { "self": "/signatures/ac110005-9d7a-148c-819d-9cdca24f033e" }, "attributes": { "name": "JUAN PEREZ LOPEZ", "rfc": "PELJ800101ABC", "curp": "PELJ800101HDFRPN01", "email": "juanperez@gmail.com", "sign_status": "SIGNED", "certificate_serial_number": "3A2B1C...", "certificate_issuer_name": "SERVICIO DE ADMINISTRACION TRIBUTARIA", "signed_at": "2026-04-17T13:20:45.128Z", "signature": "MIIF...", "redirect_url": null, "allowed_signature_methods": null } } ]}Cómo firmar correctamente
Sección titulada «Cómo firmar correctamente»-
El certificado debe ser una e.firma personal, no un CSD. Un Certificado de Sello Digital (el que se usa para timbrar facturas) tiene un campo
OUque la e.firma personal no tiene. Si subes un CSD por error, la firma se rechaza. -
El certificado debe estar vigente. El sistema valida las fechas de vigencia del propio certificado antes de firmar. Un certificado vencido o aún no vigente se rechaza.
-
El RFC o CURP debe coincidir con el firmante registrado, si al crear el documento le asignaste un
rfca ese firmante. El sistema extrae el RFC y el CURP directamente del certificado y los compara; si no coinciden con el firmante esperado, la firma se rechaza. Si no le asignaste un RFC al firmante, esta validación se omite. -
La contraseña debe corresponder exactamente a la llave privada enviada. Una contraseña incorrecta impide abrir la llave y la firma falla.
-
En producción, el certificado no debe estar revocado. El sistema consulta al SAT (OCSP) para confirmar que la e.firma sigue vigente y no fue revocada antes de aplicar la firma.
Errores comunes
Sección titulada «Errores comunes»| Código | Mensaje | Causa |
|---|---|---|
| 400 | El formato ingresado pertenece a un CSD, favor de ingresar una e.firma (FIEL) | Se envió un Certificado de Sello Digital en vez de una e.firma personal. |
| 400 | El certificado digital no está vigente | El certificado está vencido o su vigencia aún no inicia. |
| 400 | El RFC o CURP asignado a este firmante no coincide con el certificado digital esperado | El firmante fue registrado con un RFC distinto al que trae el certificado. |
| 400 | El certificado digital no es soportado | El emisor del certificado no es reconocido (no es SAT, Judicatura Federal, TEPJF ni Verificamex). |
| 400 | El documento no permite firmas de este tipo | El documento no incluyó "EFIRMA" en allow_type_signatures al crearse. |
| 400 | El documento ya ha sido firmado | Ese signatureId ya está en estatus SIGNED o REJECTED. |