# The 8-day window (/en/docs/recepcion/ventana-8-dias)

> **Trap — 8 calendar days. Silence accepts. It cannot be undone.**
>
> Chilean law gives the receiver **8 calendar days** to reject a factura it has received, that
> is, a Chilean B2B invoice of type 33, 34 or 43. If you do nothing, on day 8 the document becomes
> **irrevocably accepted** and freely transferable — your supplier can assign it to a factoring house
> and you no longer have any way to dispute it.
>
> Doing nothing is not "pending". It is accepting.

## What that means in practice [#what-that-means-in-practice]

A received document arrives carrying this:

```json
"commercial_response": {
  "state": "pending",
  "state_reason": null,
  "deadline_at": "2026-08-20T23:59:59-04:00",
  "days_remaining": 6,
  "available_actions": ["accept", "reject_content", "reject_partial", "reject_total", "acknowledge_receipt"],
  "default_if_silent": "accepted",
  "history": []
}
```

`default_if_silent` is on every object for a reason: it is the answer to "and what if I do nothing?",
which is the question an integrator has to answer before writing the first line.

`deadline_at` comes with a Chilean offset (`-04:00` or `-03:00`, depending on daylight saving)
because the deadline runs on the Chilean calendar, not as a 192-hour interval from a UTC instant.

## Where the clock starts [#where-the-clock-starts]

A deadline is worth exactly what its zero point is worth, so here it is precisely:

|                 |                                                                                              |
| --------------- | -------------------------------------------------------------------------------------------- |
| **Anchor**      | The **SII's** own reception stamp for that document, published as `reception.sii_receipt_at` |
| **Count**       | **Calendar** days. Weekends and public holidays count                                        |
| **Granularity** | Whole days on the America/Santiago civil calendar                                            |
| **Expiry**      | The end of the eighth day after the anchor's Chilean date                                    |

Not the issuer's `issue_date`, which the issuer picks. Not the moment the mail reached your reception
casilla — the mailbox the exchange delivers to — which depends on the sender's mail queue. And not
our `received_at`, because then an outage of ours would shorten a legal deadline for you.

Day granularity has a practical consequence: a document received at 23:50 does not lose a day to the
clock, and a daylight-saving change does not shift the expiry by an hour.

> **No anchor, no deadline — and we say so rather than invent one**
>
> Until the SII's reception stamp is known, `deadline_at` and `days_remaining` come back `null` and the
> write actions answer `422 commercial_response_anchor_pending`.
>
> Guessing a legal date is worse than refusing to name one. The database backs it up: a deadline stored
> without its anchor is rejected at the schema level.
>
> But `pending` is not forever either: if the anchor does not arrive within two weeks we stop asking
> and the document settles at `state: "expired_accepted"` with
> `state_reason: "anchor_never_registered"`. The deadline ran out all the same — silence accepts on day
> 8 without consulting us — we just never learned the exact date. The `state_reason` is there so you
> can tell that case apart from one where we did watch a deadline expire.

## The three hard rules [#the-three-hard-rules]

We apply them before the SII applies them to you:

**Types 33, 34 and 43 only.** Anything else returns `422 commercial_response_not_applicable`. A
boleta (Chile's consumer receipt) or a guía de despacho (a dispatch note) carries no commercial
response.

**8 days, with the server in the way.** Past the deadline you get
`422 commercial_response_window_closed`, with `deadline_at` inside the error so you can display it.

**One shot.** A second action on the same document returns
`409 commercial_response_already_registered`. And claims are irreversible: there is no un-claiming.

## What to do with this in your integration [#what-to-do-with-this-in-your-integration]

### The defensible minimum [#the-defensible-minimum]

Listen for `received_document.created` and put it in front of a person. It is the default option and
the one the law assumes.

### The reminder [#the-reminder]

`received_document.deadline_approaching` fires at **T−2 days** while the state is still `pending`.
Wired to an email or an internal notification, it is the difference between a decision and an
accident.

```js
// En tu handler de webhooks
if (evento.type === 'received_document.deadline_approaching') {
  const doc = evento.data.object;
  await avisar({
    para: 'cuentas-por-pagar@miempresa.cl',
    asunto: `Quedan ${doc.commercial_response.days_remaining} días para objetar ${doc.emisor.legal_name} folio ${doc.folio}`,
    cuerpo: `Total ${doc.totals.total}. Vence ${doc.commercial_response.deadline_at}.`,
  });
}
```

### Sweeping what is still pending [#sweeping-what-is-still-pending]

```bash
curl -G https://api.facturia.cl/v1/received_documents \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -d commercial_response_state=pending -d tipo_dte=33
```

A daily job that queries this and compares `days_remaining` against your own threshold is the
simplest way to stop depending on someone reading an email.

### Automatic explicit acceptance [#automatic-explicit-acceptance]

`auto_accept_received` posts an ACD acceptance after N days. It ships **off**, because legal silence
already accepts on day 8: the automation only matters if you want an explicit record.

```bash
curl -X PATCH https://api.facturia.cl/v1/empresas/emp_01K2R6.../automation_settings \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Content-Type: application/json" \
  -d '{"auto_accept_received": true, "auto_accept_received_after_days": 5}'
```

> **Automating acceptance does not buy you more time**
>
> `auto_accept_received` speeds acceptance up; it does not extend the deadline to claim. Set it to 5
> days and you give up three days of window in exchange for an explicit record. Set it high, or do not
> set it.

## How to test it without waiting a week [#how-to-test-it-without-waiting-a-week]

The sandbox has a clock you can advance per empresa.

```bash
# 1. Inyecta un documento recibido
curl -sS https://api.facturia.cl/v1/test_helpers/received_documents \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Content-Type: application/json" \
  -d '{
    "tipo_dte": 33,
    "folio": 8812,
    "emisor": { "rut": "96790240-3", "legal_name": "Proveedor Austral SpA" },
    "issue_date": "2026-08-12",
    "totals": { "net": 450000, "iva": 85500, "total": 535500 }
  }'

# 2. Adelanta nueve días
curl -sS https://api.facturia.cl/v1/test_helpers/clock \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Content-Type: application/json" \
  -d '{"advance_days":9}'

# 3. Intenta reclamar: 422 commercial_response_window_closed
curl -X POST https://api.facturia.cl/v1/received_documents/rdoc_01K2R9M3D8V5QW7N/reject \
  -H "Authorization: Bearer $FACTURIA_KEY" -H "Facturia-Empresa: $EMPRESA" \
  -H "Content-Type: application/json" \
  -d '{"reason":"content","note":"Fuera de plazo"}'
```

That test belongs in your suite. It is the only deadline in this API that can cost you money for
doing nothing.

## The legal detail, in short [#the-legal-detail-in-short]

Tacit acceptance turns the factura into an enforceable, assignable instrument. That is why the
deadline matters more than an internal approval flow: past day 8, the argument is no longer with your
supplier but with whoever bought that factura.

The five actions you can take inside the deadline are in
[Commercial response](/en/docs/recepcion/respuesta-comercial).
