Skip to content

xRoad API Usage

Overview

This runbook documents how to access the xROAD API to retrieve bridge inspection data, including facility files and inspection reports.

Authentication

All API requests require an API key in the headers:

headers = {'API-key': 'tcmTCkB5rmbgBoBlPGebXyNDUHxpJwboJuV9z9Is'}

Retrieving Facility File Lists

Endpoint

GET https://road-structures-db-bridge.mlit.go.jp/xROAD/api/v1/bridges/otherFileList

Parameters

  • kanri_kubun: 管理区分 (e.g., "1")
  • seibikyoku: 整備局 (e.g., "81")
  • rosen_bango: 路線番号 (e.g., "0001")
  • jimusho: 事務所 (e.g., "811100")

Example Code

import requests
import json

url = "https://road-structures-db-bridge.mlit.go.jp/xROAD/api/v1/bridges/otherFileList"
headers = {'API-key': 'tcmTCkB5rmbgBoBlPGebXyNDUHxpJwboJuV9z9Is'}

params = {
    'kanri_kubun': "1",
    'seibikyoku': "81",
    'rosen_bango': "0001",
    'jimusho': "811100"
}

response = requests.get(url, params=params, headers=headers)
data = response.json()

Response Format

The API returns a JSON object with:

  • resultset: Metadata including count, limit, offset, and error status
  • result: Array of file objects with:
  • file_id: Unique file identifier
  • file_name: Original filename
  • shisetsu_id: Facility ID
  • shisetsu_meisyou: Facility name

Downloading Files

Endpoint

GET https://road-structures-db-bridge.mlit.go.jp/xROAD/api/v1/bridges/otherFile/{file_id}

Example Code

url = "https://road-structures-db-bridge.mlit.go.com/xROAD/api/v1/bridges/otherFile"
file_id = "QlIwLTAxMDAwNi0wMDA0MV8yMDIyXzE"
url = url + "/" + file_id

headers = {'API-key': 'tcmTCkB5rmbgBoBlPGebXyNDUHxpJwboJuV9z9Is'}
response = requests.get(url, headers=headers)

# Save to file
file_name = "./岩見沢月形線_9号橋.xlsx"
with open(file_name, 'wb') as f:
    f.write(response.content)

Searching Inspection Data

Endpoint

POST https://road-structures-db-bridge.mlit.go.jp/xROAD/api/v1/bridges/tenken/list/{year}

Example Code

url = "https://road-structures-db-bridge.mlit.go.jp"
path = "/xROAD/api/v1/bridges/tenken/list/2020"
headers = {
    'API-key': 'tcmTCkB5rmbgBoBlPGebXyNDUHxpJwboJuV9z9Is',
    'Content-Type': 'application/json'
}

params = {
    "querys": [
        {
            "key": "area_value",
            "value": "北海道開発局",
            "op": 1
        }
    ],
    "limit": 100,
    "offset": 0
}
enc_data = json.dumps(params)
res = requests.post(url+path, headers=headers, data=enc_data)

Retrieving Inspection Images

Endpoints

  • Report data: GET /xROAD/api/v1/bridges/tenken/report/{year}/{bridge_id}/{chapter}
  • Image files: GET /xROAD/api/v1/bridges/tenken/image/{year}/{bridge_id}/{chapter}/{filename}

Example Code

import os

url = "https://road-structures-db-bridge.mlit.go.jp/xROAD/api/v1/bridges/tenken/report"
url2 = "https://road-structures-db-bridge.mlit.go.jp/xROAD/api/v1/bridges/tenken/image"

headers = {
    'API-key': 'tcmTCkB5rmbgBoBlPGebXyNDUHxpJwboJuV9z9Is',
    'Content-Type': 'application/json'
}

def my_makedirs(path):
    if not os.path.isdir(path):
        os.makedirs(path)

picture_list = []

for i in range(len(df_xroad_tenken_list)):
    bridge_id = df_xroad_tenken_list['bridge_id'][i]
    tenken_nendo = df_xroad_tenken_list['nendo'][i]
    path1 = url + '/' + tenken_nendo + '/' + bridge_id + '/' + '3'
    path2 = url2 + '/' + tenken_nendo + '/' + bridge_id + '/' + '3'
    response1 = requests.get(path1, headers=headers)
    data3 = json.loads(response1.text)

    folder_name = "image/" + bridge_id + '/' + tenken_nendo
    my_makedirs(folder_name)

    for j in range(len(data3['result'][0]['c3'][0]['local_figs'])):
        file_name = data3['result'][0]['c3'][0]['local_figs'][j]['file_name']
        file_memo = data3['result'][0]['c3'][0]['local_figs'][j]['memo']
        path3 = path2 + '/' + file_name

        response3 = requests.get(path3, headers=headers)
        picture_list.append([folder_name, file_memo])
        with open(folder_name + '/' + file_name, 'wb') as f:
            f.write(response3.content)

import pandas as pd
df_xroad_picture_list = pd.DataFrame(picture_list, columns=["pic_path", "pic_memo"])
df_xroad_picture_list.to_excel('df_xroad_picture_list.xlsx', sheet_name='new_sheet_name')

Notes

  • API responses include pagination via limit and offset parameters
  • File IDs are base64-encoded strings
  • Image retrieval requires iterating through report chapters to get file lists
  • Directory structure for saved files: image/{bridge_id}/{year}/{filename}