{"openapi":"3.0.0","info":{"title":"SendPro API","version":"1.0.0","description":"SendPro Rider Recruitment API"},"servers":[{"url":"http://localhost:3040"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}}},"paths":{"/api/auth/register":{"post":{"tags":["Authentication"],"summary":"Register a new user","description":"Creates a new SendPro user account","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["fullName","email","phoneNumber","password"],"properties":{"fullName":{"type":"string","example":"Peter Emeka"},"email":{"type":"string","example":"peter@test.com"},"phoneNumber":{"type":"string","example":8012345678},"password":{"type":"string","example":12345678}}}}}},"responses":{"201":{"description":"Registration successful"}}}},"/api/auth/login":{"post":{"tags":["Authentication"],"summary":"Login user","description":"Authenticates user and returns JWT token","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string","example":"admin@sendpro.com"},"password":{"type":"string","example":12345678}}}}}},"responses":{"200":{"description":"Login successful"}}}},"/api/auth/me":{"get":{"tags":["Authentication"],"summary":"Get current authenticated user","description":"Returns the currently authenticated user","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Current user fetched successfully"},"401":{"description":"Unauthorized"}}}},"/api/auth/logout":{"post":{"tags":["Authentication"],"summary":"Logout user","description":"Logs out currently authenticated user","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Logout successful"},"401":{"description":"Unauthorized"}}}},"/api/rider/apply":{"post":{"tags":["Rider"],"summary":"Apply as rider","description":"Public endpoint for submitting a rider application","responses":{"201":{"description":"Rider application submitted successfully"}}}},"/api/rider/me":{"get":{"tags":["Rider"],"summary":"Get my rider profile","description":"Returns the authenticated rider profile","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Rider profile fetched successfully"},"401":{"description":"Unauthorized"}}},"put":{"tags":["Rider"],"summary":"Update my rider profile","description":"Updates the authenticated rider profile","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Rider profile updated successfully"},"401":{"description":"Unauthorized"}}}},"/api/rider/submit":{"patch":{"tags":["Rider"],"summary":"Submit rider application","description":"Submits the authenticated rider application for review","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Rider application submitted successfully"},"401":{"description":"Unauthorized"}}}},"/api/rider/documents":{"post":{"tags":["Rider Documents"],"summary":"Upload rider document","description":"Uploads a document for the authenticated rider","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"201":{"description":"Document uploaded successfully"}}},"get":{"tags":["Rider Documents"],"summary":"Get rider documents","description":"Returns all documents uploaded by the authenticated rider","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Documents fetched successfully"}}}},"/api/rider/documents/{id}":{"put":{"tags":["Rider Documents"],"summary":"Update rider document","description":"Updates an uploaded rider document","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Document updated successfully"}}},"delete":{"tags":["Rider Documents"],"summary":"Delete rider document","description":"Deletes a rider document","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Document deleted successfully"}}}},"/api/rider/work-experiences":{"post":{"tags":["Rider Work Experiences"],"summary":"Create work experience","security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Work experience created successfully"}}},"get":{"tags":["Rider Work Experiences"],"summary":"Get work experiences","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Work experiences fetched successfully"}}}},"/api/rider/work-experiences/{id}":{"put":{"tags":["Rider Work Experiences"],"summary":"Update work experience","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Work experience updated successfully"}}},"delete":{"tags":["Rider Work Experiences"],"summary":"Delete work experience","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Work experience deleted successfully"}}}},"/api/rider/guarantors":{"post":{"tags":["Rider Guarantors"],"summary":"Create guarantor","security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Guarantor created successfully"}}},"get":{"tags":["Rider Guarantors"],"summary":"Get guarantors","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Guarantors fetched successfully"}}}},"/api/rider/guarantors/{id}":{"put":{"tags":["Rider Guarantors"],"summary":"Update guarantor","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Guarantor updated successfully"}}},"delete":{"tags":["Rider Guarantors"],"summary":"Delete guarantor","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Guarantor deleted successfully"}}}},"/api/rider/next-of-kin":{"post":{"tags":["Rider Next Of Kin"],"summary":"Create next of kin","security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Next of kin created successfully"}}},"get":{"tags":["Rider Next Of Kin"],"summary":"Get next of kin","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Next of kin fetched successfully"}}},"put":{"tags":["Rider Next Of Kin"],"summary":"Update next of kin","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Next of kin updated successfully"}}},"delete":{"tags":["Rider Next Of Kin"],"summary":"Delete next of kin","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Next of kin deleted successfully"}}}},"/api/rider/medical-info":{"post":{"tags":["Rider Medical Info"],"summary":"Create medical info","security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Medical info created successfully"}}},"get":{"tags":["Rider Medical Info"],"summary":"Get medical info","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Medical info fetched successfully"}}},"put":{"tags":["Rider Medical Info"],"summary":"Update medical info","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Medical info updated successfully"}}},"delete":{"tags":["Rider Medical Info"],"summary":"Delete medical info","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Medical info deleted successfully"}}}},"/api/rider/criminal-declaration":{"post":{"tags":["Rider Criminal Declaration"],"summary":"Create criminal declaration","security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Criminal declaration created successfully"}}},"get":{"tags":["Rider Criminal Declaration"],"summary":"Get criminal declaration","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Criminal declaration fetched successfully"}}},"put":{"tags":["Rider Criminal Declaration"],"summary":"Update criminal declaration","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Criminal declaration updated successfully"}}},"delete":{"tags":["Rider Criminal Declaration"],"summary":"Delete criminal declaration","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Criminal declaration deleted successfully"}}}},"/api/rider/financial-info":{"post":{"tags":["Rider Financial Info"],"summary":"Create financial info","security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Financial info created successfully"}}},"get":{"tags":["Rider Financial Info"],"summary":"Get financial info","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Financial info fetched successfully"}}},"put":{"tags":["Rider Financial Info"],"summary":"Update financial info","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Financial info updated successfully"}}},"delete":{"tags":["Rider Financial Info"],"summary":"Delete financial info","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Financial info deleted successfully"}}}},"/api/rider/screening-answers":{"post":{"tags":["Rider Screening Answers"],"summary":"Create screening answers","security":[{"bearerAuth":[]}],"responses":{"201":{"description":"Screening answers created successfully"}}},"get":{"tags":["Rider Screening Answers"],"summary":"Get screening answers","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Screening answers fetched successfully"}}},"put":{"tags":["Rider Screening Answers"],"summary":"Update screening answers","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Screening answers updated successfully"}}},"delete":{"tags":["Rider Screening Answers"],"summary":"Delete screening answers","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Screening answers deleted successfully"}}}},"/api/rider/passport-photo":{"patch":{"tags":["Rider"],"summary":"Update passport photo","description":"Uploads or updates the authenticated rider passport photo","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"200":{"description":"Passport photo updated successfully"}}}},"/api/rider/preview":{"get":{"tags":["Rider"],"summary":"Preview rider application","description":"Returns a complete preview of the authenticated rider application","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Rider application preview fetched successfully"}}}},"/api/rider/admin/applications":{"get":{"tags":["Rider Admin"],"summary":"Get admin rider applications","description":"Returns rider applications for authorized admin roles","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Applications fetched successfully"},"403":{"description":"Forbidden"}}}},"/api/rider/admin/applications-table":{"get":{"tags":["Rider Admin"],"summary":"Get admin rider applications table","description":"Returns rider applications formatted for admin table view","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Applications table fetched successfully"}}}},"/api/rider/admin/applications/{id}":{"get":{"tags":["Rider Admin"],"summary":"Get admin rider application by ID","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Application fetched successfully"}}}},"/api/rider/admin/applications/{id}/status":{"patch":{"tags":["Rider Admin"],"summary":"Update rider application status","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Application status updated successfully"}}}},"/api/rider/admin/applications/{id}/interview-schedule":{"post":{"tags":["Rider Admin Interview Schedule"],"summary":"Create interview schedule","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Interview schedule created successfully"}}},"get":{"tags":["Rider Admin Interview Schedule"],"summary":"Get interview schedules","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Interview schedules fetched successfully"}}}},"/api/rider/admin/interview-schedule/{id}":{"put":{"tags":["Rider Admin Interview Schedule"],"summary":"Update interview schedule","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Interview schedule updated successfully"}}},"delete":{"tags":["Rider Admin Interview Schedule"],"summary":"Delete interview schedule","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Interview schedule deleted successfully"}}}},"/api/rider/admin/applications/{id}/interview-assessment":{"post":{"tags":["Rider Admin Interview Assessment"],"summary":"Create interview assessment","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Interview assessment created successfully"}}},"get":{"tags":["Rider Admin Interview Assessment"],"summary":"Get interview assessments","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Interview assessments fetched successfully"}}}},"/api/rider/admin/interview-assessment/{id}":{"put":{"tags":["Rider Admin Interview Assessment"],"summary":"Update interview assessment","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Interview assessment updated successfully"}}},"delete":{"tags":["Rider Admin Interview Assessment"],"summary":"Delete interview assessment","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Interview assessment deleted successfully"}}}},"/api/rider/admin/applications/{id}/blacklist":{"post":{"tags":["Rider Admin Blacklist"],"summary":"Blacklist rider application","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"201":{"description":"Rider blacklisted successfully"}}}},"/api/rider/admin/blacklist":{"get":{"tags":["Rider Admin Blacklist"],"summary":"Get blacklist","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Blacklist fetched successfully"}}}},"/api/rider/admin/applications/{id}/status-history":{"get":{"tags":["Rider Admin Status History"],"summary":"Get rider application status history","security":[{"bearerAuth":[]}],"parameters":[{"in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Status history fetched successfully"}}}}},"tags":[]}