{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/open-government-portugal/json-schema/open-government-portugal-post-page-schema.json",
  "title": "PostPage",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/open-government-portugal-posts-api-openapi.yml#/components/schemas/PostPage",
  "properties": {
    "data": {
      "description": "The page data",
      "items": {
        "$ref": "#/$defs/Post__read"
      },
      "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": {
    "AccessAudience__read": {
      "properties": {
        "condition": {
          "enum": [
            "yes",
            "no",
            "under_condition"
          ],
          "type": "string"
        },
        "role": {
          "enum": [
            "local_authority_and_administration",
            "company_and_association",
            "private"
          ],
          "type": "string"
        }
      },
      "type": "object"
    },
    "Badge__read": {
      "properties": {
        "kind": {
          "type": "string"
        }
      },
      "required": [
        "kind"
      ],
      "type": "object"
    },
    "BaseReference": {
      "properties": {
        "class": {
          "description": "The object class",
          "type": "string"
        },
        "id": {
          "description": "The object unique identifier",
          "type": "string"
        }
      },
      "required": [
        "class",
        "id"
      ],
      "type": "object"
    },
    "Checksum": {
      "properties": {
        "type": {
          "default": "sha1",
          "description": "The hashing algorithm used to compute the checksum",
          "enum": [
            "sha1",
            "sha2",
            "sha256",
            "md5",
            "crc"
          ],
          "type": "string"
        },
        "value": {
          "description": "The resulting checksum/hash",
          "type": "string"
        }
      },
      "required": [
        "value"
      ],
      "type": "object"
    },
    "CommunityResource": {
      "allOf": [
        {
          "$ref": "#/$defs/Resource"
        },
        {
          "properties": {
            "dataset": {
              "allOf": [
                {
                  "$ref": "#/$defs/DatasetReference"
                }
              ],
              "description": "Reference to the associated dataset"
            },
            "organization": {
              "allOf": [
                {
                  "$ref": "#/$defs/OrganizationReference"
                }
              ],
              "description": "The producer organization"
            },
            "owner": {
              "allOf": [
                {
                  "$ref": "#/$defs/UserReference"
                }
              ],
              "description": "The user information"
            },
            "permissions": {
              "$ref": "#/$defs/DatasetPermissions"
            }
          },
          "type": "object"
        }
      ]
    },
    "ContactPoint__read": {
      "properties": {
        "contact_form": {
          "type": "string"
        },
        "email": {
          "maxLength": 255,
          "type": "string"
        },
        "id": {
          "readOnly": true,
          "type": "string"
        },
        "name": {
          "maxLength": 255,
          "type": "string"
        },
        "organization": {
          "allOf": [
            {
              "$ref": "#/$defs/OrganizationReference"
            }
          ],
          "description": "Only present if owner is not set. Can only be set to an organization of the current authenticated user."
        },
        "owner": {
          "allOf": [
            {
              "$ref": "#/$defs/UserReference"
            }
          ],
          "description": "Only present if organization is not set. Can only be set to the current authenticated user."
        },
        "role": {
          "enum": [
            "contact",
            "creator",
            "publisher",
            "rightsHolder",
            "custodian",
            "distributor",
            "originator",
            "principalInvestigator",
            "processor",
            "resourceProvider",
            "user"
          ],
          "type": "string"
        }
      },
      "required": [
        "id",
        "name",
        "role"
      ],
      "type": "object",
      "x-mask": "{id,name,email,contact_form,role}"
    },
    "Dataset": {
      "properties": {
        "access_audiences": {
          "items": {
            "$ref": "#/$defs/AccessAudience__read"
          },
          "type": "array"
        },
        "access_type": {
          "type": "string"
        },
        "access_type_reason": {
          "type": "string"
        },
        "access_type_reason_category": {
          "type": "string"
        },
        "acronym": {
          "description": "An optional dataset acronym",
          "type": "string"
        },
        "archived": {
          "description": "The archival date if archived",
          "format": "date-time",
          "type": "string"
        },
        "authorization_request_url": {
          "type": "string"
        },
        "badges": {
          "description": "The dataset badges",
          "items": {
            "$ref": "#/$defs/Badge__read"
          },
          "readOnly": true,
          "type": "array"
        },
        "community_resources": {
          "items": {
            "allOf": [
              {
                "$ref": "#/$defs/CommunityResource"
              }
            ],
            "description": "The dataset community submitted resources"
          },
          "type": "array"
        },
        "contact_points": {
          "items": {
            "allOf": [
              {
                "$ref": "#/$defs/ContactPoint__read"
              }
            ],
            "description": "The dataset contact points"
          },
          "type": "array"
        },
        "created_at": {
          "description": "This date is computed between harvested creation date if any and site's internal creation date",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "deleted": {
          "description": "The deletion date if deleted",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "description": {
          "description": "The dataset description in markdown",
          "format": "markdown",
          "type": "string"
        },
        "description_short": {
          "description": "The dataset short description",
          "type": "string"
        },
        "extras": {
          "description": "Extras attributes as key-value pairs",
          "type": "object"
        },
        "featured": {
          "description": "Is the dataset featured",
          "type": "boolean"
        },
        "frequency": {
          "default": "unknown",
          "description": "The update frequency",
          "enum": [
            "continuous",
            "oneMinute",
            "fiveMinutes",
            "tenMinutes",
            "fifteenMinutes",
            "thirtyMinutes",
            "hourly",
            "bihourly",
            "trihourly",
            "twelveHours",
            "severalTimesADay",
            "threeTimesADay",
            "semidaily",
            "daily",
            "fiveTimesAWeek",
            "threeTimesAWeek",
            "semiweekly",
            "weekly",
            "biweekly",
            "threeTimesAMonth",
            "semimonthly",
            "monthly",
            "bimonthly",
            "quarterly",
            "threeTimesAYear",
            "semiannual",
            "annual",
            "biennial",
            "triennial",
            "quadrennial",
            "quinquennial",
            "decennial",
            "bidecennial",
            "tridecennial",
            "punctual",
            "irregular",
            "never",
            "notPlanned",
            "other",
            "unknown"
          ],
          "type": "string"
        },
        "frequency_date": {
          "description": "Next expected update date, you will be notified once that date is reached.",
          "format": "date-time",
          "type": "string"
        },
        "harvest": {
          "allOf": [
            {
              "$ref": "#/$defs/HarvestDatasetMetadata"
            }
          ],
          "description": "Dataset harvest metadata attributes",
          "readOnly": true
        },
        "id": {
          "description": "The dataset identifier",
          "readOnly": true,
          "type": "string"
        },
        "internal": {
          "allOf": [
            {
              "$ref": "#/$defs/DatasetInternals"
            }
          ],
          "description": "Site internal and specific object's data",
          "readOnly": true
        },
        "last_modified": {
          "description": "The dataset last modification date",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "last_update": {
          "description": "The resources last modification date",
          "format": "date-time",
          "type": "string"
        },
        "license": {
          "default": "notspecified",
          "description": "The dataset license",
          "type": "string"
        },
        "license_title": {
          "default": "License Not Specified",
          "description": "The dataset license human-readable title",
          "type": "string"
        },
        "license_url": {
          "description": "The dataset license URL",
          "type": "string"
        },
        "metrics": {
          "description": "The dataset metrics",
          "type": "object"
        },
        "organization": {
          "allOf": [
            {
              "$ref": "#/$defs/OrganizationReference"
            }
          ],
          "description": "The producer organization"
        },
        "owner": {
          "allOf": [
            {
              "$ref": "#/$defs/UserReference"
            }
          ],
          "description": "The user information"
        },
        "page": {
          "description": "The dataset web page URL",
          "readOnly": true,
          "type": "string"
        },
        "permissions": {
          "$ref": "#/$defs/DatasetPermissions"
        },
        "private": {
          "description": "Is the dataset private to the owner or the organization",
          "type": "boolean"
        },
        "quality": {
          "description": "The dataset quality",
          "readOnly": true,
          "type": "object"
        },
        "resources": {
          "items": {
            "allOf": [
              {
                "$ref": "#/$defs/Resource"
              }
            ],
            "description": "The dataset resources"
          },
          "type": "array"
        },
        "schema": {
          "allOf": [
            {
              "$ref": "#/$defs/Schema"
            }
          ],
          "description": "Reference to the associated schema"
        },
        "slug": {
          "description": "The dataset permalink string",
          "readOnly": true,
          "type": "string"
        },
        "spatial": {
          "allOf": [
            {
              "$ref": "#/$defs/SpatialCoverage"
            }
          ],
          "description": "The spatial coverage"
        },
        "tags": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "temporal_coverage": {
          "allOf": [
            {
              "$ref": "#/$defs/TemporalCoverage"
            }
          ],
          "description": "The temporal coverage"
        },
        "title": {
          "description": "The dataset title",
          "type": "string"
        },
        "uri": {
          "description": "The API URI for this dataset",
          "readOnly": true,
          "type": "string"
        }
      },
      "required": [
        "created_at",
        "description",
        "frequency",
        "last_modified",
        "last_update",
        "title"
      ],
      "type": "object",
      "x-mask": "{id,title,acronym,slug,description,description_short,created_at,last_modified,deleted,private,tags,badges,resources,frequency,frequency_date,extras,harvest,metrics,organization,owner,schema,temporal_coverage,spatial,license,license_title,access_type,access_audiences,authorization_request_url,access_type_reason_category,access_type_reason,uri,page,last_update,archived,quality,internal,contact_points,featured,permissions}"
    },
    "DatasetInternals": {
      "properties": {
        "created_at_internal": {
          "description": "The dataset's internal creation date on the site",
          "format": "date-time",
          "type": "string"
        },
        "last_modified_internal": {
          "description": "The dataset's internal last modification date",
          "format": "date-time",
          "type": "string"
        }
      },
      "required": [
        "created_at_internal",
        "last_modified_internal"
      ],
      "type": "object"
    },
    "DatasetPermissions": {
      "properties": {
        "delete": {
          "type": "boolean"
        },
        "edit": {
          "type": "boolean"
        },
        "edit_resources": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "DatasetReference": {
      "allOf": [
        {
          "$ref": "#/$defs/BaseReference"
        },
        {
          "properties": {},
          "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"
    },
    "HarvestDatasetMetadata": {
      "properties": {
        "archived": {
          "description": "The reason the dataset has been archived",
          "type": "string"
        },
        "archived_at": {
          "description": "The archive date",
          "format": "date-time",
          "type": "string"
        },
        "backend": {
          "description": "Harvest backend used",
          "type": "string"
        },
        "created_at": {
          "description": "The dataset harvested creation date",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "dct_identifier": {
          "description": "The dct:identifier property from the harvested dataset",
          "type": "string"
        },
        "domain": {
          "description": "The harvested domain",
          "type": "string"
        },
        "issued_at": {
          "description": "The dataset harvested release date",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "last_update": {
          "description": "The last harvest date",
          "format": "date-time",
          "type": "string"
        },
        "modified_at": {
          "description": "The dataset harvest last modification date",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "remote_id": {
          "description": "The dataset remote id on the source portal",
          "type": "string"
        },
        "remote_url": {
          "description": "The dataset remote url",
          "type": "string"
        },
        "source_id": {
          "description": "The harvester id",
          "type": "string"
        },
        "uri": {
          "description": "The dataset harveted uri",
          "type": "string"
        }
      },
      "type": "object"
    },
    "HarvestResourceMetadata": {
      "properties": {
        "issued_at": {
          "description": "The resource harvested release date",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "modified_at": {
          "description": "The resource harvest last modification date",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "uri": {
          "description": "The resource harvest uri",
          "type": "string"
        }
      },
      "type": "object"
    },
    "OrganizationPermissions": {
      "properties": {
        "delete": {
          "type": "boolean"
        },
        "edit": {
          "type": "boolean"
        },
        "harvest": {
          "type": "boolean"
        },
        "members": {
          "type": "boolean"
        },
        "private": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "OrganizationReference": {
      "allOf": [
        {
          "$ref": "#/$defs/BaseReference"
        },
        {
          "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"
        }
      ]
    },
    "PagePermissions": {
      "properties": {
        "delete": {
          "type": "boolean"
        },
        "edit": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "Page__read": {
      "properties": {
        "blocs": {
          "items": {
            "type": "object"
          },
          "type": "array"
        },
        "created_at": {
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "readOnly": true,
          "type": "string"
        },
        "last_modified": {
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "organization": {
          "allOf": [
            {
              "$ref": "#/$defs/OrganizationReference"
            }
          ],
          "description": "Only present if owner is not set. Can only be set to an organization of the current authenticated user."
        },
        "owner": {
          "allOf": [
            {
              "$ref": "#/$defs/UserReference"
            }
          ],
          "description": "Only present if organization is not set. Can only be set to the current authenticated user."
        },
        "permissions": {
          "allOf": [
            {
              "$ref": "#/$defs/PagePermissions"
            }
          ],
          "readOnly": true
        }
      },
      "required": [
        "created_at",
        "id",
        "last_modified"
      ],
      "type": "object"
    },
    "Post__read": {
      "properties": {
        "body_type": {
          "enum": [
            "markdown",
            "html",
            "blocs"
          ],
          "type": "string"
        },
        "content": {
          "format": "markdown",
          "type": "string"
        },
        "content_as_page": {
          "allOf": [
            {
              "$ref": "#/$defs/Page__read"
            }
          ],
          "description": "Reference to a Page when body_type is 'blocs'"
        },
        "created_at": {
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "credit_to": {
          "description": "An optional credit line (associated to the image)",
          "type": "string"
        },
        "credit_url": {
          "description": "An optional link associated to the credits",
          "type": "string"
        },
        "datasets": {
          "description": "The post datasets",
          "items": {
            "allOf": [
              {
                "$ref": "#/$defs/Dataset"
              }
            ],
            "description": "The post datasets"
          },
          "type": "array"
        },
        "headline": {
          "type": "string"
        },
        "id": {
          "readOnly": true,
          "type": "string"
        },
        "image": {
          "description": "URL of the image",
          "readOnly": true,
          "type": "string"
        },
        "image_thumbnail": {
          "description": "URL of the cropped and squared image (100x100)",
          "readOnly": true,
          "type": "string"
        },
        "image_url": {
          "type": "string"
        },
        "kind": {
          "description": "Post kind (news or page)",
          "enum": [
            "news",
            "page"
          ],
          "type": "string"
        },
        "last_modified": {
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "name": {
          "maxLength": 255,
          "type": "string"
        },
        "owner": {
          "allOf": [
            {
              "$ref": "#/$defs/UserReference"
            }
          ],
          "description": "The owner user",
          "readOnly": true
        },
        "page": {
          "description": "The post web page URL",
          "readOnly": true,
          "type": "string"
        },
        "published": {
          "description": "The post publication date",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "reuses": {
          "description": "The post reuses",
          "items": {
            "allOf": [
              {
                "$ref": "#/$defs/ReuseReference"
              }
            ],
            "description": "The post reuses"
          },
          "type": "array"
        },
        "slug": {
          "maxLength": 255,
          "readOnly": true,
          "type": "string"
        },
        "tags": {
          "description": "Some keywords to help in search",
          "items": {
            "description": "Some keywords to help in search",
            "type": "string"
          },
          "type": "array"
        },
        "uri": {
          "description": "The API URI for this post",
          "readOnly": true,
          "type": "string"
        }
      },
      "required": [
        "created_at",
        "id",
        "last_modified",
        "name",
        "slug"
      ],
      "type": "object"
    },
    "Resource": {
      "properties": {
        "checksum": {
          "allOf": [
            {
              "$ref": "#/$defs/Checksum"
            }
          ],
          "description": "A checksum to validate file validity"
        },
        "created_at": {
          "description": "The resource creation date",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "description": {
          "description": "The resource markdown description",
          "format": "markdown",
          "type": "string"
        },
        "extras": {
          "description": "Extra attributes as key-value pairs",
          "type": "object"
        },
        "filesize": {
          "description": "The resource file size in bytes",
          "type": "integer"
        },
        "filetype": {
          "description": "Whether the resource is an uploaded file, a remote file or an API",
          "enum": [
            "file",
            "remote"
          ],
          "type": "string"
        },
        "format": {
          "description": "The resource format",
          "type": "string"
        },
        "harvest": {
          "allOf": [
            {
              "$ref": "#/$defs/HarvestResourceMetadata"
            }
          ],
          "description": "Harvest attributes metadata information",
          "readOnly": true
        },
        "id": {
          "description": "The resource unique ID",
          "readOnly": true,
          "type": "string"
        },
        "internal": {
          "allOf": [
            {
              "$ref": "#/$defs/ResourceInternals"
            }
          ],
          "description": "Site internal and specific object's data",
          "readOnly": true
        },
        "last_modified": {
          "description": "The resource last modification date",
          "format": "date-time",
          "readOnly": true,
          "type": "string"
        },
        "latest": {
          "description": "The permanent URL redirecting to the latest version of the resource. When the resource data is updated, the URL will change, the latest URL won't.",
          "readOnly": true,
          "type": "string"
        },
        "metrics": {
          "description": "The resource metrics",
          "readOnly": true,
          "type": "object"
        },
        "mime": {
          "description": "The resource mime type",
          "type": "string"
        },
        "preview_url": {
          "description": "An optional preview URL to be loaded as a standalone page (ie. iframe or new page)",
          "readOnly": true,
          "type": "string"
        },
        "schema": {
          "allOf": [
            {
              "$ref": "#/$defs/Schema"
            }
          ],
          "description": "Reference to the associated schema"
        },
        "title": {
          "description": "The resource title",
          "type": "string"
        },
        "type": {
          "description": "Resource type (documentation, API...)",
          "enum": [
            "main",
            "documentation",
            "update",
            "api",
            "code",
            "other"
          ],
          "type": "string"
        },
        "url": {
          "description": "The resource URL",
          "type": "string"
        }
      },
      "required": [
        "filetype",
        "format",
        "title",
        "type",
        "url"
      ],
      "type": "object"
    },
    "ResourceInternals": {
      "properties": {
        "created_at_internal": {
          "description": "The resource's internal creation date on the site",
          "format": "date-time",
          "type": "string"
        },
        "last_modified_internal": {
          "description": "The resource's internal last modification date",
          "format": "date-time",
          "type": "string"
        }
      },
      "required": [
        "created_at_internal",
        "last_modified_internal"
      ],
      "type": "object"
    },
    "ReuseReference": {
      "allOf": [
        {
          "$ref": "#/$defs/BaseReference"
        },
        {
          "properties": {
            "image": {
              "description": "URL of the image",
              "readOnly": true,
              "type": "string"
            },
            "image_thumbnail": {
              "description": "URL of the cropped and squared image (500x500)",
              "readOnly": true,
              "type": "string"
            },
            "page": {
              "description": "Link to the udata web page for this reuse",
              "readOnly": true,
              "type": "string"
            },
            "title": {
              "type": "string"
            },
            "uri": {
              "description": "Link to the API endpoint for this reuse",
              "readOnly": true,
              "type": "string"
            }
          },
          "required": [
            "title"
          ],
          "type": "object"
        }
      ]
    },
    "Schema": {
      "properties": {
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "version": {
          "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"
    },
    "TemporalCoverage": {
      "properties": {
        "end": {
          "description": "The temporal coverage end date",
          "format": "date-time",
          "type": "string"
        },
        "start": {
          "description": "The temporal coverage start date",
          "format": "date-time",
          "type": "string"
        }
      },
      "required": [
        "start"
      ],
      "type": "object"
    },
    "UserReference": {
      "allOf": [
        {
          "$ref": "#/$defs/BaseReference"
        },
        {
          "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"
        }
      ]
    }
  }
}