Authentication

POST /api/auth/register

register a user

Example request:

POST /api/auth/register HTTP/1.1
Content-Type: application/json

Example responses:

  • successful registration

HTTP/1.1 201 CREATED
Content-Type: application/json

{
  "auth_token": "JSON Web Token",
  "message": "successfully registered",
  "status": "success"
}
  • error on registration

HTTP/1.1 400 BAD REQUEST
Content-Type: application/json

{
  "message": "Errors: email: valid email must be provided\n",
  "status": "error"
}
Request JSON Object
  • username (string) – user name (3 to 12 characters required)

  • email (string) – user email

  • password (string) – password (8 characters required)

  • password_conf (string) – password confirmation

Status Codes
  • 201 Created – successfully registered

  • 400 Bad Request

    • invalid payload

    • sorry, that user already exists

    • Errors:
      • username: 3 to 12 characters required

      • email: valid email must be provided

      • password: password and password confirmation don’t match

      • password: 8 characters required

  • 403 Forbidden – error, registration is disabled

  • 500 Internal Server Error – error, please try again or contact the administrator

POST /api/auth/login

user login

Example request:

POST /api/auth/login HTTP/1.1
Content-Type: application/json

Example responses:

  • successful login

HTTP/1.1 200 OK
Content-Type: application/json

{
  "auth_token": "JSON Web Token",
  "message": "successfully logged in",
  "status": "success"
}
  • error on login

HTTP/1.1 404 NOT FOUND
Content-Type: application/json

{
  "message": "invalid credentials",
  "status": "error"
}
Request JSON Object
  • email (string) – user email

  • password_conf (string) – password confirmation

Status Codes
GET /api/auth/logout

user logout

Example request:

GET /api/auth/logout HTTP/1.1
Content-Type: application/json

Example responses:

  • successful logout

HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "successfully logged out",
  "status": "success"
}
  • error on login

HTTP/1.1 401 UNAUTHORIZED
Content-Type: application/json

{
  "message": "provide a valid auth token",
  "status": "error"
}
Request Headers
Status Codes
GET /api/auth/profile

get authenticated user info

Example request:

GET /api/auth/profile HTTP/1.1
Content-Type: application/json

Example response:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "data": {
    "admin": false,
    "bio": null,
    "birth_date": null,
    "created_at": "Sun, 14 Jul 2019 14:09:58 GMT",
    "email": "sam@example.com",
    "first_name": null,
    "imperial_units": false,
    "language": "en",
    "last_name": null,
    "location": null,
    "nb_sports": 3,
    "nb_workouts": 6,
    "picture": false,
    "records": [
      {
        "id": 9,
        "record_type": "AS",
        "sport_id": 1,
        "user": "sam",
        "value": 18,
        "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT",
        "workout_id": "hvYBqYBRa7wwXpaStWR4V2"
      },
      {
        "id": 10,
        "record_type": "FD",
        "sport_id": 1,
        "user": "sam",
        "value": 18,
        "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT",
        "workout_id": "hvYBqYBRa7wwXpaStWR4V2"
      },
      {
        "id": 11,
        "record_type": "LD",
        "sport_id": 1,
        "user": "sam",
        "value": "1:01:00",
        "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT",
        "workout_id": "hvYBqYBRa7wwXpaStWR4V2"
      },
      {
        "id": 12,
        "record_type": "MS",
        "sport_id": 1,
        "user": "sam",
        "value": 18,
        "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT",
        "workout_id": "hvYBqYBRa7wwXpaStWR4V2"
      }
    ],
    "sports_list": [
        1,
        4,
        6
    ],
    "timezone": "Europe/Paris",
    "total_distance": 67.895,
    "total_duration": "6:50:27",
    "username": "sam",
    "weekm": false
  },
  "status": "success"
}
Request Headers
Status Codes
  • 200 OK – success.

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

POST /api/auth/profile/edit

edit authenticated user

Example request:

POST /api/auth/profile/edit HTTP/1.1
Content-Type: application/json

Example response:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "data": {
    "admin": false,
    "bio": null,
    "birth_date": null,
    "created_at": "Sun, 14 Jul 2019 14:09:58 GMT",
    "email": "sam@example.com",
    "first_name": null,
    "imperial_units": false,
    "language": "en",
    "last_name": null,
    "location": null,
    "nb_sports": 3,
    "nb_workouts": 6,
    "picture": false,
    "records": [
      {
        "id": 9,
        "record_type": "AS",
        "sport_id": 1,
        "user": "sam",
        "value": 18,
        "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT",
        "workout_id": "hvYBqYBRa7wwXpaStWR4V2"
      },
      {
        "id": 10,
        "record_type": "FD",
        "sport_id": 1,
        "user": "sam",
        "value": 18,
        "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT",
        "workout_id": "hvYBqYBRa7wwXpaStWR4V2"
      },
      {
        "id": 11,
        "record_type": "LD",
        "sport_id": 1,
        "user": "sam",
        "value": "1:01:00",
        "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT",
        "workout_id": "hvYBqYBRa7wwXpaStWR4V2"
      },
      {
        "id": 12,
        "record_type": "MS",
        "sport_id": 1,
        "user": "sam",
        "value": 18,
        "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT",
        "workout_id": "hvYBqYBRa7wwXpaStWR4V2"
      }
    ],
    "sports_list": [
        1,
        4,
        6
    ],
    "timezone": "Europe/Paris",
    "total_distance": 67.895,
    "total_duration": "6:50:27",
    "username": "sam"
    "weekm": true,
  },
  "message": "user profile updated",
  "status": "success"
}
Request JSON Object
  • first_name (string) – user first name

  • last_name (string) – user last name

  • location (string) – user location

  • bio (string) – user biography

  • birth_date (string) – user birth date (format: %Y-%m-%d)

  • password (string) – user password

  • password_conf (string) – user password confirmation

Request Headers
Status Codes
  • 200 OK – user profile updated

  • 400 Bad Request

    • invalid payload

    • password: password and password confirmation don’t match

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

  • 500 Internal Server Error – error, please try again or contact the administrator

POST /api/auth/profile/edit/preferences

edit authenticated user preferences

Example request:

POST /api/auth/profile/edit/preferences HTTP/1.1
Content-Type: application/json

Example response:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "data": {
    "admin": false,
    "bio": null,
    "birth_date": null,
    "created_at": "Sun, 14 Jul 2019 14:09:58 GMT",
    "email": "sam@example.com",
    "first_name": null,
    "imperial_units": false,
    "language": "en",
    "last_name": null,
    "location": null,
    "nb_sports": 3,
    "nb_workouts": 6,
    "picture": false,
    "records": [
      {
        "id": 9,
        "record_type": "AS",
        "sport_id": 1,
        "user": "sam",
        "value": 18,
        "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT",
        "workout_id": "hvYBqYBRa7wwXpaStWR4V2"
      },
      {
        "id": 10,
        "record_type": "FD",
        "sport_id": 1,
        "user": "sam",
        "value": 18,
        "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT",
        "workout_id": "hvYBqYBRa7wwXpaStWR4V2"
      },
      {
        "id": 11,
        "record_type": "LD",
        "sport_id": 1,
        "user": "sam",
        "value": "1:01:00",
        "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT",
        "workout_id": "hvYBqYBRa7wwXpaStWR4V2"
      },
      {
        "id": 12,
        "record_type": "MS",
        "sport_id": 1,
        "user": "sam",
        "value": 18,
        "workout_date": "Sun, 07 Jul 2019 08:00:00 GMT",
        "workout_id": "hvYBqYBRa7wwXpaStWR4V2"
      }
    ],
    "sports_list": [
        1,
        4,
        6
    ],
    "timezone": "Europe/Paris",
    "total_distance": 67.895,
    "total_duration": "6:50:27",
    "username": "sam"
    "weekm": true,
  },
  "message": "user preferences updated",
  "status": "success"
}
Request JSON Object
  • timezone (string) – user time zone

  • weekm (string) – does week start on Monday?

  • language (string) – language preferences

Request Headers
Status Codes
  • 200 OK – user preferences updated

  • 400 Bad Request

    • invalid payload

    • password: password and password confirmation don’t match

  • 401 Unauthorized

    • provide a valid auth token

    • signature expired, please log in again

    • invalid token, please log in again

  • 500 Internal Server Error – error, please try again or contact the administrator

POST /api/auth/profile/edit/sports

edit authenticated user sport preferences

Example request:

POST /api/auth/profile/edit/sports HTTP/1.1
Content-Type: application/json

Example response:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "data": {
    "color": "#000000",
    "is_active": true,
    "sport_id": 1,
    "stopped_speed_threshold": 1,
    "user_id": 1
  },
  "message": "user sport preferences updated",
  "status": "success"
}
Request JSON Object
  • color (string) – valid hexadecimal color

  • is_active (boolean) – is sport available when adding a workout

  • stopped_speed_threshold (float) – stopped speed threshold used by gpxpy

Request Headers
Status Codes
DELETE /api/auth/profile/reset/sports/(sport_id)

reset authenticated user preferences for a given sport

Example request:

DELETE /api/auth/profile/reset/sports/1 HTTP/1.1
Content-Type: application/json

Example response:

HTTP/1.1 204 OK
Content-Type: application/json
Parameters
  • sport_id (string) – sport id

Request Headers
Status Codes
POST /api/auth/picture

update authenticated user picture

Example request:

POST /api/auth/picture HTTP/1.1
Content-Type: multipart/form-data

Example response:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "user picture updated",
  "status": "success"
}
Form Parameters
  • file – image file (allowed extensions: .jpg, .png, .gif)

Request Headers
Status Codes
DELETE /api/auth/picture

delete authenticated user picture

Example request:

DELETE /api/auth/picture HTTP/1.1
Content-Type: application/json

Example response:

HTTP/1.1 204 NO CONTENT
Content-Type: application/json
Request Headers
Status Codes
POST /api/auth/password/reset-request

handle password reset request

Example request:

POST /api/auth/password/reset-request HTTP/1.1
Content-Type: application/json

Example response:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "password reset request processed",
  "status": "success"
}
Request JSON Object
  • email (string) – user email

Status Codes
POST /api/auth/password/update

update user password

Example request:

POST /api/auth/password/update HTTP/1.1
Content-Type: application/json

Example response:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "password updated",
  "status": "success"
}
Request JSON Object
  • password (string) – password (8 characters required)

  • password_conf (string) – password confirmation

  • token (string) – password reset token

Status Codes