---
title: Developer & agent documentation — Este Training Academy
description: Public read-only JSON API, OpenAPI spec, agent manifests and markdown mirrors published by Este Training Academy.
canonical: https://www.estetrainingacademy.com/developers
updated: 2026-02-16
language: en-GB
---

# Developer & agent documentation

Este Training Academy publishes its course catalogue as open, read-only JSON so search
engines, AI assistants and integrators can answer questions about our training accurately.

- **Base URL:** `https://www.estetrainingacademy.com`
- **Auth:** none — see [/auth.md](/auth.md)
- **Format:** JSON (UTF-8); markdown mirrors for every key page
- **Spec:** [/openapi.json](/openapi.json) (OpenAPI 3.1)
- **Cost:** free, no key, no signup — see [/pricing.md](/pricing.md)

## Endpoints

| Method | Path | Returns |
| --- | --- | --- |
| GET | [`/api/organization.json`](/api/organization.json) | Organisation profile, accreditations, contact, pricing model |
| GET | [`/api/courses.json`](/api/courses.json) | All 15 courses: slug, title, level, duration, categories, locations, summary, url |
| GET | [`/api/categories.json`](/api/categories.json) | The 6 course categories |

Versioned aliases are published under `/api/v1/` and will keep responding with the v1 shape:
[`/api/v1/organization.json`](/api/v1/organization.json),
[`/api/v1/courses.json`](/api/v1/courses.json),
[`/api/v1/categories.json`](/api/v1/categories.json).

### Example

```bash
curl -s https://www.estetrainingacademy.com/api/courses.json | jq '.courses[] | select(.level == "Advanced") | .title'
```

```json
{
  "slug": "pdo-thread-course",
  "title": "PDO Thread Course - 1 Day Workshop",
  "level": "Advanced",
  "duration": "1-day course",
  "categories": ["aesthetics", "medical-injectable"],
  "locations": ["Birmingham"],
  "url": "https://www.estetrainingacademy.com/course/pdo-thread-course"
}
```

## Versioning and deprecation policy

- The catalogue shape is versioned in the path: `/api/v1/`. Unversioned paths always mirror
  the current version.
- Additive changes (new optional fields) can happen at any time and are not breaking.
- Breaking changes get a new version prefix. The previous version stays available for at
  least 6 months after the replacement is published, and the retirement date is announced
  here and in [/llms.txt](/llms.txt).
- `version` and `updated` fields in every payload tell you what you are reading.

## Agent manifests

| Resource | Path |
| --- | --- |
| llms.txt index | [/llms.txt](/llms.txt) |
| Full knowledge base | [/llms-full.txt](/llms-full.txt) |
| Agent instructions | [/agents.md](/agents.md) |
| Authentication | [/auth.md](/auth.md) |
| Pricing | [/pricing.md](/pricing.md) |
| AI resource descriptor | [/.well-known/ard.json](/.well-known/ard.json) |
| AI catalog | [/.well-known/ai-catalog.json](/.well-known/ai-catalog.json) |
| A2A agent card | [/.well-known/agent-card.json](/.well-known/agent-card.json) |
| Agent skills | [/.well-known/agent-skills.json](/.well-known/agent-skills.json) |
| MCP manifest | [/.well-known/mcp.json](/.well-known/mcp.json) |
| MCP server card | [/.well-known/mcp/server-card.json](/.well-known/mcp/server-card.json) |
| API catalog (RFC 9727) | [/.well-known/api-catalog](/.well-known/api-catalog) |

## Markdown mirrors

Every key page has a markdown twin for token-efficient reading:
[/index.md](/index.md), [/courses.md](/courses.md), [/about.md](/about.md),
[/contact.md](/contact.md), [/pricing.md](/pricing.md), [/developers.md](/developers.md).

## In-page tools (WebMCP)

When a browsing agent loads the site, we register WebMCP tools on
`navigator.modelContext`: `search_courses`, `get_course`, `recommend_course` and
`start_enquiry`. The enquiry form also carries `tool-name` and `tool-description`
attributes so an agent can target it directly.

## Support

Questions about the data: use the [enquiry form](/contact) or call +44 121 468 6435.
