{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/hubject/main/json-schema/hubject-e-roaming-pull-evsedata-schema.json",
  "title": "eRoamingPullEVSEData",
  "description": "eRoamingPullEVSEData is a message that is sent in order to request the download of EVSE data of operators stored on the Hubject system.",
  "x-generated": "2026-10-13",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/hubject-oicp-emp-2.3-openapi.yml#/components/schemas/eRoamingPullEVSEData",
  "type": "object",
  "required": [
    "ProviderID",
    "GeoCoordinatesResponseFormat"
  ],
  "properties": {
    "ProviderID": {
      "$ref": "#/$defs/ProviderID"
    },
    "SearchCenter": {
      "type": "object",
      "description": "\"The data can be restricted using search parameters that are provided in this field.\n\nCannot be combined with “LastCall”.\"\n",
      "required": [
        "GeoCoordinates",
        "Radius"
      ],
      "properties": {
        "GeoCoordinates": {
          "$ref": "#/$defs/GeoCoordinates"
        },
        "Radius": {
          "type": "number",
          "description": "Radius in km around the position that is defined by the geo coordinates"
        }
      }
    },
    "LastCall": {
      "type": "string",
      "format": "date-time",
      "description": "In case that this field is set, Hubject does not return the currently valid set of EVSE data but the changes compared to the status of EVSE data at the time of the last call. Cannot be combined with “SearchCenter”, “CountryCodes”, and “OperatorIDs”. "
    },
    "GeoCoordinatesResponseFormat": {
      "$ref": "#/$defs/GeoCoordinatesResponseFormat"
    },
    "CountryCodes": {
      "type": "array",
      "description": "A list of countries whose EVSE’s a provider wants to retrieve. Cannot be combined with “LastCall”.",
      "items": {
        "$ref": "#/$defs/CountryCode"
      }
    },
    "OperatorIds": {
      "type": "array",
      "description": "A list of Operator Ids in ISO or DIN standard to download only EVSE’s of one or more operators. Cannot be combined with “LastCall”.",
      "items": {
        "$ref": "#/$defs/OperatorID"
      }
    },
    "AuthenticationModes": {
      "type": "array",
      "description": "A list of Authentication Modes to start a charging process",
      "items": {
        "$ref": "#/$defs/AuthenticationMode"
      }
    },
    "Accessibility": {
      "type": "array",
      "description": "A list of accessibility of the charging point",
      "items": {
        "$ref": "#/$defs/Accessibility"
      }
    },
    "CalibrationLawDataAvailability": {
      "type": "array",
      "description": "A list of how caliration law data is provided by the charging point",
      "items": {
        "type": "string",
        "enum": [
          "Local",
          "External",
          "Not Available"
        ]
      }
    },
    "RenewableEnergy": {
      "type": "boolean",
      "description": "Select the charging stations use Renewable energy or not"
    },
    "IsHubjectCompatible": {
      "type": "boolean",
      "description": "Select if the charging station is Hubject Compatible"
    },
    "IsOpen24Hours": {
      "type": "boolean",
      "description": "Select the charging stations that are open 24 hours."
    }
  },
  "$defs": {
    "Accessibility": {
      "type": "string",
      "enum": [
        "Free publicly accessible",
        "Restricted access",
        "Paying publicly accessible",
        "Test Station"
      ],
      "description": "Specifies how the charging station can be accessed.\n\n| Option | Description |\n| ------ | ----------- |\n| Free publicly accessible | EV Driver can reach the charging point without paying a fee, e.g. street, free public place, free parking lot, etc. |\n| Restricted access | EV Driver needs permission to reach the charging point, e.g. Campus, building complex, etc. |\n| Paying publicly accessible | EV Driver needs to pay a fee in order to reach the charging point, e.g. payable parking garage, etc. |\n| Test Station | Station is just for testing purposes. Access may be restricted. |\n"
    },
    "AuthenticationMode": {
      "type": "string",
      "enum": [
        "NFC RFID Classic",
        "NFC RFID DESFire",
        "PnC",
        "REMOTE",
        "Direct Payment",
        "No Authentication Required"
      ],
      "description": "| Option | Description |\n| NFC RFID Classic | Defined authentication. |\n| NFC RFID DESFire | Defined authentication. |\n| PnC | ISO/IEC 15118. |\n| REMOTE | App, QR-Code, Phone. |\n| Direct Payment | Remote use via direct payment. E.g. intercharge direct |\n| No Authentication Required | Not Authentication Method Required |\n"
    },
    "CountryCode": {
      "type": "string",
      "description": "The CountryCodeType allows for Alpha-3 country codes only as of OICP 2.2 and OICP 2.3\n\nFor Alpha-3 (three-letter) country codes as defined in ISO 3166-1.\n\n__Examples:__\n\n| Option | Description |\n| ------ | ----------- |\n| AUT | Austria |\n| DEU | Germany |\n| FRA | France |\n| USA | United States |\n",
      "maximum": 3,
      "minimum": 3
    },
    "GeoCoordinates": {
      "type": "object",
      "description": "Important\n\n__One of the following three options `MUST` be provided__\n",
      "properties": {
        "Google": {
          "type": "object",
          "description": "Geocoordinates using Google Structure\nBased on WGS84\n",
          "required": [
            "Coordinates"
          ],
          "properties": {
            "Coordinates": {
              "type": "string",
              "pattern": "^-?1?\\d{1,2}\\.\\d{1,6}\\s*\\,?\\s*-?1?\\d{1,2}\\.\\d{1,6}$",
              "description": "A string that `MUST` be valid with respect to the following regular expression:\n\n`^-?1?\\d{1,2}\\.\\d{1,6}\\s*\\,?\\s*-?1?\\d{1,2}\\.\\d{1,6}$`\nThe expression validates the string as geo coordinates with respect to the Google standard. The string contains latitude and longitude (in this sequence) separated by a space.\n\nExample: “47.662249 9.360922”\n"
            }
          }
        },
        "DecimalDegree": {
          "type": "object",
          "description": "Geocoordinates using DecimalDegree Structure",
          "required": [
            "Longitude",
            "Latitude"
          ],
          "properties": {
            "Longitude": {
              "type": "string",
              "pattern": "^-?1?\\d{1,2}\\.\\d{1,6}$",
              "description": "A string that `MUST` be valid with respect to the following regular expression:\n\n`^-?1?\\d{1,2}\\.\\d{1,6}$`\nThe expression validates the string as a geo coordinate (longitude or latitude) with decimal degree syntax.\n\nExamples: “9.360922”, “-21.568201”\n"
            },
            "Latitude": {
              "type": "string",
              "pattern": "^-?1?\\d{1,2}\\.\\d{1,6}$",
              "description": "A string that `MUST` be valid with respect to the following regular expression:\n\n`^-?1?\\d{1,2}\\.\\d{1,6}$`\nThe expression validates the string as a geo coordinate (longitude or latitude) with decimal degree syntax.\n\nExamples: “9.360922”, “-21.568201”\n"
            }
          }
        },
        "DegreeMinuteSeconds": {
          "type": "object",
          "description": "Geocoordinates using DegreeMinutesSeconds Structure",
          "required": [
            "Longitude",
            "Latitude"
          ],
          "properties": {
            "Longitude": {
              "type": "string",
              "pattern": "^-?1?\\d{1,2}°[ ]?\\d{1,2}'[ ]?\\d{1,2}\\.\\d+''$",
              "description": "A string that `MUST` be valid with respect to the following regular expression:\n\n`^-?1?\\d{1,2}°[ ]?\\d{1,2}'[ ]?\\d{1,2}\\.\\d+''$`\nThe expression validates the string as a geo coordinate (longitude or latitude) consisting of degree, minutes, and seconds\n\nExamples: “9°21'39.32''”, “-21°34'23.16''\n"
            },
            "Latitude": {
              "type": "string",
              "pattern": "^-?1?\\d{1,2}°[ ]?\\d{1,2}'[ ]?\\d{1,2}\\.\\d+''$",
              "description": "A string that `MUST` be valid with respect to the following regular expression:\n\n`^-?1?\\d{1,2}°[ ]?\\d{1,2}'[ ]?\\d{1,2}\\.\\d+''$`\nThe expression validates the string as a geo coordinate (longitude or latitude) consisting of degree, minutes, and seconds\n\nExamples: “9°21'39.32''”, “-21°34'23.16''\n"
            }
          }
        }
      }
    },
    "GeoCoordinatesResponseFormat": {
      "type": "string",
      "description": "Defines the format of geo coordinates that shall be provided with the response.",
      "enum": [
        "Google",
        "DegreeMinuteSeconds",
        "DecimalDegree"
      ]
    },
    "OperatorID": {
      "type": "string",
      "pattern": "^(([A-Za-z]{2}\\*?[A-Za-z0-9]{3})|(\\+?[0-9]{1,3}\\*[0-9]{3}))$",
      "description": "A string that MUST be valid with respect to the following regular expression: ISO | DIN\n\n^(([A-Za-z]{2}\\*?[A-Za-z0-9]{3})|(\\+?[0-9]{1,3}\\*[0-9]{3}))$\nThe expression validates the string as OperatorID including the preceding country code, which is part of EvseID. It supports both definitions DIN SPEC 91286:2011-11 as well as ISO 15118. In case the OperatorID is provided corresponding to ISO, the country code MUST be provided as Alpha-2-Code (DIN EN ISO-3166-1) and the separator character “*” is optional.\n\nIn case the OperatorID is provided corresponding to DIN, the country code MUST be provided according to the international telecommunication numbering plan (ITU-T E.164:11/2010) and the separator character “*” is mandatory.\n\nExamples ISO: “DE*A36”, “DEA36”\n\nExample DIN: “+49*536”\n"
    },
    "ProviderID": {
      "type": "string",
      "pattern": "^([A-Za-z]{2}\\-?[A-Za-z0-9]{3}|[A-Za-z]{2}[\\*|-]?[A-Za-z0-9]{3})$",
      "description": "The ProviderID is defined by Hubject and is used to identify the EMP\n\nA string that `MUST` be valid with respect to the following regular expression: ISO | DIN\n\n`^([A-Za-z]{2}\\-?[A-Za-z0-9]{3}|[A-Za-z]{2}[\\*|-]?[A-Za-z0-9]{3})$`\n\nThe expression validates the string as ProviderID including the preceding country code, which is part of EvcoID. It supports both definitions DIN SPEC 91286:2011-11 as well as ISO 15118-1.\n\nIn case the ProviderID is provided corresponding to ISO, the country code `MUST` be provided as Alpha-2-Code (DIN EN ISO-3166-1) and the separator character “-” is optional.\n\nExamples ISO: “DE8EO”, “DE-8EO”\n\nExamples DIN: “DE8EO”, “DE*8EO”, “DE-8EO”\n"
    }
  }
}