---
# System prepended metadata

title: Authentication API

---

# Authentication API
1. POST /v1/login
 ```json
{
  "data": {
    "attributes": {
      "login": "string",
      "password": "string",
      "token": {
        "value": "string",
        "type": 0
      },
      "appleIdCredential": {
        "userId": "string",
        "email": "string",
        "fullName": {
          "namePrefix": "string",
          "givenName": "string",
          "middleName": "string",
          "familyName": "string",
          "nameSuffix": "string",
          "nickname": "string"
        },
        "identityToken": "string",
        "authorizationCode": "string"
      }
    },
    "type": "authentication"
  }
}
```
    Available token types:
    GOOGLE(0)
    
Можно послать логин+пароль, либо токен, либо appleIdCredential если пошлешь несколько, то будет использован токен.
    
При отправке неправильной пары логин+пароль, либо некорректного токена, вопрошающий будет послан.
При отправке корректного токена, но отсутствующего в базе, будет зарегистрирован новый юзер.
    
"token" - это универсальная сущность для токенов, в частности для Google.

"appleIdCredential" - это чисто для Apple, у них особый путь. Это копия модельки которую клиент получает от эппла https://github.com/tomgilder/flutter_apple_sign_in/blob/master/lib/apple_id_credential.dart
Причём данные email и fullName будут у клиента только при первой аутентификации(так работает Apple), поэтому они nullable.

В ответе придёт серверный токен.
```json
{
  "data": {
    "id": "id",
    "attributes": {
      "token": "token"
    },
    "type": "user"
  }
}
```
Или ошибка
```json
{
  "errors": [
    {
      "id": "5fbd6ab4-28be-45ae-ba51-bdf35bc1f853",
      "status": null,
      "code": "2",
      "title": "Failed to authenticate user",
      "detail": null
    }
  ]
}
```

    Возможные ошибки:
     - 2 - Failed to authenticate user
     - 3 - Either login+password or token or Apple credentials should be passed.
     - 4 - Incorrect authentication token from authentication provider.
     - 5 - Could not Sign Up. Unsupported authentication token provider.
     
2. Все дальнейшие запросы делаешь с токеном
    Кладёшь токен, который получил из `/v1/login` в хедер `Authorization` 