openapi: 3.1.0 info: title: Gotham Greens SEO Metadata API version: yoast/v1 summary: Public Yoast SEO head metadata for gothamgreens.com URLs. description: >- The Yoast SEO REST head endpoint, exposed anonymously on gothamgreens.com. Given any site URL it returns the rendered `` SEO block as HTML plus the structured metadata behind it, including the schema.org JSON-LD graph (Organization, WebSite, WebPage, BreadcrumbList) the site publishes. Verified live on 2026-08-01 (Yoast SEO Premium v28.1). This is a plugin surface, not a Gotham Greens product API. contact: name: Gotham Greens url: https://www.gothamgreens.com/contact/ license: name: Site content — all rights reserved, see Terms of Use url: https://www.gothamgreens.com/terms-of-use/ x-apis-io-provenance: method: derived source: https://www.gothamgreens.com/wp-json/ derived_on: '2026-08-01' note: >- Routes enumerated from the live wp-json discovery document (406 routes across 17 namespaces); each operation below was probed anonymously and returned HTTP 200. Schemas reflect the fields observed in live responses on 2026-08-01. No fabricated operations. servers: - url: https://www.gothamgreens.com/wp-json description: Production tags: - name: SEO description: Rendered SEO head metadata and JSON-LD schema graph. paths: /yoast/v1/get_head: get: tags: - SEO operationId: getSeoHead summary: Get SEO head metadata for a URL description: >- Returns the Yoast-rendered SEO head for a gothamgreens.com URL — meta description, canonical, Open Graph and Twitter card tags, and the schema.org JSON-LD graph. parameters: - name: url in: query required: true description: The gothamgreens.com URL to retrieve SEO metadata for. schema: type: string format: uri responses: '200': description: The rendered SEO head. content: application/json: schema: $ref: '#/components/schemas/SeoHead' '404': $ref: '#/components/responses/NotFound' components: parameters: id: name: id in: path required: true description: Unique numeric identifier for the object. schema: type: integer page: name: page in: query description: Current page of the collection. Defaults to 1. schema: type: integer minimum: 1 default: 1 perPage: name: per_page in: query description: >- Maximum number of items to be returned in the result set. Verified live: values outside 1-100 return HTTP 400 `rest_invalid_param`. schema: type: integer minimum: 1 maximum: 100 default: 10 search: name: search in: query description: Limit results to those matching a string. schema: type: string order: name: order in: query description: Order sort attribute ascending or descending. schema: type: string enum: [asc, desc] orderby: name: orderby in: query description: Sort collection by object attribute. schema: type: string context: name: context in: query description: >- Scope under which the request is made; determines fields present in the response. Only `view` and `embed` are available anonymously. schema: type: string enum: [view, embed] default: view headers: XWPTotal: description: Total number of items in the collection. schema: type: integer XWPTotalPages: description: Total number of pages in the collection at the current per_page. schema: type: integer LinkPagination: description: RFC 8288 Link header carrying `next` and `prev` pagination relations. schema: type: string responses: NotFound: description: The requested object does not exist. content: application/json: schema: $ref: '#/components/schemas/Error' example: code: rest_no_route message: No route was found matching the URL and request method. data: status: 404 InvalidParam: description: One or more query parameters failed validation. 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) Unauthorized: description: >- The route exists but is not readable anonymously. Verified live on the users, settings, themes, plugins, menus, block-types and revisions routes. content: application/json: schema: $ref: '#/components/schemas/Error' example: code: rest_forbidden message: Sorry, you are not allowed to do that. data: status: 401 schemas: RenderedText: type: object description: WordPress rendered-text object. properties: rendered: type: string required: [rendered] Error: type: object description: >- The WordPress REST error envelope, verified live. Note this is NOT RFC 9457 application/problem+json — it is served as application/json with a WordPress-specific shape. properties: code: type: string message: type: string data: type: object properties: status: type: integer params: type: object additionalProperties: type: string details: type: object additionalProperties: true required: [status] required: [code, message, data] SeoHead: type: object description: Yoast SEO head payload. properties: html: type: string description: The fully rendered SEO `` HTML block. json: type: object additionalProperties: true description: >- Structured equivalent of the head — title, description, robots directives, canonical, og_* and twitter_* fields, and the `schema` JSON-LD `@graph`. required: [html]