A X C A M

판독 서버 API

이미지 한 장을 보내면 번호판 문자열을 돌려주는 HTTP API 입니다. 고객사 서버·현장 장비에서 직접 부를 때 쓰며, 인증은 온라인 계정에서 발급한 API 키로 합니다. (AXCam 앱은 기기에서 직접 판독하므로 이 API 를 부르지 않습니다.)

한눈에 보기

POST /api/v1/anpr/recognize — 번호판 판독

multipart/form-data 로 이미지를 보냅니다.

필드필수설명
image필수JPEG · PNG · WebP, 12MB 이하. 차량 한 대가 프레임을 채우는 크롭을 권장합니다 — 도로 전체가 찍힌 장면은 인식률이 크게 떨어집니다. 번호판 높이가 22px 이상이어야 읽습니다 (그보다 작으면 미인식).
track_id선택호출 측의 추적 ID. 응답에 그대로 돌아옵니다.
captured_at선택촬영 시각 YYYY-MM-DDTHH:MM:SS (KST). 판독 기록에 남습니다.
confidence선택호출 측 차량 검출 점수 (0~1). 기록용.
device_id선택호출 측 장비 식별자 (문자열). 기록용.

요청 예

curl -X POST https://axcam.kloa.kr/api/v1/anpr/recognize \
  -H "X-API-Key: ax_live_xxxxxxxxxxxxxxxx" \
  -F "image=@vehicle.jpg" \
  -F "track_id=cam1-000123" \
  -F "captured_at=2026-09-07T14:02:11"

응답 — 인식

plate_type 부터 plate_color_label 까지는 조회 서버 API 의 같은 키와 같은 값입니다 — 판독 응답을 그대로 조회 요청에 옮겨 담을 수 있습니다.

HTTP/1.1 200 OK
{
  "status": "success",
  "data": {
    "recognized": true,
    "plate_number": "서울31바1234",   // 번호판 원문 (응답에만 있고 서버에는 남지 않습니다)
    "confidence": 0.97,               // 판독 신뢰도 0~1 (0.75 미만은 미인식으로 돌려줍니다)
    "plate_type": "commercial",       // 종류 코드 — 조회 서버 API 문서의 표와 같은 값
    "plate_type_label": "영업용",
    "plate_format": "region_biz",     // 형식 (standard / region_biz / moto_old / moto_new / diplomatic / temporary / unknown)
    "region1": "서울",                 // 시·도 (없으면 null)
    "region2": null,                  // 시·군·구 — 이륜 구형판
    "number1": "31",                  // 앞 숫자 (차종 기호)
    "hangul": "바",                    // 용도 문자
    "number2": "1234",                // 일련번호
    "plate_color": "yellow",          // 번호판 색상 코드 — white 일반 / blue 전기차 / yellow 영업용 / green 법인 / orange 건설기계 (모르면 null)
    "plate_color_label": "영업용",
    "duplicated": false,              // 같은 키가 60초 안에 같은 번호판을 읽었으면 true (과금 안 됨)
    "truncated": false,
    "log_id": 48213,                  // 판독 기록 ID — 아래 판정 첨부에 씁니다
    "track_id": "cam1-000123",
    "recognized_at": "2026-09-07 14:02:12",
    "elapsed_ms": 312
  },
  "message": null,
  "time": "2026-09-07T14:02:12.418+09:00"
}

응답 — 미인식

HTTP 200 에 recognized=false 입니다. 오류가 아니라 '이 이미지에서는 못 읽었다' 는 뜻이므로, 차량이 더 가까워진 다음 프레임으로 다시 시도하는 것이 맞습니다.

{
  "status": "success",
  "data": {
    "recognized": false,
    "reason": "no_plate",             // 아래 표
    "confidence": null,
    "truncated": false,
    "track_id": "cam1-000123",
    "plate_number": null,
    "elapsed_ms": 205
  }
}
reason뜻
no_plate번호판을 찾지 못했거나 읽은 문자열이 번호판 형식이 아님 (판이 흐리거나 너무 작음)
low_confidence읽었지만 신뢰도가 기준(0.75) 미만 — 오판독 위험이 있어 돌려주지 않음
truncated번호판이 이미지 가장자리에 잘림 (앞자리가 잘리면 다른 번호로 보이므로 읽지 않음)
cached_no_plate같은 이미지(해시)를 방금 못 읽었음 — 다시 보내도 같은 결과
plate_anomaly번호판일 수 없는 문자열이 나옴 (운영팀에 알림이 갑니다)

GET /api/v1/anpr/ping — 키 확인 · 요금제 상태

키가 유효한지, 이번 달(또는 오늘) 얼마나 썼는지 확인합니다. 과금되지 않습니다.

{
  "status": "success",
  "data": {
    "device_id": 17,                  // 키 번호
    "device_name": "정문 카메라",
    "web_key": true,
    "engine": "axnet",
    "plan": "basic",                  // trial 이면 요금제 없음 (계정당 하루 10회 테스트)
    "plan_label": "베이직",
    "quota": 1000,                    // 월 한도 (trial 은 하루 한도)
    "used": 312,
    "remaining": 688,
    "credits_remaining": 100,         // 단건 충전 잔여 — 한도를 다 쓴 뒤부터 차감
    "period": "202609",
    "resets_at": "2026-10-01 00:00:00",
    "subscription_state": "WEB_PAID",
    "subscription_expires_at": "2026-10-07 14:00:00"
  }
}

POST /api/v1/anpr/log/{log_id}/result — 판정 첨부 (선택)

판독 기록에 고객사 판정을 붙여 두면 관리자 화면에서 판독과 판정을 같이 볼 수 있습니다. JSON 본문:

{
  "is_abnormal": true,               // 필수 (불리언 또는 "true"/"1")
  "status": "suspended",             // 선택
  "status_label": "출입정지",         // 선택
  "reason": "미납 3개월"              // 선택
}

오류

HTTPstatus언제
400bad_request이미지 파일이 없거나 비었거나 읽을 수 없음
401no_permissionAPI 키가 없거나 틀리거나 중지됨
402payment_required한도 초과·구독 없음. data.code 로 구분: trial_quota_exceeded(오늘의 테스트 한도) · quota_exceeded(월 한도, 충전도 없음) · subscription_required · subscription_expired. data.quota / used / resets_at 동봉.
413payload_too_large이미지가 12MB 를 넘음
429too_many_requests키당 초당 5회(버스트 10)를 넘었거나 판독 대기열이 찼음. Retry-After 헤더(초)만큼 기다렸다 다시 보내세요.
500internal_server_error서버 오류 — 같은 이미지를 바로 다시 보내지 말고 잠시 뒤 재시도

권장 사용 방식