This Skill only explains the data reading of mock tests and practice results. When account data is needed, first followAgent API Configurationto bind and check capabilities.
Interface
| Capability | Data | Invocation constraints |
|---|---|---|
ielts_mock_search_papers |
The mock test paper catalog and stable contentRef |
visible to the current account; can pass subjects、maxDurationMinutes、limit; read-only catalog, does not create a mock test session. |
ielts_review_recent_activity |
Reviewable records and completed subjects' reviewTargets |
pass kind:"mock", paginate by the returned nextOffset . |
ielts_review_read_snapshot |
Question-by-question answers and grading snapshots for a specified mock test subject | Take one reviewTargets element from the list as-is for target; read materials on demand. |
python3 scripts/ielts_buddy_api.py capabilities
python3 scripts/ielts_buddy_api.py call ielts_review_recent_activity --json '{"kind":"mock"}'
Boundaries
- The returned data is not an official IELTS score.
- For mock tests, only read the completed subjects referenced in the review returned by the list; do not treat incomplete subjects as submitted results on your own.
- This Skill does not generate ability judgments, remediation tasks, or follow-up plans.
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 test 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, refer to the current account's capabilities.
In the list, sessionId is the number of practice attempts,partId is distinct passages; distinguish zero answers, answered but unsubmitted, and submitted, and do not infer an IELTS score from the accuracy of partial questions. When a complete record is needed, paginate by nextOffset、nextCursor or nextPage until hasMore=false; when an empty page has a follow-up 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-side summary、dailyCounts、todayCounts and total;activities is only this page; its length or date distribution cannot be used to recalculate historical totals, heatmaps, streaks, or this week's counts. When only querying statistics, there is no need to pull the entire timeline.
For the footprint, preferentially use nextCursor as-is as the cursorof the next request, 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 in the same chapter on the same day is collapsed into one display activity, while the raw events are retained.
ielts_learning_pull_events syncs raw learning evidence; the numeric cursor and the footprint's string cursor are not interchangeable, and the number of items in the two should not be directly compared. When the web page does not show records, first check pagination and coverage scope, 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.