Add catalog-scoped course metadata endpoint backed by enterprise-catalog

I would like to discuss whether `course-discovery` should expose a catalog-scoped course metadata endpoint backed by `enterprise-catalog`.

The proposed endpoint would allow API consumers to request Discovery course metadata scoped to a specific Enterprise Catalog UUID, for example:

GET /api/v1/enterprise_catalogs/{catalog_uuid}/courses/

or, depending on preferred URL conventions:

GET /api/v1/enterprise-catalogs/{catalog_uuid}/courses/

Problem

Some consumers need course metadata from course-discovery, but scoped to the content available in a specific Enterprise Catalog.

Today, a consumer that needs this data generally has to coordinate between services:

  1. Call enterprise-catalog to determine which course/course run keys are included in a given catalog.

  2. Call course-discovery to hydrate those records with course metadata.

  3. Merge/filter/sort/paginate the result outside of Discovery.

This adds duplicated integration logic to API consumers and makes it harder to provide a consistent course metadata response for catalog-scoped experiences.

Why course-discovery?

course-discovery is already the service that provides access to consolidated course and program metadata. A catalog-scoped Discovery endpoint could keep metadata serialization, filtering, pagination, and response shaping in the service that already owns course metadata responses.

The goal is not to move Enterprise Catalog ownership into Discovery. The proposed behavior would use enterprise-catalog only as the source of truth for catalog membership, while course-discovery remains responsible for returning course metadata.

Proposed behavior

The endpoint would:

  • Accept an Enterprise Catalog UUID.

  • Query enterprise-catalog for the catalog content keys.

  • Return matching course metadata from course-discovery.

  • Preserve normal Discovery serializer behavior where possible.

  • Support standard pagination.

  • Return an empty result set when the catalog has no matching Discovery records.

  • Return an appropriate error if enterprise-catalog is unavailable or returns an unexpected response.

A minimal first version could intentionally avoid advanced filtering, caching, and detail endpoints.

1 Like