152 lines
2.7 KiB
Markdown
152 lines
2.7 KiB
Markdown
# API Reference
|
|
|
|
## Endpoints
|
|
|
|
### Health
|
|
```
|
|
GET /api/v1/health
|
|
```
|
|
Verifica que la API está funcionando.
|
|
|
|
**Response:**
|
|
```json
|
|
{"status": "ok"}
|
|
```
|
|
|
|
---
|
|
|
|
### Obtener Clave Pública
|
|
```
|
|
GET /api/v1/auth/public-key
|
|
```
|
|
Obtiene la clave pública RSA para cifrar contraseñas.
|
|
|
|
**Response:**
|
|
```json
|
|
{"public_key": "base64_encoded_key"}
|
|
```
|
|
|
|
---
|
|
|
|
### Registrar Certificado
|
|
```
|
|
POST /api/v1/auth/register
|
|
```
|
|
Registra y valida un certificado digital.
|
|
|
|
**Request:**
|
|
```json
|
|
{
|
|
"cert_name": "mi_certificado",
|
|
"cert_path": "C:/ruta/al/certificado.p12",
|
|
"password_encrypted": "base64_encoded_password"
|
|
}
|
|
```
|
|
|
|
**Response (éxito):**
|
|
```json
|
|
{
|
|
"success": true,
|
|
"cert": {
|
|
"subject": "...",
|
|
"issuer": "...",
|
|
"expired": false,
|
|
"expiring_soon": false,
|
|
"days_until_expiry": 365
|
|
},
|
|
"token": "A1B2C3D4..."
|
|
}
|
|
```
|
|
|
|
**Response (error):**
|
|
```json
|
|
{
|
|
"success": false,
|
|
"error": "certificate_expired",
|
|
"cert": {...}
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Alta de Factura
|
|
```
|
|
POST /api/v1/facturas
|
|
```
|
|
Registra una factura en VeriFactu. No requiere token (el certificado se selecciona internamente o usa el primero disponible).
|
|
|
|
**Request:**
|
|
```json
|
|
{
|
|
"tipo": "alta",
|
|
"factura": {
|
|
"emisor_nif": "53950250R",
|
|
"num_serie": "FV2026/001",
|
|
"fecha_expedicion": "17-04-2026",
|
|
"tipo_factura": "F1",
|
|
"descripcion": "Factura de prueba",
|
|
"iva": [
|
|
{"base": 100.00, "cuota": 21.00, "tipo": 21.0}
|
|
],
|
|
"importe_total": 121.00
|
|
},
|
|
"sistema": {
|
|
"nombre": "Mi Sistema",
|
|
"nif_proveedor": "53950250R",
|
|
"version": "1.0"
|
|
}
|
|
}
|
|
```
|
|
|
|
**Response (AEAT disponible):**
|
|
```json
|
|
{
|
|
"success": true,
|
|
"csv": "CSV1234567ABC",
|
|
"estado": "Correcto"
|
|
}
|
|
```
|
|
|
|
**Response (fallback local):**
|
|
```json
|
|
{
|
|
"success": true,
|
|
"csv": "0CE5F940CEA...",
|
|
"estado": "Correcto (local)"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
### Anular Factura
|
|
```
|
|
POST /api/v1/facturas/anular
|
|
```
|
|
Anula una factura previamente registrada.
|
|
|
|
**Request:**
|
|
```json
|
|
{
|
|
"tipo": "anulacion",
|
|
"factura": {
|
|
"emisor_nif": "53950250R",
|
|
"num_serie": "FV2026/001",
|
|
"fecha_expedicion": "17-04-2026"
|
|
}
|
|
}
|
|
```
|
|
|
|
## Códigos de Error
|
|
|
|
| Código | Descripción |
|
|
|--------|------------|
|
|
| `certificate_expired` | El certificado ha expirado |
|
|
| `certificate_not_yet_valid` | El certificado aún no es válido |
|
|
| `certificate_expiring_soon` | El certificado caduca en menos de 30 días |
|
|
| `invalid_password_or_format` | Contraseña incorrecta o formato inválido |
|
|
| `file_not_found` | El archivo de certificado no existe |
|
|
| `validation_failed` | Los datos de la factura no son válidos |
|
|
| `aeat_error` | Error comunicando con la AEAT |
|
|
| `aeat_fault` | Error SOAP de la AEAT |
|
|
| `hash_save_error` | Error guardando el hash local |
|
|
| `hash_storage_error` | Error leyendo el hash anterior | |