Skip to main content
Job-related endpoints live under the /api/client/job prefix. Browsing the public job board requires no authentication. Creating, updating, and viewing job details requires a valid JWT.
The Stripe payment endpoint that initiates escrow funding is also mounted under this prefix. See Payments endpoints for the full payment flow context.

GET /api/client/job/get-jobs

Return a paginated, searchable, filterable list of all published jobs. Auth required: No

Query parameters

page
number
default:"1"
Page number to retrieve.
limit
number
default:"4"
Number of results per page.
Full-text search term matched against job titles and descriptions.
filter
string
Filter by job status or category. The accepted values correspond to the job status field (Open, Ongoing, Closed) or a category ObjectId.
sort
string
Sort order for results. Accepted values depend on the service implementation (e.g., newest, rate).

Response

jobs
object[]
Array of job objects for the current page.
total
number
Total number of jobs matching the query (before pagination).
currentPage
number
The page returned.
totalPages
number
Total number of pages given the current limit.
cURL
curl "https://your-backend-domain.com/api/client/job/get-jobs?page=1&limit=4&search=react&filter=Open&sort=newest"

POST /api/client/job/create-job

Post a new job. The authenticated user’s ID is used as the clientId. Auth required: Yes — client role

Request body

title
string
required
Short, descriptive job title.
description
string
required
Detailed job description including scope and deliverables.
rate
number
required
Total budget for the job in INR.
experienceLevel
string
required
Required experience level. One of Beginner, Intermediate, or Expert.
location
string
required
Location requirement (e.g., Remote, Mumbai).
category
string
required
ObjectId of the job category. Retrieve valid IDs from GET /api/admin/categories/get-categories.
skills
string[]
required
Array of skill ObjectIds required for this job.
startDate
string
ISO 8601 date string for the expected start date.
endDate
string
ISO 8601 date string for the expected end date.

Response

message
string
Confirmation message.
job
object
The newly created job document.
cURL
curl -X POST https://your-backend-domain.com/api/client/job/create-job \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "React Frontend Developer",
    "description": "Build a dashboard using React and Tailwind CSS.",
    "rate": 50000,
    "experienceLevel": "Intermediate",
    "location": "Remote",
    "category": "64f1a2b3c4d5e6f7a8b9c0d1",
    "skills": ["64f1a2b3c4d5e6f7a8b9c0d2", "64f1a2b3c4d5e6f7a8b9c0d3"],
    "startDate": "2026-05-01",
    "endDate": "2026-07-31"
  }'

GET /api/client/job/job-details/:id

Retrieve full details for a single job by its ObjectId. Auth required: Yes — client or freelancer role

Path parameters

id
string
required
MongoDB ObjectId of the job.

Response

data
object
The full job document with populated clientId, category, and skills references.
cURL
curl "https://your-backend-domain.com/api/client/job/job-details/64f1a2b3c4d5e6f7a8b9c0d4" \
  -H "Authorization: Bearer <accessToken>"

GET /api/client/job/my-jobs/:id

Return a paginated list of jobs posted by a specific client. Auth required: No

Path parameters

id
string
required
MongoDB ObjectId of the client user.

Query parameters

page
number
default:"1"
Page number.
limit
number
default:"4"
Results per page.
search
string
Search term.
filter
string
Filter by job status.
sort
string
Sort order.

Response

jobs
object[]
Paginated array of the client’s job listings.
total
number
Total matching jobs.
currentPage
number
Current page number.
totalPages
number
Total pages.
cURL
curl "https://your-backend-domain.com/api/client/job/my-jobs/64f1a2b3c4d5e6f7a8b9c0d5?page=1&limit=4"

PUT /api/client/job/update-job/:id

Update an existing job. Only the client who created the job can update it — the server verifies ownership before applying changes. Auth required: Yes — client role

Path parameters

id
string
required
MongoDB ObjectId of the job to update.

Request body

Provide only the fields you want to change. All job fields are accepted (see create-job for the full field list).

Response

message
string
Confirmation message.
job
object
The updated job document.
Returns 403 Forbidden if the authenticated user’s ID does not match the job’s clientId.
cURL
curl -X PUT https://your-backend-domain.com/api/client/job/update-job/64f1a2b3c4d5e6f7a8b9c0d4 \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Senior React Frontend Developer",
    "rate": 65000
  }'

GET /api/client/job/applicants/:jobId/:clientId

Retrieve all applications submitted for a specific job, scoped to the owning client. Auth required: No

Path parameters

jobId
string
required
MongoDB ObjectId of the job.
clientId
string
required
MongoDB ObjectId of the client who owns the job.

Response

An array of application objects, each including the freelancerId (populated), status, and isApplied fields.
cURL
curl "https://your-backend-domain.com/api/client/job/applicants/64f1a2b3c4d5e6f7a8b9c0d4/64f1a2b3c4d5e6f7a8b9c0d5"

GET /api/client/profile/get-profile/:id

Retrieve the client profile for the given user ID. Auth required: Yes — client or freelancer role

Path parameters

id
string
required
MongoDB ObjectId of the client user.

Response

profile
object
The client profile document.
cURL
curl "https://your-backend-domain.com/api/client/profile/get-profile/64f1a2b3c4d5e6f7a8b9c0d5" \
  -H "Authorization: Bearer <accessToken>"

PUT /api/client/profile/update-profile/:id

Update the client’s profile information. Auth required: Yes — client role

Path parameters

id
string
required
MongoDB ObjectId of the client user.

Request body

Provide the fields to update from the client profile schema: firstName, city, state.

Response

The updated client profile document.
cURL
curl -X PUT https://your-backend-domain.com/api/client/profile/update-profile/64f1a2b3c4d5e6f7a8b9c0d5 \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{
    "firstName": "Alex",
    "city": "Mumbai",
    "state": "Maharashtra"
  }'

POST /api/client/profile/upload-image/:id

Upload a profile picture for the client. Accepts multipart/form-data. Auth required: Yes — client role

Path parameters

id
string
required
MongoDB ObjectId of the client user.

Request body

Send the file as multipart/form-data with the field name profilePic.
profilePic
file
required
Image file to upload. Stored and served via Cloudinary.

Response

The updated client profile document including the new profilePic URL.
cURL
curl -X POST https://your-backend-domain.com/api/client/profile/upload-image/64f1a2b3c4d5e6f7a8b9c0d5 \
  -H "Authorization: Bearer <accessToken>" \
  -F "profilePic=@/path/to/photo.jpg"

Build docs developers (and LLMs) love