To add a new S3 source, go to the **Data sources manager** on the left sidebar of the app editor and click on `Add data source` button. Select **AWS S3** from the modal that pops up.
Click on **Test connection** button to verify if the credentials are correct and that the database is accessible to ToolJet server. Click on **Save** button to save the data source.
:::tip
You can now connect to **[different S3 Hosts using custom endpoints](/docs/how-to/s3-custom-endpoints)**.
:::
## Querying AWS S3
Click on `+` button of the **query manager** at the bottom panel of the editor and select the data source added in the previous step as the data source. Select the operation that you want to perform and click **Save** to save the query.
This operation will fetch the list of all the files in your bucket. It requires two parameters:
1.**Bucket**: Bucket name (mandatory)
2.**Prefix**: To limit the response to keys that begin with the specified prefix (optional)
3.**Max keys**: The maximum number of keys returned in the response body (optional). Default value is 1000.
4.**Offset**: The key to start with when listing objects in a bucket (optional).
5.**"Next Continuation Token"**: `Next Continuation Token` indicates Amazon S3 that the list is being continued on this bucket with a token. ContinuationToken is obfuscated and is not a real key (optional).
:::info
**Next Continuation Token**
For listing a bucket for objects that begin with a specific character or a prefix, then use the `Offset` parameter. For example, if you want to list all the objects that begin with `a`, then set the `Offset` parameter to `a`. Similarly, if you want to list all the objects that begin with `ab`, then set the `Offset` parameter to `ab`.
The `Next Continuation Token` is used to list the next set of objects in a bucket. It is returned by the API when the response is truncated. The results will contain `Next Continuation Token` if there are more keys in the bucket that satisfy the list query. To get the next set of objects, set the `Next Continuation Token` parameter and run the query again.
The results will continue from where the last listing finished.
:::
<imgclassName="screenshot-full"src="/img/datasource-reference/aws-s3/listobjectsv2.png"alt="aws s3 list object"/>
### Signed url for download
The object owner can optionally share objects with others by creating a presigned URL, using their own security credentials, to grant time-limited permission to download the objects. For creating a presigned URL, the required parameters are:
1.**Bucket**: name of the bucket for uploading the file
2.**Key**: an object key
3.**Expires in**: an expiration time of URL
<imgclassName="screenshot-full"src="/img/datasource-reference/aws-s3/urldownv2.png"alt="aws s3 signed download"/>
### Signed url for upload
The presigned URLs are useful if you want your user/customer to be able to upload a specific object to your bucket, but you don't require them to have AWS security credentials or permissions. For creating a presigned URL, the required parameters are:
1.**Bucket**: name of the bucket for uploading the file
2.**Key**: an object key
3.**Expires in**: an expiration time of URL
4.**Content type**: the content type such as text, image etc.
<imgclassName="screenshot-full"src="/img/datasource-reference/aws-s3/urluplv2.png"alt="aws s3 signed upload"/>
We built an app to view and upload files to AWS S3 buckets. Check out the complete tutorial **[here](https://blog.tooljet.com/build-an-aws-s3-broswer-with-tooljet/)**.