> ## 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 outline

> Subject, module and chapter titles of each version (no content). Cached for 5 minutes. With `language`, only that language's versions (all versions if it has none).

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



## OpenAPI

````yaml /api-reference/openapi.json get /courses/{id}/outline
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}/outline:
    get:
      tags:
        - Courses
      summary: Get a course outline
      description: >-
        Subject, module and chapter titles of each version (no content). Cached
        for 5 minutes. With `language`, only that language's versions (all
        versions if it has none).


        Scope: `catalog:read`. Cacheable for 60 s.
      operationId: getCourseOutline
      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 outline.
          headers:
            X-Request-Id:
              $ref: '#/components/headers/RequestId'
            Cache-Control:
              $ref: '#/components/headers/CacheControl'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Outline'
              example:
                levels:
                  - package_session_id: 92e89046-5865-4cf7-bea6-ac1e8b7bd328
                    level: null
                    subjects:
                      - id: b1f6a0c2-3d4e-4f50-8a1b-2c3d4e5f6a7b
                        name: Vedic Parenting
                        modules:
                          - id: c2a7b1d3-4e5f-4061-9b2c-3d4e5f6a7b8c
                            name: The Panchakosha system
                            chapters:
                              - id: d3b8c2e4-5f60-4172-ac3d-4e5f6a7b8c9d
                                name: Why parenting is a science
                              - id: e4c9d3f5-6071-4283-bd4e-5f6a7b8c9d0e
                                name: The five sheaths
        '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:
    Outline:
      type: object
      properties:
        levels:
          type: array
          items:
            type: object
            properties:
              package_session_id:
                type: string
              level:
                type:
                  - string
                  - 'null'
              subjects:
                type: array
                items:
                  type: object
                  properties:
                    id:
                      type: string
                    name:
                      type:
                        - string
                        - 'null'
                    modules:
                      type: array
                      items:
                        type: object
                        properties:
                          id:
                            type: string
                          name:
                            type:
                              - string
                              - 'null'
                          chapters:
                            type: array
                            items:
                              type: object
                              properties:
                                id:
                                  type: string
                                name:
                                  type:
                                    - string
                                    - 'null'
                              required:
                                - id
                                - name
                        required:
                          - id
                          - name
                          - chapters
                  required:
                    - id
                    - name
                    - modules
            required:
              - package_session_id
              - level
              - subjects
          description: One entry per version (all versions, or those in `language`).
      required:
        - levels
    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
  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.