This Skill only explains how to read submitted practice data. When account data is needed, first followAgent API Configurationto bind and check capabilities.
Interface
| Capability | Data | Invocation constraints |
|---|---|---|
ielts_review_read_snapshot |
Question numbers, question types, question stems, user answers, answer keys, and optional material snapshots of submitted sessions | Only reads sessions already submitted by the current account; when only raw materials are needed, pass includeMaterial:true。 |
ielts_review_recent_activity |
Summaries and review references of submitted regular practice and completed mock exam subjects | First query the list, then use the returned reviewTarget as the detail tool's target。 |
ielts_practice_read_session |
Session status and browser entry | Use only when verifying unsubmitted regular practice. |
python3 scripts/ielts_buddy_api.py capabilities
python3 scripts/ielts_buddy_api.py call ielts_review_read_snapshot --json '{"target":{"kind":"practice","sessionId":123},"scope":"incorrect","includeMaterial":true}'
Boundaries
- The server returns factual data; it does not locate source-text evidence, judge error causes, or generate vocabulary or training suggestions.
- Formal answering and submission are completed on the browser practice page.
workflows/is an independent optional recommendation layer and is not part of this Skill's interface contract.
List and details
Querying learning records takes two steps: first read the list summary, then as needed use the returned reviewTarget to call ielts_review_read_snapshot to view the details of a practice session or a completed mock exam subject; for intensive listening use attemptId to call ielts_dictation_read_attempt, and for unsubmitted regular practice use sessionId to call ielts_practice_read_session. Do not expand details one by one just to list records. Before use, rely on the current account's capabilities.
In the list, sessionId is the number of practice attempts,partId is the number of distinct passages; distinguish zero answers, answered but unsubmitted, and submitted, and do not infer an IELTS score from the accuracy of partial questions. When complete records are needed, paginate by nextOffset、nextCursor or nextPage until hasMore=false; when an empty page has a subsequent cursor, you still need to continue.observationTruncated=true or coverage.sourceTruncated=true indicates the data is still incomplete, and you must not claim to have retrieved everything. The plan list contains only summaries; use planId to call ielts_study_plans_get to get the task page.
Footprint and learning statistics
For cross-product activity use ielts_footprints_list. Directly reading the server's summary、dailyCounts、todayCounts and total;activities is only this page; its length or date distribution cannot be used to recalculate historical totals, heatmaps, consecutive days, or this week's count. When only querying statistics, there is no need to pull the entire timeline.
For footprints, preferentially use nextCursor as-is as the next request's cursor, keeping kinds/query/timeRange unchanged. The statistics scope is statisticsScope=filtered_history, the time zone is Asia/Shanghai, and the daily counts cover the 28 days up to the day of asOf . Video progress for the same chapter on the same day is collapsed into one display activity, while the raw events are retained.
ielts_learning_pull_events synchronizes raw learning evidence; the numeric cursor and the footprint's string cursor are not interchangeable, and their item counts should not be directly compared. When the web page does not show records, first verify pagination and coverage, and do not use ielts_learning_push_events to backfill facts that already exist. When fields are missing or coverage.sourceTruncated=true is returned, maintain the conclusion of "incomplete", and rely on the currently deployedFootprint Interface Documentation.