> For the complete documentation index, see [llms.txt](https://docs.decentraland.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.decentraland.org/apis/apis/comms-gatekeeper/communications.md).

# Communications

## Get scene communication adapter

> Generates LiveKit credentials for a user to join a scene's communication room.\
> This endpoint handles authentication, blacklist checking, scene ban verification,\
> and generates appropriate permissions for the user.\
> Requires Signed Fetch authentication from decentraland-kernel-scene.\
> Must include the complete identity header chain: x-identity-auth-chain-0, x-identity-auth-chain-1, x-identity-auth-chain-2, x-identity-timestamp, and x-identity-metadata.<br>

```json
{"openapi":"3.0.0","info":{"title":"Comms Gatekeeper API","version":"1.0.0"},"servers":[{"url":"https://comms-gatekeeper.decentraland.org","description":"Production server"},{"url":"https://comms-gatekeeper.decentraland.zone","description":"Development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"x-identity","description":"Signed Fetch authentication for scene-based requests.\nRequires a chain of identity headers:\n- x-identity-auth-chain-0: Signer information\n- x-identity-auth-chain-1: Ephemeral key information  \n- x-identity-auth-chain-2: Signed entity information\n- x-identity-timestamp: Request timestamp\n- x-identity-metadata: Request metadata\nUsed for authentication from decentraland-kernel-scene.\n"}}},"paths":{"/get-scene-adapter":{"post":{"operationId":"getSceneAdapter","summary":"Get scene communication adapter","description":"Generates LiveKit credentials for a user to join a scene's communication room.\nThis endpoint handles authentication, blacklist checking, scene ban verification,\nand generates appropriate permissions for the user.\nRequires Signed Fetch authentication from decentraland-kernel-scene.\nMust include the complete identity header chain: x-identity-auth-chain-0, x-identity-auth-chain-1, x-identity-auth-chain-2, x-identity-timestamp, and x-identity-metadata.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Signed fetch request with scene and user information"}}}},"responses":{"200":{"description":"Scene adapter generated successfully","content":{"application/json":{"schema":{"type":"object","required":["adapter"],"properties":{"adapter":{"type":"string","description":"LiveKit connection URL for the scene"}}}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Error message describing what went wrong"}}}}}},"401":{"description":"Unauthorized - Invalid authentication or blacklisted user","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Error message describing what went wrong"}}}}}},"403":{"description":"Forbidden - User is banned from this scene","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Error message describing what went wrong"}}}}}},"404":{"description":"Not found - Realm or scene not found","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Error message describing what went wrong"}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Error message describing what went wrong"}}}}}}},"tags":["Communications"]}}}}
```

## Get scene participants

> Retrieves the list of participant wallet addresses connected to a scene or world room.\
> \
> \*\*Query Parameters:\*\*\
> \- \`pointer\` + \`realm\_name\`: For scene rooms (pointer is the base parcel, e.g., "-7,-2"). The scene ID is resolved from the catalyst. realm\_name defaults to "main".\
> \- \`realm\_name\` alone: Treated as a world name (e.g., "mycoolworld.dcl.eth")\
> \
> \*\*Response:\*\*\
> Returns an array of wallet addresses (lowercase, 42 characters) of users currently connected to the room. Returns an empty array if the room doesn't exist or has no participants.<br>

```json
{"openapi":"3.0.0","info":{"title":"Comms Gatekeeper API","version":"1.0.0"},"servers":[{"url":"https://comms-gatekeeper.decentraland.org","description":"Production server"},{"url":"https://comms-gatekeeper.decentraland.zone","description":"Development server"}],"security":[],"paths":{"/scene-participants":{"get":{"operationId":"getSceneParticipants","summary":"Get scene participants","description":"Retrieves the list of participant wallet addresses connected to a scene or world room.\n\n**Query Parameters:**\n- `pointer` + `realm_name`: For scene rooms (pointer is the base parcel, e.g., \"-7,-2\"). The scene ID is resolved from the catalyst. realm_name defaults to \"main\".\n- `realm_name` alone: Treated as a world name (e.g., \"mycoolworld.dcl.eth\")\n\n**Response:**\nReturns an array of wallet addresses (lowercase, 42 characters) of users currently connected to the room. Returns an empty array if the room doesn't exist or has no participants.\n","parameters":[{"name":"pointer","in":"query","description":"Scene base parcel (e.g., \"-7,-2\"). The scene ID is resolved from the catalyst using this pointer.\nWhen provided, realm_name defaults to \"main\" if not specified.\n","required":false,"schema":{"type":"string","pattern":"^-?\\d{1,3},-?\\d{1,3}$"}},{"name":"realm_name","in":"query","description":"When used with pointer: identifies the realm for scene rooms (default: \"main\").\nWhen used alone (without pointer): treated as a world name (must end with .dcl.eth).\n","required":false,"schema":{"type":"string"}}],"responses":{"200":{"description":"Room participants retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{"type":"object","properties":{"addresses":{"type":"array","items":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"description":"List of participant wallet addresses (lowercase)"}}}}}}}},"400":{"description":"Invalid request - must provide either world_name or (pointer + realm_name)","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Error message describing what went wrong"}}}}}},"404":{"description":"No scene found for the provided pointer","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Error message describing what went wrong"}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string","description":"Error message describing what went wrong"}}}}}}},"tags":["Communications"]}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.decentraland.org/apis/apis/comms-gatekeeper/communications.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
