Confirm Profile Image Upload
curl --request POST \
--url https://api.example.com/api/v1/job-seekers/me/profile-image/confirm \
--header 'Content-Type: application/json' \
--data '
{
"key": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/job-seekers/me/profile-image/confirm"
payload = { "key": "<string>" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({key: '<string>'})
};
fetch('https://api.example.com/api/v1/job-seekers/me/profile-image/confirm', 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/profile-image/confirm",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'key' => '<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/profile-image/confirm"
payload := strings.NewReader("{\n \"key\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.example.com/api/v1/job-seekers/me/profile-image/confirm")
.header("Content-Type", "application/json")
.body("{\n \"key\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/job-seekers/me/profile-image/confirm")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"key\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyJob Seeker
Confirm Profile Image Upload
Confirm a previously uploaded job seeker profile image
POST
/
api
/
v1
/
job-seekers
/
me
/
profile-image
/
confirm
Confirm Profile Image Upload
curl --request POST \
--url https://api.example.com/api/v1/job-seekers/me/profile-image/confirm \
--header 'Content-Type: application/json' \
--data '
{
"key": "<string>"
}
'import requests
url = "https://api.example.com/api/v1/job-seekers/me/profile-image/confirm"
payload = { "key": "<string>" }
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({key: '<string>'})
};
fetch('https://api.example.com/api/v1/job-seekers/me/profile-image/confirm', 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/profile-image/confirm",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'key' => '<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/profile-image/confirm"
payload := strings.NewReader("{\n \"key\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://api.example.com/api/v1/job-seekers/me/profile-image/confirm")
.header("Content-Type", "application/json")
.body("{\n \"key\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/job-seekers/me/profile-image/confirm")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"key\": \"<string>\"\n}"
response = http.request(request)
puts response.read_bodyEndpoint
POST /api/v1/job-seekers/me/profile-image/confirm
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
Description
Confirms that the profile image was uploaded successfully to storage and saves its public URL toprofileImageUrl.
Request Body
string
required
Storage object key returned by the presigned URL endpoint. It must start with
profile-images/ {jobSeekerId}/.Request Shape
interface ConfirmProfileImageUploadDto {
key: string;
}
Request Example
{
"key": "profile-images/f35b1c20-b18e-4902-9461-23bb653ee5fa/1776332930558-avatar.png"
}
Response
Success Response (200 OK)
{
"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
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
{
"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
{
"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
{
"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
{
"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
1
Request URL
Call POST /job-seekers/me/profile-image/presigned-url
2
Upload File
Upload the image to the returned
uploadUrl using PUT. See
/api-reference/job-seeker/upload-profile-image-file3
Confirm Upload
Call POST /job-seekers/me/profile-image/confirm with the returned
key