Download OpenAPI specification:Download
해당 문서의 모든 API 호출은 ApiKey
를 필요로 합니다.
ApiKey
는 XRCLOUD 페이지에 로그인 한 후 페이지 우상단의 My page에서 발급 받을 수 있습니다.XRCLOUD는 Room과 Scene의 이벤트 발생 시 설정된 webhook URL로 로그를 전송합니다.
Room 관련 이벤트
Scene 관련 이벤트
Webhook 요청 정보
요청 데이터 형식
{
"code": "room-join", // 이벤트 코드
"resourceId": "uuid", // Room/Scene의 ID
"sessionId": "uuid", // 세션 ID
"reticulumId": "string", // XRCLOUD(Hubs)의 사용자 ID
"logTime": "2024-01-01T00:00:00Z", // 이벤트 발생 시간
"action": "string", // 이벤트 액션 정보 (예: "enter", "exit")
"ip": "string", // 사용자 IP (X-Forwarded-For 헤더에서 추출)
"userAgent": "string", // 사용자 브라우저 정보
"device": "string" // 사용자 디바이스 정보 (pc/mobile/vr)
}```
**참고**:
- webhook URL은 Project 생성 시 또는 Project 정보 수정 시 설정할 수 있습니다.
- 현재 ip와 userAgent 값은 제대로 전송되지 않을 수 있습니다.
- webhook 요청에 대한 응답이 300 이상의 상태 코드를 반환하면 오류로 처리됩니다.
XRCLOUD의 Project는 개발자의 프로젝트, 플랫폼, 또는 3rd-party 애플리케이션이 될 수 있습니다. 이는 Scene과 Room을 관리하는 단위로, 여러 Scene과 Room이 특정 Project에 속하게 됩니다.
webhookUrl
은 XRCLOUD 페이지에서 Project를 생성하거나 정보를 수정할 때 설정할 수 있습니다.라벨로 필터링하여 프로젝트를 가져옵니다. label
쿼리 파라미터를 사용하여 특정 라벨의 프로젝트를 필터링할 수 있습니다.
label | string 필터링할 프로젝트의 라벨입니다. 제공되지 않으면 모든 프로젝트가 반환됩니다. |
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
[- {
- "id": "f24ee5ba-8f1f-4f7a-86ed-738f95ea1f8b",
- "name": "example project name",
- "createdAt": "2023-07-12T09:27:41.600Z",
- "updatedAt": "2023-07-12T09:27:41.600Z",
}
]
다음과 같은 형식으로 프로젝트를 생성할 수 있습니다:
RES=$(curl -s -X POST "$XRCLOUD_HOST/api/projects" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: multipart/form-data" \
-F "favicon=@$FILE_DIR/favicon.ico" \
-F "logo=@$FILE_DIR/logo.png" \
-F "name=lms" \
-F "label=lms"
)
이 API는 multipart/form-data
형식으로 프로젝트의 파비콘, 로고, 이름, 라벨을 포함하여 프로젝트를 생성합니다.
favicon | string <binary> 프로젝트의 파비콘 파일. |
logo | string <binary> 프로젝트의 로고 파일. |
name | string 프로젝트의 이름. |
label | string 프로젝트의 라벨. |
{- "id": "f24ee5ba-8f1f-4f7a-86ed-738f95ea1f8b",
- "name": "example project name",
- "createdAt": "2023-07-12T09:27:41.600Z",
- "updatedAt": "2023-07-12T09:27:41.600Z",
}
사용자 서비스의 사용자ID를 전달하여 XRCLOUD에 사용자ID(reticulumId)를 생성하고 가져옵니다. 다른 Api에서 userId를 사용할 때 이 Api에 보낸 userId를 통해 플랫폼에 고유 사용자의 행위임을 전달합니다. logging 정보는 XRCLOUD의 사용자 ID인 reticulumId로 전달 됩니다.
projectId required | string 프로젝트의 고유 ID. |
accountId required | string 사용자의 계정 ID. |
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
{ }
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
{- "id": "f24ee5ba-8f1f-4f7a-86ed-738f95ea1f8b",
- "name": "example project name",
- "createdAt": "2023-07-12T09:27:41.600Z",
- "updatedAt": "2023-07-12T09:27:41.600Z",
}
웹페이지 기반의 3D 가상공간을 제작하는 공간으로 Room을 생성할 때 필요한 공간입니다.
get-creation-url api를 호출하면 얻을 수 있는 필드 중 'sceneCreationUrl'에 접속하여 에디터(Spoke)에 접근한 후 우상단의 Publish Scene 버튼을 통해 Scene을 생성할 수 있습니다. 또, get-scene api를 호출하면 얻을 수 있는 필드 중 'sceneModificationUrl'에 접근하여 수정합니다.
optId
값은 XRCLOUD에서 Scene의 생성 및 수정을 확인하기위한 callback value 입니다. 변형하여 사용하면 오류가 발생할 수 있습니다.projectId required | uuid Project의 고유 ID. |
name | string (search) 해당 이름을 가진 Object 조회. |
creator | string (search) 특정 제작자의 Object 조회. |
take | number (pagination) 가져올 데이터의 갯수. |
skip | number (pagination) 건너뛸 데이터의 갯수. |
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
{- "items": [
- {
- "id": "f24ee5ba-8f1f-4f7a-86ed-738f95ea1f8b",
- "name": "example scene name",
- "createdAt": "2023-07-12T09:27:41.600Z",
- "updatedAt": "2023-07-12T09:27:41.600Z",
- "sceneModificationUrl": "https://room.xrcloud.app:4000/spoke/projects/ASJCJK1?optId=35e75895-9db7-4eee-bae3-87e20ee156dc"
}
], - "total": 0,
- "skip": 0,
- "take": 0
}
projectId required | uuid Project의 고유 ID. |
creator | string Scene의 제작자를 지정할 수 있습니다. 사용자별 'My Assets'를 구분하는 데에 쓰이며 해당 파라미터를 포함하지 않고 호출하여 제작하는 경우 'Admin'이 제작한 것과 동일하게 취급됩니다. |
callback | string Example: callback=https://api.xrcloud.app/rooms Scene 제작 직후에 특정 동작이 필요한 경우(해당 Scene으로 곧장 Room을 제작하는 경우 등) 포함하여 호출합니다. XRCloud 측에서의 호출은 아래와 같이 이루어집니다. { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ sceneId }) } |
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
{
}
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
{- "id": "f24ee5ba-8f1f-4f7a-86ed-738f95ea1f8b",
- "name": "example scene name",
- "createdAt": "2023-07-12T09:27:41.600Z",
- "updatedAt": "2023-07-12T09:27:41.600Z",
- "sceneModificationUrl": "https://room.xrcloud.app:4000/spoke/projects/ASJCJK1?optId=35e75895-9db7-4eee-bae3-87e20ee156dc"
}
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
{- "statusCode": 400,
- "method": "Method",
- "url": "/example/endpoint",
- "body": {
- "key": "value"
}, - "message": "Detailed error messages"
}
Room은 에디터(Spoke)를 통해 생성된 Scene으로 구성된 공간입니다.
각 Room에는 정보 요청 시마다 주소가 변하는 private room URL과 고정된 주소를 가진 public room URL이 있습니다. 이 URL들은 또한 방의 호스트에게 권한을 부여하는 host URL과 게스트 권한을 부여하는 guest URL로 구분됩니다.
'returnUrl'은 방을 떠날 때 돌아갈 웹 주소를 의미하며, XRCloud의 Rooms 탭에서 설정할 수 있습니다.
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
projectId required | uuid Project의 고유 ID. |
sceneId required | uuid Scene의 고유 ID. |
name required | string Room의 이름. |
returnUrl required | string Room 퇴장 시 돌아갈 URL. |
size | number Room에 입장할 수 있는 최대 인원 수. |
{- "projectId": "f24ee5ba-8f1f-4f7a-86ed-738f95ea1f8b",
- "sceneId": "1234e5ba-5678-4f7a-86ed-abcd95ea1efg",
- "name": "example room name",
- "size": 10
}
{- "id": "f24ee5ba-8f1f-4f7a-86ed-738f95ea1f8b",
- "name": "example room name",
- "size": 10,
- "tags": [ ],
- "sceneId": "c322b49b-6e12-47d9-b293-b5ab3727459c",
- "createdAt": "2023-07-12T09:27:41.600Z",
- "updatedAt": "2023-07-12T09:27:41.600Z",
- "roomUrl": {
},
}
해당 API는 projectId 또는 sceneId 중 하나를 필수적으로 포함하여 호출해야 합니다.
projectId | uuid Project의 고유 ID. |
sceneId | uuid Scene의 고유 ID. |
name | string (search) 해당 이름을 가진 Object 조회. |
userId | string Project(app)의 사용자. Room에 입장하는 사용자를 구분하기 위해 사용됩니다. |
avatarUrl | string Example: avatarUrl=https://storage.com/bucket/avatar-file.glb Room에서 사용할 아바타 파일의 경로. |
linkPayload | string Example: linkPayload=userName:Tom|UserGrade:10 Scene의 element인 'InlineView'에 전달할 값으로 InlineView에서 호출되는 URL에 hubsParam이라는 파라미터에 담겨 전달됩니다. |
take | number (pagination) 가져올 데이터의 갯수. |
skip | number (pagination) 건너뛸 데이터의 갯수. |
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
{- "items": [
- {
- "id": "f24ee5ba-8f1f-4f7a-86ed-738f95ea1f8b",
- "name": "example room name",
- "size": 10,
- "tags": [ ],
- "sceneId": "c322b49b-6e12-47d9-b293-b5ab3727459c",
- "createdAt": "2023-07-12T09:27:41.600Z",
- "updatedAt": "2023-07-12T09:27:41.600Z",
- "roomUrl": {
},
}
], - "total": 0,
- "skip": 0,
- "take": 0
}
userId | string Project(app)의 사용자. Room에 입장하는 사용자를 구분하기 위해 사용됩니다. |
avatarUrl | string Example: avatarUrl=https://storage.com/bucket/avatar-file.glb Room에서 사용할 아바타 파일의 경로. |
linkPayload | string Example: linkPayload=userName:Tom|UserGrade:10 Scene의 element인 'InlineView'에 전달할 값으로 InlineView에서 호출되는 URL에 hubsParam이라는 파라미터에 담겨 전달됩니다. |
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
{- "id": "f24ee5ba-8f1f-4f7a-86ed-738f95ea1f8b",
- "name": "example room name",
- "size": 10,
- "tags": [ ],
- "sceneId": "c322b49b-6e12-47d9-b293-b5ab3727459c",
- "createdAt": "2023-07-12T09:27:41.600Z",
- "updatedAt": "2023-07-12T09:27:41.600Z",
- "roomUrl": {
},
}
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
name | string Room의 이름. |
size | number Room에 입장할 수 있는 최대 인원 수. |
returnUrl | string Room 퇴장 시 돌아갈 URL. |
{- "name": "example room name",
- "size": 10,
}
{- "id": "f24ee5ba-8f1f-4f7a-86ed-738f95ea1f8b",
- "name": "example room name",
- "size": 10,
- "tags": [ ],
- "sceneId": "c322b49b-6e12-47d9-b293-b5ab3727459c",
- "createdAt": "2023-07-12T09:27:41.600Z",
- "updatedAt": "2023-07-12T09:27:41.600Z",
- "roomUrl": {
},
}
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
{- "statusCode": 400,
- "method": "Method",
- "url": "/example/endpoint",
- "body": {
- "key": "value"
}, - "message": "Detailed error messages"
}
특정 방에 대한 사용자의 참여 로그를 가져옵니다. 이 로그는 사용자가 방에 참여한 시간, IP 주소, 장치 정보 등을 포함합니다.(2024-12-01 현재 ip주소와 userAgent는 제대로 전송되고 있지 않습니다.)
X-XRCLOUD-API-KEY required | string 헤더에 다음과 같은 형태로 인증 키를 포함시켜야합니다. |
[- {
- "code": "room-join",
- "resourceId": "cfdd7716-4ed0-4db2-b7d6-93dc0ff72c2a",
- "sessionId": "6dfbc23a-4193-4979-adde-e984f40fd80a",
- "reticulumId": "1900346259722469400",
- "logTime": "2024-11-29T08:54:27.000Z",
- "action": "hubs join",
- "ip": "0.0.0.0",
- "userAgent": "",
- "device": "unknown/pc",
- "id": 17
}
]