{"id":15622553,"url":"https://github.com/beeequeue/dota-matches-api","last_synced_at":"2025-07-09T04:04:03.826Z","repository":{"id":46702199,"uuid":"515563876","full_name":"beeequeue/dota-matches-api","owner":"beeequeue","description":"🟥 An API that returns upcoming Dota 2 matches from Liquipedia","archived":false,"fork":false,"pushed_at":"2025-07-07T11:32:48.000Z","size":1710,"stargazers_count":10,"open_issues_count":3,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-09T04:03:07.125Z","etag":null,"topics":["api","cloudflare","cloudflare-workers","dota2","dota2-api","match","matches","schedule","series"],"latest_commit_sha":null,"homepage":"https://dota.haglund.dev/v1/matches","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/beeequeue.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2022-07-19T11:53:01.000Z","updated_at":"2025-07-07T05:10:23.000Z","dependencies_parsed_at":"2023-09-25T04:50:54.469Z","dependency_job_id":"8fa7e850-477e-463b-a049-15a76723e9d7","html_url":"https://github.com/beeequeue/dota-matches-api","commit_stats":{"total_commits":338,"total_committers":3,"mean_commits":"112.66666666666667","dds":0.2899408284023669,"last_synced_commit":"3d1d6001fea01349d53a13a380557e186e984bb8"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/beeequeue/dota-matches-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beeequeue%2Fdota-matches-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beeequeue%2Fdota-matches-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beeequeue%2Fdota-matches-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beeequeue%2Fdota-matches-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/beeequeue","download_url":"https://codeload.github.com/beeequeue/dota-matches-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beeequeue%2Fdota-matches-api/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264390671,"owners_count":23600552,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","cloudflare","cloudflare-workers","dota2","dota2-api","match","matches","schedule","series"],"created_at":"2024-10-03T09:54:29.888Z","updated_at":"2025-07-09T04:04:03.806Z","avatar_url":"https://github.com/beeequeue.png","language":"TypeScript","readme":"# Dota 2 Team Matches API\n\nA simple API that fetches, caches and formats the\ncurrent [upcoming match schedule from Liquipedia](https://liquipedia.net/dota2/Liquipedia:Upcoming_and_ongoing_matches).\n\nIt caches matches for 3 hours after initially fetching them.\n\nBig thanks to [Liquipedia](https://liquipedia.net) for providing the data! It is an amazing website ran and maintained\nby amazing people.\n\n## API\n\n**Base URL:** `https://dota.haglund.dev`\n\n```ts\ntype Team = {\n  name: string | null\n  url: string | null\n}\n\ntype Match = {\n  hash: string\n  teams: [Team | null, Team | null]\n  matchType: string | null\n  startsAt: string | null\n  leagueName: string | null\n  leagueUrl: string | null\n  streamUrl: string | null\n}\n```\n\n### `GET /v1/matches`\n\n```ts\ntype ResponseBody = Match[]\n```\n\n## Development\n\n### Setup\n\n1. Install dependencies \u003cbr/\u003e`pnpm install`\n1. Execute DB migrations \u003cbr/\u003e`pnpm dev:migrate`\n1. Start development server \u003cbr/\u003e`pnpm dev`\n1. Go wild!\n\n### Architecture\n\n```mermaid\nflowchart TD\n  clients([API Clients])\n  browser([Browser])\n  worker(Worker):::cf\n  discord([Discord]):::discord\n  d1[(\"D1 (SQLite)\")]:::cf\n  cache(\"Cache\"):::cf\n\n  classDef cf stroke:#FFC500,stroke-width:2px\n  classDef discord stroke:#5865F2\n\n  subgraph Cloudflare\n    worker\n    d1\n    cache\n  end\n\n  d1 \u003c-- all data* --\u003e worker\n  cache \u003c-- /matches requests --\u003e worker\n  worker \u003c-- /matches --\u003e clients\n  worker \u003c-- validate oauth, commands --\u003e discord\n  %% worker \u003c--\u003e browser\n  discord \u003c-- init oauth --\u003e browser\n```\n\n\\*Matches,\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeeequeue%2Fdota-matches-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbeeequeue%2Fdota-matches-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeeequeue%2Fdota-matches-api/lists"}