The Skillyard agent API

Skillyard has an open API for AI assistants, agents and developers. It searches the directory by subject, place, delivery format and funding, and returns structured listing data, so an agent does not have to fetch pages and hope the parse holds.

There is no key and nothing to install. Every endpoint is a plain web address that returns JSON, so any assistant that can fetch a page can use it. This page sets out how it works, what it returns, what it withholds and why.

Start here

Begin with the taxonomy. It lists every category and sub-category with its slug and description, the regions, formats and funding values, and the difference between training and coaching. Every value carries a ready-made search link and a count of providers. Each category also lists everyday words buyers use for it, and the categories it overlaps with:

https://skillyard.co.uk/api/v1/taxonomy

Three searches to try:

The endpoints

  • GET /api/v1/taxonomy: every value the search accepts, with links and counts.
  • GET /api/v1/providers: the search. Filters combine, and each result says why it matched.
  • GET /api/v1/providers/{slug}: one provider in full, with courses, accreditations, pricing, website and social links.
  • GET /api/v1/openapi.json: the formal OpenAPI 3.1 description of all three.

Querying it

Parameters are structured rather than free text. The calling agent turns the buyer's words into categories, places and formats, using the taxonomy, and the search matches those exactly. That keeps a language model out of the server path, and it puts the reading of the request where it is done best.

There is deliberately no free-text search parameter. A broad word such as leadership turns up in the descriptions of many providers for whom it is not the subject, so a word match is a poor stand-in for a subject. Broad subjects are matched by the categories and sub-categories a provider has chosen, and the keyword parameter is kept for specific named things.

category
A category slug from the taxonomy, such as leadership-management.
sub_category
A sub-category slug from the taxonomy, such as first-time-manager.
offers
training or coaching, within the chosen category or the parent category of the chosen sub-category. Without either, it applies across all of a provider's categories. Training means planned courses with a set running order. Coaching has no set content, and mentoring counts as coaching.
town
A UK town or city by its usual name, such as Bristol or Stoke-on-Trent. Short forms such as Newcastle are understood.
region
A region slug, such as south-west. Use town or region, not both.
format
A delivery format slug: in-person, online, onsite, bespoke or e-learning.
funding
A funding slug: subsidised, apprenticeship or free.
keyword
A specific named thing, such as NEBOSH, PRINCE2 or Xero, matched against the text of each listing.
page
Page number, from 1 to 50. Twenty results a page.

Place behaves unlike the others. Skillyard records where a trainer is based separately from the areas they cover, and the API keeps that split. With a town or region, results come in two groups, providers based there first and then those who cover it, and each result is tagged with which. An agent shortlisting a first aid trainer for a Bristol office can tell a Bristol business apart from a national provider and weigh that however the buyer wants.

No other directory hands an agent that distinction, because most do not record it. It exists here because burying a local trainer under national providers with bigger footprints is the failure mode Skillyard was built to avoid.

Links to follow

Some assistants can only open an address that has already appeared in front of them, so they cannot build a query string for themselves. Every response therefore carries, fully formed, the next addresses an agent might want. These include the next page, each provider's full record and the same search without the place. Responses also offer ways to narrow the results by region, sub-category, training or coaching and format, each with a count. Where a search names a category, they point to the same search in any category that overlaps with it, such as Coaching & Mentoring beside Leadership & Management.

Narrowing is offered only while a search has two filters or fewer, and only where it would change the results. That keeps the set of addresses small enough that no crawler can wander through every combination.

What comes back

A provider's full record carries the public listing: name, tagline, descriptions and specialism, categories with what the provider offers in each and the sub-categories ticked under them, the town it is based in with its county and region, the regions and towns it covers, delivery formats, funding options, accreditations, pricing, courses, logo, its own website and social links, its Companies House number where it trades as a registered company, the dates the listing was last verified and last confirmed as active and the address of the listing page.

Responses are built from an explicit list of public fields, rather than by taking the stored record and removing a few columns, so nothing escapes by default. A listing record holds internal working data that has no business on a public page, and subtracting known fields would leak whatever is left and whatever is added later. API responses do not include the internal database id. The slug is the handle for a listing.

Contact details

Email addresses and phone numbers are not returned by the API. Every listing page shows them, and each result links to its listing page and the trainer's own website, so a buyer is one click from contacting the trainer directly.

Most directories strip contact details to force the buyer back through the platform, where the introduction can be captured and charged for. Skillyard takes no commission and brokers no leads. A trainer pays a flat fee for presence, not for an introduction routed through us, so there is no click for us to protect. If an agent surfaces a listing and the buyer goes straight to the trainer's own website, that is the system working.

They are left out because an open endpoint that returned them would be an easy way to build a spam list. The page markup does the same, publishing a trainer's website and socials but keeping email and phone out of the structured data.

Ordering

Results come back in the same order the site uses: providers based in the place first, then those covering it, and within each group an order that is redrawn once a day. Every trainer takes a turn near the top and position cannot be bought. There is no paid placement, no promoted tier and no ranking input an advertiser could reach.

The response says so itself, in a field carried alongside the results. Fairness stated only on a policy page is a claim a consuming agent never sees. Carried in the payload, it travels to the point where the data is used.

A response

A search for leadership in Bristol, trimmed to one result and one narrowing list. The listing is invented.

{
  "about": "Skillyard's structured search for AI assistants and developers. ...",
  "ordering": "Results are in a daily shuffle, the same order the site uses. Position cannot be bought: there is no paid placement and no promoted tier.",
  "query": {
    "category": { "slug": "leadership-management", "name": "Leadership & Management" },
    "offers": null,
    "place": { "kind": "town", "name": "Bristol", "recognised": true }
  },
  "notes": [],
  "counts": { "total": 24, "based_in": 4, "covering": 20 },
  "pagination": {
    "page": 1, "per_page": 20, "total_pages": 2,
    "next": "https://skillyard.co.uk/api/v1/providers?category=leadership-management&town=Bristol&page=2",
    "previous": null
  },
  "results": [
    {
      "slug": "tamsin-reid-leadership",
      "business_name": "Tamsin Reid Leadership",
      "tagline": "Practical leadership development for growing teams",
      "matched_because": [
        "Listed under Leadership & Management (its main subject)",
        "Based in Bristol"
      ],
      "relation_to_place": "based_in",
      "offers": ["training", "coaching"],
      "main_subject": "Leadership & Management",
      "categories": ["Leadership & Management", "Coaching & Mentoring"],
      "based_in": { "town": "Bristol", "region": "South West" },
      "coverage": { "nationwide": false, "regions": ["South West", "Wales"], "towns": ["Bath", "Swindon", "Cardiff"] },
      "formats": ["In-person", "Online"],
      "funding": [],
      "verified_on": "2026-09-14",
      "active_as_of": "2026-09-14",
      "listing_page": "https://skillyard.co.uk/listings/tamsin-reid-leadership",
      "full_record": "https://skillyard.co.uk/api/v1/providers/tamsin-reid-leadership"
    }
  ],
  "narrow": {
    "by_offers": [
      { "value": "coaching", "count": 15, "link": "https://skillyard.co.uk/api/v1/providers?category=leadership-management&offers=coaching&town=Bristol" }
    ]
  },
  "wider": {
    "without_place": { "count": 31, "link": "https://skillyard.co.uk/api/v1/providers?category=leadership-management" }
  },
  "see_also": [
    { "slug": "coaching-mentoring", "name": "Coaching & Mentoring", "count": 18, "link": "https://skillyard.co.uk/api/v1/providers?category=coaching-mentoring&town=Bristol" }
  ]
}

Access, limits and the open door

There is no API key. An agent working through a task cannot fill in a registration form, and requiring one would put a person in the middle of the journey the API exists to serve. What makes an open door safe is that it holds nothing worth taking: every field returned is already public, and the fields that would attract abuse are not served.

Results come twenty to a page, up to fifty pages, so the whole index cannot be pulled in one call. Rate limiting is generous, per address and per minute, and returns a plain 429 with no lasting block, because agents often share one cloud address across many users and locking it out would take the rest with it. The limit is hygiene rather than security: a scraper could already crawl the pages.

Responses are cached for up to an hour, so a listing changed in the last hour may lag slightly. Every response is marked noindex, since it is data for agents rather than a page for search results. A request the API cannot answer gets a plain-English explanation and a link back to the taxonomy, where the valid values are listed.

How agents find it

Agents look in different places, so the API is announced in several:

  • llms.txt, with the taxonomy and worked examples near the top.
  • An Agentic Resource Discovery manifest at /.well-known/ard.json, and at its earlier name, /.well-known/ai-catalog.json.
  • An API catalogue at /.well-known/api-catalog, following RFC 9727.
  • On every category, region, format and listing page, a visible line giving that page's address in the API, repeated as a link in the page head and as an HTTP Link header.

MCP

An MCP server will follow, over the same code as the REST endpoints, with the same fields, the same ordering and the same limits. Nothing about the data changes with the transport. What changes is that an assistant can discover and use it as a tool without a developer writing an integration first.

Tell us what you need

If you are building on Skillyard and something is missing, get in touch through the contact page and tell us what you need. Knowing what people want to query for shapes what comes next.

This is version 1 of the API, documented on 9 October 2026 and last updated on 15 October 2026. Changes that would break an integration will come under a new version number.