K

gateway

외부 connector 등록·discover·query·invoke·config

앱 코드에서 회사 데이터 커넥터를 쓰는 operation 모음이에요. 커넥터·리소스 조회, 세션 발급, 안전 쿼리(query)와 호출(invoke)까지 게이트웨이를 거치는 표면이 다 여기 있어요. 모든 호출은 grant(권한)와 preset(허용 action)의 통제를 받고, 범위 지정 grant·행/열 접근 정책 같은 안전장치가 그 위에 얹혀요. 커넥터를 처음 연결하고 승인받는 흐름은 커넥터로 회사 데이터 연결하기 가이드에서 볼 수 있어요.

14 operations — 외부 connector 등록·discover·query·invoke·config

범위 지정 grant · 접근 정책 · EXPLAIN

query·invoke 계열 op 를 부르기 전에 알아야 하는 안전장치 규칙이다 (spec 168·169·171·172).

  • grant 의 4번째 축 — scope_resource_paths (spec 172): grant 는 subject×connector×preset 에 범위 축이 더해진 4축이다. schema/table 문자열 배열(최대 200개, 중복 제거)로 "어디까지" 를 지정하며, 빈 배열/생략 = 커넥터 전체(기존 동작). 생성 시 지정하거나 tenant_admin 이 PUT /api/v1/tenants/{tenantID}/grants/{grantID}/scope (authorizationPutApiV1TenantsByTenantIDGrantsByGrantIDScope) 로 통째 교체한다. 회수·만료된 grant 는 409.
  • 범위 지정 grant 의 자유 쿼리 거부 (spec 172): 판정은 fail-closed — 대상을 확정할 수 없으면 거부다. 자유 SQL(/gateway/query), REST invoke, 파일 file-invoke, database 미지정 document-invoke 는 403 scope_requires_target. 대상이 명시된 호출(document-invoke 의 database+collection)은 목록 안이면 허용, 밖이면 403 scope_out_of_range. 범위가 빈 grant 는 모든 경로에서 종전과 동일하다.
  • 행·열 접근 정책의 스코프 (spec 169·171): 정책(access-policy)은 resource_path(적용 대상 schema/table — 비면 커넥터 전체)와 connector_id(소속 커넥터 — 비면 커넥터 무관)를 가진다. 관리 표면은 /api/v1/tenants/{tenantID}/access-policies CRUD 이고, 활성 grant 가 참조 중인 정책 삭제는 409 policy_in_use (spec 168 — 지우면 그 grant 의 쿼리가 전부 fail-closed 거부되기 때문).
  • EXPLAIN action (spec 168): kind=db preset 의 action vocabulary 는 SELECT/INSERT/UPDATE/DELETE 에 EXPLAIN 이 추가됐다. EXPLAIN 은 read-only 로 분류돼 READ ONLY 트랜잭션에서 실행되고, EXPLAIN ANALYZE 로 위장한 쓰기는 엔진이 거부한다. 기본 "Read Only" preset 은 backfill 로 EXPLAIN 을 갖는다 (SELECT 없는 preset 은 대상 아님).

GET /api/v1/tenants/{tenantID}/connectors

gatewayGetApiV1TenantsByTenantIDConnectors

  • 호출 권한: tenant_admin 테넌트에 등록된 connector 목록을 조회한다.
언어호출
node@ax-hub/sdk 미제공 — 운영 패키지 @ax-hub/admin-sdkadmin.tenant(x).connectors.list 사용
goclient.Gateway().GatewayGetApiV1TenantsByTenantIDConnectors(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayGetApiV1TenantsByTenantIDConnectors(pathParams, query, body) — 비동기: gatewayGetApiV1TenantsByTenantIDConnectorsAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayGetApiV1TenantsByTenantIDConnectors(pathParams, query, body) — suspend
pythonclient.gateway.gateway_get_api_v1_tenants_by_tenant_id_connectors(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_get_api_v1_tenants_by_tenant_id_connectors(path_params: …, query: …, body: …)
공통request("gatewayGetApiV1TenantsByTenantIDConnectors", pathParams, query, body)

Path 파라미터pathParams 로 전달

이름타입설명
tenantID 필수string테넌트 UUID

Query 파라미터query 로 전달 (문자열 값)

이름타입설명
enabled_onlybooleantrue 면 enabled=true 만

응답 — 200 · OK

배열 응답 → SDK 는 {"value": [...]} 로 감싸 반환. 원소 필드:

이름타입설명
idstringconnector UUID
namestringunique connector 이름
kindstringdb / api
enginestringpostgres / mysql / mssql / oracle / clickhouse / vertica / rest-api + wire-compatible alias
enabledboolean관리자 활성 토글. false 면 커넥터가 쓰이지 않아요
statusstring표시용 상태 배지: active(정상) / auth_expired(재인증 필요) / offline(에이전트 연결 끊김) / disabled
authStatus (wire: auth_status)stringOAuth refresh_token 사용 가능 여부: active / auth_expired. direct DB 커넥터는 항상 active
appId (wire: app_id)string"axhub 앱 DB" 커넥터의 원본 앱 UUID. 일반 커넥터는 생략
classificationarray<string>자유 태그
configobjectengine 별 설정 (credential 제외)
descriptionstringadmin 메모
lastDiscoveredAt (wire: last_discovered_at)string마지막 발견 시각
tenantId (wire: tenant_id)string소속 tenant UUID
createdAt (wire: created_at)string
updatedAt (wire: updated_at)string

에러 status: 400 401 403 500에러 처리

GET /api/v1/tenants/{tenantID}/connectors/{connectorID}

gatewayGetApiV1TenantsByTenantIDConnectorsByConnectorID

  • 호출 권한: tenant_admin
언어호출
node@ax-hub/sdk 미제공 — 운영 패키지 @ax-hub/admin-sdkadmin.tenant(x).connectors.get 사용
goclient.Gateway().GatewayGetApiV1TenantsByTenantIDConnectorsByConnectorID(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayGetApiV1TenantsByTenantIDConnectorsByConnectorID(pathParams, query, body) — 비동기: gatewayGetApiV1TenantsByTenantIDConnectorsByConnectorIDAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayGetApiV1TenantsByTenantIDConnectorsByConnectorID(pathParams, query, body) — suspend
pythonclient.gateway.gateway_get_api_v1_tenants_by_tenant_id_connectors_by_connector_id(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_get_api_v1_tenants_by_tenant_id_connectors_by_connector_id(path_params: …, query: …, body: …)
공통request("gatewayGetApiV1TenantsByTenantIDConnectorsByConnectorID", pathParams, query, body)

Path 파라미터pathParams 로 전달

이름타입설명
tenantID 필수string테넌트 UUID
connectorID 필수stringconnector UUID

응답 — 200 · OK

이름타입설명
classificationarray<string>Classification 은 자유 태그.
configobjectConfig 는 engine 별 설정 (credential 제외).
createdAt (wire: created_at)string
descriptionstringDescription 은 admin 메모.
enabledboolean
enginestringEngine 은 postgres / mysql / mssql / oracle / clickhouse / vertica / rest-api + mysql wire-compatible alias (mariadb / tidb / singlestore) + postgres wire-compatible alias (cockroachdb / yugabytedb / redshift / greenplum / spanner) + oracle alias (tibero). alias 는 UI / catalog 식별만 별, driver / discovery 동일. Aurora / Azure 같은 cloud-managed wrapper 는 host 만 다른 같은 product 라 별도 카드 없이 mysql / postgres / mssql 사용.
idstringID 는 connector UUID.
kindstringKind 는 db / api.
lastDiscoveredAt (wire: last_discovered_at)stringLastDiscoveredAt 는 마지막 발견 시각.
namestringName 은 unique connector 이름.
tenantId (wire: tenant_id)stringTenantID 는 소속 tenant UUID.
updatedAt (wire: updated_at)string

에러 status: 400 401 403 404 500에러 처리

POST /api/v1/tenants/{tenantID}/connectors/{connectorID}/discover

gatewayPostApiV1TenantsByTenantIDConnectorsByConnectorIDDiscover

관리자가 등록 직후 5분 cron 안 기다리고 즉시 스키마/테이블/컬럼을 발견시킨다. 응답으로 발견된 tables/columns 카운트 + schemas + 일부 preview 를 반환.

  • 호출 권한: tenant_admin
  • 부수 효과: 발견 성공 시 connectors.last_discovered_at 갱신, 새 path INSERT, 사라진 path SoftDelete
  • REST connector 등 discoverer 없는 engine 은 zero-value 응답 (정상 200)
언어호출
node@ax-hub/sdk 미제공 — 운영 패키지 @ax-hub/admin-sdkadmin.tenant(x).connectors.discover 사용
goclient.Gateway().GatewayPostApiV1TenantsByTenantIDConnectorsByConnectorIDDiscover(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayPostApiV1TenantsByTenantIDConnectorsByConnectorIDDiscover(pathParams, query, body) — 비동기: gatewayPostApiV1TenantsByTenantIDConnectorsByConnectorIDDiscoverAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayPostApiV1TenantsByTenantIDConnectorsByConnectorIDDiscover(pathParams, query, body) — suspend
pythonclient.gateway.gateway_post_api_v1_tenants_by_tenant_id_connectors_by_connector_id_discover(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_post_api_v1_tenants_by_tenant_id_connectors_by_connector_id_discover(path_params: …, query: …, body: …)
공통request("gatewayPostApiV1TenantsByTenantIDConnectorsByConnectorIDDiscover", pathParams, query, body)

Path 파라미터pathParams 로 전달

이름타입설명
tenantID 필수string테넌트 UUID
connectorID 필수stringconnector UUID

응답 — 200 · OK

이름타입설명
columnsCount (wire: columns_count)integerColumnsCount 는 active 컬럼 row 수 (sweep 후 재집계).
lastDiscoveredAt (wire: last_discovered_at)stringLastDiscoveredAt 는 connectors.last_discovered_at 갱신 시각. discoverer 미지원 engine (REST 등) 면 null.
previewarray<object>Preview 는 발견된 table 일부 (최대 20개) — UI 카드 미리보기용.
schemasarray<string>Schemas 는 발견된 스키마(또는 database) 이름 목록.
tablesCount (wire: tables_count)integerTablesCount 는 이번 sweep 에서 engine 이 보고한 table 수.

에러 status: 400 401 403 404 500에러 처리

GET /api/v1/tenants/{tenantID}/connectors/{connectorID}/resources

gatewayGetApiV1TenantsByTenantIDConnectorsByConnectorIDResources

  • 호출 권한: tenant_admin 관리자가 grant 와 무관하게 connector 의 모든 active resource 를 조회한다. 사용자 면 (/me/connectors/{cID}/resources) 와 동일한 응답 shape 이지만 grant 체크 없음 — 운영자 / 관리 콘솔의 카탈로그 조회용.
  • limit (1~500, 기본 100) · offset · q (name 부분일치) · parent_id · roots_only
언어호출
node@ax-hub/sdk 미제공 — 운영 패키지 @ax-hub/admin-sdkadmin.tenant(x).connectors.resources 사용
goclient.Gateway().GatewayGetApiV1TenantsByTenantIDConnectorsByConnectorIDResources(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayGetApiV1TenantsByTenantIDConnectorsByConnectorIDResources(pathParams, query, body) — 비동기: gatewayGetApiV1TenantsByTenantIDConnectorsByConnectorIDResourcesAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayGetApiV1TenantsByTenantIDConnectorsByConnectorIDResources(pathParams, query, body) — suspend
pythonclient.gateway.gateway_get_api_v1_tenants_by_tenant_id_connectors_by_connector_id_resources(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_get_api_v1_tenants_by_tenant_id_connectors_by_connector_id_resources(path_params: …, query: …, body: …)
공통request("gatewayGetApiV1TenantsByTenantIDConnectorsByConnectorIDResources", pathParams, query, body)

Path 파라미터pathParams 로 전달

이름타입설명
tenantID 필수string테넌트 UUID
connectorID 필수stringconnector UUID

Query 파라미터query 로 전달 (문자열 값)

이름타입설명
limitinteger페이지 크기 (기본 100, 1~500 clamp)
offsetinteger오프셋 (기본 0)
qstringname 부분일치 필터
parent_idstring부모 리소스 UUID — 주면 그 직계 자식 전체를 페이징 없이 반환 (limit/offset/q 무시)
roots_onlybooleantrue 면 최상위(테이블/엔드포인트)만 페이징 — 한 테이블의 컬럼이 페이지 경계에 잘리지 않아요

응답 — 200 · OK

페이지 응답 { items: [...], total, next_cursor }next_cursor마지막 페이지에서 생략돼요. items 원소 필드:

이름타입설명
attributesobject
classificationarray<string>
connectorId (wire: connector_id)string
createdAt (wire: created_at)string
idstring
kindstring
namestring
parentId (wire: parent_id)string
pathstring
tenantId (wire: tenant_id)string
updatedAt (wire: updated_at)string

에러 status: 400 401 403 500에러 처리

POST /api/v1/tenants/{tenantID}/gateway/document-invoke

gatewayPostApiV1TenantsByTenantIDGatewayDocumentInvoke

MongoDB connector 의 op 를 실행한다.

  • 호출 권한: tenant_member (session 의 grant 보유 필요)
  • 입력: session_id · op (find/insertOne 등) · collection · 기타 op-별 필드
  • 권한: op → SQL action 매핑 (find→SELECT, insertOne→INSERT 등) 후 preset.Allows 체크 (spec 039 §R2)
  • 부수 효과: audit emit (TypeAPICall), connector pool 캐시
  • 범위 지정 grant 는 대상(database/collection)이 허용 목록 안이면 허용, 밖이면 403 scope_out_of_range. database 미지정 등 대상 미상이면 403 scope_requires_target (spec 172)
언어호출
nodesdk.tenant(tenantId).gateway.documentInvoke(…) — 인자·반환 타입은 패키지의 TypeScript 정의 참조
goclient.Gateway().GatewayPostApiV1TenantsByTenantIDGatewayDocumentInvoke(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayPostApiV1TenantsByTenantIDGatewayDocumentInvoke(pathParams, query, body) — 비동기: gatewayPostApiV1TenantsByTenantIDGatewayDocumentInvokeAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayPostApiV1TenantsByTenantIDGatewayDocumentInvoke(pathParams, query, body) — suspend
pythonclient.gateway.gateway_post_api_v1_tenants_by_tenant_id_gateway_document_invoke(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_post_api_v1_tenants_by_tenant_id_gateway_document_invoke(path_params: …, query: …, body: …)
공통request("gatewayPostApiV1TenantsByTenantIDGatewayDocumentInvoke", pathParams, query, body)

Path 파라미터pathParams 로 전달

이름타입설명
tenantID 필수string테넌트 UUID

Request Bodybody 로 전달, wire 키(snake_case) 그대로

이름타입설명
collectionstring
databasestring
documentobject
documentsarray<any>
fieldstring
filterobject
limitinteger
opstring
pipelinearray<any>
projectionobject
session_idstring
skipinteger
sortobject
updateobject

응답 — 200 · 실행 결과

이름타입설명
countinteger
deletedCount (wire: deleted_count)integer
distinctarray<any>
documentsarray<object>
insertedCount (wire: inserted_count)integer
insertedIds (wire: inserted_ids)array<any>
matchedCount (wire: matched_count)integer
modifiedCount (wire: modified_count)integer
opstring

에러 status: 400 401 403 404 500에러 처리

POST /api/v1/tenants/{tenantID}/gateway/file-invoke

gatewayPostApiV1TenantsByTenantIDGatewayFileInvoke

Google Drive connector 의 file action 을 실행한다.

  • 호출 권한: tenant_member (session 의 grant 보유 필요)
  • 입력: session_id · action (file:list|file:get|file:search) · 기타 action-별 필드
  • 권한: action 그대로 preset.Allows 체크 — native vocab (SQL 매핑 X)
  • 응답: Drive API raw shape (id, name, mimeType, size, modifiedTime, parents, webViewLink). 본문 stream X.
  • 부수 효과: audit emit (TypeAPICall). refresh_token revoke 시 connector auth_status='auth_expired' 전이.
  • 범위 지정 grant 는 이 호출을 거부한다 (파일은 테이블 대상이 아님) — 403 scope_requires_target (spec 172)
언어호출
node미제공
goclient.Gateway().GatewayPostApiV1TenantsByTenantIDGatewayFileInvoke(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayPostApiV1TenantsByTenantIDGatewayFileInvoke(pathParams, query, body) — 비동기: gatewayPostApiV1TenantsByTenantIDGatewayFileInvokeAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayPostApiV1TenantsByTenantIDGatewayFileInvoke(pathParams, query, body) — suspend
pythonclient.gateway.gateway_post_api_v1_tenants_by_tenant_id_gateway_file_invoke(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_post_api_v1_tenants_by_tenant_id_gateway_file_invoke(path_params: …, query: …, body: …)
공통request("gatewayPostApiV1TenantsByTenantIDGatewayFileInvoke", pathParams, query, body)

Path 파라미터pathParams 로 전달

이름타입설명
tenantID 필수string테넌트 UUID

Request Bodybody 로 전달, wire 키(snake_case) 그대로

이름타입설명
actionstringAction 은 file:list / file:get / file:search 중 하나.
file_idstringFileID 는 file:get 의 대상.
parent_folder_idstringParentFolderID 는 file:list 의 parent. 비우면 Shared Drive root.
qstringQ 는 file:search 의 Drive query string.
session_idstringSessionID 는 사전 발급된 gateway session id.

응답 — 200 · OK

이름타입설명
actionstringAction 은 file:list / file:get / file:search 중 하나.
fileobjectFile 은 file:get 의 단건 결과.
filesarray<object>Files 는 file:list / file:search 의 결과 배열.

에러 status: 400 401 403 404 500 503에러 처리

POST /api/v1/tenants/{tenantID}/gateway/invoke

gatewayPostApiV1TenantsByTenantIDGatewayInvoke

5단계: authz → policy in → engine.Invoke → policy out → audit.

  • 호출 권한: tenant_member
  • 범위 지정 grant 는 이 호출을 거부한다 (REST 경로는 테이블 대상을 명시할 수 없음) — 403 scope_requires_target (spec 172)
언어호출
nodesdk.tenant(tenantId).gateway.invoke(…) — 인자·반환 타입은 패키지의 TypeScript 정의 참조
goclient.Gateway().GatewayPostApiV1TenantsByTenantIDGatewayInvoke(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayPostApiV1TenantsByTenantIDGatewayInvoke(pathParams, query, body) — 비동기: gatewayPostApiV1TenantsByTenantIDGatewayInvokeAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayPostApiV1TenantsByTenantIDGatewayInvoke(pathParams, query, body) — suspend
pythonclient.gateway.gateway_post_api_v1_tenants_by_tenant_id_gateway_invoke(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_post_api_v1_tenants_by_tenant_id_gateway_invoke(path_params: …, query: …, body: …)
공통request("gatewayPostApiV1TenantsByTenantIDGatewayInvoke", pathParams, query, body)

Path 파라미터pathParams 로 전달

이름타입설명
tenantID 필수string테넌트 UUID

Request Bodybody 로 전달, wire 키(snake_case) 그대로

이름타입설명
bodyarray<integer>
headersobject
methodstring
pathstring
session_idstring

응답 — 200 · OK

이름타입설명
bodyarray<integer>
headersobject
statusCode (wire: status_code)integer

에러 status: 400 401 403 404 500에러 처리

POST /api/v1/tenants/{tenantID}/gateway/query

gatewayPostApiV1TenantsByTenantIDGatewayQuery

5단계: authz → policy in → engine.Execute → policy out → audit.

  • 호출 권한: tenant_member
  • 입력: session_id · sql · params? · action?
  • 부수 효과: audit query emit (allow/deny/error)
  • action 은 preset 의 kind=db vocab (SELECT/INSERT/UPDATE/DELETE/EXPLAIN) 로 판정한다. EXPLAIN 은 read-only 분류 — READ ONLY 트랜잭션에서 실행 (spec 168)
  • 범위 지정 grant(scope_resource_paths 비어있지 않음)는 자유 SQL 을 거부한다 — 403 scope_requires_target (spec 172)
언어호출
nodesdk.tenant(tenantId).gateway.query.run(…) — 인자·반환 타입은 패키지의 TypeScript 정의 참조
goclient.Gateway().GatewayPostApiV1TenantsByTenantIDGatewayQuery(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayPostApiV1TenantsByTenantIDGatewayQuery(pathParams, query, body) — 비동기: gatewayPostApiV1TenantsByTenantIDGatewayQueryAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayPostApiV1TenantsByTenantIDGatewayQuery(pathParams, query, body) — suspend
pythonclient.gateway.gateway_post_api_v1_tenants_by_tenant_id_gateway_query(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_post_api_v1_tenants_by_tenant_id_gateway_query(path_params: …, query: …, body: …)
공통request("gatewayPostApiV1TenantsByTenantIDGatewayQuery", pathParams, query, body)

Path 파라미터pathParams 로 전달

이름타입설명
tenantID 필수string테넌트 UUID

Request Bodybody 로 전달, wire 키(snake_case) 그대로

이름타입설명
actionstring
paramsarray<any>
session_idstring
sqlstring

응답 — 200 · OK

이름타입설명
columnsarray<object>
rowsarray<array>

에러 status: 400 401 403 404 500에러 처리

POST /api/v1/tenants/{tenantID}/gateway/sessions

gatewayPostApiV1TenantsByTenantIDGatewaySessions

사용자가 connector 에 대한 active grant 의 preset 을 snapshot 으로 8시간 TTL session 시작.

  • 호출 권한: tenant_member
  • 입력: connector_id · mfa_verified?
  • 부수 효과: gateway_sessions INSERT
언어호출
nodesdk.tenant(tenantId).gateway.sessions.create(…) — 인자·반환 타입은 패키지의 TypeScript 정의 참조
goclient.Gateway().GatewayPostApiV1TenantsByTenantIDGatewaySessions(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayPostApiV1TenantsByTenantIDGatewaySessions(pathParams, query, body) — 비동기: gatewayPostApiV1TenantsByTenantIDGatewaySessionsAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayPostApiV1TenantsByTenantIDGatewaySessions(pathParams, query, body) — suspend
pythonclient.gateway.gateway_post_api_v1_tenants_by_tenant_id_gateway_sessions(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_post_api_v1_tenants_by_tenant_id_gateway_sessions(path_params: …, query: …, body: …)
공통request("gatewayPostApiV1TenantsByTenantIDGatewaySessions", pathParams, query, body)

Path 파라미터pathParams 로 전달

이름타입설명
tenantID 필수string테넌트 UUID

Request Bodybody 로 전달, wire 키(snake_case) 그대로

이름타입설명
connector_idstring
mfa_verifiedboolean

응답 — 201 · Created

이름타입설명
connectorId (wire: connector_id)string
endedAt (wire: ended_at)string
expiresAt (wire: expires_at)string
grantId (wire: grant_id)string
idstring
presetId (wire: preset_id)string
startedAt (wire: started_at)string
subjectId (wire: subject_id)string
tenantId (wire: tenant_id)string

에러 status: 400 401 403 404 500에러 처리

DELETE /api/v1/tenants/{tenantID}/gateway/sessions/{sessionID}

gatewayDeleteApiV1TenantsByTenantIDGatewaySessionsBySessionID

  • 호출 권한: tenant_member (자기 세션만)
언어호출
nodesdk.tenant(tenantId).gateway.sessions.end(…) — 인자·반환 타입은 패키지의 TypeScript 정의 참조
goclient.Gateway().GatewayDeleteApiV1TenantsByTenantIDGatewaySessionsBySessionID(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayDeleteApiV1TenantsByTenantIDGatewaySessionsBySessionID(pathParams, query, body) — 비동기: gatewayDeleteApiV1TenantsByTenantIDGatewaySessionsBySessionIDAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayDeleteApiV1TenantsByTenantIDGatewaySessionsBySessionID(pathParams, query, body) — suspend
pythonclient.gateway.gateway_delete_api_v1_tenants_by_tenant_id_gateway_sessions_by_session_id(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_delete_api_v1_tenants_by_tenant_id_gateway_sessions_by_session_id(path_params: …, query: …, body: …)
공통request("gatewayDeleteApiV1TenantsByTenantIDGatewaySessionsBySessionID", pathParams, query, body)

Path 파라미터pathParams 로 전달

이름타입설명
tenantID 필수string테넌트 UUID
sessionID 필수stringsession UUID

응답 — 204 · No Content

본문 없음 → SDK 는 빈 map {} 반환

에러 status: 400 401 403 404 500에러 처리

GET /api/v1/tenants/{tenantID}/me/connectors

gatewayGetApiV1TenantsByTenantIDMeConnectors

현재 사용자가 active grant 를 가진 connector 들을 반환. 없는 connector 는 노출 0 (FR-018).

  • 호출 권한: tenant_member
언어호출
nodesdk.tenant(tenantId).gateway.me.… — connectors()/connectorResources() (TypeScript 정의 참조)
goclient.Gateway().GatewayGetApiV1TenantsByTenantIDMeConnectors(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayGetApiV1TenantsByTenantIDMeConnectors(pathParams, query, body) — 비동기: gatewayGetApiV1TenantsByTenantIDMeConnectorsAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayGetApiV1TenantsByTenantIDMeConnectors(pathParams, query, body) — suspend
pythonclient.gateway.gateway_get_api_v1_tenants_by_tenant_id_me_connectors(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_get_api_v1_tenants_by_tenant_id_me_connectors(path_params: …, query: …, body: …)
공통request("gatewayGetApiV1TenantsByTenantIDMeConnectors", pathParams, query, body)

Path 파라미터pathParams 로 전달

이름타입설명
tenantID 필수string테넌트 UUID

응답 — 200 · OK

배열 응답 → SDK 는 {"value": [...]} 로 감싸 반환. 원소 필드:

이름타입설명
classificationarray<string>Classification 은 자유 태그.
configobjectConfig 는 engine 별 설정 (credential 제외).
createdAt (wire: created_at)string
descriptionstringDescription 은 admin 메모.
enabledboolean
enginestringEngine 은 postgres / mysql / mssql / oracle / clickhouse / vertica / rest-api + mysql wire-compatible alias (mariadb / tidb / singlestore) + postgres wire-compatible alias (cockroachdb / yugabytedb / redshift / greenplum / spanner) + oracle alias (tibero). alias 는 UI / catalog 식별만 별, driver / discovery 동일. Aurora / Azure 같은 cloud-managed wrapper 는 host 만 다른 같은 product 라 별도 카드 없이 mysql / postgres / mssql 사용.
idstringID 는 connector UUID.
kindstringKind 는 db / api.
lastDiscoveredAt (wire: last_discovered_at)stringLastDiscoveredAt 는 마지막 발견 시각.
namestringName 은 unique connector 이름.
tenantId (wire: tenant_id)stringTenantID 는 소속 tenant UUID.
updatedAt (wire: updated_at)string

에러 status: 401 403 500에러 처리

GET /api/v1/tenants/{tenantID}/me/connectors/{connectorID}/resources

gatewayGetApiV1TenantsByTenantIDMeConnectorsByConnectorIDResources

active grant 없는 connector 는 404 — 메타데이터 자체 노출 0 (FR-018).

  • 호출 권한: tenant_member
언어호출
nodesdk.tenant(tenantId).gateway.me.… — connectors()/connectorResources() (TypeScript 정의 참조)
goclient.Gateway().GatewayGetApiV1TenantsByTenantIDMeConnectorsByConnectorIDResources(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayGetApiV1TenantsByTenantIDMeConnectorsByConnectorIDResources(pathParams, query, body) — 비동기: gatewayGetApiV1TenantsByTenantIDMeConnectorsByConnectorIDResourcesAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayGetApiV1TenantsByTenantIDMeConnectorsByConnectorIDResources(pathParams, query, body) — suspend
pythonclient.gateway.gateway_get_api_v1_tenants_by_tenant_id_me_connectors_by_connector_id_resources(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_get_api_v1_tenants_by_tenant_id_me_connectors_by_connector_id_resources(path_params: …, query: …, body: …)
공통request("gatewayGetApiV1TenantsByTenantIDMeConnectorsByConnectorIDResources", pathParams, query, body)

Path 파라미터pathParams 로 전달

이름타입설명
tenantID 필수string테넌트 UUID
connectorID 필수stringconnector UUID

Query 파라미터query 로 전달 (문자열 값)

이름타입설명
limitinteger페이지 크기 (기본 100, 1~500 clamp)
offsetinteger오프셋 (기본 0)
qstringname 부분일치 필터 (대소문자 무시)
parent_idstring부모 리소스 UUID — 주면 그 직계 자식(컬럼) 전체를 페이징 없이 반환 (limit/offset/q 무시)
roots_onlybooleantrue 면 최상위(테이블/엔드포인트)만 페이징 — 한 테이블의 컬럼이 페이지 경계에 잘리지 않아요

응답 — 200 · OK

페이지 응답 { items: [...], total, next_cursor }next_cursor마지막 페이지에서 생략돼요. items 원소 필드:

이름타입설명
attributesobject
classificationarray<string>
connectorId (wire: connector_id)string
createdAt (wire: created_at)string
idstring
kindstring
namestring
parentId (wire: parent_id)string
pathstring
tenantId (wire: tenant_id)string
updatedAt (wire: updated_at)string

에러 status: 401 403 404 500에러 처리

GET /config/public

configGetConfigPublic

로그인 / 로그아웃 / 만료 토큰 상태와 무관하게 호출 가능한 익명 endpoint. FE 가 부트스트랩 시 1회 호출 후 메모리 캐시. 현재 base_domain 만 반환.

언어호출
nodesdk.config.public(…) — 리소스 모델 — 인자·반환 타입은 패키지의 TypeScript 정의 참조
goclient.Gateway().ConfigGetConfigPublic(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().configGetConfigPublic(pathParams, query, body) — 비동기: configGetConfigPublicAsync(…) → CompletableFuture
kotlinclient.gateway.configGetConfigPublic(pathParams, query, body) — suspend
pythonclient.gateway.config_get_config_public(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.config_get_config_public(path_params: …, query: …, body: …)
공통request("configGetConfigPublic", pathParams, query, body)

응답 — 200 · OK

이름타입설명
baseDomain (wire: base_domain)string

에러 status: 429에러 처리

GET /api/v1/oauth/google/callback

gatewayGetOauthGoogleCallback · 302 → {status, location}

Google 동의 후 redirect 받는 endpoint. code + code_verifier 로 token 교환, Shared Drive 목록을 oauth_state row 에 저장. Accept 헤더 분기:

  • text/html (브라우저): 302 redirect to return_to?state=... (FE 가 이어받음)
  • application/json: 기존 JSON 응답 (자동화 / curl 용)
  • 호출 권한: 인증된 사용자 (state 가 secret 역할 — 10분 TTL).
  • 입력: code · state (query string)
  • 부수 효과: oauth_states row 갱신 (callback_payload 채움)
언어호출
node미제공
goclient.Gateway().GatewayGetOauthGoogleCallback(ctx, axhub.OperationParams{PathParams: …, Query: …, Body: …})
javaclient.gateway().gatewayGetOauthGoogleCallback(pathParams, query, body) — 비동기: gatewayGetOauthGoogleCallbackAsync(…) → CompletableFuture
kotlinclient.gateway.gatewayGetOauthGoogleCallback(pathParams, query, body) — suspend
pythonclient.gateway.gateway_get_oauth_google_callback(path_params=…, query=…, body=…) — AsyncAxHubClient 는 동일명 await
rubyclient.gateway.gateway_get_oauth_google_callback(path_params: …, query: …, body: …)
공통request("gatewayGetOauthGoogleCallback", pathParams, query, body)

Query 파라미터query 로 전달 (문자열 값)

이름타입설명
code 필수stringGoogle authorization code
state 필수stringstart 단계에서 발급된 state
errorstringGoogle 에서 사용자 거부 시 access_denied

응답 — 200 · Shared Drive 목록 (Accept: application/json)

이름타입설명
drivesarray<object>
returnTo (wire: return_to)string
statestring
tenantId (wire: tenant_id)string

302 응답 시 {"status": 302, "location": "..."} 반환 (redirect 미추종)

에러 status: 400 401 500에러 처리