> ## Documentation Index
> Fetch the complete documentation index at: https://docs.eat-now.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Changes to the Partner API and webhooks, newest first.

Every production change to the Partner API or to webhooks gets an entry here.
Entries tagged **Breaking change** require an action on your side; the others
do not. Subscribe to the RSS feed (button above) to be notified of new entries.

<Update label="October 2026" description="Webhooks" tags={["Webhooks"]}>
  ## Customer events and v1 event format

  Backward compatible, no action required: existing endpoints keep their
  current format until they are migrated.

  **Added**

  * Event format `v1`: `id`, `type`, `api_version`, `created`,
    `restaurant_id` and `data.object`, which uses the Partner API
    representation of the reservation or customer.
  * `data.previous_attributes` on `*.updated` events.
  * `EatNow-Signature` signature header (`t=…,v1=…`); secrets prefixed with
    `whsec_`.
  * Events `customer.created`, `customer.updated`, `customer.deleted` and
    `customer.merged` (`v1` format only).
  * `/webhook-endpoints` endpoints (scope `WEBHOOKS_WRITE`): create, retrieve,
    list, update, delete, `rotate-secret` and `test`. An endpoint only
    receives the events its API key can read.

  **Changed**

  * Endpoints created from the dashboard use the `v1` format. An existing
    endpoint can be migrated from Settings › Integrations › Webhooks; the
    migration cannot be reverted.

  [Webhooks reference](/api-reference/webhooks) ·
  [Migration guide](/api-reference/webhooks-legacy)
</Update>

<Update label="October 2026" description="Partner API" tags={["Partner API"]}>
  ## Customer resource

  Backward compatible, no action required.

  **Added**

  * Scopes `CUSTOMERS_READ` and `CUSTOMERS_WRITE` (`CUSTOMERS_WRITE` also
    requires `CUSTOMERS_READ`).
  * `GET /customers`: cursor pagination, `updated_since` parameter, and
    `email`, `phone`, `external_id` and `tag` filters.
  * `GET /customers/{id}`.
  * `POST /customers`: matches an existing customer on `external_id`, phone
    then email; `on_match` sets the behaviour on a match (`return_existing`,
    `update`, `create_new`).
  * `PATCH /customers/{id}`.
  * `GET /customer-fields`: the restaurant's custom fields.
  * `POST /reservations`: `customer.id` to link an existing customer, and
    `customer.on_match`.
  * `GET /reservations`: `customer_id` filter.

  [Customers reference](/api-reference/customers)
</Update>

<Update label="October 2026" description="Webhooks" tags={["Webhooks"]}>
  ## Webhook delivery and retries

  Backward compatible: payload format, signature and event names are
  unchanged.

  **Added**

  * Headers `X-EatNow-Attempt`, `X-EatNow-Delivery-Log-Id`, and
    `X-EatNow-Test: true` on test deliveries.
  * Delivery history for the last 30 days, with resend, in Settings ›
    Integrations › Webhooks.

  **Changed**

  * `RESERVATION_UPDATED` is now published for changes made from the POS
    (NowOS, Lightspeed), through the Partner API, by staff cancellations and
    by automatic status transitions (finished, no-show).
  * Deliveries are retried for 3 to 5 hours after a 5xx, 408 or 429 response,
    a network error or a timeout. `X-EatNow-Delivery` is identical across
    retries; `X-EatNow-Timestamp` is the event time.
  * Any other 4xx response is final and is not retried.
  * The `X-EatNow-*` header prefix is reserved: custom headers using it are no
    longer sent.

  [Legacy webhook format reference](/api-reference/webhooks-legacy)
</Update>
