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

# Changelog

> Changes to the API that affect your integration

What changed in the API's behaviour, newest first. Price changes are not listed
here — they come by email, as your agreement sets out.

Subscribe to the RSS feed to hear about changes as they ship.

**2 November 2026**

Refund requests, webhook event field

* **New:** [Request a refund](https://docs.esimstory.com/endpoints/request-refund.md) —
  `POST /v1/api_partner/esims/{topup_id}/refund` opens a refund request and
  answers `202`. [Get a refund request](https://docs.esimstory.com/endpoints/get-refund.md) reads it back.
  Both share a limit of 30 requests per minute.
* **New:** refund decisions arrive on your webhook URL as `refund.approved`
  or `refund.rejected`, only for requests you open through the API. See
  [Refund events](https://docs.esimstory.com/endpoints/webhooks.md#refund-events).
* Every webhook body now starts with an `event` field — `esim.issued` for
  eSIM deliveries, ahead of their existing fields, which are unchanged. The
  `X-Esim-Story-Event` header repeats it. Branch on the body field: the
  signature covers the body, not the headers. See
  [Webhooks](https://docs.esimstory.com/endpoints/webhooks.md).

**22 October 2026**

Product list endpoint

**New:** [List products](https://docs.esimstory.com/endpoints/list-products.md) —
`GET /v1/api_partner/products` returns every product you can order, with its
`option_id`, specification and your wholesale price. Filter by `country` (ISO
code), `location_type` or `location`. Limited to 10 requests per minute;
fetch it daily and cache it.

`Unlimited` plans report `data_mb` as `5120`, the full-speed part of each day.

**24 August 2026**

QR images on our own domain

`qrcode_img_url` now points to `assets.esimstory.com`. The URL is opaque:
don't parse it or depend on its host. `download_link` is the durable value,
and you can render your own QR from it. See
[Payload](https://docs.esimstory.com/endpoints/webhooks.md#payload).

**21 August 2026**

eSIM status, order size limit, webhook payload

* **New:** [Get eSIM status](https://docs.esimstory.com/endpoints/esim-status.md) —
  `GET /v1/api_partner/esims/{topup_id}/status` reports installation, data
  used and expiry. Limited to 60 requests per minute.
* One order now carries at most 100 eSIMs in total.
* Webhook payloads now carry a fixed, documented set of fields. See
  [Payload](https://docs.esimstory.com/endpoints/webhooks.md#payload).
* In sandbox, the test eSIM now arrives later through the webhook, the same
  way as in production.

**7 August 2026**

Signed bodies and signed, retried webhooks

* **Breaking:** the request signature now covers a SHA-256 hash of the body,
  so the signed string has five lines. See
  [Authentication](https://docs.esimstory.com/authentication/overview.md).
* Webhooks are signed. Verify each delivery before processing it — see
  [Verifying the signature](https://docs.esimstory.com/endpoints/webhooks.md#verifying-the-signature).
* Failed webhook deliveries are retried up to 10 times over about four and a
  half hours. The same `topup_id` can arrive more than once.

**4 August 2026**

Validation errors

A malformed order payload returns `422` with an `errors` array.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.