API changelog — field changes, vocabulary corrections, and guidance for refreshing cached word lists.
All 11,000 HSK 2026 entries have English glosses on
translatepark.com.
Coverage on that service was verified on September 23, 2026. Read
gloss from each word; en-US is the default base language.
Refresh cached meanings and preserve word_id references.
See the production confirmation.
For agent eyes only.
Translate Park is the database layer under your teaching -- not a dead word list you download and maintain, but a living source of truth. Query the official HSK 2026 vocabulary by level -- stable word IDs, official source details, no account, no login -- and check your students against the standard itself, not a publisher's approximation. How you teach and test stays entirely yours: the pace, the exercises, the wording, the judgment. We hold the finish line; you decide how to get there.
Every word carries a stable ID, so the words a student knows are just a
list of word_ids -- something you can hand to another agent
instead of starting them over from zero. Storing that list is yours
today; we do not keep it.
COMING UP SOON: post student progress back to the database. User accounts. Spanish, French, and Japanese frameworks. The standard stays current and your students go portable -- check back, this page updates as each one lands.
Read-only vocabulary endpoints require no account. Each level includes new words and earlier words with newly introduced parts of speech. Every word lists all of its meanings, dictionary style, each tagged with the level that teaches it.
Start at the syllabus catalog for counts, the revision, original PDF downloads, and source page links. The API retains the complete guide and the separate official competency descriptions. This content is in Chinese; it does not supply authored lessons, translated explanations, exercises, audio, or stroke-order assets.
GET /api/v1/standards/hsk-2026/syllabus/items/?kind=grammar&level=1
returns source grammar rows. Replace kind using the table below.
Each record has item_id, kind, level,
position, data, source, and
locations (physical page, printed page, and table row when available).
IDs are repository-assigned source references, not official skill identifiers.
For vocabulary, position is the original document-wide word number (1–11,000),
not an index within the level. For other kinds it is the 1-based position
within the kind and source scope.
| kind | Fields in data | Meaning |
|---|---|---|
| task | number_as_printed, title, scene, abilities | One task and all its ability statements; scene may be null. |
| topic | category, subcategory, topic | One leaf in the three-column topic hierarchy. Column depth is not an HSK level. |
| vocabulary | number, level_as_printed, word_as_printed, pinyin, part_of_speech | Original PDF row, without learner meanings. Use the existing vocabulary API for stable word_id and reviewed meanings. Never join a PDF number directly to a word_id. |
| character_recognition | character, number | Written characters to recognize, distinct from words. |
| character_writing | character, number | Characters in the official handwriting lists. |
| grammar | category, subcategory, topic, content | One leaf table row; Full-width PDF wraps are joined; meaningful statement/list breaks remain as newlines. Preserve those breaks when displaying content. Blank source cells remain blank. Not a count of distinct skills. |
| competency | description | One official proficiency description per level, including separate 7, 8 and 9. |
| section_note | section, text | Advanced task introduction and scope explanation. |
Filters use the exact source scope, not cumulative requirements. Most sections
use 1–6 and 7-9. Handwriting uses 1-2, 3, 4, 5, 6 and 7-9: request
kind=character_writing&level=1-2 for the shared beginner list.
A level=1 handwriting query correctly returns no rows. Competency descriptions
use 1–9 individually. The catalog lists every available kind/scope/count.
Items are paginated: page starts at 1; page_size
defaults to 100 and accepts 1–500. Follow next until null.
Responses contain revision, count, next,
previous, and results. Ordering is kind, source scope,
then position. Cache by revision; restart collection if the revision changes.
Read /syllabus/sources/guide/pages/377/ under the same standard
prefix for printed page 374. All 406 guide pages are available, including front
matter and dividers; the separate competencies source has one page.
Page text removes rotated watermarks but preserves layout line breaks;
consult the PDFs for visual structure. PDF downloads verify the published SHA-256
before serving; missing or mismatched files return 503. Front matter has null printed_page.
These endpoints need no account and share the standards anonymous limit of 60 requests per minute per IP (429 when exceeded). Unsupported or repeated parameters, including base_language, return 400; unknown sources/pages and out-of-range pagination return 404; an absent or partial import returns 503. Existing vocabulary endpoints retain their response contracts.
GET /api/v1/standards/hsk-2026/levels/:
the seven published vocabulary groups, 1–6 and
7-9, with total, new and returning counts, meaning coverage,
and canonical URLs. The official source supplies a shared advanced word list.GET /api/v1/standards/hsk-2026/levels/<level>/:
the complete teaching list for one published group, identified by
level. Unknown identifiers return 404.GET /api/v1/standards/hsk-2026/levels/7-9/?difficulty=easier:
1,874 entries from the advanced group. Use easier,
middle, or harder; together these disjoint practice
lists contain every advanced entry.GET /api/v1/standards/hsk-2026/words/<word_id>/:
one word with all its meanings. Optional
?part_of_speech=verb and ?level=3 filters intersect.
Unknown words return 404; invalid filters return 400.
A valid filter without a matching meaning returns an empty list.The duplicate /bands/ family and the individual advanced
URLs /levels/7/, /levels/8/, and
/levels/9/ have been removed and return 404.
Use /levels/7-9/ for the complete advanced group.
The advanced catalog item's tp_difficulty.options lists each
filter's URL, difficulty, word_count,
new_word_count, and returning_word_count.
Filtered responses supply these counts, translation glossed_count,
and tp_difficulty.selected, dataset_id,
is_estimate: true, basis_language: "en-US", and
description. Retain the dataset ID with cached practice lists;
refresh them when the published dataset version changes.
These are Translate Park estimates of written reading difficulty after
groups 1–6, based on the reviewed English meanings. They are not official
HSK levels 7, 8, or 9 or validated proficiency boundaries. The ranking is
divided into equal thirds; tied scores can span groups and are assigned
reproducibly by published word ID. Words retain published-number order
within each filtered list. The estimates do not change when you request
another base language. Catalog URLs use the default language; combine
difficulty with base_language when fetching another
language, for example ?difficulty=middle&base_language=es-ES.
Use exactly one nonempty difficulty value, only on
/levels/7-9/. Invalid, empty, repeated values and use on the
catalog or groups 1–6 return 400. When the active meaning
release, vocabulary, or dataset does not match the frozen classification,
filtered requests return 503 and the catalog omits difficulty
options. Validation verdicts are cached for at most 60 seconds; release
changes are checked immediately, while other stored-data edits may take up
to 60 seconds to affect availability. The complete unfiltered vocabulary
remains available.
The division of labor: you know the language and your student, we know the syllabus. The API tells you which words belong to which band and in what order. How many words a session, what counts as known, what a quiz looks like, what to say -- that is your interface, not ours. What follows is what the data supports, not a lesson plan.
Levels are not cumulative. Level 3 contains 507 entries: 500 new words and seven returning words with new parts of speech. The seven bands contain 300, 204, 507, 1,019, 1,638, 1,815 and 5,622 entries. Across the bands there are 11,000 distinct word IDs and 11,105 source-band memberships. The catalog includes the advanced group once. Summing its counts gives membership totals; use distinct word IDs to count unique words.
word_count counts all entries in the level;
new_word_count and returning_word_count partition it.word_id is stable across levels and source-number corrections.
Preserve it for word identity; use (word_id, level) for teaching
membership. Identically written entries can have different IDs.number retains the originally published number and determines
list order. source_number records the current official source number.
Refresh complete cached lists when membership changes; do not resume solely
from a list position.Each word has one meanings list and nothing that repeats it.
A meaning has sense_id, part_of_speech (a code such as
noun or classifier; labels are in the response's
parts_of_speech registry), gloss and hsk_level.
These are reviewed learner meanings, not every dictionary sense.
{"part_of_speech": "classifier", "gloss": "minute; point (in a score); fen (one hundredth of a yuan)", "hsk_level": "1"},
{"part_of_speech": "verb", "gloss": "to divide; to distribute", "hsk_level": "3"},
{"part_of_speech": "noun", "gloss": "fraction", "hsk_level": "3"}
hsk_level retains the source band that teaches the meaning, including 7-9, or
null when HSK never teaches it. 希望 is assigned only as a verb,
so its noun “hope” has hsk_level: null. Meanings are ordered by
level, with null last.filter states the rule: the meanings taught at
that group are those whose hsk_level equals filter.equals.
This remains 7-9 for every advanced difficulty filter. Their
parts of speech are the ones the level teaches for that word. The word's
introduction level is its earliest hsk_level; a word is new in the
requested group when that equals level.filter.equals with “; ”.
The word lookup's ?level= filter also uses source-band labels;
use ?level=7-9 for advanced meanings.word and pinyin use the current official source.
Optional-form fields also_written and
also_written_pinyin are null when the source does not print an
optional form.en-US) is the default. Request another supported
language with ?base_language=. Unknown or inactive languages
return 400. Missing translations remain null; no other POS,
level, or language is substituted. The catalog's glossed_count
counts entries with complete translations for their level's meanings.
Anonymous callers get 60 requests per minute per IP.
Past that the API answers 429 with a JSON body: back off and
retry. If you need more, fetch each level once and cache it -- the
changelog identifies corrections that warrant a cache refresh.