Skip to content

API Documentation with Examples

Gülce Tahtasız edited this page Apr 11, 2026 · 1 revision

API Documentation with Examples

This document describes the implemented backend API for the Neighborhood Emergency Preparedness Hub MVP. The backend is a Node.js + Express application and exposes JSON endpoints under /api.

Base URL

Local development: http://localhost:3000
API root:          http://localhost:3000/api

General Conventions

Content Type

All request bodies are JSON.

Content-Type: application/json

Authentication

Protected endpoints require a JWT access token in the Authorization header.

Authorization: Bearer <accessToken>

The access token is returned by POST /api/auth/login.

Guest Help Request Access

Guest-created help requests return a guestAccessToken. Guests can use this token to read or update only that specific help request.

x-help-request-access-token: <guestAccessToken>

The same token may also be passed as a query parameter:

GET /api/help-requests/{requestId}?guestAccessToken=<guestAccessToken>

Standard Error Shape

Most errors use the following JSON format:

{
  "code": "VALIDATION_ERROR",
  "message": "Email format is invalid"
}

Some validation endpoints return a details array:

{
  "code": "VALIDATION_FAILED",
  "message": "Validation failed",
  "details": [
    "`contact.phone` must be a 10-digit integer starting with 5."
  ]
}

Common Status Codes

Status Meaning
200 Successful read or update
201 Resource created
400 Validation error
401 Missing, invalid, or expired authentication
403 Authenticated but not allowed
404 Resource not found
409 Conflict, such as invalid status transition
429 Too many requests on rate-limited auth endpoints
500 Unexpected server error

Health and API Root

GET /health

Checks whether the backend is running.

Example request

curl http://localhost:3000/health

Example response

{
  "status": "ok"
}

GET /api

Returns API metadata and enabled modules.

Example request

curl http://localhost:3000/api

Example response

{
  "name": "Neighborhood Emergency Preparedness Hub API",
  "modules": ["auth", "profiles", "help-requests", "availability"]
}

Auth API

Auth endpoints are available under /api/auth.

POST /api/auth/signup

Creates a new user account and sends an email verification message.

Authentication: Not required
Rate limit: 10 requests per 15 minutes

Request body

{
  "email": "user@example.com",
  "password": "password123",
  "acceptedTerms": true
}

Validation rules

Field Rule
email Required, valid email format
password Required string, minimum 8 characters
acceptedTerms Must be true

Example request

curl -X POST http://localhost:3000/api/auth/signup \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "password": "password123",
    "acceptedTerms": true
  }'

Example success response: 201 Created

{
  "message": "User created successfully. Please check your email to verify your account.",
  "user": {
    "userId": "550e8400-e29b-41d4-a716-446655440000",
    "email": "user@example.com",
    "isEmailVerified": false,
    "acceptedTerms": true,
    "createdAt": "2026-04-11T12:00:00.000Z"
  }
}

Possible errors

Status Code Meaning
400 VALIDATION_ERROR Missing or invalid input
409 EMAIL_ALREADY_EXISTS Email is already registered
429 TOO_MANY_REQUESTS Rate limit exceeded

POST /api/auth/login

Authenticates a verified user and returns an access token.

Authentication: Not required
Rate limit: 10 requests per 15 minutes

Request body

{
  "email": "user@example.com",
  "password": "password123"
}

Example request

curl -X POST http://localhost:3000/api/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "user@example.com",
    "password": "password123"
  }'

Example success response: 200 OK

{
  "message": "Login successful",
  "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "user": {
    "userId": "550e8400-e29b-41d4-a716-446655440000",
    "email": "user@example.com",
    "isEmailVerified": true,
    "isAdmin": false,
    "adminRole": null
  }
}

Possible errors

Status Code Meaning
400 VALIDATION_ERROR Missing or invalid input
401 INVALID_CREDENTIALS Email or password is wrong
401 EMAIL_NOT_VERIFIED Account exists but email is not verified
429 TOO_MANY_REQUESTS Rate limit exceeded

GET /api/auth/verify-email?token={token}

Verifies a user's email address using the token sent by email.

Authentication: Not required

Example request

curl "http://localhost:3000/api/auth/verify-email?token=<verificationToken>"

Example success response: 200 OK

{
  "message": "Email verified successfully",
  "user": {
    "userId": "550e8400-e29b-41d4-a716-446655440000",
    "email": "user@example.com",
    "isEmailVerified": true
  }
}

Possible errors

Status Code Meaning
400 VALIDATION_ERROR Token is missing
400 INVALID_VERIFICATION_TOKEN Token is invalid or expired

POST /api/auth/resend-verification

Sends a new verification email.

Authentication: Not required
Rate limit: 10 requests per 15 minutes

Request body

{
  "email": "user@example.com"
}

Example response: 200 OK

{
  "message": "Verification email sent. Please check your inbox."
}

Possible errors

Status Code Meaning
400 VALIDATION_ERROR Email is missing
400 USER_NOT_FOUND User does not exist
400 EMAIL_ALREADY_VERIFIED Email has already been verified

POST /api/auth/forgot-password

Sends a password reset email.

Authentication: Not required
Rate limit: 10 requests per 15 minutes

Request body

{
  "email": "user@example.com"
}

Example response: 200 OK

{
  "message": "Password reset email sent. Please check your inbox."
}

POST /api/auth/reset-password

Resets a user's password using the reset token sent by email.

Authentication: Not required
Rate limit: 10 requests per 15 minutes

Request body

{
  "token": "<resetToken>",
  "newPassword": "newpassword123"
}

Example response: 200 OK

{
  "message": "Password reset successfully. You can now log in with your new password."
}

Possible errors

Status Code Meaning
400 VALIDATION_ERROR Token missing or password shorter than 8 characters
400 INVALID_RESET_TOKEN Token is invalid or expired
404 USER_NOT_FOUND User no longer exists

GET /api/auth/me

Returns the current authenticated user.

Authentication: Required

Example request

curl http://localhost:3000/api/auth/me \
  -H "Authorization: Bearer <accessToken>"

Example response: 200 OK

{
  "userId": "550e8400-e29b-41d4-a716-446655440000",
  "email": "user@example.com",
  "isEmailVerified": true,
  "acceptedTerms": true,
  "createdAt": "2026-04-11T12:00:00.000Z",
  "isAdmin": false,
  "adminRole": null
}

POST /api/auth/logout

Returns a logout confirmation. The current implementation is token-based and does not maintain a server-side session blacklist.

Authentication: Required

Example response: 200 OK

{
  "message": "Logged out successfully."
}

Admin Auth Endpoints

The following endpoints require a valid JWT and admin privileges:

Method Path Description
GET /api/auth/admin/users Lists up to 100 users
GET /api/auth/admin/help-requests Lists up to 100 help requests
GET /api/auth/admin/announcements Lists up to 100 announcements
GET /api/auth/admin/stats Returns basic system counts

Example admin stats request

curl http://localhost:3000/api/auth/admin/stats \
  -H "Authorization: Bearer <adminAccessToken>"

Example response

{
  "stats": {
    "totalUsers": 15,
    "totalHelpRequests": 7,
    "totalAnnouncements": 2,
    "totalAdmins": 1
  }
}

Profiles API

Profile endpoints are available under /api/profiles. All /me profile endpoints require authentication.

Profile Response Shape

Most profile endpoints return the full profile bundle:

{
  "profile": {
    "profileId": "prf_123",
    "userId": "550e8400-e29b-41d4-a716-446655440000",
    "firstName": "Ada",
    "lastName": "Lovelace",
    "phoneNumber": "5301234567"
  },
  "privacySettings": {
    "profileVisibility": "PUBLIC",
    "healthInfoVisibility": "PRIVATE",
    "locationVisibility": "EMERGENCY_ONLY",
    "locationSharingEnabled": true
  },
  "healthInfo": {
    "medicalConditions": [],
    "chronicDiseases": [],
    "allergies": ["Peanut"],
    "medications": [],
    "bloodType": "A+"
  },
  "physicalInfo": {
    "age": 22,
    "gender": "female",
    "height": 168,
    "weight": 60
  },
  "locationProfile": {
    "address": "Bina B, 3. kat",
    "city": "Istanbul",
    "country": "Turkiye",
    "latitude": 41.0082,
    "longitude": 28.9784,
    "lastUpdated": "2026-04-11T12:00:00.000Z"
  },
  "expertise": [
    {
      "profession": "Doctor",
      "expertiseAreas": ["First Aid", "Logistics"]
    }
  ]
}

GET /api/profiles/me

Returns the current user's profile bundle.

Authentication: Required

Example request

curl http://localhost:3000/api/profiles/me \
  -H "Authorization: Bearer <accessToken>"

Possible errors

Status Code Meaning
401 UNAUTHORIZED Missing or invalid token
404 NOT_FOUND Profile does not exist

PATCH /api/profiles/me

Creates or updates the base profile. When creating a profile for the first time, firstName and lastName are required.

Authentication: Required

Request body

{
  "firstName": "Ada",
  "lastName": "Lovelace",
  "phoneNumber": "5301234567"
}

Example request

curl -X PATCH http://localhost:3000/api/profiles/me \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "Ada",
    "lastName": "Lovelace",
    "phoneNumber": "5301234567"
  }'

PATCH /api/profiles/me/physical

Updates physical information.

Authentication: Required

Request body

{
  "age": 22,
  "gender": "female",
  "height": 168,
  "weight": 60
}

Validation rules

Field Rule
age Number, >= 0
gender String or null
height Number, > 0
weight Number, > 0

PATCH /api/profiles/me/health

Updates health information.

Authentication: Required

Request body

{
  "medicalConditions": ["Asthma"],
  "chronicDiseases": [],
  "allergies": ["Peanut"],
  "medications": ["Inhaler"],
  "bloodType": "A+"
}

Array fields must be arrays of strings. bloodType must be a string or null.

PATCH /api/profiles/me/location

Updates location information.

Authentication: Required

Request body

{
  "address": "Bina B, 3. kat",
  "city": "Istanbul",
  "country": "Turkiye",
  "latitude": 41.0082,
  "longitude": 28.9784
}

If either latitude or longitude is provided, both must be provided.

PATCH /api/profiles/me/privacy

Updates privacy settings.

Authentication: Required

Request body

{
  "profileVisibility": "PUBLIC",
  "healthInfoVisibility": "PRIVATE",
  "locationVisibility": "EMERGENCY_ONLY",
  "locationSharingEnabled": true
}

Allowed visibility values:

PUBLIC
EMERGENCY_ONLY
PRIVATE

PATCH /api/profiles/me/profession

Updates or clears the user's profession.

Authentication: Required

Request body

{
  "profession": "Doctor"
}

To clear the profession:

{
  "profession": null
}

PUT /api/profiles/me/expertise-areas

Replaces the user's expertise areas.

Authentication: Required

Request body

{
  "expertiseAreas": ["First Aid", "Logistics"]
}

Validation rules

Field Rule
expertiseAreas Required array of strings
Each item Non-empty string, maximum 35 characters
Array length Maximum 5 items
Duplicates Not allowed

Help Requests API

Help request endpoints are available under /api/help-requests.

Help Request Response Shape

{
  "id": "req_123",
  "userId": "550e8400-e29b-41d4-a716-446655440000",
  "helpTypes": ["first_aid", "fire_brigade"],
  "otherHelpText": "",
  "affectedPeopleCount": 3,
  "riskFlags": ["fire", "electric_hazard"],
  "vulnerableGroups": ["children", "pregnant"],
  "description": "Apartment entrance blocked, one person bleeding.",
  "bloodType": "A+",
  "location": {
    "country": "turkiye",
    "city": "istanbul",
    "district": "besiktas",
    "neighborhood": "levazim",
    "extraAddress": "Bina B, 3. kat, arka giris"
  },
  "contact": {
    "fullName": "Ayse Yilmaz",
    "phone": 5052318546,
    "alternativePhone": 5321234567
  },
  "consentGiven": true,
  "needType": "first_aid",
  "status": "SYNCED",
  "internalStatus": "PENDING",
  "createdAt": "2026-04-11T12:00:00.000Z",
  "resolvedAt": null,
  "isSavedLocally": false,
  "helper": null
}

Public-facing status values:

Status Meaning
PENDING_SYNC Request was saved locally and has not been synced
SYNCED Request exists on the backend
MATCHED Request is assigned or in progress internally
RESOLVED Request was resolved
CANCELLED Request was cancelled

POST /api/help-requests

Creates a help request. This endpoint supports both authenticated users and guests.

Authentication: Optional

Request body

{
  "helpTypes": ["first_aid", "fire_brigade"],
  "otherHelpText": "",
  "affectedPeopleCount": 3,
  "riskFlags": ["fire", "electric_hazard"],
  "vulnerableGroups": ["children", "pregnant"],
  "description": "Apartment entrance blocked, one person bleeding.",
  "bloodType": "A+",
  "location": {
    "country": "turkiye",
    "city": "istanbul",
    "district": "besiktas",
    "neighborhood": "levazim",
    "extraAddress": "Bina B, 3. kat, arka giris"
  },
  "contact": {
    "fullName": "Ayse Yilmaz",
    "phone": 5052318546,
    "alternativePhone": 5321234567
  },
  "consentGiven": true
}

Example authenticated request

curl -X POST http://localhost:3000/api/help-requests \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{
    "helpTypes": ["first_aid", "fire_brigade"],
    "affectedPeopleCount": 3,
    "riskFlags": ["fire", "electric_hazard"],
    "vulnerableGroups": ["children", "pregnant"],
    "description": "Apartment entrance blocked, one person bleeding.",
    "bloodType": "A+",
    "location": {
      "country": "turkiye",
      "city": "istanbul",
      "district": "besiktas",
      "neighborhood": "levazim",
      "extraAddress": "Bina B, 3. kat, arka giris"
    },
    "contact": {
      "fullName": "Ayse Yilmaz",
      "phone": 5052318546,
      "alternativePhone": 5321234567
    },
    "consentGiven": true
  }'

Example guest request

curl -X POST http://localhost:3000/api/help-requests \
  -H "Content-Type: application/json" \
  -d '{
    "helpTypes": ["food"],
    "affectedPeopleCount": 1,
    "riskFlags": [],
    "vulnerableGroups": [],
    "description": "Need food and water.",
    "location": {
      "country": "turkiye",
      "city": "istanbul",
      "district": "besiktas",
      "neighborhood": "levazim",
      "extraAddress": ""
    },
    "contact": {
      "fullName": "Guest User",
      "phone": 5052318546
    },
    "consentGiven": true
  }'

Example success response for guest: 201 Created

{
  "request": {
    "id": "req_123",
    "userId": null,
    "helpTypes": ["food"],
    "otherHelpText": "",
    "affectedPeopleCount": 1,
    "riskFlags": [],
    "vulnerableGroups": [],
    "description": "Need food and water.",
    "bloodType": "",
    "location": {
      "country": "turkiye",
      "city": "istanbul",
      "district": "besiktas",
      "neighborhood": "levazim",
      "extraAddress": ""
    },
    "contact": {
      "fullName": "Guest User",
      "phone": 5052318546,
      "alternativePhone": null
    },
    "consentGiven": true,
    "needType": "food",
    "status": "SYNCED",
    "internalStatus": "PENDING",
    "createdAt": "2026-04-11T12:00:00.000Z",
    "resolvedAt": null,
    "isSavedLocally": false,
    "helper": null
  },
  "warnings": [],
  "guestAccessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

Validation rules

Field Rule
helpTypes Required array of non-empty strings
affectedPeopleCount Required integer, >= 1
riskFlags Optional array of strings
vulnerableGroups Optional array of strings
description Required string, maximum 2000 characters
bloodType Optional string, maximum 10 characters
consentGiven Required boolean, must be true
location.country Required string
location.city Required string
location.district Required string
location.neighborhood Required string
location.extraAddress Optional string, maximum 500 characters
contact.fullName Required string
contact.phone Required 10-digit integer starting with 5
contact.alternativePhone Optional 10-digit integer starting with 5

GET /api/help-requests

Lists the authenticated user's help requests.

Authentication: Required

Example request

curl http://localhost:3000/api/help-requests \
  -H "Authorization: Bearer <accessToken>"

Example response: 200 OK

{
  "requests": [
    {
      "id": "req_123",
      "userId": "550e8400-e29b-41d4-a716-446655440000",
      "helpTypes": ["food"],
      "description": "Need food and water.",
      "status": "SYNCED",
      "internalStatus": "PENDING",
      "createdAt": "2026-04-11T12:00:00.000Z",
      "resolvedAt": null,
      "isSavedLocally": false,
      "helper": null
    }
  ]
}

GET /api/help-requests/{requestId}

Returns a single help request.

Authentication: Required for registered users. Guest-created requests can be read using x-help-request-access-token.

Example authenticated request

curl http://localhost:3000/api/help-requests/req_123 \
  -H "Authorization: Bearer <accessToken>"

Example guest request

curl http://localhost:3000/api/help-requests/req_123 \
  -H "x-help-request-access-token: <guestAccessToken>"

Example response

{
  "request": {
    "id": "req_123",
    "userId": null,
    "helpTypes": ["food"],
    "description": "Need food and water.",
    "status": "SYNCED",
    "internalStatus": "PENDING",
    "helper": null
  }
}

PATCH /api/help-requests/{requestId}/status

Updates a help request status.

Authentication: Required for registered users. Guest-created requests can be updated using x-help-request-access-token.

Request body

{
  "status": "RESOLVED"
}

Allowed status update values:

SYNCED
RESOLVED

Example request

curl -X PATCH http://localhost:3000/api/help-requests/req_123/status \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{ "status": "RESOLVED" }'

Example response

{
  "request": {
    "id": "req_123",
    "status": "RESOLVED",
    "internalStatus": "RESOLVED",
    "resolvedAt": "2026-04-11T12:20:00.000Z",
    "isSavedLocally": false
  }
}

Possible errors

Status Code Meaning
400 VALIDATION_FAILED Invalid status value
401 UNAUTHORIZED Missing auth or guest token
403 FORBIDDEN Guest token belongs to another request
404 NOT_FOUND Request not found
409 INVALID_STATUS_TRANSITION Resolved request cannot move back to synced

Availability API

Availability endpoints are available under /api/availability. All availability endpoints require authentication.

GET /api/availability/status

Returns the current user's volunteer availability and active assignment, if any.

Authentication: Required

Example request

curl http://localhost:3000/api/availability/status \
  -H "Authorization: Bearer <accessToken>"

Example response with no volunteer record

{
  "isAvailable": false,
  "volunteer": null,
  "assignment": null
}

Example response with availability

{
  "isAvailable": true,
  "volunteer": {
    "volunteer_id": "vol_123",
    "user_id": "550e8400-e29b-41d4-a716-446655440000",
    "is_available": true,
    "last_known_latitude": 41,
    "last_known_longitude": 29,
    "location_updated_at": "2026-04-11T12:00:00.000Z"
  },
  "assignment": {
    "assignment_id": "asg_123",
    "volunteer_id": "vol_123",
    "request_id": "req_123",
    "assigned_at": "2026-04-11T12:00:00.000Z",
    "is_cancelled": false,
    "need_type": "first_aid",
    "description": "Apartment entrance blocked, one person bleeding.",
    "request_status": "ASSIGNED",
    "requester_email": "requester@example.com"
  }
}

POST /api/availability/toggle

Sets volunteer availability. If the user becomes available, the backend may automatically assign the oldest matching pending help request.

Authentication: Required

Request body

{
  "isAvailable": true,
  "latitude": 41.0082,
  "longitude": 28.9784
}

latitude and longitude are optional numbers.

Example request

curl -X POST http://localhost:3000/api/availability/toggle \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{
    "isAvailable": true,
    "latitude": 41.0082,
    "longitude": 28.9784
  }'

Example response

{
  "volunteer": {
    "volunteer_id": "vol_123",
    "user_id": "550e8400-e29b-41d4-a716-446655440000",
    "is_available": true,
    "last_known_latitude": 41.0082,
    "last_known_longitude": 28.9784,
    "location_updated_at": "2026-04-11T12:00:00.000Z"
  },
  "assignment": null
}

POST /api/availability/sync

Syncs locally stored availability records and sets the volunteer status to the latest timestamped record.

Authentication: Required

Request body

{
  "records": [
    {
      "isAvailable": true,
      "timestamp": "2026-04-11T11:50:00.000Z"
    },
    {
      "isAvailable": false,
      "timestamp": "2026-04-11T12:00:00.000Z"
    }
  ]
}

Example response

{
  "volunteer": {
    "volunteer_id": "vol_123",
    "user_id": "550e8400-e29b-41d4-a716-446655440000",
    "is_available": false
  },
  "assignment": null
}

GET /api/availability/my-assignment

Returns the volunteer's current active assignment.

Authentication: Required

Example request

curl http://localhost:3000/api/availability/my-assignment \
  -H "Authorization: Bearer <accessToken>"

Example response

{
  "assignment": {
    "assignment_id": "asg_123",
    "volunteer_id": "vol_123",
    "request_id": "req_123",
    "need_type": "first_aid",
    "description": "Apartment entrance blocked, one person bleeding.",
    "request_status": "ASSIGNED",
    "help_types": ["first_aid", "fire_brigade"],
    "affected_people_count": 3,
    "risk_flags": ["fire", "electric_hazard"],
    "vulnerable_groups": ["children", "pregnant"],
    "blood_type": "A+",
    "contact_full_name": "Ayse Yilmaz",
    "contact_phone": "5052318546",
    "contact_alternative_phone": "5321234567",
    "request_country": "turkiye",
    "request_city": "istanbul",
    "request_district": "besiktas",
    "request_neighborhood": "levazim",
    "request_extra_address": "Bina B, 3. kat, arka giris",
    "requester_email": "requester@example.com",
    "requester_first_name": "Ada",
    "requester_last_name": "Lovelace"
  }
}

POST /api/availability/assignments/{assignmentId}/cancel

Cancels the volunteer's current assignment and returns the help request to pending status. If another matching request exists, a new assignment may be returned.

Authentication: Required

Example request

curl -X POST http://localhost:3000/api/availability/assignments/asg_123/cancel \
  -H "Authorization: Bearer <accessToken>"

Example response

{
  "message": "Assignment cancelled and request put back to pending",
  "newAssignment": null
}

POST /api/availability/assignments/resolve

Marks the assigned help request as resolved. If another matching request exists, a new assignment may be returned.

Authentication: Required

Request body

{
  "requestId": "req_123"
}

Example request

curl -X POST http://localhost:3000/api/availability/assignments/resolve \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{ "requestId": "req_123" }'

Example response

{
  "message": "Request marked as resolved",
  "newAssignment": null
}

Endpoint Summary

Method Path Auth Description
GET /health No Backend health check
GET /api No API metadata
POST /api/auth/signup No Create account
POST /api/auth/login No Login and receive JWT
GET /api/auth/verify-email No Verify email token
POST /api/auth/resend-verification No Resend verification email
POST /api/auth/forgot-password No Send reset password email
POST /api/auth/reset-password No Reset password
GET /api/auth/me Yes Current user
POST /api/auth/logout Yes Logout confirmation
GET /api/auth/admin/users Admin List users
GET /api/auth/admin/help-requests Admin List help requests
GET /api/auth/admin/announcements Admin List announcements
GET /api/auth/admin/stats Admin Basic stats
GET /api/profiles/me Yes Get profile bundle
PATCH /api/profiles/me Yes Create/update base profile
PATCH /api/profiles/me/physical Yes Update physical information
PATCH /api/profiles/me/health Yes Update health information
PATCH /api/profiles/me/location Yes Update location information
PATCH /api/profiles/me/privacy Yes Update privacy settings
PATCH /api/profiles/me/profession Yes Update profession
PUT /api/profiles/me/expertise-areas Yes Replace expertise areas
POST /api/help-requests Optional Create help request
GET /api/help-requests Yes List own help requests
GET /api/help-requests/{requestId} Yes or guest token Get one help request
PATCH /api/help-requests/{requestId}/status Yes or guest token Update request status
GET /api/availability/status Yes Get availability and assignment
POST /api/availability/toggle Yes Set availability
POST /api/availability/sync Yes Sync offline availability records
GET /api/availability/my-assignment Yes Get active assignment
POST /api/availability/assignments/{assignmentId}/cancel Yes Cancel assignment
POST /api/availability/assignments/resolve Yes Resolve assigned request

Notes for Milestone Report

  • The API is modularized into auth, profiles, help-requests, and availability.
  • Authentication uses JWT bearer tokens.
  • Help request creation supports both authenticated users and guests.
  • Guest users receive a request-specific access token for tracking their own help request.
  • Volunteer availability can automatically create assignments for pending help requests.
  • Profile data is separated into base profile, physical information, health information, location, privacy settings, profession, and expertise areas.
🎓 Team Members

📄 Templates

📅 Weekly Meetings

🧪 Lab Reports

🎬 Scenarios and Mock-ups

🧩 Use Case Diagrams

🏗️ Class Diagram

🔁 Sequence Diagrams

🛠️ Implementation Plan

📦 Deliverables

MVP Deliverables
Final Milestone Deliverables

📚 Project

✅ Acceptance Tests

🚀 Releases

Clone this wiki locally