# Scratch Community API
> Live profile, project and engagement data from Scratch, MIT's massive creative-coding platform where millions of young creators share interactive projects — served from the public Scratch API. Look up any user for their profile (join date, country, bio and "what I'm working on"), open any project for its engagement stats (views, loves, favourites and remixes) with author and dates, list a user's shared projects with their stats and totals, or search the shared projects. The creative-community-and-engagement layer for social, edtech and dashboard apps. Live, no key, no cache. Distinct from generic coding or game-catalogue APIs — this is the live Scratch community.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/scratch-api/..."
```

## Pricing
- **Free** (Free) — 11,000 calls/Mo, 5 req/s
- **Starter** ($7/Mo) — 145,000 calls/Mo, 15 req/s
- **Pro** ($22/Mo) — 730,000 calls/Mo, 40 req/s
- **Scale** ($51/Mo) — 3,700,000 calls/Mo, 100 req/s

## Endpoints

### User

#### `GET /v1/user` — A Scratcher profile

**Parameters:**
- `username` (query, required, string) — Scratch username Example: `griffpatch`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/scratch-api/v1/user?username=griffpatch"
```

**Response:**
```json
{
    "data": {
        "id": 1882674,
        "bio": "Got hooked on coding when I was a kid, now I'm a parent and nothing's changed! My day job involves java coding. In my spare time I love making games, being creative & drumming in church.",
        "image": "https://cdn2.scratch.mit.edu/get_image/user/1882674_90x90.png?v=",
        "joined": "2012-10-24T12:59:31.000Z",
        "country": "United Kingdom",
        "username": "griffpatch",
        "working_on": "YouTube Tutorials ▶️ www.youtube.com/griffpatch Me: @griffpatch_tutor | @Griffpatch-Academy Please don't spam: Max 1 ad per user a day",
        "profile_url": "https://scratch.mit.edu/users/griffpatch",
        "scratchteam": false,
        "account_age_days": 4976
    },
    "meta": {
        "timestamp": "2026-06-09T03:02:16.361Z",
        "request_id": "365f5d7c-0dfe-4322-be97-c2bb7dc353df"
    },
    "status": "ok",
    "message": "User retrieved successfully",
    "success": true
}
```

### Project

#### `GET /v1/project` — A project engagement stats

**Parameters:**
- `id` (query, required, string) — Numeric project id Example: `10128407`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/scratch-api/v1/project?id=10128407"
```

**Response:**
```json
{
    "data": {
        "id": 10128407,
        "url": "https://scratch.mit.edu/projects/10128407",
        "image": "https://cdn2.scratch.mit.edu/get_image/project/10128407_480x360.png",
        "loves": 542929,
        "title": "Paper Minecraft v11.7 (Minecraft 2D)",
        "views": 66302564,
        "author": "griffpatch",
        "shared": "2014-12-01T12:55:01.000Z",
        "created": "2013-05-04T19:56:50.000Z",
        "remixes": 71537,
        "favorites": 483338,
        "description": "Sorry too many comments are causing the scratch servers to wobble... Commenting has had to be temporarily disabled! ★ Subscribe to me on YouTube for our my helpful videos on Scratch coding :) - Search up \"griffpatch\". ★ Scratch auto disabled comments on this project because it was slowing things dow",
        "instructions": "Modding Guide: ▶️ https://youtu.be/PexNsUvqD5w [1 to 9] - Select Item [Click] - Place or Mine [WASD] - Move / Jump [E] - Open/Close Inventory [E+hover] - Open / Close Chest, Crafting Table, Door [Spac"
    },
    "meta": {
        "timestamp": "2026-06-09T03:02:16.630Z",
        "request_id": "8fab1000-1ffb-4b53-870f-8ec77c2e4377"
    },
    "status": "ok",
    "message": "Project retrieved successfully",
    "success": true
}
```

### Projects

#### `GET /v1/userprojects` — A user shared projects with stats

**Parameters:**
- `username` (query, required, string) — Scratch username Example: `griffpatch`
- `limit` (query, optional, string) — Max projects (1-40) Example: `20`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/scratch-api/v1/userprojects?username=griffpatch&limit=20"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "totals": {
            "loves": 641088,
            "views": 31970611,
            "remixes": 0
        },
        "projects": [
            {
                "id": 843162693,
                "url": "https://scratch.mit.edu/projects/843162693",
                "image": "https://cdn2.scratch.mit.edu/get_image/project/843162693_480x360.png",
                "loves": 37468,
                "title": "Minecraft-ish MMO v1.7",
                "views": 1491675,
                "author": null,
                "shared": "2026-06-08T20:24:18.000Z",
                "created": "2023-04-29T09:27:30.000Z",
                "remixes": 0,
                "favorites": 34956,
                "description": null,
                "instructions": "⭐⭐⭐⭐ Coding Tutorials here ⭐⭐⭐⭐ ⭐⭐⭐ www.youtube.com/griffpatch ⭐⭐⭐ MMO Tutorial - https://youtu.be/1JTgg4WVAX8 ⭐ Fixed Furnaces - Sorry!!! ⭐ Place your Land Claim Sign to protect your building ⭐ Escap"
            },
            {
                "id": 1326350994,
                "url": "https://scratch.mit.edu/projects/1326350994",
                "image": "https://cdn2.scratch.mit.edu/get_image/project/1326350994_480x360.png",
                "loves": 3294,
                "title": "Just stars... v0.1",
                "views": 18738,
                "author": null,
                "shared": "2026-05-29T17:13:52.000Z",
                "created": "2026-05-29T08:44:43.000Z",

…(truncated, see openapi.json for full schema)
```

### Search

#### `GET /v1/search` — Search shared projects

**Parameters:**
- `q` (query, required, string) — Search query Example: `platformer`
- `sort` (query, optional, string) — relevance|trending|popular|recent Example: `popular`
- `limit` (query, optional, string) — Max results (1-40) Example: `20`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/scratch-api/v1/search?q=platformer&sort=popular&limit=20"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "query": "platformer",
        "projects": [
            {
                "id": 14352503,
                "url": "https://scratch.mit.edu/projects/14352503",
                "image": "https://cdn2.scratch.mit.edu/get_image/project/14352503_480x360.png",
                "loves": 27142,
                "title": "Platformer",
                "views": 1429349,
                "author": "Semi99999",
                "shared": "2018-01-19T06:43:48.000Z",
                "created": "2013-11-15T23:10:01.000Z",
                "remixes": 0,
                "favorites": 22612,
                "description": "Be sure to check out this project: https://scratch.mit.edu/projects/770694979/ ######################################## Sunday, May 21, 2023 hit a million views! Thanks everybody! Gone for over 4 months. I come back to 849 favorites and 1045 loves. Thank you all so much. I would never believe that I",
                "instructions": "Click the flag, then use arrow keys to play! The Space key at the beginning and end does not work the blue stuff is bouncy use blue to get to the door! -Credits to another scratcher for the character."
            },
            {
                "id": 103069687,
                "url": "https://scratch.mit.edu/projects/103069687",
                "image": "https://cdn2.scratch.mit.edu/get_image/project/103069687_480x360.png",
                "loves": 46743,
                "title": "Jumper (Platformer)",
   
…(truncated, see openapi.json for full schema)
```

### Meta

#### `GET /v1/meta` — Service metadata

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/scratch-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "source": "Scratch public API (live)",
        "service": "scratch-api",
        "endpoints": {
            "GET /v1/meta": "This document.",
            "GET /v1/user": "A Scratcher's profile (username=griffpatch).",
            "GET /v1/search": "Search shared projects (q=platformer, sort=trending|popular|recent).",
            "GET /v1/project": "A project's engagement stats (id=10128407).",
            "GET /v1/userprojects": "A user's shared projects with engagement stats (username=griffpatch)."
        },
        "description": "Live Scratch (MIT) creative-community data: any user's profile (join date, country, bio, what they're working on), any project's engagement stats (views, loves, favorites, remixes) with author and dates, project search, and the community discovery feed (most loved, most remixed and newest projects). Live, no key. Distinct from generic coding or game-catalogue APIs — this is the live Scratch community and engagement layer.",
        "upstream_status": "ok"
    },
    "meta": {
        "timestamp": "2026-06-09T03:02:17.167Z",
        "request_id": "47111449-d1fb-4ae5-9f9a-e55c1c5ecb43"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/scratch-api
OpenAPI spec: https://www.oanor.com/api/scratch-api/openapi.json
