# Subir CAF XML

`POST /api/v1/billing/caf`

Sube un Código de Autorización de Folios obtenido desde el SII.
Acepta el XML en base64 o raw. El sistema parsea y valida el CAF, y
extrae el rango de folios y la clave RSA pública.

> **Beta privada**: las escrituras vía API key están en beta privada
> (solicitar acceso: hola@simplo.cl); las API keys hoy operan en modo
> lectura.

- Autenticación: header `X-Api-Key: sk_simplo_...` (o `Authorization: Bearer <jwt>` para sesiones de la plataforma).
- operationId: `subirCAF` — contrato completo en https://docs.simplo.cl/openapi.yaml
- Versión HTML: https://docs.simplo.cl/api/operations/subircaf/

## Request body (application/json)

Schema: `SubirCAFRequest`

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `tipo_dte` | integer (33 \| 34 \| 39 \| 41 \| 43 \| 46 \| 52 \| 56 \| 61 \| 110 \| 111 \| 112) | sí | Código SII del tipo de Documento Tributario Electrónico (33 factura, 39 boleta, 52 guía de despacho, 56/61 notas, 110-112 exportación). |
| `caf_xml` | string | sí | XML del CAF en base64 o raw XML |

## Ejemplo (curl)

```sh
curl -X POST "https://api.simplo.cl/api/v1/billing/caf" \
  -H "X-Api-Key: $SIMPLO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tipo_dte": 33,
    "caf_xml": "'"$(base64 -i CAF33.xml)"'"
  }'
```

## Respuestas

### 201 — CAF registrado

Schema: `CAFResponse`

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `id` | string (uuid) | sí |  |
| `tipo_dte` | integer (33 \| 34 \| 39 \| 41 \| 43 \| 46 \| 52 \| 56 \| 61 \| 110 \| 111 \| 112) | sí | Código SII del tipo de Documento Tributario Electrónico (33 factura, 39 boleta, 52 guía de despacho, 56/61 notas, 110-112 exportación). |
| `folio_desde` | integer | sí |  |
| `folio_hasta` | integer | sí |  |
| `folios_disponibles` | integer | sí | Cantidad de folios aún no asignados |
| `ambiente` | string (certificacion \| produccion) | sí |  |
| `fecha_autorizacion` | string (date) | sí |  |
| `is_active` | boolean | sí |  |
| `created_at` | string (date-time) | sí |  |

### 400 — CAF inválido

Schema: `ErrorResponse`

### 401 — Token o API key inválido o ausente

Schema: `ErrorResponse`

### 409 — CAF con rango de folios ya registrado

Schema: `ErrorResponse`
