> ## 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.

# Confirm Profile Image Upload

> Confirm a previously uploaded job seeker profile image

## Endpoint

```http theme={null}
POST /api/v1/job-seekers/me/profile-image/confirm
```

**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
```

## Description

Confirms that the profile image was uploaded successfully to storage and saves its public URL to
`profileImageUrl`.

## Request Body

<ParamField body="key" type="string" required>
  Storage object key returned by the presigned URL endpoint. It must start with `profile-images/   {jobSeekerId}/`.
</ParamField>

## Request Shape

```typescript theme={null}
interface ConfirmProfileImageUploadDto {
  key: string;
}
```

## Request Example

```json theme={null}
{
  "key": "profile-images/f35b1c20-b18e-4902-9461-23bb653ee5fa/1776332930558-avatar.png"
}
```

## Response

### Success Response (200 OK)

```json theme={null}
{
  "success": true,
  "data": {
    "fileUrl": "https://pub-5c37ea83b99f48918e67ed5fdda1be98.r2.dev/profile-images/f35b1c20-b18e-4902-9461-23bb653ee5fa/1776332930558-avatar.png"
  },
  "message": "Profile image uploaded successfully",
  "meta": {
    "timestamp": "2026-04-23T20:00:00.000Z",
    "path": "/job-seekers/me/profile-image/confirm",
    "method": "POST"
  }
}
```

## Response Shape

```typescript theme={null}
interface ConfirmProfileImageUploadResponse {
  success: true;
  data: {
    fileUrl: string;
  };
  message: 'Profile image uploaded successfully';
  meta: {
    timestamp: string;
    path: '/job-seekers/me/profile-image/confirm';
    method: 'POST';
  };
}
```

## Error Responses

### 400 Bad Request - Invalid Key

```json theme={null}
{
  "success": false,
  "error": {
    "message": "Invalid profile image key",
    "statusCode": 400,
    "timestamp": "2026-04-23T20:00:00.000Z",
    "path": "/job-seekers/me/profile-image/confirm",
    "method": "POST",
    "details": "Bad Request"
  }
}
```

### 400 Bad Request - Missing File

```json theme={null}
{
  "success": false,
  "error": {
    "message": "File not found in storage, upload may have failed",
    "statusCode": 400,
    "timestamp": "2026-04-23T20:00:00.000Z",
    "path": "/job-seekers/me/profile-image/confirm",
    "method": "POST",
    "details": "Bad Request"
  }
}
```

### 401 Unauthorized

```json theme={null}
{
  "success": false,
  "error": {
    "message": "Unauthorized",
    "statusCode": 401,
    "timestamp": "2026-04-23T20:00:00.000Z",
    "path": "/job-seekers/me/profile-image/confirm",
    "method": "POST",
    "details": "Unauthorized"
  }
}
```

### 404 Not Found

```json theme={null}
{
  "success": false,
  "error": {
    "message": "Job seeker profile not found",
    "statusCode": 404,
    "timestamp": "2026-04-23T20:00:00.000Z",
    "path": "/job-seekers/me/profile-image/confirm",
    "method": "POST",
    "details": "Not Found"
  }
}
```

## Flow Summary

<Steps>
  <Step title="Request URL">Call POST /job-seekers/me/profile-image/presigned-url</Step>

  <Step title="Upload File">
    Upload the image to the returned `uploadUrl` using PUT. See
    /api-reference/job-seeker/upload-profile-image-file
  </Step>

  <Step title="Confirm Upload">
    Call POST /job-seekers/me/profile-image/confirm with the returned `key`
  </Step>
</Steps>
