{
  "openapi": "3.1.0",
  "info": {
    "title": "Retail Brands API",
    "version": "1.7",
    "description": "Programmatic access to retail intelligence on brands, malls, mall operators and stores: evidence, data points, signals and scores.",
    "contact": {
      "url": "https://api.retailbrands.global"
    }
  },
  "servers": [
    {
      "url": "https://api.retailbrands.global/v1"
    }
  ],
  "tags": [
    {
      "name": "Brands",
      "description": "The brands we monitor: identity, ownership and the data behind them."
    },
    {
      "name": "Scores",
      "description": "The Retail Brands Score Index (RBSI) of a brand, its four dimensions, topic scores and history."
    },
    {
      "name": "Signals",
      "description": "Interpreted events on brands, derived from the evidence, as a feed you can filter and subscribe to."
    },
    {
      "name": "Data points",
      "description": "The catalogue of data points and the observed values for an entity, each with its evidence."
    },
    {
      "name": "Malls",
      "description": "Shopping centres: identity, size, operators and the brands trading in them."
    },
    {
      "name": "Operators",
      "description": "The owners and operators of malls: portfolios and tenant mix."
    },
    {
      "name": "Stores",
      "description": "A store is a brand in a place: reference data per store."
    }
  ],
  "paths": {
    "/brands": {
      "get": {
        "operationId": "listBrands",
        "tags": [
          "Brands"
        ],
        "summary": "List brands",
        "description": "Brands in the Index, most recently updated first. Combine filters; they narrow the list.\n\nMinimum access level: 1.",
        "x-access-level": 1,
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Search by name.",
            "schema": {
              "type": "string"
            },
            "example": "zara"
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "ISO 3166-1 alpha-2 country code. Repeat or comma-separate for several.",
            "schema": {
              "type": "string"
            },
            "example": "GB"
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Category name or slug. Repeat or comma-separate for several.",
            "schema": {
              "type": "string"
            },
            "example": "fashion"
          },
          {
            "name": "group",
            "in": "query",
            "required": false,
            "description": "Only brands of this group (group id or slug).",
            "schema": {
              "type": "string"
            },
            "example": "lvmh"
          },
          {
            "name": "updated_since",
            "in": "query",
            "required": false,
            "description": "Only items changed after this ISO 8601 date-time.",
            "schema": {
              "type": "string"
            },
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 100 (default 25).",
            "schema": {
              "type": "integer"
            },
            "example": "25"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The `next_cursor` of the previous page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "id": "zara",
                      "slug": "zara",
                      "name": "Zara",
                      "category": "Fashion",
                      "sub_category": "Womenswear",
                      "region": "Europe",
                      "hq": "Spain",
                      "countries": [
                        "ES",
                        "GB",
                        "FR"
                      ],
                      "updated_at": "2026-11-02T06:10:00Z",
                      "score": {
                        "rbsi": 7420,
                        "trend": "up"
                      }
                    }
                  ],
                  "next_cursor": "eyJvIjoyNX0",
                  "has_more": true
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/brands/{id}": {
      "get": {
        "operationId": "getBrand",
        "tags": [
          "Brands"
        ],
        "summary": "Get a brand",
        "description": "One brand with its identity, ownership and headline score.\n\nMinimum access level: 1.",
        "x-access-level": 1,
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identifier of the brand, as returned in `id`.",
            "schema": {
              "type": "string"
            },
            "example": "zara"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "id": "zara",
                  "slug": "zara",
                  "name": "Zara",
                  "category": "Fashion",
                  "sub_category": "Womenswear",
                  "region": "Europe",
                  "hq": "Spain",
                  "countries": [
                    "ES",
                    "GB",
                    "FR"
                  ],
                  "updated_at": "2026-11-02T06:10:00Z",
                  "score": {
                    "rbsi": 7420,
                    "previous": 7310,
                    "change": 110,
                    "trend": "up"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/brands/{id}/malls": {
      "get": {
        "operationId": "listBrandMalls",
        "tags": [
          "Brands"
        ],
        "summary": "Malls where a brand trades",
        "description": "The malls that list this brand as a tenant, with its store count in each.\n\nMinimum access level: 1.",
        "x-access-level": 1,
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identifier of the brand, as returned in `id`.",
            "schema": {
              "type": "string"
            },
            "example": "zara"
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "ISO 3166-1 alpha-2 country code. Repeat or comma-separate for several.",
            "schema": {
              "type": "string"
            },
            "example": "GB"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 100 (default 25).",
            "schema": {
              "type": "integer"
            },
            "example": "25"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The `next_cursor` of the previous page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "id": "liverpool-one",
                      "name": "Liverpool ONE",
                      "country": "GB",
                      "brands": {
                        "monitored": 39
                      },
                      "stores": 41
                    }
                  ],
                  "next_cursor": null,
                  "has_more": false
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/brands/{id}/score": {
      "get": {
        "operationId": "getBrandScore",
        "tags": [
          "Scores"
        ],
        "summary": "Get the score of a brand",
        "description": "The RBSI with its direction and confidence. At Level 2 the response includes the four dimensions; at Level 3 it also includes the drivers.\n\nMinimum access level: 1.",
        "x-access-level": 1,
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identifier of the brand, as returned in `id`.",
            "schema": {
              "type": "string"
            },
            "example": "zara"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "brand_id": "zara",
                  "rbsi": 7420,
                  "previous": 7310,
                  "change": 110,
                  "trend": "up",
                  "evaluated_at": "2026-11-02T06:10:00Z",
                  "dimensions": {
                    "strength": 7600,
                    "momentum": 7350,
                    "affinity": 7500,
                    "risk": 8100
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/brands/{id}/score/history": {
      "get": {
        "operationId": "getBrandScoreHistory",
        "tags": [
          "Scores"
        ],
        "summary": "Score history of a brand",
        "description": "The score over time, oldest first.\n\nMinimum access level: 2.",
        "x-access-level": 2,
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identifier of the brand, as returned in `id`.",
            "schema": {
              "type": "string"
            },
            "example": "zara"
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "Start date (ISO 8601).",
            "schema": {
              "type": "string"
            },
            "example": "2026-01-01"
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "End date (ISO 8601).",
            "schema": {
              "type": "string"
            },
            "example": "2026-11-01"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 100 (default 25).",
            "schema": {
              "type": "integer"
            },
            "example": "25"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The `next_cursor` of the previous page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "evaluated_at": "2026-10-26T06:10:00Z",
                      "rbsi": 7310
                    },
                    {
                      "evaluated_at": "2026-11-02T06:10:00Z",
                      "rbsi": 7420
                    }
                  ],
                  "next_cursor": null,
                  "has_more": false
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/brands/{id}/topics": {
      "get": {
        "operationId": "getBrandTopics",
        "tags": [
          "Scores"
        ],
        "summary": "Topic scores of a brand",
        "description": "One score and rank per topic (identity, people, distribution, finance and so on).\n\nMinimum access level: 2.",
        "x-access-level": 2,
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identifier of the brand, as returned in `id`.",
            "schema": {
              "type": "string"
            },
            "example": "zara"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "topic": "Distribution & Channel Strategy",
                      "score": 7800,
                      "rank": 12,
                      "of": 4210
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/signals": {
      "get": {
        "operationId": "listSignals",
        "tags": [
          "Signals"
        ],
        "summary": "List signals",
        "description": "Published signals, newest first, with the short answer and the names of the sources.\n\nMinimum access level: 1.",
        "x-access-level": 1,
        "parameters": [
          {
            "name": "brand",
            "in": "query",
            "required": false,
            "description": "Brand id or slug.",
            "schema": {
              "type": "string"
            },
            "example": "zara"
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Category name or slug. Repeat or comma-separate for several.",
            "schema": {
              "type": "string"
            },
            "example": "fashion"
          },
          {
            "name": "since",
            "in": "query",
            "required": false,
            "description": "Only signals published on or after this date (ISO 8601).",
            "schema": {
              "type": "string"
            },
            "example": "2026-10-01"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 100 (default 25).",
            "schema": {
              "type": "integer"
            },
            "example": "25"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The `next_cursor` of the previous page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "id": "3f6c1e0a-5a52-4f0e-9d1c-8f7b2c9a1d44",
                      "brand_id": "zara",
                      "brand_name": "Zara",
                      "category": "Expansion & Growth",
                      "title": "Opens 12 new stores in the UK",
                      "summary": "Eleven of the openings are in shopping centres.",
                      "status": "Increasing",
                      "direction": "Accelerating",
                      "importance": "High",
                      "markets": [
                        "United Kingdom"
                      ],
                      "published_at": "2026-11-01",
                      "source_names": [
                        "Company press release"
                      ],
                      "source_count": 1
                    }
                  ],
                  "next_cursor": null,
                  "has_more": false
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/signals/{id}": {
      "get": {
        "operationId": "getSignal",
        "tags": [
          "Signals"
        ],
        "summary": "Get a signal",
        "description": "One signal with its sources.\n\nMinimum access level: 1.",
        "x-access-level": 1,
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identifier of the signal, as returned in `id`.",
            "schema": {
              "type": "string"
            },
            "example": "3f6c1e0a-5a52-4f0e-9d1c-8f7b2c9a1d44"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "id": "3f6c1e0a-5a52-4f0e-9d1c-8f7b2c9a1d44",
                  "brand_id": "zara",
                  "brand_name": "Zara",
                  "category": "Expansion & Growth",
                  "title": "Opens 12 new stores in the UK",
                  "summary": "Eleven of the openings are in shopping centres.",
                  "status": "Increasing",
                  "direction": "Accelerating",
                  "importance": "High",
                  "markets": [
                    "United Kingdom"
                  ],
                  "published_at": "2026-11-01",
                  "source_names": [
                    "Company press release"
                  ],
                  "source_count": 1
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/data-points": {
      "get": {
        "operationId": "listDataPoints",
        "tags": [
          "Data points"
        ],
        "summary": "The data point catalogue",
        "description": "Every data point the API can return: what it is, how it is acquired, the lowest level that includes it and how often it is refreshed.\n\nMinimum access level: 1.",
        "x-access-level": 1,
        "parameters": [
          {
            "name": "entity",
            "in": "query",
            "required": false,
            "description": "brand, mall, operator or store.",
            "schema": {
              "type": "string"
            },
            "example": "brand"
          },
          {
            "name": "topic",
            "in": "query",
            "required": false,
            "description": "Topic or group.",
            "schema": {
              "type": "string"
            },
            "example": "Distribution & Channel Strategy"
          },
          {
            "name": "method",
            "in": "query",
            "required": false,
            "description": "pulled, deducted or manual.",
            "schema": {
              "type": "string"
            },
            "example": "pulled"
          },
          {
            "name": "level",
            "in": "query",
            "required": false,
            "description": "Only data points included at this level or lower.",
            "schema": {
              "type": "integer"
            },
            "example": "2"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 100 (default 25).",
            "schema": {
              "type": "integer"
            },
            "example": "25"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The `next_cursor` of the previous page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "id": "B-RDP-412",
                      "api_slug": "brand.d10.malls_hosting_the_brand_count_countries",
                      "name": "Malls hosting the brand",
                      "entity": "brand",
                      "topic": "Distribution & Channel Strategy",
                      "method": "deducted",
                      "level": 2,
                      "refresh": "weekly",
                      "sensitivity": "normal"
                    }
                  ],
                  "next_cursor": null,
                  "has_more": false
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/brands/{id}/data-points": {
      "get": {
        "operationId": "listBrandDataPoints",
        "tags": [
          "Data points"
        ],
        "summary": "Data points of a brand",
        "description": "The observed values for a brand. Each value carries its method, confidence and freshness; at Level 3 also its evidence.\n\nMinimum access level: 2.",
        "x-access-level": 2,
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identifier of the brand, as returned in `id`.",
            "schema": {
              "type": "string"
            },
            "example": "zara"
          },
          {
            "name": "topic",
            "in": "query",
            "required": false,
            "description": "Topic or group.",
            "schema": {
              "type": "string"
            },
            "example": "Distribution & Channel Strategy"
          },
          {
            "name": "updated_since",
            "in": "query",
            "required": false,
            "description": "Only items changed after this ISO 8601 date-time.",
            "schema": {
              "type": "string"
            },
            "example": "2026-10-01T00:00:00Z"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 100 (default 25).",
            "schema": {
              "type": "integer"
            },
            "example": "25"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The `next_cursor` of the previous page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "data_point": "brand.d10.malls_hosting_the_brand_count_countries",
                      "value": 87,
                      "unit": "malls",
                      "method": "deducted",
                      "confidence": "medium",
                      "observed_at": "2026-10-28T00:00:00Z",
                      "verification_status": "unverified"
                    }
                  ],
                  "next_cursor": null,
                  "has_more": false
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/malls": {
      "get": {
        "operationId": "listMalls",
        "tags": [
          "Malls"
        ],
        "summary": "List malls",
        "description": "Shopping centres on record.\n\nMinimum access level: 1.",
        "x-access-level": 1,
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Search by name.",
            "schema": {
              "type": "string"
            },
            "example": "zara"
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "ISO 3166-1 alpha-2 country code. Repeat or comma-separate for several.",
            "schema": {
              "type": "string"
            },
            "example": "GB"
          },
          {
            "name": "operator",
            "in": "query",
            "required": false,
            "description": "Operator id or slug.",
            "schema": {
              "type": "string"
            },
            "example": "landsec"
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Shopping mall, Outlet mall or Retail park.",
            "schema": {
              "type": "string"
            },
            "example": "Shopping mall"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 100 (default 25).",
            "schema": {
              "type": "integer"
            },
            "example": "25"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The `next_cursor` of the previous page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "id": "liverpool-one",
                      "name": "Liverpool ONE",
                      "country": "GB",
                      "region": "Europe",
                      "type": "Shopping mall",
                      "gla_m2": 219377,
                      "operators": [
                        {
                          "id": "landsec",
                          "name": "Landsec"
                        }
                      ],
                      "brands": {
                        "monitored": 39
                      },
                      "stores": 41
                    }
                  ],
                  "next_cursor": null,
                  "has_more": false
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/malls/{id}": {
      "get": {
        "operationId": "getMall",
        "tags": [
          "Malls"
        ],
        "summary": "Get a mall",
        "description": "One mall with its operators and tenant counts.\n\nMinimum access level: 1.",
        "x-access-level": 1,
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identifier of the mall, as returned in `id`.",
            "schema": {
              "type": "string"
            },
            "example": "liverpool-one"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "id": "liverpool-one",
                  "name": "Liverpool ONE",
                  "country": "GB",
                  "region": "Europe",
                  "type": "Shopping mall",
                  "gla_m2": 219377,
                  "operators": [
                    {
                      "id": "landsec",
                      "name": "Landsec"
                    }
                  ],
                  "brands": {
                    "monitored": 39
                  },
                  "stores": 41,
                  "categories": [
                    "Fashion",
                    "Beauty"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/malls/{id}/tenants": {
      "get": {
        "operationId": "listMallTenants",
        "tags": [
          "Malls"
        ],
        "summary": "Tenants of a mall",
        "description": "The brands trading in the mall. A tenant that is not monitored yet has no `brand_id`.\n\nMinimum access level: 2.",
        "x-access-level": 2,
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identifier of the mall, as returned in `id`.",
            "schema": {
              "type": "string"
            },
            "example": "liverpool-one"
          },
          {
            "name": "category",
            "in": "query",
            "required": false,
            "description": "Category name or slug. Repeat or comma-separate for several.",
            "schema": {
              "type": "string"
            },
            "example": "fashion"
          },
          {
            "name": "monitored",
            "in": "query",
            "required": false,
            "description": "Only monitored brands (true) or only the others (false).",
            "schema": {
              "type": "boolean"
            },
            "example": "true"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 100 (default 25).",
            "schema": {
              "type": "integer"
            },
            "example": "25"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The `next_cursor` of the previous page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "name": "Zara",
                      "brand_id": "zara",
                      "category": "Fashion",
                      "monitored": true
                    },
                    {
                      "name": "Local Bakery",
                      "brand_id": null,
                      "category": "Eatery",
                      "monitored": false
                    }
                  ],
                  "next_cursor": null,
                  "has_more": false
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/operators": {
      "get": {
        "operationId": "listOperators",
        "tags": [
          "Operators"
        ],
        "summary": "List operators",
        "description": "Mall owners and operators with a published portfolio.\n\nMinimum access level: 1.",
        "x-access-level": 1,
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Search by name.",
            "schema": {
              "type": "string"
            },
            "example": "zara"
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "ISO 3166-1 alpha-2 country code. Repeat or comma-separate for several.",
            "schema": {
              "type": "string"
            },
            "example": "GB"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 100 (default 25).",
            "schema": {
              "type": "integer"
            },
            "example": "25"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The `next_cursor` of the previous page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "id": "landsec",
                      "slug": "landsec",
                      "name": "Landsec",
                      "website": "landsec.com",
                      "malls": 31,
                      "brands": {
                        "total": 667,
                        "monitored": 101
                      },
                      "stores": 140,
                      "countries": [
                        "GB"
                      ]
                    }
                  ],
                  "next_cursor": null,
                  "has_more": false
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/operators/{id}": {
      "get": {
        "operationId": "getOperator",
        "tags": [
          "Operators"
        ],
        "summary": "Get an operator",
        "description": "One operator with its profile and portfolio totals.\n\nMinimum access level: 1.",
        "x-access-level": 1,
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identifier of the operator, as returned in `id`.",
            "schema": {
              "type": "string"
            },
            "example": "landsec"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "id": "landsec",
                  "slug": "landsec",
                  "name": "Landsec",
                  "website": "landsec.com",
                  "malls": 31,
                  "brands": {
                    "total": 667,
                    "monitored": 101
                  },
                  "stores": 140,
                  "countries": [
                    "GB"
                  ],
                  "description": null,
                  "gla_m2": null,
                  "categories": [
                    "Fashion",
                    "Food & Beverage"
                  ]
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/operators/{id}/malls": {
      "get": {
        "operationId": "listOperatorMalls",
        "tags": [
          "Operators"
        ],
        "summary": "Malls of an operator",
        "description": "The operator's portfolio of malls.\n\nMinimum access level: 1.",
        "x-access-level": 1,
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identifier of the operator, as returned in `id`.",
            "schema": {
              "type": "string"
            },
            "example": "landsec"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 100 (default 25).",
            "schema": {
              "type": "integer"
            },
            "example": "25"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The `next_cursor` of the previous page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "id": "liverpool-one",
                      "name": "Liverpool ONE",
                      "country": "GB",
                      "brands": {
                        "monitored": 39
                      },
                      "stores": 41
                    }
                  ],
                  "next_cursor": null,
                  "has_more": false
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/stores": {
      "get": {
        "operationId": "listStores",
        "tags": [
          "Stores"
        ],
        "summary": "List stores",
        "description": "Stores of monitored brands.\n\nMinimum access level: 2.",
        "x-access-level": 2,
        "parameters": [
          {
            "name": "brand",
            "in": "query",
            "required": false,
            "description": "Brand id or slug.",
            "schema": {
              "type": "string"
            },
            "example": "zara"
          },
          {
            "name": "mall",
            "in": "query",
            "required": false,
            "description": "Mall id or slug.",
            "schema": {
              "type": "string"
            },
            "example": "liverpool-one"
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "ISO 3166-1 alpha-2 country code. Repeat or comma-separate for several.",
            "schema": {
              "type": "string"
            },
            "example": "GB"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Items per page, 1 to 100 (default 25).",
            "schema": {
              "type": "integer"
            },
            "example": "25"
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The `next_cursor` of the previous page.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "data": [
                    {
                      "id": "sto_4Vb9nMc",
                      "brand_id": "zara",
                      "mall_id": "liverpool-one",
                      "name": "Zara Liverpool ONE",
                      "address": "12 Paradise Street, Liverpool",
                      "country": "GB",
                      "status": "open"
                    }
                  ],
                  "next_cursor": null,
                  "has_more": false
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    },
    "/stores/{id}": {
      "get": {
        "operationId": "getStore",
        "tags": [
          "Stores"
        ],
        "summary": "Get a store",
        "description": "One store. Level 3 adds deduced figures (occupancy cost, conversion, traffic) with their confidence.\n\nMinimum access level: 2.",
        "x-access-level": 2,
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Identifier of the store, as returned in `id`.",
            "schema": {
              "type": "string"
            },
            "example": "sto_4Vb9nMc"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "example": {
                  "id": "sto_4Vb9nMc",
                  "brand_id": "zara",
                  "mall_id": "liverpool-one",
                  "name": "Zara Liverpool ONE",
                  "address": "12 Paradise Street, Liverpool",
                  "country": "GB",
                  "status": "open",
                  "size_m2": null
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Level required"
          },
          "404": {
            "description": "Not found"
          },
          "429": {
            "description": "Rate limited"
          }
        },
        "security": [
          {
            "bearerAuth": []
          }
        ]
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "description": "Your API key, sent as `Authorization: Bearer <key>`."
      }
    }
  }
}