{"id":19030729,"url":"https://github.com/hackclub/cdn","last_synced_at":"2025-06-30T02:07:04.485Z","repository":{"id":46441264,"uuid":"280713071","full_name":"hackclub/cdn","owner":"hackclub","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-11T14:01:17.000Z","size":111,"stargazers_count":25,"open_issues_count":5,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-27T04:15:34.629Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://cdn.hackclub.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hackclub.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2020-07-18T18:13:20.000Z","updated_at":"2025-04-10T02:44:19.000Z","dependencies_parsed_at":"2024-05-05T22:28:55.074Z","dependency_job_id":"dd7eec5f-ef86-4606-9fb4-a3e7d5a88575","html_url":"https://github.com/hackclub/cdn","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hackclub/cdn","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackclub%2Fcdn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackclub%2Fcdn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackclub%2Fcdn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackclub%2Fcdn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hackclub","download_url":"https://codeload.github.com/hackclub/cdn/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hackclub%2Fcdn/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262697276,"owners_count":23349894,"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":[],"created_at":"2024-11-08T21:19:16.459Z","updated_at":"2025-06-30T02:07:04.457Z","avatar_url":"https://github.com/hackclub.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://assets.hackclub.com/flag-standalone.svg\" width=\"100\" alt=\"flag\"\u003e\n  \u003ch1\u003ecdn.hackclub.com\u003c/h1\u003e\n\u003c/div\u003e\n\n\u003cp align=\"center\"\u003e\u003ci\u003eDeep under the waves and storms there lies a \u003ca href=\"https://app.slack.com/client/T0266FRGM/C016DEDUL87\"\u003evault\u003c/a\u003e...\u003c/i\u003e\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://files.catbox.moe/6fpj0x.png\" width=\"100%\" alt=\"Banner\"\u003e\n  \u003cp align=\"center\"\u003eBanner illustration by \u003ca href=\"https://gh.maxwofford.com\"\u003e@maxwofford\u003c/a\u003e.\u003c/p\u003e\n\n  \u003ca href=\"https://app.slack.com/client/T0266FRGM/C016DEDUL87\"\u003e\n    \u003cimg alt=\"Slack Channel\" src=\"https://img.shields.io/badge/slack-%23cdn-blue.svg?style=flat\u0026logo=slack\"\u003e\n  \u003c/a\u003e\n\u003c/div\u003e\n\n\n## 📡 API Usage\n\n- All API endpoints require authentication via `Authorization: Bearer api-token` header\n- Use the API_TOKEN from your environment configuration\n- Failure to include a valid token will result in 401 Unauthorized responses\n\n### V3 API (Latest)\n\u003cimg alt=\"Version 3\" src=\"https://files.catbox.moe/e3ravk.png\" align=\"right\" width=\"300\"\u003e\n\n**Endpoint:** `POST https://cdn.hackclub.com/api/v3/new`\n\n**Headers:**\n```\nAuthorization: Bearer api-token\nContent-Type: application/json\n```\n\n**Request Example:**\n```bash\ncurl --location 'https://cdn.hackclub.com/api/v3/new' \\\n--header 'Authorization: Bearer beans' \\\n--header 'Content-Type: application/json' \\\n--data '[\n  \"https://assets.hackclub.com/flag-standalone.svg\",\n  \"https://assets.hackclub.com/flag-orpheus-left.png\"\n]'\n```\n\n**Response:**\n```json\n{\n  \"files\": [\n    {\n      \"deployedUrl\": \"https://hc-cdn.hel1.your-objectstorage.com/s/v3/64a9472006c4472d7ac75f2d4d9455025d9838d6_flag-standalone.svg\",\n      \"file\": \"0_64a9472006c4472d7ac75f2d4d9455025d9838d6_flag-standalone.svg\",\n      \"sha\": \"64a9472006c4472d7ac75f2d4d9455025d9838d6\",\n      \"size\": 4365\n    },\n    {\n      \"deployedUrl\": \"https://hc-cdn.hel1.your-objectstorage.com/s/v3/d926bfd9811ebfe9172187793a171a5cbcc61992_flag-orpheus-left.png\",\n      \"file\": \"1_d926bfd9811ebfe9172187793a171a5cbcc61992_flag-orpheus-left.png\",\n      \"sha\": \"d926bfd9811ebfe9172187793a171a5cbcc61992\",\n      \"size\": 8126\n    }\n  ],\n  \"cdnBase\": \"https://hc-cdn.hel1.your-objectstorage.com\"\n}\n```\n\n\u003cdetails\u003e\n\u003csummary\u003eV2 API\u003c/summary\u003e\n\n\u003cimg alt=\"Version 2\" src=\"https://files.catbox.moe/uuk1vm.png\" align=\"right\" width=\"300\"\u003e\n\n**Endpoint:** `POST https://cdn.hackclub.com/api/v2/new`\n\n**Headers:**\n```\nAuthorization: Bearer api-token\nContent-Type: application/json\n```\n\n**Request Example:**\n```json\n[\n  \"https://assets.hackclub.com/flag-standalone.svg\",\n  \"https://assets.hackclub.com/flag-orpheus-left.png\"\n]\n```\n\n**Response:**\n```json\n{\n  \"flag-standalone.svg\": \"https://cdn.example.dev/s/v2/flag-standalone.svg\",\n  \"flag-orpheus-left.png\": \"https://cdn.example.dev/s/v2/flag-orpheus-left.png\"\n}\n```\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eV1 API\u003c/summary\u003e\n\n\u003cimg alt=\"Version 1\" src=\"https://files.catbox.moe/tnzdfe.png\" align=\"right\" width=\"300\"\u003e\n\n**Endpoint:** `POST https://cdn.hackclub.com/api/v1/new`\n\n**Headers:**\n```\nAuthorization: Bearer api-token\nContent-Type: application/json\n```\n\n**Request Example:**\n```json\n[\n  \"https://assets.hackclub.com/flag-standalone.svg\",\n  \"https://assets.hackclub.com/flag-orpheus-left.png\"\n]\n```\n\n**Response:**\n```json\n[\n  \"https://cdn.example.dev/s/v1/0_flag-standalone.svg\",\n  \"https://cdn.example.dev/s/v1/1_flag-orpheus-left.png\"\n]\n```\n\u003c/details\u003e\n\n# Technical Details\n\n- **Storage Structure:** `/s/v3/{HASH}_{filename}`\n- **File Naming:** `/s/{slackUserId}/{unix}_{sanitizedFilename}`\n\n\u003cdiv align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003cp\u003eMade with 💜 for Hack Club\u003c/p\u003e\n\u003c/div\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackclub%2Fcdn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhackclub%2Fcdn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackclub%2Fcdn/lists"}