Skip to main content
Freelancer endpoints are organized under the /api/freelancer prefix, with sub-routes for job applications (/jobs), contracts (/contract), profile (/profile), and wallet (/wallet).
Freelancer contract endpoints are documented on the Contracts endpoints page. This page covers applications, profile management, and wallet operations.

POST /api/freelancer/jobs/apply-job/:jobId

Submit a job application. Creates an Application record linking the freelancer to the job. Auth required: Yes — freelancer role

Path parameters

jobId
string
required
MongoDB ObjectId of the job to apply for.

Request body

No request body is required. The freelancer’s ID is read from the authenticated JWT.

Response

message
string
Confirmation that the application was submitted.
application
object
The created application document.
cURL
curl -X POST https://your-backend-domain.com/api/freelancer/jobs/apply-job/64f1a2b3c4d5e6f7a8b9c0d4 \
  -H "Authorization: Bearer <accessToken>"

DELETE /api/freelancer/jobs/cancel-application/:applicationId

Withdraw a pending job application. Auth required: Yes — freelancer role

Path parameters

applicationId
string
required
MongoDB ObjectId of the application to cancel.

Response

message
string
Confirmation that the application was withdrawn.
cURL
curl -X DELETE https://your-backend-domain.com/api/freelancer/jobs/cancel-application/64f1a2b3c4d5e6f7a8b9c0aa \
  -H "Authorization: Bearer <accessToken>"

GET /api/freelancer/jobs/applied-jobs

List all jobs the authenticated freelancer has applied for. Auth required: Yes — freelancer role

Response

Array of application documents, each populated with the associated jobId details.
cURL
curl "https://your-backend-domain.com/api/freelancer/jobs/applied-jobs" \
  -H "Authorization: Bearer <accessToken>"

GET /api/freelancer/jobs/applied-status/:jobId/:freelancerId

Check the application status for a specific freelancer on a specific job. Auth required: No

Path parameters

jobId
string
required
MongoDB ObjectId of the job.
freelancerId
string
required
MongoDB ObjectId of the freelancer.

Response

application
object
The matching application document, or null if no application exists.
cURL
curl "https://your-backend-domain.com/api/freelancer/jobs/applied-status/64f1a2b3c4d5e6f7a8b9c0d4/64f1a2b3c4d5e6f7a8b9c0d6"

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

Retrieve the public freelancer profile for a given user ID. Auth required: No

Path parameters

id
string
required
MongoDB ObjectId of the freelancer user.

Response

profile
object
The freelancer profile document.
cURL
curl "https://your-backend-domain.com/api/freelancer/profile/get-profile/64f1a2b3c4d5e6f7a8b9c0d6"

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

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

Path parameters

id
string
required
MongoDB ObjectId of the freelancer user.

Request body

Provide any combination of updatable profile fields:
firstName
string
First name.
title
string
Professional headline.
bio
string
Short biography.
skills
string[]
Array of skill ObjectIds.
jobCategory
string
Category ObjectId.
city
string
City.
state
string
State.
country
string
Country.
zip
string
Postal code.
language
string[]
Languages spoken.
experienceLevel
string
Beginner, Intermediate, or Expert.
portfolio
object[]
Array of { name, imageUrl } portfolio objects.
education
object
{ college, course } education object.
linkedAccounts
object
{ github, linkedIn, website } link object.
employmentHistory
object[]
Array of { company, position, duration } employment records.

Response

The updated freelancer profile document.
cURL
curl -X PUT https://your-backend-domain.com/api/freelancer/profile/update-profile/64f1a2b3c4d5e6f7a8b9c0d6 \
  -H "Authorization: Bearer <accessToken>" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Senior React Developer",
    "bio": "5 years of experience building scalable web applications.",
    "experienceLevel": "Expert",
    "skills": ["64f1a2b3c4d5e6f7a8b9c0d2"],
    "language": ["English", "Hindi"]
  }'

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

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

Path parameters

id
string
required
MongoDB ObjectId of the freelancer user.

Request body

profilePic
file
required
Image file to upload. Stored via Cloudinary and the resulting URL is saved to the profile.

Response

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

GET /api/freelancer/wallet/earnings/:userId

Retrieve the wallet record for a user, including current balance. Auth required: Yes — freelancer or client role

Path parameters

userId
string
required
MongoDB ObjectId of the user whose wallet to retrieve.

Response

wallet
object
The wallet document.
cURL
curl "https://your-backend-domain.com/api/freelancer/wallet/earnings/64f1a2b3c4d5e6f7a8b9c0d6" \
  -H "Authorization: Bearer <accessToken>"

GET /api/freelancer/wallet/transactions/:walletId

Retrieve the full transaction history for a wallet. Auth required: Yes — freelancer or client role

Path parameters

walletId
string
required
MongoDB ObjectId of the wallet (from the _id returned by the earnings endpoint).

Response

transactions
object[]
Array of transaction records ordered by date.
cURL
curl "https://your-backend-domain.com/api/freelancer/wallet/transactions/64f1a2b3c4d5e6f7a8b9c0bb" \
  -H "Authorization: Bearer <accessToken>"

GET /api/freelancer/wallet/user-sales-report/:userId

Retrieve aggregated earnings data for a user, suitable for generating charts or sales reports. Auth required: No

Path parameters

userId
string
required
MongoDB ObjectId of the user.

Response

Aggregated sales data. The exact shape is determined by the wallet service implementation and typically includes monthly totals.
cURL
curl "https://your-backend-domain.com/api/freelancer/wallet/user-sales-report/64f1a2b3c4d5e6f7a8b9c0d6"

Build docs developers (and LLMs) love