---
title: "Search Tes teaching resources"
method: GET
path: "/tes/resources/search"
tags: ["Tes"]
---

# Search Tes teaching resources

`GET /tes/resources/search`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/tes/resources/search`
- Auth: API key in header `x-api-key`

Searches Tes's (tes.com) teaching-resources marketplace. Returns listing facts (title, author, price, rating, downloads) -- not full listing descriptions. query is optional: omit it (alone, or combined with key_stage/subject/on_sale) for pure filter-driven or fully unfiltered browsing. sort mirrors the real search page's own Sort by dropdown; key_stage and subject mirror its left-hand Refine by filters (both closed, validated enums taken from Tes's own facet taxonomy, and always resolved against Tes's own single GB-taxonomy regardless of country). country controls result currency/localisation only (confirmed live for all seven values); it does not change which key_stage/subject values are valid.

## Query parameters

- `query` string
- `country` 'GB' | 'US' | 'AU' | 'IE' | 'CA' | 'NZ' | 'UN'
- `page` integer
- `page_size` integer
- `sort` 'relevance' | 'newest' | 'highest_rated' | 'lowest_price'
- `key_stage` '3-5' | '5-7' | '7-11' | '11-14' | '14-16' | '16+' | 'age_not_applicable'
- `subject` ''
- `on_sale` boolean

## Headers

- `x-api-key` string, required

## Response `200`

OK

- TesResourceSearchResponseDoc
  - `code` integer
  - `data` TesResourceSearchResponse
    - `country` string
    - `page` integer
    - `page_size` integer
    - `query` string
    - `resources` TesResourceSummary[]
      - `author` string
      - `bundle_original_price` number
      - `bundle_resource_count` integer
      - `currency` string
      - `downloads` integer
      - `file_types` string[]
      - `first_published` string
      - `free` boolean
      - `id` string
      - `is_bundle` boolean: IsBundle marks a listing that packages multiple resources under one price, tes.com's own "Bundle" badge. BundleResourceCount and BundleOriginalPrice are only meaningful when IsBundle is true.
      - `last_published` string
      - `license` string: License is Tes's own short licence code -- one of "Paid", "CC-BY-SA", "CC-BY-ND", "CC-BY" (its licence facet's own values, confirmed live 2026-09-04).
      - `on_sale` boolean
      - `price` number
      - `rating` number
      - `rating_count` integer
      - `resource_types` string[]
      - `thumbnail_url` string
      - `title` string
      - `url` string
    - `total` integer
  - `msg` string

## Other responses

- `400`: Bad Request
- `429`: Too Many Requests
- `503`: Service Unavailable

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/afac9b012a27?raw)
