# Storage

S3 storage proxy endpoints

## Get asset pack file

> Redirects to S3 URL for asset pack file

```json
{"openapi":"3.0.3","info":{"title":"Builder Server API","version":"2.10.0"},"tags":[{"name":"Storage","description":"S3 storage proxy endpoints"}],"servers":[{"url":"https://builder-api.decentraland.org/v1","description":"Production environment","variables":{}},{"url":"https://builder-api.decentraland.zone/v1","description":"Development environment","variables":{}}],"security":[],"paths":{"/storage/assetPacks/{filename}":{"get":{"operationId":"getAssetPackFile","tags":["Storage"],"summary":"Get asset pack file","description":"Redirects to S3 URL for asset pack file","parameters":[{"name":"filename","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"301":{"description":"Redirect to S3 URL"}}}}}}
```

## Get content by hash

> Redirects to S3 URL for content file

```json
{"openapi":"3.0.3","info":{"title":"Builder Server API","version":"2.10.0"},"tags":[{"name":"Storage","description":"S3 storage proxy endpoints"}],"servers":[{"url":"https://builder-api.decentraland.org/v1","description":"Production environment","variables":{}},{"url":"https://builder-api.decentraland.zone/v1","description":"Development environment","variables":{}}],"security":[],"paths":{"/storage/contents/{hash}":{"get":{"operationId":"getContentByHash","tags":["Storage"],"summary":"Get content by hash","description":"Redirects to S3 URL for content file","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"301":{"description":"Redirect to S3 URL"}}}}}}
```

## Get content headers

> Returns headers for content file without body

```json
{"openapi":"3.0.3","info":{"title":"Builder Server API","version":"2.10.0"},"tags":[{"name":"Storage","description":"S3 storage proxy endpoints"}],"servers":[{"url":"https://builder-api.decentraland.org/v1","description":"Production environment","variables":{}},{"url":"https://builder-api.decentraland.zone/v1","description":"Development environment","variables":{}}],"security":[],"paths":{"/storage/contents/{hash}":{"head":{"operationId":"getContentHeaders","tags":["Storage"],"summary":"Get content headers","description":"Returns headers for content file without body","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"301":{"description":"Redirect to S3 URL"}}}}}}
```

## Check if content exists

> Returns whether a file exists in storage without downloading it

```json
{"openapi":"3.0.3","info":{"title":"Builder Server API","version":"2.10.0"},"tags":[{"name":"Storage","description":"S3 storage proxy endpoints"}],"servers":[{"url":"https://builder-api.decentraland.org/v1","description":"Production environment","variables":{}},{"url":"https://builder-api.decentraland.zone/v1","description":"Development environment","variables":{}}],"security":[],"paths":{"/storage/contents/{hash}/exists":{"get":{"operationId":"checkContentExists","tags":["Storage"],"summary":"Check if content exists","description":"Returns whether a file exists in storage without downloading it","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"File exists"},"404":{"description":"File does not exist"}}}}}}
```

## Upload content file

> Uploads a file to storage

```json
{"openapi":"3.0.3","info":{"title":"Builder Server API","version":"2.10.0"},"tags":[{"name":"Storage","description":"S3 storage proxy endpoints"}],"servers":[{"url":"https://builder-api.decentraland.org/v1","description":"Production environment","variables":{}},{"url":"https://builder-api.decentraland.zone/v1","description":"Development environment","variables":{}}],"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":{"/storage/upload":{"post":{"operationId":"uploadContent","tags":["Storage"],"summary":"Upload content file","description":"Uploads a file to storage","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object"}}}},"responses":{"200":{"description":"File uploaded successfully","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"data":{"type":"object","properties":{"hash":{"type":"string"}}}}}}}},"401":{"description":"Unauthorized - authentication required or insufficient permissions","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"},"error":{"type":"string"},"data":{"type":"object"}}}}}}}}}}}
```
