---
title: "Get a Tes teaching resource"
method: GET
path: "/tes/resources/detail"
tags: ["Tes"]
---

# Get a Tes teaching resource

`GET /tes/resources/detail`

## Request

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

Returns detail for one teaching resource by its numeric id (the id field returned by tes-resource-search). Descriptive facts (title, subject, age range, resource type, author, price, rating, licence label), a per-file attachment list (file type, size, and a preview thumbnail -- metadata only), and the most recent page of reviews are returned -- not the downloadable resource file itself.

## Query parameters

- `id` string, required
- `country` 'GB' | 'US' | 'AU' | 'IE' | 'CA' | 'NZ' | 'UN'

## Headers

- `x-api-key` string, required

## Response `200`

OK

- TesResourceDetailResponseDoc
  - `code` integer
  - `data` TesResourceDetail
    - `age_range` string
    - `attachments` TesResourceAttachment[]: Attachments lists each downloadable file's own type/size and a preview thumbnail -- metadata only (the file itself is never fetched; robots.txt disallows /teaching-resource/download/ regardless).
      - `file_type` string
      - `preview_image_url` string
      - `size` string
    - `author` string
    - `author_url` string
    - `currency` string
    - `description` string
    - `free` boolean
    - `id` string
    - `license` string: License is the resource's own licence label as Tes's detail page itself displays it (e.g. "Tes paid licence", `Creative Commons "Sharealike"`) -- a longer display string than ResourceSummary.License's short facet code, since the detail page has no equivalent short-code field to read.
    - `price` number
    - `rating` number
    - `rating_count` integer
    - `resource_type` string
    - `reviews` TesResourceReview[]: Reviews is the most recent page of reviews (the same page the pricing/reviews JSON endpoint returns by default -- see rawResourcePricing's doc comment). RatingCount is the true total across every review, not just len(Reviews).
      - `author` string
      - `author_url` string
      - `comment` string
      - `id` string
      - `posted` string
      - `rating` number
    - `subject` string
    - `thumbnail_url` string
    - `title` string
    - `url` string
  - `msg` string

## Other responses

- `400`: Bad Request
- `404`: Not Found
- `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/0497899e2016?raw)
