Course and coupon data without rebuilding the infrastructure.
This reference covers authentication, quotas, filters, coupon availability, trends, and the Comidoc MCP surface.
- REST base URL
- https://comidoc.com/api/v1
- MCP endpoint
- https://comidoc.com/mcp
- Date and time format
- ISO 8601 with an explicit offset
Getting started
A verified email address is required to generate a key. The complete key is displayed only once, and Comidoc stores only its cryptographic digest. Send it as a Bearer token.
curl 'https://comidoc.com/api/v1/courses?q=python&rating_min=4.5&has_active_coupon=true' \
-H 'Authorization: Bearer cmd_live_your_key'Free: 250 requests/month. Pro: 100,000 requests/month, 10 requests/second, and up to 100 results/page. Responses include RateLimit-*, X-RateLimit-*, and X-Request-Id headers.
Prefer learning by example? The tutorial Build a Udemy Coupon Discord Bot in 5 Minutes goes from zero to a running integration in forty lines of Node.js on the free plan.
Coupon availability contract
Redemption capacity is public on every plan. redemptions.total is the initial capacity reported by Udemy, remaining is the capacity available at the latest successful observation, and redeemed is calculated when both values are known.
{
"data": [{
"coupon_code": "KEEPLEARNING",
"redemptions": {
"total": 100,
"remaining": 80,
"redeemed": 20,
"state": "known",
"observed_at": "2026-07-18T14:20:00.000Z"
},
"expires_at": "2026-07-21T23:59:59.000Z",
"created_at": "2026-07-17T09:05:00.000Z",
"last_verified_at": "2026-07-18T14:20:00.000Z",
"last_confirmed_active_at": "2026-07-18T14:20:00.000Z"
}],
"pagination": {
"total": 1,
"limit": 25,
"next_cursor": null
},
"meta": {
"request_id": "req_…",
"source": "direct",
"plan": "pro",
"coupon_codes_included": true,
"quota": {
"limit": 100000,
"used": 42,
"remaining": 99958,
"resets_at": "2026-08-01T00:00:00.000Z"
}
}
}created_at records when Comidoc first tracked the coupon. last_verified_at is the latest verification attempt, even if it failed, while last_confirmed_active_at is the latest successful active check. redemptions.observed_at timestamps the returned capacity values.
States: for a fresh measurement, when Udemy does not provide capacity, for an old measurement or inactive offer, and when no redemptions remain. On Free, is and is . Pro returns the coupon code, sets that metadata flag to , and includes the complete Udemy URL.