{
  "openapi": "3.0.2",
  "info": {
    "title": "OPTIMADE API - Index meta-database",
    "description": "The [Open Databases Integration for Materials Design (OPTIMADE) consortium](https://www.optimade.org/) aims to make materials databases interoperational by developing a common REST API.\nThis is the \"special\" index meta-database.\n\nThis specification is generated using [`optimade-python-tools`](https://github.com/Materials-Consortia/optimade-python-tools/tree/v0.22.2) v0.22.2.",
    "version": "1.1.0"
  },
  "paths": {
    "/info": {
      "get": {
        "tags": [
          "Info"
        ],
        "summary": "Get Info",
        "operationId": "get_info_info_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/IndexInfoResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "553": {
            "description": "Version Not Supported",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/links": {
      "get": {
        "tags": [
          "Links"
        ],
        "summary": "Get Links",
        "operationId": "get_links_links_get",
        "parameters": [
          {
            "description": "A filter string, in the format described in section API Filtering Format Specification of the specification.",
            "required": false,
            "schema": {
              "title": "Filter",
              "type": "string",
              "description": "A filter string, in the format described in section API Filtering Format Specification of the specification.",
              "default": ""
            },
            "name": "filter",
            "in": "query"
          },
          {
            "description": "The output format requested (see section Response Format).\nDefaults to the format string 'json', which specifies the standard output format described in this specification.\nExample: `http://example.com/v1/structures?response_format=xml`",
            "required": false,
            "schema": {
              "title": "Response Format",
              "type": "string",
              "description": "The output format requested (see section Response Format).\nDefaults to the format string 'json', which specifies the standard output format described in this specification.\nExample: `http://example.com/v1/structures?response_format=xml`",
              "default": "json"
            },
            "name": "response_format",
            "in": "query"
          },
          {
            "description": "An email address of the user making the request.\nThe email SHOULD be that of a person and not an automatic system.\nExample: `http://example.com/v1/structures?email_address=user@example.com`",
            "required": false,
            "schema": {
              "title": "Email Address",
              "type": "string",
              "description": "An email address of the user making the request.\nThe email SHOULD be that of a person and not an automatic system.\nExample: `http://example.com/v1/structures?email_address=user@example.com`",
              "format": "email",
              "default": ""
            },
            "name": "email_address",
            "in": "query"
          },
          {
            "description": "A comma-delimited set of fields to be provided in the output.\nIf provided, these fields MUST be returned along with the REQUIRED fields.\nOther OPTIONAL fields MUST NOT be returned when this parameter is present.\nExample: `http://example.com/v1/structures?response_fields=last_modified,nsites`",
            "required": false,
            "schema": {
              "title": "Response Fields",
              "pattern": "([a-z_][a-z_0-9]*(,[a-z_][a-z_0-9]*)*)?",
              "type": "string",
              "description": "A comma-delimited set of fields to be provided in the output.\nIf provided, these fields MUST be returned along with the REQUIRED fields.\nOther OPTIONAL fields MUST NOT be returned when this parameter is present.\nExample: `http://example.com/v1/structures?response_fields=last_modified,nsites`",
              "default": ""
            },
            "name": "response_fields",
            "in": "query"
          },
          {
            "description": "If supporting sortable queries, an implementation MUST use the `sort` query parameter with format as specified by [JSON API 1.0](https://jsonapi.org/format/1.0/#fetching-sorting).\n\nAn implementation MAY support multiple sort fields for a single query.\nIf it does, it again MUST conform to the JSON API 1.0 specification.\n\nIf an implementation supports sorting for an entry listing endpoint, then the `/info/<entries>` endpoint MUST include, for each field name `<fieldname>` in its `data.properties.<fieldname>` response value that can be used for sorting, the key `sortable` with value `true`.\nIf a field name under an entry listing endpoint supporting sorting cannot be used for sorting, the server MUST either leave out the `sortable` key or set it equal to `false` for the specific field name.\nThe set of field names, with `sortable` equal to `true` are allowed to be used in the \"sort fields\" list according to its definition in the JSON API 1.0 specification.\nThe field `sortable` is in addition to each property description and other OPTIONAL fields.\nAn example is shown in the section Entry Listing Info Endpoints.",
            "required": false,
            "schema": {
              "title": "Sort",
              "pattern": "([a-z_][a-z_0-9]*(,[a-z_][a-z_0-9]*)*)?",
              "type": "string",
              "description": "If supporting sortable queries, an implementation MUST use the `sort` query parameter with format as specified by [JSON API 1.0](https://jsonapi.org/format/1.0/#fetching-sorting).\n\nAn implementation MAY support multiple sort fields for a single query.\nIf it does, it again MUST conform to the JSON API 1.0 specification.\n\nIf an implementation supports sorting for an entry listing endpoint, then the `/info/<entries>` endpoint MUST include, for each field name `<fieldname>` in its `data.properties.<fieldname>` response value that can be used for sorting, the key `sortable` with value `true`.\nIf a field name under an entry listing endpoint supporting sorting cannot be used for sorting, the server MUST either leave out the `sortable` key or set it equal to `false` for the specific field name.\nThe set of field names, with `sortable` equal to `true` are allowed to be used in the \"sort fields\" list according to its definition in the JSON API 1.0 specification.\nThe field `sortable` is in addition to each property description and other OPTIONAL fields.\nAn example is shown in the section Entry Listing Info Endpoints.",
              "default": ""
            },
            "name": "sort",
            "in": "query"
          },
          {
            "description": "Sets a numerical limit on the number of entries returned.\nSee [JSON API 1.0](https://jsonapi.org/format/1.0/#fetching-pagination).\nThe API implementation MUST return no more than the number specified.\nIt MAY return fewer.\nThe database MAY have a maximum limit and not accept larger numbers (in which case an error code -- 403 Forbidden -- MUST be returned).\nThe default limit value is up to the API implementation to decide.\nExample: `http://example.com/optimade/v1/structures?page_limit=100`",
            "required": false,
            "schema": {
              "title": "Page Limit",
              "minimum": 0.0,
              "type": "integer",
              "description": "Sets a numerical limit on the number of entries returned.\nSee [JSON API 1.0](https://jsonapi.org/format/1.0/#fetching-pagination).\nThe API implementation MUST return no more than the number specified.\nIt MAY return fewer.\nThe database MAY have a maximum limit and not accept larger numbers (in which case an error code -- 403 Forbidden -- MUST be returned).\nThe default limit value is up to the API implementation to decide.\nExample: `http://example.com/optimade/v1/structures?page_limit=100`",
              "default": 20
            },
            "name": "page_limit",
            "in": "query"
          },
          {
            "description": "RECOMMENDED for use with _offset-based_ pagination: using `page_offset` and `page_limit` is RECOMMENDED.\nExample: Skip 50 structures and fetch up to 100: `/structures?page_offset=50&page_limit=100`.",
            "required": false,
            "schema": {
              "title": "Page Offset",
              "minimum": 0.0,
              "type": "integer",
              "description": "RECOMMENDED for use with _offset-based_ pagination: using `page_offset` and `page_limit` is RECOMMENDED.\nExample: Skip 50 structures and fetch up to 100: `/structures?page_offset=50&page_limit=100`.",
              "default": 0
            },
            "name": "page_offset",
            "in": "query"
          },
          {
            "description": "RECOMMENDED for use with _page-based_ pagination: using `page_number` and `page_limit` is RECOMMENDED.\nIt is RECOMMENDED that the first page has number 1, i.e., that `page_number` is 1-based.\nExample: Fetch page 2 of up to 50 structures per page: `/structures?page_number=2&page_limit=50`.",
            "required": false,
            "schema": {
              "title": "Page Number",
              "type": "integer",
              "description": "RECOMMENDED for use with _page-based_ pagination: using `page_number` and `page_limit` is RECOMMENDED.\nIt is RECOMMENDED that the first page has number 1, i.e., that `page_number` is 1-based.\nExample: Fetch page 2 of up to 50 structures per page: `/structures?page_number=2&page_limit=50`."
            },
            "name": "page_number",
            "in": "query"
          },
          {
            "description": "RECOMMENDED for use with _cursor-based_ pagination: using `page_cursor` and `page_limit` is RECOMMENDED.",
            "required": false,
            "schema": {
              "title": "Page Cursor",
              "minimum": 0.0,
              "type": "integer",
              "description": "RECOMMENDED for use with _cursor-based_ pagination: using `page_cursor` and `page_limit` is RECOMMENDED.",
              "default": 0
            },
            "name": "page_cursor",
            "in": "query"
          },
          {
            "description": "RECOMMENDED for use with _value-based_ pagination: using `page_above`/`page_below` and `page_limit` is RECOMMENDED.\nExample: Fetch up to 100 structures above sort-field value 4000 (in this example, server chooses to fetch results sorted by increasing `id`, so `page_above` value refers to an `id` value): `/structures?page_above=4000&page_limit=100`.",
            "required": false,
            "schema": {
              "title": "Page Above",
              "type": "string",
              "description": "RECOMMENDED for use with _value-based_ pagination: using `page_above`/`page_below` and `page_limit` is RECOMMENDED.\nExample: Fetch up to 100 structures above sort-field value 4000 (in this example, server chooses to fetch results sorted by increasing `id`, so `page_above` value refers to an `id` value): `/structures?page_above=4000&page_limit=100`."
            },
            "name": "page_above",
            "in": "query"
          },
          {
            "description": "RECOMMENDED for use with _value-based_ pagination: using `page_above`/`page_below` and `page_limit` is RECOMMENDED.",
            "required": false,
            "schema": {
              "title": "Page Below",
              "type": "string",
              "description": "RECOMMENDED for use with _value-based_ pagination: using `page_above`/`page_below` and `page_limit` is RECOMMENDED."
            },
            "name": "page_below",
            "in": "query"
          },
          {
            "description": "A server MAY implement the JSON API concept of returning [compound documents](https://jsonapi.org/format/1.0/#document-compound-documents) by utilizing the `include` query parameter as specified by [JSON API 1.0](https://jsonapi.org/format/1.0/#fetching-includes).\n\nAll related resource objects MUST be returned as part of an array value for the top-level `included` field, see the section JSON Response Schema: Common Fields.\n\nThe value of `include` MUST be a comma-separated list of \"relationship paths\", as defined in the [JSON API](https://jsonapi.org/format/1.0/#fetching-includes).\nIf relationship paths are not supported, or a server is unable to identify a relationship path a `400 Bad Request` response MUST be made.\n\nThe **default value** for `include` is `references`.\nThis means `references` entries MUST always be included under the top-level field `included` as default, since a server assumes if `include` is not specified by a client in the request, it is still specified as `include=references`.\nNote, if a client explicitly specifies `include` and leaves out `references`, `references` resource objects MUST NOT be included under the top-level field `included`, as per the definition of `included`, see section JSON Response Schema: Common Fields.\n\n> **Note**: A query with the parameter `include` set to the empty string means no related resource objects are to be returned under the top-level field `included`.",
            "required": false,
            "schema": {
              "title": "Include",
              "type": "string",
              "description": "A server MAY implement the JSON API concept of returning [compound documents](https://jsonapi.org/format/1.0/#document-compound-documents) by utilizing the `include` query parameter as specified by [JSON API 1.0](https://jsonapi.org/format/1.0/#fetching-includes).\n\nAll related resource objects MUST be returned as part of an array value for the top-level `included` field, see the section JSON Response Schema: Common Fields.\n\nThe value of `include` MUST be a comma-separated list of \"relationship paths\", as defined in the [JSON API](https://jsonapi.org/format/1.0/#fetching-includes).\nIf relationship paths are not supported, or a server is unable to identify a relationship path a `400 Bad Request` response MUST be made.\n\nThe **default value** for `include` is `references`.\nThis means `references` entries MUST always be included under the top-level field `included` as default, since a server assumes if `include` is not specified by a client in the request, it is still specified as `include=references`.\nNote, if a client explicitly specifies `include` and leaves out `references`, `references` resource objects MUST NOT be included under the top-level field `included`, as per the definition of `included`, see section JSON Response Schema: Common Fields.\n\n> **Note**: A query with the parameter `include` set to the empty string means no related resource objects are to be returned under the top-level field `included`.",
              "default": "references"
            },
            "name": "include",
            "in": "query"
          },
          {
            "description": "If the client provides the parameter, the value SHOULD have the format `vMAJOR` or `vMAJOR.MINOR`, where MAJOR is a major version and MINOR is a minor version of the API. For example, if a client appends `api_hint=v1.0` to the query string, the hint provided is for major version 1 and minor version 0.",
            "required": false,
            "schema": {
              "title": "Api Hint",
              "pattern": "(v[0-9]+(\\.[0-9]+)?)?",
              "type": "string",
              "description": "If the client provides the parameter, the value SHOULD have the format `vMAJOR` or `vMAJOR.MINOR`, where MAJOR is a major version and MINOR is a minor version of the API. For example, if a client appends `api_hint=v1.0` to the query string, the hint provided is for major version 1 and minor version 0.",
              "default": ""
            },
            "name": "api_hint",
            "in": "query"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/LinksResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "501": {
            "description": "Not Implemented",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "553": {
            "description": "Version Not Supported",
            "content": {
              "application/vnd.api+json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/versions": {
      "get": {
        "tags": [
          "Versions"
        ],
        "summary": "Get Versions",
        "description": "Respond with the text/csv representation for the served versions.",
        "operationId": "get_versions_versions_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "text/csv; header=present": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Aggregate": {
        "title": "Aggregate",
        "enum": [
          "ok",
          "test",
          "staging",
          "no"
        ],
        "description": "Enumeration of aggregate values"
      },
      "Attributes": {
        "title": "Attributes",
        "type": "object",
        "properties": {},
        "description": "Members of the attributes object (\"attributes\") represent information about the resource object in which it's defined.\nThe keys for Attributes MUST NOT be:\n    relationships\n    links\n    id\n    type"
      },
      "AvailableApiVersion": {
        "title": "AvailableApiVersion",
        "required": [
          "url",
          "version"
        ],
        "type": "object",
        "properties": {
          "url": {
            "title": "Url",
            "maxLength": 65536,
            "minLength": 1,
            "pattern": ".+/v[0-1](\\.[0-9]+)*/?$",
            "type": "string",
            "description": "A string specifying a versioned base URL that MUST adhere to the rules in section Base URL",
            "format": "uri"
          },
          "version": {
            "title": "Version",
            "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
            "type": "string",
            "description": "A string containing the full version number of the API served at that versioned base URL.\nThe version number string MUST NOT be prefixed by, e.g., 'v'.\nExamples: `1.0.0`, `1.0.0-rc.2`.",
            "example": [
              "0.10.1",
              "1.0.0-rc.2",
              "1.2.3-rc.5+develop"
            ]
          }
        },
        "description": "A JSON object containing information about an available API version"
      },
      "BaseRelationshipMeta": {
        "title": "BaseRelationshipMeta",
        "required": [
          "description"
        ],
        "type": "object",
        "properties": {
          "description": {
            "title": "Description",
            "type": "string",
            "description": "OPTIONAL human-readable description of the relationship."
          }
        },
        "description": "Specific meta field for base relationship resource"
      },
      "BaseRelationshipResource": {
        "title": "BaseRelationshipResource",
        "required": [
          "id",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string",
            "description": "Resource ID"
          },
          "type": {
            "title": "Type",
            "type": "string",
            "description": "Resource type"
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/BaseRelationshipMeta"
              }
            ],
            "description": "Relationship meta field. MUST contain 'description' if supplied."
          }
        },
        "description": "Minimum requirements to represent a relationship resource"
      },
      "EntryRelationships": {
        "title": "EntryRelationships",
        "type": "object",
        "properties": {
          "references": {
            "title": "References",
            "allOf": [
              {
                "$ref": "#/components/schemas/ReferenceRelationship"
              }
            ],
            "description": "Object containing links to relationships with entries of the `references` type."
          },
          "structures": {
            "title": "Structures",
            "allOf": [
              {
                "$ref": "#/components/schemas/StructureRelationship"
              }
            ],
            "description": "Object containing links to relationships with entries of the `structures` type."
          }
        },
        "description": "This model wraps the JSON API Relationships to include type-specific top level keys."
      },
      "EntryResource": {
        "title": "EntryResource",
        "required": [
          "id",
          "type",
          "attributes"
        ],
        "type": "object",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string",
            "description": "An entry's ID as defined in section Definition of Terms.\n\n- **Type**: string.\n\n- **Requirements/Conventions**:\n    - **Support**: MUST be supported by all implementations, MUST NOT be `null`.\n    - **Query**: MUST be a queryable property with support for all mandatory filter features.\n    - **Response**: REQUIRED in the response.\n\n- **Examples**:\n    - `\"db/1234567\"`\n    - `\"cod/2000000\"`\n    - `\"cod/2000000@1234567\"`\n    - `\"nomad/L1234567890\"`\n    - `\"42\"`",
            "x-optimade-support": "must",
            "x-optimade-queryable": "must"
          },
          "type": {
            "title": "Type",
            "type": "string",
            "description": "The name of the type of an entry.\n\n- **Type**: string.\n\n- **Requirements/Conventions**:\n    - **Support**: MUST be supported by all implementations, MUST NOT be `null`.\n    - **Query**: MUST be a queryable property with support for all mandatory filter features.\n    - **Response**: REQUIRED in the response.\n    - MUST be an existing entry type.\n    - The entry of type `<type>` and ID `<id>` MUST be returned in response to a request for `/<type>/<id>` under the versioned base URL.\n\n- **Example**: `\"structures\"`",
            "x-optimade-support": "must",
            "x-optimade-queryable": "must"
          },
          "links": {
            "title": "Links",
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceLinks"
              }
            ],
            "description": "a links object containing links related to the resource."
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/Meta"
              }
            ],
            "description": "a meta object containing non-standard meta-information about a resource that can not be represented as an attribute or relationship."
          },
          "attributes": {
            "title": "Attributes",
            "allOf": [
              {
                "$ref": "#/components/schemas/EntryResourceAttributes"
              }
            ],
            "description": "A dictionary, containing key-value pairs representing the entry's properties, except for `type` and `id`.\nDatabase-provider-specific properties need to include the database-provider-specific prefix (see section on Database-Provider-Specific Namespace Prefixes)."
          },
          "relationships": {
            "title": "Relationships",
            "allOf": [
              {
                "$ref": "#/components/schemas/EntryRelationships"
              }
            ],
            "description": "A dictionary containing references to other entries according to the description in section Relationships encoded as [JSON API Relationships](https://jsonapi.org/format/1.0/#document-resource-object-relationships).\nThe OPTIONAL human-readable description of the relationship MAY be provided in the `description` field inside the `meta` dictionary of the JSON API resource identifier object."
          }
        },
        "description": "The base model for an entry resource."
      },
      "EntryResourceAttributes": {
        "title": "EntryResourceAttributes",
        "required": [
          "last_modified"
        ],
        "type": "object",
        "properties": {
          "immutable_id": {
            "title": "Immutable Id",
            "type": "string",
            "description": "The entry's immutable ID (e.g., an UUID). This is important for databases having preferred IDs that point to \"the latest version\" of a record, but still offer access to older variants. This ID maps to the version-specific record, in case it changes in the future.\n\n- **Type**: string.\n\n- **Requirements/Conventions**:\n    - **Support**: OPTIONAL support in implementations, i.e., MAY be `null`.\n    - **Query**: MUST be a queryable property with support for all mandatory filter features.\n\n- **Examples**:\n    - `\"8bd3e750-b477-41a0-9b11-3a799f21b44f\"`\n    - `\"fjeiwoj,54;@=%<>#32\"` (Strings that are not URL-safe are allowed.)",
            "x-optimade-support": "optional",
            "x-optimade-queryable": "must"
          },
          "last_modified": {
            "title": "Last Modified",
            "type": "string",
            "description": "Date and time representing when the entry was last modified.\n\n- **Type**: timestamp.\n\n- **Requirements/Conventions**:\n    - **Support**: SHOULD be supported by all implementations, i.e., SHOULD NOT be `null`.\n    - **Query**: MUST be a queryable property with support for all mandatory filter features.\n    - **Response**: REQUIRED in the response unless the query parameter `response_fields` is present and does not include this property.\n\n- **Example**:\n    - As part of JSON response format: `\"2007-04-05T14:30:20Z\"` (i.e., encoded as an [RFC 3339 Internet Date/Time Format](https://tools.ietf.org/html/rfc3339#section-5.6) string.)",
            "format": "date-time",
            "x-optimade-support": "should",
            "x-optimade-queryable": "must"
          }
        },
        "description": "Contains key-value pairs representing the entry's properties."
      },
      "Error": {
        "title": "Error",
        "type": "object",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string",
            "description": "A unique identifier for this particular occurrence of the problem."
          },
          "links": {
            "title": "Links",
            "allOf": [
              {
                "$ref": "#/components/schemas/ErrorLinks"
              }
            ],
            "description": "A links object storing about"
          },
          "status": {
            "title": "Status",
            "type": "string",
            "description": "the HTTP status code applicable to this problem, expressed as a string value."
          },
          "code": {
            "title": "Code",
            "type": "string",
            "description": "an application-specific error code, expressed as a string value."
          },
          "title": {
            "title": "Title",
            "type": "string",
            "description": "A short, human-readable summary of the problem. It **SHOULD NOT** change from occurrence to occurrence of the problem, except for purposes of localization."
          },
          "detail": {
            "title": "Detail",
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "source": {
            "title": "Source",
            "allOf": [
              {
                "$ref": "#/components/schemas/ErrorSource"
              }
            ],
            "description": "An object containing references to the source of the error"
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/Meta"
              }
            ],
            "description": "a meta object containing non-standard meta-information about the error."
          }
        },
        "description": "An error response"
      },
      "ErrorLinks": {
        "title": "ErrorLinks",
        "type": "object",
        "properties": {
          "about": {
            "title": "About",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "A link that leads to further details about this particular occurrence of the problem."
          }
        },
        "description": "A Links object specific to Error objects"
      },
      "ErrorResponse": {
        "title": "ErrorResponse",
        "required": [
          "meta",
          "errors"
        ],
        "type": "object",
        "properties": {
          "data": {
            "title": "Data",
            "uniqueItems": true,
            "anyOf": [
              {
                "$ref": "#/components/schemas/Resource"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Resource"
                }
              }
            ],
            "description": "Outputted Data"
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/ResponseMeta"
              }
            ],
            "description": "A meta object containing non-standard information."
          },
          "errors": {
            "title": "Errors",
            "uniqueItems": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OptimadeError"
            },
            "description": "A list of OPTIMADE-specific JSON API error objects, where the field detail MUST be present."
          },
          "included": {
            "title": "Included",
            "uniqueItems": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Resource"
            },
            "description": "A list of unique included resources"
          },
          "links": {
            "title": "Links",
            "allOf": [
              {
                "$ref": "#/components/schemas/ToplevelLinks"
              }
            ],
            "description": "Links associated with the primary data or errors"
          },
          "jsonapi": {
            "title": "Jsonapi",
            "allOf": [
              {
                "$ref": "#/components/schemas/JsonApi"
              }
            ],
            "description": "Information about the JSON API used"
          }
        },
        "description": "errors MUST be present and data MUST be skipped"
      },
      "ErrorSource": {
        "title": "ErrorSource",
        "type": "object",
        "properties": {
          "pointer": {
            "title": "Pointer",
            "type": "string",
            "description": "a JSON Pointer [RFC6901] to the associated entity in the request document [e.g. \"/data\" for a primary data object, or \"/data/attributes/title\" for a specific attribute]."
          },
          "parameter": {
            "title": "Parameter",
            "type": "string",
            "description": "a string indicating which URI query parameter caused the error."
          }
        },
        "description": "an object containing references to the source of the error"
      },
      "Implementation": {
        "title": "Implementation",
        "type": "object",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string",
            "description": "name of the implementation"
          },
          "version": {
            "title": "Version",
            "type": "string",
            "description": "version string of the current implementation"
          },
          "homepage": {
            "title": "Homepage",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "A [JSON API links object](http://jsonapi.org/format/1.0/#document-links) pointing to the homepage of the implementation."
          },
          "source_url": {
            "title": "Source Url",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "A [JSON API links object](http://jsonapi.org/format/1.0/#document-links) pointing to the implementation source, either downloadable archive or version control system."
          },
          "maintainer": {
            "title": "Maintainer",
            "allOf": [
              {
                "$ref": "#/components/schemas/ImplementationMaintainer"
              }
            ],
            "description": "A dictionary providing details about the maintainer of the implementation."
          },
          "issue_tracker": {
            "title": "Issue Tracker",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "A [JSON API links object](http://jsonapi.org/format/1.0/#document-links) pointing to the implementation's issue tracker."
          }
        },
        "description": "Information on the server implementation"
      },
      "ImplementationMaintainer": {
        "title": "ImplementationMaintainer",
        "required": [
          "email"
        ],
        "type": "object",
        "properties": {
          "email": {
            "title": "Email",
            "type": "string",
            "description": "the maintainer's email address",
            "format": "email"
          }
        },
        "description": "Details about the maintainer of the implementation"
      },
      "IndexInfoAttributes": {
        "title": "IndexInfoAttributes",
        "required": [
          "api_version",
          "available_api_versions",
          "available_endpoints",
          "entry_types_by_format"
        ],
        "type": "object",
        "properties": {
          "api_version": {
            "title": "Api Version",
            "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
            "type": "string",
            "description": "Presently used full version of the OPTIMADE API.\nThe version number string MUST NOT be prefixed by, e.g., \"v\".\nExamples: `1.0.0`, `1.0.0-rc.2`.",
            "example": [
              "0.10.1",
              "1.0.0-rc.2",
              "1.2.3-rc.5+develop"
            ]
          },
          "available_api_versions": {
            "title": "Available Api Versions",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AvailableApiVersion"
            },
            "description": "A list of dictionaries of available API versions at other base URLs"
          },
          "formats": {
            "title": "Formats",
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of available output formats.",
            "default": [
              "json"
            ]
          },
          "available_endpoints": {
            "title": "Available Endpoints",
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of available endpoints (i.e., the string to be appended to the versioned base URL)."
          },
          "entry_types_by_format": {
            "title": "Entry Types By Format",
            "type": "object",
            "additionalProperties": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "description": "Available entry endpoints as a function of output formats."
          },
          "is_index": {
            "title": "Is Index",
            "type": "boolean",
            "description": "This must be `true` since this is an index meta-database (see section Index Meta-Database).",
            "default": true
          }
        },
        "description": "Attributes for Base URL Info endpoint for an Index Meta-Database"
      },
      "IndexInfoResource": {
        "title": "IndexInfoResource",
        "required": [
          "id",
          "type",
          "attributes",
          "relationships"
        ],
        "type": "object",
        "properties": {
          "id": {
            "title": "Id",
            "pattern": "^/$",
            "type": "string",
            "default": "/"
          },
          "type": {
            "title": "Type",
            "pattern": "^info$",
            "type": "string",
            "default": "info"
          },
          "links": {
            "title": "Links",
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceLinks"
              }
            ],
            "description": "a links object containing links related to the resource."
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/Meta"
              }
            ],
            "description": "a meta object containing non-standard meta-information about a resource that can not be represented as an attribute or relationship."
          },
          "attributes": {
            "$ref": "#/components/schemas/IndexInfoAttributes"
          },
          "relationships": {
            "title": "Relationships",
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/IndexRelationship"
            },
            "description": "Reference to the Links identifier object under the `links` endpoint that the provider has chosen as their 'default' OPTIMADE API database.\nA client SHOULD present this database as the first choice when an end-user chooses this provider."
          }
        },
        "description": "Index Meta-Database Base URL Info endpoint resource"
      },
      "IndexInfoResponse": {
        "title": "IndexInfoResponse",
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "title": "Data",
            "allOf": [
              {
                "$ref": "#/components/schemas/IndexInfoResource"
              }
            ],
            "description": "Index meta-database /info data."
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/ResponseMeta"
              }
            ],
            "description": "A meta object containing non-standard information"
          },
          "errors": {
            "title": "Errors",
            "uniqueItems": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Error"
            },
            "description": "A list of unique errors"
          },
          "included": {
            "title": "Included",
            "uniqueItems": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Resource"
            },
            "description": "A list of unique included resources"
          },
          "links": {
            "title": "Links",
            "allOf": [
              {
                "$ref": "#/components/schemas/ToplevelLinks"
              }
            ],
            "description": "Links associated with the primary data or errors"
          },
          "jsonapi": {
            "title": "Jsonapi",
            "allOf": [
              {
                "$ref": "#/components/schemas/JsonApi"
              }
            ],
            "description": "Information about the JSON API used"
          }
        },
        "description": "errors are not allowed"
      },
      "IndexRelationship": {
        "title": "IndexRelationship",
        "required": [
          "data"
        ],
        "type": "object",
        "properties": {
          "data": {
            "title": "Data",
            "allOf": [
              {
                "$ref": "#/components/schemas/RelatedLinksResource"
              }
            ],
            "description": "[JSON API resource linkage](http://jsonapi.org/format/1.0/#document-links).\nIt MUST be either `null` or contain a single Links identifier object with the fields `id` and `type`"
          }
        },
        "description": "Index Meta-Database relationship"
      },
      "JsonApi": {
        "title": "JsonApi",
        "type": "object",
        "properties": {
          "version": {
            "title": "Version",
            "type": "string",
            "description": "Version of the json API used",
            "default": "1.0"
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/Meta"
              }
            ],
            "description": "Non-standard meta information"
          }
        },
        "description": "An object describing the server's implementation"
      },
      "Link": {
        "title": "Link",
        "required": [
          "href"
        ],
        "type": "object",
        "properties": {
          "href": {
            "title": "Href",
            "maxLength": 65536,
            "minLength": 1,
            "type": "string",
            "description": "a string containing the link\u2019s URL.",
            "format": "uri"
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/Meta"
              }
            ],
            "description": "a meta object containing non-standard meta-information about the link."
          }
        },
        "description": "A link **MUST** be represented as either: a string containing the link's URL or a link object."
      },
      "LinkType": {
        "title": "LinkType",
        "enum": [
          "child",
          "root",
          "external",
          "providers"
        ],
        "description": "Enumeration of link_type values"
      },
      "LinksResource": {
        "title": "LinksResource",
        "required": [
          "id",
          "type",
          "attributes"
        ],
        "type": "object",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string",
            "description": "An entry's ID as defined in section Definition of Terms.\n\n- **Type**: string.\n\n- **Requirements/Conventions**:\n    - **Support**: MUST be supported by all implementations, MUST NOT be `null`.\n    - **Query**: MUST be a queryable property with support for all mandatory filter features.\n    - **Response**: REQUIRED in the response.\n\n- **Examples**:\n    - `\"db/1234567\"`\n    - `\"cod/2000000\"`\n    - `\"cod/2000000@1234567\"`\n    - `\"nomad/L1234567890\"`\n    - `\"42\"`",
            "x-optimade-support": "must",
            "x-optimade-queryable": "must"
          },
          "type": {
            "title": "Type",
            "pattern": "^links$",
            "type": "string",
            "description": "These objects are described in detail in the section Links Endpoint",
            "default": "links"
          },
          "links": {
            "title": "Links",
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceLinks"
              }
            ],
            "description": "a links object containing links related to the resource."
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/Meta"
              }
            ],
            "description": "a meta object containing non-standard meta-information about a resource that can not be represented as an attribute or relationship."
          },
          "attributes": {
            "title": "Attributes",
            "allOf": [
              {
                "$ref": "#/components/schemas/LinksResourceAttributes"
              }
            ],
            "description": "A dictionary containing key-value pairs representing the Links resource's properties."
          },
          "relationships": {
            "title": "Relationships",
            "allOf": [
              {
                "$ref": "#/components/schemas/EntryRelationships"
              }
            ],
            "description": "A dictionary containing references to other entries according to the description in section Relationships encoded as [JSON API Relationships](https://jsonapi.org/format/1.0/#document-resource-object-relationships).\nThe OPTIONAL human-readable description of the relationship MAY be provided in the `description` field inside the `meta` dictionary of the JSON API resource identifier object."
          }
        },
        "description": "A Links endpoint resource object"
      },
      "LinksResourceAttributes": {
        "title": "LinksResourceAttributes",
        "required": [
          "name",
          "description",
          "base_url",
          "homepage",
          "link_type"
        ],
        "type": "object",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string",
            "description": "Human-readable name for the OPTIMADE API implementation, e.g., for use in clients to show the name to the end-user."
          },
          "description": {
            "title": "Description",
            "type": "string",
            "description": "Human-readable description for the OPTIMADE API implementation, e.g., for use in clients to show a description to the end-user."
          },
          "base_url": {
            "title": "Base Url",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "JSON API links object, pointing to the base URL for this implementation"
          },
          "homepage": {
            "title": "Homepage",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "JSON API links object, pointing to a homepage URL for this implementation"
          },
          "link_type": {
            "title": "Link Type",
            "allOf": [
              {
                "$ref": "#/components/schemas/LinkType"
              }
            ],
            "description": "The type of the linked relation.\nMUST be one of these values: 'child', 'root', 'external', 'providers'."
          },
          "aggregate": {
            "title": "Aggregate",
            "allOf": [
              {
                "$ref": "#/components/schemas/Aggregate"
              }
            ],
            "description": "A string indicating whether a client that is following links to aggregate results from different OPTIMADE implementations should follow this link or not.\nThis flag SHOULD NOT be indicated for links where `link_type` is not `child`.\n\nIf not specified, clients MAY assume that the value is `ok`.\nIf specified, and the value is anything different than `ok`, the client MUST assume that the server is suggesting not to follow the link during aggregation by default (also if the value is not among the known ones, in case a future specification adds new accepted values).\n\nSpecific values indicate the reason why the server is providing the suggestion.\nA client MAY follow the link anyway if it has reason to do so (e.g., if the client is looking for all test databases, it MAY follow the links marked with `aggregate`=`test`).\n\nIf specified, it MUST be one of the values listed in section Link Aggregate Options.",
            "default": "ok"
          },
          "no_aggregate_reason": {
            "title": "No Aggregate Reason",
            "type": "string",
            "description": "An OPTIONAL human-readable string indicating the reason for suggesting not to aggregate results following the link.\nIt SHOULD NOT be present if `aggregate`=`ok`."
          }
        },
        "description": "Links endpoint resource object attributes"
      },
      "LinksResponse": {
        "title": "LinksResponse",
        "required": [
          "data",
          "meta"
        ],
        "type": "object",
        "properties": {
          "data": {
            "title": "Data",
            "uniqueItems": true,
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/LinksResource"
                }
              },
              {
                "type": "array",
                "items": {
                  "type": "object"
                }
              }
            ],
            "description": "List of unique OPTIMADE links resource objects."
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/ResponseMeta"
              }
            ],
            "description": "A meta object containing non-standard information"
          },
          "errors": {
            "title": "Errors",
            "uniqueItems": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Error"
            },
            "description": "A list of unique errors"
          },
          "included": {
            "title": "Included",
            "uniqueItems": true,
            "anyOf": [
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/EntryResource"
                }
              },
              {
                "type": "array",
                "items": {
                  "type": "object"
                }
              }
            ]
          },
          "links": {
            "title": "Links",
            "allOf": [
              {
                "$ref": "#/components/schemas/ToplevelLinks"
              }
            ],
            "description": "Links associated with the primary data or errors"
          },
          "jsonapi": {
            "title": "Jsonapi",
            "allOf": [
              {
                "$ref": "#/components/schemas/JsonApi"
              }
            ],
            "description": "Information about the JSON API used"
          }
        },
        "description": "errors are not allowed"
      },
      "Meta": {
        "title": "Meta",
        "type": "object",
        "properties": {},
        "description": "Non-standard meta-information that can not be represented as an attribute or relationship."
      },
      "OptimadeError": {
        "title": "OptimadeError",
        "required": [
          "detail"
        ],
        "type": "object",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string",
            "description": "A unique identifier for this particular occurrence of the problem."
          },
          "links": {
            "title": "Links",
            "allOf": [
              {
                "$ref": "#/components/schemas/ErrorLinks"
              }
            ],
            "description": "A links object storing about"
          },
          "status": {
            "title": "Status",
            "type": "string",
            "description": "the HTTP status code applicable to this problem, expressed as a string value."
          },
          "code": {
            "title": "Code",
            "type": "string",
            "description": "an application-specific error code, expressed as a string value."
          },
          "title": {
            "title": "Title",
            "type": "string",
            "description": "A short, human-readable summary of the problem. It **SHOULD NOT** change from occurrence to occurrence of the problem, except for purposes of localization."
          },
          "detail": {
            "title": "Detail",
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "source": {
            "title": "Source",
            "allOf": [
              {
                "$ref": "#/components/schemas/ErrorSource"
              }
            ],
            "description": "An object containing references to the source of the error"
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/Meta"
              }
            ],
            "description": "a meta object containing non-standard meta-information about the error."
          }
        },
        "description": "detail MUST be present"
      },
      "Provider": {
        "title": "Provider",
        "required": [
          "name",
          "description",
          "prefix"
        ],
        "type": "object",
        "properties": {
          "name": {
            "title": "Name",
            "type": "string",
            "description": "a short name for the database provider"
          },
          "description": {
            "title": "Description",
            "type": "string",
            "description": "a longer description of the database provider"
          },
          "prefix": {
            "title": "Prefix",
            "pattern": "^[a-z]([a-z]|[0-9]|_)*$",
            "type": "string",
            "description": "database-provider-specific prefix as found in section Database-Provider-Specific Namespace Prefixes."
          },
          "homepage": {
            "title": "Homepage",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "a [JSON API links object](http://jsonapi.org/format/1.0#document-links) pointing to homepage of the database provider, either directly as a string, or as a link object."
          }
        },
        "description": "Information on the database provider of the implementation."
      },
      "ReferenceRelationship": {
        "title": "ReferenceRelationship",
        "type": "object",
        "properties": {
          "links": {
            "title": "Links",
            "allOf": [
              {
                "$ref": "#/components/schemas/RelationshipLinks"
              }
            ],
            "description": "a links object containing at least one of the following: self, related"
          },
          "data": {
            "title": "Data",
            "uniqueItems": true,
            "anyOf": [
              {
                "$ref": "#/components/schemas/BaseRelationshipResource"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BaseRelationshipResource"
                }
              }
            ],
            "description": "Resource linkage"
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/Meta"
              }
            ],
            "description": "a meta object that contains non-standard meta-information about the relationship."
          }
        },
        "description": "Similar to normal JSON API relationship, but with addition of OPTIONAL meta field for a resource."
      },
      "RelatedLinksResource": {
        "title": "RelatedLinksResource",
        "required": [
          "id",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string",
            "description": "Resource ID"
          },
          "type": {
            "title": "Type",
            "pattern": "^links$",
            "type": "string",
            "default": "links"
          }
        },
        "description": "A related Links resource object"
      },
      "RelationshipLinks": {
        "title": "RelationshipLinks",
        "type": "object",
        "properties": {
          "self": {
            "title": "Self",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "A link for the relationship itself (a 'relationship link').\nThis link allows the client to directly manipulate the relationship.\nWhen fetched successfully, this link returns the [linkage](https://jsonapi.org/format/1.0/#document-resource-object-linkage) for the related resources as its primary data.\n(See [Fetching Relationships](https://jsonapi.org/format/1.0/#fetching-relationships).)"
          },
          "related": {
            "title": "Related",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "A [related resource link](https://jsonapi.org/format/1.0/#document-resource-object-related-resource-links)."
          }
        },
        "description": "A resource object **MAY** contain references to other resource objects (\"relationships\").\nRelationships may be to-one or to-many.\nRelationships can be specified by including a member in a resource's links object."
      },
      "Relationships": {
        "title": "Relationships",
        "type": "object",
        "properties": {},
        "description": "Members of the relationships object (\"relationships\") represent references from the resource object in which it's defined to other resource objects.\nKeys MUST NOT be:\n    type\n    id"
      },
      "Resource": {
        "title": "Resource",
        "required": [
          "id",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string",
            "description": "Resource ID"
          },
          "type": {
            "title": "Type",
            "type": "string",
            "description": "Resource type"
          },
          "links": {
            "title": "Links",
            "allOf": [
              {
                "$ref": "#/components/schemas/ResourceLinks"
              }
            ],
            "description": "a links object containing links related to the resource."
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/Meta"
              }
            ],
            "description": "a meta object containing non-standard meta-information about a resource that can not be represented as an attribute or relationship."
          },
          "attributes": {
            "title": "Attributes",
            "allOf": [
              {
                "$ref": "#/components/schemas/Attributes"
              }
            ],
            "description": "an attributes object representing some of the resource\u2019s data."
          },
          "relationships": {
            "title": "Relationships",
            "allOf": [
              {
                "$ref": "#/components/schemas/Relationships"
              }
            ],
            "description": "[Relationships object](https://jsonapi.org/format/1.0/#document-resource-object-relationships)\ndescribing relationships between the resource and other JSON API resources."
          }
        },
        "description": "Resource objects appear in a JSON API document to represent resources."
      },
      "ResourceLinks": {
        "title": "ResourceLinks",
        "type": "object",
        "properties": {
          "self": {
            "title": "Self",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "A link that identifies the resource represented by the resource object."
          }
        },
        "description": "A Resource Links object"
      },
      "ResponseMeta": {
        "title": "ResponseMeta",
        "required": [
          "query",
          "api_version",
          "more_data_available"
        ],
        "type": "object",
        "properties": {
          "query": {
            "title": "Query",
            "allOf": [
              {
                "$ref": "#/components/schemas/ResponseMetaQuery"
              }
            ],
            "description": "Information on the Query that was requested"
          },
          "api_version": {
            "title": "Api Version",
            "pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$",
            "type": "string",
            "description": "Presently used full version of the OPTIMADE API.\nThe version number string MUST NOT be prefixed by, e.g., \"v\".\nExamples: `1.0.0`, `1.0.0-rc.2`.",
            "example": [
              "0.10.1",
              "1.0.0-rc.2",
              "1.2.3-rc.5+develop"
            ]
          },
          "more_data_available": {
            "title": "More Data Available",
            "type": "boolean",
            "description": "`false` if the response contains all data for the request (e.g., a request issued to a single entry endpoint, or a `filter` query at the last page of a paginated response) and `true` if the response is incomplete in the sense that multiple objects match the request, and not all of them have been included in the response (e.g., a query with multiple pages that is not at the last page)."
          },
          "schema": {
            "title": "Schema",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "A [JSON API links object](http://jsonapi.org/format/1.0/#document-links) that points to a schema for the response.\nIf it is a string, or a dictionary containing no `meta` field, the provided URL MUST point at an [OpenAPI](https://swagger.io/specification/) schema.\nIt is possible that future versions of this specification allows for alternative schema types.\nHence, if the `meta` field of the JSON API links object is provided and contains a field `schema_type` that is not equal to the string `OpenAPI` the client MUST not handle failures to parse the schema or to validate the response against the schema as errors."
          },
          "time_stamp": {
            "title": "Time Stamp",
            "type": "string",
            "description": "A timestamp containing the date and time at which the query was executed.",
            "format": "date-time"
          },
          "data_returned": {
            "title": "Data Returned",
            "minimum": 0.0,
            "type": "integer",
            "description": "An integer containing the total number of data resource objects returned for the current `filter` query, independent of pagination."
          },
          "provider": {
            "title": "Provider",
            "allOf": [
              {
                "$ref": "#/components/schemas/Provider"
              }
            ],
            "description": "information on the database provider of the implementation."
          },
          "data_available": {
            "title": "Data Available",
            "type": "integer",
            "description": "An integer containing the total number of data resource objects available in the database for the endpoint."
          },
          "last_id": {
            "title": "Last Id",
            "type": "string",
            "description": "a string containing the last ID returned"
          },
          "response_message": {
            "title": "Response Message",
            "type": "string",
            "description": "response string from the server"
          },
          "implementation": {
            "title": "Implementation",
            "allOf": [
              {
                "$ref": "#/components/schemas/Implementation"
              }
            ],
            "description": "a dictionary describing the server implementation"
          },
          "warnings": {
            "title": "Warnings",
            "uniqueItems": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Warnings"
            },
            "description": "A list of warning resource objects representing non-critical errors or warnings.\nA warning resource object is defined similarly to a [JSON API error object](http://jsonapi.org/format/1.0/#error-objects), but MUST also include the field `type`, which MUST have the value `\"warning\"`.\nThe field `detail` MUST be present and SHOULD contain a non-critical message, e.g., reporting unrecognized search attributes or deprecated features.\nThe field `status`, representing a HTTP response status code, MUST NOT be present for a warning resource object.\nThis is an exclusive field for error resource objects."
          }
        },
        "description": "A [JSON API meta member](https://jsonapi.org/format/1.0#document-meta)\nthat contains JSON API meta objects of non-standard\nmeta-information.\n\nOPTIONAL additional information global to the query that is not\nspecified in this document, MUST start with a\ndatabase-provider-specific prefix."
      },
      "ResponseMetaQuery": {
        "title": "ResponseMetaQuery",
        "required": [
          "representation"
        ],
        "type": "object",
        "properties": {
          "representation": {
            "title": "Representation",
            "type": "string",
            "description": "A string with the part of the URL following the versioned or unversioned base URL that serves the API.\nQuery parameters that have not been used in processing the request MAY be omitted.\nIn particular, if no query parameters have been involved in processing the request, the query part of the URL MAY be excluded.\nExample: `/structures?filter=nelements=2`"
          }
        },
        "description": "Information on the query that was requested."
      },
      "StructureRelationship": {
        "title": "StructureRelationship",
        "type": "object",
        "properties": {
          "links": {
            "title": "Links",
            "allOf": [
              {
                "$ref": "#/components/schemas/RelationshipLinks"
              }
            ],
            "description": "a links object containing at least one of the following: self, related"
          },
          "data": {
            "title": "Data",
            "uniqueItems": true,
            "anyOf": [
              {
                "$ref": "#/components/schemas/BaseRelationshipResource"
              },
              {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/BaseRelationshipResource"
                }
              }
            ],
            "description": "Resource linkage"
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/Meta"
              }
            ],
            "description": "a meta object that contains non-standard meta-information about the relationship."
          }
        },
        "description": "Similar to normal JSON API relationship, but with addition of OPTIONAL meta field for a resource."
      },
      "ToplevelLinks": {
        "title": "ToplevelLinks",
        "type": "object",
        "properties": {
          "self": {
            "title": "Self",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "A link to itself"
          },
          "related": {
            "title": "Related",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "A related resource link"
          },
          "first": {
            "title": "First",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "The first page of data"
          },
          "last": {
            "title": "Last",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "The last page of data"
          },
          "prev": {
            "title": "Prev",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "The previous page of data"
          },
          "next": {
            "title": "Next",
            "anyOf": [
              {
                "maxLength": 65536,
                "minLength": 1,
                "type": "string",
                "format": "uri"
              },
              {
                "$ref": "#/components/schemas/Link"
              }
            ],
            "description": "The next page of data"
          }
        },
        "description": "A set of Links objects, possibly including pagination"
      },
      "Warnings": {
        "title": "Warnings",
        "required": [
          "detail",
          "type"
        ],
        "type": "object",
        "properties": {
          "id": {
            "title": "Id",
            "type": "string",
            "description": "A unique identifier for this particular occurrence of the problem."
          },
          "links": {
            "title": "Links",
            "allOf": [
              {
                "$ref": "#/components/schemas/ErrorLinks"
              }
            ],
            "description": "A links object storing about"
          },
          "code": {
            "title": "Code",
            "type": "string",
            "description": "an application-specific error code, expressed as a string value."
          },
          "title": {
            "title": "Title",
            "type": "string",
            "description": "A short, human-readable summary of the problem. It **SHOULD NOT** change from occurrence to occurrence of the problem, except for purposes of localization."
          },
          "detail": {
            "title": "Detail",
            "type": "string",
            "description": "A human-readable explanation specific to this occurrence of the problem."
          },
          "source": {
            "title": "Source",
            "allOf": [
              {
                "$ref": "#/components/schemas/ErrorSource"
              }
            ],
            "description": "An object containing references to the source of the error"
          },
          "meta": {
            "title": "Meta",
            "allOf": [
              {
                "$ref": "#/components/schemas/Meta"
              }
            ],
            "description": "a meta object containing non-standard meta-information about the error."
          },
          "type": {
            "title": "Type",
            "pattern": "^warning$",
            "type": "string",
            "description": "Warnings must be of type \"warning\"",
            "default": "warning"
          }
        },
        "description": "OPTIMADE-specific warning class based on OPTIMADE-specific JSON API Error.\n\nFrom the specification:\n\nA warning resource object is defined similarly to a JSON API error object, but MUST also include the field type, which MUST have the value \"warning\".\nThe field detail MUST be present and SHOULD contain a non-critical message, e.g., reporting unrecognized search attributes or deprecated features.\n\nNote: Must be named \"Warnings\", since \"Warning\" is a built-in Python class."
      }
    }
  }
}
