# Content Server

API endpoints for Decentraland Worlds Content Server

## /world/{world\_name}/about

> Returns detailed information about a deployed world including scene configuration, comms adapter, and status

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/about":{"get":{"tags":["Content Server"],"summary":"/world/{world_name}/about","description":"Returns detailed information about a deployed world including scene configuration, comms adapter, and status","operationId":"worldsContentServer_getWorldAbout","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world (e.g., my-name.dcl.eth)","schema":{"type":"string"}}],"responses":{"200":{"description":"World information retrieved successfully","content":{"application/json":{"schema":{"type":"object","description":"Detailed information about a world","properties":{"healthy":{"type":"boolean","description":"Overall health status"},"acceptingUsers":{"type":"boolean","description":"Whether the world is accepting new users"},"configurations":{"type":"object","properties":{"networkId":{"type":"integer","description":"Ethereum network chain ID"},"globalScenesUrn":{"type":"array","items":{"type":"string"},"description":"URNs of global scenes"},"scenesUrn":{"type":"array","items":{"type":"string"},"description":"URNs of world scenes"},"realmName":{"type":"string","description":"Display name of the realm"},"minimap":{"type":"object","properties":{"enabled":{"type":"boolean"},"dataImage":{"type":"string"},"estateImage":{"type":"string"}}},"map":{"type":"object","properties":{"minimapEnabled":{"type":"boolean"},"sizes":{"type":"array","items":{"type":"array","items":{"type":"integer"}}}}},"skybox":{"type":"object","properties":{"fixedHour":{"type":"number","nullable":true},"textures":{"type":"array","items":{"type":"string"}}}}}},"content":{"type":"object","properties":{"synchronizationStatus":{"type":"string"},"healthy":{"type":"boolean"},"publicUrl":{"type":"string"}}},"lambdas":{"type":"object","properties":{"healthy":{"type":"boolean"},"publicUrl":{"type":"string"}}},"comms":{"type":"object","properties":{"healthy":{"type":"boolean"},"protocol":{"type":"string"},"adapter":{"type":"string"}}}}}}}},"404":{"description":"World not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## GET /world/{world\_name}/scenes

> Browse scenes in a world. Use query params for filtering and pagination.\
> \- \*\*Query (x1, x2, y1, y2)\*\*: Bounding box. When provided, all four must be set.\
> \- \*\*Query (limit, offset)\*\*: Pagination (defaults: limit 100, offset 0).<br>

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/scenes":{"get":{"tags":["Content Server"],"summary":"GET /world/{world_name}/scenes","description":"Browse scenes in a world. Use query params for filtering and pagination.\n- **Query (x1, x2, y1, y2)**: Bounding box. When provided, all four must be set.\n- **Query (limit, offset)**: Pagination (defaults: limit 100, offset 0).\n","operationId":"worldsContentServer_getWorldScenes","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world","schema":{"type":"string"}},{"name":"x1","in":"query","required":false,"schema":{"type":"integer"},"description":"Bounding box min x (required with x2, y1, y2)"},{"name":"x2","in":"query","required":false,"schema":{"type":"integer"},"description":"Bounding box max x (required with x1, y1, y2)"},{"name":"y1","in":"query","required":false,"schema":{"type":"integer"},"description":"Bounding box min y (required with x1, x2, y2)"},{"name":"y2","in":"query","required":false,"schema":{"type":"integer"},"description":"Bounding box max y (required with x1, x2, y1)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"Max number of scenes to return (default 100)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"Number of scenes to skip (default 0)"},{"name":"authorized_deployer","in":"query","required":false,"schema":{"type":"string"},"description":"Ethereum address to filter scenes by deployment capabilities.\nReturns scenes from worlds where the specified address is either the owner\nor has been granted deployment permission.\n"}],"responses":{"200":{"description":"Scenes and total count","content":{"application/json":{"schema":{"type":"object","properties":{"scenes":{"type":"array","items":{"type":"object","properties":{"worldName":{"type":"string"},"entityId":{"type":"string"},"deployer":{"type":"string"},"deploymentAuthChain":{"type":"array"},"entity":{"type":"object","description":"Scene entity metadata","properties":{"id":{"type":"string","description":"Entity ID (IPFS hash)"},"type":{"type":"string","description":"Entity type (e.g., 'scene')"},"timestamp":{"type":"number","description":"Unix timestamp in milliseconds"},"pointers":{"type":"array","items":{"type":"string"},"description":"Pointers (coordinates or names)"},"content":{"type":"array","items":{"type":"object","properties":{"file":{"type":"string"},"hash":{"type":"string"}}}},"metadata":{"type":"object","description":"Scene metadata"}}},"parcels":{"type":"array","items":{"type":"string"}},"size":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}}},"total":{"type":"integer"}}}}}},"400":{"description":"Invalid request (e.g. partial bounding box)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## POST /world/{world\_name}/scenes

> Query scenes with optional coordinate filter in the body. Body is validated; same query params as GET.\
> \- \*\*Body (coordinates)\*\*: Required key; array can be empty. When non-empty, return only scenes that contain any of these parcel coordinates (e.g. "0,0", "-1,2").\
> \- \*\*Query (x1, x2, y1, y2)\*\*: Bounding box. When provided, all four must be set.\
> \- \*\*Query (limit, offset)\*\*: Pagination (defaults: limit 100, offset 0).<br>

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/scenes":{"post":{"tags":["Content Server"],"summary":"POST /world/{world_name}/scenes","description":"Query scenes with optional coordinate filter in the body. Body is validated; same query params as GET.\n- **Body (coordinates)**: Required key; array can be empty. When non-empty, return only scenes that contain any of these parcel coordinates (e.g. \"0,0\", \"-1,2\").\n- **Query (x1, x2, y1, y2)**: Bounding box. When provided, all four must be set.\n- **Query (limit, offset)**: Pagination (defaults: limit 100, offset 0).\n","operationId":"worldsContentServer_postWorldScenes","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world","schema":{"type":"string"}},{"name":"x1","in":"query","required":false,"schema":{"type":"integer"},"description":"Bounding box min x (required with x2, y1, y2)"},{"name":"x2","in":"query","required":false,"schema":{"type":"integer"},"description":"Bounding box max x (required with x1, y1, y2)"},{"name":"y1","in":"query","required":false,"schema":{"type":"integer"},"description":"Bounding box min y (required with x1, x2, y2)"},{"name":"y2","in":"query","required":false,"schema":{"type":"integer"},"description":"Bounding box max y (required with x1, x2, y1)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"Max number of scenes to return (default 100)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0},"description":"Number of scenes to skip (default 0)"},{"name":"authorized_deployer","in":"query","required":false,"schema":{"type":"string"},"description":"Ethereum address to filter scenes by deployment capabilities.\nReturns scenes from worlds where the specified address is either the owner\nor has been granted deployment permission.\n"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Body for POST /world/{world_name}/scenes.","properties":{"coordinates":{"type":"array","items":{"type":"string","pattern":"^-?\\d+,-?\\d+$","description":"Parcel coordinate (e.g. \"0,0\", \"-1,2\")"},"description":"Return only scenes that contain any of these coordinates"}},"required":["coordinates"],"additionalProperties":false}}}},"responses":{"200":{"description":"Scenes and total count","content":{"application/json":{"schema":{"type":"object","properties":{"scenes":{"type":"array","items":{"type":"object","properties":{"worldName":{"type":"string"},"entityId":{"type":"string"},"deployer":{"type":"string"},"deploymentAuthChain":{"type":"array"},"entity":{"type":"object","description":"Scene entity metadata","properties":{"id":{"type":"string","description":"Entity ID (IPFS hash)"},"type":{"type":"string","description":"Entity type (e.g., 'scene')"},"timestamp":{"type":"number","description":"Unix timestamp in milliseconds"},"pointers":{"type":"array","items":{"type":"string"},"description":"Pointers (coordinates or names)"},"content":{"type":"array","items":{"type":"object","properties":{"file":{"type":"string"},"hash":{"type":"string"}}}},"metadata":{"type":"object","description":"Scene metadata"}}},"parcels":{"type":"array","items":{"type":"string"}},"size":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}}},"total":{"type":"integer"}}}}}},"400":{"description":"Invalid request (e.g. invalid coordinate format, partial bounding box)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## DELETE /world/{world\_name}/scenes/{coordinate}

> Undeploy a single scene at the given parcel coordinate. Requires signed fetch and world ownership (or world-wide deployment permission).

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/scenes/{coordinate}":{"delete":{"tags":["Content Server"],"summary":"DELETE /world/{world_name}/scenes/{coordinate}","description":"Undeploy a single scene at the given parcel coordinate. Requires signed fetch and world ownership (or world-wide deployment permission).","operationId":"worldsContentServer_undeployScene","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world","schema":{"type":"string"}},{"name":"coordinate","in":"path","required":true,"description":"Parcel coordinate (e.g. 0,0 or -1,2)","schema":{"type":"string","pattern":"^-?\\d+,-?\\d+$"}}],"responses":{"200":{"description":"Scene undeployed successfully"},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"404":{"description":"World or scene not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /entities

> Deploy a new scene to a world. The deployment must include entity metadata and all content files.\
> Requires authentication via auth chain.<br>

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/entities":{"post":{"tags":["Content Server"],"summary":"/entities","description":"Deploy a new scene to a world. The deployment must include entity metadata and all content files.\nRequires authentication via auth chain.\n","operationId":"worldsContentServer_deployEntity","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["entityId"],"properties":{"entityId":{"type":"string","description":"The entity ID (IPFS hash)"}},"additionalProperties":{"type":"string","format":"binary","description":"Content files referenced by the entity"}}}}},"responses":{"200":{"description":"Entity deployed successfully","content":{"application/json":{"schema":{"type":"object","properties":{"creationTimestamp":{"type":"number","description":"Unix timestamp in milliseconds"},"message":{"type":"string","description":"Deployment confirmation message"}}}}}},"400":{"description":"Invalid request or deployment failed validation","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /entities/{world\_name}

> Remove a deployed scene from a world. Requires signed fetch authentication.

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/entities/{world_name}":{"delete":{"tags":["Content Server"],"summary":"/entities/{world_name}","description":"Remove a deployed scene from a world. Requires signed fetch authentication.","operationId":"worldsContentServer_undeployEntity","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world to undeploy","schema":{"type":"string"}}],"responses":{"200":{"description":"Entity undeployed successfully"},"401":{"description":"Unauthorized - invalid signature","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"404":{"description":"World not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /entities/active

> Retrieve information about active entities based on provided pointers

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/entities/active":{"post":{"tags":["Content Server"],"summary":"/entities/active","description":"Retrieve information about active entities based on provided pointers","operationId":"worldsContentServer_getActiveEntities","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"pointers":{"type":"array","items":{"type":"string"},"description":"List of pointers to query"}}}}}},"responses":{"200":{"description":"Active entities retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"Scene entity metadata","properties":{"id":{"type":"string","description":"Entity ID (IPFS hash)"},"type":{"type":"string","description":"Entity type (e.g., 'scene')"},"timestamp":{"type":"number","description":"Unix timestamp in milliseconds"},"pointers":{"type":"array","items":{"type":"string"},"description":"Pointers (coordinates or names)"},"content":{"type":"array","items":{"type":"object","properties":{"file":{"type":"string"},"hash":{"type":"string"}}}},"metadata":{"type":"object","description":"Scene metadata"}}}}}}}}}}}}
```

## /available-content

> Retrieve list of available content hashes

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/available-content":{"get":{"tags":["Content Server"],"summary":"/available-content","description":"Retrieve list of available content hashes","operationId":"worldsContentServer_getAvailableContent","responses":{"200":{"description":"Available content retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"cid":{"type":"array","items":{"type":"string"}}}}}}}}}}}}
```

## /ipfs/{hashId}

> Retrieve a content file by its IPFS hash

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/ipfs/{hashId}":{"get":{"tags":["Content Server"],"summary":"/ipfs/{hashId}","description":"Retrieve a content file by its IPFS hash","operationId":"worldsContentServer_getContentFileIpfs","parameters":[{"name":"hashId","in":"path","required":true,"description":"IPFS hash of the content file","schema":{"type":"string"}}],"responses":{"200":{"description":"Content file retrieved successfully","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Content not found"}}}}}}
```

## /ipfs/{hashId}

> Check if a content file exists without retrieving it

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/ipfs/{hashId}":{"head":{"tags":["Content Server"],"summary":"/ipfs/{hashId}","description":"Check if a content file exists without retrieving it","operationId":"worldsContentServer_headContentFileIpfs","parameters":[{"name":"hashId","in":"path","required":true,"description":"IPFS hash of the content file","schema":{"type":"string"}}],"responses":{"200":{"description":"Content exists"},"404":{"description":"Content not found"}}}}}}
```

## /contents/{hashId}

> Retrieve a content file by its hash

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/contents/{hashId}":{"get":{"tags":["Content Server"],"summary":"/contents/{hashId}","description":"Retrieve a content file by its hash","operationId":"worldsContentServer_getContentFile","parameters":[{"name":"hashId","in":"path","required":true,"description":"Hash of the content file","schema":{"type":"string"}}],"responses":{"200":{"description":"Content file retrieved successfully","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Content not found"}}}}}}
```

## /contents/{hashId}

> Check if a content file exists without retrieving it

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/contents/{hashId}":{"head":{"tags":["Content Server"],"summary":"/contents/{hashId}","description":"Check if a content file exists without retrieving it","operationId":"worldsContentServer_headContentFile","parameters":[{"name":"hashId","in":"path","required":true,"description":"Hash of the content file","schema":{"type":"string"}}],"responses":{"200":{"description":"Content exists"},"404":{"description":"Content not found"}}}}}}
```

## /world/{world\_name}/permissions

> Retrieve the permissions configuration for a world

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/permissions":{"get":{"tags":["Content Server"],"summary":"/world/{world_name}/permissions","description":"Retrieve the permissions configuration for a world","operationId":"worldsContentServer_getPermissions","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world","schema":{"type":"string"}}],"responses":{"200":{"description":"Permissions retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"permissions":{"type":"object","description":"World permissions configuration","properties":{"deployment":{"type":"object","properties":{"type":{"type":"string","enum":["allow-list"]},"wallets":{"type":"array","items":{"type":"string"},"description":"List of Ethereum addresses"},"communities":{"type":"array","items":{"type":"string"},"description":"List of community IDs. Users who are members of any of these communities will have access. Maximum 50 communities allowed.","maxItems":50}},"required":["type","wallets"]},"access":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["unrestricted"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["allow-list"]},"wallets":{"type":"array","items":{"type":"string"},"description":"List of Ethereum addresses"},"communities":{"type":"array","items":{"type":"string"},"description":"List of community IDs. Users who are members of any of these communities will have access. Maximum 50 communities allowed.","maxItems":50}},"required":["type","wallets"]},{"type":"object","properties":{"type":{"type":"string","enum":["shared-secret"]},"secret":{"type":"string","description":"Hashed secret (only set on creation, not returned in GET)"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["nft-ownership"]},"nft":{"type":"string","description":"NFT contract address and token ID"}},"required":["type","nft"]}]},"streaming":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["unrestricted"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["allow-list"]},"wallets":{"type":"array","items":{"type":"string"},"description":"List of Ethereum addresses"},"communities":{"type":"array","items":{"type":"string"},"description":"List of community IDs. Users who are members of any of these communities will have access. Maximum 50 communities allowed.","maxItems":50}},"required":["type","wallets"]}]}}},"owner":{"type":"string","description":"Ethereum address of the world owner"},"summary":{"type":"object","description":"Per-address permission summary (address -> list of { permission, world_wide, parcel_count? })","additionalProperties":{"type":"array","items":{"type":"object","properties":{"permission":{"type":"string"},"world_wide":{"type":"boolean"},"parcel_count":{"type":"integer"}}}}}}}}}}}}}}}
```

## /world/{world\_name}/permissions/{permission\_name}

> Set the permission type for a specific permission (deployment, access, or streaming).\
> Requires signed fetch and world ownership.\
> \
> \*\*Auth chain metadata (not HTTP body):\*\* The permission configuration is \*\*not\*\* sent as a POST body.\
> It is sent as \*\*signed request metadata\*\* (auth chain) per Signed Fetch (ADR-44). The client signs\
> a payload whose structure matches the schema below; the server reads that payload from the auth\
> chain, not from the request body. Do not send a body for this request—use the schema only as\
> the expected format of the \*\*auth chain metadata\*\*.<br>

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/permissions/{permission_name}":{"post":{"tags":["Content Server"],"summary":"/world/{world_name}/permissions/{permission_name}","description":"Set the permission type for a specific permission (deployment, access, or streaming).\nRequires signed fetch and world ownership.\n\n**Auth chain metadata (not HTTP body):** The permission configuration is **not** sent as a POST body.\nIt is sent as **signed request metadata** (auth chain) per Signed Fetch (ADR-44). The client signs\na payload whose structure matches the schema below; the server reads that payload from the auth\nchain, not from the request body. Do not send a body for this request—use the schema only as\nthe expected format of the **auth chain metadata**.\n","operationId":"worldsContentServer_postPermission","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world","schema":{"type":"string"}},{"name":"permission_name","in":"path","required":true,"description":"The permission to configure","schema":{"type":"string","enum":["deployment","access","streaming"]}}],"requestBody":{"required":false,"description":"**Not sent as HTTP body.** This schema describes the **auth chain metadata** format (the signed\npayload in Signed Fetch / ADR-44). Clients must include a payload with this structure in the\nsigned request metadata; the server does not read or expect an HTTP body for this operation.\n","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"type":{"type":"string","enum":["unrestricted"]}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["allow-list"]},"wallets":{"type":"array","items":{"type":"string"},"description":"List of Ethereum addresses"},"communities":{"type":"array","items":{"type":"string"},"description":"List of community IDs. Users who are members of any of these communities will have access. Maximum 50 communities allowed.","maxItems":50}},"required":["type","wallets"]},{"type":"object","properties":{"type":{"type":"string","enum":["shared-secret"]},"secret":{"type":"string","description":"Hashed secret (only set on creation, not returned in GET)"}},"required":["type"]},{"type":"object","properties":{"type":{"type":"string","enum":["nft-ownership"]},"nft":{"type":"string","description":"NFT contract address and token ID"}},"required":["type","nft"]}]}}}},"responses":{"204":{"description":"Permission configured successfully"},"400":{"description":"Invalid permission configuration","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## Add community to access allow-list

> Add a single community to the world's access allow-list. The world must have allow-list access type.\
> The signer must be a member of the community being added (validated via social service).<br>

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/permissions/access/communities/{communityId}":{"put":{"tags":["Content Server"],"summary":"Add community to access allow-list","description":"Add a single community to the world's access allow-list. The world must have allow-list access type.\nThe signer must be a member of the community being added (validated via social service).\n","operationId":"worldsContentServer_putAccessCommunity","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world","schema":{"type":"string"}},{"name":"communityId","in":"path","required":true,"description":"Community ID to add to the allow-list","schema":{"type":"string"}}],"responses":{"204":{"description":"Community added successfully"},"400":{"description":"Invalid request, world not allow-list, signer not a member of the community, or allow-list limit exceeded","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## Remove community from access allow-list

> Remove a single community from the world's access allow-list. The world must have allow-list access type.

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/permissions/access/communities/{communityId}":{"delete":{"tags":["Content Server"],"summary":"Remove community from access allow-list","description":"Remove a single community from the world's access allow-list. The world must have allow-list access type.","operationId":"worldsContentServer_deleteAccessCommunity","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world","schema":{"type":"string"}},{"name":"communityId","in":"path","required":true,"description":"Community ID to remove from the allow-list","schema":{"type":"string"}}],"responses":{"204":{"description":"Community removed successfully"},"400":{"description":"Invalid request or world not configured as allow-list","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /world/{world\_name}/permissions/{permission\_name}/{address}

> Add an Ethereum address to the allow list for a specific permission. Requires signed fetch and world ownership.

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/permissions/{permission_name}/{address}":{"put":{"tags":["Content Server"],"summary":"/world/{world_name}/permissions/{permission_name}/{address}","description":"Add an Ethereum address to the allow list for a specific permission. Requires signed fetch and world ownership.","operationId":"worldsContentServer_putPermissionAddress","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world","schema":{"type":"string"}},{"name":"permission_name","in":"path","required":true,"description":"The permission to modify","schema":{"type":"string","enum":["deployment","access","streaming"]}},{"name":"address","in":"path","required":true,"description":"Ethereum address to add","schema":{"type":"string"}}],"responses":{"204":{"description":"Address added successfully"},"400":{"description":"Invalid request or permission not configured as allow-list","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /world/{world\_name}/permissions/{permission\_name}/{address}

> Remove an Ethereum address from the allow list for a specific permission. Requires signed fetch and world ownership.

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/permissions/{permission_name}/{address}":{"delete":{"tags":["Content Server"],"summary":"/world/{world_name}/permissions/{permission_name}/{address}","description":"Remove an Ethereum address from the allow list for a specific permission. Requires signed fetch and world ownership.","operationId":"worldsContentServer_deletePermissionAddress","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world","schema":{"type":"string"}},{"name":"permission_name","in":"path","required":true,"description":"The permission to modify","schema":{"type":"string","enum":["deployment","access","streaming"]}},{"name":"address","in":"path","required":true,"description":"Ethereum address to remove","schema":{"type":"string"}}],"responses":{"204":{"description":"Address removed successfully"},"400":{"description":"Invalid request or address not in allow list","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## GET /world/{world\_name}/permissions/{permission\_name}/address/{address}/parcels

> Get paginated parcels for a specific address and permission (deployment or streaming).\
> Use query params limit/offset for pagination. Optional bounding box filter via x1, y1, x2, y2 (all four required if used).<br>

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/permissions/{permission_name}/address/{address}/parcels":{"get":{"tags":["Content Server"],"summary":"GET /world/{world_name}/permissions/{permission_name}/address/{address}/parcels","description":"Get paginated parcels for a specific address and permission (deployment or streaming).\nUse query params limit/offset for pagination. Optional bounding box filter via x1, y1, x2, y2 (all four required if used).\n","operationId":"worldsContentServer_getAllowedParcelsForPermission","parameters":[{"name":"world_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"permission_name","in":"path","required":true,"schema":{"type":"string","enum":["deployment","streaming"]}},{"name":"address","in":"path","required":true,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0}},{"name":"x1","in":"query","required":false,"schema":{"type":"integer"},"description":"Bounding box min x (required with x2, y1, y2)"},{"name":"y1","in":"query","required":false,"schema":{"type":"integer"}},{"name":"x2","in":"query","required":false,"schema":{"type":"integer"}},{"name":"y2","in":"query","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Parcels and total count","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"integer"},"parcels":{"type":"array","items":{"type":"string","pattern":"^-?\\\\d+,-?\\\\d+$"}}}}}}},"400":{"description":"Invalid request (e.g. invalid address, partial bounding box)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## POST /world/{world\_name}/permissions/{permission\_name}/address/{address}/parcels

> Add parcels to an existing permission for an address (deployment or streaming). Requires signed fetch and world ownership. Request body is JSON with parcels array.

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/permissions/{permission_name}/address/{address}/parcels":{"post":{"tags":["Content Server"],"summary":"POST /world/{world_name}/permissions/{permission_name}/address/{address}/parcels","description":"Add parcels to an existing permission for an address (deployment or streaming). Requires signed fetch and world ownership. Request body is JSON with parcels array.","operationId":"worldsContentServer_postPermissionParcels","parameters":[{"name":"world_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"permission_name","in":"path","required":true,"schema":{"type":"string","enum":["deployment","streaming"]}},{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body for adding or removing parcels to/from a permission (POST/DELETE address parcels).","properties":{"parcels":{"type":"array","items":{"type":"string","pattern":"^-?\\\\d+,-?\\\\d+$","description":"Parcel coordinate (e.g. \"0,0\", \"-1,2\")"},"minItems":1,"maxItems":500}},"required":["parcels"],"additionalProperties":false}}}},"responses":{"204":{"description":"Parcels added successfully"},"400":{"description":"Invalid request (e.g. invalid parcels)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## DELETE /world/{world\_name}/permissions/{permission\_name}/address/{address}/parcels

> Remove parcels from an existing permission for an address. Requires signed fetch and world ownership. Request body is JSON with parcels array.

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/permissions/{permission_name}/address/{address}/parcels":{"delete":{"tags":["Content Server"],"summary":"DELETE /world/{world_name}/permissions/{permission_name}/address/{address}/parcels","description":"Remove parcels from an existing permission for an address. Requires signed fetch and world ownership. Request body is JSON with parcels array.","operationId":"worldsContentServer_deletePermissionParcels","parameters":[{"name":"world_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"permission_name","in":"path","required":true,"schema":{"type":"string","enum":["deployment","streaming"]}},{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Request body for adding or removing parcels to/from a permission (POST/DELETE address parcels).","properties":{"parcels":{"type":"array","items":{"type":"string","pattern":"^-?\\\\d+,-?\\\\d+$","description":"Parcel coordinate (e.g. \"0,0\", \"-1,2\")"},"minItems":1,"maxItems":500}},"required":["parcels"],"additionalProperties":false}}}},"responses":{"204":{"description":"Parcels removed successfully"},"400":{"description":"Invalid request (e.g. invalid parcels)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /world/{world\_name}/settings

> Retrieve the settings configuration for a world, including spawn coordinates

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/settings":{"get":{"tags":["Content Server"],"summary":"/world/{world_name}/settings","description":"Retrieve the settings configuration for a world, including spawn coordinates","operationId":"worldsContentServer_getWorldSettings","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world","schema":{"type":"string"}}],"responses":{"200":{"description":"World settings retrieved successfully","content":{"application/json":{"schema":{"type":"object","description":"World settings configuration that defines how the world behaves and appears in Places","properties":{"title":{"type":"string","description":"The title of the world displayed in Places","nullable":true},"description":{"type":"string","description":"A description of the world displayed in Places","nullable":true},"contentRating":{"type":"string","description":"Content rating for the world","nullable":true},"spawnCoordinates":{"type":"string","description":"The parcel coordinate where players will spawn.\nMust be within the world shape rectangle (the bounding box covering all deployed scene parcels).\nDoes not need to be on a specific scene parcel, just anywhere within the rectangle.\nSupports both positive and negative coordinates (e.g., \"10,20\" or \"-5,-10\").\n","pattern":"^-?\\d+,-?\\d+$","nullable":true},"skyboxTime":{"type":"number","description":"Fixed skybox time (0-24 hours). Null to use dynamic day/night cycle.","nullable":true},"categories":{"type":"array","items":{"type":"string"},"description":"Categories/tags for the world","nullable":true},"singlePlayer":{"type":"boolean","description":"Whether the world is single player only","nullable":true},"showInPlaces":{"type":"boolean","description":"Whether the world should be shown in Places","nullable":true},"thumbnailUrl":{"type":"string","description":"URL of the world thumbnail image","nullable":true}}}}}},"404":{"description":"World not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /world/{world\_name}/settings

> Update world settings via multipart/form-data. Requires signed fetch and world ownership.\
> All fields are optional to allow partial updates.\
> \
> Settings include title, description, content rating, spawn coordinates, skybox time,\
> categories, single player mode, show in places, and a thumbnail image.\
> \
> For spawn coordinates, they must be within the world shape rectangle if the world has deployed scenes.\
> Worlds without deployments can have most settings pre-defined (except spawn coordinates).\
> \
> \*\*Clearing nullable fields:\*\*\
> \- Send \`skybox\_time\` with the string value \`"null"\` to reset skybox time (use dynamic day/night cycle).\
> \- Send \`categories\` with the string value \`"null"\` to clear all categories (stores an empty array).\
> \
> \*\*Validation:\*\*\
> \- \`title\` must be between 3 and 100 characters. Empty strings are rejected with a 400 error.\
> \- \`description\` must be between 3 and 1000 characters. Empty strings are rejected with a 400 error.<br>

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/world/{world_name}/settings":{"put":{"tags":["Content Server"],"summary":"/world/{world_name}/settings","description":"Update world settings via multipart/form-data. Requires signed fetch and world ownership.\nAll fields are optional to allow partial updates.\n\nSettings include title, description, content rating, spawn coordinates, skybox time,\ncategories, single player mode, show in places, and a thumbnail image.\n\nFor spawn coordinates, they must be within the world shape rectangle if the world has deployed scenes.\nWorlds without deployments can have most settings pre-defined (except spawn coordinates).\n\n**Clearing nullable fields:**\n- Send `skybox_time` with the string value `\"null\"` to reset skybox time (use dynamic day/night cycle).\n- Send `categories` with the string value `\"null\"` to clear all categories (stores an empty array).\n\n**Validation:**\n- `title` must be between 3 and 100 characters. Empty strings are rejected with a 400 error.\n- `description` must be between 3 and 1000 characters. Empty strings are rejected with a 400 error.\n","operationId":"worldsContentServer_updateWorldSettings","parameters":[{"name":"world_name","in":"path","required":true,"description":"The name of the world","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"title":{"type":"string","description":"World title. Must be between 3 and 100 characters. Empty strings are rejected.","minLength":3,"maxLength":100},"description":{"type":"string","description":"World description. Must be between 3 and 1000 characters. Empty strings are rejected.","minLength":3,"maxLength":1000},"content_rating":{"type":"string","description":"Content rating"},"spawn_coordinates":{"type":"string","description":"Spawn coordinates (e.g., \"10,20\")","pattern":"^-?\\d+,-?\\d+$"},"skybox_time":{"type":"string","description":"Fixed skybox time as a number string, or the string \"null\" to reset to dynamic day/night cycle"},"categories":{"type":"string","description":"Category values as repeated multipart fields, or the string \"null\" to clear all categories (stores an empty array)"},"single_player":{"type":"string","description":"Single player mode (\"true\" or \"false\")"},"show_in_places":{"type":"string","description":"Show in places (\"true\" or \"false\")"},"thumbnail":{"type":"string","format":"binary","description":"Thumbnail image file (max 1MB)"}}}}}},"responses":{"200":{"description":"World settings updated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string"},"settings":{"type":"object","description":"World settings configuration that defines how the world behaves and appears in Places","properties":{"title":{"type":"string","description":"The title of the world displayed in Places","nullable":true},"description":{"type":"string","description":"A description of the world displayed in Places","nullable":true},"contentRating":{"type":"string","description":"Content rating for the world","nullable":true},"spawnCoordinates":{"type":"string","description":"The parcel coordinate where players will spawn.\nMust be within the world shape rectangle (the bounding box covering all deployed scene parcels).\nDoes not need to be on a specific scene parcel, just anywhere within the rectangle.\nSupports both positive and negative coordinates (e.g., \"10,20\" or \"-5,-10\").\n","pattern":"^-?\\d+,-?\\d+$","nullable":true},"skyboxTime":{"type":"number","description":"Fixed skybox time (0-24 hours). Null to use dynamic day/night cycle.","nullable":true},"categories":{"type":"array","items":{"type":"string"},"description":"Categories/tags for the world","nullable":true},"singlePlayer":{"type":"boolean","description":"Whether the world is single player only","nullable":true},"showInPlaces":{"type":"boolean","description":"Whether the world should be shown in Places","nullable":true},"thumbnailUrl":{"type":"string","description":"URL of the world thumbnail image","nullable":true}}}}}}}},"400":{"description":"Invalid request - validation failed (e.g., spawn coordinates outside world bounds)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"401":{"description":"Unauthorized - invalid signature","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"403":{"description":"Forbidden - user does not own the world name","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## GET /worlds

> Retrieve a paginated list of worlds with optional search, sorting, and authorized deployer filtering.\
> \
> This endpoint supports:\
> \- \*\*Pagination\*\*: Use \`limit\` and \`offset\` query parameters\
> \- \*\*Search\*\*: Full-text search across world name, title, and description\
> \- \*\*Sorting\*\*: Sort by world name or last deployment time\
> \- \*\*Authorized deployer filtering\*\*: Filter by worlds where an address can deploy (is owner or has deployment permission)<br>

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/worlds":{"get":{"tags":["Content Server"],"summary":"GET /worlds","description":"Retrieve a paginated list of worlds with optional search, sorting, and authorized deployer filtering.\n\nThis endpoint supports:\n- **Pagination**: Use `limit` and `offset` query parameters\n- **Search**: Full-text search across world name, title, and description\n- **Sorting**: Sort by world name or last deployment time\n- **Authorized deployer filtering**: Filter by worlds where an address can deploy (is owner or has deployment permission)\n","operationId":"worldsContentServer_getWorlds","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":100},"description":"Maximum number of worlds to return (default 100)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0},"description":"Number of worlds to skip (default 0)"},{"name":"search","in":"query","required":false,"schema":{"type":"string"},"description":"Full-text search query. Searches across world name (highest priority), \ntitle (medium priority), and description (lowest priority).\n"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","enum":["name","last_deployed_at"],"default":"name"},"description":"Field to sort by (default \"name\")"},{"name":"order","in":"query","required":false,"schema":{"type":"string","enum":["asc","desc"],"default":"asc"},"description":"Sort direction (default \"asc\")"},{"name":"authorized_deployer","in":"query","required":false,"schema":{"type":"string"},"description":"Ethereum address to filter worlds by deployment capabilities.\nReturns worlds where the specified address is either the owner\nor has been granted deployment permission.\n"},{"name":"has_deployed_scenes","in":"query","required":false,"schema":{"type":"boolean"},"description":"Filter worlds by whether they have deployed scenes.\nWhen true, returns only worlds with at least one deployed scene.\nWhen false, returns only worlds with no deployed scenes.\nWhen not provided, returns all worlds regardless of deployment status.\n"}],"responses":{"200":{"description":"Paginated list of worlds","content":{"application/json":{"schema":{"type":"object","description":"Paginated response containing worlds information","properties":{"worlds":{"type":"array","items":{"type":"object","description":"Information about a world including settings and deployment status","properties":{"name":{"type":"string","description":"The world name (ENS or DCL domain)"},"owner":{"type":"string","description":"Ethereum address of the world owner"},"title":{"type":"string","nullable":true,"description":"The title of the world"},"description":{"type":"string","nullable":true,"description":"A description of the world"},"shape":{"type":"object","nullable":true,"description":"The bounding rectangle of the world in parcel coordinates.\nNull if the world has no deployed scenes.\n","properties":{"x1":{"type":"integer","description":"Minimum x coordinate"},"x2":{"type":"integer","description":"Maximum x coordinate"},"y1":{"type":"integer","description":"Minimum y coordinate"},"y2":{"type":"integer","description":"Maximum y coordinate"}}},"content_rating":{"type":"string","nullable":true,"description":"Content rating for the world"},"spawn_coordinates":{"type":"string","nullable":true,"description":"The parcel coordinate where players will spawn","pattern":"^-?\\d+,-?\\d+$"},"skybox_time":{"type":"number","nullable":true,"description":"Fixed skybox time (0-24 hours)"},"categories":{"type":"array","nullable":true,"items":{"type":"string"},"description":"Categories/tags for the world"},"single_player":{"type":"boolean","nullable":true,"description":"Whether the world is single player only"},"show_in_places":{"type":"boolean","nullable":true,"description":"Whether the world should be shown in Places"},"thumbnail_hash":{"type":"string","nullable":true,"description":"IPFS hash of the world thumbnail image"},"last_deployed_at":{"type":"string","format":"date-time","nullable":true,"description":"ISO 8601 timestamp of the last scene deployment.\nNull if the world has no deployed scenes.\n"},"blocked_since":{"type":"string","format":"date-time","nullable":true,"description":"ISO 8601 timestamp when the world owner was blocked.\nNull if the owner is not blocked.\n"},"deployed_scenes":{"type":"integer","description":"The number of scenes deployed to the world"}},"required":["name","owner","title","description","shape","content_rating","spawn_coordinates","skybox_time","categories","single_player","show_in_places","thumbnail_hash","last_deployed_at","blocked_since","deployed_scenes"]},"description":"List of worlds"},"total":{"type":"integer","description":"Total number of worlds matching the query (for pagination)"}},"required":["worlds","total"]}}}},"400":{"description":"Invalid request (e.g., invalid sort or order parameter)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /wallet/{wallet}/stats

> Retrieve storage statistics for a wallet address

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/wallet/{wallet}/stats":{"get":{"tags":["Content Server"],"summary":"/wallet/{wallet}/stats","description":"Retrieve storage statistics for a wallet address","operationId":"worldsContentServer_getWalletStats","parameters":[{"name":"wallet","in":"path","required":true,"description":"Ethereum wallet address","schema":{"type":"string"}}],"responses":{"200":{"description":"Wallet statistics retrieved successfully","content":{"application/json":{"schema":{"type":"object","description":"Storage statistics for a wallet","properties":{"wallet":{"type":"string","description":"Ethereum address"},"dclNames":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"size":{"type":"string","description":"Size in bytes as string"}}}},"ensNames":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"size":{"type":"string","description":"Size in bytes as string"}}}},"usedSpace":{"type":"string","description":"Total used space in bytes as string"},"maxAllowedSpace":{"type":"string","description":"Maximum allowed space in bytes as string"},"blockedSince":{"type":"string","format":"date-time","nullable":true,"description":"ISO timestamp when wallet was blocked"}}}}}},"400":{"description":"Invalid wallet address","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /wallet/{wallet}/connected-world

> Retrieve the world that a wallet is currently connected to

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/wallet/{wallet}/connected-world":{"get":{"tags":["Content Server"],"summary":"/wallet/{wallet}/connected-world","description":"Retrieve the world that a wallet is currently connected to","operationId":"worldsContentServer_getWalletConnectedWorld","parameters":[{"name":"wallet","in":"path","required":true,"description":"Ethereum wallet address","schema":{"type":"string"}}],"responses":{"200":{"description":"Connected world retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"world":{"type":"string","description":"Name of the connected world","nullable":true}}}}}}}}}}}
```

## /wallet/contribute

> Retrieve list of domains that the authenticated wallet can contribute to. Requires signed fetch.

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/wallet/contribute":{"get":{"tags":["Content Server"],"summary":"/wallet/contribute","description":"Retrieve list of domains that the authenticated wallet can contribute to. Requires signed fetch.","operationId":"worldsContentServer_getContributableDomains","responses":{"200":{"description":"Contributable domains retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"Domain name"},"user_permissions":{"type":"array","items":{"type":"string"},"description":"Permissions the user has for this domain"},"owner":{"type":"string","description":"Owner address"},"size":{"type":"string","description":"Size in bytes as string"}}}},"count":{"type":"integer"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /status

> Retrieve the current status of the content server and communication services

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/status":{"get":{"tags":["Content Server"],"summary":"/status","description":"Retrieve the current status of the content server and communication services","operationId":"worldsContentServer_getStatus","responses":{"200":{"description":"Server status retrieved successfully","content":{"application/json":{"schema":{"type":"object","description":"Server status information","properties":{"content":{"type":"object","properties":{"commitHash":{"type":"string","description":"Git commit hash of deployed version"},"worldsCount":{"type":"object","properties":{"ens":{"type":"integer","description":"Number of ENS worlds"},"dcl":{"type":"integer","description":"Number of DCL worlds"}}}}},"comms":{"type":"object","properties":{"adapterType":{"type":"string"},"statusUrl":{"type":"string"},"commitHash":{"type":"string","nullable":true},"users":{"type":"integer","description":"Number of connected users"},"rooms":{"type":"integer","description":"Number of active rooms"},"timestamp":{"type":"number","description":"Unix timestamp in milliseconds"}}}}}}}}}}}}}
```

## /index

> Retrieve an index of all deployed worlds (deprecated; prefer /worlds for listing).

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/index":{"get":{"tags":["Content Server"],"summary":"/index","description":"Retrieve an index of all deployed worlds (deprecated; prefer /worlds for listing).","operationId":"worldsContentServer_getIndex","deprecated":true,"responses":{"200":{"description":"Index retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string","description":"World name"},"scenes":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Scene entity ID"},"title":{"type":"string","description":"Scene title"},"description":{"type":"string","description":"Scene description"},"thumbnail":{"type":"string","nullable":true,"description":"Thumbnail image hash"},"pointers":{"type":"array","items":{"type":"string"},"description":"Scene pointers"},"timestamp":{"type":"number","description":"Deployment timestamp"},"runtimeVersion":{"type":"string","nullable":true,"description":"Scene runtime version"}}}}}},"description":"List of world data with scenes"},"lastUpdated":{"type":"string","format":"date-time","description":"ISO 8601 timestamp of last index update"}}}}}}}}}}}
```

## /live-data

> Retrieve live data about active worlds and users (from comms adapter status).

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/live-data":{"get":{"tags":["Content Server"],"summary":"/live-data","description":"Retrieve live data about active worlds and users (from comms adapter status).","operationId":"worldsContentServer_getLiveData","responses":{"200":{"description":"Live data retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"totalUsers":{"type":"integer","description":"Total number of connected users"},"perWorld":{"type":"object","description":"Per-world user counts (keyed by world name)","additionalProperties":{"type":"integer"}}}},"lastUpdated":{"type":"string","format":"date-time","description":"ISO 8601 timestamp of status snapshot"}}}}}}}}}}}
```

## POST /worlds/{worldName}/comms

> Get comms adapter connection string for a world. Requires signed fetch.\
> Auth metadata may include optional secret for access. Returns fixedAdapter.<br>

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/worlds/{worldName}/comms":{"post":{"tags":["Content Server"],"summary":"POST /worlds/{worldName}/comms","description":"Get comms adapter connection string for a world. Requires signed fetch.\nAuth metadata may include optional secret for access. Returns fixedAdapter.\n","operationId":"worldsContentServer_worldComms","parameters":[{"name":"worldName","in":"path","required":true,"description":"World name (e.g. my-name.dcl.eth)","schema":{"type":"string"}}],"responses":{"200":{"description":"Comms adapter retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"fixedAdapter":{"type":"string"}}}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"404":{"description":"World or scene not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## POST /worlds/{worldName}/scenes/{sceneId}/comms

> Get comms adapter connection string for a specific scene in a world. Requires signed fetch.\
> Auth metadata may include optional secret for access. Returns fixedAdapter.<br>

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/worlds/{worldName}/scenes/{sceneId}/comms":{"post":{"tags":["Content Server"],"summary":"POST /worlds/{worldName}/scenes/{sceneId}/comms","description":"Get comms adapter connection string for a specific scene in a world. Requires signed fetch.\nAuth metadata may include optional secret for access. Returns fixedAdapter.\n","operationId":"worldsContentServer_worldSceneComms","parameters":[{"name":"worldName","in":"path","required":true,"schema":{"type":"string"}},{"name":"sceneId","in":"path","required":true,"description":"Scene entity ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Comms adapter retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"fixedAdapter":{"type":"string"}}}}}},"403":{"description":"Access denied","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"404":{"description":"World or scene not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /get-comms-adapter/{roomId}

> Retrieve communication adapter connection string for a room. Requires signed fetch (auth metadata may include secret for access). Returns fixedAdapter.

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/get-comms-adapter/{roomId}":{"post":{"tags":["Content Server"],"summary":"/get-comms-adapter/{roomId}","description":"Retrieve communication adapter connection string for a room. Requires signed fetch (auth metadata may include secret for access). Returns fixedAdapter.","operationId":"worldsContentServer_getCommsAdapter","parameters":[{"name":"roomId","in":"path","required":true,"description":"Room identifier (prefix + world name)","schema":{"type":"string"}}],"responses":{"200":{"description":"Adapter information retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"fixedAdapter":{"type":"string","description":"Connection string for the comms adapter"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"404":{"description":"World not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /cast-adapter/{roomId}

> Retrieve LiveKit cast adapter URL and JWT token for a room. Requires signed fetch.

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/cast-adapter/{roomId}":{"post":{"tags":["Content Server"],"summary":"/cast-adapter/{roomId}","description":"Retrieve LiveKit cast adapter URL and JWT token for a room. Requires signed fetch.","operationId":"worldsContentServer_getCastAdapter","parameters":[{"name":"roomId","in":"path","required":true,"description":"Room identifier (prefix + world name)","schema":{"type":"string"}}],"responses":{"200":{"description":"Cast adapter information retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"LiveKit WebSocket URL (e.g. wss://host)"},"token":{"type":"string","description":"JWT token for joining the room"}}}}}},"401":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}},"404":{"description":"World not found","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","description":"Error message"}}}}}}}}}}}
```

## /livekit-webhook

> Webhook endpoint for LiveKit events

```json
{"openapi":"3.0.3","info":{"title":"Decentraland Worlds Content Server API","version":"1.0.0"},"tags":[{"name":"Content Server","description":"API endpoints for Decentraland Worlds Content Server"}],"servers":[{"url":"https://worlds-content-server.decentraland.org","description":"Production server"},{"url":"https://worlds-content-server.decentraland.zone","description":"Development server"},{"url":"http://localhost:3000","description":"Local development server"}],"security":[{"SignedFetch":[]}],"components":{"securitySchemes":{"SignedFetch":{"type":"apiKey","in":"header","name":"X-Identity-Auth-Chain-*","description":"Signed fetch authentication using Decentraland's ADR-44 specification.\nMultiple headers are used to provide the authentication chain.\n"}}},"paths":{"/livekit-webhook":{"post":{"tags":["Content Server"],"summary":"/livekit-webhook","description":"Webhook endpoint for LiveKit events","operationId":"worldsContentServer_livekitWebhook","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"LiveKit webhook payload"}}}},"responses":{"200":{"description":"Webhook processed successfully"}}}}}}
```
