Skip to content

Conversation

@rhysyngsun
Copy link
Collaborator

@rhysyngsun rhysyngsun commented Jan 5, 2026

What are the relevant tickets?

Part of https://github.com/mitodl/hq/issues/9559

Description (What does it do?)

This is a significant refactor of the program enrollment API and serializers to achieve better performance. More thorough tests were added in #3157 around this API.

Note:
there is one expected OpenAPI diff error due to the return type for one endpoint being previously incorrectly typed as returning a single object instead of a list and incorrectly defining the id parameter. These should be the only regressions though:

Error: in API DELETE /api/v1/program_enrollments/{id}/ added the new path request parameter 'id'
Error: in API DELETE /api/v1/program_enrollments/{id}/ the response's body type/format changed from 'object'/'' to 'array'/'' for status '200'
Error: in API DELETE /api/v1/program_enrollments/{id}/ removed the required property 'certificate' from the response with the '200' status
Error: in API DELETE /api/v1/program_enrollments/{id}/ removed the required property 'enrollments' from the response with the '200' status
Error: in API DELETE /api/v1/program_enrollments/{id}/ removed the required property 'program' from the response with the '200' status
Error: in API GET /api/v1/program_enrollments/{id}/ added the new path request parameter 'id'

How can this be tested?

@github-actions
Copy link

github-actions bot commented Jan 5, 2026

OpenAPI Changes

Show/hide ## Changes for v0.yaml:
## Changes for v0.yaml:
91 changes: 52 error, 0 warning, 39 info
error	[new-request-path-parameter] at head/openapi/specs/v0.yaml	
	in API POST /api/v0/baskets/add_discount/
		added the new path request parameter 'system_slug'

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/baskets/{parent_lookup_basket}/items/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API POST /api/v0/baskets/{parent_lookup_basket}/items/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API DELETE /api/v0/baskets/{parent_lookup_basket}/items/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/baskets/{parent_lookup_basket}/items/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PATCH /api/v0/baskets/{parent_lookup_basket}/items/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PUT /api/v0/baskets/{parent_lookup_basket}/items/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/discounts/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API POST /api/v0/discounts/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API POST /api/v0/discounts/create_batch/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API DELETE /api/v0/discounts/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/discounts/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PATCH /api/v0/discounts/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PUT /api/v0/discounts/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/assignees/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API POST /api/v0/discounts/{parent_lookup_discount}/assignees/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API DELETE /api/v0/discounts/{parent_lookup_discount}/assignees/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/assignees/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PATCH /api/v0/discounts/{parent_lookup_discount}/assignees/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PUT /api/v0/discounts/{parent_lookup_discount}/assignees/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/products/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API POST /api/v0/discounts/{parent_lookup_discount}/products/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API DELETE /api/v0/discounts/{parent_lookup_discount}/products/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/products/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PATCH /api/v0/discounts/{parent_lookup_discount}/products/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PUT /api/v0/discounts/{parent_lookup_discount}/products/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/tiers/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API POST /api/v0/discounts/{parent_lookup_discount}/tiers/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API DELETE /api/v0/discounts/{parent_lookup_discount}/tiers/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/tiers/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PATCH /api/v0/discounts/{parent_lookup_discount}/tiers/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PUT /api/v0/discounts/{parent_lookup_discount}/tiers/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API POST /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API DELETE /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PATCH /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PUT /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/products/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/products/all/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API POST /api/v0/products/all/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API DELETE /api/v0/products/all/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/products/all/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PATCH /api/v0/products/all/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API PUT /api/v0/products/all/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v0.yaml	
	in API GET /api/v0/products/{id}/
		api path removed without deprecation

error	[new-request-path-parameter] at head/openapi/specs/v0.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		added the new path request parameter 'id'

error	[response-body-type-changed] at head/openapi/specs/v0.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		the response's body type/format changed from 'object'/'' to 'array'/'' for status '200'

error	[response-required-property-removed] at head/openapi/specs/v0.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		removed the required property 'certificate' from the response with the '200' status

error	[response-required-property-removed] at head/openapi/specs/v0.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		removed the required property 'enrollments' from the response with the '200' status

error	[response-required-property-removed] at head/openapi/specs/v0.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		removed the required property 'program' from the response with the '200' status

error	[new-request-path-parameter] at head/openapi/specs/v0.yaml	
	in API GET /api/v1/program_enrollments/{id}/
		added the new path request parameter 'id'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'BaseCourse'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'DiscountProduct'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'DiscountProductRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'DiscountRedemption'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'DiscountRedemptionRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'ExtendedLegalAddress'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'FlexiblePriceTier'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'FlexiblePriceTierRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'Nested'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'Order'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'OrderRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedDiscountProductList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedDiscountRedemptionList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedFlexiblePriceTierList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedProductList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedUserDiscountMetaList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedV0DiscountList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedDiscountProductRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedDiscountRedemptionRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedFlexiblePriceTierRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedProductRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedUserDiscountMetaRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedV0DiscountRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'Product'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'ProductRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'RedeemedDiscount'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'StateEnum'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'TransactionLine'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'UserDiscountMeta'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'UserDiscountMetaRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'UserRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'V0Discount'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'V0DiscountRequest'

info	[endpoint-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/basketitems/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v0.yaml	
	in API POST /api/v0/basketitems/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v0.yaml	
	in API DELETE /api/v0/basketitems/{id}/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v0.yaml	
	in API GET /api/v0/basketitems/{id}/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v0.yaml	
	in API PATCH /api/v0/basketitems/{id}/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v0.yaml	
	in API PUT /api/v0/basketitems/{id}/
		endpoint added



## Changes for v1.yaml:
91 changes: 52 error, 0 warning, 39 info
error	[new-request-path-parameter] at head/openapi/specs/v1.yaml	
	in API POST /api/v0/baskets/add_discount/
		added the new path request parameter 'system_slug'

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/baskets/{parent_lookup_basket}/items/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API POST /api/v0/baskets/{parent_lookup_basket}/items/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API DELETE /api/v0/baskets/{parent_lookup_basket}/items/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/baskets/{parent_lookup_basket}/items/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PATCH /api/v0/baskets/{parent_lookup_basket}/items/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PUT /api/v0/baskets/{parent_lookup_basket}/items/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/discounts/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API POST /api/v0/discounts/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API POST /api/v0/discounts/create_batch/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API DELETE /api/v0/discounts/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/discounts/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PATCH /api/v0/discounts/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PUT /api/v0/discounts/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/assignees/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API POST /api/v0/discounts/{parent_lookup_discount}/assignees/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API DELETE /api/v0/discounts/{parent_lookup_discount}/assignees/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/assignees/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PATCH /api/v0/discounts/{parent_lookup_discount}/assignees/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PUT /api/v0/discounts/{parent_lookup_discount}/assignees/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/products/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API POST /api/v0/discounts/{parent_lookup_discount}/products/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API DELETE /api/v0/discounts/{parent_lookup_discount}/products/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/products/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PATCH /api/v0/discounts/{parent_lookup_discount}/products/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PUT /api/v0/discounts/{parent_lookup_discount}/products/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/tiers/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API POST /api/v0/discounts/{parent_lookup_discount}/tiers/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API DELETE /api/v0/discounts/{parent_lookup_discount}/tiers/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/tiers/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PATCH /api/v0/discounts/{parent_lookup_discount}/tiers/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PUT /api/v0/discounts/{parent_lookup_discount}/tiers/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API POST /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API DELETE /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PATCH /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PUT /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/products/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/products/all/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API POST /api/v0/products/all/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API DELETE /api/v0/products/all/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/products/all/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PATCH /api/v0/products/all/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API PUT /api/v0/products/all/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v1.yaml	
	in API GET /api/v0/products/{id}/
		api path removed without deprecation

error	[new-request-path-parameter] at head/openapi/specs/v1.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		added the new path request parameter 'id'

error	[response-body-type-changed] at head/openapi/specs/v1.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		the response's body type/format changed from 'object'/'' to 'array'/'' for status '200'

error	[response-required-property-removed] at head/openapi/specs/v1.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		removed the required property 'certificate' from the response with the '200' status

error	[response-required-property-removed] at head/openapi/specs/v1.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		removed the required property 'enrollments' from the response with the '200' status

error	[response-required-property-removed] at head/openapi/specs/v1.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		removed the required property 'program' from the response with the '200' status

error	[new-request-path-parameter] at head/openapi/specs/v1.yaml	
	in API GET /api/v1/program_enrollments/{id}/
		added the new path request parameter 'id'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'BaseCourse'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'DiscountProduct'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'DiscountProductRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'DiscountRedemption'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'DiscountRedemptionRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'ExtendedLegalAddress'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'FlexiblePriceTier'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'FlexiblePriceTierRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'Nested'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'Order'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'OrderRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedDiscountProductList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedDiscountRedemptionList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedFlexiblePriceTierList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedProductList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedUserDiscountMetaList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedV0DiscountList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedDiscountProductRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedDiscountRedemptionRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedFlexiblePriceTierRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedProductRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedUserDiscountMetaRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedV0DiscountRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'Product'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'ProductRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'RedeemedDiscount'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'StateEnum'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'TransactionLine'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'UserDiscountMeta'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'UserDiscountMetaRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'UserRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'V0Discount'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'V0DiscountRequest'

info	[endpoint-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v0/basketitems/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v1.yaml	
	in API POST /api/v0/basketitems/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v1.yaml	
	in API DELETE /api/v0/basketitems/{id}/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v1.yaml	
	in API GET /api/v0/basketitems/{id}/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v1.yaml	
	in API PATCH /api/v0/basketitems/{id}/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v1.yaml	
	in API PUT /api/v0/basketitems/{id}/
		endpoint added



## Changes for v2.yaml:
91 changes: 52 error, 0 warning, 39 info
error	[new-request-path-parameter] at head/openapi/specs/v2.yaml	
	in API POST /api/v0/baskets/add_discount/
		added the new path request parameter 'system_slug'

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/baskets/{parent_lookup_basket}/items/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API POST /api/v0/baskets/{parent_lookup_basket}/items/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API DELETE /api/v0/baskets/{parent_lookup_basket}/items/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/baskets/{parent_lookup_basket}/items/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PATCH /api/v0/baskets/{parent_lookup_basket}/items/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PUT /api/v0/baskets/{parent_lookup_basket}/items/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/discounts/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API POST /api/v0/discounts/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API POST /api/v0/discounts/create_batch/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API DELETE /api/v0/discounts/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/discounts/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PATCH /api/v0/discounts/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PUT /api/v0/discounts/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/assignees/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API POST /api/v0/discounts/{parent_lookup_discount}/assignees/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API DELETE /api/v0/discounts/{parent_lookup_discount}/assignees/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/assignees/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PATCH /api/v0/discounts/{parent_lookup_discount}/assignees/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PUT /api/v0/discounts/{parent_lookup_discount}/assignees/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/products/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API POST /api/v0/discounts/{parent_lookup_discount}/products/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API DELETE /api/v0/discounts/{parent_lookup_discount}/products/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/products/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PATCH /api/v0/discounts/{parent_lookup_discount}/products/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PUT /api/v0/discounts/{parent_lookup_discount}/products/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/tiers/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API POST /api/v0/discounts/{parent_lookup_discount}/tiers/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API DELETE /api/v0/discounts/{parent_lookup_discount}/tiers/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/discounts/{parent_lookup_discount}/tiers/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PATCH /api/v0/discounts/{parent_lookup_discount}/tiers/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PUT /api/v0/discounts/{parent_lookup_discount}/tiers/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API POST /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API DELETE /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PATCH /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PUT /api/v0/discounts/{parent_lookup_redeemed_discount}/redemptions/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/products/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/products/all/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API POST /api/v0/products/all/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API DELETE /api/v0/products/all/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/products/all/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PATCH /api/v0/products/all/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API PUT /api/v0/products/all/{id}/
		api path removed without deprecation

error	[api-path-removed-without-deprecation] at base/openapi/specs/v2.yaml	
	in API GET /api/v0/products/{id}/
		api path removed without deprecation

error	[new-request-path-parameter] at head/openapi/specs/v2.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		added the new path request parameter 'id'

error	[response-body-type-changed] at head/openapi/specs/v2.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		the response's body type/format changed from 'object'/'' to 'array'/'' for status '200'

error	[response-required-property-removed] at head/openapi/specs/v2.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		removed the required property 'certificate' from the response with the '200' status

error	[response-required-property-removed] at head/openapi/specs/v2.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		removed the required property 'enrollments' from the response with the '200' status

error	[response-required-property-removed] at head/openapi/specs/v2.yaml	
	in API DELETE /api/v1/program_enrollments/{id}/
		removed the required property 'program' from the response with the '200' status

error	[new-request-path-parameter] at head/openapi/specs/v2.yaml	
	in API GET /api/v1/program_enrollments/{id}/
		added the new path request parameter 'id'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'BaseCourse'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'DiscountProduct'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'DiscountProductRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'DiscountRedemption'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'DiscountRedemptionRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'ExtendedLegalAddress'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'FlexiblePriceTier'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'FlexiblePriceTierRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'Nested'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'Order'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'OrderRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedDiscountProductList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedDiscountRedemptionList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedFlexiblePriceTierList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedProductList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedUserDiscountMetaList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PaginatedV0DiscountList'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedDiscountProductRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedDiscountRedemptionRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedFlexiblePriceTierRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedProductRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedUserDiscountMetaRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'PatchedV0DiscountRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'Product'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'ProductRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'RedeemedDiscount'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'StateEnum'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'TransactionLine'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'UserDiscountMeta'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'UserDiscountMetaRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'UserRequest'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'V0Discount'

info	[api-schema-removed] 	
	in components/schemas
		removed the schema 'V0DiscountRequest'

info	[endpoint-added] at head/openapi/specs/v2.yaml	
	in API GET /api/v0/basketitems/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v2.yaml	
	in API POST /api/v0/basketitems/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v2.yaml	
	in API DELETE /api/v0/basketitems/{id}/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v2.yaml	
	in API GET /api/v0/basketitems/{id}/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v2.yaml	
	in API PATCH /api/v0/basketitems/{id}/
		endpoint added

info	[endpoint-added] at head/openapi/specs/v2.yaml	
	in API PUT /api/v0/basketitems/{id}/
		endpoint added



Unexpected changes? Ensure your branch is up-to-date with main (consider rebasing).

@rhysyngsun rhysyngsun force-pushed the nl/learn-dash-performance-fixes branch from b8eccc3 to ac8b5ce Compare January 5, 2026 17:24
@rhysyngsun rhysyngsun force-pushed the nl/learn-dash-performance-fixes branch from ac8b5ce to 6d22d67 Compare January 6, 2026 19:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants