CSMS Integration
외부 API(B2B) 연동 가이드
파트너 시스템용 · v1
본 문서는 파트너/CPO 시스템이 server-to-server로 CSMS 데이터를 조회하는 외부 API의 연동 규격을 정의합니다. 모든 API는 조회 전용(GET)이며, 발급받은 API 키에 매핑된 CPO 소유 자원으로 응답이 자동 스코프됩니다.

개요

항목
Base URLhttps://external-api.oasis-arca.com
프로토콜HTTPS (TLS 1.2 이상)
형식요청 쿼리 파라미터 / 응답 application/json (UTF-8)
메서드전 엔드포인트 GET (조회 전용)
시각 표현ISO-8601. lastHeartbeat 등 instant 필드는 UTC(Z) 표기

빠른 시작

curl "https://external-api.oasis-arca.com/api/v1/ext/stations" \
  -H "x-api-key: <발급받은 API 키>"

응답의 null 값 필드는 생략될 수 있습니다. 파서는 필드 부재를 허용하도록 구현하십시오.

목록 API(stations · chargers · transactions)는 공통으로 page(0-base, 기본 0) / size(기본 50, 최대 200) 페이지네이션을 지원하며, 응답에 items와 함께 page/size/totalElements/totalPages 메타가 포함됩니다.

인증 (API 키)

모든 요청에 발급받은 API 키를 x-api-key 헤더로 전달합니다. 키는 CPO(사업자) 단위로 CSMS 운영팀이 발급합니다.

x-api-key: <발급받은 API 키>
API 키는 서버 측에만 보관하십시오. 모바일 앱·웹 프론트엔드 등 클라이언트 코드에 포함하면 안 됩니다. 키가 유출된 경우 운영팀에 즉시 재발급을 요청하십시오.
  • 키 누락·무효 → 403 (게이트웨이 단)
  • 운영팀에서 차단된 키 → 403 (백엔드 단)
  • 다른 CPO 소유 자원은 목록에서 제외되고, 상세 조회 시 404로 응답합니다.

사용량 제한

항목기본 플랜
초당 요청 수10 rps (burst 20)
일일 쿼터100,000 요청/일
초과 시429 Too Many Requests — 재시도 시 지수 백오프 권장

플랜 상향이 필요하면 운영팀에 문의하십시오.

오류 응답

오류는 발생 지점에 따라 두 가지 형태로 반환됩니다.

게이트웨이 단 (키 검증·사용량 제한)

{ "message": "Forbidden" }

백엔드 단 (파라미터·대상 검증)

{ "error": "조회 기간은 최대 92일까지 가능합니다." }
상태 코드발생 지점의미
400백엔드잘못된 파라미터 (기간 92일 초과, size 범위 초과 등)
403게이트웨이API 키 누락 · 무효
403백엔드차단(비활성)된 키
404백엔드대상 없음 (다른 CPO 소유 자원 포함)
429게이트웨이사용량 제한 초과
5xx-서버 오류 — 지수 백오프 후 재시도

변경 정책

  • URL은 /api/v1/ext/로 고정됩니다.
  • 하위 호환을 깨지 않는 변경(응답 필드 추가, enum 값 추가 등)은 예고 없이 이루어질 수 있습니다. 파서는 알 수 없는 필드·enum 값을 무시하도록 구현하십시오.
  • 호환이 깨지는 변경이 필요한 경우 별도 공지 후 진행합니다.

충전소 목록

GET/api/v1/ext/stations

키에 매핑된 CPO가 소유한 충전소 목록을 이름 오름차순으로 반환합니다 (페이지네이션).

쿼리 파라미터

파라미터타입기본값설명
pagenumber00부터 시작하는 페이지 번호
sizenumber50페이지 크기 (최대 200)

요청 예시

curl "https://external-api.oasis-arca.com/api/v1/ext/stations?page=0&size=50" -H "x-api-key: <API 키>"

응답 200

{
  "items": [
    {
      "id": 103,
      "sid": "100001",
      "name": "OO빌딩 충전소",
      "address": "경기 과천시 과천대로7나길 60",
      "detailAddress": "C동 505호",
      "postalCode": "13840",
      "latitude": 37.432265,
      "longitude": 126.994741,
      "createdAt": "2026-06-15T05:16:07.760511"
    }
  ],
  "page": 0,
  "size": 50,
  "totalElements": 1,
  "totalPages": 1
}
필드타입설명
idnumber충전소 ID
sidstring?환경부 충전소 ID(SID) — CPO별 6자리
namestring충전소명
addressstring주소
detailAddressstring?상세 주소
postalCodestring?우편번호
latitude / longitudenumber위도 / 경도 (WGS84)
createdAtstring등록 시각 (ISO-8601, UTC 기준 local date-time)

충전소 상세 (소속 충전기 포함)

GET/api/v1/ext/stations/{stationId}

충전소 단건을 조회합니다. 목록 항목의 필드에 더해 해당 충전소 소속 충전기 목록(chargers, ID 오름차순)이 포함되며, 각 충전기의 스키마는 충전기 목록·상태의 항목과 동일합니다(커넥터 상태 포함). 존재하지 않거나 다른 CPO 소유인 경우 404.

요청 예시

curl "https://external-api.oasis-arca.com/api/v1/ext/stations/103" -H "x-api-key: <API 키>"

응답 200

{
  "id": 103,
  "sid": "100001",
  "name": "OO빌딩 충전소",
  "address": "경기 과천시 과천대로7나길 60",
  "detailAddress": "C동 505호",
  "postalCode": "13840",
  "latitude": 37.432265,
  "longitude": 126.994741,
  "createdAt": "2026-06-15T05:16:07.760511",
  "chargers": [
    {
      "id": 3004,
      "stationId": 103,
      "identity": "CP-0001",
      "online": true,
      "status": "Available",
      "operative": true,
      "ocppVersion": "1.6",
      "currentFirmwareVersion": "A00.00.01",
      "lastHeartbeat": "2026-07-10T06:00:53.706155Z",
      "connectors": [
        { "connectorId": 1, "status": "Charging", "operative": true, "lastStatusTime": "2026-07-10T06:02:55.678207Z" }
      ]
    }
  ]
}

충전기 목록·상태

GET/api/v1/ext/chargers

CPO 소유 충전기 목록을 ID 오름차순으로 반환합니다 (페이지네이션). 각 충전기에 커넥터별 실시간 상태가 포함됩니다.

쿼리 파라미터

파라미터타입기본값설명
pagenumber00부터 시작하는 페이지 번호
sizenumber50페이지 크기 (최대 200)

요청 예시

curl "https://external-api.oasis-arca.com/api/v1/ext/chargers?page=0&size=50" -H "x-api-key: <API 키>"

응답 200

{
  "items": [
    {
      "id": 3004,
      "stationId": 103,
      "identity": "CP-0001",
      "online": true,
      "status": "Available",
      "operative": true,
      "ocppVersion": "1.6",
      "currentFirmwareVersion": "A00.00.01",
      "lastHeartbeat": "2026-07-10T06:00:53.706155Z",
      "connectors": [
        { "connectorId": 1, "status": "Charging", "operative": true, "lastStatusTime": "2026-07-10T06:02:55.678207Z" }
      ]
    }
  ],
  "page": 0,
  "size": 50,
  "totalElements": 1,
  "totalPages": 1
}
필드타입설명
idnumber충전기 ID
stationIdnumber?소속 충전소 ID
identitystring?OCPP 충전기 식별자
onlineboolean실시간 접속 여부
statusstring충전기 가용 상태(OCPP 실측) — Available / Unavailable / Faulted
operativeboolean운영자 사용중지 여부 — false면 CSMS 운영자가 중지한 충전기. status(실측)와 별개 축이며, 커넥터에도 connectors[].operative로 동일하게 제공
ocppVersionstring예: 1.6
currentFirmwareVersionstring?현재 펌웨어 버전
lastHeartbeatstring?마지막 heartbeat 시각 (UTC)
connectors[].statusstringOCPP 1.6 ChargePointStatus — Available, Preparing, Charging, SuspendedEVSE, SuspendedEV, Finishing, Reserved, Unavailable, Faulted
connectors[].connectorIdnumber충전기 내 커넥터 번호 (1-base)
connectors[].lastStatusTimestring?마지막 상태 변경 시각 (UTC)

충전기 상세

GET/api/v1/ext/chargers/{chargerId}

충전기 단건(커넥터 상태 포함)을 조회합니다. 응답 스키마는 목록의 항목과 동일합니다. 존재하지 않거나 다른 CPO 소유인 경우 404.

요청 예시

curl "https://external-api.oasis-arca.com/api/v1/ext/chargers/3004" -H "x-api-key: <API 키>"

충전 트랜잭션 내역

GET/api/v1/ext/transactions

충전 트랜잭션 내역을 시작 시각 내림차순으로 반환합니다. 기간은 [from, to) 반개구간으로 필터됩니다.

쿼리 파라미터

파라미터타입기본값설명
fromISO-8601 date-timeto − 30일조회 시작 시각 (예: 2026-06-01T00:00:00Z)
toISO-8601 date-time현재 시각조회 종료 시각 (exclusive)
pagenumber00부터 시작하는 페이지 번호
sizenumber50페이지 크기 (최대 200)
최대 조회 기간은 92일입니다. 초과 시 400이 반환됩니다.

요청 예시

curl "https://external-api.oasis-arca.com/api/v1/ext/transactions?from=2026-06-01T00:00:00Z&to=2026-07-01T00:00:00Z&page=0&size=50" \
  -H "x-api-key: <API 키>"

응답 200

{
  "items": [
    {
      "id": 98765,
      "chargerId": 3004,
      "chargerIdentity": "CP-0001",
      "connectorId": 1,
      "startTime": "2026-07-11T02:10:00Z",
      "stopTime": "2026-07-11T03:05:12Z",
      "consumedWh": 21500,
      "totalFee": 6450.00,
      "reason": "Remote"
    }
  ],
  "page": 0,
  "size": 50,
  "totalElements": 1,
  "totalPages": 1
}
필드타입설명
idnumber트랜잭션 ID
chargerIdnumber충전기 ID
chargerIdentitystring?OCPP 충전기 식별자
connectorIdnumber충전기 내 커넥터 번호 (1-base)
startTimestring충전 시작 시각 (UTC)
stopTimestring?충전 종료 시각 — 진행 중이면 없음
consumedWhnumber?충전량(Wh) — 미터값 미확정 시 없음
totalFeenumber?요금(원)
reasonstring?종료 사유 (OCPP StopTransaction reason)
page / size / totalElements / totalPagesnumber페이지네이션 메타

OpenAPI 스펙

기계가독형 계약 문서(OpenAPI 3.0)를 제공합니다. 클라이언트 코드 생성(openapi-generator 등)에 사용할 수 있습니다.

# 예: TypeScript 클라이언트 생성
npx @openapitools/openapi-generator-cli generate \
  -i https://admin.oasis-arca.com/docs/external-api.openapi.yaml \
  -g typescript-fetch -o ./csms-external-client

문의

API 키 발급·차단, 사용량 플랜, 응답 필드 추가 요청 등은 CSMS 운영팀에 문의하십시오.

문의: axd@bionever.com

CSMS External API(B2B) Integration Guide · v1