# Authentication Options

Some API requests require you to authenticate with a Bearer token in the authorization header. Ellipsis Drive has three types of tokens that you can use to authenticate with. Do mind that using layers whose [sharing status](https://docs.ellipsis-drive.com/getting-started/quick-start/5.-data-sharing-and-user-access) is on public or link sharing does not require a token!

* **User Token**: Click [<mark style="color:blue;">**here**</mark>](https://docs.ellipsis-drive.com/developers/api-v3/account/login-to-your-account) to know how you can generate the user token. A user token grants access to all a user has permission to.
* **OAuth token**: Click [<mark style="color:blue;">**here**</mark>](https://docs.ellipsis-drive.com/developers/api-v3/oauth) to see how to setup OAuth for your app. An OAuth token grants access to all content of a user, only shielding away some of it's security settings.&#x20;
* **Access Tokens**: Click [<mark style="color:blue;">**here**</mark>](https://docs.ellipsis-drive.com/developers/api-v3/account/access-tokens) to see the details about creating and revoking access tokens. An Access token gives access to the specific folder(s) or layer(s) that the token has been created for.

{% hint style="info" %}
Tokens can be generated via the API, but they can also be generated using the Python and R libraries. For a personal access token see this [link](https://ellipsis-package.readthedocs.io/en/latest/account/accessToken/index.html#create) and for a user token see this [link](https://ellipsis-package.readthedocs.io/en/latest/account/index.html#login).\
\
When you have an app that needs access to someone's account we recommend setting up OAuth. You can however also obtain a user token directly by referring a user to <https://app.ellipsis-drive.com/logIn?referer={your> app url}. When doing this the user will be asked to login to his/her account and will be referred back to your app with a token in the url. This flow is easier to set up as it requires no back end from your side.
{% endhint %}
