Data · API v1

The MCC-MNC database, as an API

Query every mobile country code, network code, PLMN ID, TADIG code and radio technology in the database over plain HTTP. Read-only, free, and no API key required.

Base URL
https://mcc-mnc.org/api/v1

Overview

What you get

One HTTP GET away: 2,600+ networks across 230+ countries and territories, each with its operator, brand, PLMN ID, TADIG code and the 2G/3G/4G/5G technologies it runs.

Authentication

None

No key, no sign-up, no token. Just call it.

Format

JSON

UTF-8 JSON on every response, success or failure.

CORS

Open

Callable straight from the browser, any origin.

Method

GET only

Read-only by design — nothing here can mutate data.

Quick start

Make your first call

Every response is a JSON object with a data key; list endpoints add a meta object carrying the pagination counters. Edit the path below and send it — these requests hit the live production API.

Try it — live against production data

Send a request to see the response

Conventions

How the API behaves

The same rules apply to every endpoint, so you only have to learn them once.

Errors

Failures use standard HTTP status codes and always return the same envelope, so you can branch on a stable machine-readable code rather than parsing prose.

400invalid_parameter

A filter, sort or pagination value was malformed — the offending parameter is named in the body.

400bad_request

The request is missing a required combination, e.g. lookup called without plmn or an mcc/mnc pair.

404not_found

The identifier does not match any record.

500internal_error

Something broke on our side. Retry, then get in touch if it persists.

Error response
{
  "error": {
    "code": "invalid_parameter",
    "message": "`limit` must be between 1 and 200.",
    "parameter": "limit"
  }
}

Caching & fair use

Responses ship a Cache-Control header — an hour at the edge for records, a day for reference data such as regions and network types, both with a long stale-while-revalidate window. There is no hard rate limit today: keep bursts under roughly ten requests a second, cache what you fetch, and don’t crawl the whole dataset on a loop — if you want everything, take the bulk download instead: one file, every network, in CSV, Excel, TXT or JSON.

Data completeness

The database is community-maintained, so coverage varies by field: mcc, mnc and plmn are always present, tadig is set on roughly a quarter of networks, and code and dialCode are sparse. Treat every nullable field in the schema as genuinely optional, and send us a correction when you spot a gap.

Versioning

The version lives in the path (/api/v1). New fields and new endpoints can appear in v1 at any time, so parse defensively and ignore what you don’t recognise. Anything that would break an existing client ships under a new version prefix instead.

Reference

Networks

Every mobile network in the database, with its MCC, MNC, PLMN ID, TADIG code, operating company, consumer brand and the radio technologies it runs.

GET/api/v1/networks

List & search networks

The main workhorse. Every filter below is optional and they combine with AND; repeated values within one filter combine with OR.

Query parameters

searchstring
Free-text match across operator, brand, TADIG, MCC, MNC, PLMN and country name. Alias: q.
mccstring
Exact Mobile Country Code.
mncstring
Exact Mobile Network Code.
plmnstring
Exact PLMN ID (MCC + MNC concatenated).
countrystring
ISO-3166 alpha-2 code or country slug.
regionstring
Region slug or name.
tadigstring
Exact TADIG code.
operatorstring
Partial, case-insensitive operator name.
brandstring
Partial, case-insensitive brand name.
typestring
Network-type slug. Repeat or comma-separate for several: ?type=lte_1800,5g_3500.
generationstring
Filter by technology generation. Comma-separate for several.2G3G4G5G
sortstring
Field to sort by.mccmncplmnoperatorbrandtadigcountrycreatedAtupdatedAtDefault: mcc
include_descriptionboolean
Include the long-form editorial description for each record. Off by default because it is large.Default: false
limitinteger
Number of records to return. Between 1 and 200.Default: 50
offsetinteger
Number of records to skip — combine with limit to page.Default: 0
orderstring
Sort direction.ascdescDefault: asc

Example request

curl -s "https://mcc-mnc.org/api/v1/networks?country=DE&generation=5G&limit=1"

Example response

{
  "data": [
    {
      "id": 122,
      "slug": "262_01",
      "mcc": "262",
      "mnc": "01",
      "plmn": "26201",
      "code": null,
      "operator": "Telekom Deutschland GmbH",
      "brand": "Telekom",
      "tadig": "DEUD1",
      "country": {
        "name": "Germany",
        "iso": "DE",
        "slug": "germany",
        "dialCode": null,
        "region": { "name": "Europe", "slug": "europe" }
      },
      "networkTypes": [
        {
          "name": "LTE",
          "slug": "lte_1800",
          "frequency": "1800",
          "generations": ["4G"]
        },
        {
          "name": "5G",
          "slug": "5g_3500",
          "frequency": "3500",
          "generations": ["5G"]
        }
      ],
      "generations": ["2G", "3G", "4G", "5G"],
      "url": "https://mcc-mnc.org/networks/262_01",
      "createdAt": "2025-04-09T13:26:22.059Z",
      "updatedAt": "2025-04-09T13:26:22.059Z"
    }
  ],
  "meta": {
    "total": 2,
    "limit": 1,
    "offset": 0,
    "count": 1,
    "hasMore": true
  }
}
GET/api/v1/networks/{identifier}

Retrieve a network

Fetch one network by slug, PLMN ID or numeric id — resolved in that order. The response includes the editorial description.

Path parameters

identifierstringrequired
Network slug, PLMN ID (5–6 digits) or numeric id.

Example request

curl -s "https://mcc-mnc.org/api/v1/networks/26201"

Example response

{
  "data": {
    "id": 122,
    "slug": "262_01",
    "mcc": "262",
    "mnc": "01",
    "plmn": "26201",
    "code": null,
    "operator": "Telekom Deutschland GmbH",
    "brand": "Telekom",
    "tadig": "DEUD1",
    "country": {
      "name": "Germany",
      "iso": "DE",
      "slug": "germany",
      "dialCode": null,
      "region": { "name": "Europe", "slug": "europe" }
    },
    "networkTypes": [
      {
        "name": "LTE",
        "slug": "lte_1800",
        "frequency": "1800",
        "generations": ["4G"]
      },
      {
        "name": "5G",
        "slug": "5g_3500",
        "frequency": "3500",
        "generations": ["5G"]
      }
    ],
    "generations": ["2G", "3G", "4G", "5G"],
    "url": "https://mcc-mnc.org/networks/262_01",
    "createdAt": "2025-04-09T13:26:22.059Z",
    "updatedAt": "2025-04-09T13:26:22.059Z"
  }
}
GET/api/v1/lookup

Resolve a PLMN

The one-question endpoint: given an MCC/MNC pair (or a PLMN ID), which operator is it? Returns the single best match, with any other records sharing the code listed under meta.alternatives.

Query parameters

plmnstring
PLMN ID. Use this or the mcc + mnc pair.
mccstring
Mobile Country Code. Requires mnc.
mncstring
Mobile Network Code. Requires mcc.
  • Returns 404 with an error body when the code is unassigned.

Example request

curl -s "https://mcc-mnc.org/api/v1/lookup?mcc=262&mnc=01"

Example response

{
  "data": {
    "id": 122,
    "slug": "262_01",
    "mcc": "262",
    "mnc": "01",
    "plmn": "26201",
    "code": null,
    "operator": "Telekom Deutschland GmbH",
    "brand": "Telekom",
    "tadig": "DEUD1",
    "country": {
      "name": "Germany",
      "iso": "DE",
      "slug": "germany",
      "dialCode": null,
      "region": { "name": "Europe", "slug": "europe" }
    },
    "networkTypes": [
      {
        "name": "LTE",
        "slug": "lte_1800",
        "frequency": "1800",
        "generations": ["4G"]
      },
      {
        "name": "5G",
        "slug": "5g_3500",
        "frequency": "3500",
        "generations": ["5G"]
      }
    ],
    "generations": ["2G", "3G", "4G", "5G"],
    "url": "https://mcc-mnc.org/networks/262_01",
    "createdAt": "2025-04-09T13:26:22.059Z",
    "updatedAt": "2025-04-09T13:26:22.059Z"
  },
  "meta": {
    "matches": 1,
    "alternatives": []
  }
}

Reference

Countries

The 250-odd countries and territories that hold an MCC allocation, each linked to its region and networks.

GET/api/v1/countries

List countries

Every country, with a live network count.

Query parameters

searchstring
Free-text match on name, slug, ISO code or dial code. Alias: q.
isostring
Exact ISO-3166 alpha-2 code.
regionstring
Region slug or name.
sortstring
Field to sort by.nameisonetworksdialCodeDefault: name
limitinteger
Number of records to return. Between 1 and 200.Default: 50
offsetinteger
Number of records to skip — combine with limit to page.Default: 0
orderstring
Sort direction.ascdescDefault: asc

Example request

curl -s "https://mcc-mnc.org/api/v1/countries?region=europe&sort=networks&order=desc&limit=1"

Example response

{
  "data": [
    {
      "id": 217,
      "name": "United Kingdom",
      "iso": "GB",
      "slug": "united_kingdom",
      "dialCode": null,
      "region": {
        "id": 4,
        "name": "Europe",
        "slug": "europe",
        "url": "https://mcc-mnc.org/regions/europe"
      },
      "networkCount": 65,
      "url": "https://mcc-mnc.org/countries/united_kingdom"
    }
  ],
  "meta": {
    "total": 55,
    "limit": 1,
    "offset": 0,
    "count": 1,
    "hasMore": true
  }
}
GET/api/v1/countries/{identifier}

Retrieve a country

One country by ISO-3166 alpha-2 code or slug, with all of its networks inlined.

Path parameters

identifierstringrequired
ISO alpha-2 code (DE) or slug (germany).

Query parameters

include_networksboolean
Set to false to omit the networks array and get just the country record.Default: true

Example request

curl -s "https://mcc-mnc.org/api/v1/countries/DE"

Example response

{
  "data": {
    "id": 77,
    "name": "Germany",
    "iso": "DE",
    "slug": "germany",
    "dialCode": null,
    "region": {
      "id": 4,
      "name": "Europe",
      "slug": "europe",
      "url": "https://mcc-mnc.org/regions/europe"
    },
    "networkCount": 39,
    "description": "Germany is such a gem to explore…",
    "url": "https://mcc-mnc.org/countries/germany",
    "networks": [ … ]
  }
}

Reference

Regions

Continental groupings used across the site. Small, stable and cached hard — ideal for populating a dropdown.

GET/api/v1/regions

List regions

All regions with their country counts. Not paginated.

Query parameters

orderstring
Sort direction on name.ascdescDefault: asc

Example request

curl -s "https://mcc-mnc.org/api/v1/regions"

Example response

{
  "data": [
    {
      "id": 4,
      "name": "Europe",
      "slug": "europe",
      "countryCount": 55,
      "url": "https://mcc-mnc.org/regions/europe"
    }
  ],
  "meta": { "total": 7 }
}
GET/api/v1/regions/{slug}

Retrieve a region

One region with every country it contains.

Path parameters

slugstringrequired
Region slug or name.
  • Countries nested inside a region omit their own region object — you already know which one they belong to.

Example request

curl -s "https://mcc-mnc.org/api/v1/regions/europe"

Example response

{
  "data": {
    "id": 4,
    "name": "Europe",
    "slug": "europe",
    "countryCount": 55,
    "url": "https://mcc-mnc.org/regions/europe",
    "description": "Europe stands as a highly interconnected…",
    "countries": [
      {
        "id": 217,
        "name": "United Kingdom",
        "iso": "GB",
        "slug": "united_kingdom",
        "dialCode": null,
        "region": null,
        "networkCount": 65,
        "url": "https://mcc-mnc.org/countries/united_kingdom"
      }
    ]
  }
}

Reference

Network types

Radio technologies and their frequency bands — GSM 900, LTE 1800, NR 3500 and the rest — each tagged with the generations it belongs to.

GET/api/v1/network-types

List network types

Every technology in the database with the number of networks running it. Not paginated.

Query parameters

generationstring
Filter by generation. Comma-separate for several.2G3G4G5G
searchstring
Match on name, slug or frequency. Alias: q.
orderstring
Sort direction on name.ascdescDefault: asc
  • Some older rows have no generation flags set in the database; where the technology name makes it unambiguous (5G, LTE, UMTS, GSM…) the generation is inferred, so ?generation=5G returns them too.

Example request

curl -s "https://mcc-mnc.org/api/v1/network-types?generation=5G"

Example response

{
  "data": [
    {
      "id": 18,
      "name": "5G",
      "slug": "5g_3500",
      "frequency": "3500",
      "generations": ["5G"],
      "networkCount": 63,
      "url": "https://mcc-mnc.org/coverage/5g_3500"
    }
  ],
  "meta": { "total": 7 }
}
GET/api/v1/network-types/{slug}

Retrieve a network type

One technology, plus how many countries have at least one network running it.

Path parameters

slugstringrequired
Network-type slug or name.

Example request

curl -s "https://mcc-mnc.org/api/v1/network-types/5g_3500"

Example response

{
  "data": {
    "id": 18,
    "name": "5G",
    "slug": "5g_3500",
    "frequency": "3500",
    "generations": ["5G"],
    "networkCount": 63,
    "countryCount": 33,
    "url": "https://mcc-mnc.org/coverage/5g_3500"
  }
}

Reference

TADIG codes

A flattened view of the TADIG codes used in roaming agreements and TAP files — one row per network that has one.

GET/api/v1/tadigs

List TADIG codes

Networks that carry a TADIG code, searchable by code or operator.

Query parameters

searchstring
Match on TADIG, operator, brand or country name. Alias: q.
tadigstring
Exact TADIG code.
countrystring
ISO alpha-2 code or country slug.
limitinteger
Number of records to return. Between 1 and 200.Default: 50
offsetinteger
Number of records to skip — combine with limit to page.Default: 0
orderstring
Sort direction.ascdescDefault: asc

Example request

curl -s "https://mcc-mnc.org/api/v1/tadigs?country=DE&limit=1"

Example response

{
  "data": [
    {
      "tadig": "DEUD1",
      "operator": "Telekom Deutschland GmbH",
      "brand": "Telekom",
      "mcc": "262",
      "mnc": "01",
      "plmn": "26201",
      "country": {
        "name": "Germany",
        "iso": "DE",
        "slug": "germany"
      },
      "network": {
        "id": 122,
        "slug": "262_01",
        "url": "https://mcc-mnc.org/networks/262_01"
      }
    }
  ],
  "meta": {
    "total": 3,
    "limit": 1,
    "offset": 0,
    "count": 1,
    "hasMore": true
  }
}

Reference

Metadata

Service discovery and headline counts.

GET/api/v1/stats

Database statistics

Live totals for the whole dataset — the same figures the stats page renders.

Example request

curl -s "https://mcc-mnc.org/api/v1/stats"

Example response

{
  "data": {
    "networks": 2664,
    "countries": 231,
    "regions": 7,
    "networkTypes": 90,
    "networksWithTadig": 649,
    "networksPerCountry": 11.53,
    "lastUpdated": "2025-04-09T13:26:22.184Z"
  }
}
GET/api/v1

Service index

A machine-readable map of every endpoint, plus a link to the OpenAPI document.

Example request

curl -s "https://mcc-mnc.org/api/v1"

Example response

{
  "name": "mcc-mnc.org API",
  "version": "v1",
  "documentation": "https://mcc-mnc.org/api",
  "openapi": "https://mcc-mnc.org/api/v1/openapi.json",
  "authentication": "none",
  "endpoints": { … }
}

Attribution

Using the data

The API is free for commercial and non-commercial use. If it ends up in something public, a link back to mcc-mnc.org keeps the database funded and correctable.