Tes API endpoint
Returns detail for one teaching-resources author/seller shop by its username (from tes-resource-search/tes-resource-detail's author field, or the trailing path segment of author_url): display name, average rating, upload/view/download counts, a bio, and a page of that author's resource listing (id, title, price, thumbnail -- call tes-resource-detail with each id for subject/age-range/resource-type/rating/description). subject narrows the listing to one of the subject tabs shown on the shop's own page; these vary per author and are not a curated enum.
/tes/resources/shopQuery parameters:
username (required): a Tes author username, e.g. jenpower16.subject (optional): narrows the listing to one of the subject tabs shown on the shop's own page (e.g. Whole school). These vary per author, so this is not a curated enum -- an unrecognized value returns an empty (not erroring) listing.page (optional, default 1, 1-500): one-based page.Notable response behavior:
404.rating/rating_count are the shop's overall average and review count across every resource, not one resource's.uploads/views/downloads are Tes's own abbreviated stat display (e.g. 188k+) resolved to a whole-number lower bound, since the exact figure past the abbreviation threshold isn't shown.resources[].price is 0 and resources[].free is true for free resources. Only GBP is currently supported (the shop page has no currency/market selector, unlike resource search/detail).| Field | Filled in, of 21 checked | Values in the sample |
|---|---|---|
| id | 21 | |
| title | 21 | “ShREC - Adult Prompt Sheets for Continuous Provision” and 20 other values |
| url | 21 | tes.com |
| price | 21 | 1.25 to 22, median 1.75 |
| currency | 21 | GBP in all 21 |
| free | 21 | true in 0 of 21 |
| thumbnail_url | 21 | d1e4pidl3fu268.cloudfront.net |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| username | string | Yes | Tes author username | jenpower16 | |
| subject | string | No | Subject tab to filter the listing to -- see the shop's own page for the current set | Whole school | |
| page | integer | No | One-based page Minimum: 1. Maximum: 500. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/tes/resources/shop?username=jenpower16&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"username": "jenpower16",
"name": "EYFS_Mrs_P",
"url": "https://www.tes.com/teaching-resources/shop/jenpower16",
"avatar_url": "https://d2w4qhtqw2dbsq.cloudfront.net/profile_live/12345/large.jpg",
"bio": "Welcome to my TES shop! I'm Mrs P, a Reception teacher.",
"rating": 4.44,
"rating_count": 10,
"uploads": 459,
"views": 188000,
"downloads": 86000,
"page": 1,
"resources": [
{
"id": "13305182",
"title": "Reception Baseline I Can Statements & Pen Grip",
"url": "https://www.tes.com/teaching-resource/reception-baseline-i-can-statements-and-pen-grip-13305182",
"price": 3,
"currency": "GBP",
"free": false,
"thumbnail_url": "https://d1e4pidl3fu268.cloudfront.net/example/one.png"
}
]
}
}Request schema
No body schema
Response schema
#/definitions/tes.resourceShopResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | tes.ResourceShop | No | ||||
| data.avatar_url | string | No | ||||
| data.bio | string | No | ||||
| data.downloads | integer | No | ||||
| data.name | string | No | ||||
| data.page | integer | No | ||||
| data.rating | number | No | ||||
| data.rating_count | integer | No | ||||
| data.resources | array | No | ||||
| data.resources[].currency | string | No | ||||
| data.resources[].free | boolean | No | ||||
| data.resources[].id | string | No | ||||
| data.resources[].price | number | No | ||||
| data.resources[].thumbnail_url | string | No | ||||
| data.resources[].title | string | No | ||||
| data.resources[].url | string | No | ||||
| data.uploads | integer | No | ||||
| data.url | string | No | ||||
| data.username | string | No | ||||
| data.views | integer | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/tes/resources/shop?username=jenpower16&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"