API reference
Read your cards, reviews, progress, vocabulary, writing history, and the course content you have access to. These endpoints use GET requests and return JSON.
Make a request
Link to “Make a request”In Vocapi, open Settings → API keys and create a key with the scopes your tool needs. You can rotate or revoke it from the same screen.
Use the API base URL provided for your environment and send the key as a bearer token:
curl "$VOCAPI_API_BASE/v1/user" \ -H "Authorization: Bearer $VOCAPI_API_KEY"Keep the key private. For access and connection details, see Developer access.
16 read endpoints
The list below is generated from Vocapi’s API contract.
GET
/v1/achievements
Get Achievements
Return the achievement catalog + the caller's progress for a language. Note: gated by ``progress:read`` -- there is no ``achievements:read`` scope in the ``api_keys`` scope catalog (``vocapi.api_keys.API_KEY_SCOPES``).
Parameters
-
languagequery · required
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/cards
Get Cards
List the caller's SRS cards, per-language or cross-language.
Parameters
-
languagequery · optional -
page_afterquery · optional -
per_pagequery · optional
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/content/lessons
Get Content Lessons
List a language's lessons in global curriculum order.
Parameters
-
languagequery · required -
page_afterquery · optional -
per_pagequery · optional
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/content/lessons/{lesson_id}
Get Content Lesson
Return one lesson in the forward sections/beats shape. The retired blocks arm is deleted (B5 #1629): sections/beats is the one lesson contract, and this read-only mirror follows the service read it wraps -- the same `LessonDetail` projection of the stored compiled build.
Parameters
-
lesson_idpath · required
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/content/readers
Get Content Readers
List a language's curated graded readers.
Parameters
-
languagequery · required -
page_afterquery · optional -
per_pagequery · optional
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/content/readers/{item_id}
Get Content Reader
Return one curated graded reader with its ordered sections.
Parameters
-
item_idpath · required
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/content/sentences
Get Content Sentences
List a language's active sentences, optionally filtered to one GP.
Parameters
-
languagequery · required -
grammar_point_idquery · optional -
page_afterquery · optional -
per_pagequery · optional
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/free-writes
Get Free Writes Route
Return a keyset page of the caller's graded free-production attempts.
Parameters
-
languagequery · optional -
updated_afterquery · optional -
page_afterquery · optional -
per_pagequery · optional
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/free-writes/error-patterns
Get Error Patterns
Return the caller's recurring error-pattern rollup for a language. Wraps :func:`get_recent_error_patterns` with its default recent-window size -- no extra windowing params on this surface.
Parameters
-
languagequery · required
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/progress/chapters
Get Progress Chapters
List a language's chapters with a per-chapter lesson-completion rollup.
Parameters
-
languagequery · required -
page_afterquery · optional -
per_pagequery · optional
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/progress/grammar-points
Get Progress Grammar Points
List a language's grammar-mastery dashboard, paginated.
Parameters
-
languagequery · required -
page_afterquery · optional -
per_pagequery · optional
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/progress/lessons
Get Progress Lessons
List every lesson in a language's curriculum order with completion state.
Parameters
-
languagequery · required -
page_afterquery · optional -
per_pagequery · optional
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/reviews
Get Reviews
Return a keyset page of the caller's review history.
Parameters
-
languagequery · optional -
updated_afterquery · optional -
page_afterquery · optional -
per_pagequery · optional
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.
GET
/v1/summary
Get Summary
Return the learner's active-language and global state rollup.
Parameters
None.
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
403The API key lacks the required scope. -
429Rate limit exceeded.
GET
/v1/user
Get User
Return the authenticated caller's profile.
Parameters
None.
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
403The API key lacks the required scope. -
429Rate limit exceeded.
GET
/v1/vocabulary
Get Vocabulary
List the caller's vocabulary knowledge inventory for one language.
Parameters
-
languagequery · required -
page_afterquery · optional -
per_pagequery · optional
Responses
-
200Successful Response -
401Missing, invalid, revoked, or expired API key. -
402Free-tier user filtered to a locked (paid) language. -
403The API key lacks the required scope. -
404Unknown language code, or no resource with the given id. -
422Validation Error -
429Rate limit exceeded.