Update My Profile
curl --request PATCH \
--url https://api.example.com/api/v1/job-seekers/me \
--header 'Content-Type: application/json' \
--data '
{
"firstName": "<string>",
"lastName": "<string>",
"title": "<string>",
"location": "<string>",
"availabilityStatus": {},
"workPreference": {},
"preferredJobTypes": [
{}
],
"yearsOfExperience": 123,
"summary": "<string>",
"expectedSalary": 123,
"linkedinUrl": "<string>",
"portfolioUrl": "<string>",
"githubUrl": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/job-seekers/me"
payload = {
"firstName": "<string>",
"lastName": "<string>",
"title": "<string>",
"location": "<string>",
"availabilityStatus": {},
"workPreference": {},
"preferredJobTypes": [{}],
"yearsOfExperience": 123,
"summary": "<string>",
"expectedSalary": 123,
"linkedinUrl": "<string>",
"portfolioUrl": "<string>",
"githubUrl": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
firstName: '<string>',
lastName: '<string>',
title: '<string>',
location: '<string>',
availabilityStatus: {},
workPreference: {},
preferredJobTypes: [{}],
yearsOfExperience: 123,
summary: '<string>',
expectedSalary: 123,
linkedinUrl: '<string>',
portfolioUrl: '<string>',
githubUrl: '<string>'
})
};
fetch('https://api.example.com/api/v1/job-seekers/me', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/job-seekers/me",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'firstName' => '<string>',
'lastName' => '<string>',
'title' => '<string>',
'location' => '<string>',
'availabilityStatus' => [
],
'workPreference' => [
],
'preferredJobTypes' => [
[
]
],
'yearsOfExperience' => 123,
'summary' => '<string>',
'expectedSalary' => 123,
'linkedinUrl' => '<string>',
'portfolioUrl' => '<string>',
'githubUrl' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/job-seekers/me"
payload := strings.NewReader("{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"title\": \"<string>\",\n \"location\": \"<string>\",\n \"availabilityStatus\": {},\n \"workPreference\": {},\n \"preferredJobTypes\": [\n {}\n ],\n \"yearsOfExperience\": 123,\n \"summary\": \"<string>\",\n \"expectedSalary\": 123,\n \"linkedinUrl\": \"<string>\",\n \"portfolioUrl\": \"<string>\",\n \"githubUrl\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.example.com/api/v1/job-seekers/me")
.header("Content-Type", "application/json")
.body("{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"title\": \"<string>\",\n \"location\": \"<string>\",\n \"availabilityStatus\": {},\n \"workPreference\": {},\n \"preferredJobTypes\": [\n {}\n ],\n \"yearsOfExperience\": 123,\n \"summary\": \"<string>\",\n \"expectedSalary\": 123,\n \"linkedinUrl\": \"<string>\",\n \"portfolioUrl\": \"<string>\",\n \"githubUrl\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/job-seekers/me")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"title\": \"<string>\",\n \"location\": \"<string>\",\n \"availabilityStatus\": {},\n \"workPreference\": {},\n \"preferredJobTypes\": [\n {}\n ],\n \"yearsOfExperience\": 123,\n \"summary\": \"<string>\",\n \"expectedSalary\": 123,\n \"linkedinUrl\": \"<string>\",\n \"portfolioUrl\": \"<string>\",\n \"githubUrl\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyJob Seeker
Update My Profile
Update the current job seeker profile information
PATCH
/
api
/
v1
/
job-seekers
/
me
Update My Profile
curl --request PATCH \
--url https://api.example.com/api/v1/job-seekers/me \
--header 'Content-Type: application/json' \
--data '
{
"firstName": "<string>",
"lastName": "<string>",
"title": "<string>",
"location": "<string>",
"availabilityStatus": {},
"workPreference": {},
"preferredJobTypes": [
{}
],
"yearsOfExperience": 123,
"summary": "<string>",
"expectedSalary": 123,
"linkedinUrl": "<string>",
"portfolioUrl": "<string>",
"githubUrl": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/job-seekers/me"
payload = {
"firstName": "<string>",
"lastName": "<string>",
"title": "<string>",
"location": "<string>",
"availabilityStatus": {},
"workPreference": {},
"preferredJobTypes": [{}],
"yearsOfExperience": 123,
"summary": "<string>",
"expectedSalary": 123,
"linkedinUrl": "<string>",
"portfolioUrl": "<string>",
"githubUrl": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
firstName: '<string>',
lastName: '<string>',
title: '<string>',
location: '<string>',
availabilityStatus: {},
workPreference: {},
preferredJobTypes: [{}],
yearsOfExperience: 123,
summary: '<string>',
expectedSalary: 123,
linkedinUrl: '<string>',
portfolioUrl: '<string>',
githubUrl: '<string>'
})
};
fetch('https://api.example.com/api/v1/job-seekers/me', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.example.com/api/v1/job-seekers/me",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'firstName' => '<string>',
'lastName' => '<string>',
'title' => '<string>',
'location' => '<string>',
'availabilityStatus' => [
],
'workPreference' => [
],
'preferredJobTypes' => [
[
]
],
'yearsOfExperience' => 123,
'summary' => '<string>',
'expectedSalary' => 123,
'linkedinUrl' => '<string>',
'portfolioUrl' => '<string>',
'githubUrl' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/api/v1/job-seekers/me"
payload := strings.NewReader("{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"title\": \"<string>\",\n \"location\": \"<string>\",\n \"availabilityStatus\": {},\n \"workPreference\": {},\n \"preferredJobTypes\": [\n {}\n ],\n \"yearsOfExperience\": 123,\n \"summary\": \"<string>\",\n \"expectedSalary\": 123,\n \"linkedinUrl\": \"<string>\",\n \"portfolioUrl\": \"<string>\",\n \"githubUrl\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.example.com/api/v1/job-seekers/me")
.header("Content-Type", "application/json")
.body("{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"title\": \"<string>\",\n \"location\": \"<string>\",\n \"availabilityStatus\": {},\n \"workPreference\": {},\n \"preferredJobTypes\": [\n {}\n ],\n \"yearsOfExperience\": 123,\n \"summary\": \"<string>\",\n \"expectedSalary\": 123,\n \"linkedinUrl\": \"<string>\",\n \"portfolioUrl\": \"<string>\",\n \"githubUrl\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/job-seekers/me")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"firstName\": \"<string>\",\n \"lastName\": \"<string>\",\n \"title\": \"<string>\",\n \"location\": \"<string>\",\n \"availabilityStatus\": {},\n \"workPreference\": {},\n \"preferredJobTypes\": [\n {}\n ],\n \"yearsOfExperience\": 123,\n \"summary\": \"<string>\",\n \"expectedSalary\": 123,\n \"linkedinUrl\": \"<string>\",\n \"portfolioUrl\": \"<string>\",\n \"githubUrl\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyEndpoint
PATCH /api/v1/job-seekers/me
http://localhost:3000/api/v1
This endpoint requires authentication and Job Seeker role.
Authentication
Include the access token in the Authorization header:Authorization: Bearer YOUR_ACCESS_TOKEN
Request Body
All fields are optional. Only provide fields you want to update.string
User’s first name.
string
User’s last name.
string
Current job title.
string
Current location.
enum
Current availability status. -
OPEN_TO_WORK - Actively looking - NOT_LOOKING - Not looking -
PASSIVELY_LOOKING - Open to opportunitiesenum
Work preference. -
REMOTE - Remote work - ONSITE - On-site work - HYBRID - Hybrid work -
ANY - No preferenceenum[]
Preferred job types. -
FULL_TIME - PART_TIME - CONTRACT - INTERNSHIP - FREELANCEnumber
Total years of professional experience.
string
Professional summary/bio.
number
Expected monthly salary in USD.
string
LinkedIn profile URL.
string
Portfolio website URL.
string
GitHub profile URL.
Request Shape
interface UpdateJobSeekerProfileDto {
firstName?: string;
lastName?: string;
title?: string;
location?: string;
availabilityStatus?: 'OPEN_TO_WORK' | 'NOT_LOOKING' | 'PASSIVELY_LOOKING';
workPreference?: 'REMOTE' | 'ONSITE' | 'HYBRID' | 'ANY';
preferredJobTypes?: ('FULL_TIME' | 'PART_TIME' | 'CONTRACT' | 'INTERNSHIP' | 'FREELANCE')[];
yearsOfExperience?: number;
summary?: string;
expectedSalary?: number;
linkedinUrl?: string;
portfolioUrl?: string;
githubUrl?: string;
profileImageUrl?: string;
}
Request Examples
Update Basic Information
PATCH /api/v1/job-seekers/me
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
{
"firstName": "Amr",
"lastName": "Mubarak",
"title": "Senior Software Engineer"
}
Update Availability and Preferences
PATCH /api/v1/job-seekers/me
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
{
"availabilityStatus": "OPEN_TO_WORK",
"workPreference": "REMOTE",
"preferredJobTypes": ["FULL_TIME", "CONTRACT"],
"yearsOfExperience": 6,
"expectedSalary": 6000
}
Update Profile Links
PATCH /api/v1/job-seekers/me
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
{
"linkedinUrl": "https://linkedin.com/in/amr-mubarak",
"portfolioUrl": "https://amr-mubarak.dev",
"githubUrl": "https://github.com/amr-mubarak"
}
Update Summary
PATCH /api/v1/job-seekers/me
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
{
"summary": "Experienced software engineer with 5+ years in backend development. Specialized in Node.js, TypeScript, and cloud technologies. Looking for remote opportunities."
}
Response
Success Response (200 OK)
{
"success": true,
"data": {
"firstName": "Amr",
"lastName": "Mubarak",
"profileImageUrl": null,
"profile": {
"jobSeekerId": "a0000000-0000-0000-0000-000000000001",
"title": "Senior Software Engineer",
"location": "Cairo, Egypt",
"availabilityStatus": "OPEN_TO_WORK",
"workPreference": "REMOTE",
"preferredJobTypes": ["FULL_TIME", "CONTRACT"],
"yearsOfExperience": 6,
"linkedinUrl": "https://linkedin.com/in/amr-mubarak",
"portfolioUrl": "https://amr-mubarak.dev",
"githubUrl": "https://github.com/amr-mubarak",
"cvEmail": "amr.cv@example.com",
"noticePeriod": 30,
"phone": "+20 100 123 4567",
"expectedSalary": 6000,
"summary": "Experienced software engineer with 5+ years in backend development..."
},
"educations": [],
"workExperiences": [],
"jobSeekerSkills": []
},
"message": "Job seeker profile updated successfully",
"meta": {
"timestamp": "2026-04-23T20:00:00.000Z",
"path": "/job-seekers/me",
"method": "PATCH"
}
}
Error Responses
400 Bad Request - Validation Error
{
"success": false,
"error": {
"message": ["availabilityStatus must be a valid enum value"],
"statusCode": 400,
"timestamp": "2026-04-23T20:00:00.000Z",
"path": "/job-seekers/me",
"method": "PATCH",
"details": "Bad Request"
}
}
401 Unauthorized - Not Authenticated
{
"success": false,
"error": {
"message": "Unauthorized",
"statusCode": 401,
"timestamp": "2026-04-23T20:00:00.000Z",
"path": "/job-seekers/me",
"method": "PATCH",
"details": "Unauthorized"
}
}
403 Forbidden - Insufficient Permissions
{
"success": false,
"error": {
"message": "Forbidden resource",
"statusCode": 403,
"timestamp": "2026-04-23T20:00:00.000Z",
"path": "/job-seekers/me",
"method": "PATCH",
"details": "Forbidden"
}
}
404 Not Found - Profile Not Found
Returned when the job seeker hasn’t completed onboarding yet.{
"success": false,
"error": {
"message": "Profile not found, please complete your onboarding first",
"statusCode": 404,
"timestamp": "2026-04-23T20:00:00.000Z",
"path": "/job-seekers/me",
"method": "PATCH",
"details": "Not Found"
}
}
Validation Rules
| Field | Rules |
|---|---|
| firstName | String |
| lastName | String |
| title | String |
| location | String |
| availabilityStatus | Must be valid enum value |
| workPreference | Must be valid enum value |
| preferredJobTypes | Array of valid enum values |
| yearsOfExperience | Number |
| summary | String |
| expectedSalary | Number |
| linkedinUrl | String |
| portfolioUrl | String |
| githubUrl | String |
| profileImageUrl | String |
Notes
Partial Updates: This endpoint supports partial updates. You only need to include the fields
you want to change.
Profile Must Exist: You must complete your onboarding before you can update your profile. If
you haven’t created a profile yet, you’ll receive a 404 error.
Keep Profile Updated: Regularly update your availability status and expected salary to attract
relevant job opportunities.
Add Links: Including LinkedIn, portfolio, and GitHub links increases your visibility and helps
companies learn more about you.
⌘I
