{
    "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).\n\n**Rate limits.** Anonymous requests are limited to 120 requests per 60-second window per client IP. Every response carries the IETF RateLimit and RateLimit-Policy header fields plus RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset. When the quota is exhausted the API returns HTTP 429 with a Retry-After header (seconds) and an Error body whose code is terrier_rate_limited; wait Retry-After seconds, then resume. Read the headers to self-throttle rather than counting requests locally.\n\n**Versioning and deprecation.** The API is versioned in the URL path (currently /wp/v2/). A version is never changed incompatibly in place: additive changes (new fields, new optional parameters, new endpoints) may land at any time without notice, and clients must ignore fields they do not recognise. Breaking changes ship as a new path version. When a version, endpoint or field is scheduled for removal it is announced at least six months in advance: responses from the affected surface carry a Deprecation header (RFC 9745) from the day the notice is given and a Sunset header (RFC 8594) giving the removal date, together with Link relations rel=\"deprecation\" and rel=\"sunset\" pointing at the migration notes. The removal date is also listed on the Developer Resources page. After the Sunset date the surface returns 410 Gone with an Error body. Nothing is currently deprecated.\n\n**Errors.** Every non-2xx response is a JSON object with the Error schema: a machine-readable `code`, a human-readable `message`, and `data.status` echoing the HTTP status. Each operation lists its 400/404/429/500 responses and a `default` that covers every other status.",
        "version": "1.1.0",
        "x-rate-limit": {
            "limit": 120,
            "window": 60,
            "scope": "client IP, anonymous requests",
            "headers": [
                "RateLimit",
                "RateLimit-Policy",
                "RateLimit-Limit",
                "RateLimit-Remaining",
                "RateLimit-Reset",
                "Retry-After"
            ],
            "policy": "https://www.terrieragency.com/developers/#rate-limits"
        },
        "x-versioning": {
            "scheme": "url-path",
            "current": "v2",
            "deprecation-notice": "P6M",
            "signals": [
                "Deprecation",
                "Sunset",
                "Link rel=\"deprecation\"",
                "Link rel=\"sunset\""
            ],
            "policy": "https://www.terrieragency.com/developers/#versioning"
        },
        "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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            },
                            "X-WP-Total": {
                                "$ref": "#/components/headers/X-WP-Total"
                            },
                            "X-WP-TotalPages": {
                                "$ref": "#/components/headers/X-WP-TotalPages"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            },
                            "X-WP-Total": {
                                "$ref": "#/components/headers/X-WP-Total"
                            },
                            "X-WP-TotalPages": {
                                "$ref": "#/components/headers/X-WP-TotalPages"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            },
                            "X-WP-Total": {
                                "$ref": "#/components/headers/X-WP-Total"
                            },
                            "X-WP-TotalPages": {
                                "$ref": "#/components/headers/X-WP-TotalPages"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            },
                            "X-WP-Total": {
                                "$ref": "#/components/headers/X-WP-Total"
                            },
                            "X-WP-TotalPages": {
                                "$ref": "#/components/headers/X-WP-TotalPages"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            },
                            "X-WP-Total": {
                                "$ref": "#/components/headers/X-WP-Total"
                            },
                            "X-WP-TotalPages": {
                                "$ref": "#/components/headers/X-WP-TotalPages"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            },
                            "X-WP-Total": {
                                "$ref": "#/components/headers/X-WP-Total"
                            },
                            "X-WP-TotalPages": {
                                "$ref": "#/components/headers/X-WP-TotalPages"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            },
                            "X-WP-Total": {
                                "$ref": "#/components/headers/X-WP-Total"
                            },
                            "X-WP-TotalPages": {
                                "$ref": "#/components/headers/X-WP-TotalPages"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ContentItem"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ContentItem"
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "404": {
                        "$ref": "#/components/responses/NotFound"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            },
                            "X-WP-Total": {
                                "$ref": "#/components/headers/X-WP-Total"
                            },
                            "X-WP-TotalPages": {
                                "$ref": "#/components/headers/X-WP-TotalPages"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/SearchResult"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        },
        "/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.",
                        "headers": {
                            "RateLimit": {
                                "$ref": "#/components/headers/RateLimit"
                            },
                            "RateLimit-Policy": {
                                "$ref": "#/components/headers/RateLimit-Policy"
                            },
                            "RateLimit-Limit": {
                                "$ref": "#/components/headers/RateLimit-Limit"
                            },
                            "RateLimit-Remaining": {
                                "$ref": "#/components/headers/RateLimit-Remaining"
                            },
                            "RateLimit-Reset": {
                                "$ref": "#/components/headers/RateLimit-Reset"
                            },
                            "Link": {
                                "$ref": "#/components/headers/Link"
                            },
                            "Deprecation": {
                                "$ref": "#/components/headers/Deprecation"
                            },
                            "Sunset": {
                                "$ref": "#/components/headers/Sunset"
                            },
                            "X-WP-Total": {
                                "$ref": "#/components/headers/X-WP-Total"
                            },
                            "X-WP-TotalPages": {
                                "$ref": "#/components/headers/X-WP-TotalPages"
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Term"
                                    }
                                }
                            }
                        }
                    },
                    "400": {
                        "$ref": "#/components/responses/BadRequest"
                    },
                    "429": {
                        "$ref": "#/components/responses/RateLimited"
                    },
                    "500": {
                        "$ref": "#/components/responses/ServerError"
                    },
                    "default": {
                        "$ref": "#/components/responses/Error"
                    }
                }
            }
        }
    },
    "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."
                            },
                            "params": {
                                "type": "object",
                                "additionalProperties": {
                                    "type": "string"
                                },
                                "description": "On 400: parameter name \u2192 validation message."
                            },
                            "retry_after": {
                                "type": "integer",
                                "description": "On 429: seconds to wait before retrying."
                            }
                        },
                        "required": [
                            "status"
                        ]
                    }
                },
                "required": [
                    "code",
                    "message",
                    "data"
                ],
                "example": {
                    "code": "rest_post_invalid_id",
                    "message": "Invalid post ID.",
                    "data": {
                        "status": 404
                    }
                }
            }
        },
        "headers": {
            "RateLimit": {
                "description": "IETF RateLimit header field (structured): remaining quota (r) and seconds until reset (t) for the named policy. Example: \"default\";r=119;t=42",
                "schema": {
                    "type": "string"
                }
            },
            "RateLimit-Policy": {
                "description": "IETF RateLimit-Policy header field: quota (q) per window (w seconds). Example: \"default\";q=120;w=60",
                "schema": {
                    "type": "string"
                }
            },
            "RateLimit-Limit": {
                "description": "Request quota for the current window (earlier-draft form of RateLimit-Policy).",
                "schema": {
                    "type": "integer"
                }
            },
            "RateLimit-Remaining": {
                "description": "Requests remaining in the current window.",
                "schema": {
                    "type": "integer"
                }
            },
            "RateLimit-Reset": {
                "description": "Seconds until the current window resets.",
                "schema": {
                    "type": "integer"
                }
            },
            "Retry-After": {
                "description": "Seconds to wait before retrying (RFC 9110 \u00a710.2.3). Sent with 429.",
                "schema": {
                    "type": "integer"
                }
            },
            "X-WP-Total": {
                "description": "Total number of items in the collection.",
                "schema": {
                    "type": "integer"
                }
            },
            "X-WP-TotalPages": {
                "description": "Total number of pages at the requested per_page.",
                "schema": {
                    "type": "integer"
                }
            },
            "Link": {
                "description": "RFC 8288 links: rel=\"next\"/\"prev\" pagination, plus rel=\"service-desc\" (this OpenAPI document) and rel=\"service-doc\" (human documentation) per RFC 8631.",
                "schema": {
                    "type": "string"
                }
            },
            "Deprecation": {
                "description": "RFC 9745. Present only on a deprecated resource or version: the date deprecation took (or takes) effect, as an HTTP-date. Absent while the resource is current.",
                "schema": {
                    "type": "string"
                }
            },
            "Sunset": {
                "description": "RFC 8594. Present only on a deprecated resource or version: the HTTP-date after which it stops responding. Never earlier than six months after the Deprecation date.",
                "schema": {
                    "type": "string"
                }
            }
        },
        "responses": {
            "Error": {
                "description": "Any other error. The body is always the Error schema.",
                "headers": {
                    "RateLimit": {
                        "$ref": "#/components/headers/RateLimit"
                    },
                    "RateLimit-Policy": {
                        "$ref": "#/components/headers/RateLimit-Policy"
                    },
                    "RateLimit-Limit": {
                        "$ref": "#/components/headers/RateLimit-Limit"
                    },
                    "RateLimit-Remaining": {
                        "$ref": "#/components/headers/RateLimit-Remaining"
                    },
                    "RateLimit-Reset": {
                        "$ref": "#/components/headers/RateLimit-Reset"
                    },
                    "Link": {
                        "$ref": "#/components/headers/Link"
                    },
                    "Deprecation": {
                        "$ref": "#/components/headers/Deprecation"
                    },
                    "Sunset": {
                        "$ref": "#/components/headers/Sunset"
                    }
                },
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            },
            "BadRequest": {
                "description": "Invalid parameter. `code` is rest_invalid_param and `data.params` names each bad parameter. Fix the named parameter and retry.",
                "headers": {
                    "RateLimit": {
                        "$ref": "#/components/headers/RateLimit"
                    },
                    "RateLimit-Policy": {
                        "$ref": "#/components/headers/RateLimit-Policy"
                    },
                    "RateLimit-Limit": {
                        "$ref": "#/components/headers/RateLimit-Limit"
                    },
                    "RateLimit-Remaining": {
                        "$ref": "#/components/headers/RateLimit-Remaining"
                    },
                    "RateLimit-Reset": {
                        "$ref": "#/components/headers/RateLimit-Reset"
                    },
                    "Link": {
                        "$ref": "#/components/headers/Link"
                    },
                    "Deprecation": {
                        "$ref": "#/components/headers/Deprecation"
                    },
                    "Sunset": {
                        "$ref": "#/components/headers/Sunset"
                    }
                },
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        },
                        "example": {
                            "code": "rest_invalid_param",
                            "message": "Invalid parameter(s): per_page",
                            "data": {
                                "status": 400,
                                "params": {
                                    "per_page": "per_page must be between 1 (inclusive) and 100 (inclusive)"
                                }
                            }
                        }
                    }
                }
            },
            "NotFound": {
                "description": "No item with that ID exists (`code` rest_post_invalid_id) or no such route (`code` rest_no_route). List endpoints return valid IDs.",
                "headers": {
                    "RateLimit": {
                        "$ref": "#/components/headers/RateLimit"
                    },
                    "RateLimit-Policy": {
                        "$ref": "#/components/headers/RateLimit-Policy"
                    },
                    "RateLimit-Limit": {
                        "$ref": "#/components/headers/RateLimit-Limit"
                    },
                    "RateLimit-Remaining": {
                        "$ref": "#/components/headers/RateLimit-Remaining"
                    },
                    "RateLimit-Reset": {
                        "$ref": "#/components/headers/RateLimit-Reset"
                    },
                    "Link": {
                        "$ref": "#/components/headers/Link"
                    },
                    "Deprecation": {
                        "$ref": "#/components/headers/Deprecation"
                    },
                    "Sunset": {
                        "$ref": "#/components/headers/Sunset"
                    }
                },
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        },
                        "example": {
                            "code": "rest_post_invalid_id",
                            "message": "Invalid post ID.",
                            "data": {
                                "status": 404
                            }
                        }
                    }
                }
            },
            "RateLimited": {
                "description": "Rate limit exceeded (`code` terrier_rate_limited). Wait Retry-After seconds, then retry. Policy: 120 requests per 60 seconds per client IP.",
                "headers": {
                    "RateLimit": {
                        "$ref": "#/components/headers/RateLimit"
                    },
                    "RateLimit-Policy": {
                        "$ref": "#/components/headers/RateLimit-Policy"
                    },
                    "RateLimit-Limit": {
                        "$ref": "#/components/headers/RateLimit-Limit"
                    },
                    "RateLimit-Remaining": {
                        "$ref": "#/components/headers/RateLimit-Remaining"
                    },
                    "RateLimit-Reset": {
                        "$ref": "#/components/headers/RateLimit-Reset"
                    },
                    "Link": {
                        "$ref": "#/components/headers/Link"
                    },
                    "Deprecation": {
                        "$ref": "#/components/headers/Deprecation"
                    },
                    "Sunset": {
                        "$ref": "#/components/headers/Sunset"
                    },
                    "Retry-After": {
                        "$ref": "#/components/headers/Retry-After"
                    }
                },
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        },
                        "example": {
                            "code": "terrier_rate_limited",
                            "message": "Rate limit exceeded: 120 requests per 60 seconds per client. Retry after 37 seconds.",
                            "data": {
                                "status": 429,
                                "retry_after": 37,
                                "limit": 120,
                                "window": 60
                            }
                        }
                    }
                }
            },
            "ServerError": {
                "description": "Unexpected server error. Safe to retry with exponential backoff.",
                "headers": {
                    "RateLimit": {
                        "$ref": "#/components/headers/RateLimit"
                    },
                    "RateLimit-Policy": {
                        "$ref": "#/components/headers/RateLimit-Policy"
                    },
                    "RateLimit-Limit": {
                        "$ref": "#/components/headers/RateLimit-Limit"
                    },
                    "RateLimit-Remaining": {
                        "$ref": "#/components/headers/RateLimit-Remaining"
                    },
                    "RateLimit-Reset": {
                        "$ref": "#/components/headers/RateLimit-Reset"
                    },
                    "Link": {
                        "$ref": "#/components/headers/Link"
                    },
                    "Deprecation": {
                        "$ref": "#/components/headers/Deprecation"
                    },
                    "Sunset": {
                        "$ref": "#/components/headers/Sunset"
                    }
                },
                "content": {
                    "application/json": {
                        "schema": {
                            "$ref": "#/components/schemas/Error"
                        }
                    }
                }
            }
        }
    }
}