{"openapi":"3.1.0","info":{"title":"Comidoc Developer API","version":"1.0.0","description":"Search the Comidoc course catalog, coupon availability, topics, changes and rolling trends. Free keys receive every metadata field with coupon_code set to null; Pro keys receive the current coupon code.","contact":{"url":"https://comidoc.com/contact"}},"servers":[{"url":"https://comidoc.com/api/v1","description":"Production"}],"security":[{"bearerAuth":[]}],"tags":[{"name":"Discovery"},{"name":"Courses"},{"name":"Offers"},{"name":"Topics"},{"name":"Trends"},{"name":"Changes"}],"paths":{"/filter-options":{"get":{"operationId":"getFilterOptions","tags":["Discovery"],"summary":"Discover the current filter vocabulary","description":"Returns every canonical category, language, level, and enum accepted by the course and offer filters.","responses":{"200":{"description":"Filter options","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilterOptionsResponse"}}}},"400":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/courses":{"get":{"operationId":"listCourses","tags":["Courses"],"summary":"Search courses","parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":120}},{"name":"topic","in":"query","schema":{"type":"string","maxLength":120}},{"name":"course_id","in":"query","description":"Udemy's numeric course ID.","schema":{"type":"integer","minimum":1}},{"name":"course_slug","in":"query","schema":{"type":"string","maxLength":200}},{"name":"category","in":"query","description":"Comma-separated canonical values from /filter-options (OR). Matching is case-insensitive; unknown values return 400.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"},"maxItems":50}},{"name":"language","in":"query","description":"Comma-separated canonical values from /filter-options (OR). Matching is case-insensitive; unknown values return 400.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"},"maxItems":50}},{"name":"level","in":"query","description":"Comma-separated canonical level values (OR), including All Levels. Matching is case-insensitive; unknown values return 400.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["Beginner","Intermediate","Expert","All Levels"]},"maxItems":4}},{"name":"course_type","in":"query","description":"Courses, practice tests, or both.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["courses","tests"]},"maxItems":2}},{"name":"duration","in":"query","description":"short is under 1 hour; medium is 1–10 hours; long is over 10 hours.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["short","medium","long"]},"maxItems":3}},{"name":"rating","in":"query","description":"Website rating bands, combinable with OR semantics.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["lt-4","gte-4-lt-4_5","gte-4_5"]},"maxItems":3}},{"name":"rating_min","in":"query","schema":{"type":"number","minimum":0,"maximum":5}},{"name":"rating_max","in":"query","schema":{"type":"number","minimum":0,"maximum":5}},{"name":"published_after","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"last_course_updated_after","in":"query","description":"Udemy's last course-content update date; never Comidoc's technical record timestamp.","schema":{"type":"string","format":"date-time"}},{"name":"coupon_status","in":"query","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["active","expired","invalid","pending_verification","all"]},"maxItems":5}},{"name":"has_active_coupon","in":"query","schema":{"type":"boolean"}},{"name":"coupon_age","in":"query","description":"Website coupon-age bands.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["24h"]},"maxItems":1}},{"name":"coupon_created_after","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"expires_before","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"expires_after","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"remaining_min","in":"query","schema":{"type":"integer","minimum":0}},{"name":"discount_type","in":"query","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["free","percentage"]},"maxItems":2}},{"name":"repeat_coupon_course","in":"query","schema":{"$ref":"#/components/schemas/FilterMode"}},{"name":"regular_issuer","in":"query","schema":{"$ref":"#/components/schemas/FilterMode"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["newest","updated","rating","popular","trending","duration","price"],"default":"updated"}},{"name":"horizon","in":"query","description":"Trend horizon used when sort=trending.","schema":{"type":"string","enum":["24h","7d","30d"],"default":"7d"}},{"name":"limit","in":"query","description":"Requested page size, clamped to the caller plan: 10 anonymous, 25 Free, or 100 Pro.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor returned by the preceding response."}],"responses":{"200":{"description":"Course results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseList"}}}},"400":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/courses/{id}":{"get":{"operationId":"getCourse","tags":["Courses"],"summary":"Fetch a course by Udemy ID or slug","parameters":[{"name":"id","in":"path","required":true,"description":"Udemy's numeric course ID or course slug.","schema":{"type":"string"}}],"responses":{"200":{"description":"Course","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseResponse"}}}},"400":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/offers":{"get":{"operationId":"listOffers","tags":["Offers"],"summary":"Search coupon offers","parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":120}},{"name":"topic","in":"query","schema":{"type":"string","maxLength":120}},{"name":"course_id","in":"query","description":"Udemy's numeric course ID.","schema":{"type":"integer","minimum":1}},{"name":"course_slug","in":"query","schema":{"type":"string","maxLength":200}},{"name":"category","in":"query","description":"Comma-separated canonical values from /filter-options (OR). Matching is case-insensitive; unknown values return 400.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"},"maxItems":50}},{"name":"language","in":"query","description":"Comma-separated canonical values from /filter-options (OR). Matching is case-insensitive; unknown values return 400.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"},"maxItems":50}},{"name":"level","in":"query","description":"Comma-separated canonical level values (OR), including All Levels. Matching is case-insensitive; unknown values return 400.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["Beginner","Intermediate","Expert","All Levels"]},"maxItems":4}},{"name":"course_type","in":"query","description":"Courses, practice tests, or both.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["courses","tests"]},"maxItems":2}},{"name":"duration","in":"query","description":"short is under 1 hour; medium is 1–10 hours; long is over 10 hours.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["short","medium","long"]},"maxItems":3}},{"name":"rating","in":"query","description":"Website rating bands, combinable with OR semantics.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["lt-4","gte-4-lt-4_5","gte-4_5"]},"maxItems":3}},{"name":"rating_min","in":"query","schema":{"type":"number","minimum":0,"maximum":5}},{"name":"rating_max","in":"query","schema":{"type":"number","minimum":0,"maximum":5}},{"name":"published_after","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"last_course_updated_after","in":"query","description":"Udemy's last course-content update date; never Comidoc's technical record timestamp.","schema":{"type":"string","format":"date-time"}},{"name":"status","in":"query","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["active","expired","invalid","pending_verification","all"]},"maxItems":5,"default":["active"]}},{"name":"coupon_age","in":"query","description":"Website coupon-age bands.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["24h"]},"maxItems":1}},{"name":"coupon_created_after","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"expires_before","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"expires_after","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"remaining_min","in":"query","schema":{"type":"integer","minimum":0}},{"name":"discount_type","in":"query","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["free","percentage"]},"maxItems":2}},{"name":"repeat_coupon_course","in":"query","schema":{"$ref":"#/components/schemas/FilterMode"}},{"name":"regular_issuer","in":"query","schema":{"$ref":"#/components/schemas/FilterMode"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["latest","trend","rating","published","duration","remaining","price","expiring"],"default":"latest"}},{"name":"unique_course","in":"query","description":"Return at most one offer per Udemy course, matching the website listing.","schema":{"type":"boolean","default":false}},{"name":"limit","in":"query","description":"Requested page size, clamped to the caller plan: 10 anonymous, 25 Free, or 100 Pro.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor returned by the preceding response."}],"responses":{"200":{"description":"Offer results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OfferList"}}}},"400":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/topics":{"get":{"operationId":"listTopics","tags":["Topics"],"summary":"List topics","parameters":[{"name":"q","in":"query","schema":{"type":"string","maxLength":120}},{"name":"min_courses","in":"query","schema":{"type":"integer","minimum":0,"default":1}},{"name":"sort","in":"query","schema":{"type":"string","enum":["catalog","trending","name"],"default":"catalog"}},{"name":"horizon","in":"query","description":"Trend horizon used when sort=trending.","schema":{"type":"string","enum":["24h","7d","30d"],"default":"7d"}},{"name":"limit","in":"query","description":"Requested page size, clamped to the caller plan: 10 anonymous, 25 Free, or 100 Pro.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor returned by the preceding response."}],"responses":{"200":{"description":"Topics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopicList"}}}},"400":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/topics/{slug}":{"get":{"operationId":"getTopic","tags":["Topics"],"summary":"Fetch a topic","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","maxLength":120}}],"responses":{"200":{"description":"Topic","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopicResponse"}}}},"400":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"404":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/topics/{slug}/courses":{"get":{"operationId":"listTopicCourses","tags":["Topics","Courses"],"summary":"Search courses in a topic","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","maxLength":120}},{"name":"q","in":"query","schema":{"type":"string","maxLength":120}},{"name":"course_id","in":"query","description":"Udemy's numeric course ID.","schema":{"type":"integer","minimum":1}},{"name":"course_slug","in":"query","schema":{"type":"string","maxLength":200}},{"name":"category","in":"query","description":"Comma-separated canonical values from /filter-options (OR). Matching is case-insensitive; unknown values return 400.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"},"maxItems":50}},{"name":"language","in":"query","description":"Comma-separated canonical values from /filter-options (OR). Matching is case-insensitive; unknown values return 400.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"},"maxItems":50}},{"name":"level","in":"query","description":"Comma-separated canonical level values (OR), including All Levels. Matching is case-insensitive; unknown values return 400.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["Beginner","Intermediate","Expert","All Levels"]},"maxItems":4}},{"name":"course_type","in":"query","description":"Courses, practice tests, or both.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["courses","tests"]},"maxItems":2}},{"name":"duration","in":"query","description":"short is under 1 hour; medium is 1–10 hours; long is over 10 hours.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["short","medium","long"]},"maxItems":3}},{"name":"rating","in":"query","description":"Website rating bands, combinable with OR semantics.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["lt-4","gte-4-lt-4_5","gte-4_5"]},"maxItems":3}},{"name":"rating_min","in":"query","schema":{"type":"number","minimum":0,"maximum":5}},{"name":"rating_max","in":"query","schema":{"type":"number","minimum":0,"maximum":5}},{"name":"published_after","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"last_course_updated_after","in":"query","description":"Udemy's last course-content update date; never Comidoc's technical record timestamp.","schema":{"type":"string","format":"date-time"}},{"name":"coupon_status","in":"query","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["active","expired","invalid","pending_verification","all"]},"maxItems":5}},{"name":"has_active_coupon","in":"query","schema":{"type":"boolean"}},{"name":"coupon_age","in":"query","description":"Website coupon-age bands.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["24h"]},"maxItems":1}},{"name":"coupon_created_after","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"expires_before","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"expires_after","in":"query","schema":{"type":"string","format":"date-time"}},{"name":"remaining_min","in":"query","schema":{"type":"integer","minimum":0}},{"name":"discount_type","in":"query","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string","enum":["free","percentage"]},"maxItems":2}},{"name":"repeat_coupon_course","in":"query","schema":{"$ref":"#/components/schemas/FilterMode"}},{"name":"regular_issuer","in":"query","schema":{"$ref":"#/components/schemas/FilterMode"}},{"name":"sort","in":"query","schema":{"type":"string","enum":["newest","updated","rating","popular","trending","duration","price"],"default":"updated"}},{"name":"horizon","in":"query","description":"Trend horizon used when sort=trending.","schema":{"type":"string","enum":["24h","7d","30d"],"default":"7d"}},{"name":"limit","in":"query","description":"Requested page size, clamped to the caller plan: 10 anonymous, 25 Free, or 100 Pro.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor returned by the preceding response."}],"responses":{"200":{"description":"Course results","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseList"}}}},"400":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/trending/courses":{"get":{"operationId":"getTrendingCourses","tags":["Trends"],"summary":"Get rolling course trends","parameters":[{"name":"horizon","in":"query","schema":{"type":"string","enum":["24h","7d","30d"],"default":"7d"}},{"name":"limit","in":"query","description":"Requested page size, clamped to the caller plan: 10 anonymous, 25 Free, or 100 Pro.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"responses":{"200":{"description":"Ranked courses","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CourseTrendResponse"}}}},"400":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/trending/topics":{"get":{"operationId":"getTrendingTopics","tags":["Trends"],"summary":"Get rolling topic trends","parameters":[{"name":"horizon","in":"query","schema":{"type":"string","enum":["24h","7d","30d"],"default":"7d"}},{"name":"limit","in":"query","description":"Requested page size, clamped to the caller plan: 10 anonymous, 25 Free, or 100 Pro.","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"responses":{"200":{"description":"Ranked topics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopicTrendResponse"}}}},"400":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}},"/changes":{"get":{"operationId":"listChanges","tags":["Changes"],"summary":"Incrementally synchronize changed courses and offers","parameters":[{"name":"since","in":"query","required":true,"schema":{"type":"string","format":"date-time"}},{"name":"limit","in":"query","description":"Requested page size, clamped to the caller plan: 10 anonymous, 25 Free, or 100 Pro.","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque cursor returned by the preceding response."}],"responses":{"200":{"description":"Ordered changes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeListResponse"}}}},"400":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"401":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"403":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"429":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"500":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}},"503":{"description":"RFC 9457 problem response","content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}}}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"cmd_live_…"}},"schemas":{"FilterMode":{"type":"string","enum":["include","exclude","only"],"default":"include"},"Redemptions":{"type":"object","properties":{"total":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"remaining":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"redeemed":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"state":{"type":"string","enum":["known","unknown","stale","exhausted"]},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc last observed the returned capacity values."}},"required":["total","remaining","redeemed","state","observed_at"],"additionalProperties":false},"Offer":{"type":"object","properties":{"id":{"type":"string"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null."},"status":{"type":"string","enum":["active","expired","invalid","pending_verification"]},"status_reason":{"anyOf":[{"type":"string","enum":["end_date_passed","redemption_limit_reached","udemy_inactive_or_expired","course_became_free","not_instructor_created","udemy_rejected_other","legacy_unclassified"]},{"type":"null"}]},"discount_type":{"type":"string","enum":["free","percentage"]},"discount_value":{"anyOf":[{"type":"number"},{"type":"null"}]},"final_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"redemptions":{"type":"object","properties":{"total":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"remaining":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"redeemed":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"state":{"type":"string","enum":["known","unknown","stale","exhausted"]},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc last observed the returned capacity values."}},"required":["total","remaining","redeemed","state","observed_at"],"additionalProperties":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"The known coupon expiry reported by Udemy."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc first tracked this coupon."},"last_verified_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last attempted to verify this coupon, including failed attempts."},"last_confirmed_active_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last successfully confirmed this coupon as active."},"udemy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null."}},"required":["id","coupon_code","status","status_reason","discount_type","discount_value","final_price","original_price","redemptions","expires_at","created_at","last_verified_at","last_confirmed_active_at","udemy_url"],"additionalProperties":false},"OfferWithCourse":{"type":"object","properties":{"id":{"type":"string"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null."},"status":{"type":"string","enum":["active","expired","invalid","pending_verification"]},"status_reason":{"anyOf":[{"type":"string","enum":["end_date_passed","redemption_limit_reached","udemy_inactive_or_expired","course_became_free","not_instructor_created","udemy_rejected_other","legacy_unclassified"]},{"type":"null"}]},"discount_type":{"type":"string","enum":["free","percentage"]},"discount_value":{"anyOf":[{"type":"number"},{"type":"null"}]},"final_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"redemptions":{"type":"object","properties":{"total":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"remaining":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"redeemed":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"state":{"type":"string","enum":["known","unknown","stale","exhausted"]},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc last observed the returned capacity values."}},"required":["total","remaining","redeemed","state","observed_at"],"additionalProperties":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"The known coupon expiry reported by Udemy."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc first tracked this coupon."},"last_verified_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last attempted to verify this coupon, including failed attempts."},"last_confirmed_active_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last successfully confirmed this coupon as active."},"udemy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null."},"course":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"instructor":{"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"level":{"anyOf":[{"type":"string"},{"type":"null"}]},"rating":{"anyOf":[{"type":"number"},{"type":"null"}]},"duration_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"published_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"last_course_update_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"is_practice_test":{"type":"boolean"},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"}},"required":["id","slug","title"],"additionalProperties":false}}},"required":["id","slug","title","description","thumbnail_url","instructor","category","subcategory","language","level","rating","duration_minutes","published_at","last_course_update_at","is_practice_test","topics"],"additionalProperties":false}},"required":["id","coupon_code","status","status_reason","discount_type","discount_value","final_price","original_price","redemptions","expires_at","created_at","last_verified_at","last_confirmed_active_at","udemy_url","course"],"additionalProperties":false},"OfferCourseSummary":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"instructor":{"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"level":{"anyOf":[{"type":"string"},{"type":"null"}]},"rating":{"anyOf":[{"type":"number"},{"type":"null"}]},"duration_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"published_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"last_course_update_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"is_practice_test":{"type":"boolean"},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"}},"required":["id","slug","title"],"additionalProperties":false}}},"required":["id","slug","title","description","thumbnail_url","instructor","category","subcategory","language","level","rating","duration_minutes","published_at","last_course_update_at","is_practice_test","topics"],"additionalProperties":false},"Course":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"course_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"instructor":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"offers_in_window":{"type":"integer","minimum":0,"maximum":9007199254740991},"window_days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"is_regular_coupon_issuer":{"type":"boolean"}},"required":["name","slug","image_url","offers_in_window","window_days","is_regular_coupon_issuer"],"additionalProperties":false},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"level":{"anyOf":[{"type":"string"},{"type":"null"}]},"rating":{"anyOf":[{"type":"number"},{"type":"null"}]},"reviews":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"students":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"duration_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"is_practice_test":{"type":"boolean"},"published_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"record_updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Comidoc record synchronization timestamp; never used by last_course_updated_after."},"last_course_update_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["id","slug","title","order","confidence"],"additionalProperties":false}},"coupon_history":{"type":"object","properties":{"total_observed":{"type":"integer","minimum":0,"maximum":9007199254740991},"is_repeat_coupon_course":{"type":"boolean"}},"required":["total_observed","is_repeat_coupon_course"],"additionalProperties":false},"offer_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Exact number of offers matching the current request filters."},"returned_offer_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of offers embedded in this response."},"active_offer_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Exact number of currently available active offers."},"offers_truncated":{"type":"boolean","description":"Whether matching offers were omitted from the embedded array."},"offers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null."},"status":{"type":"string","enum":["active","expired","invalid","pending_verification"]},"status_reason":{"anyOf":[{"type":"string","enum":["end_date_passed","redemption_limit_reached","udemy_inactive_or_expired","course_became_free","not_instructor_created","udemy_rejected_other","legacy_unclassified"]},{"type":"null"}]},"discount_type":{"type":"string","enum":["free","percentage"]},"discount_value":{"anyOf":[{"type":"number"},{"type":"null"}]},"final_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"redemptions":{"type":"object","properties":{"total":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"remaining":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"redeemed":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"state":{"type":"string","enum":["known","unknown","stale","exhausted"]},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc last observed the returned capacity values."}},"required":["total","remaining","redeemed","state","observed_at"],"additionalProperties":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"The known coupon expiry reported by Udemy."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc first tracked this coupon."},"last_verified_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last attempted to verify this coupon, including failed attempts."},"last_confirmed_active_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last successfully confirmed this coupon as active."},"udemy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null."}},"required":["id","coupon_code","status","status_reason","discount_type","discount_value","final_price","original_price","redemptions","expires_at","created_at","last_verified_at","last_confirmed_active_at","udemy_url"],"additionalProperties":false}}},"required":["id","slug","title","description","thumbnail_url","course_url","instructor","category","subcategory","language","level","rating","reviews","students","duration_minutes","is_practice_test","published_at","record_updated_at","last_course_update_at","topics","coupon_history","offer_count","returned_offer_count","active_offer_count","offers_truncated","offers"],"additionalProperties":false},"TopicReference":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"}},"required":["id","slug","title"],"additionalProperties":false},"Topic":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"keywords":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"courses_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"active_offer_courses_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","slug","title","description","keywords","aliases","courses_count","updated_at"],"additionalProperties":false},"Instructor":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"offers_in_window":{"type":"integer","minimum":0,"maximum":9007199254740991},"window_days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"is_regular_coupon_issuer":{"type":"boolean"}},"required":["name","slug","image_url","offers_in_window","window_days","is_regular_coupon_issuer"],"additionalProperties":false},"CouponHistory":{"type":"object","properties":{"total_observed":{"type":"integer","minimum":0,"maximum":9007199254740991},"is_repeat_coupon_course":{"type":"boolean"}},"required":["total_observed","is_repeat_coupon_course"],"additionalProperties":false},"FilterOption":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false},"FilterOptions":{"type":"object","properties":{"categories":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"languages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"levels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"course_types":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"durations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"ratings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"coupon_ages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"discount_types":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"coupon_statuses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"filter_modes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"course_sorts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"offer_sorts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"trend_horizons":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}}},"required":["categories","languages","levels","course_types","durations","ratings","coupon_ages","discount_types","coupon_statuses","filter_modes","course_sorts","offer_sorts","trend_horizons"],"additionalProperties":false},"Pagination":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["total","limit","next_cursor"],"additionalProperties":false},"ChangePagination":{"type":"object","properties":{"limit":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["limit","next_cursor"],"additionalProperties":false},"Change":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"course"},"changed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"data":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"is_active":{"type":"boolean"},"is_opted_out":{"type":"boolean"}},"required":["id","slug","is_active","is_opted_out"],"additionalProperties":false}},"required":["type","changed_at","data"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"offer"},"changed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"data":{"type":"object","properties":{"id":{"type":"string"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null."},"status":{"type":"string","enum":["active","expired","invalid","pending_verification"]},"status_reason":{"anyOf":[{"type":"string","enum":["end_date_passed","redemption_limit_reached","udemy_inactive_or_expired","course_became_free","not_instructor_created","udemy_rejected_other","legacy_unclassified"]},{"type":"null"}]},"discount_type":{"type":"string","enum":["free","percentage"]},"discount_value":{"anyOf":[{"type":"number"},{"type":"null"}]},"final_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"redemptions":{"type":"object","properties":{"total":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"remaining":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"redeemed":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"state":{"type":"string","enum":["known","unknown","stale","exhausted"]},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc last observed the returned capacity values."}},"required":["total","remaining","redeemed","state","observed_at"],"additionalProperties":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"The known coupon expiry reported by Udemy."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc first tracked this coupon."},"last_verified_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last attempted to verify this coupon, including failed attempts."},"last_confirmed_active_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last successfully confirmed this coupon as active."},"udemy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null."},"course":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"}},"required":["id","slug","title"],"additionalProperties":false}},"required":["id","coupon_code","status","status_reason","discount_type","discount_value","final_price","original_price","redemptions","expires_at","created_at","last_verified_at","last_confirmed_active_at","udemy_url","course"],"additionalProperties":false}},"required":["type","changed_at","data"],"additionalProperties":false}]},"Quota":{"type":"object","properties":{"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"used":{"type":"integer","minimum":0,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":0,"maximum":9007199254740991},"resets_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["limit","used","remaining","resets_at"],"additionalProperties":false},"Meta":{"type":"object","properties":{"request_id":{"type":"string"},"source":{"type":"string","enum":["direct","rapidapi","mcp"]},"plan":{"type":"string","enum":["free","pro"]},"coupon_codes_included":{"type":"boolean","description":"Whether coupon_code values are included in this response."},"quota":{"type":"object","properties":{"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"used":{"type":"integer","minimum":0,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":0,"maximum":9007199254740991},"resets_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["limit","used","remaining","resets_at"],"additionalProperties":false}},"required":["request_id","source","plan","coupon_codes_included","quota"],"additionalProperties":false},"FilterOptionsResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"categories":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"languages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"levels":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"course_types":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"durations":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"ratings":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"coupon_ages":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"discount_types":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"coupon_statuses":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"filter_modes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"course_sorts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"offer_sorts":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}},"trend_horizons":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"}},"required":["id","label"],"additionalProperties":false}}},"required":["categories","languages","levels","course_types","durations","ratings","coupon_ages","discount_types","coupon_statuses","filter_modes","course_sorts","offer_sorts","trend_horizons"],"additionalProperties":false},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"source":{"type":"string","enum":["direct","rapidapi","mcp"]},"plan":{"type":"string","enum":["free","pro"]},"coupon_codes_included":{"type":"boolean","description":"Whether coupon_code values are included in this response."},"quota":{"type":"object","properties":{"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"used":{"type":"integer","minimum":0,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":0,"maximum":9007199254740991},"resets_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["limit","used","remaining","resets_at"],"additionalProperties":false}},"required":["request_id","source","plan","coupon_codes_included","quota"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false},"CourseList":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"course_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"instructor":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"offers_in_window":{"type":"integer","minimum":0,"maximum":9007199254740991},"window_days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"is_regular_coupon_issuer":{"type":"boolean"}},"required":["name","slug","image_url","offers_in_window","window_days","is_regular_coupon_issuer"],"additionalProperties":false},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"level":{"anyOf":[{"type":"string"},{"type":"null"}]},"rating":{"anyOf":[{"type":"number"},{"type":"null"}]},"reviews":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"students":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"duration_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"is_practice_test":{"type":"boolean"},"published_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"record_updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Comidoc record synchronization timestamp; never used by last_course_updated_after."},"last_course_update_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["id","slug","title","order","confidence"],"additionalProperties":false}},"coupon_history":{"type":"object","properties":{"total_observed":{"type":"integer","minimum":0,"maximum":9007199254740991},"is_repeat_coupon_course":{"type":"boolean"}},"required":["total_observed","is_repeat_coupon_course"],"additionalProperties":false},"offer_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Exact number of offers matching the current request filters."},"returned_offer_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of offers embedded in this response."},"active_offer_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Exact number of currently available active offers."},"offers_truncated":{"type":"boolean","description":"Whether matching offers were omitted from the embedded array."},"offers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null."},"status":{"type":"string","enum":["active","expired","invalid","pending_verification"]},"status_reason":{"anyOf":[{"type":"string","enum":["end_date_passed","redemption_limit_reached","udemy_inactive_or_expired","course_became_free","not_instructor_created","udemy_rejected_other","legacy_unclassified"]},{"type":"null"}]},"discount_type":{"type":"string","enum":["free","percentage"]},"discount_value":{"anyOf":[{"type":"number"},{"type":"null"}]},"final_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"redemptions":{"type":"object","properties":{"total":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"remaining":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"redeemed":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"state":{"type":"string","enum":["known","unknown","stale","exhausted"]},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc last observed the returned capacity values."}},"required":["total","remaining","redeemed","state","observed_at"],"additionalProperties":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"The known coupon expiry reported by Udemy."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc first tracked this coupon."},"last_verified_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last attempted to verify this coupon, including failed attempts."},"last_confirmed_active_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last successfully confirmed this coupon as active."},"udemy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null."}},"required":["id","coupon_code","status","status_reason","discount_type","discount_value","final_price","original_price","redemptions","expires_at","created_at","last_verified_at","last_confirmed_active_at","udemy_url"],"additionalProperties":false}}},"required":["id","slug","title","description","thumbnail_url","course_url","instructor","category","subcategory","language","level","rating","reviews","students","duration_minutes","is_practice_test","published_at","record_updated_at","last_course_update_at","topics","coupon_history","offer_count","returned_offer_count","active_offer_count","offers_truncated","offers"],"additionalProperties":false}},"pagination":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["total","limit","next_cursor"],"additionalProperties":false},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"source":{"type":"string","enum":["direct","rapidapi","mcp"]},"plan":{"type":"string","enum":["free","pro"]},"coupon_codes_included":{"type":"boolean","description":"Whether coupon_code values are included in this response."},"quota":{"type":"object","properties":{"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"used":{"type":"integer","minimum":0,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":0,"maximum":9007199254740991},"resets_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["limit","used","remaining","resets_at"],"additionalProperties":false}},"required":["request_id","source","plan","coupon_codes_included","quota"],"additionalProperties":false}},"required":["data","pagination","meta"],"additionalProperties":false},"CourseResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"course_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"instructor":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"offers_in_window":{"type":"integer","minimum":0,"maximum":9007199254740991},"window_days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"is_regular_coupon_issuer":{"type":"boolean"}},"required":["name","slug","image_url","offers_in_window","window_days","is_regular_coupon_issuer"],"additionalProperties":false},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"level":{"anyOf":[{"type":"string"},{"type":"null"}]},"rating":{"anyOf":[{"type":"number"},{"type":"null"}]},"reviews":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"students":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"duration_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"is_practice_test":{"type":"boolean"},"published_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"record_updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Comidoc record synchronization timestamp; never used by last_course_updated_after."},"last_course_update_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["id","slug","title","order","confidence"],"additionalProperties":false}},"coupon_history":{"type":"object","properties":{"total_observed":{"type":"integer","minimum":0,"maximum":9007199254740991},"is_repeat_coupon_course":{"type":"boolean"}},"required":["total_observed","is_repeat_coupon_course"],"additionalProperties":false},"offer_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Exact number of offers matching the current request filters."},"returned_offer_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of offers embedded in this response."},"active_offer_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Exact number of currently available active offers."},"offers_truncated":{"type":"boolean","description":"Whether matching offers were omitted from the embedded array."},"offers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null."},"status":{"type":"string","enum":["active","expired","invalid","pending_verification"]},"status_reason":{"anyOf":[{"type":"string","enum":["end_date_passed","redemption_limit_reached","udemy_inactive_or_expired","course_became_free","not_instructor_created","udemy_rejected_other","legacy_unclassified"]},{"type":"null"}]},"discount_type":{"type":"string","enum":["free","percentage"]},"discount_value":{"anyOf":[{"type":"number"},{"type":"null"}]},"final_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"redemptions":{"type":"object","properties":{"total":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"remaining":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"redeemed":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"state":{"type":"string","enum":["known","unknown","stale","exhausted"]},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc last observed the returned capacity values."}},"required":["total","remaining","redeemed","state","observed_at"],"additionalProperties":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"The known coupon expiry reported by Udemy."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc first tracked this coupon."},"last_verified_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last attempted to verify this coupon, including failed attempts."},"last_confirmed_active_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last successfully confirmed this coupon as active."},"udemy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null."}},"required":["id","coupon_code","status","status_reason","discount_type","discount_value","final_price","original_price","redemptions","expires_at","created_at","last_verified_at","last_confirmed_active_at","udemy_url"],"additionalProperties":false}}},"required":["id","slug","title","description","thumbnail_url","course_url","instructor","category","subcategory","language","level","rating","reviews","students","duration_minutes","is_practice_test","published_at","record_updated_at","last_course_update_at","topics","coupon_history","offer_count","returned_offer_count","active_offer_count","offers_truncated","offers"],"additionalProperties":false},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"source":{"type":"string","enum":["direct","rapidapi","mcp"]},"plan":{"type":"string","enum":["free","pro"]},"coupon_codes_included":{"type":"boolean","description":"Whether coupon_code values are included in this response."},"quota":{"type":"object","properties":{"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"used":{"type":"integer","minimum":0,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":0,"maximum":9007199254740991},"resets_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["limit","used","remaining","resets_at"],"additionalProperties":false}},"required":["request_id","source","plan","coupon_codes_included","quota"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false},"OfferList":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null."},"status":{"type":"string","enum":["active","expired","invalid","pending_verification"]},"status_reason":{"anyOf":[{"type":"string","enum":["end_date_passed","redemption_limit_reached","udemy_inactive_or_expired","course_became_free","not_instructor_created","udemy_rejected_other","legacy_unclassified"]},{"type":"null"}]},"discount_type":{"type":"string","enum":["free","percentage"]},"discount_value":{"anyOf":[{"type":"number"},{"type":"null"}]},"final_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"redemptions":{"type":"object","properties":{"total":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"remaining":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"redeemed":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"state":{"type":"string","enum":["known","unknown","stale","exhausted"]},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc last observed the returned capacity values."}},"required":["total","remaining","redeemed","state","observed_at"],"additionalProperties":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"The known coupon expiry reported by Udemy."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc first tracked this coupon."},"last_verified_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last attempted to verify this coupon, including failed attempts."},"last_confirmed_active_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last successfully confirmed this coupon as active."},"udemy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null."},"course":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"instructor":{"anyOf":[{"type":"string"},{"type":"null"}]},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"level":{"anyOf":[{"type":"string"},{"type":"null"}]},"rating":{"anyOf":[{"type":"number"},{"type":"null"}]},"duration_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"published_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"last_course_update_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"is_practice_test":{"type":"boolean"},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"}},"required":["id","slug","title"],"additionalProperties":false}}},"required":["id","slug","title","description","thumbnail_url","instructor","category","subcategory","language","level","rating","duration_minutes","published_at","last_course_update_at","is_practice_test","topics"],"additionalProperties":false}},"required":["id","coupon_code","status","status_reason","discount_type","discount_value","final_price","original_price","redemptions","expires_at","created_at","last_verified_at","last_confirmed_active_at","udemy_url","course"],"additionalProperties":false}},"pagination":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["total","limit","next_cursor"],"additionalProperties":false},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"source":{"type":"string","enum":["direct","rapidapi","mcp"]},"plan":{"type":"string","enum":["free","pro"]},"coupon_codes_included":{"type":"boolean","description":"Whether coupon_code values are included in this response."},"quota":{"type":"object","properties":{"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"used":{"type":"integer","minimum":0,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":0,"maximum":9007199254740991},"resets_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["limit","used","remaining","resets_at"],"additionalProperties":false}},"required":["request_id","source","plan","coupon_codes_included","quota"],"additionalProperties":false}},"required":["data","pagination","meta"],"additionalProperties":false},"TopicList":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"keywords":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"courses_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"active_offer_courses_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","slug","title","description","keywords","aliases","courses_count","updated_at"],"additionalProperties":false}},"pagination":{"type":"object","properties":{"total":{"type":"integer","minimum":0,"maximum":9007199254740991},"limit":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["total","limit","next_cursor"],"additionalProperties":false},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"source":{"type":"string","enum":["direct","rapidapi","mcp"]},"plan":{"type":"string","enum":["free","pro"]},"coupon_codes_included":{"type":"boolean","description":"Whether coupon_code values are included in this response."},"quota":{"type":"object","properties":{"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"used":{"type":"integer","minimum":0,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":0,"maximum":9007199254740991},"resets_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["limit","used","remaining","resets_at"],"additionalProperties":false}},"required":["request_id","source","plan","coupon_codes_included","quota"],"additionalProperties":false}},"required":["data","pagination","meta"],"additionalProperties":false},"TopicResponse":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"keywords":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"}},"courses_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"active_offer_courses_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["id","slug","title","description","keywords","aliases","courses_count","updated_at"],"additionalProperties":false},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"source":{"type":"string","enum":["direct","rapidapi","mcp"]},"plan":{"type":"string","enum":["free","pro"]},"coupon_codes_included":{"type":"boolean","description":"Whether coupon_code values are included in this response."},"quota":{"type":"object","properties":{"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"used":{"type":"integer","minimum":0,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":0,"maximum":9007199254740991},"resets_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["limit","used","remaining","resets_at"],"additionalProperties":false}},"required":["request_id","source","plan","coupon_codes_included","quota"],"additionalProperties":false}},"required":["data","meta"],"additionalProperties":false},"CourseTrendResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"rank_change":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"trend_score":{"type":"number"},"score_version":{"type":"string"},"signals":{},"course":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"course_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"instructor":{"type":"object","properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"image_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"offers_in_window":{"type":"integer","minimum":0,"maximum":9007199254740991},"window_days":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"is_regular_coupon_issuer":{"type":"boolean"}},"required":["name","slug","image_url","offers_in_window","window_days","is_regular_coupon_issuer"],"additionalProperties":false},"category":{"anyOf":[{"type":"string"},{"type":"null"}]},"subcategory":{"anyOf":[{"type":"string"},{"type":"null"}]},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"level":{"anyOf":[{"type":"string"},{"type":"null"}]},"rating":{"anyOf":[{"type":"number"},{"type":"null"}]},"reviews":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"students":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"duration_minutes":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"is_practice_test":{"type":"boolean"},"published_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"record_updated_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"Comidoc record synchronization timestamp; never used by last_course_updated_after."},"last_course_update_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"topics":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"order":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}]}},"required":["id","slug","title","order","confidence"],"additionalProperties":false}},"coupon_history":{"type":"object","properties":{"total_observed":{"type":"integer","minimum":0,"maximum":9007199254740991},"is_repeat_coupon_course":{"type":"boolean"}},"required":["total_observed","is_repeat_coupon_course"],"additionalProperties":false},"offer_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Exact number of offers matching the current request filters."},"returned_offer_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Number of offers embedded in this response."},"active_offer_count":{"type":"integer","minimum":0,"maximum":9007199254740991,"description":"Exact number of currently available active offers."},"offers_truncated":{"type":"boolean","description":"Whether matching offers were omitted from the embedded array."},"offers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null."},"status":{"type":"string","enum":["active","expired","invalid","pending_verification"]},"status_reason":{"anyOf":[{"type":"string","enum":["end_date_passed","redemption_limit_reached","udemy_inactive_or_expired","course_became_free","not_instructor_created","udemy_rejected_other","legacy_unclassified"]},{"type":"null"}]},"discount_type":{"type":"string","enum":["free","percentage"]},"discount_value":{"anyOf":[{"type":"number"},{"type":"null"}]},"final_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"redemptions":{"type":"object","properties":{"total":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"remaining":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"redeemed":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"state":{"type":"string","enum":["known","unknown","stale","exhausted"]},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc last observed the returned capacity values."}},"required":["total","remaining","redeemed","state","observed_at"],"additionalProperties":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"The known coupon expiry reported by Udemy."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc first tracked this coupon."},"last_verified_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last attempted to verify this coupon, including failed attempts."},"last_confirmed_active_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last successfully confirmed this coupon as active."},"udemy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null."}},"required":["id","coupon_code","status","status_reason","discount_type","discount_value","final_price","original_price","redemptions","expires_at","created_at","last_verified_at","last_confirmed_active_at","udemy_url"],"additionalProperties":false}}},"required":["id","slug","title","description","thumbnail_url","course_url","instructor","category","subcategory","language","level","rating","reviews","students","duration_minutes","is_practice_test","published_at","record_updated_at","last_course_update_at","topics","coupon_history","offer_count","returned_offer_count","active_offer_count","offers_truncated","offers"],"additionalProperties":false}},"required":["rank","rank_change","trend_score","score_version","signals","course"],"additionalProperties":false}},"calculated_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"score_version":{"type":"string"},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"source":{"type":"string","enum":["direct","rapidapi","mcp"]},"plan":{"type":"string","enum":["free","pro"]},"coupon_codes_included":{"type":"boolean","description":"Whether coupon_code values are included in this response."},"quota":{"type":"object","properties":{"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"used":{"type":"integer","minimum":0,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":0,"maximum":9007199254740991},"resets_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["limit","used","remaining","resets_at"],"additionalProperties":false}},"required":["request_id","source","plan","coupon_codes_included","quota"],"additionalProperties":false}},"required":["data","calculated_at","score_version","meta"],"additionalProperties":false},"TopicTrendResponse":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"rank_change":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"trend_score":{"type":"number"},"score_version":{"type":"string"},"signals":{},"topic":{"type":"object","properties":{"id":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"courses_count":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["id","slug","title","description","courses_count"],"additionalProperties":false}},"required":["rank","rank_change","trend_score","score_version","signals","topic"],"additionalProperties":false}},"calculated_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}]},"score_version":{"type":"string"},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"source":{"type":"string","enum":["direct","rapidapi","mcp"]},"plan":{"type":"string","enum":["free","pro"]},"coupon_codes_included":{"type":"boolean","description":"Whether coupon_code values are included in this response."},"quota":{"type":"object","properties":{"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"used":{"type":"integer","minimum":0,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":0,"maximum":9007199254740991},"resets_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["limit","used","remaining","resets_at"],"additionalProperties":false}},"required":["request_id","source","plan","coupon_codes_included","quota"],"additionalProperties":false}},"required":["data","calculated_at","score_version","meta"],"additionalProperties":false},"ChangeListResponse":{"type":"object","properties":{"data":{"type":"array","items":{"anyOf":[{"type":"object","properties":{"type":{"type":"string","const":"course"},"changed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"data":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"is_active":{"type":"boolean"},"is_opted_out":{"type":"boolean"}},"required":["id","slug","is_active","is_opted_out"],"additionalProperties":false}},"required":["type","changed_at","data"],"additionalProperties":false},{"type":"object","properties":{"type":{"type":"string","const":"offer"},"changed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},"data":{"type":"object","properties":{"id":{"type":"string"},"coupon_code":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null."},"status":{"type":"string","enum":["active","expired","invalid","pending_verification"]},"status_reason":{"anyOf":[{"type":"string","enum":["end_date_passed","redemption_limit_reached","udemy_inactive_or_expired","course_became_free","not_instructor_created","udemy_rejected_other","legacy_unclassified"]},{"type":"null"}]},"discount_type":{"type":"string","enum":["free","percentage"]},"discount_value":{"anyOf":[{"type":"number"},{"type":"null"}]},"final_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"original_price":{"anyOf":[{"type":"number"},{"type":"null"}]},"redemptions":{"type":"object","properties":{"total":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"remaining":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"redeemed":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"state":{"type":"string","enum":["known","unknown","stale","exhausted"]},"observed_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc last observed the returned capacity values."}},"required":["total","remaining","redeemed","state","observed_at"],"additionalProperties":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"The known coupon expiry reported by Udemy."},"created_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$","description":"When Comidoc first tracked this coupon."},"last_verified_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last attempted to verify this coupon, including failed attempts."},"last_confirmed_active_at":{"anyOf":[{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"},{"type":"null"}],"description":"When Comidoc last successfully confirmed this coupon as active."},"udemy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null."},"course":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"type":"string"}},"required":["id","slug","title"],"additionalProperties":false}},"required":["id","coupon_code","status","status_reason","discount_type","discount_value","final_price","original_price","redemptions","expires_at","created_at","last_verified_at","last_confirmed_active_at","udemy_url","course"],"additionalProperties":false}},"required":["type","changed_at","data"],"additionalProperties":false}]}},"pagination":{"type":"object","properties":{"limit":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["limit","next_cursor"],"additionalProperties":false},"meta":{"type":"object","properties":{"request_id":{"type":"string"},"source":{"type":"string","enum":["direct","rapidapi","mcp"]},"plan":{"type":"string","enum":["free","pro"]},"coupon_codes_included":{"type":"boolean","description":"Whether coupon_code values are included in this response."},"quota":{"type":"object","properties":{"limit":{"type":"integer","minimum":0,"maximum":9007199254740991},"used":{"type":"integer","minimum":0,"maximum":9007199254740991},"remaining":{"type":"integer","minimum":0,"maximum":9007199254740991},"resets_at":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"}},"required":["limit","used","remaining","resets_at"],"additionalProperties":false}},"required":["request_id","source","plan","coupon_codes_included","quota"],"additionalProperties":false}},"required":["data","pagination","meta"],"additionalProperties":false},"Problem":{"type":"object","required":["type","title","status","detail","resolution","code","request_id"],"properties":{"type":{"type":"string","format":"uri"},"title":{"type":"string"},"status":{"type":"integer"},"detail":{"type":"string"},"resolution":{"type":"string","description":"Action the client can take to resolve the problem."},"instance":{"type":"string"},"code":{"type":"string","enum":["api_disabled","authentication_rate_limit_exceeded","context_resolution_failed","course_not_found","developer_suspended","endpoint_not_found","insufficient_scope","internal_error","invalid_api_key","invalid_content_length","invalid_filter_value","invalid_query","invalid_rapidapi_proxy","invalid_request_body","mcp_handler_error","mcp_hourly_quota_exceeded","mcp_transport_rate_limit_exceeded","missing_api_key","monthly_quota_exceeded","payload_too_large","quota_store_unavailable","rate_limit_exceeded","topic_not_found","unsupported_media_type"]},"request_id":{"type":"string"},"errors":{}}}}}}