Update texts
/settings/textsCosts 2 rate-limit points · Rate limits
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_page": {"texts": {"button": "…"}}}). Answers with that locale's texts after the save.
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).
Also searched astranslate the download emailchange french textsset german download page textfix a translation
Request body
textsobjectShow 1 child attributeHide child attributes
emailobjectShow 1 child attributeHide child attributes
subjectstringExample:Vos téléchargements sont prêts
localestringExample:fr
Returns
localestring, nullableExample:frtextsobjectShow 2 child attributesHide child attributes
emailobjectShow 2 child attributesHide child attributes
subjectstring, nullableExample:Vos téléchargements sont prêtsbuttonobjectShow 1 child attributeHide child attributes
textstring, nullableExample:Télécharger
download_pageobjectShow 1 child attributeHide child attributes
textsobjectShow 2 child attributesHide child attributes
thanksstring, nullableExample:Merci pour votre commandebuttonany
untranslatedarray of strings
Errors
Missing or invalid API key.
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.
The request failed validation, or sent a key the action does not take (code: "unknown_parameters" with unknown and accepted). Nothing was saved.
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.
Every error has the same shape: see Errors.
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"
}
}
}'const res = await fetch("https://app.filemonk.io/api/v2/external/settings/texts", {
method: "PATCH",
headers: {
"X-Auth-Token": process.env.FILEMONK_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
"locale": "fr",
"texts": {
"email": {
"subject": "Vos téléchargements sont prêts"
}
}
}),
});
const data = await res.json();import os
import requests
res = requests.patch(
"https://app.filemonk.io/api/v2/external/settings/texts",
headers={"X-Auth-Token": os.environ["FILEMONK_API_KEY"]},
json={
"locale": "fr",
"texts": {
"email": {
"subject": "Vos téléchargements sont prêts"
}
}
},
)
data = res.json()require "net/http"
require "json"
uri = URI("https://app.filemonk.io/api/v2/external/settings/texts")
req = Net::HTTP::Patch.new(uri, "X-Auth-Token" => ENV["FILEMONK_API_KEY"], "Content-Type" => "application/json")
req.body = {
locale: "fr",
texts: {
email: {
subject: "Vos téléchargements sont prêts"
}
}
}.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }
data = JSON.parse(res.body){
"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"
]
}{
"errors": [
"Invalid API key"
]
}{
"errors": [
"This product already has a digital product"
]
}{
"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"
]
}
}{
"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)."
}