{
    "openapi": "3.0.3",
    "info": {
        "title": "zorem Public Read API",
        "version": "1.0.0",
        "summary": "Read-only public API for zorem.com WooCommerce plugin catalog and blog.",
        "description": "Public, read-only endpoints exposing zorem's WooCommerce plugin catalog and blog content. All endpoints are anonymous \u2014 no API key or authentication required. Intended for use by AI agents, comparison shopping tools, and third-party integrations that need to browse zorem's product catalog or reference published articles.\n\n## Rate limiting\nReasonable use assumed. Aggressive scraping is rate-limited by Cloudflare at 300 requests per minute per IP. Responses advertise `RateLimit-Policy: 300;w=60` per RFC 9331. Well-behaved agents should self-throttle to stay under the policy.\n\n## Versioning & deprecation\nVersion is embedded in the URL path (`/wc/store/v1`, `/wp/v2`). Endpoints inherit the backwards-compatibility guarantees of their upstream projects \u2014 the WooCommerce Store API and WordPress Core REST API. When zorem deprecates a documented endpoint, responses will include the standard `Sunset` and `Deprecation` HTTP headers (per RFC 8594 and the IETF Deprecation Header draft), with a minimum 6-month notice before removal. A version bump to `v2` will coexist with `v1` for at least 12 months to allow migration.\n\n## Out of scope\nNot documented here: cart, checkout, order, user, media, or admin endpoints. Those require authentication or state changes and are out of scope for public agents.",
        "contact": {
            "name": "zorem",
            "url": "https://www.zorem.com/contact/",
            "email": "info@zorem.com"
        },
        "license": {
            "name": "Public read access \u2014 no license required",
            "url": "https://www.zorem.com/"
        },
        "x-api-lifecycle": {
            "versioning": "URL path (e.g. /wc/store/v1, /wp/v2)",
            "stability": "Public endpoints follow the upstream backwards-compatibility guarantees of WooCommerce and WordPress Core.",
            "deprecation_signal": "Sunset and Deprecation HTTP response headers per RFC 8594 and the IETF Deprecation Header draft.",
            "minimum_sunset_days": 180,
            "policy_url": "https://www.zorem.com/openapi.json"
        },
        "x-rate-limit": {
            "policy": "300;w=60",
            "enforced_by": "Cloudflare",
            "headers": [
                "RateLimit-Policy"
            ]
        }
    },
    "servers": [
        {
            "url": "https://www.zorem.com/wp-json",
            "description": "Production"
        }
    ],
    "tags": [
        {
            "name": "Products",
            "description": "WooCommerce Store API \u2014 plugin catalog"
        },
        {
            "name": "Categories",
            "description": "WooCommerce product categories"
        },
        {
            "name": "Posts",
            "description": "WordPress blog posts"
        },
        {
            "name": "Pages",
            "description": "WordPress static pages"
        }
    ],
    "paths": {
        "/wc/store/v1/products": {
            "get": {
                "operationId": "listProducts",
                "summary": "List all plugins in the zorem catalog.",
                "description": "Returns the paginated list of published WooCommerce products. Use this to browse or search zorem's plugin catalog.",
                "tags": [
                    "Products"
                ],
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Products per page. Default 10, max 100.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 10,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Page number (1-indexed).",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "Filter by search term (matches name and description).",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "category",
                        "in": "query",
                        "description": "Filter by category slug.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "description": "Sort field.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "date",
                                "title",
                                "popularity",
                                "rating",
                                "price",
                                "menu_order"
                            ],
                            "default": "date"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "description": "Sort direction.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ],
                            "default": "desc"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A list of products.",
                        "headers": {
                            "X-WP-Total": {
                                "schema": {
                                    "type": "integer"
                                },
                                "description": "Total number of products."
                            },
                            "X-WP-TotalPages": {
                                "schema": {
                                    "type": "integer"
                                },
                                "description": "Total number of pages."
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Product"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/wc/store/v1/products/{id}": {
            "get": {
                "operationId": "getProduct",
                "summary": "Get a single plugin by ID.",
                "description": "Returns full details of one product including images, categories, price, and description.",
                "tags": [
                    "Products"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "Product ID (as returned in the list endpoint).",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Product details.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Product"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Product not found.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/wc/store/v1/products/categories": {
            "get": {
                "operationId": "listCategories",
                "summary": "List product categories.",
                "description": "Returns all published WooCommerce product categories with product counts.",
                "tags": [
                    "Categories"
                ],
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 10,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "description": "Sort field.",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "name",
                                "slug",
                                "count",
                                "menu_order"
                            ],
                            "default": "name"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ],
                            "default": "asc"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A list of categories.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Category"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/wp/v2/posts": {
            "get": {
                "operationId": "listPosts",
                "summary": "List published blog posts.",
                "description": "Returns paginated blog posts from zorem.com/blog/. Includes title, content, excerpt, publication date, and author info.",
                "tags": [
                    "Posts"
                ],
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 10,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "description": "Free-text search.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "categories",
                        "in": "query",
                        "description": "Comma-separated category IDs.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "orderby",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "date",
                                "title",
                                "modified",
                                "id"
                            ],
                            "default": "date"
                        }
                    },
                    {
                        "name": "order",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string",
                            "enum": [
                                "asc",
                                "desc"
                            ],
                            "default": "desc"
                        }
                    },
                    {
                        "name": "_fields",
                        "in": "query",
                        "description": "Comma-separated list of fields to include. Reduces response size \u2014 pass e.g. \"id,title,link,excerpt\".",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A list of posts.",
                        "headers": {
                            "X-WP-Total": {
                                "schema": {
                                    "type": "integer"
                                }
                            },
                            "X-WP-TotalPages": {
                                "schema": {
                                    "type": "integer"
                                }
                            }
                        },
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Post"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/wp/v2/posts/{id}": {
            "get": {
                "operationId": "getPost",
                "summary": "Get a single blog post by ID.",
                "description": "Returns one blog post with full title, rendered content, excerpt, publication date, author ID, and category/tag references. Use ?_fields= to trim the response payload.",
                "tags": [
                    "Posts"
                ],
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        },
                        "description": "Post ID."
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Post details.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Post"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Post not found.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Error"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/wp/v2/pages": {
            "get": {
                "operationId": "listPages",
                "summary": "List static pages.",
                "description": "Returns published WordPress pages (About, Contact, product landing pages, etc.).",
                "tags": [
                    "Pages"
                ],
                "parameters": [
                    {
                        "name": "per_page",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 10,
                            "minimum": 1,
                            "maximum": 100
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 1,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "parent",
                        "in": "query",
                        "description": "Filter by parent page ID.",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "search",
                        "in": "query",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "_fields",
                        "in": "query",
                        "description": "Comma-separated fields to include.",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "A list of pages.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Page"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "Product": {
                "type": "object",
                "description": "A WooCommerce plugin as returned by the Store API.",
                "properties": {
                    "id": {
                        "type": "integer",
                        "description": "Unique product ID.",
                        "example": 107440
                    },
                    "name": {
                        "type": "string",
                        "description": "Plugin name.",
                        "example": "Advanced Shipment Tracking Pro"
                    },
                    "slug": {
                        "type": "string"
                    },
                    "parent": {
                        "type": "integer",
                        "description": "Parent product ID (0 for top-level)."
                    },
                    "type": {
                        "type": "string",
                        "enum": [
                            "simple",
                            "variable",
                            "external",
                            "grouped"
                        ]
                    },
                    "variation": {
                        "type": "string"
                    },
                    "permalink": {
                        "type": "string",
                        "format": "uri",
                        "description": "Public product page URL."
                    },
                    "sku": {
                        "type": "string"
                    },
                    "short_description": {
                        "type": "string",
                        "description": "Short marketing description (HTML)."
                    },
                    "description": {
                        "type": "string",
                        "description": "Full product description (HTML)."
                    },
                    "prices": {
                        "$ref": "#/components/schemas/Prices"
                    },
                    "images": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/ProductImage"
                        }
                    },
                    "categories": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CategoryRef"
                        }
                    },
                    "tags": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        }
                    },
                    "average_rating": {
                        "type": "string",
                        "example": "4.9"
                    },
                    "review_count": {
                        "type": "integer"
                    },
                    "is_purchasable": {
                        "type": "boolean"
                    },
                    "is_in_stock": {
                        "type": "boolean"
                    },
                    "has_options": {
                        "type": "boolean"
                    }
                },
                "required": [
                    "id",
                    "name",
                    "slug",
                    "permalink",
                    "type"
                ]
            },
            "Prices": {
                "type": "object",
                "description": "Price details in the store's configured currency (typically USD).",
                "properties": {
                    "currency_code": {
                        "type": "string",
                        "example": "USD"
                    },
                    "currency_symbol": {
                        "type": "string",
                        "example": "$"
                    },
                    "currency_minor_unit": {
                        "type": "integer",
                        "example": 2
                    },
                    "price": {
                        "type": "string",
                        "description": "Current price in minor units (cents).",
                        "example": "12900"
                    },
                    "regular_price": {
                        "type": "string"
                    },
                    "sale_price": {
                        "type": "string"
                    }
                }
            },
            "ProductImage": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "src": {
                        "type": "string",
                        "format": "uri"
                    },
                    "thumbnail": {
                        "type": "string",
                        "format": "uri"
                    },
                    "srcset": {
                        "type": "string"
                    },
                    "sizes": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "alt": {
                        "type": "string"
                    }
                }
            },
            "CategoryRef": {
                "type": "object",
                "description": "Category reference embedded on a product.",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "slug": {
                        "type": "string"
                    },
                    "link": {
                        "type": "string",
                        "format": "uri"
                    }
                }
            },
            "Category": {
                "type": "object",
                "description": "A WooCommerce product category with product count.",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "slug": {
                        "type": "string"
                    },
                    "description": {
                        "type": "string"
                    },
                    "parent": {
                        "type": "integer"
                    },
                    "count": {
                        "type": "integer",
                        "description": "Number of products in this category."
                    },
                    "image": {
                        "type": "object",
                        "nullable": true
                    },
                    "permalink": {
                        "type": "string",
                        "format": "uri"
                    }
                },
                "required": [
                    "id",
                    "name",
                    "slug"
                ]
            },
            "Post": {
                "type": "object",
                "description": "A published WordPress blog post.",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "date": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "date_gmt": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "modified": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "slug": {
                        "type": "string"
                    },
                    "status": {
                        "type": "string",
                        "enum": [
                            "publish"
                        ]
                    },
                    "type": {
                        "type": "string",
                        "example": "post"
                    },
                    "link": {
                        "type": "string",
                        "format": "uri"
                    },
                    "title": {
                        "$ref": "#/components/schemas/RenderedField"
                    },
                    "content": {
                        "$ref": "#/components/schemas/RenderedField"
                    },
                    "excerpt": {
                        "$ref": "#/components/schemas/RenderedField"
                    },
                    "author": {
                        "type": "integer"
                    },
                    "featured_media": {
                        "type": "integer"
                    },
                    "categories": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        }
                    },
                    "tags": {
                        "type": "array",
                        "items": {
                            "type": "integer"
                        }
                    }
                },
                "required": [
                    "id",
                    "date",
                    "slug",
                    "link",
                    "title"
                ]
            },
            "Page": {
                "type": "object",
                "description": "A published WordPress page.",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "date": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "slug": {
                        "type": "string"
                    },
                    "link": {
                        "type": "string",
                        "format": "uri"
                    },
                    "title": {
                        "$ref": "#/components/schemas/RenderedField"
                    },
                    "content": {
                        "$ref": "#/components/schemas/RenderedField"
                    },
                    "excerpt": {
                        "$ref": "#/components/schemas/RenderedField"
                    },
                    "parent": {
                        "type": "integer",
                        "description": "Parent page ID (0 if top-level)."
                    },
                    "menu_order": {
                        "type": "integer"
                    },
                    "template": {
                        "type": "string"
                    }
                },
                "required": [
                    "id",
                    "slug",
                    "link",
                    "title"
                ]
            },
            "RenderedField": {
                "type": "object",
                "description": "Standard WordPress rendered content wrapper.",
                "properties": {
                    "rendered": {
                        "type": "string",
                        "description": "HTML-rendered value."
                    },
                    "protected": {
                        "type": "boolean"
                    }
                }
            },
            "Error": {
                "type": "object",
                "description": "Standard WordPress REST API error response.",
                "properties": {
                    "code": {
                        "type": "string",
                        "example": "rest_post_invalid_id"
                    },
                    "message": {
                        "type": "string"
                    },
                    "data": {
                        "type": "object",
                        "properties": {
                            "status": {
                                "type": "integer",
                                "example": 404
                            }
                        }
                    }
                },
                "required": [
                    "code",
                    "message"
                ]
            }
        }
    },
    "externalDocs": {
        "description": "zorem product documentation",
        "url": "https://docs.zorem.com/"
    }
}