查看全局 API 说明(请求/响应头、通用 JSON 格式)
全国行政区划 API
提供省市区镇村查询、搜索分页、子级级联与地名检索
https://www.resapi.cn/v1/regions
简介
数据来源于 2026 年全国行政区划公开数据。支持省级列表、关键词搜索分页、子级级联与按编码查详情。
GET /v1/regions
行政区划列表查询,支持按层级、父编码筛选。
查询参数
| 名称 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| level | string | 否 | 层级:province/city/district/town/village |
city |
| parent_code | string | 否 | 父级编码 | 110000 |
| page | int | 否 | 页码,默认 1 |
1 |
| page_size | int | 否 | 每页条数,默认 10,最大 100 |
50 |
| limit | int | 否 | 兼容旧参数:等价于 page=1 且 page_size=limit(最大 100) |
50 |
响应字段(meta)
| 字段 | 说明 |
|---|---|
| total | 命中总数 |
| count | 本次返回条数 |
| page | 当前页码 |
| page_size | 每页条数 |
| total_pages | 总页数 |
响应示例
{
"data": [
{
"code": "110100",
"name": "市辖区",
"level": "city",
"type": "区",
"parent_code": "110000",
"full_name": "北京市/市辖区"
}
],
"meta": {
"count": 1,
"total": 16,
"page": 1,
"page_size": 50,
"total_pages": 1
}
}
GET /v1/regions/provinces
获取全国省级行政区划列表(等价于 GET /v1/regions?level=province),用于级联选择第一步。
查询参数
| 名称 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| page | int | 否 | 页码,默认 1 |
1 |
| page_size | int | 否 | 每页条数,默认 10,最大 100 |
50 |
响应示例
{
"data": [
{
"code": "110000",
"name": "北京市",
"level": "province",
"full_name": "北京市"
}
],
"meta": {
"count": 34,
"total": 34,
"page": 1,
"page_size": 50,
"total_pages": 1
}
}
GET /v1/regions/{code}
按行政区划编码获取单条详情。
路径参数
| 名称 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| code | string | 是 | 行政区划编码 | 110000 |
响应示例
{
"data": {
"code": "110000",
"name": "北京市",
"level": "province",
"type": "市",
"parent_code": "",
"full_name": "北京市",
"child_count": 16
}
}
GET /v1/regions/{code}/ancestors
根据行政区划编码,返回从省级到当前节点的层级路径(结构化数组,便于级联回显与面包屑)。
路径参数
| 名称 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| code | string | 是 | 任意层级编码(省/市/区/镇/村) | 110108 |
响应字段
| 字段 | 说明 |
|---|---|
| code | 当前节点编码 |
| name | 当前节点名称 |
| level | 当前节点层级 |
| full_name | 全路径名称(斜杠分隔) |
| path | 从省到当前节点的数组,每项含 code、name、level |
响应示例
{
"data": {
"code": "110108",
"name": "海淀区",
"level": "district",
"full_name": "北京市/市辖区/海淀区",
"path": [
{ "code": "110000", "name": "北京市", "level": "province" },
{ "code": "110100", "name": "市辖区", "level": "city" },
{ "code": "110108", "name": "海淀区", "level": "district" }
]
}
}
GET /v1/regions/search
关键词搜索行政区划(名称/编码/全路径),支持按省、市缩小范围。
查询参数
| 名称 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| q | string | 是 | 搜索关键词(村名、镇名等) | 火楼村 |
| level | string | 否 | 层级过滤:province/city/district/town/village |
village |
| province | string | 否 | 省级名称,不传则全国检索 | 山东省 |
| city | string | 否 | 市级名称,可与 province 组合 |
济南市 |
| parent_code | string | 否 | 父级编码过滤(精确) | 110100 |
| page | int | 否 | 页码,从 1 开始,默认 1 |
2 |
| page_size | int | 否 | 每页条数,默认 10,最大 50 |
10 |
| limit | int | 否 | 兼容旧参数:仅传 limit 时等价于 page=1 且 page_size=limit(最大 50) |
10 |
响应字段(meta)
| 字段 | 说明 |
|---|---|
| total | 命中总数 |
| count | 本次返回条数 |
| page | 当前页码 |
| page_size | 每页条数 |
| total_pages | 总页数 |
| scope | 检索范围:全国 或 省名 或 省/市 |
示例:全国检索同名村
GET /v1/regions/search?q=火楼村&level=village
示例:仅在山东省检索
GET /v1/regions/search?q=火楼村&level=village&province=山东省
示例:分页浏览第 2 页
GET /v1/regions/search?q=火楼村&level=village&page=2&page_size=10
响应示例
{
"data": [
{
"code": "370181201212",
"name": "火楼村",
"level": "village",
"full_name": "山东省/济南市/章丘区/某某街道/火楼村"
}
],
"meta": {
"q": "火楼村",
"level": "village",
"province": "山东省",
"city": "",
"scope": "山东省",
"count": 10,
"total": 12,
"page": 1,
"page_size": 10,
"total_pages": 2
}
}
GET /v1/regions/children
按父级编码查询直接下级行政区划,适用于省→市→区县→镇→村级联选择器。
查询参数
| 名称 | 类型 | 必填 | 说明 | 示例 |
|---|---|---|---|---|
| parent_code | string | 是 | 父级行政区划编码 | 110000 |
| level | string | 否 | 仅返回指定层级(一般为父级的下一级) | city |
| page | int | 否 | 页码,默认 1 |
1 |
| page_size | int | 否 | 每页条数,默认 10,最大 50 |
20 |
响应示例
{
"data": [
{
"code": "110100",
"name": "市辖区",
"level": "city",
"type": "区",
"parent_code": "110000",
"full_name": "北京市/市辖区"
}
],
"meta": {
"parent_code": "110000",
"count": 1,
"total": 16,
"page": 1,
"page_size": 10,
"total_pages": 2
}
}
级联示例
- 全国省份:
GET /v1/regions/provinces(或GET /v1/regions?level=province) - 北京市下辖区:
GET /v1/regions/children?parent_code=110000 - 某区下街道:
GET /v1/regions/children?parent_code=110101&level=town
通用错误码
以下错误码适用于平台全部 /v1/* 接口(各接口在「错误代码」Tab 中另有本接口补充说明)。
错误响应格式
HTTP 状态码非 2xx 时,响应体一般为:
{
"error": {
"code": "错误码",
"message": "错误信息"
}
}
错误码一览
| HTTP | code | message | 说明 |
|---|---|---|---|
| 400 | invalid_params | 参数无效 | 必填参数缺失、格式不合法或超出允许范围 |
| 404 | not_found | 资源不存在 | 按编码或 ID 查询时无匹配记录 |
| 429 | rate_limit_exceeded | 请求过于频繁 | 超过当前 IP 的访问频率限制 |
| 500 | internal_error | 服务器内部错误 | 服务端或数据库异常,请稍后重试 |
限流、缓存等 HTTP 响应头含义见上文「响应头说明」。
本接口补充
| HTTP | code | message | 说明 |
|---|---|---|---|
| 400 | invalid_params | 参数无效 | level 非法、q 为空、page/page_size 超范围、children 缺少 parent_code 等 |
| 404 | not_found | 资源不存在 | 按 code 或 ancestors 查询无匹配;children 的 parent_code 不存在 |
请求根地址为 https://www.resapi.cn。每个场景含 7 种语言(cURL → JavaScript → Python → Go → Java → PHP → C#)。
全国省份列表
GET /v1/regions/provinces?page_size=50
cURL
curl -s "https://www.resapi.cn/v1/regions/provinces?page_size=50" \
-H "Accept: application/json"
列表筛选(查北京市下属 city)
GET /v1/regions?level=city&parent_code=110000&page_size=20
cURL
curl -s "https://www.resapi.cn/v1/regions?level=city&parent_code=110000&page_size=20" \
-H "Accept: application/json"
JavaScript
const url = new URL("https://www.resapi.cn/v1/regions");
url.searchParams.set("level", "city");
url.searchParams.set("parent_code", "110000");
url.searchParams.set("page_size", "20");
const res = await fetch(url, { headers: { Accept: "application/json" } });
if (!res.ok) throw new Error(res.statusText);
console.log(await res.json());
Python
import requests
r = requests.get(
"https://www.resapi.cn/v1/regions",
params={"level": "city", "parent_code": "110000", "page_size": 20},
headers={"Accept": "application/json"},
timeout=30,
)
r.raise_for_status()
print(r.json())
Go
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
)
func main() {
url := "https://www.resapi.cn/v1/regions?level=city&parent_code=110000&page_size=20"
req, _ := http.NewRequest(http.MethodGet, url, nil)
req.Header.Set("Accept", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
var out map[string]any
if err := json.NewDecoder(resp.Body).Decode(&out); err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", out)
}
Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Example {
public static void main(String[] args) throws Exception {
String url = "https://www.resapi.cn/v1/regions?level=city&parent_code=110000&page_size=20";
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
}
}
PHP
<?php
$url = "https://www.resapi.cn/v1/regions?level=city&parent_code=110000&page_size=20";
$ctx = stream_context_create([
"http" => ["header" => "Accept: application/json\r\n"],
]);
$json = file_get_contents($url, false, $ctx);
print_r(json_decode($json, true));
C#
using System.Net.Http.Headers;
var client = new HttpClient();
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var json = await client.GetStringAsync("https://www.resapi.cn/v1/regions?level=city&parent_code=110000&page_size=20");
Console.WriteLine(json);
详情查询(按 code)
GET /v1/regions/110101
cURL
curl -s "https://www.resapi.cn/v1/regions/110101" -H "Accept: application/json"
JavaScript
const res = await fetch("https://www.resapi.cn/v1/regions/110101", {
headers: { Accept: "application/json" },
});
if (!res.ok) throw new Error(res.statusText);
console.log(await res.json());
Python
r = requests.get(
"https://www.resapi.cn/v1/regions/110101",
headers={"Accept": "application/json"},
timeout=30,
)
r.raise_for_status()
print(r.json())
Go
url := "https://www.resapi.cn/v1/regions/110101"
req, _ := http.NewRequest(http.MethodGet, url, nil)
req.Header.Set("Accept", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
var out map[string]any
json.NewDecoder(resp.Body).Decode(&out)
fmt.Printf("%+v\n", out)
Java
String url = "https://www.resapi.cn/v1/regions/110101";
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
PHP
<?php
$url = "https://www.resapi.cn/v1/regions/110101";
$ctx = stream_context_create([
"http" => ["header" => "Accept: application/json\r\n"],
]);
$json = file_get_contents($url, false, $ctx);
print_r(json_decode($json, true));
C#
var json = await client.GetStringAsync("https://www.resapi.cn/v1/regions/110101");
Console.WriteLine(json);
层级路径(ancestors)
GET /v1/regions/110108/ancestors
cURL
curl -s "https://www.resapi.cn/v1/regions/110108/ancestors" \
-H "Accept: application/json"
同名地名检索(村名)
全国检索叫「火楼村」的行政村数量与列表:
GET /v1/regions/search?q=火楼村&level=village
仅在山东省检索:
GET /v1/regions/search?q=火楼村&level=village&province=山东省
响应 meta.total 为命中总数;用 page、page_size 翻页,meta.total_pages 为总页数。
cURL
curl -s "https://www.resapi.cn/v1/regions/search?q=%E7%81%AB%E6%A5%BC%E6%9D%91&level=village&page=1&page_size=10" \
-H "Accept: application/json"
子级级联(北京市下辖区)
GET /v1/regions/children?parent_code=110000&page_size=20
cURL
curl -s "https://www.resapi.cn/v1/regions/children?parent_code=110000&page_size=20" \
-H "Accept: application/json"
JavaScript
const url = new URL("https://www.resapi.cn/v1/regions/children");
url.searchParams.set("parent_code", "110000");
url.searchParams.set("page_size", "20");
const res = await fetch(url, { headers: { Accept: "application/json" } });
if (!res.ok) throw new Error(res.statusText);
console.log(await res.json());
Python
import requests
r = requests.get(
"https://www.resapi.cn/v1/regions/children",
params={"parent_code": "110000", "page_size": 20},
headers={"Accept": "application/json"},
timeout=30,
)
r.raise_for_status()
print(r.json())
Go
url := "https://www.resapi.cn/v1/regions/children?parent_code=110000&page_size=20"
req, _ := http.NewRequest(http.MethodGet, url, nil)
req.Header.Set("Accept", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
var out map[string]any
json.NewDecoder(resp.Body).Decode(&out)
fmt.Printf("%+v\n", out)
Java
String url = "https://www.resapi.cn/v1/regions/children?parent_code=110000&page_size=20";
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
PHP
<?php
$url = "https://www.resapi.cn/v1/regions/children?parent_code=110000&page_size=20";
$ctx = stream_context_create([
"http" => ["header" => "Accept: application/json\r\n"],
]);
print_r(json_decode(file_get_contents($url, false, $ctx), true));
C#
var json = await client.GetStringAsync(
"https://www.resapi.cn/v1/regions/children?parent_code=110000&page_size=20");
Console.WriteLine(json);
关键词搜索
GET /v1/regions/search?q=海淀&level=district&limit=20
cURL
curl -s "https://www.resapi.cn/v1/regions/search?q=%E6%B5%B7%E6%B7%80&level=district&limit=20" \
-H "Accept: application/json"
JavaScript
const url = new URL("https://www.resapi.cn/v1/regions/search");
url.searchParams.set("q", "海淀");
url.searchParams.set("level", "district");
url.searchParams.set("limit", "20");
const res = await fetch(url, { headers: { Accept: "application/json" } });
if (!res.ok) throw new Error(res.statusText);
console.log(await res.json());
Python
r = requests.get(
"https://www.resapi.cn/v1/regions/search",
params={"q": "海淀", "level": "district", "limit": 20},
headers={"Accept": "application/json"},
timeout=30,
)
r.raise_for_status()
print(r.json())
Go
url := "https://www.resapi.cn/v1/regions/search?q=%E6%B5%B7%E6%B7%80&level=district&limit=20"
req, _ := http.NewRequest(http.MethodGet, url, nil)
req.Header.Set("Accept", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
var out map[string]any
json.NewDecoder(resp.Body).Decode(&out)
fmt.Printf("%+v\n", out)
Java
String url = "https://www.resapi.cn/v1/regions/search?q=%E6%B5%B7%E6%B7%80&level=district&limit=20";
HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());
PHP
<?php
$url = "https://www.resapi.cn/v1/regions/search?q=%E6%B5%B7%E6%B7%80&level=district&limit=20";
$ctx = stream_context_create([
"http" => ["header" => "Accept: application/json\r\n"],
]);
$json = file_get_contents($url, false, $ctx);
print_r(json_decode($json, true));
C#
var json = await client.GetStringAsync("https://www.resapi.cn/v1/regions/search?q=%E6%B5%B7%E6%B7%80&level=district&limit=20");
Console.WriteLine(json);