---
title: "Update texts"
description: "Change customer-facing texts in one locale, as the settings Translate view does: send locale and texts, a partial tree with the same paths GET /settings/texts returns (for example {\"email\": {\"subject\": \"…\"}, \"download_pa"
url: https://docs.filemonk.io/v2/api-reference/settings/update-texts/
api: "API v2 reference"
method: PATCH
path: "/settings/texts"
---

# Update texts

`PATCH https://app.filemonk.io/api/v2/external/settings/texts`

Change customer-facing texts in one locale, as the settings Translate view does: send locale and texts, a partial tree with the same paths [`GET /settings/texts`](https://docs.filemonk.io/v2/api-reference/settings/get-texts/) returns (for example {&quot;email&quot;: {&quot;subject&quot;: &quot;…&quot;}, &quot;download_page&quot;: {&quot;texts&quot;: {&quot;button&quot;: &quot;…&quot;}}}). Answers with that locale's texts after the save.

**Note:** locale defaults to the shop's default language. Another locale needs multi-language on (409 multi_language_disabled). null clears a translation so buyers see the default language. The same checks as the dashboard run (email copy is spam-checked, the download button can't be blank).

## Request body

- `texts` (object)
  - `email` (object)
    - `subject` (string): e.g. `Vos téléchargements sont prêts`
- `locale` (string): e.g. `fr`

## Returns

- `locale` (string, nullable, required): e.g. `fr`
- `texts` (object, required)
  - `email` (object, required)
    - `subject` (string, nullable, required): e.g. `Vos téléchargements sont prêts`
    - `button` (object, required)
      - `text` (string, nullable, required): e.g. `Télécharger`
  - `download_page` (object, required)
    - `texts` (object, required)
      - `thanks` (string, nullable, required): e.g. `Merci pour votre commande`
      - `button` (any, required)
- `untranslated` (array of strings, required)

Rate limit: this call costs 2 points ([rate limits](https://docs.filemonk.io/v2/errors-and-rate-limits/)).

## Example request

```sh
curl -X PATCH "https://app.filemonk.io/api/v2/external/settings/texts" \
  -H "X-Auth-Token: $FILEMONK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "locale": "fr",
    "texts": {
      "email": {
        "subject": "Vos téléchargements sont prêts"
      }
    }
  }'
```

## 200

Success: the write completed; the body is the updated resource.

```json
{
  "locale": "fr",
  "texts": {
    "email": {
      "subject": "Vos téléchargements sont prêts",
      "button": {
        "text": "Télécharger"
      }
    },
    "download_page": {
      "texts": {
        "thanks": "Merci pour votre commande",
        "button": null
      }
    }
  },
  "untranslated": [
    "download_page.texts.button"
  ]
}
```

## 401

Missing or invalid API key.

```json
{
  "errors": [
    "Invalid API key"
  ]
}
```

## 409

The request conflicts with the current state (an order Shopify is not ready to fulfil, a digital product that already exists). Nothing was changed; read the message, don't retry blindly.

```json
{
  "errors": [
    "This product already has a digital product"
  ]
}
```

## 422

The request failed validation, or sent a key the action does not take (`code: &quot;unknown_parameters&quot;` with `unknown` and `accepted`). Nothing was saved.

```json
{
  "errors": [
    "access.download_limit_count must be an integer of at least 0"
  ],
  "field_errors": {
    "access.download_limit_count": [
      "must be an integer of at least 0"
    ]
  }
}
```

## 429

Rate limited. Cost-weighted per API key, shared with API v1: a read costs 1 point, a write 2, 40 points per fixed 60-second window. Every response carries `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset` (Unix time the window ends); a 429 adds `Retry-After` (seconds), `retry_after`, `retryable: true` and a `next_step` in the body. A 429 did nothing: wait `retry_after` seconds, then send the same request again. The budget is per key, so every tool or script using the key shares it; prefer one list call with `per_page` over many single reads.

```json
{
  "errors": [
    "You have exceeded the rate limit of 40 points per 60 seconds. Read requests cost 1 point(s) and write requests cost 2 point(s). Please retry after 12 second(s)."
  ],
  "code": "rate_limited",
  "retry_after": 12,
  "error": "Rate limit exceeded",
  "message": "You have exceeded the rate limit of 40 points per 60 seconds. Read requests cost 1 point(s) and write requests cost 2 point(s). Please retry after 12 second(s)."
}
```

