Skip to content

Topics in the corpus ​

GET/v1/topics

Lists every topic with how many clips carry it, broken down by CEFR level. Use it to see whether the corpus covers what your learners care about before you build a filter around it, and to decide which topics have enough beginner material.

Needs a key. /corpus gives the headline numbers without one; this endpoint maps the corpus in detail, which is for customers rather than for everyone.

Parameters ​

NameInTypeDefaultRequiredDescription
languagequerystringennoLanguage of the clips, as a two-letter code. Only languages listed by /corpus return results.

Response ​

FieldTypeDescription
languagestring
topicsobject[]
topics[].topiceveryday | food | travel | sport | science | business | technology | entertainment | health | learning | otherWhat the clip is about. One label per clip, chosen from a fixed list so filters stay stable; other is used when nothing else fits. Topic and level are not independent: food, everyday and travel skew to the easier levels, science and business to the harder ones.
topics[].clipsintegerClips carrying this topic in the requested language.
topics[].byLevelobjectClip count per CEFR level, so a caller can see whether a topic has beginner material.
updatedAtstring (ISO 8601)

Errors ​

StatusCodeWhen
429rate_limitedToo many requests, or the plan quota is spent. Retry-After carries the wait in seconds.

Example ​

bash
curl https://clips.vocaflare.com/v1/topics \
  -H "Authorization: Bearer $VOCAFLARE_API_KEY"
json
{
  "language": "en",
  "topics": [
    {
      "topic": "food",
      "clips": 151,
      "byLevel": {
        "A1": 2,
        "A2": 11,
        "B1": 123,
        "B2": 15
      }
    },
    {
      "topic": "science",
      "clips": 202,
      "byLevel": {
        "A2": 4,
        "B1": 53,
        "B2": 104,
        "C1": 41
      }
    }
  ],
  "updatedAt": "2026-09-20T00:40:00Z"
}