# Respuesta comercial (/docs/recepcion/respuesta-comercial)

> **Trampa — Todo lo de esta página ocurre dentro de la ventana de 8 días**
>
> Pasado el día 8, ninguna de estas llamadas funciona: devuelven
> `422 commercial_response_window_closed`. Y el silencio no es neutro — acepta. Lee
> [La ventana de 8 días](/docs/recepcion/ventana-8-dias) antes de implementar esto.

## Las cinco acciones [#las-cinco-acciones]

Se mapean a los códigos de `WSREGISTRORECLAMODTE` del SII.

| Endpoint               | `reason`          | Código SII | Significado                              |
| ---------------------- | ----------------- | ---------- | ---------------------------------------- |
| `/accept`              | —                 | `ACD`      | Acepta el contenido del documento        |
| `/reject`              | `content`         | `RCD`      | Reclamo al contenido                     |
| `/reject`              | `partial_missing` | `RFP`      | Reclamo por falta parcial de mercaderías |
| `/reject`              | `total_missing`   | `RFT`      | Reclamo por falta total de mercaderías   |
| `/acknowledge_receipt` | —                 | `ERM`      | Otorga recibo de mercaderías o servicios |

## Aceptar (ACD) [#aceptar-acd]

```bash
curl -X POST https://api.facturia.cl/v1/received_documents/rdoc_01K2R9M3D8V5QW7N/accept \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Idempotency-Key: $(uuidgen)"
```

Aceptar explícitamente no cambia el resultado legal respecto de dejar pasar el plazo — cambia que
queda un registro con fecha, en vez de un silencio.

## Reclamar (RCD / RFP / RFT) [#reclamar-rcd--rfp--rft]

```bash
# Reclamo por contenido (RCD)
curl -X POST https://api.facturia.cl/v1/received_documents/rdoc_01K2R9M3D8V5QW7N/reject \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
  -d '{"reason":"content","note":"Precio unitario no corresponde a la orden de compra 99213"}'
```

```bash
# Reclamo por falta total de mercaderías (RFT)
curl -X POST https://api.facturia.cl/v1/received_documents/rdoc_01K2R9M3D8V5QW7N/reject \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
  -d '{"reason":"total_missing"}'
```

> **Trampa — Un reclamo es irreversible**
>
> No existe des-reclamar. Ni en Facturia ni en el SII. Si tu interfaz deja que una persona reclame con
> un clic, pon la confirmación antes de la llamada, no después — porque después no hay después.
>
> Una segunda acción sobre el mismo documento devuelve `409 commercial_response_already_registered`.

## Acusar recibo de mercaderías (ERM) [#acusar-recibo-de-mercaderías-erm]

```bash
curl -X POST https://api.facturia.cl/v1/received_documents/rdoc_01K2R9M3D8V5QW7N/acknowledge_receipt \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Idempotency-Key: $(uuidgen)"
```

Es una declaración distinta de la aceptación del contenido: dice que las mercaderías o servicios
llegaron, no que el documento esté correcto.

## La respuesta [#la-respuesta]

```json
{
  "object": "commercial_response",
  "received_document_id": "rdoc_01K2R9M3D8V5QW7N",
  "action": "reject",
  "reason": "content",
  "sii_code": "RCD",
  "registered_at": "2026-08-14T14:02:10Z",
  "sii": { "estado": "OK", "glosa": "Evento registrado" },
  "state": "rejected"
}
```

El bloque `sii` es la confirmación de que el evento quedó registrado en el SII, no solo en nosotros.
Si esa confirmación no llega, la llamada falla — no te decimos que reclamaste cuando el SII no se
enteró.

## Las reglas duras, juntas [#las-reglas-duras-juntas]

| Regla                         | Qué pasa si la rompes                                                  |
| ----------------------------- | ---------------------------------------------------------------------- |
| Solo tipos 33, 34 y 43        | `422 commercial_response_not_applicable`                               |
| Dentro de los 8 días corridos | `422 commercial_response_window_closed`, con `deadline_at` en el error |
| Una sola acción por documento | `409 commercial_response_already_registered`                           |
| Los reclamos no se deshacen   | No hay endpoint. Punto                                                 |

## Idempotencia [#idempotencia]

Todas estas llamadas aceptan `Idempotency-Key`, y conviene usarlo: un reintento por timeout de red
sobre una acción de un solo tiro es exactamente el caso donde la diferencia entre «ya lo hice» y «lo
hice dos veces» importa. Con la llave, el replay devuelve la respuesta original; sin ella, el segundo
intento se topa con `409 commercial_response_already_registered` — que es correcto, pero es más ruido
del necesario.
