Personalization Service
Overview
The Personalization Service stores end-user-specific data for frontend applications. It is similar to browser local storage, but the data is shared between clients and devices for the same authenticated context.
The managed, multi-tenant service works with the User Service. Common uses include preferences, profile settings, favorites, watch history, and playback progress.

Common use cases
- User preferences and settings
- Profile-specific data
- Favorites and watch lists
- Recently viewed content
- Playback progress
How data is organized
Keys
Keys are strings matching ^[\\w-]+(:[\\w-]+)*$. Colons provide simple namespaces, for example ui:preferences, playback:movie:100, and content:favorites.
Values
Key-value and array values are valid JSON. Each JSON value is limited to 10,240 bytes. Progress values use the separate Progress API and are integers.
Scopes
| Scope | Identity used |
|---|---|
USER | Authenticated user |
PROFILE | Authenticated user and active profile |
APPLICATION | Authenticated user, active profile, and application |
The same key can contain different values in different scopes. The requested scope must be available in the authenticated context.
Interfaces
The Personalization Service exposes the following functionality through its GraphQL API.
Data API
The Data API stores, reads, and deletes one JSON value per scoped key. See the Key-value API.
Progress API
The Progress API stores frequently changing integer values such as playback positions. See the Progress API.
Array API
The Array API stores collections of independently addressable items, including favorites and watch history. New integrations should use the itemId-based operations described in the Array API. Earlier array operations remain available for compatibility but are deprecated; see Migrate from deprecated Array APIs.
Choose an API
| Requirement | API |
|---|---|
| Store one JSON value under a key | Key-value API |
| Store frequently changing integer progress | Progress API |
| Store a collection with item identity, ordering, or pagination | Array API |
| Address items by a domain identifier | Array API with itemId |
Endpoint
https://personalization.service.eu.axinom.net/graphql
Authentication and authorization
All requests require a JWT bearer token issued through the User Service. The token determines the tenant, environment, user, profile, and application context used for scope resolution.
Every scope requires a user. PROFILE requires a profile, and APPLICATION requires both a profile and an application.
Limits at a glance
| Limit | Value |
|---|---|
Key and itemId syntax | ^[\\w-]+(:[\\w-]+)*$ |
Maximum itemId length | 256 characters |
| JSON value size | 10,240 bytes |
| Cursor page size | 1–500; default 20 |
| Lookup/delete raw selectors | 100 maximum |
See Errors and limits for the complete contract.
Pricing
The service fee follows a tiered model depending on the number of end users whose data is stored. See Mosaic Pricing for more information.