Question regarding Dynamic Translation caching behavior and character usage Issue <!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } ProblemDoes the translation API call trigger actively for each ticket and every individual user, or are the translations cached?For example, if a ticket contains 1,000 characters, would a total of 2,000 characters need to be translated (and billed) if two different users view it? Release<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } All Cause<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } Resolution<!-- /*NS Branding Styles*/ --> .ns-kb-css-body-editor-container { p { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } span { font-size: 12pt; font-family: Lato; color: var(--now-color--text-primary, #000000); } h2 { font-size: 24pt; font-family: Lato; color: var(--now-color--text-primary, black); } h3 { font-size: 18pt; font-family: Lato; color: var(--now-color--text-primary, black); } h4 { font-size: 14pt; font-family: Lato; color: var(--now-color--text-primary, black); } a { font-size: 12pt; font-family: Lato; color: var(--now-color--link-primary, #00718F); } a:hover { font-size: 12pt; color: var(--now-color--link-primary, #024F69); } a:target { font-size: 12pt; color: var(--now-color--link-primary, #032D42); } a:visited { font-size: 12pt; color: var(--now-color--link-primary, #00718f); } ul { font-size: 12pt; font-family: Lato; } li { font-size: 12pt; font-family: Lato; } img { display: ; max-width: ; width: ; height: ; } } Dynamic Translation uses a two-tier caching mechanism. Translations are not re-fetched for every user view. How it works: 1. When the first user views a field that requires translation, the platform calls the configured translation provider (e.g., Google Translate, Microsoft Translator) and stores the result in: - In-memory cache — for fast retrieval on subsequent requests - Database cache (sn_dt_translation_cache table) — persistent storage that survives cache flushes and node restarts 2. When any subsequent user views the same text in the same target language, the platform serves the translation directly from cache — no API call is made and no characters are billed. For your example: A ticket with 1,000 characters viewed by two users in the same target language: ┌─────────────────────────────────────────────────────┬────────────────────────┬───────────────────┐ │ Scenario │ API Call? │ Characters Billed │ ├─────────────────────────────────────────────────────┼────────────────────────┼───────────────────┤ │ User 1 views the ticket (first translation request) │ Yes │ 1,000 │ ├─────────────────────────────────────────────────────┼────────────────────────┼───────────────────┤ │ User 2 views the same ticket, same target language │ No (served from cache) │ 0 │ ├─────────────────────────────────────────────────────┼────────────────────────┼───────────────────┤ │ Total │ 1 API call │ 1,000 characters │ └─────────────────────────────────────────────────────┴────────────────────────┴───────────────────┘ When a new API call IS made: - The source text changes (e.g., the ticket description is updated) - A different target language is requested (e.g., User 1 needs French, User 2 needs German — that's 2 separate translations) - The translation cache is manually cleared Additional details: - The in-memory cache holds up to 500 entries by default and caches texts up to 1,000 characters in length - The database cache (sn_dt_translation_cache) has no size limit and persists across cache flushes - Texts longer than 1,000 characters are still cached in the database, just not in the in-memory tier - You can view cached translations on your instance at: sn_dt_translation_cache.do In summary, translations are cached per unique combination of source text + target language + translation provider. Multiple users viewing the same content in the same language will only result in a single API call.