# Commercial response (/en/docs/recepcion/respuesta-comercial)

> **Trap — Everything on this page happens inside the 8-day window**
>
> Once the 8 days are up, none of these calls work: they return
> `422 commercial_response_window_closed`. And silence is not neutral — it accepts. Read
> [The 8-day window](/en/docs/recepcion/ventana-8-dias) before you implement any of this.

## The five actions [#the-five-actions]

They map to the `WSREGISTRORECLAMODTE` codes of the SII, Chile's tax authority.

| Endpoint               | `reason`          | SII code | Means                               |
| ---------------------- | ----------------- | -------- | ----------------------------------- |
| `/accept`              | —                 | `ACD`    | Accepts the content of the document |
| `/reject`              | `content`         | `RCD`    | Claim against the content           |
| `/reject`              | `partial_missing` | `RFP`    | Claim for partially missing goods   |
| `/reject`              | `total_missing`   | `RFT`    | Claim for totally missing goods     |
| `/acknowledge_receipt` | —                 | `ERM`    | Grants receipt of goods or services |

## Accept (ACD) [#accept-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)"
```

Accepting explicitly does not change the legal outcome compared with letting the deadline pass — what
changes is that a dated record exists, instead of a silence.

## Claim (RCD / RFP / RFT) [#claim-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"}'
```

> **Trap — A claim is irreversible**
>
> There is no un-claiming. Not at Facturia and not at the SII. If your interface lets a person claim
> with one click, put the confirmation before the call, not after — because after, there is no after.
>
> A second action on the same document returns `409 commercial_response_already_registered`.

## Acknowledge receipt of goods (ERM) [#acknowledge-receipt-of-goods-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)"
```

It is a different statement from accepting the content: it says the goods or services arrived, not
that the document is correct.

## The response [#the-response]

```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"
}
```

The `sii` block is the confirmation that the event was registered at the SII, not just with us. If
that confirmation does not arrive, the call fails — we do not tell you that you claimed when the SII
never heard about it.

## The hard rules, together [#the-hard-rules-together]

| Rule                       | What happens if you break it                                             |
| -------------------------- | ------------------------------------------------------------------------ |
| Types 33, 34 and 43 only   | `422 commercial_response_not_applicable`                                 |
| Within the 8 calendar days | `422 commercial_response_window_closed`, with `deadline_at` in the error |
| One action per document    | `409 commercial_response_already_registered`                             |
| Claims cannot be undone    | There is no endpoint. Full stop                                          |

## Idempotency [#idempotency]

All of these calls accept `Idempotency-Key`, and you should use it: a retry after a network timeout,
on a one-shot action, is exactly the case where the difference between "I already did it" and "I did
it twice" matters. With the key, the replay returns the original response; without it, the second
attempt runs into `409 commercial_response_already_registered` — which is correct, but noisier than
it needs to be.
