API Service Contracts Demo 1 - COS301-SE-2026/Veritas-Lab GitHub Wiki

API Endpoints

EP1: Register

Endpoint: POST /api/register

Request Headers

  • Content-Type: application/json

Request Body

{
  "username": "example_username",
  "password": "ExampleP@assword123",
  "email": "[email protected]"
}

Request Body Requirements

  • The username must be unique.
  • The password must meet the following requirements:
    • Must be at least 8 characters long.
    • Must include at least one uppercase character: A-Z.
    • Must include at least one digit: 0-9.
    • Must include at least one lowercase character: a-z.
    • Must include at least one special character, for example: !, @, #.
  • The email must be unique and meet the following requirements:
    • At least one of the following characters in any order: 0-9, A-Z, a-z, _, ., +, or -.
    • An @ character follows the requirement above.
    • At least one of the following characters in any order: 0-9, a-z, A-Z, ., or -.
    • A . follows the requirement above.
    • At least two of the following characters in any order: A-Z or a-z.

Success Response

Status Code: 201

{
  "status": "success",
  "message": "Account created successfully"
}

Example Error Response

Status Code: 400

{
  "status": "error",
  "message": "Invalid or missing username"
}

Possible Error Response Codes

  • 400 - Returned when there are invalid or missing fields in the request body.
  • 409 - Returned when the email or username in the request body is not unique.

EP2: Login

Endpoint: POST /api/login

Request Headers

  • Content-Type: application/json

Request Body

{
  "username": "example_username",
  "password": "ExampleP@assword123"
}

Request Body Requirements

  • The password must meet the following requirements:
    • Must be at least 8 characters long.
    • Must include at least one uppercase character: A-Z.
    • Must include at least one digit: 0-9.
    • Must include at least one lowercase character: a-z.
    • Must include at least one special character, for example: !, @, #.

Success Response

Status Code: 200

{
  "status": "success",
  "token": "Example_token_here"
}

Example Error Response

Status Code: 401

{
  "status": "error",
  "message": "Invalid or missing username"
}

Possible Error Response Codes

  • 400 - Returned when the password or email in the request body does not meet requirements.
  • 401 - Returned when the password is incorrect.
  • 404 - Returned when the user does not exist.
  • 409 - Returned when the email or username in the request body is not unique.

EP3: Create Case

Endpoint: POST /api/createCase

Request Headers

  • Content-Type: application/json
  • Authorization: Bearer <token_here>

Request Body

{
  "title": "Example title here",
  "description": "Example description of the case here."
}

Request Body Requirements

  • The title cannot be blank or missing.

Success Response

Status Code: 201

{
  "status": "success",
  "CaseId": "Example_case_id_here"
}

Example Error Response

Status Code: 403

{
  "status": "error",
  "message": "User unauthorized"
}

Possible Error Response Codes

  • 400 - Returned when the request body does not meet the requirements.
  • 401 - Returned when there is a JWT-related error.
  • 403 - Returned when the user is not authorized to access the endpoint.

EP4: Fetching Cases

Endpoint: POST /api/getCases

Request Headers

  • Content-Type: application/json
  • Authorization: Bearer <token_here>

Request Body

{}

Success Response

Status Code: 201

{
  "status": "success",
  "cases": [
    {
      "CaseId": "Example id here",
      "CaseCreator": "Creator here",
      "CaseName": "Suspicious AI-generated claim",
      "CaseReviews": null,
      "CaseDescription": "Example description",
      "CaseClosed": false,
      "CaseCreationDate": "2026-05-21T11:30:00"
    }
  ]
}

Example Error Response

Status Code: 401

{
  "status": "error",
  "message": "JWT related error here"
}

Possible Error Response Codes

  • 401 - Returned when there is a JWT-related error.

EP5: Fetching Single Case

Endpoint: POST /api/getCases

Request Headers

  • Content-Type: application/json
  • Authorization: Bearer <token_here>

Request Body

{
  "caseID": "Some case ID"
}

Request Body Requirements

  • The caseID must not be missing or empty.
  • The caseID must be a valid UUID.

Success Response

Status Code: 200

{
  "status": "success",
  "case": {
    "CaseId": "Example id here",
    "CaseCreator": "Creator here",
    "CaseName": "Suspicious AI-generated claim",
    "CaseReviews": null,
    "CaseDescription": "Example description",
    "CaseClosed": false,
    "CaseCreationDate": "2026-05-21T11:30:00"
  }
}

Example Error Response

Status Code: 404

{
  "status": "error",
  "message": "Case not found"
}

Possible Error Response Codes

  • 400 - Returned when the caseID is missing.
  • 401 - Returned when the caseID is not a valid UUID or there is a JWT-related error.
  • 404 - Returned when the case does not exist.

EP6: Uploading Evidence

Endpoint: POST /api/evidence

Request Headers

  • Content-Type: multipart/form-data
  • Authorization: Bearer <token_here>

Request Body

{
  "caseID": "Some case ID",
  "media": "uploaded file"
}

Request Body Requirements

  • The caseID must not be missing or empty.
  • The caseID must be a valid UUID.
  • The media file must be uploaded.

Success Response

Status Code: 201

{
  "status": "success",
  "evidence": {
    "MediaId": "Example media UUID here",
    "url": "http://localhost:9000/example-bucket/example-file.png",
    "Status": "uploaded"
  }
}

Example Error Response

Status Code: 404

{
  "status": "error",
  "message": "Case not found"
}

Possible Error Response Codes

  • 400 - Returned when the file extension is unsupported or the caseID is invalid.
  • 401 - Returned when there are JWT or UUID errors.
  • 403 - Returned when the user is unauthorized.
  • 404 - Returned when the case does not exist.
  • 422 - Returned by FastAPI when the case media is missing from the form.
⚠️ **GitHub.com Fallback** ⚠️