> ## Documentation Index
> Fetch the complete documentation index at: https://careerk.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Update My Profile

> Update the current job seeker profile information

## Endpoint

```
PATCH /api/v1/job-seekers/me
```

**Base URL**: `http://localhost:3000/api/v1`

<Note>This endpoint requires **authentication** and **Job Seeker role**.</Note>

## Authentication

Include the access token in the Authorization header:

```bash theme={null}
Authorization: Bearer YOUR_ACCESS_TOKEN
```

## Request Body

All fields are optional. Only provide fields you want to update.

<ParamField body="firstName" type="string">
  User's first name.
</ParamField>

<ParamField body="lastName" type="string">
  User's last name.
</ParamField>

<ParamField body="title" type="string">
  Current job title.
</ParamField>

<ParamField body="location" type="string">
  Current location.
</ParamField>

<ParamField body="availabilityStatus" type="enum">
  Current availability status. - `OPEN_TO_WORK` - Actively looking - `NOT_LOOKING` - Not looking -
  `PASSIVELY_LOOKING` - Open to opportunities
</ParamField>

<ParamField body="workPreference" type="enum">
  Work preference. - `REMOTE` - Remote work - `ONSITE` - On-site work - `HYBRID` - Hybrid work -
  `ANY` - No preference
</ParamField>

<ParamField body="preferredJobTypes" type="enum[]">
  Preferred job types. - `FULL_TIME` - `PART_TIME` - `CONTRACT` - `INTERNSHIP` - `FREELANCE`
</ParamField>

<ParamField body="yearsOfExperience" type="number">
  Total years of professional experience.
</ParamField>

<ParamField body="summary" type="string">
  Professional summary/bio.
</ParamField>

<ParamField body="expectedSalary" type="number">
  Expected monthly salary in USD.
</ParamField>

<ParamField body="linkedinUrl" type="string">
  LinkedIn profile URL.
</ParamField>

<ParamField body="portfolioUrl" type="string">
  Portfolio website URL.
</ParamField>

<ParamField body="githubUrl" type="string">
  GitHub profile URL.
</ParamField>

## Request Shape

```typescript theme={null}
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

```bash theme={null}
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

```bash theme={null}
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

```bash theme={null}
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

```bash theme={null}
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)

```json theme={null}
{
  "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

```json theme={null}
{
  "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

```json theme={null}
{
  "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

```json theme={null}
{
  "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.

```json theme={null}
{
  "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

<Info>
  **Partial Updates**: This endpoint supports partial updates. You only need to include the fields
  you want to change.
</Info>

<Info>
  **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.
</Info>

<Tip>
  **Keep Profile Updated**: Regularly update your availability status and expected salary to attract
  relevant job opportunities.
</Tip>

<Tip>
  **Add Links**: Including LinkedIn, portfolio, and GitHub links increases your visibility and helps
  companies learn more about you.
</Tip>
