API Reference
아래 목록은 LinkOStar 백엔드의 live OpenAPI spec에서 자동 생성됩니다. 외부 통합 대상에 해당하는 endpoint만 추렸고, 내부 운영용(/platform, /actuator 등)은 의도적으로 숨겼습니다.
spec은 한 시간마다 자동 갱신됩니다. 백엔드 배포 직후라면 약간 지연될 수 있습니다.
최근 동기화:
Hub 등록 (Public)
대상: Hub-agent (Pi)
hub-agent가 부팅 직후 claim 코드를 가지고 한 번 호출합니다. 인증 없이 접근 가능하지만 claim 코드 자체가 일회성 자격증명 역할을 합니다.
/v1/hubs/claimClaim hub instance
Register a hub to a usage unit using a claim code. **Process:** 1. Validates the claim code (expiration, revocation, usage limits) 2. Creates new hub_instance or updates existing one by device_instance_id 3. Checks if hub is blocked (rejects if blocked) 4. Generates access_token and refresh_token 5. Saves to hub_auth_token table 6. Records audit log **Security:** - No authentication required (public endpoint) - Claim code acts as authorization - Blocked hubs cannot claim **Rate Limiting:** None (one-time operation)
파라미터
파라미터 없음
요청 본문
HubClaimRequest필수응답
- 201Hub claimed successfully
ApiResponse - 400Invalid claim code (expired, revoked, or max uses reached)
- 409Conflict - Hub already belongs to different unit
- 423Hub is blocked/locked
Hub Bearer 보호 API (V1)
대상: Hub-agent (Pi)
claim 직후 받은 access token으로 호출합니다. telemetry · 로그 업로드 · 토큰 갱신이 여기 들어갑니다. supplier BFF는 직접 부르지 않습니다.
/v1/hubs/{hubUuid}/desired-stateGet current DesiredState for this hub (poll)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseMapStringObject
/v1/hubs/{hubUuid}/device-queryResolve a scanned BLE asset to a device instance and activate it
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | — |
요청 본문
DeviceQueryRequest필수응답
- 200OK
ApiResponseDeviceQueryResponse
/v1/hubs/{hubUuid}/jobs/{hubJobUuid}/eventsRecord job event
Record job event and update job status
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
| hubJobUuid | path | string<uuid> | 필수 | Hub Job UUID |
요청 본문
HubJobEventRequest필수응답
- 204No Content
/v1/hubs/{hubUuid}/logsRecord log
Record log entry from hub
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
요청 본문
JsonNode필수응답
- 204No Content
/v1/hubs/{hubUuid}/telemetryRecord telemetry
Record telemetry data from hub
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
요청 본문
JsonNode필수응답
- 204No Content
/v1/hubs/refreshRefresh hub access token
Refresh hub access token using refresh token. **Process:** 1. Validates hub authentication (must be authenticated) 2. Checks if hub is blocked (rejects if blocked) 3. Verifies refresh token matches stored token 4. Checks if token is revoked 5. Generates new access_token (refresh token remains the same) 6. Updates hub_auth_token table 7. Records audit log **Security:** - Requires hub authentication (Bearer token) - Blocked hubs cannot refresh - Revoked tokens cannot be refreshed **Token Expiration:** - Access token: 24 hours (configurable) - Refresh token: 30 days (configurable)
파라미터
파라미터 없음
요청 본문
HubRefreshRequest필수응답
- 200Tokens refreshed successfully
ApiResponse - 401Hub authentication required or invalid refresh token
- 403Hub is blocked or token is revoked
Tenant — Hubs
대상: Supplier 콘솔 / BFF
특정 tenant 소속 hub의 조회·관리. X-API-Key 또는 sdx-oauth JWT + X-Tenant-UUID 헤더로 인증합니다.
/tenant/hubsList hubs
List all hubs for current unit with READ permission check
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| page | query | integer<int32> | 선택 | Page number (1-based) |
| size | query | integer<int32> | 선택 | Page size |
응답
- 200OK
ApiResponseListHubSummaryResponse
/tenant/hubs/{hubUuid}Get hub detail
Get hub detail with READ permission check
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
응답
- 200OK
ApiResponseHubDetailResponse
/tenant/hubs/{hubUuid}/apps파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseListHubInstalledAppResponse
/tenant/hubs/{hubUuid}/installed-appsList apps scheduled / installed on this hub
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseListInstalledAppView
/tenant/hubs/{hubUuid}/jobsGet hub jobs
Get hub jobs with READ permission check
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
| page | query | integer<int32> | 선택 | Page number (1-based) |
| size | query | integer<int32> | 선택 | Page size |
응답
- 200OK
ApiResponseListHubJobResponse
/tenant/hubs/{hubUuid}/jobs/app-install파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | — |
요청 본문
AppInstallRequest필수응답
- 201Created
ApiResponseUUID
/tenant/hubs/{hubUuid}/jobs/app-remove파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | — |
| appUuid | query | string<uuid> | 필수 | — |
응답
- 201Created
ApiResponseUUID
/tenant/hubs/{hubUuid}/logsGet hub logs
Get hub logs with time range filter
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
| from | query | string<date-time> | 선택 | Start time (ISO 8601) |
| to | query | string<date-time> | 선택 | End time (ISO 8601) |
| page | query | integer<int32> | 선택 | Page number (1-based) |
| size | query | integer<int32> | 선택 | Page size |
응답
- 200OK
ApiResponseListHubLogResponse
/tenant/hubs/{hubUuid}/provisioning/stepsList wizard steps + submission state for the hub
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseListProvisioningRunResponse
/tenant/hubs/{hubUuid}/provisioning/steps/{stepId}/submitSubmit (or skip) one wizard step
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | — |
| stepId | path | integer<int64> | 필수 | — |
요청 본문
StepSubmitRequest필수응답
- 200OK
ApiResponseProvisioningRunResponse
/tenant/hubs/{hubUuid}/setup-delegationsList setup delegations
List all setup delegations for a hub
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
응답
- 200OK
ApiResponseListSetupDelegationResponse
/tenant/hubs/{hubUuid}/setup-delegationsCreate setup delegation
Delegate hub setup rights to another user
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
요청 본문
SetupDelegationRequest필수응답
- 200OK
ApiResponseSetupDelegationResponse
/tenant/hubs/{hubUuid}/setup-delegations/{id}Revoke setup delegation
Revoke a setup delegation
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
| id | path | integer<int64> | 필수 | Delegation ID |
응답
- 200OK
ApiResponseVoid
/tenant/hubs/{hubUuid}/telemetryGet hub telemetry
Get hub telemetry with time range filter
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
| from | query | string<date-time> | 선택 | Start time (ISO 8601) |
| to | query | string<date-time> | 선택 | End time (ISO 8601) |
| page | query | integer<int32> | 선택 | Page number (1-based) |
| size | query | integer<int32> | 선택 | Page size |
응답
- 200OK
ApiResponseListHubTelemetryResponse
/tenant/hubs/claim-codesList my claim codes
Newest first; status is derived (PENDING/USED/EXPIRED/REVOKED)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListClaimCodeListItem
/tenant/hubs/claim-codesGenerate claim code
Generate a new hub claim code for this tenant
파라미터
파라미터 없음
요청 본문
ClaimCodeGenerateRequest필수응답
- 200OK
ApiResponseClaimCodeResponse
/tenant/hubs/claim-codes/{claimCode}Hard-delete (unused) or soft-revoke (used) a claim code
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| claimCode | path | string | 필수 | — |
응답
- 204No Content
Tenant — Devices
대상: Supplier 콘솔 / BFF
각 hub에 연결된 device 인스턴스 조회·관리. BLE 스캐너로 발견된 디바이스가 여기 들어옵니다.
/tenant/devicesList device instances (optionally filter by activationStatus)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
| activationStatus | query | string | 선택 | — |
응답
- 200OK
ApiResponseListDeviceInstanceResponse
/tenant/devicesRegister new device instance
파라미터
파라미터 없음
요청 본문
CreateDeviceInstanceRequest필수응답
- 200OK
ApiResponseDeviceInstanceResponse
/tenant/devices/{deviceInstanceId}Get device instance detail
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceInstanceId | path | integer<int64> | 필수 | — |
응답
- 200OK
ApiResponseDeviceInstanceResponse
/tenant/devices/{deviceInstanceId}Delete device instance
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceInstanceId | path | integer<int64> | 필수 | — |
응답
- 200OK
/tenant/devices/{deviceInstanceId}Update device instance
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceInstanceId | path | integer<int64> | 필수 | — |
요청 본문
UpdateDeviceInstanceRequest필수응답
- 200OK
ApiResponseDeviceInstanceResponse
/tenant/devices/{deviceInstanceId}/activateForce-activate device instance (manual override)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceInstanceId | path | integer<int64> | 필수 | — |
응답
- 200OK
ApiResponseDeviceInstanceResponse
/tenant/devices/{deviceInstanceId}/retireRetire device instance (terminal state)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceInstanceId | path | integer<int64> | 필수 | — |
응답
- 200OK
ApiResponseDeviceInstanceResponse
/tenant/devices/{deviceInstanceId}/sensor-dataQuery sensor timeseries (TODO: backed by ble_event for now — empty stub)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceInstanceId | path | integer<int64> | 필수 | — |
| from | query | string<date-time> | 선택 | — |
| to | query | string<date-time> | 선택 | — |
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListMapStringObject
/tenant/devices/{deviceInstanceId}/suspendSuspend device instance
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceInstanceId | path | integer<int64> | 필수 | — |
응답
- 200OK
ApiResponseDeviceInstanceResponse
Tenant — Provisioning Steps
대상: Supplier 콘솔
supplier가 정의하는 onboarding 위저드 단계의 CRUD. 5가지 type 중 하나 (TEXT_INPUT, EXTERNAL_LIST_PICK, CONFIRM, INFO, CUSTOM).
/tenant/provisioning-stepsList provisioning steps for current tenant
Uses X-Tenant-UUID header to scope the list
파라미터
파라미터 없음
응답
- 200OK
ApiResponseListProvisioningStepResponse
/tenant/provisioning-stepsCreate provisioning step
Create a new provisioning step for a supplier
파라미터
파라미터 없음
요청 본문
CreateProvisioningStepRequest필수응답
- 201Created
ApiResponseProvisioningStepResponse
/tenant/provisioning-steps/{stepId}Update provisioning step
Update an existing provisioning step
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| stepId | path | integer<int64> | 필수 | Step ID |
요청 본문
UpdateProvisioningStepRequest필수응답
- 200OK
ApiResponseProvisioningStepResponse
/tenant/provisioning-steps/{stepId}Delete provisioning step
Delete a provisioning step
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| stepId | path | integer<int64> | 필수 | Step ID |
응답
- 204No Content
/tenant/provisioning-steps/{supplierUuid}List provisioning steps
List all provisioning steps for a supplier
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| supplierUuid | path | string<uuid> | 필수 | Supplier UUID |
응답
- 200OK
ApiResponseListProvisioningStepResponse
/tenant/provisioning-steps/reorderReorder provisioning steps
Reorder provisioning steps for a supplier
파라미터
파라미터 없음
요청 본문
ReorderStepsRequest필수응답
- 200OK
ApiResponseListProvisioningStepResponse
Tenant — Supplier Bundles
대상: Supplier 콘솔
출시 패키지(SupplierBundle) CRUD + DRAFT → PUBLISHED → ARCHIVED 상태머신. claim 시점에 자동으로 expand됩니다.
/tenant/supplier-bundlesList supplier bundles (optionally filter by status)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| status | query | string | 선택 | — |
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListBundleResponse
/tenant/supplier-bundlesCreate bundle (DRAFT)
파라미터
파라미터 없음
요청 본문
CreateBundleRequest필수응답
- 200OK
ApiResponseBundleResponse
/tenant/supplier-bundles/{bundleUuid}Get bundle detail
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bundleUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseBundleResponse
/tenant/supplier-bundles/{bundleUuid}Delete bundle (DRAFT only)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bundleUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
/tenant/supplier-bundles/{bundleUuid}Update bundle fields (DRAFT only)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bundleUuid | path | string<uuid> | 필수 | — |
요청 본문
UpdateBundleRequest필수응답
- 200OK
ApiResponseBundleResponse
/tenant/supplier-bundles/{bundleUuid}/apps파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bundleUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseListObject
/tenant/supplier-bundles/{bundleUuid}/appsReplace apps list (full overwrite)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bundleUuid | path | string<uuid> | 필수 | — |
요청 본문
BundleAppRefRequest필수응답
- 200OK
ApiResponseListObject
/tenant/supplier-bundles/{bundleUuid}/archiveArchive bundle (PUBLISHED → ARCHIVED)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bundleUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseBundleResponse
/tenant/supplier-bundles/{bundleUuid}/devices파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bundleUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseListObject
/tenant/supplier-bundles/{bundleUuid}/devicesReplace devices list (full overwrite)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bundleUuid | path | string<uuid> | 필수 | — |
요청 본문
BundleDeviceRefRequest필수응답
- 200OK
ApiResponseListObject
/tenant/supplier-bundles/{bundleUuid}/publishPublish bundle (DRAFT → PUBLISHED)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bundleUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseBundleResponse
/tenant/supplier-bundles/{bundleUuid}/steps파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bundleUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseListObject
/tenant/supplier-bundles/{bundleUuid}/stepsReplace provisioning steps list (full overwrite)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bundleUuid | path | string<uuid> | 필수 | — |
요청 본문
BundleStepRefRequest필수응답
- 200OK
ApiResponseListObject
Tenant — Hub Monitoring
대상: Supplier 콘솔 / BFF
특정 hub의 telemetry·log·job 시계열 조회. 운영 대시보드의 heartbeat·그래프 데이터 소스.
/tenant/hub-monitoring/{hubUuid}/jobsGet hub jobs
Retrieve paginated list of jobs for a specific hub. Requires READ permission on the hub's unit.
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
| pageable | query | Pageable | 필수 | — |
응답
- 200Hub jobs retrieved successfully
ApiResponse - 403Insufficient permissions
ApiResponsePageHubJobResponse - 404Hub not found or access denied
ApiResponsePageHubJobResponse
/tenant/hub-monitoring/{hubUuid}/jobs/{jobUuid}Get hub job details
Retrieve detailed information about a specific job including desired and result JSON payloads
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
| jobUuid | path | string<uuid> | 필수 | Job UUID |
응답
- 200Job details retrieved successfully
ApiResponse - 404Hub or job not found
ApiResponseHubJobDetailResponse
/tenant/hub-monitoring/{hubUuid}/jobs/{jobUuid}/eventsGet hub job events
Retrieve time-ordered events for a specific job
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
| jobUuid | path | string<uuid> | 필수 | Job UUID |
| pageable | query | Pageable | 필수 | — |
응답
- 200Job events retrieved successfully
ApiResponse - 404Hub or job not found
ApiResponsePageHubJobEventResponse
/tenant/hub-monitoring/{hubUuid}/logsGet hub logs
Retrieve log entries filtered by time range (latest first)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
| from | query | string<date-time> | 선택 | Start time (ISO 8601) |
| to | query | string<date-time> | 선택 | End time (ISO 8601) |
| pageable | query | Pageable | 필수 | — |
응답
- 200Logs retrieved successfully
ApiResponse - 404Hub not found or access denied
ApiResponsePageHubLogResponse
/tenant/hub-monitoring/{hubUuid}/telemetryGet hub telemetry
Retrieve telemetry data filtered by time range (latest first)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
| from | query | string<date-time> | 선택 | Start time (ISO 8601) |
| to | query | string<date-time> | 선택 | End time (ISO 8601) |
| pageable | query | Pageable | 필수 | — |
응답
- 200Telemetry data retrieved successfully
ApiResponse - 404Hub not found or access denied
ApiResponsePageHubTelemetryResponse
Tenant — Data Pipelines
대상: Supplier 콘솔
telemetry 변환·외부 전달 규칙 정의 (예: 윈도 평균 → S3, MQTT 등).
/tenant/data-pipelines파라미터
파라미터 없음
응답
- 200OK
ApiResponseListPipelineConfigResponse
/tenant/data-pipelines파라미터
파라미터 없음
요청 본문
CreatePipelineRequest필수응답
- 201Created
ApiResponsePipelineConfigResponse
/tenant/data-pipelines/{pipelineUuid}파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| pipelineUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponsePipelineConfigResponse
/tenant/data-pipelines/{pipelineUuid}파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| pipelineUuid | path | string<uuid> | 필수 | — |
요청 본문
UpdatePipelineRequest필수응답
- 200OK
ApiResponsePipelineConfigResponse
/tenant/data-pipelines/{pipelineUuid}파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| pipelineUuid | path | string<uuid> | 필수 | — |
응답
- 204No Content
/tenant/data-pipelines/{pipelineUuid}/deliveries파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| pipelineUuid | path | string<uuid> | 필수 | — |
| page | query | integer<int32> | 선택 | — |
| limit | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListMapStringObject
/tenant/data-pipelines/{pipelineUuid}/dlq파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| pipelineUuid | path | string<uuid> | 필수 | — |
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListDlqMessageResponse
/tenant/data-pipelines/{pipelineUuid}/dlq/{dlqId}/retry파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| pipelineUuid | path | string<uuid> | 필수 | — |
| dlqId | path | integer<int64> | 필수 | — |
응답
- 200OK
ApiResponseVoid
/tenant/data-pipelines/{pipelineUuid}/test-run파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| pipelineUuid | path | string<uuid> | 필수 | — |
요청 본문
PipelineTestRequest필수응답
- 200OK
ApiResponsePipelineTestResult
/tenant/data-pipelines/transpile파라미터
파라미터 없음
요청 본문
JsonNode필수응답
- 200OK
ApiResponseObject
Tenant — Consent Settings
대상: Supplier 콘솔
end-user 동의 화면 텍스트·정책 설정.
/tenant/consent-settingsGet consent settings
Get active consent settings for the current tenant (or pinned supplier)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| supplierUuid | query | string<uuid> | 선택 | Supplier UUID (defaults to current tenant) |
응답
- 200OK
ApiResponseConsentSettingResponse
/tenant/consent-settingsCreate or update consent settings
Create or update consent settings for a supplier
파라미터
파라미터 없음
요청 본문
ConsentSettingRequest필수응답
- 200OK
ApiResponseConsentSettingResponse
Tenant — 기타
대상: Supplier 콘솔 / BFF
위에 따로 분류되지 않은 /tenant 경로. agent-policies, notification-settings 등.
/tenant/action-definitionsList action definitions for current tenant (auto-resolved supplier)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| supplierUuid | query | string<uuid> | 선택 | — |
응답
- 200OK
ApiResponseListActionDefinitionResponse
/tenant/action-definitionsCreate action definition
Create a new protocol action definition
파라미터
파라미터 없음
요청 본문
ActionDefinitionCreateRequest필수응답
- 201Created
ApiResponseActionDefinitionResponse
/tenant/action-definitions/{actionId}Get action definition
Get a single action definition by ID
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| actionId | path | string | 필수 | — |
응답
- 200OK
ApiResponseActionDefinitionResponse
/tenant/action-definitions/{actionId}Delete action definition
Delete an action definition
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| actionId | path | string | 필수 | — |
응답
- 200OK
ApiResponseVoid
/tenant/action-definitions/{actionId}Update action definition
Update an existing action definition
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| actionId | path | string | 필수 | — |
요청 본문
ActionDefinitionUpdateRequest필수응답
- 200OK
ApiResponseActionDefinitionResponse
/tenant/agent-releasesList agent releases (optionally filter by channel + active)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| channel | query | string | 선택 | — |
| activeOnly | query | boolean | 선택 | — |
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListAgentReleaseResponse
/tenant/agent-releases/{releaseUuid}파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| releaseUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseAgentReleaseResponse
/tenant/agent-update-policiesList agent update policies belonging to current tenant
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListAgentUpdatePolicyResponse
/tenant/agent-update-policiesUpsert UNIT/HUB scoped policy (tenant_uuid auto-set on UNIT scope)
파라미터
파라미터 없음
요청 본문
CreateAgentUpdatePolicyRequest필수응답
- 200OK
ApiResponseAgentUpdatePolicyResponse
/tenant/agent-update-policies/{policyUuid}파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| policyUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseAgentUpdatePolicyResponse
/tenant/agent-update-policies/{policyUuid}파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| policyUuid | path | string<uuid> | 필수 | — |
응답
- 204No Content
/tenant/api-keysList API keys
List all active API keys. Key hashes are never exposed.
파라미터
파라미터 없음
응답
- 200OK
ApiResponseListApiKeyListResponse
/tenant/api-keysGenerate new API key
Creates a new API key. The raw key is returned ONCE and cannot be retrieved again.
파라미터
파라미터 없음
요청 본문
ApiKeyCreateRequest필수응답
- 201Created
ApiResponseApiKeyCreateResponse
/tenant/api-keys/{apiKeyId}Update API key
Update name, scopes, or rate limit of an existing API key.
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| apiKeyId | path | integer<int64> | 필수 | — |
요청 본문
ApiKeyUpdateRequest필수응답
- 200OK
ApiResponseApiKeyListResponse
/tenant/api-keys/{apiKeyId}Revoke API key
Deactivates an API key. The key can no longer be used for authentication.
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| apiKeyId | path | integer<int64> | 필수 | — |
응답
- 200OK
ApiResponseVoid
/tenant/apps파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListAppResponse
/tenant/apps파라미터
파라미터 없음
요청 본문
AppCreateRequest필수응답
- 201Created
ApiResponseAppResponse
/tenant/apps/{appUuid}파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| appUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseAppResponse
/tenant/apps/{appUuid}/releases파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| appUuid | path | string<uuid> | 필수 | — |
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListAppReleaseResponse
/tenant/apps/{appUuid}/releases파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| appUuid | path | string<uuid> | 필수 | — |
요청 본문
AppReleaseCreateRequest필수응답
- 201Created
ApiResponseAppReleaseResponse
/tenant/audit-logsGet tenant audit logs
Retrieve tenant-level audit logs with pagination
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
PageAuditLogResponse
/tenant/billing/balanceGet billing balance
sdx-web pass-through. Returns currentCreditCents, activeSubscription, lastInvoice.
파라미터
파라미터 없음
응답
- 200OK
ApiResponseMapStringObject
/tenant/billing/charge-settings[DEPRECATED] auto-charge settings — sdx-web으로 이동
파라미터
파라미터 없음
응답
- 200OK
ApiResponseMapStringString
/tenant/billing/charge-settings[DEPRECATED] auto-charge settings — sdx-web으로 이동
파라미터
파라미터 없음
응답
- 200OK
ApiResponseMapStringString
/tenant/billing/entitlementGet current entitlement
sdx-web 구독 기반 entitlement (tier, limits, validUntil)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| tenantUuid | query | string<uuid> | 선택 | Unit UUID (생략 시 현재 컨텍스트 사용) |
응답
- 200OK
ApiResponseEntitlementResponse
/tenant/billing/transactionsGet billing transactions
sdx-web pass-through. Cursor pagination by createdAt desc.
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| cursor | query | string | 선택 | ISO-8601 datetime; 생략 시 최신부터 |
| limit | query | integer<int32> | 선택 | 1-100, default 50 |
응답
- 200OK
ApiResponseMapStringObject
/tenant/ble-query/deliveriesGet BLE deliveries
Retrieve paginated list of BLE deliveries filtered by unit scope and optional criteria
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| from | query | string<date-time> | 선택 | Start time (ISO 8601) |
| to | query | string<date-time> | 선택 | End time (ISO 8601) |
| status | query | string | 선택 | Filter by delivery status |
| pageable | query | Pageable | 필수 | — |
응답
- 200BLE deliveries retrieved successfully
ApiResponse
/tenant/ble-query/eventsGet BLE events
Retrieve paginated list of BLE events filtered by unit scope and optional criteria. Raw base64 data is excluded from list view.
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| from | query | string<date-time> | 선택 | Start time (ISO 8601) |
| to | query | string<date-time> | 선택 | End time (ISO 8601) |
| hubUuid | query | string<uuid> | 선택 | Filter by hub UUID |
| deviceInstanceId | query | integer<int64> | 선택 | Filter by device instance ID |
| processingStatus | query | string | 선택 | Filter by processing status |
| deliveryStatus | query | string | 선택 | Filter by delivery status |
| pageable | query | Pageable | 필수 | — |
응답
- 200BLE events retrieved successfully
ApiResponse - 403Insufficient permissions
ApiResponsePageBleEventResponse
/tenant/ble-query/events/{bleEventId}Get BLE event detail
Retrieve detailed information about a specific BLE event. Raw base64 data can be included with includeRaw=true parameter.
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bleEventId | path | integer<int64> | 필수 | BLE event ID |
| includeRaw | query | boolean | 선택 | Include raw base64 data |
응답
- 200BLE event detail retrieved successfully
ApiResponse - 404Event not found or access denied
ApiResponseBleEventDetailResponse
/tenant/ble-query/events/{bleEventId}/runsGet BLE event processing runs
Retrieve all processing runs and their actions for a specific BLE event
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bleEventId | path | integer<int64> | 필수 | BLE event ID |
응답
- 200Processing runs retrieved successfully
ApiResponse - 404Event not found or access denied
ApiResponseListBleProcessingRunResponse
/tenant/ble/events파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| from | query | string<date-time> | 선택 | — |
| to | query | string<date-time> | 선택 | — |
| hubUuid | query | string<uuid> | 선택 | — |
| deviceInstanceId | query | integer<int64> | 선택 | — |
| processingStatus | query | string | 선택 | — |
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListBleEventResponse
/tenant/ble/events/{bleEventId}파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bleEventId | path | integer<int64> | 필수 | — |
응답
- 200OK
ApiResponseBleEventResponse
/tenant/ble/events/{bleEventId}/runs파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| bleEventId | path | integer<int64> | 필수 | — |
응답
- 200OK
ApiResponseListBleProcessingRunResponse
/tenant/ble/route파라미터
파라미터 없음
응답
- 200OK
ApiResponseBleRouteConfigResponse
/tenant/ble/route파라미터
파라미터 없음
요청 본문
BleRouteConfigRequest필수응답
- 200OK
ApiResponseBleRouteConfigResponse
/tenant/consent-recordsList consent records
List all consent records for the current tenant (or pinned supplier)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| supplierUuid | query | string<uuid> | 선택 | Supplier UUID (defaults to current tenant) |
응답
- 200OK
ApiResponseListConsentRecordResponse
/tenant/device-catalogList device catalog entries (Device models)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListDeviceCatalogResponse
/tenant/device-catalogCreate device catalog entry (deviceUuid auto-issued)
파라미터
파라미터 없음
요청 본문
CreateDeviceRequest필수응답
- 200OK
ApiResponseDeviceCatalogResponse
/tenant/device-catalog/{deviceUuid}Get device catalog entry detail
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseDeviceCatalogResponse
/tenant/device-catalog/{deviceUuid}Delete device catalog entry (hard delete)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
/tenant/device-catalog/{deviceUuid}Update device catalog entry
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUuid | path | string<uuid> | 필수 | — |
요청 본문
UpdateDeviceRequest필수응답
- 200OK
ApiResponseDeviceCatalogResponse
/tenant/device-catalog/{deviceUuid}/identifiersList identifier hints registered under a device
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseListDeviceMatchIdentifierResponse
/tenant/device-catalog/{deviceUuid}/identifiersAdd an identifier hint
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUuid | path | string<uuid> | 필수 | — |
요청 본문
CreateDeviceMatchIdentifierRequest필수응답
- 200OK
ApiResponseDeviceMatchIdentifierResponse
/tenant/device-catalog/{deviceUuid}/identifiers/{id}Remove an identifier
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUuid | path | string<uuid> | 필수 | — |
| id | path | integer<int64> | 필수 | — |
응답
- 200OK
/tenant/device-catalog/{deviceUuid}/identifiers/{id}Update label/notes on an identifier
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUuid | path | string<uuid> | 필수 | — |
| id | path | integer<int64> | 필수 | — |
요청 본문
UpdateDeviceMatchIdentifierRequest필수응답
- 200OK
ApiResponseDeviceMatchIdentifierResponse
/tenant/device-protocolsList device protocols (optionally filter by deviceUuid)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUuid | query | string<uuid> | 선택 | — |
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListDeviceProtocolResponse
/tenant/device-protocolsCreate device protocol entry
파라미터
파라미터 없음
요청 본문
CreateDeviceProtocolRequest필수응답
- 200OK
ApiResponseDeviceProtocolResponse
/tenant/device-protocols/{deviceProtocolId}Get device protocol detail
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceProtocolId | path | integer<int64> | 필수 | — |
응답
- 200OK
ApiResponseDeviceProtocolResponse
/tenant/device-protocols/{deviceProtocolId}Delete device protocol entry
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceProtocolId | path | integer<int64> | 필수 | — |
응답
- 200OK
/tenant/device-protocols/{deviceProtocolId}Update device protocol entry
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceProtocolId | path | integer<int64> | 필수 | — |
요청 본문
UpdateDeviceProtocolRequest필수응답
- 200OK
ApiResponseDeviceProtocolResponse
/tenant/device-protocols/devices/{deviceUuid}Get device catalog header (Device entity)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseDeviceCatalogResponse
/tenant/device-ui-schemasList device UI schemas (optionally filter by deviceUuid)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUuid | query | string<uuid> | 선택 | — |
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListDeviceUiResponse
/tenant/device-ui-schemasCreate device UI schema
파라미터
파라미터 없음
요청 본문
CreateDeviceUiRequest필수응답
- 200OK
ApiResponseDeviceUiResponse
/tenant/device-ui-schemas/{deviceUiId}Get device UI schema detail
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUiId | path | integer<int64> | 필수 | — |
응답
- 200OK
ApiResponseDeviceUiResponse
/tenant/device-ui-schemas/{deviceUiId}Delete device UI schema
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUiId | path | integer<int64> | 필수 | — |
응답
- 200OK
/tenant/device-ui-schemas/{deviceUiId}Update device UI schema
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUiId | path | integer<int64> | 필수 | — |
요청 본문
UpdateDeviceUiRequest필수응답
- 200OK
ApiResponseDeviceUiResponse
/tenant/device-versionsList device versions (optionally filter by deviceUuid)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUuid | query | string<uuid> | 선택 | — |
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListDeviceVersionResponse
/tenant/device-versionsCreate device version entry
파라미터
파라미터 없음
요청 본문
CreateDeviceVersionRequest필수응답
- 200OK
ApiResponseDeviceVersionResponse
/tenant/device-versions/{deviceVersionUuid}Get device version detail
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceVersionUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseDeviceVersionResponse
/tenant/device-versions/{deviceVersionUuid}Delete device version entry
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceVersionUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
/tenant/device-versions/{deviceVersionUuid}Update device version entry
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceVersionUuid | path | string<uuid> | 필수 | — |
요청 본문
UpdateDeviceVersionRequest필수응답
- 200OK
ApiResponseDeviceVersionResponse
/tenant/downloads/asset-urlResolve a GH presigned S3 URL for a single asset (5-min TTL)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| category | query | string | 필수 | — |
| assetId | query | integer<int64> | 필수 | — |
응답
- 200OK
ApiResponseAssetUrl
/tenant/downloads/manifestLatest release + filtered assets for installer / hub-os / hub-agent
파라미터
파라미터 없음
응답
- 200OK
ApiResponseDownloadManifest
/tenant/manualsList device manuals (optionally filter by deviceUuid)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceUuid | query | string<uuid> | 선택 | — |
| page | query | integer<int32> | 선택 | — |
| size | query | integer<int32> | 선택 | — |
응답
- 200OK
ApiResponseListDeviceManualResponse
/tenant/manualsCreate device manual
파라미터
파라미터 없음
요청 본문
CreateDeviceManualRequest필수응답
- 200OK
ApiResponseDeviceManualResponse
/tenant/manuals/{deviceManualId}Get device manual detail
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceManualId | path | integer<int64> | 필수 | — |
응답
- 200OK
ApiResponseDeviceManualResponse
/tenant/manuals/{deviceManualId}Delete device manual
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceManualId | path | integer<int64> | 필수 | — |
응답
- 200OK
/tenant/manuals/{deviceManualId}Update device manual
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceManualId | path | integer<int64> | 필수 | — |
요청 본문
UpdateDeviceManualRequest필수응답
- 200OK
ApiResponseDeviceManualResponse
/tenant/notification-settingsList notification settings for current user within tenant context
파라미터
파라미터 없음
응답
- 200OK
ApiResponseListNotificationSettingResponse
/tenant/notification-settingsUpsert a single notification setting (by type+channel)
파라미터
파라미터 없음
요청 본문
UpsertNotificationSettingRequest필수응답
- 200OK
ApiResponseNotificationSettingResponse
/tenant/notification-settings/bulkBulk upsert notification settings
파라미터
파라미터 없음
요청 본문
UpsertNotificationSettingRequest필수응답
- 200OK
ApiResponseListNotificationSettingResponse
/tenant/personasList members of current tenant
파라미터
파라미터 없음
응답
- 200OK
ApiResponseListTenantMemberResponse
/tenant/personas/{personaUuid}Revoke persona access from tenant
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| personaUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
/tenant/personas/{personaUuid}Change role of a tenant persona
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| personaUuid | path | string<uuid> | 필수 | — |
요청 본문
UpdatePersonaRoleRequest필수응답
- 200OK
ApiResponseTenantMemberResponse
/tenant/personas/inviteInvite a persona (create via sdx-oauth or grant existing)
파라미터
파라미터 없음
요청 본문
PersonaInviteRequest필수응답
- 200OK
ApiResponseTenantMemberResponse
/tenant/simulator/presets파라미터
파라미터 없음
응답
- 200OK
ApiResponseListSimulationPreset
/tenant/simulator/run파라미터
파라미터 없음
요청 본문
SimulationRequest필수응답
- 200OK
ApiResponseSimulationResult
/tenant/simulator/stream파라미터
파라미터 없음
요청 본문
StreamSimulationRequest필수응답
- 200OK
ApiResponseListSimulationResult
/tenant/stream/ble/eventsStream BLE events
Subscribe to real-time BLE events via Server-Sent Events (SSE). **SSE Protocol:** - Content-Type: text/event-stream - Event name: `ble_event` - Heartbeat: Every 20 seconds (comment: ping) - Connection timeout: 5 minutes **Last-Event-ID Support:** - Client can send `Last-Event-ID` header with ISO-8601 timestamp - Server will stream events after that timestamp - Event IDs are ISO-8601 timestamps (receivedAt) **Permission:** - Requires unit scope (events filtered by persona's unit) - Requires READ permission (permissionCode & 1 == 1) **Testing with curl:** ```bash curl -N -H "Authorization: Bearer YOUR_TOKEN" \ http://localhost:8080/tenant/stream/ble/events ``` **Testing with EventSource (JavaScript):** ```javascript const eventSource = new EventSource('/tenant/stream/ble/events', { headers: { Authorization: 'Bearer YOUR_TOKEN' } }); eventSource.addEventListener('ble_event', (event) => { const data = JSON.parse(event.data); console.log('BLE event:', data); }); eventSource.onerror = (error) => { console.error('SSE error:', error); }; ```
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| Authorization | header | string | 필수 | — |
| Last-Event-ID | header | string | 선택 | Last event timestamp (ISO-8601) |
응답
- 200SSE stream established
- 403Insufficient permissions
SseEmitter
/tenant/stream/hubs/{hubUuid}/jobsStream hub job events
Subscribe to real-time hub job events via Server-Sent Events (SSE). **SSE Protocol:** - Content-Type: text/event-stream - Event name: `hub_job_event` - Heartbeat: Every 20 seconds (comment: ping) - Connection timeout: 5 minutes **Last-Event-ID Support:** - Client can send `Last-Event-ID` header with ISO-8601 timestamp - Server will stream events after that timestamp - Event IDs are ISO-8601 timestamps (receivedAt) **Permission:** - Requires unit scope (persona's unit must match hub's unit) - Requires READ permission (permissionCode & 1 == 1) **Testing with curl:** ```bash curl -N -H "Authorization: Bearer YOUR_TOKEN" \ http://localhost:8080/tenant/stream/hubs/{hubUuid}/jobs ``` **Testing with EventSource (JavaScript):** ```javascript const eventSource = new EventSource('/tenant/stream/hubs/{hubUuid}/jobs', { headers: { Authorization: 'Bearer YOUR_TOKEN' } }); eventSource.addEventListener('hub_job_event', (event) => { const data = JSON.parse(event.data); console.log('Job event:', data); }); ```
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| Authorization | header | string | 필수 | — |
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
| Last-Event-ID | header | string | 선택 | Last event timestamp (ISO-8601) |
응답
- 200SSE stream established
- 403Insufficient permissions
SseEmitter - 404Hub not found or persona doesn't have access
SseEmitter
/tenant/stream/hubs/{hubUuid}/logsStream hub logs
Subscribe to real-time hub logs via Server-Sent Events (SSE). **SSE Protocol:** - Content-Type: text/event-stream - Event name: `hub_log` - Heartbeat: Every 20 seconds (comment: ping) - Connection timeout: 5 minutes **Last-Event-ID Support:** - Client can send `Last-Event-ID` header with ISO-8601 timestamp - Server will stream logs after that timestamp - Event IDs are ISO-8601 timestamps (receivedAt) **Permission:** - Requires unit scope (persona's unit must match hub's unit) - Requires READ permission (permissionCode & 1 == 1) **Testing with curl:** ```bash curl -N -H "Authorization: Bearer YOUR_TOKEN" \ http://localhost:8080/tenant/stream/hubs/{hubUuid}/logs ```
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| Authorization | header | string | 필수 | — |
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
| Last-Event-ID | header | string | 선택 | Last event timestamp (ISO-8601) |
응답
- 200SSE stream established
- 403Insufficient permissions
SseEmitter - 404Hub not found or persona doesn't have access
SseEmitter
/tenant/tenantsList my accessible tenants
파라미터
파라미터 없음
응답
- 200OK
ApiResponseListTenantResponse
/tenant/tenantsCreate a new tenant under my current sdx unit
파라미터
파라미터 없음
요청 본문
CreateTenantRequest필수응답
- 200OK
ApiResponseTenantResponse
/tenant/tenants/{tenantUuid}Soft-delete tenant (OWNER only)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| tenantUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
/tenant/tenants/{tenantUuid}Update tenant name (ADMIN+)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| tenantUuid | path | string<uuid> | 필수 | — |
요청 본문
CreateTenantRequest필수응답
- 200OK
ApiResponseTenantResponse
/tenant/tenants/{tenantUuid}/membersList tenant members (any access)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| tenantUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseListTenantMemberResponse
/tenant/tenants/{tenantUuid}/membersGrant access (ADMIN+; OWNER for OWNER role)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| tenantUuid | path | string<uuid> | 필수 | — |
요청 본문
GrantAccessRequest필수응답
- 200OK
ApiResponseTenantMemberResponse
/tenant/tenants/{tenantUuid}/members/{targetPersonaUuid}Revoke access (ADMIN+; last OWNER protected)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| tenantUuid | path | string<uuid> | 필수 | — |
| targetPersonaUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
/tenant/tenants/{tenantUuid}/transferInitiate ownership transfer (current OWNER)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| tenantUuid | path | string<uuid> | 필수 | — |
요청 본문
InitiateTransferRequest필수응답
- 200OK
ApiResponseTenantTransferRequestResponse
/tenant/testTenant test endpoint
Test endpoint that requires JWT authentication
파라미터
파라미터 없음
응답
- 200OK
ApiResponseMapStringObject
/tenant/transfer-requests/{requestUuid}/accept이전 요청 승인 (받는 unit의 멤버 persona)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| requestUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseTenantTransferRequestResponse
/tenant/transfer-requests/{requestUuid}/cancel이전 요청 취소 (요청자 본인 또는 OWNER)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| requestUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseTenantTransferRequestResponse
/tenant/transfer-requests/{requestUuid}/reject이전 요청 거부 (받는 unit의 멤버 persona)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| requestUuid | path | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseTenantTransferRequestResponse
/tenant/transfer-requests/incoming받은 PENDING 이전 요청 (현재 persona의 unit으로 향한)
파라미터
파라미터 없음
응답
- 200OK
ApiResponseListTenantTransferRequestResponse
/tenant/transfer-requests/outgoing보낸 PENDING 이전 요청 (현재 persona의 unit에서 발신)
파라미터
파라미터 없음
응답
- 200OK
ApiResponseListTenantTransferRequestResponse
/tenant/units/{tenantUuid}/testTest unit boundary enforcement
Test endpoint that verifies persona belongs to specified unit
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| tenantUuid | path | string<uuid> | 필수 | Unit UUID to access |
응답
- 200OK
ApiResponseMapStringObject
App API — End-user
대상: 모바일 앱 (Flutter)
end-user 모바일 앱이 쓰는 endpoint. sdx-oauth JWT로 인증.
/app/action-definitionsList action definitions for a supplier
Returns all action definitions for the specified supplier
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| supplierUuid | query | string<uuid> | 필수 | — |
응답
- 200OK
ApiResponseListActionDefinitionResponse
/app/action-definitions/{actionId}Get action definition
Get a single action definition by ID
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| actionId | path | string | 필수 | — |
응답
- 200OK
ApiResponseActionDefinitionResponse
/app/consentList consent records
List all consent records for current user
파라미터
파라미터 없음
응답
- 200OK
ApiResponseListConsentRecordResponse
/app/consentGrant consent
Grant consent for a supplier and consent type
파라미터
파라미터 없음
요청 본문
ConsentGrantRequest필수응답
- 200OK
ApiResponseConsentRecordResponse
/app/consent/{consentId}Withdraw consent
Withdraw a previously granted consent
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| consentId | path | integer<int64> | 필수 | Consent record ID |
응답
- 200OK
ApiResponseVoid
/app/consent/{consentId}/retentionGet retention settings
Get retention settings for a consent record
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| consentId | path | integer<int64> | 필수 | Consent record ID |
응답
- 200OK
ApiResponseRetentionSettingResponse
/app/consent/{consentId}/retentionUpdate retention period
Update retention period for a consent record
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| consentId | path | integer<int64> | 필수 | Consent record ID |
요청 본문
RetentionUpdateRequest필수응답
- 200OK
ApiResponseRetentionSettingResponse
/app/devicesList user's devices
List all devices from units where user has a persona
파라미터
파라미터 없음
응답
- 200OK
ApiResponseListDeviceSummaryResponse
/app/devices/{deviceInstanceId}Get device detail
Get device detail by instance ID
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceInstanceId | path | integer<int64> | 필수 | Device instance ID |
응답
- 200OK
ApiResponseDeviceDetailResponse
/app/devices/{deviceInstanceId}/commandsSend control command
Send a control command to a device
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceInstanceId | path | integer<int64> | 필수 | Device instance ID |
요청 본문
DeviceCommandRequest필수응답
- 200OK
ApiResponseDeviceCommandResponse
/app/devices/{deviceInstanceId}/sensor-dataGet sensor data
Get sensor data for a device with optional time range
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| deviceInstanceId | path | integer<int64> | 필수 | Device instance ID |
| from | query | string | 선택 | Start time (ISO 8601) |
| to | query | string | 선택 | End time (ISO 8601) |
응답
- 200OK
ApiResponseObject
/app/hubsList hubs
List all hubs owned by current user
파라미터
파라미터 없음
응답
- 200OK
ApiResponseListAppHubSummaryResponse
/app/hubs/{hubUuid}Get hub detail
Get hub detail by UUID
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| hubUuid | path | string<uuid> | 필수 | Hub UUID |
응답
- 200OK
ApiResponseAppHubDetailResponse
/app/notificationsList notifications
List notifications for current user (paginated)
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| page | query | integer<int32> | 선택 | Page number (1-based) |
| size | query | integer<int32> | 선택 | Page size |
응답
- 200OK
ApiResponseListNotificationResponse
/app/notifications/{notificationId}/readMark as read
Mark a notification as read
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| notificationId | path | integer<int64> | 필수 | Notification ID |
응답
- 200OK
ApiResponseVoid
/app/profileGet profile
Get current user profile
파라미터
파라미터 없음
응답
- 200OK
ApiResponseUserProfileResponse
/app/profileUpdate profile
Update current user profile (nickname, etc.)
파라미터
파라미터 없음
요청 본문
UserProfileUpdateRequest필수응답
- 200OK
ApiResponseUserProfileResponse
/app/provisioning-steps/{supplierUuid}Get provisioning steps
Get supplier's custom provisioning steps
파라미터
| Name | In | Type | Description | |
|---|---|---|---|---|
| supplierUuid | path | string<uuid> | 필수 | Supplier UUID |
응답
- 200OK
ApiResponseListProvisioningStepResponse
schema 컴포넌트 상세는 Swagger UI 의 Schemas 섹션을 참조하세요.
미분류 endpoint (5)
아래 endpoint는 현재 어떤 그룹에도 매칭되지 않았습니다. 새로 추가된 endpoint인 경우 이 페이지의 분류 규칙(openapi.ts)을 보강해 주세요.
- post /v1/ble/events
- post /v1/ble/events/windowed
- get /v1/test
- get /v1/apps/{appReleaseUuid}/manifest
- get /v1/agent/releases/latest