# Autenticação

{% hint style="info" %}
Para aceder à API, um token de acesso deverá ser usado. Um Token está associado a um Utilizador autenticado numa Localização, num Terminal e numa Caixa, na sua empresa. Tudo o que for feito usando um Token, terá a autoria atribuída ao utilizador associado e reger-se-á pelas suas permissões na aplicação.
{% endhint %}

## A criação de Tokens pode ser feita de duas maneiras:

* BackOffice: Poderá criar Tokens acedendo ao BackOffice, em Empresa  Tokens de Acesso à API, onde poderá atribuir o Token a um Utilizador, Localização e Terminal.
* Usando a própria API: Pode obter um Token fazendo um pedido ao end-point `/auth/login`, incluindo as suas credenciais de autenticação, obtendo na resposta o Token que poderá utilizar nos pedidos posteriores.

## Login

## Gera um Token de Acesso para as credenciais fornecidas:

<mark style="color:green;">`POST`</mark> `https://api.cloudinvoice.net/auth/login/`

#### Request Body

| Name                                       | Type   | Description |
| ------------------------------------------ | ------ | ----------- |
| username<mark style="color:red;">\*</mark> | email  |             |
| password<mark style="color:red;">\*</mark> | string |             |
| company\_code                              | string |             |
| till\_code                                 | string |             |

{% tabs %}
{% tab title="Exemplo de Pedido" %}

```shell
curl -X POST https://api.cloudinvoice.net/auth/login/
    -d '{
        "username": "user@sample.com",
        "password": "pFS2VwMk"
    }'
```

{% endtab %}

{% tab title="Exemplo de Resposta" %}

```json
{
    "key": "329c2d5cadd96ccce7b0b0f2653e8d08f61ddd52"
}

```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
Para além das credenciais username/password, pode também incluir a Empresa **`company_code`** e a Caixa **`till_code`** a que pretende associar o token de acesso.
{% endhint %}

## Pedidos com Autenticação

Para efectuar pedidos com autenticação, deverá usar um dos seguintes métodos:

* Incluir o Header HTTP: `Authorization: Token <token>`

```shell
curl https://api.cloudinvoice.net/customers/
    -H "Content-Type: application/json"
    -H "Authorization: Token 329c2d5cadd96ccce7b0b0f2653e8d08f61ddd52"
```

* Incluir o Query Param: `api_token=<token>`

```shell
curl https://api.cloudinvoice.net/customers/?api_token=329c2d5cadd96ccce7b0b0f2653e8d08f61ddd52
    -H "Content-Type: application/json"
```

{% hint style="info" %}
Em pedidos **`POST`** deve incluir sempre o&#x20;

Header: **`Content-Type: application/json;`**
{% endhint %}
