{
    "openapi": "3.0.0",
    "info": {
        "title": "News Service API",
        "version": "1.0"
    },
    "paths": {
        "/api/articles/{id}/image": {
            "get": {
                "tags": [
                    "Articles"
                ],
                "description": "Get an article image from Altis API",
                "operationId": "getArticleImage",
                "parameters": [
                    {
                        "name": "src",
                        "in": "query",
                        "description": "Source key provided by the article.",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "region",
                        "in": "query",
                        "description": "The region the parent article was posted in",
                        "required": true,
                        "schema": {
                            "$ref": "#/components/schemas/RegionEnum"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "An article's featured image.",
                        "content": {
                            "image/*": {
                                "schema": {
                                    "type": "string",
                                    "format": "binary"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validation Error",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string",
                                            "example": "The region field must be at least 3 characters."
                                        },
                                        "errors": {
                                            "properties": {
                                                "src": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "src is invalid for some reason."
                                                    }
                                                },
                                                "region": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "region is invalid for some reason."
                                                    }
                                                }
                                            },
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "x-kong-cache-ttl": 0,
                "x-kong-entitlements": "require_any_of_product_permission_entitlements_by_region_query"
            }
        },
        "/api/articles": {
            "get": {
                "tags": [
                    "Articles"
                ],
                "description": "Get articles from altis api",
                "operationId": "getArticles",
                "parameters": [
                    {
                        "name": "region",
                        "in": "query",
                        "description": "Alpha-3 region",
                        "required": true,
                        "schema": {
                            "$ref": "#/components/schemas/RegionEnum"
                        }
                    },
                    {
                        "name": "keyword",
                        "in": "query",
                        "description": "A search term to look for within an article. (Title or Content)",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "sectors",
                        "in": "query",
                        "description": "Filter out articles under multiple sectors.",
                        "required": false,
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    },
                    {
                        "name": "subregions",
                        "in": "query",
                        "description": "Filter articles based on a child region ID that exists under the parent region code. Refer to regions endpoint for list of all available regions.",
                        "required": false,
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    },
                    {
                        "name": "products[]",
                        "in": "query",
                        "description": "Filter articles by product short codes (USA only; ignored for other regions). Values are intersected with the bearer token's USA product entitlements; codes not on the token are omitted from the filter.",
                        "required": false,
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string",
                                "enum": [
                                    "ABA",
                                    "CMA",
                                    "REA"
                                ]
                            }
                        }
                    },
                    {
                        "name": "asset_classes",
                        "in": "query",
                        "description": "Filter articles by asset class term IDs.",
                        "required": false,
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    },
                    {
                        "name": "topics",
                        "in": "query",
                        "description": "Filter articles by topic term IDs.",
                        "required": false,
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Bring back the selected page of your choosing.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "minimum": 1
                        }
                    },
                    {
                        "name": "per_page",
                        "in": "query",
                        "description": "Number of articles to return per page. Defaults to 10.",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "maximum": 40,
                            "minimum": 1
                        }
                    },
                    {
                        "name": "html",
                        "in": "query",
                        "description": "When 1, article content is returned as HTML and infographScripts are included. When 0 or omitted, content is returned as plain text. Use 0 or 1 (not true/false).",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "enum": [
                                0,
                                1
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Articles"
                    },
                    "424": {
                        "description": "There was a problem fetching from dependent API.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "There was an error with the request to dependent API.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "Your account is not entitled to any USA products for this request (no overlap between requested products and token entitlements, or no USA entitlements).",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "503": {
                        "description": "The service is temporarily unavailable.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validation Error",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string",
                                            "example": "The region field must be at least 3 characters."
                                        },
                                        "errors": {
                                            "properties": {
                                                "region": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "region is invalid for some reason."
                                                    }
                                                },
                                                "keyword": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "keyword is invalid for some reason."
                                                    }
                                                },
                                                "subregions": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "subregions is invalid for some reason."
                                                    }
                                                },
                                                "subregions.*": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "subregions.* is invalid for some reason."
                                                    }
                                                },
                                                "sectors": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "sectors is invalid for some reason."
                                                    }
                                                },
                                                "sectors.*": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "sectors.* is invalid for some reason."
                                                    }
                                                },
                                                "topics": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "topics is invalid for some reason."
                                                    }
                                                },
                                                "topics.*": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "topics.* is invalid for some reason."
                                                    }
                                                },
                                                "products": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "products is invalid for some reason."
                                                    }
                                                },
                                                "products.*": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "products.* is invalid for some reason."
                                                    }
                                                },
                                                "asset_classes": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "asset_classes is invalid for some reason."
                                                    }
                                                },
                                                "asset_classes.*": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "asset_classes.* is invalid for some reason."
                                                    }
                                                },
                                                "page": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "page is invalid for some reason."
                                                    }
                                                },
                                                "per_page": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "per_page is invalid for some reason."
                                                    }
                                                },
                                                "html": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "html is invalid for some reason."
                                                    }
                                                }
                                            },
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "x-kong-cache-ttl": 0,
                "x-kong-entitlements": "require_any_of_product_permission_entitlements_by_region_query"
            }
        },
        "/api/articles-preview": {
            "get": {
                "tags": [
                    "Articles"
                ],
                "description": "Get article previews from altis api. Accessible for any authenticated GS user - no products required.We must be able to afford this because previews return no sensitive data. This way /api/articlescan keep its strict kong entitlement rules",
                "operationId": "getArticlePreviews",
                "parameters": [
                    {
                        "name": "region",
                        "in": "query",
                        "description": "Alpha-3 region",
                        "required": true,
                        "schema": {
                            "$ref": "#/components/schemas/RegionEnum"
                        }
                    },
                    {
                        "name": "sectors",
                        "in": "query",
                        "description": "Filter previews under multiple sectors.",
                        "required": false,
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    },
                    {
                        "name": "subregions",
                        "in": "query",
                        "description": "Filter previews based on a child region ID that exists under the parent region code.",
                        "required": false,
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    },
                    {
                        "name": "products",
                        "in": "query",
                        "description": "Filter previews by product short codes (USA only; ignored for other regions). No entitlement intersection is applied — previews are open.",
                        "required": false,
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "string",
                                "enum": [
                                    "ABA",
                                    "CMA",
                                    "REA"
                                ]
                            }
                        }
                    },
                    {
                        "name": "asset_classes",
                        "in": "query",
                        "description": "Filter previews by asset class term IDs.",
                        "required": false,
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    },
                    {
                        "name": "topics",
                        "in": "query",
                        "description": "Filter previews by topic term IDs.",
                        "required": false,
                        "schema": {
                            "type": "array",
                            "items": {
                                "type": "integer"
                            }
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Bring back the selected page of your choosing.",
                        "required": false,
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/PreviewArticles"
                    },
                    "424": {
                        "description": "There was a problem fetching from dependent API.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "There was an error with the request to dependent API.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "503": {
                        "description": "The service is temporarily unavailable.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validation Error",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string",
                                            "example": "The region field must be at least 3 characters."
                                        },
                                        "errors": {
                                            "properties": {
                                                "region": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "region is invalid for some reason."
                                                    }
                                                },
                                                "keyword": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "keyword is invalid for some reason."
                                                    }
                                                },
                                                "subregions": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "subregions is invalid for some reason."
                                                    }
                                                },
                                                "subregions.*": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "subregions.* is invalid for some reason."
                                                    }
                                                },
                                                "sectors": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "sectors is invalid for some reason."
                                                    }
                                                },
                                                "sectors.*": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "sectors.* is invalid for some reason."
                                                    }
                                                },
                                                "topics": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "topics is invalid for some reason."
                                                    }
                                                },
                                                "topics.*": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "topics.* is invalid for some reason."
                                                    }
                                                },
                                                "products": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "products is invalid for some reason."
                                                    }
                                                },
                                                "products.*": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "products.* is invalid for some reason."
                                                    }
                                                },
                                                "asset_classes": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "asset_classes is invalid for some reason."
                                                    }
                                                },
                                                "asset_classes.*": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "asset_classes.* is invalid for some reason."
                                                    }
                                                },
                                                "page": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "page is invalid for some reason."
                                                    }
                                                },
                                                "per_page": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "per_page is invalid for some reason."
                                                    }
                                                },
                                                "html": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "html is invalid for some reason."
                                                    }
                                                }
                                            },
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "x-kong-cache-ttl": 3600,
                "x-kong-entitlements": "basic"
            }
        },
        "/api/articles/{id}": {
            "get": {
                "tags": [
                    "Articles"
                ],
                "description": "Get a single article from the api",
                "operationId": "getArticle",
                "parameters": [
                    {
                        "name": "id",
                        "in": "path",
                        "description": "The ID of the article to retrieve",
                        "required": true,
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "region",
                        "in": "query",
                        "description": "Alpha-3 region code of the article.",
                        "required": true,
                        "schema": {
                            "$ref": "#/components/schemas/RegionEnum"
                        }
                    },
                    {
                        "name": "html",
                        "in": "query",
                        "description": "When 1, article content is returned as HTML and infographScripts are included. When 0 or omitted, content is returned as plain text. Use 0 or 1 (not true/false).",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "enum": [
                                0,
                                1
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Article"
                    },
                    "424": {
                        "description": "There was a problem fetching from dependent API.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "There was an error with the request to dependent API.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "Your account is not entitled to any USA products for this request (no USA entitlements on token, or article product taxonomy does not overlap token entitlements).",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "503": {
                        "description": "The service is temporarily unavailable.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validation Error",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string",
                                            "example": "The region field must be at least 3 characters."
                                        },
                                        "errors": {
                                            "properties": {
                                                "region": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "region is invalid for some reason."
                                                    }
                                                },
                                                "html": {
                                                    "type": "array",
                                                    "items": {
                                                        "type": "string",
                                                        "example": "html is invalid for some reason."
                                                    }
                                                }
                                            },
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "x-kong-cache-ttl": 0,
                "x-kong-entitlements": "require_any_of_product_permission_entitlements_by_region_query"
            }
        },
        "/api/asset-classes": {
            "get": {
                "tags": [
                    "Asset Classes"
                ],
                "description": "Get Asset Classes from the Altis API",
                "operationId": "getAssetClasses",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/AssetClasses"
                    }
                },
                "x-kong-cache-ttl": 86400,
                "x-kong-entitlements": "require_any_of_product_entitlements"
            }
        },
        "/docs": {
            "get": {
                "tags": [
                    "Documentation"
                ],
                "description": "Miscellaneous documentation",
                "operationId": "getDocs",
                "responses": {
                    "200": {
                        "description": "Simple string"
                    }
                },
                "x-kong-cache-ttl": 0,
                "x-kong-entitlements": "none"
            }
        },
        "/api/documentation": {
            "get": {
                "tags": [
                    "Documentation"
                ],
                "description": "Miscellaneous documentation",
                "operationId": "getDocumentation",
                "responses": {
                    "200": {
                        "description": "Simple string"
                    }
                },
                "x-kong-cache-ttl": 0,
                "x-kong-entitlements": "none"
            }
        },
        "/api/ping": {
            "get": {
                "tags": [
                    "Health Checks"
                ],
                "description": "Check health",
                "operationId": "getPing",
                "responses": {
                    "200": {
                        "description": "Simple string"
                    }
                },
                "x-kong-cache-ttl": 0,
                "x-kong-entitlements": "none"
            }
        },
        "/api/regions": {
            "get": {
                "tags": [
                    "Regions"
                ],
                "description": "Available regions for filtering. Regions with parent: 0 are top level regions and cannot be used for subregion filtering.",
                "operationId": "getRegions",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Regions"
                    }
                },
                "x-kong-cache-ttl": 86400,
                "x-kong-entitlements": "require_any_of_product_entitlements"
            }
        },
        "/api/sectors": {
            "get": {
                "tags": [
                    "Sectors"
                ],
                "description": "Get Sectors from the Altis API",
                "operationId": "getSectors",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Sectors"
                    }
                },
                "x-kong-cache-ttl": 86400,
                "x-kong-entitlements": "require_any_of_product_entitlements"
            }
        },
        "/api/topics": {
            "get": {
                "tags": [
                    "Topics"
                ],
                "description": "Get Topics from the Altis API",
                "operationId": "getTopics",
                "responses": {
                    "200": {
                        "$ref": "#/components/responses/Topics"
                    }
                },
                "x-kong-cache-ttl": 86400,
                "x-kong-entitlements": "require_any_of_product_entitlements"
            }
        }
    },
    "components": {
        "schemas": {
            "RegionEnum": {
                "type": "string",
                "enum": [
                    "ASA",
                    "AUS",
                    "CAN",
                    "EUR",
                    "USA",
                    "UK"
                ]
            },
            "Writers": {
                "description": "Collection of writers.",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "link": {
                        "type": "string"
                    }
                },
                "type": "object"
            }
        },
        "responses": {
            "Article": {
                "description": "A transformed article",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "data": {
                                    "properties": {
                                        "id": {
                                            "type": "integer"
                                        },
                                        "primaryCategory": {
                                            "type": "string"
                                        },
                                        "gsNewsUrl": {
                                            "type": "string"
                                        },
                                        "title": {
                                            "type": "string"
                                        },
                                        "excerpt": {
                                            "type": "string"
                                        },
                                        "content": {
                                            "description": "The article content. New line separated or available as HTML when html=1.",
                                            "type": "string"
                                        },
                                        "featuredImage": {
                                            "type": "string"
                                        },
                                        "sector": {
                                            "type": "array",
                                            "items": {
                                                "type": "integer"
                                            }
                                        },
                                        "region": {
                                            "type": "array",
                                            "items": {
                                                "type": "integer"
                                            }
                                        },
                                        "products": {
                                            "type": "array",
                                            "items": {
                                                "type": "integer"
                                            }
                                        },
                                        "assetClasses": {
                                            "type": "array",
                                            "items": {
                                                "type": "integer"
                                            }
                                        },
                                        "topics": {
                                            "type": "array",
                                            "items": {
                                                "type": "integer"
                                            }
                                        },
                                        "writers": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/Writers"
                                            }
                                        },
                                        "infographScripts": {
                                            "description": "Scripts that enable the use of embedded infograph figures. Only returned when html=1.",
                                            "type": "array",
                                            "items": {
                                                "type": "string"
                                            }
                                        },
                                        "updatedAt": {
                                            "type": "string"
                                        },
                                        "createdAt": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            },
            "AssetClasses": {
                "description": "All Altis asset classes.",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "data": {
                                    "properties": {
                                        "id": {
                                            "type": "integer"
                                        },
                                        "name": {
                                            "type": "string"
                                        },
                                        "link": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            },
            "Articles": {
                "description": "An article with metadata and content",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "data": {
                                    "type": "array",
                                    "items": {
                                        "properties": {
                                            "id": {
                                                "type": "integer"
                                            },
                                            "primaryCategory": {
                                                "type": "string"
                                            },
                                            "gsApiUrl": {
                                                "type": "string"
                                            },
                                            "gsNewsUrl": {
                                                "type": "string"
                                            },
                                            "title": {
                                                "type": "string"
                                            },
                                            "featuredImage": {
                                                "type": "string"
                                            },
                                            "excerpt": {
                                                "type": "string"
                                            },
                                            "content": {
                                                "description": "The article content. New line separated or available as HTML when html=1.",
                                                "type": "string"
                                            },
                                            "sector": {
                                                "type": "array",
                                                "items": {
                                                    "type": "integer"
                                                }
                                            },
                                            "region": {
                                                "type": "array",
                                                "items": {
                                                    "type": "integer"
                                                }
                                            },
                                            "products": {
                                                "type": "array",
                                                "items": {
                                                    "type": "integer"
                                                }
                                            },
                                            "assetClasses": {
                                                "type": "array",
                                                "items": {
                                                    "type": "integer"
                                                }
                                            },
                                            "topics": {
                                                "type": "array",
                                                "items": {
                                                    "type": "integer"
                                                }
                                            },
                                            "infographScripts": {
                                                "description": "Scripts that enable the use of embedded infograph figures. Only returned when html=1.",
                                                "type": "array",
                                                "items": {
                                                    "type": "string"
                                                }
                                            },
                                            "updatedAt": {
                                                "type": "string"
                                            },
                                            "createdAt": {
                                                "type": "string"
                                            }
                                        },
                                        "type": "object"
                                    }
                                },
                                "meta": {
                                    "properties": {
                                        "current_page": {
                                            "type": "integer"
                                        },
                                        "per_page": {
                                            "type": "integer"
                                        },
                                        "total": {
                                            "description": "Total number of articles matching the query.",
                                            "type": "integer"
                                        },
                                        "total_pages": {
                                            "description": "Total number of pages available for the query.",
                                            "type": "integer"
                                        }
                                    },
                                    "type": "object"
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            },
            "PreviewArticles": {
                "description": "Article previews — non-sensitive metadata only (no entitlement required).",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "data": {
                                    "type": "array",
                                    "items": {
                                        "properties": {
                                            "id": {
                                                "description": "Preview projection of an article: non-sensitive metadata only.\n\nThis resource deliberately exposes nothing beyond a headline, a date and a\nlink out to GreenStreetNews. It is the structural guarantee behind the open\n/api/articles-preview endpoint — there is no code path here that can return\narticle bodies, excerpts, or taxonomy, regardless of request input.",
                                                "type": "integer"
                                            },
                                            "title": {
                                                "type": "string"
                                            },
                                            "gsNewsUrl": {
                                                "type": "string"
                                            },
                                            "createdAt": {
                                                "type": "string"
                                            }
                                        },
                                        "type": "object"
                                    }
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            },
            "Regions": {
                "description": "All Altis regions.",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "data": {
                                    "properties": {
                                        "id": {
                                            "type": "integer"
                                        },
                                        "parent": {
                                            "type": "integer"
                                        },
                                        "name": {
                                            "type": "string"
                                        },
                                        "link": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            },
            "Sectors": {
                "description": "All Altis sectors.",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "data": {
                                    "properties": {
                                        "id": {
                                            "type": "integer"
                                        },
                                        "name": {
                                            "type": "string"
                                        },
                                        "link": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            },
            "Topics": {
                "description": "All Altis topics.",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "data": {
                                    "properties": {
                                        "id": {
                                            "type": "integer"
                                        },
                                        "name": {
                                            "type": "string"
                                        },
                                        "link": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            }
        },
        "securitySchemes": {
            "bearerAuth": {
                "type": "http",
                "scheme": "bearer"
            }
        }
    },
    "security": [
        {
            "bearerAuth": []
        }
    ],
    "tags": [
        {
            "name": "Articles",
            "description": "Articles"
        },
        {
            "name": "Asset Classes",
            "description": "Asset Classes"
        },
        {
            "name": "Documentation",
            "description": "Documentation"
        },
        {
            "name": "Health Checks",
            "description": "Health Checks"
        },
        {
            "name": "Regions",
            "description": "Regions"
        },
        {
            "name": "Sectors",
            "description": "Sectors"
        },
        {
            "name": "Topics",
            "description": "Topics"
        }
    ]
}