# 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's 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's 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/remixes` — The projects remixed from a project

**Parameters:**
- `id` (query, required, string) — Numeric project id Example: `10128407`
- `limit` (query, optional, string) — Max remixes (1-40) Example: `20`

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

**Response:**
```json
{
    "data": {
        "count": 20,
        "remixes": [
            {
                "id": 10285001,
                "url": "https://scratch.mit.edu/projects/10285001",
                "image": "https://cdn2.scratch.mit.edu/get_image/project/10285001_480x360.png",
                "loves": 295,
                "title": "Paper Minecraft parkour w/t lag test 1.0",
                "views": 68111,
                "author": "J_man2468",
                "shared": "2013-05-17T12:42:13.000Z",
                "created": "2013-05-17T12:17:27.000Z",
                "remixes": 0,
                "favorites": 270,
                "description": "griffpach, and my proggraming one teacher, mr miller",
                "instructions": "*** Latest Update --> sprint feacher, double a/d*** *** Keys *** A & D - Move Left and right, double klick to sprint Space or W - Jump Click - Mine (Dig) - At present WAY to fast - but fun ;) ??? - Pl"
            },
            {
                "id": 10374849,
                "url": "https://scratch.mit.edu/projects/10374849",
                "image": "https://cdn2.scratch.mit.edu/get_image/project/10374849_480x360.png",
                "loves": 138,
                "title": "Paper Minecraft Test v2.8",
                "views": 45091,
                "author": "CrazyBeast",
                "shared": "2013-06-11T00:08:22.000Z",
                "created": "2013-05-21T22:47:00.000Z",
                "remixes": 0,
                "favorites": 133,
             
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/userprojects` — A user's shared projects

**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 (min 2 chars) Example: `platformer`
- `sort` (query, optional, string) — relevance (default), trending, popular or recent Example: `trending`
- `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/search?q=platformer&sort=trending&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
}
```

### Users

#### `GET /v1/favorites` — The projects a user has loved

**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/favorites?username=griffpatch&limit=20"
```

**Response:**
```json
{
    "data": {
        "count": 20,
        "projects": [
            {
                "id": 1324126994,
                "url": "https://scratch.mit.edu/projects/1324126994",
                "image": "https://cdn2.scratch.mit.edu/get_image/project/1324126994_480x360.png",
                "loves": 285,
                "title": "Metroidvania Assets",
                "views": 5112,
                "author": null,
                "shared": "2026-06-08T20:21:05.000Z",
                "created": "2026-05-24T13:21:24.000Z",
                "remixes": 0,
                "favorites": 255,
                "description": null,
                "instructions": "Hello Fellow Scratchers! - Welcome to my latest Tutorial Series \"Moonleaf\" based on the classic Metroidvania scrolling adventure platformer Hollow Knight. We will be coding this up over the Summer in "
            },
            {
                "id": 1261744463,
                "url": "https://scratch.mit.edu/projects/1261744463",
                "image": "https://cdn2.scratch.mit.edu/get_image/project/1261744463_480x360.png",
                "loves": 3436,
                "title": "Griffpatch: The Movie",
                "views": 20365,
                "author": null,
                "shared": "2026-06-01T13:04:51.000Z",
                "created": "2026-01-05T13:34:02.000Z",
                "remixes": 0,
                "favorites": 2989,
                "description": "If Griffpatch's entire life was a movie... This is a tr
…(truncated, see openapi.json for full schema)
```

#### `GET /v1/followers` — The Scratchers who follow a user

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

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

**Response:**
```json
{
    "data": {
        "count": 20,
        "username": "griffpatch",
        "followers": [
            {
                "id": 173876040,
                "image": "https://cdn2.scratch.mit.edu/get_image/user/173876040_90x90.png?v=",
                "joined": "2026-06-13T13:56:33.000Z",
                "country": "Japan",
                "username": "mosimosiminnna1220",
                "profile_url": "https://scratch.mit.edu/users/mosimosiminnna1220"
            },
            {
                "id": 171801184,
                "image": "https://cdn2.scratch.mit.edu/get_image/user/171801184_90x90.png?v=",
                "joined": "2026-04-30T23:37:05.000Z",
                "country": "Singapore",
                "username": "meteorppel",
                "profile_url": "https://scratch.mit.edu/users/meteorppel"
            },
            {
                "id": 172216843,
                "image": "https://cdn2.scratch.mit.edu/get_image/user/172216843_90x90.png?v=",
                "joined": "2026-05-09T02:15:41.000Z",
                "country": "United States",
                "username": "someOLOGY",
                "profile_url": "https://scratch.mit.edu/users/someOLOGY"
            },
            {
                "id": 173869118,
                "image": "https://cdn2.scratch.mit.edu/get_image/user/173869118_90x90.png?v=",
                "joined": "2026-06-13T03:36:58.000Z",
                "country": "Hong Kong",
                "username": "NON-GEO",
                
…(truncated, see openapi.json for full schema)
```

### Community

#### `GET /v1/explore` — The community discovery feed

**Parameters:**
- `mode` (query, optional, string) — trending (default), popular or recent Example: `trending`
- `q` (query, optional, string) — Optional keyword (default any) Example: `*`
- `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/explore?mode=trending&q=%2A&limit=20"
```

**Response:**
```json
{
    "data": {
        "mode": "trending",
        "count": 11,
        "projects": [
            {
                "id": 275307007,
                "url": "https://scratch.mit.edu/projects/275307007",
                "image": "https://cdn2.scratch.mit.edu/get_image/project/275307007_480x360.png",
                "loves": 3068,
                "title": "Scratch Monopoly - The Scratch Edition!",
                "views": 24008,
                "author": "PrinceMatthew9998",
                "shared": "2019-01-15T16:12:19.000Z",
                "created": "2018-12-28T19:03:21.000Z",
                "remixes": 0,
                "favorites": 2777,
                "description": "✰ Welcome to Scratchnopoly! ✰ (Scratch Monopoly) I've haven't been able to comment due to Scratch 3.0 lagging my project and making it crash! Sorry! When Scratch 3.0 fixes my project, I will be creating a much faster version, which includes balance changes and bug fixes! Give me suggestions on what ",
                "instructions": null
            },
            {
                "id": 434926168,
                "url": "https://scratch.mit.edu/projects/434926168",
                "image": "https://cdn2.scratch.mit.edu/get_image/project/434926168_480x360.png",
                "loves": 108,
                "title": "In The Laboratory || #all #tutorials #art",
                "views": 6220,
                "author": "-mushr00mz-",
                "shared": "2020-10-30T20:50:33.000Z",
                "c
…(truncated, see openapi.json for full schema)
```


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