Menu

Navigate NHS Job Board

?

Guest

Sign in to save jobs & applications

NHS Jobs Portal API Documentation

Complete API reference for the NHS Jobs Portal. Access endpoints for job listings, applications, employer management, and user authentication.

AI/Agent Integration Resources

Authentication

POST

/api/auth/register

Register a new user account (jobseeker or employer). Returns access and refresh tokens upon successful registration.

Body Parameters

NameTypeDescription
email*stringValid email address. Must be unique.
password*stringPassword with minimum 8 characters. Must contain uppercase, lowercase, and numbers.
name*stringFull name of the user.
userType*stringEither 'jobseeker' or 'employer'.

Responses

Success (201)

{
  "success": true,
  "data": {
    "accessToken": "eyJhbGc...",
    "refreshToken": "eyJhbGc...",
    "user": {
      "id": "uuid",
      "email": "[email protected]",
      "name": "John Doe",
      "role": "jobseeker"
    }
  },
  "message": "Registration successful"
}

Error (409)

{
  "success": false,
  "error": "Email already registered"
}
POST

/api/auth/login

Authenticate with email and password. Returns JWT access token (15 min) and refresh token (7 days).

Body Parameters

NameTypeDescription
email*stringRegistered email address.
password*stringAccount password.

Responses

Success (200)

{
  "success": true,
  "data": {
    "accessToken": "eyJhbGc...",
    "refreshToken": "eyJhbGc...",
    "user": {
      "id": "uuid",
      "email": "[email protected]",
      "name": "John Doe",
      "role": "jobseeker",
      "subscriptionStatus": "active"
    }
  },
  "message": "Login successful"
}

Error (401)

{
  "success": false,
  "error": "Invalid email or password"
}
POST

/api/auth/refresh

Refresh expired access token using refresh token. Returns new access and refresh tokens.

Body Parameters

NameTypeDescription
refreshToken*stringValid refresh token from login or previous refresh.

Responses

Success (200)

{
  "success": true,
  "data": {
    "accessToken": "eyJhbGc...",
    "refreshToken": "eyJhbGc..."
  },
  "message": "Token refreshed successfully"
}

Error (401)

{
  "success": false,
  "error": "Invalid or expired refresh token"
}
POST

/api/auth/logout

Logout current user. Invalidates tokens on the server.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Logged out successfully"
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}

User Profile

GET

/api/auth/me

Get current authenticated user's profile information.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "id": "uuid",
    "email": "[email protected]",
    "name": "John Doe",
    "role": "jobseeker",
    "createdAt": "2024-01-15T10:30:00Z",
    "subscriptionStatus": "active"
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
GET

/api/jobseekers/profile

Get detailed user profile with preferences and settings.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "id": "uuid",
    "email": "[email protected]",
    "name": "John Doe",
    "bio": "Healthcare professional",
    "location": "London, UK",
    "preferences": {
      "jobAlerts": true,
      "emailNotifications": true
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
PUT

/api/jobseekers/profile

Update jobseeker profile. Requires 'intent' parameter with value 'update-profile'. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
intent*stringAction type: 'update-profile'.
profile*objectProfile object containing fields: firstName, lastName, email, phone, location, specialty, currentRole, experience, preferredLocation, locationRadius, employmentTypes, salaryMin, salaryMax.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Profile updated successfully",
  "data": {
    "intent": "update-profile",
    "profile": {
      "firstName": "John",
      "lastName": "Doe"
    }
  }
}

Error (400)

{
  "success": false,
  "error": "Intent is required"
}
POST

/api/jobseekers/saved

Save a job listing for the current user. Add a job to the user's saved/bookmarked jobs list.

Body Parameters

NameTypeDescription
listingId*stringUUID of the job listing to save.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (201)

{
  "success": true,
  "data": {
    "id": "uuid",
    "listingId": "uuid",
    "title": "Nurse",
    "company": "NHS Trust",
    "savedAt": "2024-01-15T10:30:00Z"
  },
  "message": "Job saved successfully"
}

Error (400)

{
  "success": false,
  "error": "Already saved"
}

Employers API

GET

/api/employers/profile

Get employer profile information including company details and contact information.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "id": "uuid",
    "email": "[email protected]",
    "profile": {
      "name": "John Doe",
      "jobTitle": "HR Manager"
    },
    "company": {
      "name": "NHS Trust",
      "industry": "Healthcare",
      "size": "1000+"
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
PUT

/api/employers/profile

Update employer profile. Requires 'intent' parameter. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
intent*stringAction type: 'update-profile'.
profileobjectProfile data containing name, jobTitle, etc.
companyNamestringCompany name.
industrystringIndustry type.
companySizestringCompany size.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Profile updated successfully"
}

Error (429)

{
  "success": false,
  "error": "Rate limit exceeded"
}
GET

/api/employers/jobs

Get employer's job listings with pagination.

Body Parameters

NameTypeDescription
pagenumberPage number (default: 1).
limitnumberResults per page (default: 20, max: 100).

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "listings": [
      {
        "id": "uuid",
        "title": "Nurse",
        "company": "NHS Trust",
        "status": "active"
      }
    ],
    "pagination": {
      "total": 50,
      "page": 1,
      "limit": 20,
      "totalPages": 3
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
POST

/api/employers/jobs

Create new job listing. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
title*stringJob title.
description*stringJob description.
departmentstringDepartment.
contractTypestringContract type (permanent, temporary, contract).
salaryobjectSalary object with min, max, currency.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (201)

{
  "success": true,
  "message": "Job listing created successfully",
  "data": {
    "id": "uuid"
  }
}

Error (429)

{
  "success": false,
  "error": "Rate limit exceeded"
}
GET

/api/employers/applications

Get applications for employer's job listings with pagination.

Body Parameters

NameTypeDescription
pagenumberPage number (default: 1).
limitnumberResults per page (default: 20, max: 100).

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "applications": [
      {
        "id": "uuid",
        "jobId": "uuid",
        "jobTitle": "Nurse",
        "status": "pending"
      }
    ],
    "pagination": {
      "total": 100,
      "page": 1,
      "limit": 20,
      "totalPages": 5
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
GET

/api/employers/team

Get employer team members with pagination.

Body Parameters

NameTypeDescription
pagenumberPage number (default: 1).
limitnumberResults per page (default: 20, max: 100).

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "team": [
      {
        "id": "uuid",
        "name": "Jane Doe",
        "email": "[email protected]",
        "role": "Recruiter"
      }
    ],
    "pagination": {
      "total": 10,
      "page": 1,
      "limit": 20,
      "totalPages": 1
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
POST

/api/employers/team

Add team member. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
intent*stringAction type: 'add-member'.
name*stringTeam member name.
email*stringTeam member email.
rolestringTeam member role.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Team member added successfully"
}

Error (429)

{
  "success": false,
  "error": "Rate limit exceeded"
}
GET

/api/employers/settings

Get employer settings.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "id": "uuid",
    "email": "[email protected]",
    "company": {
      "name": "NHS Trust"
    },
    "contact": {
      "name": "John Doe"
    },
    "preferences": {}
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
PUT

/api/employers/settings

Update employer settings. Requires 'intent' parameter. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
intent*stringAction type: 'update-profile' or 'update-notifications'.
companyNamestringCompany name for update-profile intent.
industrystringIndustry for update-profile intent.
emailAlertsbooleanEmail alerts preference for update-notifications intent.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Settings updated successfully"
}

Error (429)

{
  "success": false,
  "error": "Rate limit exceeded"
}
DELETE

/api/employers/settings

Reset employer settings to defaults. Rate limited to 10 requests per 15 minutes per IP.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Settings reset to defaults successfully",
  "data": {
    "settings": {
      "notifications": {},
      "preferences": {}
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
DELETE

/api/employers/profile

Soft delete employer account. Rate limited to 10 requests per 15 minutes per IP.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Account deleted successfully"
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
GET

/api/employers/jobs/:id

Get specific job listing details by ID.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "job": {
      "id": "uuid",
      "title": "Nurse",
      "description": "Job description",
      "company": "NHS Trust",
      "location": "London, UK",
      "status": "active"
    }
  }
}

Error (404)

{
  "success": false,
  "error": "Job listing not found"
}
PUT

/api/employers/jobs/:id

Update individual job listing. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
titlestringJob title.
descriptionstringJob description.
departmentstringDepartment.
contractTypestringContract type.
salaryobjectSalary object.
statusstringJob status (active, inactive, closed).

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Job listing updated successfully",
  "data": {
    "id": "uuid"
  }
}

Error (404)

{
  "success": false,
  "error": "Job listing not found"
}
DELETE

/api/employers/jobs/:id

Archive (soft delete) job listing. Rate limited to 10 requests per 15 minutes per IP.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Job listing archived successfully",
  "data": {
    "id": "uuid"
  }
}

Error (404)

{
  "success": false,
  "error": "Job listing not found"
}
GET

/api/employers/applications/:id

Get specific application details by ID.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "application": {
      "id": "uuid",
      "jobId": "uuid",
      "applicantEmail": "[email protected]",
      "jobTitle": "Nurse",
      "status": "pending"
    }
  }
}

Error (404)

{
  "success": false,
  "error": "Application not found"
}
PUT

/api/employers/applications/:id

Update application status. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
status*stringNew status (pending, review, interview, accepted, rejected, withdrawn).

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Application status updated successfully",
  "data": {
    "id": "uuid",
    "status": "review"
  }
}

Error (400)

{
  "success": false,
  "error": "Invalid status"
}
DELETE

/api/employers/applications/:id

Withdraw application. Rate limited to 10 requests per 15 minutes per IP.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Application withdrawn successfully",
  "data": {
    "id": "uuid"
  }
}

Error (404)

{
  "success": false,
  "error": "Application not found"
}
POST

/api/auth/register-employer

Register a new employer account. Rate limited to 5 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
email*stringValid email address. Must be unique.
password*stringPassword with minimum 8 characters.
name*stringFull name of the user.
companyName*stringCompany name.
industrystringIndustry type.
companySizestringCompany size.

Responses

Success (201)

{
  "success": true,
  "data": {
    "accessToken": "eyJhbGc...",
    "refreshToken": "eyJhbGc...",
    "user": {
      "id": "uuid",
      "email": "[email protected]",
      "role": "EMPLOYER"
    }
  },
  "message": "Registration successful"
}

Error (429)

{
  "success": false,
  "error": "Rate limit exceeded"
}
GET

/api/employers/analytics

Get overall employer analytics including job counts and application statistics.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "jobs": {
      "total": 50,
      "active": 35,
      "draft": 15
    },
    "applications": {
      "total": 200,
      "pending": 50,
      "review": 75,
      "interview": 30,
      "accepted": 40,
      "rejected": 5
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
GET

/api/employers/jobs/:id/analytics

Get individual job performance metrics including application counts and conversion rate.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "jobId": "uuid",
    "title": "Nurse",
    "views": 500,
    "applications": {
      "total": 25,
      "pending": 10,
      "review": 8,
      "interview": 4,
      "accepted": 3
    },
    "conversionRate": 5
  }
}

Error (404)

{
  "success": false,
  "error": "Job listing not found"
}
GET

/api/employers/applications/stats

Get application statistics with filters by status, time period, and job.

Body Parameters

NameTypeDescription
statusstringFilter by application status.
startDatestringFilter by start date (ISO format).
endDatestringFilter by end date (ISO format).
jobIdstringFilter by job ID.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "total": 100,
    "byStatus": {
      "pending": 30,
      "review": 40,
      "interview": 20,
      "accepted": 10
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
POST

/api/employers/jobs/batch

Batch create up to 100 job listings. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
jobs*arrayArray of job objects with title, description, department, contractType, salary.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Batch created: 90 jobs succeeded, 10 failed",
  "data": {
    "created": [
      {
        "id": "uuid",
        "title": "Nurse"
      }
    ],
    "failed": [
      {
        "job": {},
        "error": "title is required"
      }
    ]
  }
}

Error (400)

{
  "success": false,
  "error": "Maximum 100 jobs per batch request"
}
PUT

/api/employers/jobs/batch

Batch update up to 100 job listings. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
jobs*arrayArray of job objects with id and fields to update.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Batch updated: 95 jobs succeeded, 5 failed",
  "data": {
    "updated": [
      {
        "id": "uuid"
      }
    ],
    "failed": [
      {
        "job": {},
        "error": "Job listing not found"
      }
    ]
  }
}

Error (400)

{
  "success": false,
  "error": "Maximum 100 jobs per batch request"
}
GET

/api/employers/applications/export

Export application data to CSV format.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
POST

/api/employers/applications/:id/interview

Schedule an interview for a specific application.

Body Parameters

NameTypeDescription
scheduledAt*stringInterview date and time (ISO format).
location*stringInterview location or meeting link.
interviewer*stringName of the interviewer.
notesstringAdditional interview notes.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Interview scheduled successfully",
  "data": {
    "applicationId": "uuid",
    "interview": {
      "scheduledAt": "2024-02-01T10:00:00Z",
      "location": "Room 101",
      "interviewer": "John Doe"
    }
  }
}

Error (404)

{
  "success": false,
  "error": "Application not found"
}
PUT

/api/employers/applications/:id/interview

Update interview details for a specific application.

Body Parameters

NameTypeDescription
scheduledAtstringUpdated interview date and time.
locationstringUpdated interview location.
interviewerstringUpdated interviewer.
statusstringInterview status (scheduled, completed, cancelled).
outcomestringInterview outcome (pass, fail, pending).
notesstringUpdated interview notes.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Interview updated successfully",
  "data": {
    "applicationId": "uuid",
    "interview": {
      "status": "completed",
      "outcome": "pass"
    }
  }
}

Error (404)

{
  "success": false,
  "error": "Application not found"
}
GET

/api/employers/interviews

Get all scheduled interviews for the employer's jobs.

Body Parameters

NameTypeDescription
statusstringFilter by interview status.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "interviews": [
      {
        "applicationId": "uuid",
        "jobId": "uuid",
        "jobTitle": "Nurse",
        "applicantName": "Jane Doe",
        "applicantEmail": "[email protected]",
        "status": "pending",
        "interview": {
          "scheduledAt": "2024-02-01T10:00:00Z",
          "location": "Room 101"
        }
      }
    ],
    "total": 25
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
POST

/api/employers/jobs/:id/duplicate

Duplicate a job listing to create a copy.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Job duplicated successfully",
  "data": {
    "id": "uuid",
    "title": "Nurse (Copy)"
  }
}

Error (404)

{
  "success": false,
  "error": "Job listing not found"
}
POST

/api/employers/jobs/:id/renew

Extend an expired job listing's deadline.

Body Parameters

NameTypeDescription
durationDaysnumberNumber of days to extend (default: 30).

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Job renewed successfully",
  "data": {
    "id": "uuid",
    "status": "active",
    "applicationDeadline": "2024-03-01T00:00:00Z"
  }
}

Error (404)

{
  "success": false,
  "error": "Job listing not found"
}
GET

/api/employers/organization

Get organization details.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "organizationId": "352",
    "company": {
      "name": "NHS Trust",
      "description": "Healthcare provider",
      "website": "https://example.com",
      "industry": "Healthcare",
      "size": "1000+"
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
PUT

/api/employers/organization

Update organization profile.

Body Parameters

NameTypeDescription
namestringOrganization name.
descriptionstringOrganization description.
websitestringOrganization website.
logostringOrganization logo URL.
industrystringIndustry type.
sizestringOrganization size.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Organization updated successfully",
  "data": {
    "company": {
      "name": "NHS Trust"
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
GET

/api/employers/team/:id/permissions

Get team member permissions.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "userId": "uuid",
    "role": "EMPLOYER",
    "permissions": {
      "jobs": {
        "create": true,
        "update": true,
        "delete": false
      },
      "applications": {
        "view": true,
        "update": true
      }
    }
  }
}

Error (403)

{
  "success": false,
  "error": "Team member not in your organization"
}
PUT

/api/employers/team/:id/permissions

Update team member permissions (Admin only).

Body Parameters

NameTypeDescription
permissionsobjectPermissions object.
rolestringTeam member role.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Team member permissions updated successfully",
  "data": {
    "userId": "uuid",
    "permissions": {},
    "role": "EMPLOYER"
  }
}

Error (403)

{
  "success": false,
  "error": "Team member not in your organization"
}
GET

/api/employers/jobs/export

Export job listings to CSV format.

Body Parameters

NameTypeDescription
formatstringExport format (only csv supported).

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

Error (400)

{
  "success": false,
  "error": "Only CSV format is supported"
}
POST

/api/employers/applications/batch

Batch update up to 100 application statuses.

Body Parameters

NameTypeDescription
applications*arrayArray of application objects with id and status.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Batch updated: 95 applications succeeded, 5 failed",
  "data": {
    "updated": [
      {
        "id": "uuid",
        "status": "review"
      }
    ],
    "failed": [
      {
        "appUpdate": {},
        "error": "Application not found"
      }
    ]
  }
}

Error (400)

{
  "success": false,
  "error": "Maximum 100 applications per batch request"
}
POST

/api/employers/applications/:id/contact

Send email to applicant.

Body Parameters

NameTypeDescription
subject*stringEmail subject.
message*stringEmail message content.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Email queued for sending",
  "data": {
    "to": "[email protected]",
    "subject": "Interview Invitation"
  }
}

Error (404)

{
  "success": false,
  "error": "Application not found"
}

Job Listings

GET

/api/listings

Search and retrieve job listings with filtering, pagination, and sorting options.

Body Parameters

NameTypeDescription
pagenumberPage number (default: 1).
limitnumberResults per page (default: 20, max: 100).
searchstringSearch term for job title or description.
locationstringFilter by location (city or region).
contractTypestringFilter by contract type (permanent, temporary, contract).
salary_minnumberMinimum salary filter.
salary_maxnumberMaximum salary filter.

Headers

NameValueRequired
AuthorizationBearer <accessToken>No

Responses

Success (200)

{
  "success": true,
  "data": {
    "listings": [
      {
        "id": "uuid",
        "title": "Nurse",
        "company": "NHS Trust",
        "location": "London",
        "salary": {
          "min": 28000,
          "max": 35000
        },
        "contractType": "permanent",
        "postedAt": "2024-01-15T10:30:00Z"
      }
    ],
    "pagination": {
      "page": 1,
      "limit": 20,
      "total": 1250
    }
  }
}

Error (400)

{
  "success": false,
  "error": "Invalid filter parameters"
}
GET

/api/listings/:id

Get detailed information about a specific job listing.

Headers

NameValueRequired
AuthorizationBearer <accessToken>No

Responses

Success (200)

{
  "success": true,
  "data": {
    "id": "uuid",
    "title": "Senior Nurse",
    "company": "NHS Trust",
    "description": "We are looking for an experienced nurse...",
    "location": "London",
    "salary": {
      "min": 35000,
      "max": 42000
    },
    "contractType": "permanent",
    "requirements": [
      "RN License",
      "5+ years experience"
    ],
    "benefits": [
      "Competitive salary",
      "Pension scheme"
    ],
    "applicationDeadline": "2024-02-15"
  }
}

Error (404)

{
  "success": false,
  "error": "Listing not found"
}
POST

/api/listings/search

Advanced search with full-text search capabilities and complex filters.

Body Parameters

NameTypeDescription
query*stringFull-text search query.
filtersobjectComplex filter object with location, salary, contract type, etc.
sortstringSort by: 'relevance', 'date', 'salary', 'distance'.

Headers

NameValueRequired
AuthorizationBearer <accessToken>No

Responses

Success (200)

{
  "success": true,
  "data": {
    "results": [
      {
        "id": "uuid",
        "title": "Nurse",
        "relevance": 0.95
      }
    ],
    "total": 450
  }
}

Error (400)

{
  "success": false,
  "error": "Invalid search query"
}
PATCH

/api/listings/:id

Partially update a specific job listing. Merges provided fields with existing data.

Body Parameters

NameTypeDescription
meta*objectPartial listing metadata to update. Merged with existing meta.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes
X-API-Key<apiKey>No

Responses

Success (200)

{
  "success": true,
  "data": {
    "uuid": "uuid",
    "meta": {
      "listing": {
        "title": "Updated Title"
      }
    }
  },
  "message": "Listing updated successfully"
}

Error (404)

{
  "success": false,
  "error": "Listing not found"
}
POST

/api/listings/:id/restore

Restore a soft-deleted job listing back to active status.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes
X-API-Key<apiKey>No

Responses

Success (200)

{
  "success": true,
  "message": "Listing restored successfully"
}

Error (404)

{
  "success": false,
  "error": "Listing not found or not deleted"
}
POST

/api/listings/:id/archive

Archive a job listing by setting status to 'archived' with timestamp.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes
X-API-Key<apiKey>No

Responses

Success (200)

{
  "success": true,
  "message": "Listing archived successfully"
}

Error (404)

{
  "success": false,
  "error": "Listing not found"
}
PUT

/api/listings/batch

Batch update multiple job listings. Limited to 100 listings per request.

Body Parameters

NameTypeDescription
array*arrayArray of listing update objects with uuid and meta fields.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes
X-API-Key<apiKey>No

Responses

Success (200)

{
  "success": true,
  "data": [
    {
      "success": true,
      "uuid": "uuid",
      "index": 0
    }
  ],
  "message": "Batch update completed: 1/1 successful"
}

Error (400)

{
  "success": false,
  "error": "Batch update requires an array of listings"
}

Applications

GET

/api/jobseekers/applications

Get list of job applications submitted by the current user with pagination.

Body Parameters

NameTypeDescription
pagenumberPage number (default: 1).
limitnumberResults per page (default: 20, max: 100).

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "applications": [
      {
        "id": "uuid",
        "listingId": "uuid",
        "jobTitle": "Nurse",
        "status": "pending",
        "appliedAt": "2024-01-15T10:30:00Z"
      }
    ],
    "pagination": {
      "total": 50,
      "page": 1,
      "limit": 20,
      "totalPages": 3,
      "hasNext": true,
      "hasPrev": false
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
POST

/api/jobseekers/applications

Submit a job application for a specific listing. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
listingId*stringUUID of the job listing.
coverLetterstringOptional cover letter text.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (201)

{
  "success": true,
  "data": {
    "id": "uuid",
    "listingId": "uuid",
    "status": "pending",
    "appliedAt": "2024-01-15T10:30:00Z"
  },
  "message": "Application submitted successfully"
}

Error (400)

{
  "success": false,
  "error": "Already applied to this position"
}
GET

/api/jobseekers/applications/:id

Get details of a specific application.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "application": {
      "id": "uuid",
      "jobId": "uuid",
      "jobTitle": "Nurse",
      "status": "pending",
      "appliedAt": "2024-01-15T10:30:00Z"
    }
  }
}

Error (404)

{
  "success": false,
  "error": "Application not found"
}
PUT

/api/jobseekers/applications/:id

Update application status.

Body Parameters

NameTypeDescription
statusstringNew status (pending, in-progress, completed, rejected).
statusColorstringCSS classes for status display.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Application updated successfully",
  "data": {
    "application": {
      "id": "uuid",
      "status": "completed"
    }
  }
}

Error (404)

{
  "success": false,
  "error": "Application not found"
}
DELETE

/api/jobseekers/applications/:id

Delete a specific application.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Application deleted successfully",
  "data": {
    "id": "uuid"
  }
}

Error (404)

{
  "success": false,
  "error": "Application not found"
}

Bookmarks

GET

/api/jobseekers/bookmarks

Get list of bookmarked job listings with pagination.

Body Parameters

NameTypeDescription
pagenumberPage number (default: 1).
limitnumberResults per page (default: 20, max: 100).

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "bookmarks": {
      "savedJobs": [
        {
          "id": "uuid",
          "title": "Nurse",
          "company": "NHS Trust",
          "savedAt": "2024-01-15T10:30:00Z"
        }
      ]
    },
    "pagination": {
      "total": 25,
      "page": 1,
      "limit": 20,
      "totalPages": 2,
      "hasNext": true,
      "hasPrev": false
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
POST

/api/jobseekers/bookmarks

Bookmark a job listing for later viewing. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
listingId*stringUUID of the job listing to bookmark.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (201)

{
  "success": true,
  "message": "Listing bookmarked successfully"
}

Error (400)

{
  "success": false,
  "error": "Already bookmarked"
}
GET

/api/jobseekers/bookmarks/:id

Get details of a specific bookmark.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "bookmark": {
      "type": "job",
      "id": "uuid"
    }
  }
}

Error (404)

{
  "success": false,
  "error": "Bookmark not found"
}
PUT

/api/jobseekers/bookmarks/:id

Update bookmark notes.

Body Parameters

NameTypeDescription
notesstringNotes for the bookmark.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Bookmark updated successfully"
}

Error (404)

{
  "success": false,
  "error": "Bookmark not found"
}
DELETE

/api/jobseekers/bookmarks/:id

Remove a specific bookmark.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Bookmark removed successfully",
  "data": {
    "id": "uuid",
    "type": "job"
  }
}

Error (404)

{
  "success": false,
  "error": "Bookmark not found"
}

Documents

GET

/api/jobseekers/documents

Get list of user's uploaded documents (CVs, cover letters, etc.) with pagination.

Body Parameters

NameTypeDescription
pagenumberPage number (default: 1).
limitnumberResults per page (default: 20, max: 100).

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "documents": [
      {
        "id": "uuid",
        "type": "cv",
        "title": "My CV",
        "uploadedAt": "2024-01-15T10:30:00Z"
      }
    ],
    "pagination": {
      "total": 10,
      "page": 1,
      "limit": 20,
      "totalPages": 1,
      "hasNext": false,
      "hasPrev": false
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
POST

/api/jobseekers/documents

Upload or manage documents. Requires 'intent' parameter. Intents: 'upload-document', 'update-document', 'delete-document', 'set-default'. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
intent*stringAction type: 'upload-document', 'update-document', 'delete-document', or 'set-default'.
typestringDocument type for upload-document intent: 'cv', 'cover-letter', 'certification', 'other'.
titlestringDocument title for upload-document or update-document intents.
contentstringDocument content for upload-document or update-document intents.
fileNamestringFile name for upload-document intent.
documentIdstringDocument ID for update-document, delete-document, or set-default intents.
isDefaultbooleanSet as default for document type for update-document or set-default intents.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Document uploaded successfully",
  "data": {
    "document": {
      "id": "uuid",
      "type": "cv",
      "title": "My CV"
    }
  }
}

Error (400)

{
  "success": false,
  "error": "Intent is required"
}
GET

/api/jobseekers/documents/:id

Get details of a specific document.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "document": {
      "id": "uuid",
      "type": "cv",
      "title": "My CV"
    }
  }
}

Error (404)

{
  "success": false,
  "error": "Document not found"
}
PUT

/api/jobseekers/documents/:id

Update document details.

Body Parameters

NameTypeDescription
titlestringDocument title.
contentstringDocument content.
isDefaultbooleanSet as default for document type.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Document updated successfully"
}

Error (404)

{
  "success": false,
  "error": "Document not found"
}
DELETE

/api/jobseekers/documents/:id

Delete a specific document.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Document deleted successfully"
}

Error (404)

{
  "success": false,
  "error": "Document not found"
}

Notifications

GET

/api/jobseekers/notifications

Get user notifications with pagination.

Body Parameters

NameTypeDescription
pagenumberPage number (default: 1).
limitnumberResults per page (default: 20, max: 100).

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "notifications": [
      {
        "id": "uuid",
        "type": "application",
        "message": "Application received",
        "read": false
      }
    ],
    "pagination": {
      "total": 15,
      "page": 1,
      "limit": 20,
      "totalPages": 1,
      "hasNext": false,
      "hasPrev": false
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
PUT

/api/jobseekers/notifications/:id

Mark notification as read. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
readbooleanRead status.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Notification updated successfully"
}

Error (404)

{
  "success": false,
  "error": "Notification not found"
}
DELETE

/api/jobseekers/notifications/:id

Delete a notification.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Notification deleted successfully"
}

Error (404)

{
  "success": false,
  "error": "Notification not found"
}

Analytics & Activity

GET

/api/jobseekers/analytics

Get user analytics including application stats, bookmark counts, and profile completion.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "analytics": {
      "applications": {
        "total": 10,
        "pending": 3
      },
      "bookmarks": {
        "savedJobs": 25
      },
      "profile": {
        "completion": 75
      }
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
GET

/api/jobseekers/activity

Get user activity timeline with pagination.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "activities": [
      {
        "type": "application",
        "action": "applied",
        "description": "Applied for Nurse",
        "timestamp": "2024-01-15T10:30:00Z"
      }
    ],
    "total": 50
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}

Data Export

GET

/api/jobseekers/export/applications

Export application history in JSON or CSV format.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "applications": [
      {
        "id": "uuid",
        "jobTitle": "Nurse",
        "status": "pending"
      }
    ]
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
GET

/api/jobseekers/export/profile

Export profile data in JSON or CSV format.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "profile": {
      "uuid": "uuid",
      "email": "[email protected]",
      "profile": {
        "name": "John Doe"
      }
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}

Onboarding & Recommendations

GET

/api/jobseekers/onboarding

Get onboarding status and progress.

Headers

NameValueRequired
AuthorizationBearer <accessToken>No

Responses

Success (200)

{
  "success": true,
  "onboardingComplete": true,
  "onboarding": {
    "steps": []
  }
}

Error (500)

{
  "success": false,
  "error": "Internal server error"
}
POST

/api/jobseekers/onboarding

Handle onboarding actions. Uses FormData instead of JSON body. Actions: 'capture_email', 'track_step', 'update_preferences'. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
action*stringAction type: 'capture_email', 'track_step', or 'update_preferences'.
emailstringEmail address for capture_email action.
sourcestringSource of email capture for capture_email action: 'apply', 'save', 'search'.
stepstringOnboarding step name for track_step action.
actionTypestringStep action type for track_step: 'viewed', 'completed', 'skipped'.
preferencesstringJSON string of preferences for update_preferences action.

Headers

NameValueRequired
AuthorizationBearer <accessToken>No

Responses

Success (200)

{
  "success": true,
  "message": "Email captured for guest user",
  "isGuest": true
}

Error (400)

{
  "success": false,
  "error": "Invalid action"
}
GET

/api/jobseekers/recommendations

Get personalized job recommendations based on user preferences.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "recommendations": [
      {
        "uuid": "uuid",
        "title": "Nurse",
        "relevanceScore": 85
      }
    ],
    "total": 100
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}

Billing & Subscriptions

GET

/api/jobseekers/billing

Get billing information, subscription status, and available plans.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "billing": {
      "subscription": {
        "tier": "premium",
        "status": "active",
        "expiresAt": "2024-02-15T00:00:00Z",
        "autoRenew": true
      },
      "billingHistory": [],
      "plans": [
        {
          "id": "basic",
          "name": "Basic",
          "price": 0
        },
        {
          "id": "premium",
          "name": "Premium",
          "price": 29.99
        }
      ],
      "paymentMethods": []
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
POST

/api/jobseekers/billing

Create subscription, cancel subscription, update payment method, or upgrade plan. Requires 'intent' parameter. Rate limited to 10 requests per 15 minutes per IP.

Body Parameters

NameTypeDescription
intent*stringAction type: 'create-subscription', 'cancel-subscription', 'update-payment-method', or 'upgrade-plan'.
planIdstringPlan ID for create-subscription or upgrade-plan intents.
paymentMethodIdstringPayment method ID for create-subscription or update-payment-method intents.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Billing action completed successfully",
  "data": {
    "intent": "create-subscription",
    "subscription": {
      "tier": "premium",
      "status": "active"
    }
  }
}

Error (400)

{
  "success": false,
  "error": "Intent is required"
}

Dashboard

GET

/api/jobseekers/dashboard

Get personalized dashboard content with recommendations, activity, and stats. Works for both authenticated and guest users.

Headers

NameValueRequired
AuthorizationBearer <accessToken>No

Responses

Success (200)

{
  "success": true,
  "data": {
    "dashboard": {
      "isGuest": false,
      "subscriptionStatus": {
        "tier": "premium",
        "isActive": true
      },
      "recommendations": [
        {
          "id": "uuid",
          "title": "Nurse",
          "company": "NHS Trust"
        }
      ],
      "recentActivity": [
        {
          "type": "application",
          "title": "Applied to Nurse",
          "timestamp": "2024-01-15T10:30:00Z"
        }
      ],
      "stats": {
        "applicationsCount": 5,
        "bookmarksCount": 10,
        "recommendationsCount": 5
      }
    }
  }
}

Error (500)

{
  "success": false,
  "error": "Internal server error"
}
POST

/api/jobseekers/dashboard

Generate personalized content via AI or track dashboard actions. Requires 'intent' parameter.

Body Parameters

NameTypeDescription
intent*stringAction type: 'generate-personalized-content' or 'track-dashboard-action'.
specialtystringHealthcare specialty for personalized content generation.
careerGoalsstringCareer goals for personalized content generation.
experiencestringExperience level for personalized content generation.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Dashboard action completed successfully",
  "data": {
    "intent": "generate-personalized-content",
    "personalizedContent": {
      "headline": "Find Your Perfect Healthcare Career"
    }
  }
}

Error (400)

{
  "success": false,
  "error": "Intent is required"
}

Search

GET

/api/jobseekers/search

Search for jobs with personalized filters. Works for both authenticated and guest users. Supports query parameters for filtering and pagination.

Body Parameters

NameTypeDescription
qstringSearch query for job title, description, or company.
locationstringFilter by location (city or region).
typestringFilter by contract type (permanent, temporary, contract).
salaryMinnumberMinimum salary filter.
salaryMaxnumberMaximum salary filter.
pagenumberPage number (default: 1).
limitnumberResults per page (default: 10, max: 20).
sortstringSort by: 'postedAt', 'salary', 'title', 'location'.
orderstringSort order: 'asc' or 'desc' (default: 'desc').

Headers

NameValueRequired
AuthorizationBearer <accessToken>No

Responses

Success (200)

{
  "success": true,
  "data": {
    "search": {
      "jobs": [
        {
          "id": "uuid",
          "title": "Nurse",
          "company": "NHS Trust",
          "location": {
            "city": "London",
            "region": "Greater London"
          },
          "type": "permanent",
          "salary": {
            "min": 28000,
            "max": 35000
          },
          "isBookmarked": false
        }
      ],
      "pagination": {
        "page": 1,
        "limit": 10,
        "total": 125,
        "totalPages": 13,
        "hasNext": true,
        "hasPrev": false
      }
    }
  }
}

Error (500)

{
  "success": false,
  "error": "Internal server error"
}
POST

/api/jobseekers/search

Save search preferences, update search preferences, or delete saved searches. Requires 'intent' parameter.

Body Parameters

NameTypeDescription
intent*stringAction type: 'save-search', 'update-search-preferences', or 'delete-search'.
namestringSearch name for save-search intent.
querystringSearch query for save-search intent.
locationstringLocation filter for save-search intent.
contractTypestringContract type filter for save-search intent.
emailAlertsbooleanEnable email alerts for saved search.
preferredLocationstringPreferred location for update-search-preferences intent.
employmentTypesarrayPreferred employment types for update-search-preferences intent.
searchIdstringSearch ID for delete-search intent.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Search action completed successfully",
  "data": {
    "intent": "save-search",
    "savedSearches": [
      {
        "id": "uuid",
        "name": "Nurse jobs in London",
        "query": "nurse",
        "location": "London"
      }
    ]
  }
}

Error (400)

{
  "success": false,
  "error": "Intent is required"
}

Settings

GET

/api/jobseekers/settings

Get current user settings. Supports jobseeker, employer, and employer-team roles.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "data": {
    "settings": {
      "id": 1,
      "uuid": "uuid",
      "email": "[email protected]",
      "profile": {
        "name": "John Doe",
        "bio": "Experienced nurse"
      },
      "preferences": {
        "notifications": {
          "email": true,
          "jobAlerts": false
        },
        "jobPreferences": {
          "preferredLocation": "London"
        }
      },
      "bookmarks": {
        "savedJobs": [],
        "savedSearches": []
      }
    }
  }
}

Error (401)

{
  "success": false,
  "error": "Unauthorized"
}
PUT

/api/jobseekers/settings

Update user settings. Requires 'intent' parameter. Jobseeker intents: 'update-profile', 'update-notifications', 'update-privacy', 'update-job-preferences'. Employer intents: 'update-profile', 'update-notifications', 'update-contact', 'update-employer-profile'.

Body Parameters

NameTypeDescription
intent*stringAction type based on user role.
profileobjectProfile data for update-profile intent.
emailbooleanEmail notification preference for update-notifications intent.
jobAlertsbooleanJob alerts preference for update-notifications intent.
showProfilebooleanShow profile preference for update-privacy intent.
preferredLocationstringPreferred location for update-job-preferences intent.
employmentTypesarrayPreferred employment types for update-job-preferences intent.

Headers

NameValueRequired
AuthorizationBearer <accessToken>Yes

Responses

Success (200)

{
  "success": true,
  "message": "Settings updated successfully",
  "data": {
    "intent": "update-profile"
  }
}

Error (400)

{
  "success": false,
  "error": "Intent is required"
}

Error Handling

ALL

All Endpoints

Standard error response format used across all API endpoints. Always check the 'success' field and 'error' message for debugging.

Responses

Success (400)

{
  "success": false,
  "error": "Bad Request - Invalid parameters",
  "details": {
    "field": "email",
    "message": "Invalid email format"
  }
}

Error (500)

{
  "success": false,
  "error": "Internal Server Error - Please try again later"
}