{
  "openapi": "3.1.1",
  "info": {
    "title": "Crydogs public website content",
    "version": "1.0.0",
    "description": "Read existing published Crydogs service, company and knowledge pages through WordPress. This is a read-only contract for the existing public website, not a scan execution, checkout, customer or administration API. No API key, OAuth flow or signup is needed for these reads. Private leads, mail health and all writes are excluded. For a paid AI Visibility Scan use the contact page.",
    "contact": {
      "url": "https://crydogs.com/contact/",
      "email": "AI@crydogs.com"
    }
  },
  "servers": [
    {
      "url": "https://crydogs.com/wp-json/wp/v2",
      "description": "Existing WordPress REST API on the Crydogs production website."
    }
  ],
  "security": [],
  "externalDocs": {
    "description": "Crydogs research approach and public reading guidance",
    "url": "https://crydogs.com/docs/"
  },
  "paths": {
    "/pages": {
      "get": {
        "operationId": "listCrydogsPublishedPages",
        "summary": "Find published website pages",
        "description": "Read published company, service and knowledge pages without credentials. Search or filter by slug, then use the returned page ID for a single-page read. The rendered fields contain HTML. The default is ten results; page and per_page provide standard WordPress pagination. Do not request private, draft or edit-context data.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "One-based result page.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "default": 1
            }
          },
          {
            "name": "per_page",
            "in": "query",
            "description": "Number of pages per result page; small batches are recommended.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 10
            }
          },
          {
            "name": "search",
            "in": "query",
            "description": "Search published website pages.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "slug",
            "in": "query",
            "description": "Filter by one or more page slugs, for example ai-visibility-scan.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "style": "form",
            "explode": false
          }
        ],
        "responses": {
          "200": {
            "description": "Published pages. Follow X-WP-TotalPages with the page parameter to read further results.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PublicPage"
                  }
                }
              }
            },
            "headers": {
              "X-WP-Total": {
                "description": "Total matching published pages.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "X-WP-TotalPages": {
                "description": "Total result pages for the requested per_page.",
                "schema": {
                  "type": "integer",
                  "minimum": 0
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters or page number. Correct the request using the documented bounds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WordPressError"
                }
              }
            }
          },
          "401": {
            "description": "The requested context or resource requires authorization. Use public view context and a published page.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WordPressError"
                }
              }
            }
          },
          "403": {
            "description": "Access denied. This contract grants no administrative permissions.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WordPressError"
                }
              }
            }
          }
        }
      }
    },
    "/pages/{id}": {
      "get": {
        "operationId": "getCrydogsPublishedPage",
        "summary": "Read one published website page",
        "description": "Retrieve a published page by its WordPress ID. Rendered content is HTML. This operation does not create an inquiry, run a scan or modify content. A missing page returns the typed WordPress JSON error with HTTP404.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Page ID returned by the list operation.",
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Published website page.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicPage"
                }
              }
            }
          },
          "404": {
            "description": "Page does not exist. List published pages or use the website sitemap to find an available page.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WordPressError"
                }
              }
            }
          },
          "400": {
            "description": "Invalid parameters or page number. Correct the request using the documented bounds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WordPressError"
                }
              }
            }
          },
          "401": {
            "description": "The requested context or resource requires authorization. Use public view context and a published page.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WordPressError"
                }
              }
            }
          },
          "403": {
            "description": "Access denied. This contract grants no administrative permissions.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WordPressError"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "PublicPage": {
        "type": "object",
        "required": [
          "id",
          "slug",
          "link",
          "status",
          "title",
          "content"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 1
          },
          "slug": {
            "type": "string"
          },
          "link": {
            "type": "string",
            "format": "uri"
          },
          "status": {
            "type": "string",
            "enum": [
              "publish"
            ]
          },
          "title": {
            "type": "object",
            "required": [
              "rendered"
            ],
            "properties": {
              "rendered": {
                "type": "string",
                "description": "Published title, potentially containing HTML entities."
              }
            }
          },
          "content": {
            "type": "object",
            "required": [
              "rendered",
              "protected"
            ],
            "properties": {
              "rendered": {
                "type": "string",
                "description": "Published HTML content. Password-protected content is not disclosed."
              },
              "protected": {
                "type": "boolean"
              }
            }
          }
        }
      },
      "WordPressError": {
        "type": "object",
        "required": [
          "code",
          "message",
          "data"
        ],
        "properties": {
          "code": {
            "type": "string",
            "description": "Stable WordPress error identifier."
          },
          "message": {
            "type": "string",
            "description": "Human-readable error; language follows the site locale."
          },
          "data": {
            "type": "object",
            "required": [
              "status"
            ],
            "properties": {
              "status": {
                "type": "integer",
                "minimum": 400,
                "maximum": 599
              }
            }
          }
        }
      }
    }
  }
}
