Skip to content

Authentication

GeniusHRM's API uses Laravel Sanctum with Bearer token authentication. All API requests (except login) must include a valid token in the Authorization header.


Login

Exchange credentials for a Bearer token.

http
POST /api/v1/auth/login
Content-Type: application/json

Request Body

json
{
  "email": "admin@geniushrm.test",
  "password": "Admin@1234"
}
FieldTypeRequiredDescription
emailstringYesRegistered user email
passwordstringYesUser password

Success Response

HTTP 200 OK

json
{
  "success": true,
  "message": "Login successful",
  "data": {
    "token": "1|eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...",
    "token_type": "Bearer",
    "user": {
      "id": 1,
      "name": "Admin User",
      "email": "admin@geniushrm.test",
      "role": "Admin",
      "created_at": "2026-01-01T00:00:00.000000Z"
    }
  }
}

Error Response — Invalid Credentials

HTTP 401 Unauthorized

json
{
  "success": false,
  "message": "Invalid credentials. Please check your email and password."
}

Error Response — Validation Failed

HTTP 422 Unprocessable Entity

json
{
  "success": false,
  "message": "The given data was invalid.",
  "errors": {
    "email": ["The email field is required."]
  }
}

Using the Token

Once you have the token, include it in all subsequent requests:

http
Authorization: Bearer 1|eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9...

Token Security

Store tokens securely. Do not log tokens or expose them in URLs. Use environment variables or secure vaults in your application.


Logout

Revoke the current token, immediately invalidating it.

http
POST /api/v1/auth/logout
Authorization: Bearer {token}

Request Body

None required.

Success Response

HTTP 200 OK

json
{
  "success": true,
  "message": "Logged out successfully"
}

After logout, the token is deleted from the database. Any further requests using this token will receive a 401 Unauthorized response.


Get Current User

Retrieve the profile of the currently authenticated user.

http
GET /api/v1/auth/me
Authorization: Bearer {token}

Success Response

HTTP 200 OK

json
{
  "success": true,
  "data": {
    "id": 1,
    "name": "Admin User",
    "email": "admin@geniushrm.test",
    "role": "Admin",
    "permissions": [
      "employees.view",
      "employees.create",
      "employees.edit",
      "employees.delete",
      "payroll.run",
      "payroll.approve",
      "settings.access"
    ],
    "employee": {
      "id": 1,
      "employee_id": "EMP-001",
      "department": "Human Resources",
      "position": "HR Director"
    },
    "created_at": "2026-01-01T00:00:00.000000Z",
    "last_login_at": "2026-04-03T14:22:11.000000Z"
  }
}

Token Expiry

By default, API tokens do not expire. You can configure token expiry in config/sanctum.php:

php
'expiration' => 60 * 24 * 30, // 30 days in minutes

When a token expires, requests return:

HTTP 401 Unauthorized

json
{
  "success": false,
  "message": "Token has expired. Please log in again."
}

Multiple Tokens per User

A single user can have multiple active tokens (useful for mobile app + API client scenarios). Each login call creates a new token. Use the logout endpoint to revoke a specific token. Admins can revoke all tokens for a user via the Admin panel under Users → Revoke All Tokens.

Released under the MIT License.