개요
| 항목 | 값 |
|---|---|
| Base URL | https://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 키>- 키 누락·무효 →
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 값을 무시하도록 구현하십시오.
- 호환이 깨지는 변경이 필요한 경우 별도 공지 후 진행합니다.
충전소 목록
/api/v1/ext/stations키에 매핑된 CPO가 소유한 충전소 목록을 이름 오름차순으로 반환합니다 (페이지네이션).
쿼리 파라미터
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
page | number | 0 | 0부터 시작하는 페이지 번호 |
size | number | 50 | 페이지 크기 (최대 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
}| 필드 | 타입 | 설명 |
|---|---|---|
id | number | 충전소 ID |
sid | string? | 환경부 충전소 ID(SID) — CPO별 6자리 |
name | string | 충전소명 |
address | string | 주소 |
detailAddress | string? | 상세 주소 |
postalCode | string? | 우편번호 |
latitude / longitude | number | 위도 / 경도 (WGS84) |
createdAt | string | 등록 시각 (ISO-8601, UTC 기준 local date-time) |
충전소 상세 (소속 충전기 포함)
/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" }
]
}
]
}충전기 목록·상태
/api/v1/ext/chargersCPO 소유 충전기 목록을 ID 오름차순으로 반환합니다 (페이지네이션). 각 충전기에 커넥터별 실시간 상태가 포함됩니다.
쿼리 파라미터
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
page | number | 0 | 0부터 시작하는 페이지 번호 |
size | number | 50 | 페이지 크기 (최대 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
}| 필드 | 타입 | 설명 |
|---|---|---|
id | number | 충전기 ID |
stationId | number? | 소속 충전소 ID |
identity | string? | OCPP 충전기 식별자 |
online | boolean | 실시간 접속 여부 |
status | string | 충전기 가용 상태(OCPP 실측) — Available / Unavailable / Faulted |
operative | boolean | 운영자 사용중지 여부 — false면 CSMS 운영자가 중지한 충전기. status(실측)와 별개 축이며, 커넥터에도 connectors[].operative로 동일하게 제공 |
ocppVersion | string | 예: 1.6 |
currentFirmwareVersion | string? | 현재 펌웨어 버전 |
lastHeartbeat | string? | 마지막 heartbeat 시각 (UTC) |
connectors[].status | string | OCPP 1.6 ChargePointStatus — Available, Preparing, Charging, SuspendedEVSE, SuspendedEV, Finishing, Reserved, Unavailable, Faulted |
connectors[].connectorId | number | 충전기 내 커넥터 번호 (1-base) |
connectors[].lastStatusTime | string? | 마지막 상태 변경 시각 (UTC) |
충전기 상세
/api/v1/ext/chargers/{chargerId}충전기 단건(커넥터 상태 포함)을 조회합니다. 응답 스키마는 목록의 항목과 동일합니다. 존재하지 않거나 다른 CPO 소유인 경우 404.
요청 예시
curl "https://external-api.oasis-arca.com/api/v1/ext/chargers/3004" -H "x-api-key: <API 키>"충전 트랜잭션 내역
/api/v1/ext/transactions충전 트랜잭션 내역을 시작 시각 내림차순으로 반환합니다. 기간은 [from, to) 반개구간으로 필터됩니다.
쿼리 파라미터
| 파라미터 | 타입 | 기본값 | 설명 |
|---|---|---|---|
from | ISO-8601 date-time | to − 30일 | 조회 시작 시각 (예: 2026-06-01T00:00:00Z) |
to | ISO-8601 date-time | 현재 시각 | 조회 종료 시각 (exclusive) |
page | number | 0 | 0부터 시작하는 페이지 번호 |
size | number | 50 | 페이지 크기 (최대 200) |
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
}| 필드 | 타입 | 설명 |
|---|---|---|
id | number | 트랜잭션 ID |
chargerId | number | 충전기 ID |
chargerIdentity | string? | OCPP 충전기 식별자 |
connectorId | number | 충전기 내 커넥터 번호 (1-base) |
startTime | string | 충전 시작 시각 (UTC) |
stopTime | string? | 충전 종료 시각 — 진행 중이면 없음 |
consumedWh | number? | 충전량(Wh) — 미터값 미확정 시 없음 |
totalFee | number? | 요금(원) |
reason | string? | 종료 사유 (OCPP StopTransaction reason) |
page / size / totalElements / totalPages | number | 페이지네이션 메타 |
OpenAPI 스펙
기계가독형 계약 문서(OpenAPI 3.0)를 제공합니다. 클라이언트 코드 생성(openapi-generator 등)에 사용할 수 있습니다.
- external-api.openapi.yaml — OpenAPI 3.0.3 (YAML)
# 예: 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