{"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"}}}}}}},"/coupon-statistics":{"get":{"operationId":"getCouponStatistics","tags":["Discovery"],"summary":"Aggregate verified coupon statistics","description":"Anonymous, quota-free aggregate statistics computed from Comidoc's verification pipeline: free-coupon lifetime cohorts, 24-hour and 7-day survival, monthly volume, verification-check coverage, redemption-cap distribution, and 30-day topic momentum. The response includes its methodology version and data cutoff. No authentication required.","security":[],"parameters":[{"name":"window","in":"query","schema":{"type":"string","enum":["30d","90d","1y"],"default":"1y"}}],"responses":{"200":{"description":"Aggregate statistics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouponStatisticsResponse"}}}},"400":{"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"}}}}}}}},"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":{"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"type":["number","null"]},"final_price":{"type":["number","null"]},"original_price":{"type":["number","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":{"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"type":["number","null"]},"final_price":{"type":["number","null"]},"original_price":{"type":["number","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":{"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null.","type":["string","null"]},"course":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"type":["string","null"]},"title":{"type":"string"},"description":{"type":["string","null"]},"thumbnail_url":{"type":["string","null"]},"instructor":{"type":["string","null"]},"category":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"language":{"type":["string","null"]},"level":{"type":["string","null"]},"rating":{"type":["number","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":{"type":["string","null"]},"title":{"type":"string"},"description":{"type":["string","null"]},"thumbnail_url":{"type":["string","null"]},"instructor":{"type":["string","null"]},"category":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"language":{"type":["string","null"]},"level":{"type":["string","null"]},"rating":{"type":["number","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":{"type":["string","null"]},"title":{"type":"string"},"description":{"type":["string","null"]},"thumbnail_url":{"type":["string","null"]},"course_url":{"type":["string","null"]},"instructor":{"type":"object","properties":{"name":{"type":["string","null"]},"slug":{"type":["string","null"]},"image_url":{"type":["string","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":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"language":{"type":["string","null"]},"level":{"type":["string","null"]},"rating":{"type":["number","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":{"type":["number","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":{"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"type":["number","null"]},"final_price":{"type":["number","null"]},"original_price":{"type":["number","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":{"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"type":["string","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":{"type":["string","null"]},"slug":{"type":["string","null"]},"image_url":{"type":["string","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":{"type":["string","null"]}},"required":["total","limit","next_cursor"],"additionalProperties":false},"ChangePagination":{"type":"object","properties":{"limit":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"next_cursor":{"type":["string","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":{"type":["string","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":{"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"type":["number","null"]},"final_price":{"type":["number","null"]},"original_price":{"type":["number","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":{"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null.","type":["string","null"]},"course":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"type":["string","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":{"type":["string","null"]},"title":{"type":"string"},"description":{"type":["string","null"]},"thumbnail_url":{"type":["string","null"]},"course_url":{"type":["string","null"]},"instructor":{"type":"object","properties":{"name":{"type":["string","null"]},"slug":{"type":["string","null"]},"image_url":{"type":["string","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":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"language":{"type":["string","null"]},"level":{"type":["string","null"]},"rating":{"type":["number","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":{"type":["number","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":{"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"type":["number","null"]},"final_price":{"type":["number","null"]},"original_price":{"type":["number","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":{"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"type":["string","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":{"type":["string","null"]},"title":{"type":"string"},"description":{"type":["string","null"]},"thumbnail_url":{"type":["string","null"]},"course_url":{"type":["string","null"]},"instructor":{"type":"object","properties":{"name":{"type":["string","null"]},"slug":{"type":["string","null"]},"image_url":{"type":["string","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":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"language":{"type":["string","null"]},"level":{"type":["string","null"]},"rating":{"type":["number","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":{"type":["number","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":{"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"type":["number","null"]},"final_price":{"type":["number","null"]},"original_price":{"type":["number","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":{"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"type":["number","null"]},"final_price":{"type":["number","null"]},"original_price":{"type":["number","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":{"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null.","type":["string","null"]},"course":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"type":["string","null"]},"title":{"type":"string"},"description":{"type":["string","null"]},"thumbnail_url":{"type":["string","null"]},"instructor":{"type":["string","null"]},"category":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"language":{"type":["string","null"]},"level":{"type":["string","null"]},"rating":{"type":["number","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":{"type":["string","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":{"type":["string","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":{"type":["string","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":{"type":["string","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":{"type":["string","null"]},"title":{"type":"string"},"description":{"type":["string","null"]},"thumbnail_url":{"type":["string","null"]},"course_url":{"type":["string","null"]},"instructor":{"type":"object","properties":{"name":{"type":["string","null"]},"slug":{"type":["string","null"]},"image_url":{"type":["string","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":{"type":["string","null"]},"subcategory":{"type":["string","null"]},"language":{"type":["string","null"]},"level":{"type":["string","null"]},"rating":{"type":["number","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":{"type":["number","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":{"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"type":["number","null"]},"final_price":{"type":["number","null"]},"original_price":{"type":["number","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":{"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"type":["string","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":{"type":["string","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":{"description":"The current coupon code when meta.coupon_codes_included is true; otherwise null.","type":["string","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":{"type":["number","null"]},"final_price":{"type":["number","null"]},"original_price":{"type":["number","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":{"description":"The direct Udemy URL when meta.coupon_codes_included is true; otherwise null.","type":["string","null"]},"course":{"type":"object","properties":{"id":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"Udemy's canonical numeric course ID."},"slug":{"type":["string","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":{"type":["string","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},"CouponStatisticsResponse":{"type":"object","properties":{"schema_version":{"type":"string"},"methodology_version":{"type":"string"},"window":{"type":"string","enum":["30d","90d","1y"]},"window_start":{"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"}]},"generated_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_through":{"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"}]},"verification_coverage_start":{"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"}]},"scope":{"type":"object","properties":{"lifetime_discount_type":{"type":"string","const":"free"},"timezone":{"type":"string","const":"UTC"},"lifetime_endpoint":{"type":"string","const":"last_verification_detection"}},"required":["lifetime_discount_type","timezone","lifetime_endpoint"],"additionalProperties":false},"summary":{"type":"object","properties":{"ended_free_coupons":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_lifetime_hours":{"type":["number","null"]},"survived_24h_percent":{"type":["number","null"]},"survived_7d_percent":{"type":["number","null"]},"average_verification_checks_per_day":{"type":["number","null"]},"verification_checks":{"type":"integer","minimum":0,"maximum":9007199254740991},"active_free_offers":{"type":"integer","minimum":0,"maximum":9007199254740991},"known_active_capacity":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_remaining_capacity_percent":{"type":["number","null"]}},"required":["ended_free_coupons","median_lifetime_hours","survived_24h_percent","survived_7d_percent","average_verification_checks_per_day","verification_checks","active_free_offers","known_active_capacity","median_remaining_capacity_percent"],"additionalProperties":false},"monthly_lifetime":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Calendar month in YYYY-MM (UTC)."},"ended_coupon_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"median_lifetime_hours":{"type":["number","null"]},"p25_lifetime_hours":{"type":["number","null"]},"p75_lifetime_hours":{"type":["number","null"]},"survived_24h_percent":{"type":["number","null"]},"survived_7d_percent":{"type":["number","null"]},"is_partial":{"type":"boolean"}},"required":["month","ended_coupon_count","median_lifetime_hours","p25_lifetime_hours","p75_lifetime_hours","survived_24h_percent","survived_7d_percent","is_partial"],"additionalProperties":false}},"monthly_volume":{"type":"array","items":{"type":"object","properties":{"month":{"type":"string","pattern":"^\\d{4}-\\d{2}$","description":"Calendar month in YYYY-MM (UTC)."},"created":{"type":"integer","minimum":0,"maximum":9007199254740991},"free":{"type":"integer","minimum":0,"maximum":9007199254740991},"discounted":{"type":"integer","minimum":0,"maximum":9007199254740991},"free_percentage":{"type":"number"},"is_partial":{"type":"boolean"}},"required":["month","created","free","discounted","free_percentage","is_partial"],"additionalProperties":false}},"redemption_cap_tiers":{"type":"array","items":{"type":"object","properties":{"max_uses":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"coupon_count":{"type":"integer","minimum":0,"maximum":9007199254740991},"percentage":{"type":"number"}},"required":["max_uses","coupon_count","percentage"],"additionalProperties":false}},"topic_momentum":{"type":"object","properties":{"horizon":{"type":"string","const":"30d"},"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"}]},"topics":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991},"rank_change":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"score":{"type":"number","minimum":0},"title":{"type":"string"},"slug":{"type":"string"},"unique_opens":{"type":"integer","minimum":0,"maximum":9007199254740991},"coupon_clicks":{"type":"integer","minimum":0,"maximum":9007199254740991},"redemptions_consumed":{"type":"integer","minimum":0,"maximum":9007199254740991},"fresh_coupons":{"type":"integer","minimum":0,"maximum":9007199254740991},"trending_courses":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["rank","rank_change","score","title","slug","unique_opens","coupon_clicks","redemptions_consumed","fresh_coupons","trending_courses"],"additionalProperties":false}}},"required":["horizon","calculated_at","topics"],"additionalProperties":false},"license":{"type":"object","properties":{"name":{"type":"string","const":"CC BY 4.0"},"url":{"type":"string","format":"uri"},"attribution":{"type":"string","const":"Comidoc"}},"required":["name","url","attribution"],"additionalProperties":false}},"required":["schema_version","methodology_version","window","window_start","generated_at","data_through","verification_coverage_start","scope","summary","monthly_lifetime","monthly_volume","redemption_cap_tiers","topic_momentum","license"],"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":{}}}}}}