Sube un certificado de empresa
Sube un certificado FNMT (PKCS#12, `.p12`/`.pfx`) como `multipart/form-data` con `certificate_file` y `certificate_password`. El fichero se valida por magic bytes (ASN.1 DER) y se limita a 100 KB; la contraseña se cifra en reposo. El certificado subido se activa automáticamente (los anteriores se desactivan). El header `Location` apunta a `/v1/verifactu/certificates/active`.
En: header
Parámetros de cabecera
Clave única generada por el cliente para garantizar la idempotencia en los reintentos. Te permite reenviar de forma segura la misma petición: la primera respuesta se cachea y se devuelve sin volver a ejecutar la mutación. Es una cadena opaca para el servidor; cualquier valor único de hasta 64 caracteres es válido (UUID v7, UUID v4, ULID, nanoid, etc.). Se recomienda UUID v7 por coherencia con los identificadores de la API. La misma clave reutilizada con un body distinto devuelve 409 idempotency_key_reused.
1 <= length <= 64Cuerpo de la petición
multipart/form-data
Definiciones de TypeScript
Usa el tipo request body en TypeScript.
Cuerpo de la respuesta
application/json
application/json
application/json
application/json
application/json
application/json
application/json
{
"data": {
"id": "01931b3e-7c4a-7f2e-9a8b-3c5d6e7f8a13",
"object": "verifactu_certificate",
"subject_nif": "B12345678",
"subject_name": "Acme Corporation SL",
"subject_kind": "juridica",
"valid_from": "2026-01-01T00:00:00+01:00",
"valid_to": "2029-01-01T00:00:00+01:00",
"is_active": true,
"revoked_at": null,
"created_at": "2026-01-10T09:00:00+01:00"
}
}{
"error": {
"type": "authentication_error",
"code": "missing_api_key",
"message": "No se ha proporcionado una API key válida en el header Authorization.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#missing_api_key",
"request_id": "req_01HKQS5N8VR7QXJ9K3T6BWPMZA"
}
}{
"error": {
"type": "authorization_error",
"code": "insufficient_scope",
"message": "Esta API key no tiene el scope requerido para esta operación.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#insufficient_scope",
"request_id": "req_01HKQS5NBC3P8M1KX4V7SLNHQD"
}
}{
"error": {
"type": "idempotency_error",
"code": "idempotency_key_reused",
"message": "La cabecera `Idempotency-Key` ya se usó con un body distinto. Usa una clave nueva o reenvía exactamente el mismo body.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#idempotency_key_reused",
"request_id": "req_01HKQS5NHT9A4U7R2E3F8GZWTJ"
}
}{
"error": {
"type": "invalid_request_error",
"code": "parameter_invalid",
"message": "El campo `name` es obligatorio y no puede estar vacío.",
"param": "name",
"doc_url": "https://docs.factuarea.com/guides/errors#parameter_invalid",
"request_id": "req_01HKQS5NGS8Z3T6Q1D2E7FYVSI"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limit_exceeded",
"message": "Has excedido el rate limit de 60 peticiones por minuto. Reintenta tras 30 segundos.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#rate_limit_exceeded",
"request_id": "req_01HKQS5NKW1C6W9T4G5H0JBZVL"
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "Ha ocurrido un error inesperado. Si persiste, contacta con soporte adjuntando el request_id.",
"param": null,
"doc_url": "https://docs.factuarea.com/guides/errors#internal_error",
"request_id": "req_01HKQS5NLX2D7X0U5H6J1KCAWM"
}
}Revoca un certificado de empresa
Revoca (elimina) un certificado de la empresa para que ya no pueda firmar transmisiones VeriFactu. Devuelve 404 si el certificado no existe en tu empresa.
Valida la cadena de hashes de VeriFactu
Recalcula la cadena de huellas VeriFactu (`huella`) de tu empresa y la compara con los valores persistidos sin mutar datos. Devuelve si la cadena está íntegra y, si no, el primer registro corrupto. Limitado a 1 petición/minuto y rechazado con 422 `dataset_too_large` para conjuntos de más de 50,000 registros.