> For the complete documentation index, see [llms.txt](https://kopens.gitbook.io/plantpulse-platform/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kopens.gitbook.io/plantpulse-platform/developer/api-manual/endpoints.md).

# 17. 엔드포인트 전체 목록

PlantPulse API의 모든 REST 엔드포인트와 클라이언트 메서드 매핑입니다. 베이스 경로는 `/api/v5` 입니다.

> **인증**: `APIClient_V5.connect()` 호출 시 자동으로 api\_key가 발급·관리되므로, 사용자가 직접 호출해야 하는 인증 엔드포인트는 없습니다.

## 17.1 System

| HTTP | 엔드포인트          | 메서드                      |
| ---- | -------------- | ------------------------ |
| GET  | `/api/v5/ping` | `client.system().ping()` |

## 17.3 Site (6개)

| HTTP   | 엔드포인트                      | 메서드                             |
| ------ | -------------------------- | ------------------------------- |
| POST   | `/api/v5/site`             | `client.site().create(req)`     |
| PUT    | `/api/v5/site/{id}`        | `client.site().update(id, req)` |
| DELETE | `/api/v5/site/{id}`        | `client.site().delete(id)`      |
| GET    | `/api/v5/site/{id}`        | `client.site().get(id)`         |
| GET    | `/api/v5/site`             | `client.site().list()`          |
| GET    | `/api/v5/site/{id}/exists` | `client.site().exists(id)`      |

## 17.4 OPC (10개)

| HTTP   | 엔드포인트                            | 메서드                                |
| ------ | -------------------------------- | ---------------------------------- |
| POST   | `/api/v5/opc`                    | `client.opc().create(req)`         |
| PUT    | `/api/v5/opc/{id}`               | `client.opc().update(id, req)`     |
| DELETE | `/api/v5/opc/{id}`               | `client.opc().delete(id)`          |
| GET    | `/api/v5/opc/{id}`               | `client.opc().get(id)`             |
| GET    | `/api/v5/opc`                    | `client.opc().list()`              |
| GET    | `/api/v5/opc?site_id={id}`       | `client.opc().listBySite(siteId)`  |
| GET    | `/api/v5/opc?opc_type={type}`    | `client.opc().listByType(type)`    |
| GET    | `/api/v5/opc/{id}/exists`        | `client.opc().exists(id)`          |
| GET    | `/api/v5/opc/count`              | `client.opc().count()`             |
| GET    | `/api/v5/opc/count?site_id={id}` | `client.opc().countBySite(siteId)` |

## 17.5 Asset (6개)

| HTTP   | 엔드포인트                       | 메서드                              |
| ------ | --------------------------- | -------------------------------- |
| POST   | `/api/v5/asset`             | `client.asset().create(req)`     |
| PUT    | `/api/v5/asset/{id}`        | `client.asset().update(id, req)` |
| DELETE | `/api/v5/asset/{id}`        | `client.asset().delete(id)`      |
| GET    | `/api/v5/asset/{id}`        | `client.asset().get(id)`         |
| GET    | `/api/v5/asset`             | `client.asset().list()`          |
| GET    | `/api/v5/asset/{id}/exists` | `client.asset().exists(id)`      |

## 17.6 Tag (23개)

### CRUD + 목록

| HTTP   | 엔드포인트                             | 메서드                                  |
| ------ | --------------------------------- | ------------------------------------ |
| POST   | `/api/v5/tag`                     | `client.tag().create(req)`           |
| PUT    | `/api/v5/tag/{id}`                | `client.tag().update(id, req)`       |
| DELETE | `/api/v5/tag/{id}`                | `client.tag().delete(id)`            |
| GET    | `/api/v5/tag/{id}`                | `client.tag().get(id)`               |
| GET    | `/api/v5/tag/{id}/exists`         | `client.tag().exists(id)`            |
| GET    | `/api/v5/tag`                     | `client.tag().list()`                |
| GET    | `/api/v5/tag?site_id={id}`        | `client.tag().listBySite(siteId)`    |
| GET    | `/api/v5/tag?opc_id={id}`         | `client.tag().listByOpc(opcId)`      |
| GET    | `/api/v5/tag?asset_id={id}`       | `client.tag().listByAsset(assetId)`  |
| GET    | `/api/v5/tag/count`               | `client.tag().count()`               |
| GET    | `/api/v5/tag/count?site_id={id}`  | `client.tag().countBySite(siteId)`   |
| GET    | `/api/v5/tag/count?opc_id={id}`   | `client.tag().countByOpc(opcId)`     |
| GET    | `/api/v5/tag/count?asset_id={id}` | `client.tag().countByAsset(assetId)` |

### PATCH (10개 — 탭별 부분 수정)

| HTTP  | 엔드포인트                          | 메서드                         |
| ----- | ------------------------------ | --------------------------- |
| PATCH | `/api/v5/tag/{id}/basic`       | `patchBasic(id, req)`       |
| PATCH | `/api/v5/tag/{id}/alarm`       | `patchAlarm(id, req)`       |
| PATCH | `/api/v5/tag/{id}/metadata`    | `patchMetadata(id, req)`    |
| PATCH | `/api/v5/tag/{id}/calculation` | `patchCalculation(id, req)` |
| PATCH | `/api/v5/tag/{id}/sampling`    | `patchSampling(id, req)`    |
| PATCH | `/api/v5/tag/{id}/aggregation` | `patchAggregation(id, req)` |
| PATCH | `/api/v5/tag/{id}/ai`          | `patchAi(id, req)`          |
| PATCH | `/api/v5/tag/{id}/publish`     | `patchPublish(id, req)`     |
| PATCH | `/api/v5/tag/{id}/attribute`   | `patchAttribute(id, req)`   |
| PATCH | `/api/v5/tag/{id}/link`        | `patchLink(id, req)`        |

## 17.7 Alarm (2개)

| HTTP | 엔드포인트                     | 메서드                          |
| ---- | ------------------------- | ---------------------------- |
| GET  | `/api/v5/alarm/{seq}`     | `client.alarm().get(seq)`    |
| GET  | `/api/v5/alarm?limit={n}` | `client.alarm().list(limit)` |

## 17.8 Order (11개)

| HTTP   | 엔드포인트                       | 메서드                              |
| ------ | --------------------------- | -------------------------------- |
| POST   | `/api/v5/order`             | `client.order().create(req)`     |
| PUT    | `/api/v5/order/{id}`        | `client.order().update(id, req)` |
| DELETE | `/api/v5/order/{id}`        | `client.order().delete(id)`      |
| GET    | `/api/v5/order/{id}`        | `client.order().get(id)`         |
| GET    | `/api/v5/order`             | `client.order().list()`          |
| GET    | `/api/v5/order/{id}/exists` | `client.order().exists(id)`      |
| POST   | `/api/v5/order/{id}/start`  | `client.order().start(id)`       |
| POST   | `/api/v5/order/{id}/end`    | `client.order().end(id)`         |
| POST   | `/api/v5/order/{id}/pause`  | `client.order().pause(id)`       |
| POST   | `/api/v5/order/{id}/resume` | `client.order().resume(id)`      |
| POST   | `/api/v5/order/{id}/abort`  | `client.order().abort(id)`       |

## 17.9 Calendar (6개)

| HTTP   | 엔드포인트                                         | 메서드                                  |
| ------ | --------------------------------------------- | ------------------------------------ |
| POST   | `/api/v5/calendar`                            | `client.calendar().create(req)`      |
| PUT    | `/api/v5/calendar/{id}`                       | `client.calendar().update(id, req)`  |
| DELETE | `/api/v5/calendar/{id}`                       | `client.calendar().delete(id)`       |
| GET    | `/api/v5/calendar/{id}`                       | `client.calendar().get(id)`          |
| GET    | `/api/v5/calendar`                            | `client.calendar().list()`           |
| GET    | `/api/v5/calendar/search?from={iso}&to={iso}` | `client.calendar().search(from, to)` |

## 17.10 Customer (8개)

| HTTP   | 엔드포인트                           | 메서드                                    |
| ------ | ------------------------------- | -------------------------------------- |
| POST   | `/api/v5/customer`              | `client.customer().create(req)`        |
| PUT    | `/api/v5/customer/{id}`         | `client.customer().update(id, req)`    |
| DELETE | `/api/v5/customer/{id}`         | `client.customer().delete(id)`         |
| GET    | `/api/v5/customer/{id}`         | `client.customer().get(id)`            |
| GET    | `/api/v5/customer`              | `client.customer().list()`             |
| GET    | `/api/v5/customer?site_id={id}` | `client.customer().listBySite(siteId)` |
| GET    | `/api/v5/customer/{id}/exists`  | `client.customer().exists(id)`         |
| GET    | `/api/v5/customer/count`        | `client.customer().count()`            |

## 17.11 Employee (7개)

| HTTP   | 엔드포인트                          | 메서드                                 |
| ------ | ------------------------------ | ----------------------------------- |
| POST   | `/api/v5/employee`             | `client.employee().create(req)`     |
| PUT    | `/api/v5/employee/{id}`        | `client.employee().update(id, req)` |
| DELETE | `/api/v5/employee/{id}`        | `client.employee().delete(id)`      |
| GET    | `/api/v5/employee/{id}`        | `client.employee().get(id)`         |
| GET    | `/api/v5/employee`             | `client.employee().list()`          |
| GET    | `/api/v5/employee/{id}/exists` | `client.employee().exists(id)`      |
| GET    | `/api/v5/employee/count`       | `client.employee().count()`         |

## 17.12 Product (7개)

| HTTP   | 엔드포인트                         | 메서드                                |
| ------ | ----------------------------- | ---------------------------------- |
| POST   | `/api/v5/product`             | `client.product().create(req)`     |
| PUT    | `/api/v5/product/{id}`        | `client.product().update(id, req)` |
| DELETE | `/api/v5/product/{id}`        | `client.product().delete(id)`      |
| GET    | `/api/v5/product/{id}`        | `client.product().get(id)`         |
| GET    | `/api/v5/product`             | `client.product().list()`          |
| GET    | `/api/v5/product/{id}/exists` | `client.product().exists(id)`      |
| GET    | `/api/v5/product/count`       | `client.product().count()`         |

## 17.13 Path (2개)

| HTTP | 엔드포인트                     | 메서드                                 |
| ---- | ------------------------- | ----------------------------------- |
| GET  | `/api/v5/path/asset/{id}` | `client.path().getByAsset(assetId)` |
| GET  | `/api/v5/path/tag/{id}`   | `client.path().getByTag(tagId)`     |

## 17.14 Flow (3개)

| HTTP | 엔드포인트                    | 메서드                               |
| ---- | ------------------------ | --------------------------------- |
| GET  | `/api/v5/flow/{id}`      | `client.flow().get(flowId)`       |
| GET  | `/api/v5/flow`           | `client.flow().list()`            |
| GET  | `/api/v5/flow/{id}/node` | `client.flow().listNodes(flowId)` |

***

## 17.15 통계

| 도메인      | 엔드포인트 수                                       |
| -------- | --------------------------------------------- |
| System   | 1                                             |
| Site     | 6                                             |
| OPC      | 10                                            |
| Asset    | 6                                             |
| **Tag**  | **23** (CRUD 5 + 목록 7 + 카운트 4 + **PATCH 10**) |
| Alarm    | 2                                             |
| Order    | 11 (CRUD 6 + 라이프사이클 5)                        |
| Calendar | 6                                             |
| Customer | 8                                             |
| Employee | 7                                             |
| Product  | 7                                             |
| Path     | 2                                             |
| Flow     | 3                                             |
| **합계**   | **92** (+인증 1)                                |

## 17.16 HTTP 메서드 분포

| HTTP   | 개수 | 용도                   |
| ------ | -- | -------------------- |
| GET    | 56 | 조회 (단건/목록/존재 여부/카운트) |
| POST   | 16 | 등록 + Order 라이프사이클    |
| PUT    | 10 | 전체 수정                |
| PATCH  | 10 | Tag 탭별 부분 수정         |
| DELETE | 10 | 삭제                   |

***

KOPENS All rights reserved.
