{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/open-government-portugal/json-schema/open-government-portugal-topic-page-schema.json",
  "title": "TopicPage",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/open-government-portugal-me-api-openapi.yml#/components/schemas/TopicPage",
  "properties": {
    "data": {
      "description": "The page data",
      "items": {
        "$ref": "#/$defs/Topic"
      },
      "type": "array"
    },
    "next_page": {
      "description": "The next page URL if exists",
      "type": "string"
    },
    "page": {
      "description": "The current page",
      "minimum": 1,
      "type": "integer"
    },
    "page_size": {
      "description": "The page size used for pagination",
      "minimum": 0,
      "type": "integer"
    },
    "previous_page": {
      "description": "The previous page URL if exists",
      "type": "string"
    },
    "total": {
      "description": "The total paginated items",
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "page",
    "page_size",
    "total"
  ],
  "type": "object",
  "$defs": {
    "Badge__read": {
      "properties": {
        "kind": {
          "type": "string"
        }
      },
      "required": [
        "kind"
      ],
      "type": "object"
    },
    "GeoJSON": {
      "properties": {
        "coordinates": {
          "description": "The geometry as coordinates lists",
          "items": {
            "type": "object"
          },
          "type": "array"
        },
        "type": {
          "description": "The GeoJSON Type",
          "enum": [
            "Point",
            "LineString",
            "Polygon",
            "MultiPoint",
            "MultiLineString",
            "MultiPolygon"
          ],
          "type": "string"
        }
      },
      "required": [
        "coordinates",
        "type"
      ],
      "type": "object"
    },
    "OrganizationPermissions": {
      "properties": {
        "delete": {
          "type": "boolean"
        },
        "edit": {
          "type": "boolean"
        },
        "harvest": {
          "type": "boolean"
        },
        "members": {
          "type": "boolean"
        },
        "private": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "OrganizationReference_2": {
      "properties": {
        "acronym": {
          "description": "The organization acronym",
          "type": "string"
        },
        "badges": {
          "description": "The organization badges",
          "items": {
            "$ref": "#/$defs/Badge__read"
          },
          "readOnly": true,
          "type": "array"
        },
        "logo": {
          "description": "The organization logo URL",
          "type": "string"
        },
        "logo_thumbnail": {
          "description": "The organization logo thumbnail URL. This is the square (100x100) and cropped version.",
          "type": "string"
        },
        "name": {
          "description": "The organization name",
          "readOnly": true,
          "type": "string"
        },
        "page": {
          "description": "The organization web page URL",
          "readOnly": true,
          "type": "string"
        },
        "permissions": {
          "allOf": [
            {
              "$ref": "#/$defs/OrganizationPermissions"
            }
          ],
          "readOnly": true
        },
        "slug": {
          "description": "The organization string used as permalink",
          "readOnly": true,
          "type": "string"
        },
        "uri": {
          "description": "The API URI for this organization",
          "readOnly": true,
          "type": "string"
        }
      },
      "type": "object"
    },
    "SpatialCoverage": {
      "properties": {
        "geom": {
          "allOf": [
            {
              "$ref": "#/$defs/GeoJSON"
            }
          ],
          "description": "A multipolygon for the whole coverage"
        },
        "granularity": {
          "default": "other",
          "description": "The spatial/territorial granularity (full Granularity object if `X-Get-Datasets-Full-Objects` is set, ID of the granularity otherwise)",
          "type": "object"
        },
        "zones": {
          "description": "The covered zones identifiers (full GeoZone objects if `X-Get-Datasets-Full-Objects` is set, IDs of the zones otherwise)",
          "type": "object"
        }
      },
      "type": "object"
    },
    "Topic": {
      "properties": {
        "created_at": {
          "description": "The topic creation date",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "description": {
          "description": "The topic description in Markdown",
          "format": "markdown",
          "type": "string"
        },
        "elements": {
          "description": "Link to the topic elements",
          "type": "object"
        },
        "extras": {
          "description": "Extras attributes as key-value pairs",
          "type": "object"
        },
        "featured": {
          "description": "Is the topic featured",
          "type": "boolean"
        },
        "id": {
          "description": "The topic identifier",
          "type": "string"
        },
        "last_modified": {
          "description": "The topic last modification date",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "name": {
          "description": "The topic name",
          "type": "string"
        },
        "organization": {
          "allOf": [
            {
              "$ref": "#/$defs/OrganizationReference_2"
            }
          ],
          "description": "The publishing organization",
          "readOnly": true
        },
        "owner": {
          "allOf": [
            {
              "$ref": "#/$defs/UserReference_2"
            }
          ],
          "description": "The owner user",
          "readOnly": true
        },
        "private": {
          "description": "Is the topic private",
          "type": "boolean"
        },
        "slug": {
          "description": "The topic permalink string",
          "readOnly": true,
          "type": "string"
        },
        "spatial": {
          "allOf": [
            {
              "$ref": "#/$defs/SpatialCoverage"
            }
          ],
          "description": "The spatial coverage"
        },
        "tags": {
          "description": "Some keywords to help in search",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "uri": {
          "description": "The topic API URI",
          "readOnly": true,
          "type": "string"
        }
      },
      "required": [
        "description",
        "name",
        "tags"
      ],
      "type": "object"
    },
    "UserReference_2": {
      "properties": {
        "avatar": {
          "description": "The user avatar URL",
          "type": "string"
        },
        "avatar_thumbnail": {
          "description": "The user avatar thumbnail URL. This is the square (500x500) and cropped version.",
          "type": "string"
        },
        "first_name": {
          "description": "The user first name",
          "readOnly": true,
          "type": "string"
        },
        "last_name": {
          "description": "The user larst name",
          "readOnly": true,
          "type": "string"
        },
        "page": {
          "description": "The user web page URL",
          "readOnly": true,
          "type": "string"
        },
        "slug": {
          "description": "The user permalink string",
          "readOnly": true,
          "type": "string"
        },
        "uri": {
          "description": "The API URI for this user",
          "readOnly": true,
          "type": "string"
        }
      },
      "type": "object"
    }
  }
}