File "API_DOCUMENTATION.md"

Full Path: /home/u534186629/domains/tuitionalai.com/public_html/platform/API_DOCUMENTATION.md
File size: 11.07 KB
MIME-type: text/plain
Charset: utf-8


# Tuitional AI API Documentation

This document outlines the API endpoints required by the Tuitional AI frontend application.

## Base URL

All API endpoints should be accessible from a base URL: `https://api.tuitional.ai/v1` or your own domain.

## Authentication

### Authentication Headers

All authenticated endpoints require an Authorization header:

```
Authorization: Bearer <token>
```

### Authentication Endpoints

#### Register User

- **URL**: `/auth/register`
- **Method**: `POST`
- **Description**: Creates a new user account
- **Request Body**:
  ```json
  {
    "email": "user@example.com",
    "password": "securePassword123",
    "fullName": "John Doe",
    "role": "student" // or "teacher" or "admin"
  }
  ```
- **Response**: 
  ```json
  {
    "token": "jwt_token_here",
    "user": {
      "id": "user_id",
      "email": "user@example.com",
      "role": "student",
      "profileCompleted": false,
      "fullName": "John Doe"
    }
  }
  ```

#### Login User

- **URL**: `/auth/login`
- **Method**: `POST`
- **Description**: Authenticates a user and returns a token
- **Request Body**:
  ```json
  {
    "email": "user@example.com",
    "password": "securePassword123"
  }
  ```
- **Response**: 
  ```json
  {
    "token": "jwt_token_here",
    "user": {
      "id": "user_id",
      "email": "user@example.com",
      "role": "student",
      "profileCompleted": true,
      "fullName": "John Doe"
    }
  }
  ```

#### Verify Token

- **URL**: `/auth/verify`
- **Method**: `POST`
- **Description**: Verifies if a token is valid
- **Request Body**:
  ```json
  {
    "token": "jwt_token_here"
  }
  ```
- **Response**: 
  ```json
  {
    "valid": true,
    "user": {
      "id": "user_id",
      "email": "user@example.com",
      "role": "student",
      "profileCompleted": true,
      "fullName": "John Doe"
    }
  }
  ```

## User Profiles

### Student Profiles

#### Create/Update Student Profile

- **URL**: `/profile/student`
- **Method**: `POST`
- **Description**: Creates or updates a student profile
- **Authentication**: Required
- **Request Body**:
  ```json
  {
    "fullName": "John Doe",
    "phoneNumber": "123-456-7890",
    "grade": "Grade 10",
    "curriculum": "CAIE",
    "level": "Intermediate",
    "country": "United States",
    "school": "International School"
  }
  ```
- **Response**: 
  ```json
  {
    "userId": "user_id",
    "fullName": "John Doe",
    "phoneNumber": "123-456-7890",
    "grade": "Grade 10",
    "curriculum": "CAIE",
    "level": "Intermediate",
    "country": "United States",
    "school": "International School"
  }
  ```

#### Get Student Profile

- **URL**: `/profile/student/:userId`
- **Method**: `GET`
- **Description**: Retrieves a student's profile
- **Authentication**: Required
- **Response**: 
  ```json
  {
    "userId": "user_id",
    "fullName": "John Doe",
    "phoneNumber": "123-456-7890",
    "grade": "Grade 10",
    "curriculum": "CAIE",
    "level": "Intermediate",
    "country": "United States",
    "school": "International School"
  }
  ```

### Teacher Profiles

#### Create/Update Teacher Profile

- **URL**: `/profile/teacher`
- **Method**: `POST`
- **Description**: Creates or updates a teacher profile
- **Authentication**: Required
- **Request Body**:
  ```json
  {
    "fullName": "Jane Smith",
    "phoneNumber": "987-654-3210",
    "grade": "Multiple",
    "curriculum": "CAIE",
    "level": "Advanced",
    "country": "United Kingdom",
    "school": "Cambridge Academy",
    "position": "Science Teacher"
  }
  ```
- **Response**: 
  ```json
  {
    "userId": "user_id",
    "fullName": "Jane Smith",
    "phoneNumber": "987-654-3210",
    "grade": "Multiple",
    "curriculum": "CAIE",
    "level": "Advanced",
    "country": "United Kingdom",
    "school": "Cambridge Academy",
    "position": "Science Teacher"
  }
  ```

#### Get Teacher Profile

- **URL**: `/profile/teacher/:userId`
- **Method**: `GET`
- **Description**: Retrieves a teacher's profile
- **Authentication**: Required
- **Response**: 
  ```json
  {
    "userId": "user_id",
    "fullName": "Jane Smith",
    "phoneNumber": "987-654-3210",
    "grade": "Multiple",
    "curriculum": "CAIE",
    "level": "Advanced",
    "country": "United Kingdom",
    "school": "Cambridge Academy",
    "position": "Science Teacher"
  }
  ```

## MindPages

### Get MindPages

- **URL**: `/mindpage/user/:userId`
- **Method**: `GET`
- **Description**: Retrieves all mind pages for a specific user
- **Authentication**: Required
- **Response**: 
  ```json
  [
    {
      "id": "page_id_1",
      "user_id": "user_id",
      "title": "Chemistry Notes",
      "content": "<p>These are my chemistry notes.</p>",
      "tags": ["chemistry", "notes"],
      "folder_path": "root",
      "page_type": "note",
      "is_starred": false,
      "shared_with": [],
      "created_at": "2023-04-15T10:00:00Z",
      "updated_at": "2023-04-15T10:30:00Z"
    },
    {
      "id": "page_id_2",
      "user_id": "user_id",
      "title": "Physics Formulas",
      "content": "<p>Key physics formulas.</p>",
      "tags": ["physics", "formulas"],
      "folder_path": "root",
      "page_type": "note",
      "is_starred": true,
      "shared_with": [],
      "created_at": "2023-04-16T10:00:00Z",
      "updated_at": "2023-04-16T10:30:00Z"
    }
  ]
  ```

### Get Single MindPage

- **URL**: `/mindpage/:id`
- **Method**: `GET`
- **Description**: Retrieves a specific mind page by ID
- **Authentication**: Required
- **Response**: 
  ```json
  {
    "id": "page_id",
    "user_id": "user_id",
    "title": "Chemistry Notes",
    "content": "<p>These are my chemistry notes.</p>",
    "tags": ["chemistry", "notes"],
    "folder_path": "root",
    "page_type": "note",
    "is_starred": false,
    "shared_with": [],
    "created_at": "2023-04-15T10:00:00Z",
    "updated_at": "2023-04-15T10:30:00Z"
  }
  ```

### Create MindPage

- **URL**: `/mindpage`
- **Method**: `POST`
- **Description**: Creates a new mind page
- **Authentication**: Required
- **Request Body**:
  ```json
  {
    "userId": "user_id",
    "title": "New Study Notes",
    "content": "<p>This is the content of my notes.</p>",
    "tags": ["study", "notes"],
    "folder_path": "root",
    "page_type": "note"
  }
  ```
- **Response**: 
  ```json
  {
    "id": "new_page_id",
    "user_id": "user_id",
    "title": "New Study Notes",
    "content": "<p>This is the content of my notes.</p>",
    "tags": ["study", "notes"],
    "folder_path": "root",
    "page_type": "note",
    "is_starred": false,
    "shared_with": [],
    "created_at": "2023-04-20T15:00:00Z",
    "updated_at": "2023-04-20T15:00:00Z"
  }
  ```

### Update MindPage

- **URL**: `/mindpage/:id`
- **Method**: `PUT`
- **Description**: Updates an existing mind page
- **Authentication**: Required
- **Request Body**:
  ```json
  {
    "title": "Updated Study Notes",
    "content": "<p>This is the updated content.</p>",
    "tags": ["study", "notes", "updated"],
    "is_starred": true
  }
  ```
- **Response**: 
  ```json
  {
    "id": "page_id",
    "user_id": "user_id",
    "title": "Updated Study Notes",
    "content": "<p>This is the updated content.</p>",
    "tags": ["study", "notes", "updated"],
    "folder_path": "root",
    "page_type": "note",
    "is_starred": true,
    "shared_with": [],
    "created_at": "2023-04-20T15:00:00Z",
    "updated_at": "2023-04-20T15:30:00Z"
  }
  ```

### Delete MindPage

- **URL**: `/mindpage/:id`
- **Method**: `DELETE`
- **Description**: Deletes a mind page
- **Authentication**: Required
- **Response**: 
  ```json
  {
    "success": true,
    "message": "Mind page deleted successfully"
  }
  ```

### Share MindPage

- **URL**: `/mindpage/:id/share`
- **Method**: `PUT`
- **Description**: Shares a mind page with other users
- **Authentication**: Required
- **Request Body**:
  ```json
  {
    "sharedWith": ["user_id_1", "user_id_2"]
  }
  ```
- **Response**: 
  ```json
  {
    "success": true,
    "message": "Mind page shared successfully"
  }
  ```

## Groups

### Get User Groups

- **URL**: `/groups/user/:userId`
- **Method**: `GET`
- **Description**: Retrieves all groups a user belongs to
- **Authentication**: Required
- **Response**: 
  ```json
  [
    {
      "id": "group_id_1",
      "name": "Physics Study Group",
      "description": "A group for studying physics",
      "owner_id": "owner_user_id",
      "created_at": "2023-04-10T12:00:00Z",
      "members": [
        {
          "user_id": "user_id",
          "role": "member",
          "joined_at": "2023-04-11T10:00:00Z"
        }
      ]
    }
  ]
  ```

### Create Group

- **URL**: `/groups`
- **Method**: `POST`
- **Description**: Creates a new group
- **Authentication**: Required
- **Request Body**:
  ```json
  {
    "name": "Chemistry Study Group",
    "description": "A group for studying chemistry",
    "owner_id": "user_id"
  }
  ```
- **Response**: 
  ```json
  {
    "id": "new_group_id",
    "name": "Chemistry Study Group",
    "description": "A group for studying chemistry",
    "owner_id": "user_id",
    "created_at": "2023-04-20T15:00:00Z",
    "members": [
      {
        "user_id": "user_id",
        "role": "owner",
        "joined_at": "2023-04-20T15:00:00Z"
      }
    ]
  }
  ```

### Invite to Group

- **URL**: `/groups/:groupId/invite`
- **Method**: `POST`
- **Description**: Invites a user to a group
- **Authentication**: Required
- **Request Body**:
  ```json
  {
    "email": "invited_user@example.com",
    "invited_by": "user_id"
  }
  ```
- **Response**: 
  ```json
  {
    "success": true,
    "message": "Invitation sent successfully",
    "invitation_id": "invitation_id"
  }
  ```

### Accept Invitation

- **URL**: `/groups/invitations/:invitationId/accept`
- **Method**: `POST`
- **Description**: Accepts a group invitation
- **Authentication**: Required
- **Request Body**:
  ```json
  {
    "userId": "invited_user_id"
  }
  ```
- **Response**: 
  ```json
  {
    "success": true,
    "message": "You've been added to the group",
    "group_id": "group_id"
  }
  ```

## Error Handling

All API endpoints should return appropriate HTTP status codes:

- `200 OK`: The request was successful
- `201 Created`: A resource was successfully created
- `400 Bad Request`: The request was invalid
- `401 Unauthorized`: Authentication is required
- `403 Forbidden`: The user does not have permission
- `404 Not Found`: The requested resource was not found
- `500 Internal Server Error`: An error occurred on the server

Error responses should have this structure:

```json
{
  "error": {
    "code": "ERROR_CODE",
    "message": "Human-readable error message"
  }
}
```

## Implementation Notes

1. **Security**: Implement proper validation for all inputs
2. **Rate Limiting**: Consider implementing rate limiting to prevent abuse
3. **CORS**: Configure CORS to allow requests from the frontend domain
4. **Pagination**: For endpoints that return lists, consider implementing pagination
5. **Caching**: Implement appropriate caching strategies for read-heavy endpoints
6. **Logging**: Log API requests for debugging and monitoring purposes
7. **Documentation**: Keep this documentation updated as the API evolves

This documentation provides a basic structure for the backend API. Extend it as needed to support additional features of the Tuitional AI application.