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:
-
Call
enterprise-catalogto determine which course/course run keys are included in a given catalog. -
Call
course-discoveryto hydrate those records with course metadata. -
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-catalogfor 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-catalogis unavailable or returns an unexpected response.
A minimal first version could intentionally avoid advanced filtering, caching, and detail endpoints.