defaultLanguage. Responses return stored translations. FITsociety does not
generate translations or select a language based on request headers.
Supported resources
Internal apps and endpoints retain their current text contracts. The read-only
resources expose whichever languages their source storage contains; this
contract does not add internal translation editors or migrate existing data.
Personal names, free-form notes, client answers and operational snapshots keep
their existing representations.
Writing translations
- Create requires
defaultLanguage. Use canonical BCP-47 language codes, such asnl,en, oren-GB; the calendar restriction above still applies. - Each text map accepts up to 25 languages. Codes are canonicalized; duplicate codes after canonicalization are rejected.
- Every nonempty map must include
defaultLanguage. Values must be nonempty strings; surrounding whitespace is removed. Field limits apply per language. - A supplied map replaces all translations for that field. Omitted PATCH fields retain their translations. Include the whole map when adding a language.
- Optional text can be cleared with
{}. Required text cannot be empty. Plain strings,null, arrays, empty translation strings and the input language codeundare rejected. - A change of
defaultLanguagerequires the new language in all retained nonempty maps. It also changes the source text used by existing internal flows. - Habit template
remindersand form structure arrays follow their documented replacement rules. Include all required elements and their complete text maps.
cURL
Legacy records and display fallback
When the source language is unknown,defaultLanguage is null. A legacy
string is returned as { "und": "Original text" }; an empty string becomes
{}. Existing maps retain their language codes. GET requests never write data
or guess a language from the company or coach settings.
The first Public API content update of a legacy form, habit template or product
requires an explicit defaultLanguage. This declares the language of retained
source strings. Habit templates store translations directly in the text fields;
their internal source-string adapter clears stale translations when the source
changes. Forms and finance products currently retain their legacy string storage
with a separate translation layer; the Public API stops returning stale
translations when an internal edit changes those strings. The public contract
can remain the same when those models later adopt native language maps.
Consumers can choose the requested language, then the declared default language,
then und. If none exists, use an explicitly chosen stored language or your
application’s missing-text treatment. Missing translations are absent keys;
they are not copies of another language. The API does not perform this fallback
on behalf of the consumer.