ITU

ITU DataHub API

The undocumented JSON API that serves the ITU DataHub (datahub.itu.int), ITU's official ICT statistics portal and the successor to ICT Eye. Confirmed anonymously callable on 2026-07-25 with no key, header, or referer required — /v2/country/all returns the full country reference list, /v2/region/all the ITU/BDT and UN M49 groupings, /v2/dictionaries/getcategories the full indicator dictionary, /v2/data/bycode/{codeID} the time series for an indicator, and /v2/idi/* and /v2/umc/* the ICT Development Index and Universal Meaningful Connectivity dashboards. ITU publishes no documentation, no OpenAPI, and no terms of programmatic use for this surface; the endpoint list was recovered from the DataHub client bundle, so it should be treated as an internal backend that happens to be public rather than as a supported product API.

OpenAPI Specification

itu-datahub-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: ITU DataHub API
  version: '2'
  summary: Undocumented public JSON API behind the ITU DataHub ICT statistics portal.
  description: >-
    ITU publishes **no** OpenAPI, no reference documentation, and no terms of programmatic use for
    this API. This document is an API Evangelist **observed-behaviour** description: every path,
    parameter, status code and response shape below was recorded from live, anonymous HTTP calls
    against `https://api.datahub.itu.int/v2` on 2026-07-25/26. Nothing here is invented — where a
    behaviour was not observed it is simply absent.


    The route templates were recovered from the DataHub Next.js client bundle
    (`datahub.itu.int/_next/static/chunks/*.js`), which hardcodes the base URL
    `https://api.datahub.itu.int/v2`, and each recovered route was then called to confirm it exists
    and to capture its real response. Treat this surface as an internal backend that happens to be
    public rather than as a supported product API: it can change without notice.


    No authentication of any kind is required. No API key, no `Referer`, no `Origin`, no
    `User-Agent`. `Access-Control-Allow-Origin: *` is returned on every response. The service runs
    on AWS API Gateway behind CloudFront (`x-amzn-requestid`, `x-amz-cf-id` response headers).
  contact:
    name: ITU ICT Data & Analytics Division
    email: indicators@itu.int
    url: https://datahub.itu.int/
  license:
    name: ITU Terms of Use
    url: https://www.itu.int/en/about/Pages/terms-of-use.aspx
  x-apievangelist-provenance:
    method: derived
    derived_from: live anonymous HTTP probes + the public DataHub client bundle
    probed: '2026-07-26'
    provider_published_spec: false
    note: >-
      Derived by API Evangelist from observed responses. ITU has not published, reviewed, or
      endorsed this description.
externalDocs:
  description: ITU DataHub portal (the only human surface for this API)
  url: https://datahub.itu.int/
servers:
- url: https://api.datahub.itu.int/v2
  description: Production (AWS API Gateway + CloudFront). Anonymous.
tags:
- name: Reference
  description: Country and region reference data.
- name: Indicators
  description: The indicator dictionary — categories, definitions, units and coverage.
- name: Data
  description: Indicator time series, by indicator, country and region aggregate.
- name: Dashboards
  description: Curated DataHub dashboard definitions.
- name: IDI
  description: ICT Development Index composite scores.
- name: UMC
  description: Universal and Meaningful Connectivity targets and scores.
- name: Methodology
  description: Dataset provenance and the owning ITU divisions.
paths:
  /country/all:
    get:
      operationId: listCountries
      tags: [Reference]
      summary: List all countries
      description: >-
        Returns the full ITU country reference list — 200-plus economies with their ITU CountryID,
        ISO 3166-1 alpha-3 code, short and long names, and every regional grouping the country
        belongs to (ITU/BDT classification, UN M49, World Bank income group).
      responses:
        '200':
          description: The full country list.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Country' }
              examples:
                aruba:
                  summary: First element of the live response
                  value:
                  - CountryID: 4
                    IsoCode: ABW
                    ShortName: Aruba
                    LongName: Aruba
                    Regions:
                    - { id: 330, regionCode: DEV, class: UN M49 Developed-developing, classID: 92, region: Developing }
                    - { id: 650, regionCode: OE, class: ITU/BDT & Other Classification, classID: 177, region: Other Economies }
                    - { id: 701, regionCode: World, class: World, no regions, classID: 187, region: World }
                    - { id: 2115, regionCode: HI2023, class: WB_Income2023, classID: 1310, region: High Income }
  /region/all:
    get:
      operationId: listRegions
      tags: [Reference]
      summary: List all regions
      description: >-
        Returns every regional grouping used across DataHub — the ITU/BDT classification (Africa,
        Americas, Arab States, Asia & Pacific, CIS, Europe), UN M49 groupings including LDC/LLDC/SIDS,
        and World Bank income classes by year.
      responses:
        '200':
          description: The region list.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Region' }
              examples:
                arabStates:
                  value:
                  - { className: ITU/BDT Classification, regionCode: ARB, regionName: Arab States, regionID: 3 }
  /dictionaries/getcategories:
    get:
      operationId: getIndicatorCategories
      tags: [Indicators]
      summary: Get the indicator dictionary
      description: >-
        Returns the complete DataHub indicator dictionary as a category / sub-category / item tree.
        Each leaf item carries the `codeID` used by the data endpoints, its label, the owning
        `databaseID`, and whether it is a collection indicator.
      responses:
        '200':
          description: The indicator dictionary tree.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/IndicatorCategory' }
  /dictionaries/getbyid/{codeID}:
    get:
      operationId: getIndicatorById
      tags: [Indicators]
      summary: Get one indicator definition
      description: >-
        Returns the full metadata record for a single indicator — label, description, units,
        answer type, start and end year, category placement, the list of countries with data
        (`availableCountries`), sibling and disaggregation series, and the landing page.
      parameters:
      - $ref: '#/components/parameters/codeID'
      responses:
        '200':
          description: The indicator definition.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/IndicatorDefinition' }
        '500':
          $ref: '#/components/responses/UnknownIdentifier'
  /data/bycode/{codeID}:
    get:
      operationId: getDataByCode
      tags: [Data]
      summary: Get an indicator time series for every country
      description: >-
        Returns the full observed time series for one indicator across every country — one record
        per country-year, each with the value, the reporting source, and any data note. Responses
        are large (the Internet-users series returns roughly 1.1 MB).
      parameters:
      - $ref: '#/components/parameters/codeID'
      responses:
        '200':
          description: >-
            The time series. An unknown `codeID` returns HTTP 200 with an empty array rather than a
            404 — observed on `codeID=999999999`.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/DataPoint' }
              examples:
                internetUsersAruba:
                  summary: First element of the live response for codeID 11624
                  value:
                  - codeID: 11624
                    shortName: Aruba
                    dataID: 4790044
                    dataNote: ''
                    dataYear: 2000
                    code: i99H
                    dataSource: Servicio di Telecomunicacion di Aruba (SETAR).
                    answer:
                    - { value: '15.4428229480349', id: 4790044 }
                    countryID: 4
                    isoCode: ABW
  /data/bycode/{codeID}/byiso/{iso}:
    get:
      operationId: getDataByCodeAndIso
      tags: [Data]
      summary: Get an indicator time series for one country
      description: >-
        Returns the observed time series for one indicator filtered to a single country by its
        ISO 3166-1 alpha-3 code. The country-scoped form of `getDataByCode`, and the practical way
        to use this API without downloading the whole series.
      parameters:
      - $ref: '#/components/parameters/codeID'
      - $ref: '#/components/parameters/iso'
      responses:
        '200':
          description: >-
            The country time series. An unrecognised ISO code returns HTTP 200 with an empty array —
            observed on `iso=ZZZ`.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/DataPoint' }
              examples:
                internetUsersUSA:
                  value:
                  - codeID: 11624
                    shortName: United States
                    answer:
                    - { value: '43.0791626375201', id: 4792974 }
                    dataID: 4792974
                    code: i99H
                    isoCode: USA
                    dataNote: ''
                    dataYear: 2000
                    countryID: 244
                    dataSource: ITU estimate.
  /aggregation/bycodeid/{codeID}/byregionid/{regionID}:
    get:
      operationId: getRegionalAggregate
      tags: [Data]
      summary: Get a regional aggregate series for an indicator
      description: >-
        Returns the ITU-computed regional aggregate for one indicator and one region — one record
        per year with the aggregate value and, where applicable, the percentage form.
      parameters:
      - $ref: '#/components/parameters/codeID'
      - $ref: '#/components/parameters/regionID'
      responses:
        '200':
          description: The regional aggregate series.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/AggregatePoint' }
              examples:
                arabStates2005:
                  value:
                  - { codeID: 11624, code: i99H, regionID: 647, regionName: Arab States, classID: 177,
                      dataYear: 2005, dataID: 71287, databaseID: 1,
                      answer: [{ value: 8.6 }], answersPercentage: [{ value: 8.6 }],
                      createDate: '2024-04-24T18:20:23.000Z', updateDate: '2025-11-17T13:13:18.000Z',
                      numberOfAnswer: null, internalNote: null }
  /dashboard/all:
    get:
      operationId: listDashboards
      tags: [Dashboards]
      summary: List DataHub dashboards
      description: >-
        Returns every curated DataHub dashboard with its name, category, description, and the full
        set of indicator codes it renders including each code's disaggregations, units, visibility
        and coverage years.
      responses:
        '200':
          description: The dashboard definitions.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Dashboard' }
  /idi/dashboard/all:
    get:
      operationId: getIdiStructure
      tags: [IDI]
      summary: Get the ICT Development Index structure
      description: >-
        Returns the IDI composite tree — the index, its Universal connectivity and Meaningful
        connectivity pillars, and the underlying indicators each pillar scores.
      responses:
        '200':
          description: The IDI structure.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/IdiNode' }
  /idi/dashboard/version:
    get:
      operationId: listIdiVersions
      tags: [IDI]
      summary: List available IDI editions
      description: Returns the list of IDI edition years available in DataHub.
      responses:
        '200':
          description: The edition years.
          content:
            application/json:
              schema:
                type: array
                items: { type: integer }
              examples:
                editions:
                  value: [2023, 2024, 2025, 2026]
  /idi/data/bycountryid/{countryID}:
    get:
      operationId: getIdiByCountry
      tags: [IDI]
      summary: Get IDI scores for one country
      description: >-
        Returns the IDI pillar and indicator scores for a single country, keyed by the ITU
        `CountryID` from `listCountries` (not the ISO code).
      parameters:
      - $ref: '#/components/parameters/countryID'
      responses:
        '200':
          description: >-
            The country's IDI scores. Returns HTTP 200 with an empty array where no scores exist
            for the supplied identifier.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/IdiScore' }
  /idi/region/byregionid/{regionID}:
    get:
      operationId: getIdiByRegion
      tags: [IDI]
      summary: Get IDI scores for one region
      description: Returns the IDI pillar and indicator scores aggregated for a single region.
      parameters:
      - $ref: '#/components/parameters/regionID'
      responses:
        '200':
          description: The region's IDI scores.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/IdiScore' }
              examples:
                arabStates:
                  value:
                  - { regionID: 3, dataID: 2026003005, codeID: 5, score: 56.355555555555554, dataYear: 2026 }
  /umc/dashboard/all:
    get:
      operationId: getUmcDashboard
      tags: [UMC]
      summary: Get the Universal and Meaningful Connectivity dashboard
      description: >-
        Returns every UMC indicator with its target definition — the target name, description,
        minimum and maximum target values, units, source, and the topic and macro it rolls into.
      responses:
        '200':
          description: The UMC indicator and target definitions.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/UmcIndicator' }
  /umc/topic/all:
    get:
      operationId: listUmcTopics
      tags: [UMC]
      summary: List UMC topics
      description: Returns the six UMC topics — People, Homes, Businesses, Affordability, Schools, Infrastructure.
      responses:
        '200':
          description: The topic list.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/UmcTopic' }
              examples:
                topics:
                  value:
                  - { topicID: 1, label: People }
                  - { topicID: 2, label: Homes }
                  - { topicID: 3, label: Businesses }
                  - { topicID: 4, label: Affordability }
                  - { topicID: 5, label: Schools }
                  - { topicID: 6, label: Infrastructure }
  /umc/macro/all:
    get:
      operationId: listUmcMacros
      tags: [UMC]
      summary: List UMC macro categories
      description: Returns the two UMC macro categories — Universal connectivity and Meaningful connectivity.
      responses:
        '200':
          description: The macro list.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/UmcMacro' }
              examples:
                macros:
                  value:
                  - { macroID: 1, label: Universal connectivity }
                  - { macroID: 2, label: Meaningful connectivity }
  /umc/target/all:
    get:
      operationId: listUmcTargets
      tags: [UMC]
      summary: List UMC target bands
      description: >-
        Returns the UMC scoring bands used to colour the dashboard — No data, Limited, Satisfactory,
        Advanced, Target met — with the numeric range each band covers.
      responses:
        '200':
          description: The target bands.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/UmcTarget' }
              examples:
                bands:
                  value:
                  - { targetID: 0, min: -1, max: -1, label: No data }
                  - { targetID: 1, min: 0, max: 50, label: Limited }
                  - { targetID: 2, min: 50, max: 75, label: Satisfactory }
                  - { targetID: 3, min: 75, max: 95, label: Advanced }
                  - { targetID: 4, min: 95, max: 100, label: Target met }
  /umc/bycountryid/{countryID}:
    get:
      operationId: getUmcByCountry
      tags: [UMC]
      summary: Get UMC scores for one country
      description: >-
        Returns every UMC indicator scored for a single country, keyed by the ITU `CountryID`, with
        the observed value alongside the target definition it is measured against.
      parameters:
      - $ref: '#/components/parameters/countryID'
      responses:
        '200':
          description: The country's UMC scores.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/UmcCountryScore' }
  /methodology/dataset:
    get:
      operationId: listDatasets
      tags: [Methodology]
      summary: List the source datasets behind DataHub
      description: >-
        Returns the ITU datasets that feed DataHub — short name, type (quantitative or qualitative),
        the owning ITU division and its contact email, whether the dataset is publicly visible, and
        whether it has frozen public data.
      responses:
        '200':
          description: The dataset inventory.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Dataset' }
              examples:
                wti:
                  value:
                  - { datasetID: 1, datasetShortName: WTI, datasetType: Quantitative,
                      teamShortName: IDA, teamName: ICT DATA & ANALYTICS DIVISION,
                      email: indicators@itu.int, publiclyVisible: true, hasFrozenPublicData: true }
components:
  parameters:
    codeID:
      name: codeID
      in: path
      required: true
      description: The DataHub indicator identifier, from `getIndicatorCategories`.
      schema: { type: integer }
      example: 11624
    iso:
      name: iso
      in: path
      required: true
      description: ISO 3166-1 alpha-3 country code, from `listCountries`.
      schema: { type: string, minLength: 3, maxLength: 3 }
      example: USA
    countryID:
      name: countryID
      in: path
      required: true
      description: The ITU numeric country identifier, from `listCountries`.
      schema: { type: integer }
      example: 244
    regionID:
      name: regionID
      in: path
      required: true
      description: The region identifier, from `listRegions`.
      schema: { type: integer }
      example: 3
  responses:
    UnknownIdentifier:
      description: >-
        Observed on an unknown identifier. The body is a plain-text runtime error string, not JSON
        and not RFC 9457 problem+json — e.g. `Cannot set properties of undefined (setting
        'availableCountries')`.
      content:
        text/plain:
          schema: { type: string }
    MissingRoute:
      description: >-
        AWS API Gateway returns this for any path that is not a configured route, including the
        `/v2` base path itself. It is not an authentication requirement — every configured route
        answers anonymously.
      content:
        application/json:
          schema:
            type: object
            properties:
              message: { type: string, const: Missing Authentication Token }
  schemas:
    Country:
      type: object
      description: A country or economy in the ITU reference list.
      properties:
        CountryID: { type: integer, description: ITU numeric country identifier. }
        IsoCode: { type: string, description: ISO 3166-1 alpha-3 code. }
        ShortName: { type: string }
        LongName: { type: string }
        Regions:
          type: array
          items: { $ref: '#/components/schemas/CountryRegion' }
    CountryRegion:
      type: object
      description: A regional grouping membership for a country.
      properties:
        id: { type: integer }
        regionCode: { type: string }
        class: { type: string, description: The classification family, e.g. "ITU/BDT & Other Classification". }
        classID: { type: integer }
        region: { type: string }
    Region:
      type: object
      properties:
        className: { type: string }
        regionCode: { type: string }
        regionName: { type: string }
        regionID: { type: integer }
    IndicatorCategory:
      type: object
      properties:
        category: { type: string }
        categorySort: { type: integer }
        subCategory:
          type: array
          items: { $ref: '#/components/schemas/IndicatorSubCategory' }
    IndicatorSubCategory:
      type: object
      properties:
        subCategory: { type: string }
        subCategorySort: { type: integer }
        items:
          type: array
          items: { $ref: '#/components/schemas/IndicatorItem' }
    IndicatorItem:
      type: object
      properties:
        codeID: { type: integer }
        label: { type: string }
        databaseID: { type: integer }
        seriesType: { type: string }
        indicatorSort: { type: integer }
        external: { type: boolean }
        isCollection: { type: boolean }
    IndicatorDefinition:
      type: object
      description: The full metadata record for one indicator.
      properties:
        codeID: { type: integer }
        code: { type: string, description: The ITU short indicator code, e.g. "i99H". }
        label: { type: string }
        codeDesc: { type: string }
        units: { type: string }
        unitsType: { type: string }
        alternativeUnits: {}
        answerType: { type: string }
        startYear: { type: integer }
        endYear: { type: integer }
        category: { type: string }
        categorySort: { type: integer }
        indicatorCategory: { type: string }
        indicatorCategorySort: { type: integer }
        subCategory: { type: string }
        subCategorySort: { type: integer }
        databaseID: { type: integer }
        codeVisibility: { type: string, description: e.g. "Public/Free". }
        seriesType: { type: string }
        archive: { type: boolean }
        external: { type: boolean }
        indicatorSort: { type: integer }
        disaggregation: { type: array, items: { type: object } }
        disaggregationSort: { type: integer }
        sibling: { type: array, items: { type: object } }
        availableCountries: { type: array, items: { type: object } }
        landingPage: { type: string }
        Question: { type: string }
        Comment: { type: string }
    DataPoint:
      type: object
      description: One country-year observation of an indicator.
      properties:
        dataID: { type: integer }
        codeID: { type: integer }
        code: { type: string }
        countryID: { type: integer }
        isoCode: { type: string }
        shortName: { type: string }
        dataYear: { type: integer }
        dataSource: { type: string, description: The reporting source, e.g. a national regulator or "ITU estimate.". }
        dataNote: { type: string }
        answer:
          type: array
          description: The observed value. Values are returned as strings on this endpoint.
          items:
            type: object
            properties:
              value: { type: string }
              id: { type: integer }
    AggregatePoint:
      type: object
      description: One region-year aggregate of an indicator, computed by ITU.
      properties:
        dataID: { type: integer }
        codeID: { type: integer }
        code: { type: string }
        regionID: { type: integer }
        regionName: { type: string }
        classID: { type: integer }
        databaseID: { type: integer }
        dataYear: { type: integer }
        answer: { type: array, items: { type: object, properties: { value: { type: number } } } }
        answersPercentage: { type: array, items: { type: object, properties: { value: { type: number } } } }
        numberOfAnswer: { type: [integer, 'null'] }
        internalNote: { type: [string, 'null'] }
        createDate: { type: string, format: date-time }
        updateDate: { type: string, format: date-time }
    Dashboard:
      type: object
      properties:
        dashboardID: { type: integer }
        dashboardName: { type: string }
        dashboardCategory: { type: string }
        dashboardDesc: { type: string }
        archive: { type: boolean }
        dashboardCodes: { type: array, items: { type: object } }
    IdiNode:
      type: object
      description: A node in the ICT Development Index composite tree.
      properties:
        codeID: { type: integer }
        code: { type: string }
        label: { type: string }
        codeDesc: { type: string }
        children: { type: array, items: { $ref: '#/components/schemas/IdiNode' } }
    IdiScore:
      type: object
      properties:
        dataID: { type: integer }
        codeID: { type: integer }
        regionID: { type: integer }
        score: { type: number }
        dataYear: { type: integer }
    UmcIndicator:
      type: object
      properties:
        codeID: { type: integer }
        code: { type: string }
        label: { type: string }
        indicatorLabel: { type: string }
        codeDesc: { type: string }
        units: { type: string }
        source: { type: string }
        archive: { type: boolean }
        topicID: { type: integer }
        macroID: { type: integer }
        targetName: { type: string }
        targetDesc: { type: string }
        targetMinValue: { type: number }
        targetMaxValue: { type: number }
        createDate: { type: integer, description: Epoch milliseconds. }
        updateDate: { type: integer, description: Epoch milliseconds. }
    UmcCountryScore:
      type: object
      properties:
        codeID: { type: integer }
        code: { type: string }
        label: { type: string }
        units: { type: string }
        source: { type: string }
        archive: { type: boolean }
        topicID: { type: integer }
        topicTarget: { type: string }
        macroID: { type: integer }
        macroTarget: { type: string }
        targetName: { type: string }
        targetDesc: { type: string }
        targetMinValue: { type: number }
        targetMaxValue: { type: number }
        rawMinValue: { type: number }
        rawMaxValue: { type: number }
        answer: { type: array, items: { type: object } }
    UmcTopic:
      type: object
      properties:
        topicID: { type: integer }
        label: { type: string }
    UmcMacro:
      type: object
      properties:
        macroID: { type: integer }
        label: { type: string }
    UmcTarget:
      type: object
      properties:
        targetID: { type: integer }
        min: { type: number }
        max: { type: number }
        label: { type: string }
    Dataset:
      type: object
      properties:
        datasetID: { type: integer }
        datasetShortName: { type: string }
        datasetType: { type: string, enum: [Quantitative, Qualitative] }
        teamShortName: { type: string }
        teamName: { type: string }
        email: { type: string, format: email }
        publiclyVisible: { type: boolean }
        hasFrozenPublicData: { type: boolean }