{
    "openapi": "3.0.3",
    "info": {
        "title": "Terrier Agency Content API",
        "description": "Read-only JSON API for terrieragency.com content: blog posts, pages, case studies, team, services, locations and sectors. This is the site's WordPress REST API \u2014 standard wp/v2 semantics apply. No authentication is required for the read operations documented here; write operations and user endpoints are not offered publicly (the /wp/v2/users collection intentionally returns 401). No formal rate limit is published \u2014 make sequential, cached requests and identify your agent in the User-Agent header. Errors are structured JSON (see the Error schema).",
        "version": "1.0.0",
        "contact": {
            "name": "Terrier Agency",
            "email": "hello@terrieragency.com",
            "url": "https://www.terrieragency.com/developers/"
        }
    },
    "externalDocs": {
        "description": "Terrier Agency Developer & Agent Resources",
        "url": "https://www.terrieragency.com/developers/"
    },
    "servers": [
        {
            "url": "https://www.terrieragency.com/wp-json",
            "description": "Production"
        }
    ],
    "tags": [
        {
            "name": "Blog posts",
            "description": "Articles on SEO, GEO and influencer marketing."
        },
        {
            "name": "Pages",
            "description": "Site pages."
        },
        {
            "name": "Case studies",
            "description": "Client campaign case studies."
        },
        {
            "name": "Team members",
            "description": "Agency team profiles."
        },
        {
            "name": "Services",
            "description": "Service pages."
        },
        {
            "name": "Locations",
            "description": "Office and market pages."
        },
        {
            "name": "Sector pages",
            "description": "Industry experience pages."
        },
        {
            "name": "Search",
            "description": "Cross-content search."
        },
        {
            "name": "Taxonomies",
            "description": "Categories and tags."
        }
    ],
    "paths": {
        "/wp/v2/posts": {
            "get": {
                "operationId": "listBlogPosts",
                "summary": "List Blog posts",
                "description": "Published blog posts on SEO, GEO (generative engine optimisation) and influencer marketing. Returns a paginated collection, newest first by default. Totals are exposed in the X-WP-Total and X-WP-TotalPages response headers.",
                "tags": [
                    "Blog posts"
                ],
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Maximum number of items to return (1\u2013100).",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 10
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Page of the collection (1-based). Total pages are exposed in the X-WP-TotalPages response header.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "Limit results to those matching a search term.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "slug",
                        "in": "query",
                        "description": "Limit results to items with one or more specific slugs (comma-separated).",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "description": "Field to sort the collection by.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "date",
                                "id",
                                "title",
                                "slug",
                                "modified"
                            ],
                            "default": "date"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "description": "Sort direction.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ],
                            "default": "desc"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A JSON array of blog posts.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    }
                }
            }
        },
        "/wp/v2/posts/{id}": {
            "get": {
                "operationId": "getPost",
                "summary": "Get a single blog post by ID",
                "description": "Retrieve one blog post by its numeric ID. IDs come from the list endpoint.",
                "tags": [
                    "Blog posts"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Unique numeric identifier of the blog post.",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The requested blog post.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    }
                }
            }
        },
        "/wp/v2/pages": {
            "get": {
                "operationId": "listPages",
                "summary": "List Pages",
                "description": "Published site pages (services, about, contact, locations hubs). Returns a paginated collection, newest first by default. Totals are exposed in the X-WP-Total and X-WP-TotalPages response headers.",
                "tags": [
                    "Pages"
                ],
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Maximum number of items to return (1\u2013100).",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 10
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Page of the collection (1-based). Total pages are exposed in the X-WP-TotalPages response header.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "Limit results to those matching a search term.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "slug",
                        "in": "query",
                        "description": "Limit results to items with one or more specific slugs (comma-separated).",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "description": "Field to sort the collection by.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "date",
                                "id",
                                "title",
                                "slug",
                                "modified"
                            ],
                            "default": "date"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "description": "Sort direction.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ],
                            "default": "desc"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A JSON array of pages.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    }
                }
            }
        },
        "/wp/v2/pages/{id}": {
            "get": {
                "operationId": "getPage",
                "summary": "Get a single page by ID",
                "description": "Retrieve one page by its numeric ID. IDs come from the list endpoint.",
                "tags": [
                    "Pages"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Unique numeric identifier of the page.",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The requested page.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    }
                }
            }
        },
        "/wp/v2/case_study": {
            "get": {
                "operationId": "listCaseStudies",
                "summary": "List Case studies",
                "description": "Published client case studies across SEO, GEO and influencer marketing campaigns. Returns a paginated collection, newest first by default. Totals are exposed in the X-WP-Total and X-WP-TotalPages response headers.",
                "tags": [
                    "Case studies"
                ],
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Maximum number of items to return (1\u2013100).",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 10
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Page of the collection (1-based). Total pages are exposed in the X-WP-TotalPages response header.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "Limit results to those matching a search term.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "slug",
                        "in": "query",
                        "description": "Limit results to items with one or more specific slugs (comma-separated).",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "description": "Field to sort the collection by.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "date",
                                "id",
                                "title",
                                "slug",
                                "modified"
                            ],
                            "default": "date"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "description": "Sort direction.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ],
                            "default": "desc"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A JSON array of case studies.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    }
                }
            }
        },
        "/wp/v2/case_study/{id}": {
            "get": {
                "operationId": "getCaseStudy",
                "summary": "Get a single case study by ID",
                "description": "Retrieve one case study by its numeric ID. IDs come from the list endpoint.",
                "tags": [
                    "Case studies"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Unique numeric identifier of the case study.",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The requested case study.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    }
                }
            }
        },
        "/wp/v2/team_member": {
            "get": {
                "operationId": "listTeamMembers",
                "summary": "List Team members",
                "description": "Terrier Agency team member profiles. Returns a paginated collection, newest first by default. Totals are exposed in the X-WP-Total and X-WP-TotalPages response headers.",
                "tags": [
                    "Team members"
                ],
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Maximum number of items to return (1\u2013100).",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 10
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Page of the collection (1-based). Total pages are exposed in the X-WP-TotalPages response header.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "Limit results to those matching a search term.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "slug",
                        "in": "query",
                        "description": "Limit results to items with one or more specific slugs (comma-separated).",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "description": "Field to sort the collection by.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "date",
                                "id",
                                "title",
                                "slug",
                                "modified"
                            ],
                            "default": "date"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "description": "Sort direction.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ],
                            "default": "desc"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A JSON array of team members.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    }
                }
            }
        },
        "/wp/v2/team_member/{id}": {
            "get": {
                "operationId": "getTeamMember",
                "summary": "Get a single team member by ID",
                "description": "Retrieve one team member by its numeric ID. IDs come from the list endpoint.",
                "tags": [
                    "Team members"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Unique numeric identifier of the team member.",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The requested team member.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    }
                }
            }
        },
        "/wp/v2/service": {
            "get": {
                "operationId": "listServices",
                "summary": "List Services",
                "description": "Service pages (SEO, GEO, influencer marketing and supporting services). Returns a paginated collection, newest first by default. Totals are exposed in the X-WP-Total and X-WP-TotalPages response headers.",
                "tags": [
                    "Services"
                ],
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Maximum number of items to return (1\u2013100).",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 10
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Page of the collection (1-based). Total pages are exposed in the X-WP-TotalPages response header.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "Limit results to those matching a search term.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "slug",
                        "in": "query",
                        "description": "Limit results to items with one or more specific slugs (comma-separated).",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "description": "Field to sort the collection by.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "date",
                                "id",
                                "title",
                                "slug",
                                "modified"
                            ],
                            "default": "date"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "description": "Sort direction.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ],
                            "default": "desc"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A JSON array of services.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    }
                }
            }
        },
        "/wp/v2/service/{id}": {
            "get": {
                "operationId": "getService",
                "summary": "Get a single service by ID",
                "description": "Retrieve one service by its numeric ID. IDs come from the list endpoint.",
                "tags": [
                    "Services"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Unique numeric identifier of the service.",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The requested service.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    }
                }
            }
        },
        "/wp/v2/location": {
            "get": {
                "operationId": "listLocations",
                "summary": "List Locations",
                "description": "Office and market location pages. Returns a paginated collection, newest first by default. Totals are exposed in the X-WP-Total and X-WP-TotalPages response headers.",
                "tags": [
                    "Locations"
                ],
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Maximum number of items to return (1\u2013100).",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 10
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Page of the collection (1-based). Total pages are exposed in the X-WP-TotalPages response header.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "Limit results to those matching a search term.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "slug",
                        "in": "query",
                        "description": "Limit results to items with one or more specific slugs (comma-separated).",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "description": "Field to sort the collection by.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "date",
                                "id",
                                "title",
                                "slug",
                                "modified"
                            ],
                            "default": "date"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "description": "Sort direction.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ],
                            "default": "desc"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A JSON array of locations.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    }
                }
            }
        },
        "/wp/v2/location/{id}": {
            "get": {
                "operationId": "getLocation",
                "summary": "Get a single location by ID",
                "description": "Retrieve one location by its numeric ID. IDs come from the list endpoint.",
                "tags": [
                    "Locations"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Unique numeric identifier of the location.",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The requested location.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    }
                }
            }
        },
        "/wp/v2/sector": {
            "get": {
                "operationId": "listSectorPages",
                "summary": "List Sector pages",
                "description": "Industry sector experience pages (automotive, education, financial services, healthcare and others). Returns a paginated collection, newest first by default. Totals are exposed in the X-WP-Total and X-WP-TotalPages response headers.",
                "tags": [
                    "Sector pages"
                ],
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Maximum number of items to return (1\u2013100).",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 10
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Page of the collection (1-based). Total pages are exposed in the X-WP-TotalPages response header.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "Limit results to those matching a search term.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "slug",
                        "in": "query",
                        "description": "Limit results to items with one or more specific slugs (comma-separated).",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "description": "Field to sort the collection by.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "date",
                                "id",
                                "title",
                                "slug",
                                "modified"
                            ],
                            "default": "date"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "description": "Sort direction.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ],
                            "default": "desc"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A JSON array of sector pages.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    }
                }
            }
        },
        "/wp/v2/sector/{id}": {
            "get": {
                "operationId": "getSector",
                "summary": "Get a single sector page by ID",
                "description": "Retrieve one sector page by its numeric ID. IDs come from the list endpoint.",
                "tags": [
                    "Sector pages"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Unique numeric identifier of the sector page.",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The requested sector page.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    }
                }
            }
        },
        "/wp/v2/search": {
            "get": {
                "operationId": "searchContent",
                "summary": "Search all content",
                "description": "Full-text search across every public content type. Each result carries the ID, title, URL and subtype of the matching item.",
                "tags": [
                    "Search"
                ],
                "parameters": [
                    {
                        "name": "search",
                        "in": "query",
                        "description": "The search term.",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Maximum number of items to return (1\u2013100).",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 10
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Page of the collection (1-based). Total pages are exposed in the X-WP-TotalPages response header.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A JSON array of search results.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/SearchResult"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    }
                }
            }
        },
        "/wp/v2/categories": {
            "get": {
                "operationId": "listCategories",
                "summary": "List blog categories",
                "description": "Blog post categories (SEO, GEO, Influencer Marketing and others), with per-category post counts.",
                "tags": [
                    "Taxonomies"
                ],
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Maximum number of items to return (1\u2013100).",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 100,
                            "default": 10
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Page of the collection (1-based). Total pages are exposed in the X-WP-TotalPages response header.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1,
                            "default": 1
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "Limit results to those matching a search term.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "slug",
                        "in": "query",
                        "description": "Limit results to items with one or more specific slugs (comma-separated).",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "description": "Field to sort the collection by.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "date",
                                "id",
                                "title",
                                "slug",
                                "modified"
                            ],
                            "default": "date"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "description": "Sort direction.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ],
                            "default": "desc"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A JSON array of categories.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Term"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "Rendered": {
                "type": "object",
                "description": "A rendered text field.",
                "properties": {
                    "rendered": {
                        "type": "string",
                        "description": "HTML-rendered value."
                    }
                }
            },
            "ContentItem": {
                "type": "object",
                "description": "A published content item (standard WordPress REST shape; additional fields may be present).",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "Unique identifier."
                    },
                    "date": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Publication date, site timezone."
                    },
                    "modified": {
                        "type": "string",
                        "format": "date-time",
                        "description": "Last modification date."
                    },
                    "slug": {
                        "type": "string",
                        "description": "URL slug."
                    },
                    "link": {
                        "type": "string",
                        "format": "uri",
                        "description": "Canonical page URL."
                    },
                    "title": {
                        "$ref": "#/components/schemas/Rendered"
                    },
                    "content": {
                        "$ref": "#/components/schemas/Rendered"
                    },
                    "excerpt": {
                        "$ref": "#/components/schemas/Rendered"
                    }
                },
                "required": [
                    "id",
                    "slug",
                    "link"
                ]
            },
            "SearchResult": {
                "type": "object",
                "description": "One cross-content search hit.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "ID of the matching item."
                    },
                    "title": {
                        "type": "string",
                        "description": "Item title."
                    },
                    "url": {
                        "type": "string",
                        "format": "uri",
                        "description": "Canonical page URL."
                    },
                    "type": {
                        "type": "string",
                        "description": "Object kind (post)."
                    },
                    "subtype": {
                        "type": "string",
                        "description": "Content type (post, page, case_study, ...)."
                    }
                },
                "required": [
                    "id",
                    "title",
                    "url"
                ]
            },
            "Term": {
                "type": "object",
                "description": "A taxonomy term.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "Unique identifier."
                    },
                    "name": {
                        "type": "string",
                        "description": "Term name."
                    },
                    "slug": {
                        "type": "string",
                        "description": "URL slug."
                    },
                    "count": {
                        "type": "integer",
                        "description": "Number of published items in the term."
                    },
                    "link": {
                        "type": "string",
                        "format": "uri",
                        "description": "Archive URL."
                    }
                },
                "required": [
                    "id",
                    "name",
                    "slug"
                ]
            },
            "Error": {
                "type": "object",
                "description": "Structured JSON error (WordPress REST format). The code is machine-readable; the message is human-readable; data.status echoes the HTTP status.",
                "properties": {
                    "code": {
                        "type": "string",
                        "description": "Machine-readable error code, e.g. rest_post_invalid_id or rest_no_route."
                    },
                    "message": {
                        "type": "string",
                        "description": "Human-readable explanation."
                    },
                    "data": {
                        "type": "object",
                        "properties": {
                            "status": {
                                "type": "integer",
                                "description": "HTTP status code."
                            }
                        }
                    }
                },
                "required": [
                    "code",
                    "message"
                ]
            }
        },
        "responses": {
            "BadRequest": {
                "description": "Invalid parameter. Fix the named parameter and retry.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "NotFound": {
                "description": "No item with that ID exists. List endpoints return valid IDs.",
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            }
        }
    }
}