Appel Workshop API

Read-only JSON API for levels.

Rate Limiting

Requests are limited per IP address: 60 requests per 60 seconds. Exceeding the limit returns HTTP 429 with a retry_after_seconds value.

Endpoints

  • GET /api/levels/ - Returns all levels (newest first).
  • GET /api/levels/<id>/ - Returns one level by id.
  • GET /api/profiles/<username>/ - Returns one user profile by username (case-insensitive).

Level Object Fields

  • id, name, mod_category, mod_category_label
  • difficulty, difficulty_rating, quality_rating
  • description, original_uploader, other_creators
  • url, video_url, created_at, detail_url
  • creator object with username, display_name, profile_url

Profile Object Fields

  • username, display_name, bio, scratch_username
  • date_joined, difficulty_system, profile_url
  • uploaded_levels_count, approved_completions_count
  • uploaded_levels list and approved_completions list

Example

{
  "id": 123,
  "name": "My Level",
  "creator": {
    "username": "someuser",
    "display_name": "Some User",
    "profile_url": "https://example.com/profile/someuser/"
  },
  "mod_category": "appel",
  "mod_category_label": "Appel",
  "difficulty": 4.5,
  "difficulty_rating": 4.75,
  "quality_rating": 4.4,
  "description": "...",
  "original_uploader": "",
  "other_creators": "friend1, Friend Two",
  "url": "https://example.com",
  "video_url": "https://www.youtube.com/embed/VIDEO_ID",
  "created_at": "2026-04-25T14:35:12.123456+00:00",
  "detail_url": "https://example.com/level/123/"
}