MENU navbar-image

Introduction

This documentation aims to provide all the information you need to work with our API.

<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_BEARER_TOKEN}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve a user token by calling the login endpoint or register endpoint for new users.

Academic Information Management

Endpoints for managing academic informations of students

Get the current authenticated user's academic information.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/ai" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/ai"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "id": 1,
    "current_status": {
        "id": 2,
        "name": "Undergraduate"
    },
    "high_schools_attended": []
}
 

Example response (404):


{
    "message": "Academic information not found",
    "academic_information": null
}
 

Request      

GET api/ai

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Create a new academic information entry.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/ai" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"current_status\": \"consequatur\",
    \"user_id\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/ai"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "current_status": "consequatur",
    "user_id": "consequatur"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/ai

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

current_status   string   

the id of the current status of the student. Example: consequatur

user_id   string   

the id of the student this value is used to check and avoid creating redudant entries. Example: consequatur

Update an academic information entry.

requires authentication

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/ai/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"current_status\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/ai/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "current_status": "consequatur"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/ai/{id}

PATCH api/ai/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the ai. Example: 1

Body Parameters

current_status   string   

the id of the current status of the student. Example: consequatur

user_id   string  optional  

the id of the student this value is used to check and avoid creating redudant entries.

Admin Notification Management

Endpoints to handle admin-scoped notifications (listing, viewing and marking as read).

These endpoints return enriched information via the AdminNotificationResource and support filtering by read/unread and pagination. They are scoped to the authenticated admin (results limited to notifications intended for the authenticated admin).

Example: GET /api/admin/admin_notifications?status=unread&paginated=true

Display a listing of the resource.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/admin_notifications" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/admin_notifications"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:57.079077Z"
}
 

Request      

GET api/admin/admin_notifications

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Display the specified resource.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/admin_notifications/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/admin_notifications/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:57.083638Z"
}
 

Request      

GET api/admin/admin_notifications/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the admin notification. Example: 1

POST api/admin/admin_notifications/read-all

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/admin_notifications/read-all" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/admin_notifications/read-all"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/admin/admin_notifications/read-all

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Adviser Management

Manage adviser-student assignments

Get the adviser assigned to a student.

requires authentication

Student can view their own adviser, admins can view any student's adviser.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/my-adviser?student_id=17" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/my-adviser"
);

const params = {
    "student_id": "17",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"data": {"id": 5, "name": "Dr. Smith", "email": "smith@example.com", ...}}
 

Example response (404):


{
    "message": "Student has no adviser assigned"
}
 

Request      

GET api/my-adviser

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

student_id   integer  optional  

The ID of the student (if not provided, uses authenticated user) Example: 17

Get statistics for an adviser.

requires authentication

Adviser can view their own stats, admins can view any adviser's stats.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/my-adviser-stats?adviser_id=17" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/my-adviser-stats"
);

const params = {
    "adviser_id": "17",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"adviser_id": 5, "total_assigned_students": 12, "students": [...]}
 

Request      

GET api/my-adviser-stats

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

adviser_id   integer  optional  

The ID of the adviser (if not provided, uses authenticated adviser user) Example: 17

Get all students assigned to an adviser.

requires authentication

Adviser can view their own students, admins can view any adviser's students.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/my-adviser-students?adviser_id=17" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/my-adviser-students"
);

const params = {
    "adviser_id": "17",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"data": [{"id": 3, "name": "John Doe", "email": "john@example.com", ...}], "total": 1}
 

Request      

GET api/my-adviser-students

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

adviser_id   integer  optional  

The ID of the adviser (if not provided, uses authenticated adviser user) Example: 17

Assign a student to an adviser.

requires authentication

Only admins can assign students to advisers.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/advisers/assign-student" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"adviser_id\": 17,
    \"student_id\": 17
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/advisers/assign-student"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "adviser_id": 17,
    "student_id": 17
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "message": "Student assigned to adviser successfully",
    "adviser_id": 5,
    "student_id": 3
}
 

Example response (404):


{
    "message": "Adviser or student not found"
}
 

Example response (422):


{"message": "User is not an adviser" or "User is not a student" or "Student already assigned to this adviser"}
 

Request      

POST api/admin/advisers/assign-student

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

adviser_id   integer   

The ID of the adviser user Example: 17

student_id   integer   

The ID of the student user Example: 17

Remove a student from an adviser.

requires authentication

Only admins can remove student assignments.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/advisers/remove-student" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"adviser_id\": 17,
    \"student_id\": 17
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/advisers/remove-student"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "adviser_id": 17,
    "student_id": 17
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "message": "Student removed from adviser successfully"
}
 

Example response (404):


{
    "message": "Assignment not found"
}
 

Request      

POST api/admin/advisers/remove-student

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

adviser_id   integer   

The ID of the adviser user Example: 17

student_id   integer   

The ID of the student user Example: 17

List all advisers.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/advisers" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/advisers"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"data": [{"id": 5, "name": "Dr. Smith", "email": "smith@example.com", ...}], "total": 5}
 

Request      

GET api/admin/advisers

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Get statistics for an adviser.

requires authentication

Adviser can view their own stats, admins can view any adviser's stats.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/advisers/stats?adviser_id=17" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/advisers/stats"
);

const params = {
    "adviser_id": "17",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"adviser_id": 5, "total_assigned_students": 12, "students": [...]}
 

Request      

GET api/admin/advisers/stats

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

adviser_id   integer  optional  

The ID of the adviser (if not provided, uses authenticated adviser user) Example: 17

Get all students assigned to an adviser.

requires authentication

Adviser can view their own students, admins can view any adviser's students.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/advisers/students?adviser_id=17" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/advisers/students"
);

const params = {
    "adviser_id": "17",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"data": [{"id": 3, "name": "John Doe", "email": "john@example.com", ...}], "total": 1}
 

Request      

GET api/admin/advisers/students

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

adviser_id   integer  optional  

The ID of the adviser (if not provided, uses authenticated adviser user) Example: 17

Get the adviser assigned to a student.

requires authentication

Student can view their own adviser, admins can view any student's adviser.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/students/adviser?student_id=17" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/students/adviser"
);

const params = {
    "student_id": "17",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"data": {"id": 5, "name": "Dr. Smith", "email": "smith@example.com", ...}}
 

Example response (404):


{
    "message": "Student has no adviser assigned"
}
 

Request      

GET api/admin/students/adviser

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

student_id   integer  optional  

The ID of the student (if not provided, uses authenticated user) Example: 17

Authentication Endpoints

Endpoints to handle authentication.

Register a new user

This endpoint handles user registration. It accepts a name, email, and password, creates a new user, and returns an authentication token.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/register" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"John Doe\",
    \"email\": \"john@ollav.com\",
    \"password\": \"O[2UZ5ij-e\\/dl4m{o,\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/register"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "John Doe",
    "email": "john@ollav.com",
    "password": "O[2UZ5ij-e\/dl4m{o,"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/register

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

The name of the user. Must not be greater than 255 characters. Example: John Doe

email   string   

The email of the user. Must be a valid email address. Must not be greater than 255 characters. Example: john@ollav.com

password   string   

The password for the user. Must be at least 8 characters. Example: O[2UZ5ij-e/dl4m{o,

Login a new user

This endpoint handles user signin process. It accepts an email and password, Check the user, and returns an authentication token.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/login" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"john@ollav.com\",
    \"password\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/login"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "john@ollav.com",
    "password": "consequatur"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/login

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

email   string   

The email of the user. Must be a valid email address. Example: john@ollav.com

password   string   

The password for the user. Example: consequatur

Logout the authenticated user

requires authentication

This endpoint handles user signing out.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/logout" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/logout"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/logout

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Bundles Management

List available bundles

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/bundles" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/bundles"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, List of active bundles with price and currency):



 

Request      

GET api/bundles

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Create new bundle (admin only)

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/bundles" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Premium Pack\",
    \"credits\": 300,
    \"price\": 50,
    \"currency\": \"BIF\",
    \"description\": \"Dolores dolorum amet iste laborum eius est dolor.\",
    \"is_active\": true
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/bundles"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Premium Pack",
    "credits": 300,
    "price": 50,
    "currency": "BIF",
    "description": "Dolores dolorum amet iste laborum eius est dolor.",
    "is_active": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/admin/bundles

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

Bundle name Example: Premium Pack

credits   integer   

Number of credits Example: 300

price   number   

Price amount Example: 50

currency   string   

Currency code. Allowed values: USD, EUR, GBP, BIF Example: BIF

description   string  optional  

Optional description Example: Dolores dolorum amet iste laborum eius est dolor.

is_active   boolean  optional  

Active status Example: true

Update bundle (admin only)

requires authentication

Example request:
curl --request PATCH \
    "https://vps117355.serveur-vps.net/api/admin/bundles/consequatur" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"vmqeopfuudtdsufvyvddq\",
    \"credits\": 2,
    \"price\": 45,
    \"currency\": \"USD\",
    \"description\": \"Dolores dolorum amet iste laborum eius est dolor.\",
    \"is_active\": false
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/bundles/consequatur"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "vmqeopfuudtdsufvyvddq",
    "credits": 2,
    "price": 45,
    "currency": "USD",
    "description": "Dolores dolorum amet iste laborum eius est dolor.",
    "is_active": false
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/admin/bundles/{bundleId}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

bundleId   string   

Example: consequatur

Body Parameters

name   string  optional  

Must not be greater than 255 characters. Example: vmqeopfuudtdsufvyvddq

credits   integer  optional  

Must be at least 1. Example: 2

price   number  optional  

Must be at least 0. Example: 45

currency   string  optional  

Currency code. Allowed values: USD, EUR, GBP, BIF Example: USD

description   string  optional  

Example: Dolores dolorum amet iste laborum eius est dolor.

is_active   boolean  optional  

Example: false

Delete bundle (admin only)

requires authentication

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/admin/bundles/consequatur" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/bundles/consequatur"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/admin/bundles/{bundleId}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

bundleId   string   

Example: consequatur

Contact Management

Endpoints for managing contacts

Store a newly created contact.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/contacts" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"qkunze@example.com\",
    \"phone\": \"consequatur\",
    \"address\": \"mqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjury\",
    \"personal_information_id\": 17
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/contacts"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "qkunze@example.com",
    "phone": "consequatur",
    "address": "mqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjury",
    "personal_information_id": 17
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/contacts

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

email   string  optional  

the email of the contact. Must be a valid email address. Example: qkunze@example.com

phone   string   

the phone number of the contact. Example: consequatur

address   string  optional  

the address of the contact. Must be at least 6 characters. Example: mqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjury

personal_information_id   integer   

the id of the personal information associated with the contact. Example: 17

Update the specified contact.

requires authentication

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/contacts/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"qkunze@example.com\",
    \"address\": \"opfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjuryvoj\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/contacts/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "email": "qkunze@example.com",
    "address": "opfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjuryvoj"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/contacts/{id}

PATCH api/contacts/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the contact. Example: 1

Body Parameters

email   string  optional  

the email of the contact. Must be a valid email address. Example: qkunze@example.com

phone   string  optional  

the phone number of the contact.

address   string  optional  

the address of the contact. Must be at least 6 characters. Example: opfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjuryvoj

Delete the specified contact.

requires authentication

this must be done by the owning user or an admin.

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/contacts/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/contacts/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/contacts/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the contact. Example: 1

Credit Management

User Credit Management Endpoints to manage user credits.

Add credits to user

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/users/1/credits/add" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"amount\": 50,
    \"description\": \"Manual top-up\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/users/1/credits/add"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "amount": 50,
    "description": "Manual top-up"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Credits added successfully):



 

Request      

POST api/users/{user_id}/credits/add

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

user_id   integer   

The ID of the user. Example: 1

Body Parameters

amount   integer   

Amount of credits to add (minimum 1) Example: 50

description   string  optional  

Optional description Example: Manual top-up

Deduct credits from user

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/users/1/credits/deduct" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"amount\": 20,
    \"description\": \"Service usage\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/users/1/credits/deduct"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "amount": 20,
    "description": "Service usage"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Credits deducted successfully):



 

Example response (400, Insufficient credits):



 

Example response (404, No credit record found):



 

Request      

POST api/users/{user_id}/credits/deduct

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

user_id   integer   

The ID of the user. Example: 1

Body Parameters

amount   integer   

Amount of credits to deduct Example: 20

description   string  optional  

Optional description Example: Service usage

Get user credit balance

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/users/1/credits/balance" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/users/1/credits/balance"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Current credit balance):



 

Request      

GET api/users/{user_id}/credits/balance

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

user_id   integer   

The ID of the user. Example: 1

Get user credit history

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/users/1/credits/history" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/users/1/credits/history"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Credit history not implemented yet):



 

Request      

GET api/users/{user_id}/credits/history

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

user_id   integer   

The ID of the user. Example: 1

User Transaction Management Endpoints to record and view user transactions (e.g., credit purchases, application fees). Used primarily for tracking and displaying transaction history.

Record a transaction

requires authentication

Typically used when a user purchases credits or pays an application fee.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/users/1/transactions" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"transaction_type\": \"credit_purchase\",
    \"amount\": 100
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/users/1/transactions"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "transaction_type": "credit_purchase",
    "amount": 100
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Transaction recorded successfully):



 

Request      

POST api/users/{user_id}/transactions

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

user_id   integer   

The ID of the user. Example: 1

Body Parameters

transaction_type   string   

Type of transaction Example: credit_purchase

amount   integer   

Amount in credits or currency units Example: 100

Show a transaction

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/users/1/transactions/consequatur" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/users/1/transactions/consequatur"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Transaction details):



 

Example response (404, Transaction not found):



 

Request      

GET api/users/{user_id}/transactions/{transactionId}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

user_id   integer   

The ID of the user. Example: 1

transactionId   string   

Example: consequatur

List user transaction history

requires authentication

Returns paginated list of all recorded transactions.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/users/1/transactions?per_page=20" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/users/1/transactions"
);

const params = {
    "per_page": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated list of transactions):



 

Request      

GET api/users/{user_id}/transactions

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

user_id   integer   

The ID of the user. Example: 1

Query Parameters

per_page   integer  optional  

Number of items per page Example: 20

University Credit Management Endpoints to manage credits allocated to universities (e.g., for application processing).

Add credits to university

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/universities/019b0704-3838-7301-bd28-6a40c2eb29df/credits/add" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"amount\": 100,
    \"description\": \"Bulk purchase\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/universities/019b0704-3838-7301-bd28-6a40c2eb29df/credits/add"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "amount": 100,
    "description": "Bulk purchase"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Credits added successfully):



 

Request      

POST api/admin/universities/{university_id}/credits/add

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

university_id   string   

The ID of the university. Example: 019b0704-3838-7301-bd28-6a40c2eb29df

Body Parameters

amount   integer   

Amount of credits to add (minimum 1) Example: 100

description   string  optional  

Optional description Example: Bulk purchase

Deduct credits from university

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/universities/019b0704-3838-7301-bd28-6a40c2eb29df/credits/deduct" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"amount\": 10,
    \"description\": \"Application processed\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/universities/019b0704-3838-7301-bd28-6a40c2eb29df/credits/deduct"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "amount": 10,
    "description": "Application processed"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Credits deducted successfully):



 

Example response (400, Insufficient credits):



 

Example response (404, No credit record found):



 

Request      

POST api/admin/universities/{university_id}/credits/deduct

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

university_id   string   

The ID of the university. Example: 019b0704-3838-7301-bd28-6a40c2eb29df

Body Parameters

amount   integer   

Amount of credits to deduct Example: 10

description   string  optional  

Optional description Example: Application processed

Get university credit balance

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/universities/019b0704-3838-7301-bd28-6a40c2eb29df/credits/balance" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/universities/019b0704-3838-7301-bd28-6a40c2eb29df/credits/balance"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Current credit balance):



 

Request      

GET api/admin/universities/{university_id}/credits/balance

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

university_id   string   

The ID of the university. Example: 019b0704-3838-7301-bd28-6a40c2eb29df

Major Credit Management Endpoints to manage credits allocated to majors (e.g., application cost per major).

Add credits to major

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/majors/1/credits/add" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"amount\": 100,
    \"description\": \"Bulk purchase\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/majors/1/credits/add"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "amount": 100,
    "description": "Bulk purchase"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Credits added successfully):



 

Request      

POST api/admin/majors/{major_id}/credits/add

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

major_id   integer   

The ID of the major. Example: 1

Body Parameters

amount   integer   

Amount of credits to add (minimum 1) Example: 100

description   string  optional  

Optional description Example: Bulk purchase

Deduct credits from major

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/majors/1/credits/deduct" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"amount\": 10,
    \"description\": \"Application processed\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/majors/1/credits/deduct"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "amount": 10,
    "description": "Application processed"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Credits deducted successfully):



 

Example response (400, Insufficient credits):



 

Example response (404, No credit record found):



 

Request      

POST api/admin/majors/{major_id}/credits/deduct

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

major_id   integer   

The ID of the major. Example: 1

Body Parameters

amount   integer   

Amount of credits to deduct Example: 10

description   string  optional  

Optional description Example: Application processed

Get major credit balance

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/majors/1/credits/balance" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/majors/1/credits/balance"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Current credit balance):



 

Request      

GET api/admin/majors/{major_id}/credits/balance

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

major_id   integer   

The ID of the major. Example: 1

Credit Purchases & Bundle Payments

Submit bundle purchase with payment proof

requires authentication

Allows a user to buy a credit bundle via offline/manual payment (e.g., mobile money, bank transfer). User selects a bundle and uploads a screenshot/receipt as proof. The request becomes pending until an admin approves or rejects it.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/users/1/credit-purchases" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "bundle_id=019b1de6-8c48-7396-9209-11c69db9e53b"\
    --form "proof_image=@/tmp/phpgZCfS1" 
const url = new URL(
    "https://vps117355.serveur-vps.net/api/users/1/credit-purchases"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('bundle_id', '019b1de6-8c48-7396-9209-11c69db9e53b');
body.append('proof_image', document.querySelector('input[name="proof_image"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());

Example response (201, Proof submitted successfully. Awaiting admin approval.):



 

Example response (422, Validation errors (invalid bundle, wrong file type, etc.)):



 

Request      

POST api/users/{user_id}/credit-purchases

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

URL Parameters

user_id   integer   

The ID of the user. Example: 1

Body Parameters

bundle_id   string   

UUID of the selected bundle Example: 019b1de6-8c48-7396-9209-11c69db9e53b

proof_image   file   

Image proof of payment (screenshot/receipt). Allowed: jpeg, png, jpg. Max 5MB. Example: /tmp/phpgZCfS1

View payment proof image

requires authentication

Returns the uploaded proof image for a credit purchase. Accessible by the user who submitted it or by admins.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/credit-purchases/consequatur/proof" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/credit-purchases/consequatur/proof"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Returns the image file):



 

Example response (404, Image not found or purchase does not exist):



 

Request      

GET api/credit-purchases/{purchaseId}/proof

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

purchaseId   string   

Example: consequatur

List pending credit purchases (admin only)

requires authentication

Returns paginated list of purchases awaiting approval, with user and bundle details.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/credit-purchases/pending" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/credit-purchases/pending"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated list of pending purchases):



 

Request      

GET api/admin/credit-purchases/pending

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Approve credit purchase (admin only)

requires authentication

On approval:

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/credit-purchases/consequatur/approve" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/credit-purchases/consequatur/approve"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Purchase approved and credits added successfully):



 

Example response (400, Purchase already processed):



 

Example response (404, Purchase not found):



 

Request      

POST api/admin/credit-purchases/{purchaseId}/approve

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

purchaseId   string   

Example: consequatur

Reject credit purchase (admin only)

requires authentication

Rejects the purchase and records an admin note (reason).

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/credit-purchases/consequatur/reject" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"admin_note\": \"Payment not received or proof unclear\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/credit-purchases/consequatur/reject"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "admin_note": "Payment not received or proof unclear"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Purchase rejected successfully):



 

Example response (400, Purchase already processed):



 

Example response (422, Missing or invalid admin_note):



 

Request      

POST api/admin/credit-purchases/{purchaseId}/reject

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

purchaseId   string   

Example: consequatur

Body Parameters

admin_note   string   

Reason for rejection (visible to user) Example: Payment not received or proof unclear

Current Status Management

Manage the current status in the system

List of all the current status a student can have.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/current_status" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/current_status"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:57.036136Z"
}
 

Request      

GET api/admin/current_status

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Store a newly created current status.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/current_status" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/current_status"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "consequatur"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/admin/current_status

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

the name of the current status. Example: consequatur

Show one current status.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/current_status/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/current_status/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:57.041967Z"
}
 

Request      

GET api/admin/current_status/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the current status. Example: 1

Update the specified resource in storage.

requires authentication

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/admin/current_status/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/current_status/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "consequatur"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/admin/current_status/{id}

PATCH api/admin/current_status/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the current status. Example: 1

Body Parameters

name   string  optional  

Example: consequatur

Remove the specified resource from storage.

requires authentication

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/admin/current_status/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/current_status/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/admin/current_status/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the current status. Example: 1

Document Locker

Endpoints to manage the document locker

Show the content of the document locker

requires authentication

The document locker that is associated with authenticated user also the user has to be as student.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/document_locker" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/document_locker"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.781588Z"
}
 

Request      

GET api/document_locker

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Show one specific document locker by user id

requires authentication

can be used by the user owner of the token or an admin to fetch the document locker of a specific user

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/document_locker/consequatur?id=1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/document_locker/consequatur"
);

const params = {
    "id": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.785696Z"
}
 

Request      

GET api/document_locker/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the document locker. Example: consequatur

Query Parameters

id   string   

The id of the user whose document locker you want to fetch. Example: 1

List all exam results for the authenticated user's locker.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/exam_results" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/exam_results"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.789859Z"
}
 

Request      

GET api/exam_results

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Show a specific exam result in the authenticated user's locker.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/exam_results/consequatur" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/exam_results/consequatur"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.794374Z"
}
 

Request      

GET api/exam_results/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the exam result. Example: consequatur

Delete a specific exam result from the authenticated user's locker.

requires authentication

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/exam_results/consequatur" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/exam_results/consequatur"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/exam_results/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the exam result. Example: consequatur

List all other documents for the authenticated user's locker.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/other_documents" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/other_documents"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.802181Z"
}
 

Request      

GET api/other_documents

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Show a specific other document in the authenticated user's locker.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/other_documents/consequatur" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/other_documents/consequatur"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.806272Z"
}
 

Request      

GET api/other_documents/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the other document. Example: consequatur

Delete a specific other document from the authenticated user's locker.

requires authentication

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/other_documents/consequatur" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/other_documents/consequatur"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/other_documents/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the other document. Example: consequatur

Setup or init a new document locker for the authenticated student

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/document_locker/setup" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/document_locker/setup"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/document_locker/setup

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Endpoint to upload documents to the authenticated student's locker.

requires authentication

Supported upload types (send as upload_type):

Files are validated with extensions and size limits (see controller validation rules).

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/document_locker/upload" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"upload_type\": \"transcript\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/document_locker/upload"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "upload_type": "transcript"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/document_locker/upload

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

upload_type   string   

The type of upload. Example: transcript

Endpoint to replace a document already stored in the locker.

requires authentication

Use upload_type and doc_id to select which document to replace, then send the same file param that would be used for an upload of that type. Supported upload_type values and file params are the same as for the upload endpoint (transcript, exam_results, recommendation_letter, personal_statement, resume, passport, others).

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/document_locker/replace" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"upload_type\": \"transcript\",
    \"doc_id\": 17
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/document_locker/replace"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "upload_type": "transcript",
    "doc_id": 17
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/document_locker/replace

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

upload_type   string   

The type of upload. Example: transcript

doc_id   integer   

The id of the document to replace. Example: 17

Submit or update the student's overall academic grade.

requires authentication

This endpoint allows a student to manually enter their academic average (e.g., moyenne générale from Diplôme d'État for Burundian users, GPA for international users, etc.). The submitted grade is stored in the Document Locker section and requires admin verification before it can be used in university/major recommendation matching.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/profile/grade" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"grading_system\": \"percentage_100\",
    \"grade_value\": 11613.31890586,
    \"description\": \"\\\"Moyenne générale - Diplôme d\'État 2024\\\"\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/profile/grade"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "grading_system": "percentage_100",
    "grade_value": 11613.31890586,
    "description": "\"Moyenne générale - Diplôme d'État 2024\""
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "message": "Grade submitted successfully",
    "grade": {
        "id": 45,
        "user_id": 123,
        "grading_system": "percentage_100",
        "grade_value": 76.5,
        "description": "Moyenne générale - Diplôme d'État 2024",
        "status_id": 2,
        "verified_at": null,
        "created_at": "2025-12-15T10:30:00.000000Z",
        "updated_at": "2025-12-15T10:30:00.000000Z"
    }
}
 

Example response (403):


{
    "error": "Not a student"
}
 

Example response (422):


{
    "message": "The given data was invalid.",
    "errors": {
        "grading_system": [
            "The selected grading system is invalid."
        ],
        "grade_value": [
            "The grade value must be a number."
        ]
    }
}
 

Request      

POST api/profile/grade

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

grading_system   string   

The grading system used. Must be one of:

  • "percentage_100" (default for Burundi users, e.g., 76.5)
  • "gpa_4_0" (US/international GPA, e.g., 3.2)
  • "out_of_20" (French-system score, e.g., 15.4)
  • "other" (for any non-standard format) Example: percentage_100
grade_value   number   

The numeric value of the grade (without symbols or units). Examples:

  • 76.5 for percentage_100
  • 3.2 for gpa_4_0
  • 15.4 for out_of_20 Example: 11613.31890586
description   string  optional  

nullable Optional description of the grade. Example: "Moyenne générale - Diplôme d'État 2024"

Admin verification of a specific uploaded document

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/upload_validation" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"document_locker_id\": 17,
    \"document_type\": \"consequatur\",
    \"document_id\": 17,
    \"verdict\": \"consequatur\",
    \"feedback\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/upload_validation"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "document_locker_id": 17,
    "document_type": "consequatur",
    "document_id": 17,
    "verdict": "consequatur",
    "feedback": "consequatur"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/admin/upload_validation

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

document_locker_id   integer   

Example: 17

document_type   string   

One of: transcript, recommendation_letter, personal_statement, resume, passport, exam_results, others Example: consequatur

document_id   integer   

Example: 17

verdict   string   

Must be: approved or rejected Example: consequatur

feedback   string  optional  

nullable Required if verdict is rejected Example: consequatur

Endpoints

Return precomputed dashboard metrics or a timeseries over a date range.

requires authentication

Query params:

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/metrics" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/metrics"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:57.118326Z"
}
 

Request      

GET api/admin/metrics

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

POST api/admin/metrics/recompute

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/metrics/recompute" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/metrics/recompute"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/admin/metrics/recompute

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Return aggregated per-university metrics over a date range (or single day if start=end)

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/metrics/universities" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/metrics/universities"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:57.123037Z"
}
 

Request      

GET api/admin/metrics/universities

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

List metric events with optional filters

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/metrics/events" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/metrics/events"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:57.126437Z"
}
 

Request      

GET api/admin/metrics/events

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Backfill metrics for a date range (admin-triggered)

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/metrics/backfill" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"start\": \"2026-01-11T08:46:57\",
    \"end\": \"2107-02-09\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/metrics/backfill"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "start": "2026-01-11T08:46:57",
    "end": "2107-02-09"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/admin/metrics/backfill

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

start   string   

Must be a valid date. Example: 2026-01-11T08:46:57

end   string   

Must be a valid date. Must be a date after or equal to start. Example: 2107-02-09

HighSchool Management

Endpoints for managing highschools

Store a newly created highSchool.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/highschools" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"vmqeopfuudtdsufvyvddq\",
    \"country\": \"amniihfqcoynlazghdtqt\",
    \"years\": 16,
    \"academic_information_id\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/highschools"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "vmqeopfuudtdsufvyvddq",
    "country": "amniihfqcoynlazghdtqt",
    "years": 16,
    "academic_information_id": "consequatur"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/highschools

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

Must not be greater than 255 characters. Example: vmqeopfuudtdsufvyvddq

country   string   

Must not be greater than 100 characters. Example: amniihfqcoynlazghdtqt

years   integer   

the amount of years spent there. Must be at least 1. Must not be greater than 30. Example: 16

since   string  optional  

the year he/she began studying at the highSchool,.

until   string  optional  

the last year.

academic_information_id   string   

The id of an existing record in the academic_information table. Example: consequatur

Update the specified highSchool.

requires authentication

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/highschools/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"vmqeopfuudtdsufvyvddq\",
    \"country\": \"amniihfqcoynlazghdtqt\",
    \"years\": 16
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/highschools/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "vmqeopfuudtdsufvyvddq",
    "country": "amniihfqcoynlazghdtqt",
    "years": 16
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/highschools/{id}

PATCH api/highschools/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the highschool. Example: 1

Body Parameters

name   string  optional  

Must not be greater than 255 characters. Example: vmqeopfuudtdsufvyvddq

country   string  optional  

Must not be greater than 100 characters. Example: amniihfqcoynlazghdtqt

years   integer  optional  

Must be at least 1. Must not be greater than 30. Example: 16

since   string  optional  
until   string  optional  
academic_information_id   string  optional  

The id of an existing record in the academic_information table.

Remove the specified highSchool.

requires authentication

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/highschools/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/highschools/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/highschools/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the highschool. Example: 1

Majors Management

Get all majors

requires authentication

Returns a paginated list of majors.
You can optionally filter by degree or university.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/majors?degree=Bachelor&university_id=42&page=1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/majors"
);

const params = {
    "degree": "Bachelor",
    "university_id": "42",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.969747Z"
}
 

Request      

GET api/majors

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

degree   string  optional  

Filter by degree level (Bachelor, Master, PHD). Example: Bachelor

university_id   integer  optional  

Filter by university id. Example: 42

page   integer  optional  

Page number for pagination. Example: 1

Get a single major

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/majors/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/majors/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "id": 1,
    "name": "Computer Science",
    "description": "Software engineering & algorithms",
    "degree": "Bachelor",
    "is_applications_open": true,
    "minimum_gpa_grades": "3.0 / 75%",
    "budget_range": "$8k–12k/year",
    "is_scholarship_available": true,
    "university": {
        "id": 42,
        "name": "Example University"
    }
}
 

Request      

GET api/majors/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the major. Example: 1

Create a new major

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/majors" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"vmqeopfuudtdsufvyvddq\",
    \"description\": \"Dolores dolorum amet iste laborum eius est dolor.\",
    \"degree\": \"Bachelor\",
    \"is_applications_open\": false,
    \"minimum_gpa_grades\": \"dtdsufvyvddqamniihfqc\",
    \"budget_range\": \"oynlazghdtqtqxbajwbpi\",
    \"is_scholarship_available\": true,
    \"university_id\": \"consequatur\",
    \"application_deadline\": \"2026-01-11T08:46:57\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/majors"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "vmqeopfuudtdsufvyvddq",
    "description": "Dolores dolorum amet iste laborum eius est dolor.",
    "degree": "Bachelor",
    "is_applications_open": false,
    "minimum_gpa_grades": "dtdsufvyvddqamniihfqc",
    "budget_range": "oynlazghdtqtqxbajwbpi",
    "is_scholarship_available": true,
    "university_id": "consequatur",
    "application_deadline": "2026-01-11T08:46:57"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "id": 11,
    "name": "Data Science",
    "description": "Machine learning & big-data analytics",
    "degree": "Master",
    "is_applications_open": true,
    "minimum_gpa_grades": "3.5 / 80%",
    "budget_range": "$10k–15k/year",
    "is_scholarship_available": false,
    "university": {
        "id": 5,
        "name": "Tech University"
    }
}
 

Example response (403):


{
    "message": "Forbidden"
}
 

Request      

POST api/admin/majors

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

Must not be greater than 255 characters. Example: vmqeopfuudtdsufvyvddq

description   string  optional  

Example: Dolores dolorum amet iste laborum eius est dolor.

degree   string   

Example: Bachelor

Must be one of:
  • Bachelor
  • Master
  • PHD
is_applications_open   boolean   

Example: false

minimum_gpa_grades   string   

Must not be greater than 50 characters. Example: dtdsufvyvddqamniihfqc

budget_range   string   

Must not be greater than 100 characters. Example: oynlazghdtqtqxbajwbpi

is_scholarship_available   boolean   

Example: true

university_id   string   

The id of an existing record in the universities table. Example: consequatur

application_deadline   string  optional  

Must be a valid date. Example: 2026-01-11T08:46:57

Manager Management

Manage manager-student assignments

Get the manager assigned to a student.

requires authentication

Student can view their own manager, admins can view any student's manager.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/my-manager?student_id=17" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/my-manager"
);

const params = {
    "student_id": "17",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"data": {"id": 5, "name": "Manager Smith", "email": "smith@example.com", ...}}
 

Example response (404):


{
    "message": "Student has no manager assigned"
}
 

Request      

GET api/my-manager

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

student_id   integer  optional  

The ID of the student (if not provided, uses authenticated user) Example: 17

Get statistics for a manager.

requires authentication

Manager can view their own stats, admins can view any manager's stats.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/my-manager-stats?manager_id=17" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/my-manager-stats"
);

const params = {
    "manager_id": "17",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"manager_id": 5, "total_assigned_students": 12, "students": [...]}
 

Request      

GET api/my-manager-stats

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

manager_id   integer  optional  

The ID of the manager (if not provided, uses authenticated manager user) Example: 17

Get all students assigned to a manager.

requires authentication

Manager can view their own students, admins can view any manager's students.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/my-manager-students?manager_id=17" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/my-manager-students"
);

const params = {
    "manager_id": "17",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"data": [{"id": 3, "name": "John Doe", "email": "john@example.com", ...}], "total": 1}
 

Request      

GET api/my-manager-students

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

manager_id   integer  optional  

The ID of the manager (if not provided, uses authenticated manager user) Example: 17

Assign a student to a manager.

requires authentication

Only admins can assign students to managers.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/managers/assign-student" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"manager_id\": 17,
    \"student_id\": 17
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/managers/assign-student"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "manager_id": 17,
    "student_id": 17
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "message": "Student assigned to manager successfully",
    "manager_id": 5,
    "student_id": 3
}
 

Example response (404):


{
    "message": "Manager or student not found"
}
 

Example response (422):


{"message": "User is not a manager" or "User is not a student" or "Student already assigned to this manager"}
 

Request      

POST api/admin/managers/assign-student

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

manager_id   integer   

The ID of the manager user Example: 17

student_id   integer   

The ID of the student user Example: 17

Remove a student from a manager.

requires authentication

Only admins can remove student assignments.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/managers/remove-student" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"manager_id\": 17,
    \"student_id\": 17
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/managers/remove-student"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "manager_id": 17,
    "student_id": 17
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "message": "Student removed from manager successfully"
}
 

Example response (404):


{
    "message": "Assignment not found"
}
 

Request      

POST api/admin/managers/remove-student

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

manager_id   integer   

The ID of the manager user Example: 17

student_id   integer   

The ID of the student user Example: 17

List all managers.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/managers" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/managers"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"data": [{"id": 5, "name": "Manager Smith", "email": "smith@example.com", ...}], "total": 5}
 

Request      

GET api/admin/managers

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Get statistics for a manager.

requires authentication

Manager can view their own stats, admins can view any manager's stats.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/managers/stats?manager_id=17" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/managers/stats"
);

const params = {
    "manager_id": "17",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"manager_id": 5, "total_assigned_students": 12, "students": [...]}
 

Request      

GET api/admin/managers/stats

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

manager_id   integer  optional  

The ID of the manager (if not provided, uses authenticated manager user) Example: 17

Get all students assigned to a manager.

requires authentication

Manager can view their own students, admins can view any manager's students.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/managers/students?manager_id=17" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/managers/students"
);

const params = {
    "manager_id": "17",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"data": [{"id": 3, "name": "John Doe", "email": "john@example.com", ...}], "total": 1}
 

Request      

GET api/admin/managers/students

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

manager_id   integer  optional  

The ID of the manager (if not provided, uses authenticated manager user) Example: 17

Get the manager assigned to a student.

requires authentication

Student can view their own manager, admins can view any student's manager.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/students/manager?student_id=17" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/students/manager"
);

const params = {
    "student_id": "17",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{"data": {"id": 5, "name": "Manager Smith", "email": "smith@example.com", ...}}
 

Example response (404):


{
    "message": "Student has no manager assigned"
}
 

Request      

GET api/admin/students/manager

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

student_id   integer  optional  

The ID of the student (if not provided, uses authenticated user) Example: 17

Miscellaneous

Get the user by the token

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/user" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/user"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.568671Z"
}
 

Request      

GET api/user

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Check if the api is online

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/health" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/health"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "status": "OK"
}
 

Request      

GET api/health

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Personal Information

Manage personal informations of a student

Get the current authenticated user's personal information.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/pi" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/pi"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "id": 1,
    "date_of_birth": "1995-06-01",
    "gender": "Female",
    "nationality": "Kenya",
    "user_id": 5
}
 

Example response (404):


{
    "message": "Personal information not found",
    "personal_information": null
}
 

Request      

GET api/pi

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Store a newly created Personal info.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/pi/consequatur" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"date_of_birth\": \"2026-01-11T08:46:56\",
    \"gender\": \"consequatur\",
    \"nationality\": \"mqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjury\",
    \"user_id\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/pi/consequatur"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "date_of_birth": "2026-01-11T08:46:56",
    "gender": "consequatur",
    "nationality": "mqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjury",
    "user_id": "consequatur"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/pi/{user}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

user   string   

Example: consequatur

Body Parameters

date_of_birth   string   

Must be a valid date. Example: 2026-01-11T08:46:56

gender   string   

Example: consequatur

nationality   string   

Must be at least 4 characters. Example: mqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjury

user_id   string   

The id of an existing record in the users table. Example: consequatur

Update the specified personal information.

requires authentication

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/pi/consequatur" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"date_of_birth\": \"2026-01-11T08:46:56\",
    \"gender\": \"consequatur\",
    \"nationality\": \"mqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjury\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/pi/consequatur"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "date_of_birth": "2026-01-11T08:46:56",
    "gender": "consequatur",
    "nationality": "mqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjury"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "message": "Personal Information updated successfully",
    "personal_information": {
        "id": 1,
        "date_of_birth": "1995-06-01",
        "gender": "Female",
        "nationality": "Kenya"
    }
}
 

Request      

PUT api/pi/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the pi. Example: consequatur

Body Parameters

date_of_birth   string  optional  

Must be a valid date. Example: 2026-01-11T08:46:56

gender   string  optional  

Example: consequatur

nationality   string  optional  

Must be at least 4 characters. Example: mqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjury

Preferences and goals

Manage student preferences.

Get the current authenticated user's preferences.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/preferences" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/preferences"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "id": 1,
    "intended_field_of_study": "Computer Science",
    "min_budget": 5000,
    "max_budget": 20000,
    "currency": "USD",
    "scholarship_interest": true,
    "study_destinations": []
}
 

Example response (404):


{
    "message": "Preferences not found",
    "preferences": null
}
 

Request      

GET api/preferences

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Store a newly created preference.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/preferences" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"intended_field_of_study\": \"consequatur\",
    \"min_budget\": 11613.31890586,
    \"max_budget\": 11613.31890586,
    \"currency\": \"opfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjuryvoj\",
    \"user_id\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/preferences"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "intended_field_of_study": "consequatur",
    "min_budget": 11613.31890586,
    "max_budget": 11613.31890586,
    "currency": "opfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjuryvoj",
    "user_id": "consequatur"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/preferences

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

intended_field_of_study   string   

Example: consequatur

min_budget   number   

the least/minimum amount of money he/she can afford. Example: 11613.31890586

max_budget   number  optional  

the maximum he/she can pay for school. Example: 11613.31890586

currency   string   

Must be at least 3 characters. Example: opfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjuryvoj

user_id   string   

Example: consequatur

scholarship_interest   string  optional  
study_destination_ids   object  optional  

the school study destination are to be created by the admins, provide with an id or an array of ids.

Update the specified preference.

requires authentication

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/preferences/consequatur" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"min_budget\": 11613.31890586,
    \"max_budget\": 11613.31890586,
    \"currency\": \"opfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjuryvoj\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/preferences/consequatur"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "min_budget": 11613.31890586,
    "max_budget": 11613.31890586,
    "currency": "opfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjuryvoj"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/preferences/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the preference. Example: consequatur

Body Parameters

intended_field_of_study   string  optional  
min_budget   number  optional  

Example: 11613.31890586

max_budget   number  optional  

Example: 11613.31890586

currency   string  optional  

Must be at least 3 characters. Example: opfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjuryvoj

scholarship_interest   string  optional  
study_destination_ids   object  optional  

Special Needs Management

Endpoints to manage special needs

Store a newly created special need.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/special_needs" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"needs\": []
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/special_needs"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "needs": []
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/special_needs

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

needs   object   

the needs here is to be an array of needs. come up with a list of needs or let the user enter one Exemple: "needs": {"visa_support": "yes","disabilities": "eyes problems" }.

Update the specified special needs of a student.

requires authentication

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/special_needs/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
const url = new URL(
    "https://vps117355.serveur-vps.net/api/special_needs/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "PUT",
    headers,
}).then(response => response.json());

Request      

PUT api/special_needs/{id}

PATCH api/special_needs/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the special need. Example: 1

Body Parameters

needs   object  optional  

the same as the store endpoints, but here the array that you send will replace the old one, it's doesn't updating only one but the whole object of needs with the one you provide here Exemple: "needs": {"visa_support": "yes","disabilities": "eyes problems" }.

Remove the specified resource from storage.

requires authentication

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/special_needs/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/special_needs/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/special_needs/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the special need. Example: 1

Student Conversations

Message box between students and uni staff. Students can start conversations with university staff. Assigned managers/advisers for the student and admins can participate and reply.

List conversations relevant to the authenticated user.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/conversations" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/conversations"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "id": 1,
            "student_id": 3,
            "subject": "..."
        }
    ],
    "total": 1
}
 

Request      

GET api/conversations

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Create a new conversation (student only) and post the first message.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/conversations" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"subject\": \"consequatur\",
    \"body\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/conversations"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "subject": "consequatur",
    "body": "consequatur"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "message": "Conversation created",
    "conversation": {}
}
 

Request      

POST api/conversations

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

subject   string  optional  

optional Conversation subject Example: consequatur

body   string   

First message body Example: consequatur

Display the specified conversation and its messages.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/conversations/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/conversations/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.828531Z"
}
 

Request      

GET api/conversations/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the conversation. Example: 1

conversation   string   

The ID of the conversation Example: consequatur

Post a new message to a conversation.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/conversations/1/messages" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"body\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/conversations/1/messages"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "body": "consequatur"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/conversations/{conversation_id}/messages

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

conversation_id   integer   

The ID of the conversation. Example: 1

conversation   string   

The ID of the conversation Example: consequatur

Body Parameters

body   string   

Message body Example: consequatur

Student Language

Manage the languages spoken by the student.

Store a newly created language.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/languages" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"vmqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjur\",
    \"personal_information_id\": 17
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/languages"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "vmqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjur",
    "personal_information_id": 17
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/languages

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

Must be at least 4 characters. Example: vmqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjur

personal_information_id   integer   

Example: 17

Update the student language.

requires authentication

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/languages/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"vmqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/languages/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "vmqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjur"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/languages/{id}

PATCH api/languages/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the language. Example: 1

Body Parameters

name   string  optional  

Must be at least 4 characters. Example: vmqeopfuudtdsufvyvddqamniihfqcoynlazghdtqtqxbajwbpilpmufinllwloauydlsmsjur

Remove the specified language.

requires authentication

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/languages/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/languages/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/languages/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the language. Example: 1

Student Management

Endpoint to manage the students

Endpoint to get the data for the packet used for his application

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/application_packet/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/application_packet/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.725582Z"
}
 

Request      

GET api/application_packet/{user_id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

user_id   integer   

The ID of the user. Example: 1

Endpoint to get the data for the student.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/students/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/students/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.835997Z"
}
 

Request      

GET api/students/{user_id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

user_id   integer   

The ID of the user. Example: 1

Get the matching for the authenticated student.

requires authentication

Returns a ranked list of recommended majors for the authenticated student. Each item contains: type ("major"), score (0-100), a breakdown of contributing factors, and the related major and its university resource.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/matches?limit=20" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/matches"
);

const params = {
    "limit": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "data": [
        {
            "type": "major",
            "major": {
                "id": 1,
                "name": "Computer Science",
                "is_applications_open": true
            },
            "university": {
                "id": 5,
                "name": "Example University"
            },
            "score": 87.2,
            "breakdown": {
                "field": 90,
                "budget": 70,
                "scholarship": 100,
                "destination": 100,
                "academic": 80,
                "language": 100
            },
            "category": "Strong Match"
        }
    ]
}
 

Request      

GET api/matches

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

limit   integer  optional  

Optional. The maximum number of recommendations to return. Example: 20

Show the list of the students on the platform

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/students" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/students"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:57.031575Z"
}
 

Request      

GET api/admin/students

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Study destination

Manage study destination

Display a listing of all the study destinations.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/study_destinations" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/study_destinations"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:57.056061Z"
}
 

Request      

GET api/admin/study_destinations

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Store a newly created study destination.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/study_destinations" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"destination\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/study_destinations"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "destination": "consequatur"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/admin/study_destinations

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

destination   string   

the name of the destination i think it was continent, but whatever. Example: consequatur

Display one study destination.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/study_destinations/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/study_destinations/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:57.065846Z"
}
 

Request      

GET api/admin/study_destinations/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the study destination. Example: 1

Update the specified study destination.

requires authentication

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/admin/study_destinations/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"destination\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/study_destinations/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "destination": "consequatur"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/admin/study_destinations/{id}

PATCH api/admin/study_destinations/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the study destination. Example: 1

Body Parameters

destination   string  optional  

Example: consequatur

Remove the specified study destination.

requires authentication

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/admin/study_destinations/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/study_destinations/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/admin/study_destinations/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the study destination. Example: 1

Universities

Manage universities information.

Display a listing of all universities.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/universities" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/universities"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.858191Z"
}
 

Request      

GET api/universities

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Store a newly created university.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/universities" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=vmqeopfuudtdsufvyvddq"\
    --form "description=Dolores dolorum amet iste laborum eius est dolor."\
    --form "address=consequatur"\
    --form "contact=mqeopfuudtdsufvyvddqa"\
    --form "country=mniihfqcoynlazghdtqtq"\
    --form "admission_rate=23"\
    --form "is_scholarship_available=1"\
    --form "budget_range=bajwbpilpmufinllwloau"\
    --form "logo=@/tmp/phpriOxR8" \
    --form "gallery[]=@/tmp/phpir43Qi" 
const url = new URL(
    "https://vps117355.serveur-vps.net/api/universities"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('name', 'vmqeopfuudtdsufvyvddq');
body.append('description', 'Dolores dolorum amet iste laborum eius est dolor.');
body.append('address', 'consequatur');
body.append('contact', 'mqeopfuudtdsufvyvddqa');
body.append('country', 'mniihfqcoynlazghdtqtq');
body.append('admission_rate', '23');
body.append('is_scholarship_available', '1');
body.append('budget_range', 'bajwbpilpmufinllwloau');
body.append('logo', document.querySelector('input[name="logo"]').files[0]);
body.append('gallery[]', document.querySelector('input[name="gallery[]"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());

Request      

POST api/universities

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

Body Parameters

name   string   

Must not be greater than 255 characters. Example: vmqeopfuudtdsufvyvddq

description   string  optional  

Example: Dolores dolorum amet iste laborum eius est dolor.

address   string   

Example: consequatur

contact   string   

Must not be greater than 255 characters. Example: mqeopfuudtdsufvyvddqa

logo   file  optional  

Must be an image. Must not be greater than 2048 kilobytes. Example: /tmp/phpriOxR8

country   string   

Must not be greater than 100 characters. Example: mniihfqcoynlazghdtqtq

admission_rate   number   

Must be at least 0. Must not be greater than 100. Example: 23

is_scholarship_available   boolean   

Example: true

budget_range   string   

Must not be greater than 100 characters. Example: bajwbpilpmufinllwloau

gallery   file[]  optional  

Must be an image. Must not be greater than 2048 kilobytes.

Display the specified university.

requires authentication

F

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/universities/019b0704-3838-7301-bd28-6a40c2eb29df" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/universities/019b0704-3838-7301-bd28-6a40c2eb29df"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.868442Z"
}
 

Request      

GET api/universities/{university_id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

university_id   string   

The ID of the university. Example: 019b0704-3838-7301-bd28-6a40c2eb29df

Update the specified university.

requires authentication

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/universities/019b0704-3838-7301-bd28-6a40c2eb29df" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=vmqeopfuudtdsufvyvddq"\
    --form "description=Dolores dolorum amet iste laborum eius est dolor."\
    --form "address=consequatur"\
    --form "contact=mqeopfuudtdsufvyvddqa"\
    --form "country=mniihfqcoynlazghdtqtq"\
    --form "admission_rate=23"\
    --form "is_scholarship_available=1"\
    --form "budget_range=bajwbpilpmufinllwloau"\
    --form "logo=@/tmp/php3c9v6u" \
    --form "gallery[]=@/tmp/phpzEfEx8" 
const url = new URL(
    "https://vps117355.serveur-vps.net/api/universities/019b0704-3838-7301-bd28-6a40c2eb29df"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('name', 'vmqeopfuudtdsufvyvddq');
body.append('description', 'Dolores dolorum amet iste laborum eius est dolor.');
body.append('address', 'consequatur');
body.append('contact', 'mqeopfuudtdsufvyvddqa');
body.append('country', 'mniihfqcoynlazghdtqtq');
body.append('admission_rate', '23');
body.append('is_scholarship_available', '1');
body.append('budget_range', 'bajwbpilpmufinllwloau');
body.append('logo', document.querySelector('input[name="logo"]').files[0]);
body.append('gallery[]', document.querySelector('input[name="gallery[]"]').files[0]);

fetch(url, {
    method: "PUT",
    headers,
    body,
}).then(response => response.json());

Request      

PUT api/universities/{id}

PATCH api/universities/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the university. Example: 019b0704-3838-7301-bd28-6a40c2eb29df

Body Parameters

name   string  optional  

Must not be greater than 255 characters. Example: vmqeopfuudtdsufvyvddq

description   string  optional  

Example: Dolores dolorum amet iste laborum eius est dolor.

address   string  optional  

Example: consequatur

contact   string  optional  

Must not be greater than 255 characters. Example: mqeopfuudtdsufvyvddqa

country   string  optional  

Must not be greater than 100 characters. Example: mniihfqcoynlazghdtqtq

admission_rate   number  optional  

Must be at least 0. Must not be greater than 100. Example: 23

is_scholarship_available   boolean  optional  

Example: true

budget_range   string  optional  

Must not be greater than 100 characters. Example: bajwbpilpmufinllwloau

logo   file  optional  
  • logo & gallery use the same rules as store() */. Must be an image. Must not be greater than 2048 kilobytes. Example: /tmp/php3c9v6u
gallery   file[]  optional  

Must be an image. Must not be greater than 2048 kilobytes.

Remove the specified university.

requires authentication

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/universities/019b0704-3838-7301-bd28-6a40c2eb29df" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/universities/019b0704-3838-7301-bd28-6a40c2eb29df"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/universities/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the university. Example: 019b0704-3838-7301-bd28-6a40c2eb29df

Get universities by country.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/universities/country/consequatur" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/universities/country/consequatur"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.880174Z"
}
 

Request      

GET api/universities/country/{country}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

country   string   

The country. Example: consequatur

Get universities with scholarships available.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/universities/scholarships/available" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/universities/scholarships/available"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.883925Z"
}
 

Request      

GET api/universities/scholarships/available

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Store a newly created university.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/universities" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=vmqeopfuudtdsufvyvddq"\
    --form "description=Dolores dolorum amet iste laborum eius est dolor."\
    --form "address=consequatur"\
    --form "contact=mqeopfuudtdsufvyvddqa"\
    --form "country=mniihfqcoynlazghdtqtq"\
    --form "admission_rate=23"\
    --form "is_scholarship_available=1"\
    --form "budget_range=bajwbpilpmufinllwloau"\
    --form "logo=@/tmp/php8JhLZH" \
    --form "gallery[]=@/tmp/php035av1" 
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/universities"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('name', 'vmqeopfuudtdsufvyvddq');
body.append('description', 'Dolores dolorum amet iste laborum eius est dolor.');
body.append('address', 'consequatur');
body.append('contact', 'mqeopfuudtdsufvyvddqa');
body.append('country', 'mniihfqcoynlazghdtqtq');
body.append('admission_rate', '23');
body.append('is_scholarship_available', '1');
body.append('budget_range', 'bajwbpilpmufinllwloau');
body.append('logo', document.querySelector('input[name="logo"]').files[0]);
body.append('gallery[]', document.querySelector('input[name="gallery[]"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());

Request      

POST api/admin/universities

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

Body Parameters

name   string   

Must not be greater than 255 characters. Example: vmqeopfuudtdsufvyvddq

description   string  optional  

Example: Dolores dolorum amet iste laborum eius est dolor.

address   string   

Example: consequatur

contact   string   

Must not be greater than 255 characters. Example: mqeopfuudtdsufvyvddqa

logo   file  optional  

Must be an image. Must not be greater than 2048 kilobytes. Example: /tmp/php8JhLZH

country   string   

Must not be greater than 100 characters. Example: mniihfqcoynlazghdtqtq

admission_rate   number   

Must be at least 0. Must not be greater than 100. Example: 23

is_scholarship_available   boolean   

Example: true

budget_range   string   

Must not be greater than 100 characters. Example: bajwbpilpmufinllwloau

gallery   file[]  optional  

Must be an image. Must not be greater than 2048 kilobytes.

Update the specified university.

requires authentication

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/admin/universities/019b0704-3838-7301-bd28-6a40c2eb29df" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=vmqeopfuudtdsufvyvddq"\
    --form "description=Dolores dolorum amet iste laborum eius est dolor."\
    --form "address=consequatur"\
    --form "contact=mqeopfuudtdsufvyvddqa"\
    --form "country=mniihfqcoynlazghdtqtq"\
    --form "admission_rate=23"\
    --form "is_scholarship_available="\
    --form "budget_range=bajwbpilpmufinllwloau"\
    --form "logo=@/tmp/phpXrMdDv" \
    --form "gallery[]=@/tmp/phpinFKC4" 
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/universities/019b0704-3838-7301-bd28-6a40c2eb29df"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('name', 'vmqeopfuudtdsufvyvddq');
body.append('description', 'Dolores dolorum amet iste laborum eius est dolor.');
body.append('address', 'consequatur');
body.append('contact', 'mqeopfuudtdsufvyvddqa');
body.append('country', 'mniihfqcoynlazghdtqtq');
body.append('admission_rate', '23');
body.append('is_scholarship_available', '');
body.append('budget_range', 'bajwbpilpmufinllwloau');
body.append('logo', document.querySelector('input[name="logo"]').files[0]);
body.append('gallery[]', document.querySelector('input[name="gallery[]"]').files[0]);

fetch(url, {
    method: "PUT",
    headers,
    body,
}).then(response => response.json());

Request      

PUT api/admin/universities/{university_id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

URL Parameters

university_id   string   

The ID of the university. Example: 019b0704-3838-7301-bd28-6a40c2eb29df

Body Parameters

name   string  optional  

Must not be greater than 255 characters. Example: vmqeopfuudtdsufvyvddq

description   string  optional  

Example: Dolores dolorum amet iste laborum eius est dolor.

address   string  optional  

Example: consequatur

contact   string  optional  

Must not be greater than 255 characters. Example: mqeopfuudtdsufvyvddqa

country   string  optional  

Must not be greater than 100 characters. Example: mniihfqcoynlazghdtqtq

admission_rate   number  optional  

Must be at least 0. Must not be greater than 100. Example: 23

is_scholarship_available   boolean  optional  

Example: false

budget_range   string  optional  

Must not be greater than 100 characters. Example: bajwbpilpmufinllwloau

logo   file  optional  
  • logo & gallery use the same rules as store() */. Must be an image. Must not be greater than 2048 kilobytes. Example: /tmp/phpXrMdDv
gallery   file[]  optional  

Must be an image. Must not be greater than 2048 kilobytes.

Remove the specified university.

requires authentication

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/admin/universities/019b0704-3838-7301-bd28-6a40c2eb29df" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/universities/019b0704-3838-7301-bd28-6a40c2eb29df"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/admin/universities/{university_id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

university_id   string   

The ID of the university. Example: 019b0704-3838-7301-bd28-6a40c2eb29df

University Applications Management

Get all applications

requires authentication

Returns a paginated list of university applications.
You can filter by status, student, major or university.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/applications?status=Submitted&student_id=5&major_id=12&applied_university_id=8&page=1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/applications"
);

const params = {
    "status": "Submitted",
    "student_id": "5",
    "major_id": "12",
    "applied_university_id": "8",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated list):



 

Request      

GET api/applications

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

status   string  optional  

Filter by status Example: Submitted

student_id   integer  optional  

Filter by student id Example: 5

major_id   integer  optional  

Filter by major id Example: 12

applied_university_id   integer  optional  

Filter by university id Example: 8

page   integer  optional  

Page number Example: 1

Create a new application

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/applications" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"major_id\": \"consequatur\",
    \"application_date\": \"2026-01-11T08:46:56\",
    \"applied_university_id\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/applications"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "major_id": "consequatur",
    "application_date": "2026-01-11T08:46:56",
    "applied_university_id": "consequatur"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "application_date": "2025-12-11",
    "status": "Draft",
    "response_date": null,
    "feedback": null,
    "student": {
        "id": 5,
        "name": "John Doe"
    },
    "major": {
        "id": 12,
        "name": "Data Science"
    },
    "applied_university": {
        "id": 8,
        "name": "Tech University"
    }
}
 

Example response (403):


{
    "message": "Forbidden"
}
 

Request      

POST api/applications

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

major_id   string   

The id of an existing record in the majors table. Example: consequatur

application_date   string   

Must be a valid date. Example: 2026-01-11T08:46:56

applied_university_id   string   

The id of an existing record in the universities table. Example: consequatur

Get single application

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/applications/656a15de-1305-4cb0-885d-715492c83a40" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/applications/656a15de-1305-4cb0-885d-715492c83a40"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "application_date": "2025-06-01",
    "status": "Submitted",
    "response_date": null,
    "feedback": null,
    "student": {
        "id": 5,
        "name": "John Doe"
    },
    "major": {
        "id": 12,
        "name": "Data Science"
    },
    "applied_university": {
        "id": 8,
        "name": "Tech University"
    }
}
 

Request      

GET api/applications/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the application. Example: 656a15de-1305-4cb0-885d-715492c83a40

Update application

requires authentication

Only status, response_date and feedback can be edited after creation.

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/applications/656a15de-1305-4cb0-885d-715492c83a40" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"response_date\": \"2026-01-11T08:46:56\",
    \"feedback\": \"consequatur\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/applications/656a15de-1305-4cb0-885d-715492c83a40"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "response_date": "2026-01-11T08:46:56",
    "feedback": "consequatur"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{ ...updated resource... }
 

Example response (403):


{
    "message": "Forbidden"
}
 

Request      

PUT api/applications/{id}

PATCH api/applications/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the application. Example: 656a15de-1305-4cb0-885d-715492c83a40

Body Parameters

status   string  optional  
response_date   string  optional  

Must be a valid date. Example: 2026-01-11T08:46:56

feedback   string  optional  

Example: consequatur

Delete application

requires authentication

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/applications/656a15de-1305-4cb0-885d-715492c83a40" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/applications/656a15de-1305-4cb0-885d-715492c83a40"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204):

Empty response
 

Example response (403):


{
    "message": "Forbidden"
}
 

Request      

DELETE api/applications/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the application. Example: 656a15de-1305-4cb0-885d-715492c83a40

User Management

Endpoints to manage users (admin only for most operations).

Update user

requires authentication

Admins can update any user. Users can only update their own name and email. Only admins can change user roles.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/users/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=John Doe"\
    --form "email=john@example.com"\
    --form "role_id=4"\
    --form "profile_picture=@/tmp/phpWZ6oaJ" 
const url = new URL(
    "https://vps117355.serveur-vps.net/api/users/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('name', 'John Doe');
body.append('email', 'john@example.com');
body.append('role_id', '4');
body.append('profile_picture', document.querySelector('input[name="profile_picture"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());

Example response (200, User updated successfully):



 

Example response (403, Not authorized):



 

Example response (404, User not found):



 

Request      

POST api/users/{user_id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

URL Parameters

user_id   integer   

The ID of the user. Example: 1

Body Parameters

name   string  optional  

User name Example: John Doe

email   string  optional  

User email (must be unique) Example: john@example.com

role_id   integer  optional  

Role ID - admin only (1=student, 2=manager, 3=admin, 4=adviser) Example: 4

profile_picture   file  optional  

Must be a file. Must be an image. Must not be greater than 2048 kilobytes. Example: /tmp/phpWZ6oaJ

List all users with filters

requires authentication

Admins can filter by role, search by name/email, and view all users. Supports search, filtering, sorting, and pagination.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/users?role_id=1&search=John&sort_by=name&sort_order=asc&per_page=15" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"role_id\": 17,
    \"search\": \"mqeopfuudtdsufvyvddqa\",
    \"sort_by\": \"updated_at\",
    \"sort_order\": \"asc\",
    \"per_page\": 13
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/users"
);

const params = {
    "role_id": "1",
    "search": "John",
    "sort_by": "name",
    "sort_order": "asc",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "role_id": 17,
    "search": "mqeopfuudtdsufvyvddqa",
    "sort_by": "updated_at",
    "sort_order": "asc",
    "per_page": 13
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Paginated list of users):



 

Example response (403, Not authorized):



 

Request      

GET api/admin/users

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

role_id   integer  optional  

Filter by role ID (1=student, 2=manager, 3=admin, 4=adviser) Example: 1

search   string  optional  

Search by name or email Example: John

sort_by   string  optional  

Sort field (name, email, created_at, updated_at, role_id) Example: name

sort_order   string  optional  

Sort order (asc or desc) Example: asc

per_page   integer  optional  

Results per page (5-100) Example: 15

Body Parameters

role_id   integer  optional  

The id of an existing record in the roles table. Example: 17

search   string  optional  

Must not be greater than 255 characters. Example: mqeopfuudtdsufvyvddqa

sort_by   string  optional  

Example: updated_at

Must be one of:
  • name
  • email
  • created_at
  • updated_at
  • role_id
sort_order   string  optional  

Example: asc

Must be one of:
  • asc
  • desc
per_page   integer  optional  

Must be at least 5. Must not be greater than 100. Example: 13

Get user details

requires authentication

Returns user information including role, relationships, and student/adviser data.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/users/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/users/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, User details with all relationships):



 

Example response (403, Not authorized):



 

Example response (404, User not found):



 

Request      

GET api/admin/users/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the user. Example: 1

Update user

requires authentication

Admins can update any user. Users can only update their own name and email. Only admins can change user roles.

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/admin/users/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "name=John Doe"\
    --form "email=john@example.com"\
    --form "role_id=4"\
    --form "profile_picture=@/tmp/php9UZdiX" 
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/users/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

const body = new FormData();
body.append('name', 'John Doe');
body.append('email', 'john@example.com');
body.append('role_id', '4');
body.append('profile_picture', document.querySelector('input[name="profile_picture"]').files[0]);

fetch(url, {
    method: "PUT",
    headers,
    body,
}).then(response => response.json());

Example response (200, User updated successfully):



 

Example response (403, Not authorized):



 

Example response (404, User not found):



 

Request      

PUT api/admin/users/{id}

PATCH api/admin/users/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the user. Example: 1

Body Parameters

name   string  optional  

User name Example: John Doe

email   string  optional  

User email (must be unique) Example: john@example.com

role_id   integer  optional  

Role ID - admin only (1=student, 2=manager, 3=admin, 4=adviser) Example: 4

profile_picture   file  optional  

Must be a file. Must be an image. Must not be greater than 2048 kilobytes. Example: /tmp/php9UZdiX

Delete user

requires authentication

Only admins can delete users, and cannot delete their own account.

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/admin/users/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/users/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, User deleted successfully):

Empty response
 

Example response (403, Not authorized or cannot delete self):



 

Example response (422, Cannot delete own account):



 

Request      

DELETE api/admin/users/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the user. Example: 1

Get users by role

requires authentication

Retrieve all users with a specific role.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/users-by-role?role_name=adviser&per_page=15" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"role_name\": \"admin\",
    \"per_page\": 21
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/users-by-role"
);

const params = {
    "role_name": "adviser",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "role_name": "admin",
    "per_page": 21
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Paginated list of users with specified role):



 

Example response (403, Not authorized):



 

Request      

GET api/admin/users-by-role

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

role_name   string   

Role name (student, manager, admin, adviser) Example: adviser

per_page   integer  optional  

Results per page Example: 15

Body Parameters

role_name   string   

Example: admin

Must be one of:
  • student
  • manager
  • admin
  • adviser
per_page   integer  optional  

Must be at least 5. Must not be greater than 100. Example: 21

Get user statistics

requires authentication

Returns total user count and breakdown by role.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/users-statistics" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/users-statistics"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, User statistics breakdown by role):



 

Example response (403, Not authorized):



 

Request      

GET api/admin/users-statistics

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Change user role

requires authentication

Admin-only endpoint to change a user's role with audit trail.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/users/change-role" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"user_id\": 5,
    \"role_id\": 2
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/users/change-role"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "user_id": 5,
    "role_id": 2
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, User role changed successfully):


{
    "message": "User role updated successfully",
    "old_role": "adviser",
    "new_role": "manager"
}
 

Example response (403, Not authorized):



 

Example response (404, User not found):



 

Request      

POST api/admin/users/change-role

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

user_id   integer   

The user ID to modify Example: 5

role_id   integer   

The new role ID (1=student, 2=manager, 3=admin, 4=adviser) Example: 2

Bulk user operations

requires authentication

Supports bulk delete and bulk role change. Authenticated user is automatically excluded from operations.

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/users/bulk-action" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"user_ids\": \"[5, 6, 7]\",
    \"action\": \"delete\",
    \"role_id\": 2
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/users/bulk-action"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "user_ids": "[5, 6, 7]",
    "action": "delete",
    "role_id": 2
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Bulk operation completed):


{
    "message": "Bulk operation completed",
    "affected": 5,
    "action": "delete"
}
 

Example response (403, Not authorized):



 

Request      

POST api/admin/users/bulk-action

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

user_ids   string[]   

Array of user IDs to operate on Example: [5, 6, 7]

action   string   

Action to perform: delete or change_role Example: delete

role_id   integer  optional  

Required if action is change_role Example: 2

Export users to CSV

requires authentication

Exports user data as CSV file. Admins and managers can export; optional role filter available.

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/users-export?role_id=1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/users-export"
);

const params = {
    "role_id": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, CSV file content with columns: ID, Name, Email, Role, Created At, Updated At):



 

Example response (403, Not authorized):



 

Request      

GET api/admin/users-export

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

role_id   integer  optional  

Optional role ID to filter by Example: 1

User Notification Management

Endpoints to handle the authenticated user's notifications.

Flexible endpoint that supports filtering by status, limiting results, and pagination.

GET api/notifications

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/notifications?status=consequatur&limit=17&paginated=" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/notifications"
);

const params = {
    "status": "consequatur",
    "limit": "17",
    "paginated": "0",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.842220Z"
}
 

Request      

GET api/notifications

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

status   string  optional  

the kind of status to fetch example: unread, read, all. Example: consequatur

limit   integer  optional  

the number of notifications to get. Example: 17

paginated   boolean  optional  

choose if you need the pagination or not.

Get latest 10 notifications (non-paginated): /api/notifications?limit=10 Example: false

Display one notification and mark it as read.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/notifications/consequatur?status=consequatur&limit=17&paginated=" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/notifications/consequatur"
);

const params = {
    "status": "consequatur",
    "limit": "17",
    "paginated": "0",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.847209Z"
}
 

Request      

GET api/notifications/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   string   

The ID of the notification. Example: consequatur

Query Parameters

status   string  optional  

the kind of status to fetch example: unread, read, all. Example: consequatur

limit   integer  optional  

the number of notifications to get. Example: 17

paginated   boolean  optional  

choose if you need the pagination or not.

Get latest 10 notifications (non-paginated): /api/notifications?limit=10 Example: false

Mark all notifications as read.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/notifications/read-all?status=consequatur&limit=17&paginated=" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/notifications/read-all"
);

const params = {
    "status": "consequatur",
    "limit": "17",
    "paginated": "0",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST api/notifications/read-all

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Query Parameters

status   string  optional  

the kind of status to fetch example: unread, read, all. Example: consequatur

limit   integer  optional  

the number of notifications to get. Example: 17

paginated   boolean  optional  

choose if you need the pagination or not.

Get latest 10 notifications (non-paginated): /api/notifications?limit=10 Example: false

Users roles

Manage users and student roles.

Display a listing of all the roles.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/roles" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/roles"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.987944Z"
}
 

Request      

GET api/admin/roles

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Store a newly created resource in storage.

requires authentication

Example request:
curl --request POST \
    "https://vps117355.serveur-vps.net/api/admin/roles" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"consequatur\",
    \"description\": \"Dolores dolorum amet iste laborum eius est dolor.\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/roles"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "consequatur",
    "description": "Dolores dolorum amet iste laborum eius est dolor."
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/admin/roles

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

Body Parameters

name   string   

Example: consequatur

description   string  optional  

Example: Dolores dolorum amet iste laborum eius est dolor.

Display the specified role.

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/roles/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/roles/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:56.993867Z"
}
 

Request      

GET api/admin/roles/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the role. Example: 1

Update the role in the table.

requires authentication

Example request:
curl --request PUT \
    "https://vps117355.serveur-vps.net/api/admin/roles/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"consequatur\",
    \"description\": \"Dolores dolorum amet iste laborum eius est dolor.\"
}"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/roles/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "consequatur",
    "description": "Dolores dolorum amet iste laborum eius est dolor."
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/admin/roles/{id}

PATCH api/admin/roles/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the role. Example: 1

Body Parameters

name   string  optional  

Example: consequatur

description   string  optional  

Example: Dolores dolorum amet iste laborum eius est dolor.

Remove the specified role from the table.

requires authentication

Example request:
curl --request DELETE \
    "https://vps117355.serveur-vps.net/api/admin/roles/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/roles/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/admin/roles/{id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

id   integer   

The ID of the role. Example: 1

Get the users by a specified role

requires authentication

Example request:
curl --request GET \
    --get "https://vps117355.serveur-vps.net/api/admin/roles/users/1" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://vps117355.serveur-vps.net/api/admin/roles/users/1"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
 

{
    "success": false,
    "errors": "Unauthenticated.",
    "timestamp": "2026-01-11T08:46:57.002172Z"
}
 

Request      

GET api/admin/roles/users/{role_id}

Headers

Authorization      

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type      

Example: application/json

Accept      

Example: application/json

URL Parameters

role_id   integer   

The ID of the role. Example: 1