> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vacademy.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Get a course

> Everything a course page needs: the summary fields plus descriptions, FAQs, preview video, authors, learning-path series, `seo` and schema.org `structured_data`. `id` may be the course id or the id of any of its language versions; the response `id` is always the course id.

Scope: `catalog:read`. Cacheable for 60 s.



## OpenAPI

````yaml /api-reference/openapi.json get /courses/{id}
openapi: 3.1.0
info:
  title: Vacademy Catalogue API
  version: 1.0.0
  description: >-
    Read an institute's published courses, streams and learning paths for its
    own website, and send enquiries into its CRM.
servers:
  - url: https://api.vacademy.ai/catalog/v1
security:
  - ApiKey: []
  - Bearer: []
tags:
  - name: Site
  - name: Courses
  - name: Streams
  - name: Learning paths
  - name: Enquiries
paths:
  /courses/{id}:
    get:
      tags:
        - Courses
      summary: Get a course
      description: >-
        Everything a course page needs: the summary fields plus descriptions,
        FAQs, preview video, authors, learning-path series, `seo` and schema.org
        `structured_data`. `id` may be the course id or the id of any of its
        language versions; the response `id` is always the course id.


        Scope: `catalog:read`. Cacheable for 60 s.
      operationId: getCourse
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
          example: 7c12a9ec-22c3-4c55-ada1-2a93e107816f
        - name: language
          in: query
          required: false
          description: >-
            A code from `GET /site` `languages`. Shows that language's version
            of the course (title, url, price). Ignored when the site has course
            languages off.
          schema:
            type: string
          example: hi
      responses:
        '200':
          description: The course.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
            Cache-Control:
              $ref: '#/components/headers/CacheControl'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CourseDetail'
              example:
                id: 7c12a9ec-22c3-4c55-ada1-2a93e107816f
                title: Vedic Parenting - eBook
                subtitle: The forgotten mystery of the real meaning of parents!
                image_url: >-
                  https://cdn.example.com/32aa2224-c7b1-46cf-b7ae-ebf1a37c5e34.png
                url: >-
                  https://learning.brahmvarchas.org/store/7c12a9ec-22c3-4c55-ada1-2a93e107816f?enrollInviteId=5a975e3c-429f-4bfe-9143-43ffcf807748&packageSessionId=92e89046-5865-4cf7-bea6-ac1e8b7bd328&level=default
                formats:
                  - key: ebook
                    label: E-books
                stream:
                  slug: dharma
                  label: Virtue | Civilisation
                category:
                  slug: vedic-parenting
                  label: Holistic Parenting
                languages:
                  - code: en
                    label: English
                  - code: hi
                    label: Hindi
                tags:
                  - english
                  - dharma
                  - vedic-parenting
                  - format-ebook
                  - for-parents
                  - hindi
                level: null
                availability: available
                price_visible: true
                price:
                  amount: 251
                  compare_at_amount: null
                  currency: INR
                  is_free: false
                  varies: false
                instructors:
                  - name: Abhishek
                    image_url: null
                rating: null
                created_at: '2026-09-22T09:05:02.499Z'
                variants:
                  - package_session_id: 92e89046-5865-4cf7-bea6-ac1e8b7bd328
                    enroll_invite_id: 5a975e3c-429f-4bfe-9143-43ffcf807748
                    level: null
                    language:
                      code: en
                      label: English
                    url: >-
                      https://learning.brahmvarchas.org/store/7c12a9ec-22c3-4c55-ada1-2a93e107816f?enrollInviteId=5a975e3c-429f-4bfe-9143-43ffcf807748&packageSessionId=92e89046-5865-4cf7-bea6-ac1e8b7bd328&level=default
                    availability: available
                    price:
                      amount: 251
                      compare_at_amount: null
                      currency: INR
                      is_free: false
                  - package_session_id: 5c4fcbf5-851c-455c-90b4-f74217ded156
                    enroll_invite_id: f2496594-7a63-47eb-8b22-a0af43e75fb6
                    level: null
                    language:
                      code: hi
                      label: Hindi
                    url: >-
                      https://learning.brahmvarchas.org/store/c150dfcf-96e0-4712-b709-b0528e1f4a09?enrollInviteId=f2496594-7a63-47eb-8b22-a0af43e75fb6&packageSessionId=5c4fcbf5-851c-455c-90b4-f74217ded156&level=default
                    availability: available
                    price:
                      amount: 251
                      compare_at_amount: null
                      currency: INR
                      is_free: false
                description_html: >-
                  <p><span>The forgotten mystery of the real meaning of
                  parents!</span></p>
                description_text: The forgotten mystery of the real meaning of parents!
                about_html: >-
                  <p><strong>Vedic Parenting is a comprehensive science based on
                  the development of the Panchakosha system,&nbsp;which has been
                  used in India as a major science for thousands of
                  years.</strong></p><p>It is a blend of principles derived from
                  texts like the Vedas, Upanishads, Shastras, Ramayana,
                  Mahabharata, and modern psychology, providing parents w</p>
                about_text: >-
                  Vedic Parenting is a comprehensive science based on the
                  development of the Panchakosha system, which has been used in
                  India as a major science for thousands of years. It is a blend
                  of principles derived from texts like the Vedas, Upanishads,
                  Shastras, Ramayana, Mahabharata, and modern psychology,
                  providing parents w
                why_learn_html: null
                who_should_learn_html: null
                mode: self_paced
                faqs:
                  - question: Who is this eBook for?
                    answer_html: <p>Parents and parents-to-be.</p>
                preview_video: null
                authors:
                  - name: Jigyasa Acharya
                    subtitle: Founder
                    bio_html: <p>Guru Maa</p>
                    image_url: https://cdn.example.com/pic-1.png
                series:
                  name: A woman's life stages
                  steps:
                    - course_id: 8610911c-382c-41a9-9e33-2e4e0882282f
                      title: Rajaswala Paricharya
                      url: >-
                        https://learning.brahmvarchas.org/store/8610911c-382c-41a9-9e33-2e4e0882282f?enrollInviteId=b6d3bd0d-db65-43fe-9cdb-07e67e8aed01&packageSessionId=18bba28f-5b33-4acc-927d-f1b28d9722d5&level=default
                      current: false
                    - course_id: f7c3b58e-b3bc-4d04-b897-e250ecf60b3a
                      title: Vedic Garbha Vigyan (Encyclopedia)
                      url: >-
                        https://learning.brahmvarchas.org/store/f7c3b58e-b3bc-4d04-b897-e250ecf60b3a?enrollInviteId=0381174f-f48f-4dc1-94b9-a4f146ab8797&packageSessionId=2db531bc-c100-410f-9447-e444db03fe0c&level=default
                      current: false
                    - course_id: 7c12a9ec-22c3-4c55-ada1-2a93e107816f
                      title: Vedic Parenting - eBook
                      url: >-
                        https://learning.brahmvarchas.org/store/7c12a9ec-22c3-4c55-ada1-2a93e107816f?enrollInviteId=5a975e3c-429f-4bfe-9143-43ffcf807748&packageSessionId=92e89046-5865-4cf7-bea6-ac1e8b7bd328&level=default
                      current: true
                seo:
                  title: Vedic Parenting - eBook
                  description: The forgotten mystery of the real meaning of parents!
                  image_url: >-
                    https://cdn.example.com/32aa2224-c7b1-46cf-b7ae-ebf1a37c5e34.png
                  canonical_url: >-
                    https://learning.brahmvarchas.org/store/7c12a9ec-22c3-4c55-ada1-2a93e107816f
                structured_data:
                  '@context': https://schema.org
                  '@type': Course
                  name: Vedic Parenting - eBook
                  description: The forgotten mystery of the real meaning of parents!
                  image: >-
                    https://cdn.example.com/32aa2224-c7b1-46cf-b7ae-ebf1a37c5e34.png
                  url: >-
                    https://learning.brahmvarchas.org/store/7c12a9ec-22c3-4c55-ada1-2a93e107816f
                  inLanguage: en
                  provider:
                    '@type': Organization
                    name: Brahm Varchas Shiksha
                    sameAs: https://learning.brahmvarchas.org/
                  offers:
                    - '@type': Offer
                      price: 251
                      priceCurrency: INR
                      category: Paid
                      url: >-
                        https://learning.brahmvarchas.org/store/7c12a9ec-22c3-4c55-ada1-2a93e107816f?enrollInviteId=5a975e3c-429f-4bfe-9143-43ffcf807748&packageSessionId=92e89046-5865-4cf7-bea6-ac1e8b7bd328&level=default
                      availability: https://schema.org/InStock
                  hasCourseInstance:
                    - '@type': CourseInstance
                      courseMode: online
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '503':
          $ref: '#/components/responses/AuthUnavailable'
components:
  headers:
    RequestId:
      schema:
        type: string
      description: Unique id of this request. Quote it to support.
    CacheControl:
      schema:
        type: string
      description: '`public, max-age=60` on reads; `no-store` on errors and `POST /leads`.'
    RetryAfter:
      schema:
        type: integer
      description: Seconds to wait before retrying.
  schemas:
    CourseDetail:
      allOf:
        - $ref: '#/components/schemas/CourseSummary'
        - type: object
          properties:
            description_html:
              type:
                - string
                - 'null'
              description: Sanitised HTML (jsoup relaxed safelist; images http(s) only).
            description_text:
              type:
                - string
                - 'null'
              description: Plain-text version.
            about_html:
              type:
                - string
                - 'null'
            about_text:
              type:
                - string
                - 'null'
            why_learn_html:
              type:
                - string
                - 'null'
            who_should_learn_html:
              type:
                - string
                - 'null'
            mode:
              type:
                - string
                - 'null'
              enum:
                - self_paced
                - live
                - null
              description: How the course is taught.
            faqs:
              type: array
              items:
                $ref: '#/components/schemas/Faq'
            preview_video:
              oneOf:
                - $ref: '#/components/schemas/PreviewVideo'
                - type: 'null'
            authors:
              type: array
              items:
                $ref: '#/components/schemas/Author'
            series:
              oneOf:
                - $ref: '#/components/schemas/Series'
                - type: 'null'
              description: Null unless a learning path of 2+ steps lists this course.
            seo:
              $ref: '#/components/schemas/Seo'
            structured_data:
              type: object
              additionalProperties: true
              description: >-
                A schema.org `Course` (JSON-LD) object, ready for `<script
                type="application/ld+json">`.
          required:
            - description_html
            - description_text
            - about_html
            - about_text
            - why_learn_html
            - who_should_learn_html
            - mode
            - faqs
            - preview_video
            - authors
            - series
            - seo
            - structured_data
    CourseSummary:
      type: object
      properties:
        id:
          type: string
          description: >-
            The course id. Stable across language versions. Use it in `GET
            /courses/{id}`.
        title:
          type: string
          description: Title of the version shown (see `language`).
        subtitle:
          type:
            - string
            - 'null'
          description: 'Plain text, at most 300 characters: the card text.'
        image_url:
          type:
            - string
            - 'null'
          description: Card image (absolute URL).
        url:
          type:
            - string
            - 'null'
          description: >-
            The course's page on the hosted catalogue site, where enrolment,
            cart and checkout happen. Includes the version's query string. Null
            when the course page address is not configured.
        formats:
          type: array
          items:
            $ref: '#/components/schemas/Format'
        stream:
          oneOf:
            - $ref: '#/components/schemas/Place'
            - type: 'null'
        category:
          oneOf:
            - $ref: '#/components/schemas/Place'
            - type: 'null'
        languages:
          type: array
          items:
            $ref: '#/components/schemas/Language'
          description: >-
            Languages the course is available in. Empty when the site has course
            languages off.
        tags:
          type: array
          items:
            type: string
          description: Course tags as authored (original case).
        level:
          type:
            - string
            - 'null'
          description: Level of the version shown; null for a course without named levels.
        availability:
          type: string
          enum:
            - available
            - coming_soon
            - not_started
            - closed
          description: >-
            `available`: can be bought or enrolled now. `coming_soon`:
            announced, not on sale. `not_started`: enrolment opens later.
            `closed`: enrolment ended or inactive.
        price_visible:
          type: boolean
          description: >-
            False when the institute hides prices and this course is paid. Show
            "see price" and link to `url`.
        price:
          oneOf:
            - $ref: '#/components/schemas/Price'
            - type: 'null'
          description: >-
            Null when the course is not on sale now (see `availability`) or its
            price is hidden.
        instructors:
          type: array
          items:
            $ref: '#/components/schemas/Instructor'
        rating:
          type:
            - number
            - 'null'
          description: Average rating, or null when there is none.
        created_at:
          type:
            - string
            - 'null'
          format: date-time
          description: >-
            ISO-8601 UTC. The newest version's creation time; `sort=newest` uses
            it.
        variants:
          type: array
          items:
            $ref: '#/components/schemas/Variant'
          description: Every version, in catalogue order.
      required:
        - id
        - title
        - subtitle
        - image_url
        - url
        - formats
        - stream
        - category
        - languages
        - tags
        - level
        - availability
        - price_visible
        - price
        - instructors
        - rating
        - created_at
        - variants
    Faq:
      type: object
      properties:
        question:
          type: string
        answer_html:
          type:
            - string
            - 'null'
          description: Sanitised HTML.
      required:
        - question
        - answer_html
    PreviewVideo:
      type: object
      properties:
        kind:
          type: string
          enum:
            - youtube
            - vimeo
            - url
        id:
          type: string
          description: YouTube or Vimeo video id (kind youtube / vimeo only).
        url:
          type: string
          description: Direct video file URL (kind url only).
        embed_url:
          type:
            - string
            - 'null'
          description: iframe-ready player URL for youtube / vimeo; null for url.
      required:
        - kind
        - embed_url
    Author:
      type: object
      properties:
        name:
          type: string
        subtitle:
          type:
            - string
            - 'null'
        bio_html:
          type:
            - string
            - 'null'
          description: Sanitised HTML.
        image_url:
          type:
            - string
            - 'null'
      required:
        - name
        - subtitle
        - bio_html
        - image_url
    Series:
      type: object
      properties:
        name:
          type: string
          description: The learning path's name.
        steps:
          type: array
          items:
            $ref: '#/components/schemas/SeriesStep'
      required:
        - name
        - steps
      description: The learning path this course is a step of.
    Seo:
      type: object
      properties:
        title:
          type: string
        description:
          type:
            - string
            - 'null'
          description: Plain text, at most 160 characters.
        image_url:
          type:
            - string
            - 'null'
        canonical_url:
          type:
            - string
            - 'null'
          description: The hosted course page without its query string.
      required:
        - title
        - description
        - image_url
        - canonical_url
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: not_found
              enum:
                - missing_api_key
                - invalid_api_key
                - product_not_enabled
                - insufficient_scope
                - origin_not_allowed
                - rate_limited
                - not_found
                - method_not_allowed
                - invalid_request
                - auth_unavailable
                - internal_error
              description: >-
                Stable machine-readable code. Branch on this, never on
                `message`.
            message:
              type: string
              description: A sentence for logs. Wording may change.
            request_id:
              type: string
              description: Also in the `X-Request-Id` header. Quote it to support.
            details:
              type: object
              additionalProperties: true
              description: >-
                Present only when there is more to say: `param`
                (invalid_request), `required_scope` (insufficient_scope),
                `origin` (origin_not_allowed), `limit_per_minute`
                (rate_limited).
          required:
            - code
            - message
            - request_id
      required:
        - error
    Format:
      type: object
      properties:
        key:
          type: string
          description: >-
            Lower-case format key, e.g. `ebook`. Use it in `GET
            /courses?format=`.
        label:
          type: string
          description: Display name, e.g. `E-books`.
      required:
        - key
        - label
    Place:
      type: object
      properties:
        slug:
          type: string
          description: Use it in `GET /courses?stream=` / `?category=`.
        label:
          type: string
          description: >-
            The name the hosted catalogue shows on course cards (the site's
            label mode: title or subtitle).
      required:
        - slug
        - label
      description: A stream or category a course belongs to.
    Language:
      type: object
      properties:
        code:
          type: string
          description: Lower-case language code from the site's settings, e.g. `en`, `hi`.
        label:
          type: string
          description: Display name, e.g. `Hindi`.
      required:
        - code
        - label
    Price:
      type: object
      properties:
        amount:
          type: number
          description: Price in major units (rupees for INR), e.g. `251.0`. `0` when free.
        compare_at_amount:
          type:
            - number
            - 'null'
          description: The higher list price to show struck through, or null.
        currency:
          type:
            - string
            - 'null'
          description: ISO 4217 code, e.g. `INR`.
        is_free:
          type: boolean
        varies:
          type: boolean
          description: >-
            True when the versions on sale now have different prices (show
            "from"; read `variants[].price`).
      required:
        - amount
        - compare_at_amount
        - currency
        - is_free
        - varies
      description: Price of the version the course is shown as.
    Instructor:
      type: object
      properties:
        name:
          type: string
        image_url:
          type:
            - string
            - 'null'
      required:
        - name
        - image_url
    Variant:
      type: object
      properties:
        package_session_id:
          type: string
          description: Id of this version (one level / batch of the course).
        enroll_invite_id:
          type:
            - string
            - 'null'
          description: Enrolment invite the hosted page uses for this version.
        level:
          type:
            - string
            - 'null'
          description: Level name, or null for a course without named levels.
        language:
          oneOf:
            - $ref: '#/components/schemas/Language'
            - type: 'null'
          description: This version's language, or null (languages off, or none detected).
        url:
          type:
            - string
            - 'null'
          description: >-
            This version's page on the hosted catalogue site. Null when the
            course page address is not configured.
        availability:
          type: string
          enum:
            - available
            - coming_soon
            - not_started
            - closed
          description: >-
            `available`: can be bought or enrolled now. `coming_soon`:
            announced, not on sale. `not_started`: enrolment opens later.
            `closed`: enrolment ended or inactive.
        price:
          oneOf:
            - $ref: '#/components/schemas/VariantPrice'
            - type: 'null'
          description: Null unless the version is free, or priced and prices are shown.
      required:
        - package_session_id
        - enroll_invite_id
        - level
        - language
        - url
        - availability
        - price
      description: 'One version of a course: a level, batch or language edition.'
    SeriesStep:
      type: object
      properties:
        course_id:
          type: string
        title:
          type: string
        url:
          type:
            - string
            - 'null'
          description: Hosted course page.
        current:
          type: boolean
          description: True for this course.
      required:
        - course_id
        - title
        - url
        - current
    VariantPrice:
      type: object
      properties:
        amount:
          type: number
          description: Price in major units (rupees for INR), e.g. `251.0`. `0` when free.
        compare_at_amount:
          type:
            - number
            - 'null'
          description: The higher list price to show struck through, or null.
        currency:
          type:
            - string
            - 'null'
          description: ISO 4217 code, e.g. `INR`.
        is_free:
          type: boolean
      required:
        - amount
        - compare_at_amount
        - currency
        - is_free
      description: Price of one version.
  responses:
    Unauthorized:
      description: No key, or the key is not valid.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            missing_api_key:
              value:
                error:
                  code: missing_api_key
                  message: >-
                    Send your publishable key in the X-API-Key header (or
                    Authorization: Bearer).
                  request_id: req_3f2a9c1d7e5b4a608f1e2d3c4b5a6978
            invalid_api_key:
              value:
                error:
                  code: invalid_api_key
                  message: This API key is invalid, revoked or expired.
                  request_id: req_3f2a9c1d7e5b4a608f1e2d3c4b5a6978
    Forbidden:
      description: >-
        The key may not make this request, or the browser origin is not one of
        the institute's verified websites.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            origin_not_allowed:
              value:
                error:
                  code: origin_not_allowed
                  message: >-
                    Add and verify preview-abc.vercel.app in Settings →
                    Integrations → Catalogue API & websites to call this API
                    from it.
                  request_id: req_3f2a9c1d7e5b4a608f1e2d3c4b5a6978
                  details:
                    origin: preview-abc.vercel.app
            insufficient_scope:
              value:
                error:
                  code: insufficient_scope
                  message: This API key does not have the leads:write scope.
                  request_id: req_3f2a9c1d7e5b4a608f1e2d3c4b5a6978
                  details:
                    required_scope: leads:write
            product_not_enabled:
              value:
                error:
                  code: product_not_enabled
                  message: This API key is not a Catalogue API key.
                  request_id: req_3f2a9c1d7e5b4a608f1e2d3c4b5a6978
    NotFound:
      description: No such course or learning path for this institute.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            not_found:
              value:
                error:
                  code: not_found
                  message: Course not found.
                  request_id: req_3f2a9c1d7e5b4a608f1e2d3c4b5a6978
    RateLimited:
      description: Too many requests for this key (or, on `POST /leads`, this visitor).
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            rate_limited:
              value:
                error:
                  code: rate_limited
                  message: Too many requests for this API key (limit 1200 per minute).
                  request_id: req_3f2a9c1d7e5b4a608f1e2d3c4b5a6978
                  details:
                    limit_per_minute: 1200
    AuthUnavailable:
      description: >-
        Keys could not be checked for a moment. Retry after `Retry-After`
        seconds.
      headers:
        X-Request-Id:
          $ref: '#/components/headers/RequestId'
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            auth_unavailable:
              value:
                error:
                  code: auth_unavailable
                  message: Could not verify the API key right now. Retry shortly.
                  request_id: req_3f2a9c1d7e5b4a608f1e2d3c4b5a6978
  securitySchemes:
    ApiKey:
      type: apiKey
      in: header
      name: X-API-Key
      description: Your publishable Catalogue API key (`vak_pub_…`).
    Bearer:
      type: http
      scheme: bearer
      description: 'The same key as `Authorization: Bearer vak_pub_…`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.