{
  "openapi": "3.0.0",
  "info": {
    "title": "WWW API Endpoints",
    "version": "1.0.0"
  },
  "paths": {
    "/api/nextjs-routes/image/{spaceId}/{assetId}": {
      "get": {
        "summary": "Redirect to latest Contentful asset image",
        "description": "Redirects (302) to the current CDN URL of the specified asset from the given Contentful space. Supports all [Contentful Image API query parameters](https://www.contentful.com/developers/docs/references/images-api/).\n\nWWW Space: icnj41gkyohw\nCloud-UI Space: win0qdoynbf5",
        "operationId": "redirectAssetImage",
        "tags": ["Images"],
        "parameters": [
          {
            "name": "spaceId",
            "in": "path",
            "required": true,
            "description": "The Contentful space ID (used to look up the correct API key)",
            "schema": {
              "type": "string",
              "example": "icnj41gkyohw"
            }
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "description": "The ID of the Contentful asset",
            "schema": {
              "type": "string",
              "example": "7cPspHsMp769Z4KcP0KLuT"
            }
          }
        ],
        "responses": {
          "302": {
            "description": "Redirects to the current asset URL on the Contentful CDN",
            "headers": {
              "Location": {
                "description": "URL to the actual image on Contentful CDN",
                "schema": {
                  "type": "string",
                  "format": "uri"
                }
              },
              "Cache-Control": {
                "description": "Controls browser and CDN caching",
                "schema": {
                  "type": "string"
                }
              },
              "ETag": {
                "description": "Stable tag based on asset ID and update timestamp",
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified — if ETag matches"
          },
          "400": {
            "description": "Invalid or missing parameters"
          },
          "403": {
            "description": "Missing or unauthorized space ID"
          },
          "404": {
            "description": "Asset not found in Contentful"
          },
          "500": {
            "description": "Unexpected server error"
          }
        }
      }
    },
    "/api/nextjs-routes/store/recommendations": {
      "get": {
        "tags": ["Store/Checkout/Cart"],
        "summary": "Recommended items API for Store/Cart",
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "description": "Limits the number of recommended items returned.",
            "required": false,
            "schema": {
              "default": "3",
              "type": "string"
            }
          },
          {
            "name": "preview",
            "in": "query",
            "description": "Determines whether to return unpublished (\"preview\") Contentful entries.",
            "required": false,
            "schema": {
              "default": "false",
              "type": "string"
            }
          },
          {
            "name": "skus",
            "in": "query",
            "description": "Comma-separated list of SKUs for which to return recommended items.\nPriority will be based on the order in which the SKUs are passed (i.e., all of the first SKU's recommended items will be returned, followed by all of the second SKU's recommended items, etc., up until the limit param's value is reached).",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response",
            "content": {
              "application/json": {
                "examples": {
                  "Default Example": {
                    "value": {
                      "items": [
                        {
                          "image": {
                            "altText": "Product image alt text",
                            "height": 100,
                            "url": "https://example.com/absolute-url-to-image",
                            "width": 100
                          },
                          "shortName": "Product Short Name",
                          "sku": "SKU-ABC-123"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "No `skus` query param value provided",
            "content": {
              "application/json": {
                "examples": {
                  "Default Example": {
                    "value": {
                      "error": "No SKUs provided"
                    }
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    },
    "/api/nextjs-routes/whats-new": {
      "get": {
        "summary": "Content for What's New tab in Cloud",
        "description": "Fetches both regular blog articles and featured items for the What's New tab in Cloud.",
        "operationId": "getWhatsNew",
        "tags": ["What's New"],
        "parameters": [
          {
            "name": "featuredLimit",
            "in": "query",
            "description": "Maximum number of featured carousel items to return.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 100
            }
          },
          {
            "name": "featuredSkip",
            "in": "query",
            "description": "Number of featured carousel items to skip. Useful for pagination.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "featuredTaxonomy",
            "in": "query",
            "description": "Comma-separated list of taxonomy concept IDs to filter featured carousel items. If not provided, returns all featured items.\n\nAccepted Blog Type IDs:\n- 371lGNEo6zQBe0AfcfW6SH: New & Noteworthy\n- 5VNF25v51E0MLc6ARgVRrT: Product Announcements\n- 6TM2HPC0ZO4c3k3aoWY5xI: For Developers\n- 5MLrUkP3Ac8OiSPAb2R0aj: Events\n- 3EZvfabp7CpfgY4RqN8XKG: Tips & Tricks\n\nAccepted Subscription Level IDs:\nfree\nstarter\nprofessional\nbusiness\nenterprise\ngovernment",
            "required": false,
            "schema": {
              "type": "string",
              "example": "5VNF25v51E0MLc6ARgVRrT"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Maximum number of blog articles to return.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 10,
              "maximum": 100
            }
          },
          {
            "name": "locale",
            "in": "query",
            "description": "Content locale. Must be a valid supported locale.\n\nAccepted values:\n- en-US: English (United States) [default]\n- en-GB: English (United Kingdom)\n- fr: French\n- de: German\n- es: Spanish\n- it: Italian\n- ja-JP: Japanese\n- ko-KR: Korean",
            "required": false,
            "schema": {
              "type": "string",
              "default": "en-US",
              "example": "en-US"
            }
          },
          {
            "name": "preview",
            "in": "query",
            "description": "Whether to fetch draft/preview content from Contentful.",
            "required": false,
            "schema": {
              "type": "string",
              "enum": ["true", "false"],
              "default": "false"
            }
          },
          {
            "name": "skip",
            "in": "query",
            "description": "Number of blog articles to skip. Useful for pagination.",
            "required": false,
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "taxonomy",
            "in": "query",
            "description": "Comma-separated list of taxonomy concept IDs to filter blog articles. Defaults to 5VNF25v51E0MLc6ARgVRrT (Product Announcements) if not provided.\n\nAccepted Blog Type IDs:\n- 371lGNEo6zQBe0AfcfW6SH: New & Noteworthy\n- 5VNF25v51E0MLc6ARgVRrT: Product Announcements\n- 6TM2HPC0ZO4c3k3aoWY5xI: For Developers\n- 5MLrUkP3Ac8OiSPAb2R0aj: Events\n- 3EZvfabp7CpfgY4RqN8XKG: Tips & Tricks\n\nAccepted Subscription Level IDs:\nfree\nstarter\nprofessional\nbusiness\nenterprise\ngovernment",
            "required": false,
            "schema": {
              "type": "string",
              "example": "5VNF25v51E0MLc6ARgVRrT"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful response with articles and featured items",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "success": {
                      "type": "boolean",
                      "example": true
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "type": "array",
                          "description": "Blog article items",
                          "items": {
                            "type": "object",
                            "properties": {
                              "body": { "type": "string" },
                              "field_author_name": { "type": "string" },
                              "field_display_date": { "type": "string" },
                              "field_id": { "type": "string" },
                              "field_lifecycle": { "type": "string" },
                              "field_location": { "type": "string" },
                              "field_metatags": { "type": "string" },
                              "field_teaser_image": { "type": "string" },
                              "field_teaser_text": { "type": "string" },
                              "title": { "type": "string" },
                              "url": { "type": "string" }
                            }
                          }
                        },
                        "featuredItems": {
                          "type": "array",
                          "description": "Featured carousel items",
                          "items": {
                            "type": "object",
                            "properties": {
                              "description": { "type": "string" },
                              "id": { "type": "string" },
                              "image": {
                                "type": "object",
                                "properties": {
                                  "altText": { "type": "string" },
                                  "height": { "type": "string" },
                                  "url": { "type": "string" },
                                  "width": { "type": "string" }
                                }
                              },
                              "link": {
                                "type": "object",
                                "properties": {
                                  "title": { "type": "string" },
                                  "url": { "type": "string" }
                                }
                              },
                              "secondaryLink": {
                                "type": "object",
                                "properties": {
                                  "title": { "type": "string" },
                                  "url": { "type": "string" }
                                }
                              },
                              "taxonomy": {
                                "type": "array",
                                "items": { "type": "object" }
                              },
                              "title": { "type": "string" }
                            }
                          }
                        }
                      }
                    },
                    "errors": {
                      "type": "object"
                    },
                    "params": {
                      "type": "object",
                      "description": "The parsed and validated query parameters used for this request"
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid query parameters"
          },
          "500": {
            "description": "Internal server error"
          }
        }
      }
    }
  }
}
