English | 한국어
TS-API 는 TS Solution Corp.의 영상 보안 제품군 — TS-CMS , TS-NVR , TS-IVR — 에 내장된 웹 API입니다.
TS-API v1 웹서버는 TS-IVR, TS-NVR, TS-CMS v3.0.0 이후버전부터 적용되었습니다.
RESTful API(/api/v1)는 JWT 및 API Key 인증을 지원하며, 경로 기반으로 설계되었습니다.
API 버전
빠른 시작
문서
엔드포인트 요약
응답 형식
HTTP 상태 코드
라이선스 종속 기능
WebSocket API
# JWT 로그인 - accessToken 반환
# 참고: auth = base64("admin:1234"). 실제 NVR 계정 정보를 사용하세요.
curl -X POST " http://localhost/api/v1/auth/login" \
-H " Content-Type: application/json" \
-d ' {"auth":"YWRtaW46MTIzNA=="}'
# Response: {"accessToken":"eyJ...","refreshToken":"...","expiresIn":3600,"tokenType":"Bearer"}
curl " http://localhost/api/v1/channel" \
-H " Authorization: Bearer {accessToken}"
curl " http://localhost/api/v1/channel/1/ptz?home" \
-H " Authorization: Bearer {accessToken}"
2.4. 대안: API Key (외부 연동용)
# API Key 생성 (관리자 전용 - JWT 인증 필요)
curl -X POST " http://localhost/api/v1/auth/apikey" \
-H " Authorization: Bearer {accessToken}" \
-H " Content-Type: application/json" \
-d ' {"name":"Monitoring System"}'
# API Key 사용 (모든 v1 엔드포인트 접근 가능, 로그인 불필요)
curl " http://localhost/api/v1/channel" \
-H " X-API-Key: tsapi_key_..."
엔드포인트
메서드
설명
/api/v1/auth/login
POST
JWT 로그인 (username, password)
/api/v1/auth/refresh
POST
Access Token 갱신 (refreshToken)
/api/v1/auth/logout
POST
로그아웃 (refreshToken 무효화)
/api/v1/auth/apikey
POST
API Key 생성 (관리자 전용)
/api/v1/auth/apikey
GET
API Key 목록 조회
/api/v1/auth/apikey/{id}
DELETE
API Key 삭제
/api/v1/auth
GET
레거시 (차단됨: POST /api/v1/auth/login 사용)
엔드포인트
메서드
설명
/api/v1/info
GET
서버 정보 (apiVersion, siteName, timezone, product, license)
엔드포인트
메서드
설명
/api/v1/system/info
GET
시스템 정보 (OS, CPU, Storage, Network)
/api/v1/system/health
GET
시스템 상태 (CPU%, Memory, Disk 사용량)
/api/v1/system/hddsmart
GET
HDD S.M.A.R.T 정보
/api/v1/system/restart
POST
서버 재시작
/api/v1/system/reboot
POST
시스템 재부팅
엔드포인트
메서드
설명
/api/v1/channel
GET
채널(카메라) 목록
/api/v1/channel
POST
채널 추가
/api/v1/channel/{id}
DELETE
채널 삭제
/api/v1/channel/status
GET
채널 연결/녹화 상태
/api/v1/channel/info
GET
채널 상세 정보
/api/v1/channel/{id}/ptz
GET
PTZ 제어 (home, move, zoom, focus)
/api/v1/channel/{id}/preset
GET/POST/PUT/DELETE
프리셋 관리
/api/v1/channel/{id}/relay
GET/PUT
릴레이 출력 제어
/api/v1/channel/{id}/reboot
POST
카메라 원격 재부팅
엔드포인트
메서드
설명
/api/v1/recording/days
GET
녹화 날짜 조회 (캘린더용)
/api/v1/recording/minutes
GET
녹화 구간 조회 (타임라인용)
엔드포인트
메서드
설명
/api/v1/event/type
GET
이벤트 유형 목록
/api/v1/event/log
GET
이벤트 로그 검색
/api/v1/event/trigger
PUT
이벤트 수동 트리거
엔드포인트
메서드
설명
/api/v1/lpr/source
GET
LPR 소스(인식 지점) 목록
/api/v1/lpr/log
GET
차량 번호 인식 기록 검색
/api/v1/lpr/similar
GET
유사 번호판 검색
엔드포인트
메서드
설명
/api/v1/object/type
GET
감지 가능 객체 유형
/api/v1/object/attr
GET
객체 속성 목록
/api/v1/object/log
GET
감지된 객체 검색
엔드포인트
메서드
설명
/api/v1/face/search
POST
이미지 기반 얼굴 검색
/api/v1/face/search
GET
기간별 얼굴 목록 조회
엔드포인트
메서드
설명
/api/v1/vod
GET
실시간/녹화 스트림 URL 조회
엔드포인트
메서드
설명
/api/v1/emergency
GET
비상 호출 장치 목록
/api/v1/push
POST
외부 이벤트 수신
/api/v1/parking/lot
GET
주차장 목록/상태
/api/v1/parking/spot
GET
주차면 목록/상태
엔드포인트
설명
/wsapi/v1/events
실시간 이벤트 구독 (LPR, 채널상태, 객체감지 등)
/wsapi/v1/export
녹화 데이터 내보내기 (백업)
응답 형식은 엔드포인트별로 다릅니다:
5.1. 배열 응답 (채널, 상태, 이벤트 유형 등)
[
{"chid" : 1 , "title" : " Front Door" },
{"chid" : 2 , "title" : " Parking Lot" }
]
5.2. 페이지네이션 응답 (이벤트 로그, LPR 로그, 객체 검색)
{
"totalCount" : 100 ,
"at" : 0 ,
"data" : [ ... ]
}
{
"code" : -1 ,
"message" : " Error description"
}
코드
설명
200
성공
400
잘못된 요청
401
인증 필요
403
접근 거부
404
찾을 수 없음
500
내부 서버 오류
일부 API 기능은 해당 라이선스가 필요합니다. 라이선스가 활성화되지 않은 경우 404를 반환합니다.
기능
관련 엔드포인트
LPR (차량 번호 인식)
/api/v1/lpr/*
주차 유도
/api/v1/parking/lot, /wsapi/v1/events?topics=parkingCount
주차면 감지
/api/v1/parking/spot, /wsapi/v1/events?topics=parkingSpot
객체 감지
/api/v1/object/*
얼굴 검색
/api/v1/face/search
비상 호출
/api/v1/emergency
Push 수신
/api/v1/push
이벤트 백업
/wsapi/v1/export
체온 측정
/wsapi/v1/events?topics=bodyTemperature
차량 추적
/wsapi/v1/events?topics=vehicleTracking
실시간 이벤트 구독 및 데이터 내보내기를 위한 WebSocket API입니다.
엔드포인트
설명
ws://{host}:{port}/wsapi/v1/events
실시간 이벤트 구독
ws://{host}:{port}/wsapi/v1/export
데이터 내보내기
// JWT (query param)
const ws = new WebSocket ( 'ws://server:port/wsapi/v1/events?topics=LPR&token={accessToken}' ) ;
// API Key (query param)
const ws = new WebSocket ( 'ws://server:port/wsapi/v1/events?topics=LPR&apikey=tsapi_key_...' ) ;
const ws = new WebSocket ( 'ws://server/wsapi/v1/events?topics=LPR,channelStatus&apikey=tsapi_key_...' ) ;
ws . onmessage = ( e ) => {
const data = JSON . parse ( e . data ) ;
console . log ( 'Event:' , data ) ;
} ;