TapColor Developer API
Browse TapColor coloring categories and collections over a simple REST API. Data is returned as JSON at the collection level. Authenticate with an api-key issued by TapColor.
Base URL
Authentication
Every request must include the api-key header. Requests without a valid key return
401. Keys can be revoked at any time.
Official SDKs
Prefer a typed client over raw HTTP? Use the official library β zero dependencies, with full TypeScript types and auto-pagination.
JavaScript / TypeScript
import { TapColor } from "@tapcolorapp/api";
const tc = new TapColor({ apiKey: "YOUR_API_KEY" });
const { items } = await tc.coloringPages({ category: "animals", limit: 20 });
items.forEach((c) => console.log(c.subtopic, c.url));
// Or iterate EVERY collection, auto-paginated:
for await (const c of tc.allColoringPages({ category: "animals" })) {
console.log(c.subtopicSlug);
}
npm β Β· JSR β Β· works in Node 18+, Deno, Bun & modern browsers.
Try it live
Run a real request straight from your browser β no setup. Paste an api-key, pick an endpoint, and hit Run.
Rate limits & errors
- Rate limit: 120 requests per 10 minutes per key β exceeding it returns
429. 401β missing / invalidapi-key, or the key has been revoked.404β endpoint not found.- All responses are UTF-8 JSON; errors look like
{ "error": "..." }.
List collections
Returns a list of collections with filtering, search and pagination.
Query parameters
| Parameter | Type | Description | |
|---|---|---|---|
category | string | optional | Category slug (e.g. animals, disney). Omit for all categories. |
q | string | optional | Search collection names (partial match, case-insensitive). |
limit | integer | optional | Number of items to return, 1β100. Defaults to 20. |
offset | integer | optional | Skip the first N items for pagination. Defaults to 0. |
Example request
curl "https://api.tapcolor.app/v1/coloring-pages?category=animals&limit=20" \
-H "api-key: YOUR_API_KEY"
import requests
resp = requests.get(
"https://api.tapcolor.app/v1/coloring-pages",
params={"category": "animals", "limit": 20},
headers={"api-key": "YOUR_API_KEY"},
)
data = resp.json()
print(data["total"], "collections")
for item in data["items"]:
print(item["subtopic"], "->", item["url"])
const res = await fetch(
"https://api.tapcolor.app/v1/coloring-pages?category=animals&limit=20",
{ headers: { "api-key": "YOUR_API_KEY" } }
);
const data = await res.json();
console.log(data.total, "collections");
data.items.forEach((it) => console.log(it.subtopic, it.url));
Example response
{
"total": 95,
"limit": 20,
"offset": 0,
"count": 20,
"items": [
{
"category": "Animals",
"categorySlug": "animals",
"subtopic": "Arctic Animals",
"subtopicSlug": "arctic-animals",
"count": 35,
"url": "https://tapcolor.app/coloring-pages/animals/arctic-animals/",
"image": "https://img.tapcolor.app/images/animals/arctic-animals/seal.jpg"
}
]
}
Response fields
| Field | Type | Description |
|---|---|---|
total | integer | Total collections matching the filter (before pagination). |
limit | integer | Page size actually applied (1β100). |
offset | integer | Number of items skipped. |
count | integer | Number of items in items for this page. |
items[] | array | Collection objects β fields below. |
items[].category | string | Human-readable category name (e.g. Animals). |
items[].categorySlug | string | Category slug β use it in the category filter. |
items[].subtopic | string | Collection (subtopic) name. |
items[].subtopicSlug | string | Collection slug used in url. |
items[].count | integer | Number of coloring pages in the collection. |
items[].url | string (uri) | Public collection page on tapcolor.app. |
items[].image | string (uri) Β· null | Cover thumbnail URL. May be null when no cover is set. |
Pagination
Page through results with limit + offset; stop once
offset + count β₯ total.
offset = 0
while True:
r = requests.get(URL, params={"category": "animals", "limit": 100, "offset": offset},
headers={"api-key": KEY}).json()
for item in r["items"]:
... # process each collection
offset += r["count"]
if offset >= r["total"]:
break
List categories
Returns all 25 categories with the number of collections and pages in each.
Example request
curl "https://api.tapcolor.app/v1/categories" \
-H "api-key: YOUR_API_KEY"
import requests
resp = requests.get(
"https://api.tapcolor.app/v1/categories",
headers={"api-key": "YOUR_API_KEY"},
)
for c in resp.json()["items"]:
print(c["slug"], "->", c["pages"], "pages")
const res = await fetch(
"https://api.tapcolor.app/v1/categories",
{ headers: { "api-key": "YOUR_API_KEY" } }
);
const data = await res.json();
data.items.forEach((c) => console.log(c.slug, c.pages));
Example response
{
"total": 25,
"items": [
{
"name": "Animals",
"slug": "animals",
"subtopics": 95,
"pages": 3324,
"url": "https://tapcolor.app/coloring-pages/animals/"
}
]
}
Response fields
| Field | Type | Description |
|---|---|---|
total | integer | Number of categories (always 25). |
items[].name | string | Human-readable category name. |
items[].slug | string | Category slug β use it in the category filter. |
items[].subtopics | integer | Number of collections in the category. |
items[].pages | integer | Total coloring pages across the category. |
items[].url | string (uri) | Public category page on tapcolor.app. |
Category slugs
All 25 valid values for the category parameter, straight from the live catalog.
| Slug | Category | Collections | Pages |
|---|---|---|---|
animals | Animals | 95 | 3,324 |
disney | Disney | 88 | 2,459 |
video-games | Video Games | 89 | 2,316 |
for-girls | For Girls | 62 | 2,313 |
kids-tv-shows | Kids TV Shows | 84 | 1,991 |
halloween | Halloween | 45 | 1,559 |
for-boys | For Boys | 47 | 1,451 |
for-adults | For Adults | 40 | 1,252 |
christmas | Christmas | 33 | 1,135 |
superheroes | Superheroes | 38 | 949 |
kids-movies | Kids Movies | 25 | 638 |
fall | Fall | 11 | 515 |
dinosaurs | Dinosaurs | 17 | 439 |
kawaii | Kawaii | 16 | 414 |
unicorns | Unicorns | 8 | 353 |
food | Food | 9 | 310 |
back-to-school | Back To School | 10 | 289 |
holidays | Holidays | 6 | 258 |
easter | Easter | 8 | 243 |
for-toddlers | For Toddlers | 5 | 211 |
race-car | race car | 8 | 187 |
religious | Religious | 3 | 177 |
princesses | Princesses | 5 | 116 |
summer | Summer | 3 | 115 |
community-helpers | community helpers | 3 | 83 |