Your app learns about a learner only through context slices. Each slice is a small record with fixed fields. Your manifest lists the slices it asks for, the learner agrees to each one when they install your app, and Lingara sends a slice only while both still hold.
The slices
Slice
Field
What it holds
languages
source_lang
The language the learner studies from, as a language tag such as en.
target_lang
The language they are learning.
level
Their level in it, from 1 to 9, when they have set one.
plan_summary
plan_id
The id of their latest lesson plan, which tells one plan from another. Your app cannot fetch the plan with it, because your app’s token reads your own account, not the learner’s.
title
The plan’s generated title, at most 120 characters, when it has one.
target_lang
The language the plan teaches.
set_count
How many sets the plan has, at most 200.
sets_completed
How many of those sets the learner has finished.
review_due
due
How many flashcards are due now, at most 100000.
learned
How many words they have learned, at most 100000.
tutor_topic
topic
What their latest tutor chat is about, from 1 to 120 characters. It comes from a plan’s title or the screen they are on, never from their own words.
What no slice carries
No slice carries an email address, a name, a user id or anything the learner typed. Your app learns who the learner is from the request’s subject, a stable value that is different for every app. Your app’s token reads your own account, never the learner’s, so the slices are all your app knows about them.
Consent
The learner agrees to each slice when they install your app. To change what they agreed to, they uninstall your app and install it again.
If you edit your manifest to ask for fewer slices, the ones you dropped stop at once.
If you edit it to ask for more, the new slices reach no learner until they reinstall.
Lingara checks consent again on every request, and drops any slice the learner did not agree to or your manifest no longer asks for. A slice that does not fit its record is dropped too, never the whole request.
The sample below builds its line from the slices it was given and calls no API.