{
  "openapi": "3.1.0",
  "info": {
    "title": "Pluraterra public evidence API",
    "version": "1.0.0",
    "description": "Captured, attributed evidence with explicit periods and model/measurement limits. Read-only, unauthenticated; no live provider proxy."
  },
  "servers": [
    {
      "url": "https://www.pluraterra.com"
    }
  ],
  "paths": {
    "/api/v1/observations": {
      "get": {
        "operationId": "get_observations",
        "summary": "Query observations",
        "parameters": [
          {
            "name": "release",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "2026-11-02-r3"
            },
            "description": "Pin a captured release; omitted means current. Pagination links always pin the resolved release."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "enum": [
                "json",
                "csv"
              ],
              "default": "json"
            }
          },
          {
            "name": "country",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated ISO3 country codes; unknown or uncovered valid codes can return an empty page."
          },
          {
            "name": "indicator",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          },
          {
            "name": "provider",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          },
          {
            "name": "year",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 2000,
              "maximum": 2025
            },
            "description": "Annual endpoint; year is mutually exclusive with from/to. For survey means the endpoint is not an independent one-year observation."
          },
          {
            "name": "from",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 2000,
              "maximum": 2025
            },
            "description": "Annual endpoint; year is mutually exclusive with from/to. For survey means the endpoint is not an independent one-year observation."
          },
          {
            "name": "to",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 2000,
              "maximum": 2025
            },
            "description": "Annual endpoint; year is mutually exclusive with from/to. For survey means the endpoint is not an independent one-year observation."
          },
          {
            "name": "latest",
            "in": "query",
            "schema": {
              "type": "boolean"
            },
            "description": "Select the latest endpoint within all supplied filters, separately per country and indicator. Periods can differ."
          }
        ],
        "responses": {
          "200": {
            "description": "A stable page of captured evidence. Empty pages do not establish absence of a condition.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Envelope"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Observation"
                          }
                        }
                      }
                    }
                  ]
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "ETag unchanged"
          },
          "400": {
            "description": "Invalid filter, date range, format or pagination"
          },
          "404": {
            "description": "Unknown release or endpoint"
          },
          "503": {
            "description": "Snapshot unavailable"
          }
        }
      }
    },
    "/api/v1/households": {
      "get": {
        "operationId": "get_households",
        "summary": "Query households",
        "parameters": [
          {
            "name": "release",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "2026-11-02-r3"
            },
            "description": "Pin a captured release; omitted means current. Pagination links always pin the resolved release."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "enum": [
                "json",
                "csv"
              ],
              "default": "json"
            }
          },
          {
            "name": "country",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated ISO3 country codes; unknown or uncovered valid codes can return an empty page."
          },
          {
            "name": "scenario",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          },
          {
            "name": "year",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 2000,
              "maximum": 2025
            },
            "description": "Annual endpoint; year is mutually exclusive with from/to. For survey means the endpoint is not an independent one-year observation."
          }
        ],
        "responses": {
          "200": {
            "description": "A stable page of captured evidence. Empty pages do not establish absence of a condition.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Envelope"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Household"
                          }
                        }
                      }
                    }
                  ]
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "ETag unchanged"
          },
          "400": {
            "description": "Invalid filter, date range, format or pagination"
          },
          "404": {
            "description": "Unknown release or endpoint"
          },
          "503": {
            "description": "Snapshot unavailable"
          }
        }
      }
    },
    "/api/v1/regions": {
      "get": {
        "operationId": "get_regions",
        "summary": "Query regions",
        "parameters": [
          {
            "name": "release",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "2026-11-02-r3"
            },
            "description": "Pin a captured release; omitted means current. Pagination links always pin the resolved release."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "enum": [
                "json",
                "csv"
              ],
              "default": "json"
            }
          },
          {
            "name": "country",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated ISO3 country codes; unknown or uncovered valid codes can return an empty page."
          },
          {
            "name": "geo",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          },
          {
            "name": "indicator",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          },
          {
            "name": "year",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 2000,
              "maximum": 2025
            },
            "description": "Annual endpoint; year is mutually exclusive with from/to. For survey means the endpoint is not an independent one-year observation."
          }
        ],
        "responses": {
          "200": {
            "description": "A stable page of captured evidence. Empty pages do not establish absence of a condition.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Envelope"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Region"
                          }
                        }
                      }
                    }
                  ]
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "ETag unchanged"
          },
          "400": {
            "description": "Invalid filter, date range, format or pagination"
          },
          "404": {
            "description": "Unknown release or endpoint"
          },
          "503": {
            "description": "Snapshot unavailable"
          }
        }
      }
    },
    "/api/v1/financial-strain": {
      "get": {
        "operationId": "get_financial_strain",
        "summary": "Query financial-strain",
        "parameters": [
          {
            "name": "release",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "2026-11-02-r3"
            },
            "description": "Pin a captured release; omitted means current. Pagination links always pin the resolved release."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "enum": [
                "json",
                "csv"
              ],
              "default": "json"
            }
          },
          {
            "name": "country",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated ISO3 country codes; unknown or uncovered valid codes can return an empty page."
          },
          {
            "name": "household",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          },
          {
            "name": "income_group",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          },
          {
            "name": "year",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 2000,
              "maximum": 2025
            },
            "description": "Annual endpoint; year is mutually exclusive with from/to. For survey means the endpoint is not an independent one-year observation."
          }
        ],
        "responses": {
          "200": {
            "description": "A stable page of captured evidence. Empty pages do not establish absence of a condition.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Envelope"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/FinancialStrain"
                          }
                        }
                      }
                    }
                  ]
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "ETag unchanged"
          },
          "400": {
            "description": "Invalid filter, date range, format or pagination"
          },
          "404": {
            "description": "Unknown release or endpoint"
          },
          "503": {
            "description": "Snapshot unavailable"
          }
        }
      }
    },
    "/api/v1/passport-routes": {
      "get": {
        "operationId": "get_passport_routes",
        "summary": "Query passport-routes",
        "parameters": [
          {
            "name": "release",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "2026-11-02-r3"
            },
            "description": "Pin a captured release; omitted means current. Pagination links always pin the resolved release."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "enum": [
                "json",
                "csv"
              ],
              "default": "json"
            }
          },
          {
            "name": "origin",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated ISO3 country codes; unknown or uncovered valid codes can return an empty page."
          },
          {
            "name": "destination",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated ISO3 country codes; unknown or uncovered valid codes can return an empty page."
          },
          {
            "name": "category",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          }
        ],
        "responses": {
          "200": {
            "description": "A stable page of captured evidence. Empty pages do not establish absence of a condition.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Envelope"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/PassportRoute"
                          }
                        }
                      }
                    }
                  ]
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "ETag unchanged"
          },
          "400": {
            "description": "Invalid filter, date range, format or pagination"
          },
          "404": {
            "description": "Unknown release or endpoint"
          },
          "503": {
            "description": "Snapshot unavailable"
          }
        }
      }
    },
    "/api/v1/rankings": {
      "get": {
        "operationId": "get_rankings",
        "summary": "Query rankings",
        "parameters": [
          {
            "name": "release",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "2026-11-02-r3"
            },
            "description": "Pin a captured release; omitted means current. Pagination links always pin the resolved release."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "enum": [
                "json",
                "csv"
              ],
              "default": "json"
            }
          },
          {
            "name": "country",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated ISO3 country codes; unknown or uncovered valid codes can return an empty page."
          }
        ],
        "responses": {
          "200": {
            "description": "A stable page of captured evidence. Empty pages do not establish absence of a condition.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Envelope"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Ranking"
                          }
                        }
                      }
                    }
                  ]
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "ETag unchanged"
          },
          "400": {
            "description": "Invalid filter, date range, format or pagination"
          },
          "404": {
            "description": "Unknown release or endpoint"
          },
          "503": {
            "description": "Snapshot unavailable"
          }
        }
      }
    },
    "/api/v1/robustness": {
      "get": {
        "operationId": "get_robustness",
        "summary": "Query robustness",
        "parameters": [
          {
            "name": "release",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "2026-11-02-r3"
            },
            "description": "Pin a captured release; omitted means current. Pagination links always pin the resolved release."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "enum": [
                "json",
                "csv"
              ],
              "default": "json"
            }
          },
          {
            "name": "country",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated ISO3 country codes; unknown or uncovered valid codes can return an empty page."
          }
        ],
        "responses": {
          "200": {
            "description": "A stable page of captured evidence. Empty pages do not establish absence of a condition.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Envelope"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Robustness"
                          }
                        }
                      }
                    }
                  ]
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "ETag unchanged"
          },
          "400": {
            "description": "Invalid filter, date range, format or pagination"
          },
          "404": {
            "description": "Unknown release or endpoint"
          },
          "503": {
            "description": "Snapshot unavailable"
          }
        }
      }
    },
    "/api/v1/countries": {
      "get": {
        "operationId": "get_countries",
        "summary": "Query countries",
        "parameters": [
          {
            "name": "release",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "2026-11-02-r3"
            },
            "description": "Pin a captured release; omitted means current. Pagination links always pin the resolved release."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "enum": [
                "json",
                "csv"
              ],
              "default": "json"
            }
          },
          {
            "name": "country",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated ISO3 country codes; unknown or uncovered valid codes can return an empty page."
          },
          {
            "name": "region",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          }
        ],
        "responses": {
          "200": {
            "description": "A stable page of captured evidence. Empty pages do not establish absence of a condition.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Envelope"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Country"
                          }
                        }
                      }
                    }
                  ]
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "ETag unchanged"
          },
          "400": {
            "description": "Invalid filter, date range, format or pagination"
          },
          "404": {
            "description": "Unknown release or endpoint"
          },
          "503": {
            "description": "Snapshot unavailable"
          }
        }
      }
    },
    "/api/v1/indicators": {
      "get": {
        "operationId": "get_indicators",
        "summary": "Query indicators",
        "parameters": [
          {
            "name": "release",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "2026-11-02-r3"
            },
            "description": "Pin a captured release; omitted means current. Pagination links always pin the resolved release."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "enum": [
                "json",
                "csv"
              ],
              "default": "json"
            }
          },
          {
            "name": "indicator",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          },
          {
            "name": "provider",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          }
        ],
        "responses": {
          "200": {
            "description": "A stable page of captured evidence. Empty pages do not establish absence of a condition.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Envelope"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Indicator"
                          }
                        }
                      }
                    }
                  ]
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "ETag unchanged"
          },
          "400": {
            "description": "Invalid filter, date range, format or pagination"
          },
          "404": {
            "description": "Unknown release or endpoint"
          },
          "503": {
            "description": "Snapshot unavailable"
          }
        }
      }
    },
    "/api/v1/sources": {
      "get": {
        "operationId": "get_sources",
        "summary": "Query sources",
        "parameters": [
          {
            "name": "release",
            "in": "query",
            "schema": {
              "type": "string",
              "default": "2026-11-02-r3"
            },
            "description": "Pin a captured release; omitted means current. Pagination links always pin the resolved release."
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 1000,
              "default": 100
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0,
              "default": 0
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "enum": [
                "json",
                "csv"
              ],
              "default": "json"
            }
          },
          {
            "name": "id",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          },
          {
            "name": "area",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated exact source identifiers where applicable."
          }
        ],
        "responses": {
          "200": {
            "description": "A stable page of captured evidence. Empty pages do not establish absence of a condition.",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/Envelope"
                    },
                    {
                      "properties": {
                        "data": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/Source"
                          }
                        }
                      }
                    }
                  ]
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "304": {
            "description": "ETag unchanged"
          },
          "400": {
            "description": "Invalid filter, date range, format or pagination"
          },
          "404": {
            "description": "Unknown release or endpoint"
          },
          "503": {
            "description": "Snapshot unavailable"
          }
        }
      }
    },
    "/api/v1/catalog": {
      "get": {
        "operationId": "get_catalog",
        "summary": "Discover datasets, immutable snapshots, hashes, source terms and query endpoints",
        "parameters": [
          {
            "name": "release",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Search dataset metadata."
          }
        ],
        "responses": {
          "200": {
            "description": "Dataset catalogue"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Observation": {
        "type": "object",
        "required": [
          "country",
          "country_name",
          "indicator",
          "value",
          "unit",
          "year_end",
          "period_start",
          "period_end",
          "provider",
          "source_url",
          "observation_type",
          "interval"
        ],
        "properties": {
          "country": {
            "type": "string",
            "pattern": "^[A-Z]{3}$"
          },
          "country_name": {
            "type": "string"
          },
          "indicator": {
            "type": "string"
          },
          "source_code": {
            "type": "string"
          },
          "value": {
            "type": "number"
          },
          "unit": {
            "type": "string"
          },
          "year_end": {
            "type": "integer"
          },
          "period_start": {
            "type": "integer"
          },
          "period_end": {
            "type": "integer"
          },
          "period_type": {
            "enum": [
              "annual",
              "three_year_mean"
            ]
          },
          "dimensions": {
            "type": "object"
          },
          "observation_type": {
            "type": "string"
          },
          "interval": {
            "type": [
              "object",
              "null"
            ],
            "description": "Published source interval where ingested; null means unavailable, not zero error."
          },
          "source_status": {
            "type": "null",
            "description": "Not uniformly ingested; consult original source."
          },
          "provider": {
            "type": "string"
          },
          "source_url": {
            "type": "string",
            "format": "uri"
          },
          "retrieved_on": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "Envelope": {
        "type": "object",
        "required": [
          "meta",
          "data",
          "links"
        ],
        "properties": {
          "meta": {
            "type": "object",
            "required": [
              "dataset",
              "release",
              "total",
              "count",
              "limit",
              "offset",
              "snapshot_sha256",
              "limitations",
              "reuse"
            ]
          },
          "data": {
            "type": "array",
            "items": {}
          },
          "links": {
            "type": "object",
            "required": [
              "self",
              "next",
              "previous",
              "catalog",
              "documentation"
            ]
          }
        }
      },
      "Country": {
        "type": "object",
        "required": [
          "country",
          "name",
          "region"
        ],
        "properties": {
          "country": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "region": {
            "type": "string"
          }
        }
      },
      "Indicator": {
        "type": "object",
        "required": [
          "indicator",
          "unit",
          "provider",
          "source"
        ],
        "properties": {
          "indicator": {
            "type": "string"
          },
          "unit": {
            "type": "string"
          },
          "provider": {
            "type": "string"
          },
          "source": {
            "type": "string",
            "format": "uri"
          },
          "assessment": {
            "type": [
              "object",
              "null"
            ]
          }
        }
      },
      "Source": {
        "type": "object",
        "required": [
          "id",
          "name",
          "url",
          "access"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "access": {
            "type": "string"
          },
          "checked": {
            "type": "string"
          }
        }
      },
      "Household": {
        "type": "object",
        "required": [
          "country",
          "household_type",
          "principal",
          "spouse",
          "year",
          "values",
          "scenario"
        ],
        "properties": {
          "country": {
            "type": "string"
          },
          "household_type": {
            "type": "string"
          },
          "principal": {
            "type": "string"
          },
          "spouse": {
            "type": "string"
          },
          "scenario": {
            "type": [
              "string",
              "null"
            ]
          },
          "year": {
            "type": "integer"
          },
          "values": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            },
            "description": "Keys combine source measure and unit codes. Dataset metadata provides definitions; flags are retained separately."
          },
          "flags": {
            "type": "object"
          }
        }
      },
      "Region": {
        "type": "object",
        "required": [
          "id",
          "name",
          "country",
          "year",
          "values",
          "units",
          "provider"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "year": {
            "type": "integer"
          },
          "values": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          },
          "units": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "flags": {
            "type": "object"
          },
          "provider": {
            "type": "string"
          }
        }
      },
      "FinancialStrain": {
        "type": "object",
        "required": [
          "country",
          "household",
          "income_group",
          "value",
          "year"
        ],
        "properties": {
          "country": {
            "type": "string"
          },
          "household": {
            "type": "string"
          },
          "income_group": {
            "type": "string"
          },
          "value": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "year": {
            "type": "integer"
          },
          "source_status": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "PassportRoute": {
        "type": "object",
        "required": [
          "origin",
          "destination",
          "category",
          "route",
          "residence",
          "source_url",
          "checked"
        ],
        "properties": {
          "origin": {
            "type": "string"
          },
          "destination": {
            "type": "string"
          },
          "category": {
            "enum": [
              "work_and_residence_right",
              "conditional_visa_route",
              "conditional_residence_application"
            ]
          },
          "route": {
            "type": "string"
          },
          "residence": {
            "type": "string"
          },
          "work": {
            "type": "string"
          },
          "citizenship_scope": {
            "type": "string"
          },
          "source_url": {
            "type": "string",
            "format": "uri"
          },
          "checked": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "Ranking": {
        "type": "object",
        "required": [
          "id",
          "name",
          "scores",
          "totals",
          "ranks"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "scores": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "minItems": 5,
            "maxItems": 5
          },
          "totals": {
            "type": "object",
            "additionalProperties": {
              "type": "number"
            }
          },
          "ranks": {
            "type": "object",
            "additionalProperties": {
              "type": "integer"
            }
          },
          "raw": {
            "type": "object"
          }
        }
      },
      "Robustness": {
        "type": "object",
        "required": [
          "country",
          "best",
          "worst",
          "histogram"
        ],
        "properties": {
          "country": {
            "type": "string"
          },
          "best": {
            "type": "integer",
            "minimum": 1
          },
          "worst": {
            "type": "integer",
            "minimum": 1
          },
          "histogram": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "minimum": 1
            }
          }
        }
      }
    }
  }
}