Upload Profile Image File
curl --request PUT \
--url https://api.example.com/{uploadUrl} \
--header 'Content-Type: <content-type>'import requests
url = "https://api.example.com/{uploadUrl}"
headers = {"Content-Type": "<content-type>"}
response = requests.put(url, headers=headers)
print(response.text)const options = {method: 'PUT', headers: {'Content-Type': '<content-type>'}};
fetch('https://api.example.com/{uploadUrl}', 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/{uploadUrl}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_HTTPHEADER => [
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/{uploadUrl}"
req, _ := http.NewRequest("PUT", url, nil)
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.example.com/{uploadUrl}")
.header("Content-Type", "<content-type>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/{uploadUrl}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = '<content-type>'
response = http.request(request)
puts response.read_bodyJob Seeker
Upload Profile Image File
Upload the job seeker profile image directly to cloud storage using the presigned URL
PUT
{uploadUrl}
Upload Profile Image File
curl --request PUT \
--url https://api.example.com/{uploadUrl} \
--header 'Content-Type: <content-type>'import requests
url = "https://api.example.com/{uploadUrl}"
headers = {"Content-Type": "<content-type>"}
response = requests.put(url, headers=headers)
print(response.text)const options = {method: 'PUT', headers: {'Content-Type': '<content-type>'}};
fetch('https://api.example.com/{uploadUrl}', 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/{uploadUrl}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_HTTPHEADER => [
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.example.com/{uploadUrl}"
req, _ := http.NewRequest("PUT", url, nil)
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.example.com/{uploadUrl}")
.header("Content-Type", "<content-type>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/{uploadUrl}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Content-Type"] = '<content-type>'
response = http.request(request)
puts response.read_bodyEndpoint
PUT {uploadUrl}
The URL is obtained from the Request Profile Image Upload URL endpoint.
Description
Upload the profile image directly to Cloudflare R2 using the presigned URL. This is step 2 of the profile image upload flow.Request Headers
string
required
The image MIME type. It must match the value used when requesting the presigned URL.
Request Body
Send the raw image file as the binary request body.Do not send your bearer token to the storage URL. This request goes to R2, not to the CareerK
API.
Request Example
PUT "https://careerk-media.c0485e90a90f9be9ecd4e72559fee834.r2.cloudflarestorage.com/profile-images/f35b1c20-b18e-4902-9461-23bb653ee5fa/1776332930558-avatar.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=a14238f39390c8c7f0581e7801787531%2F20260416%2Fauto%2Fs3%2Faws4_request&X-Amz-Date=20260416T094850Z&X-Amz-Expires=3600&X-Amz-Signature=fd8f2606c79dc66b24a5b7ffffa07a9528217de6b00bc631cedc548f93173af6&X-Amz-SignedHeaders=host&x-id=PutObject" \
-H "Content-Type: image/png" \
--data-binary @avatar.png
Response
Success Response (200 OK)
The upload returns an empty body with HTTP 200 on success.(empty response body)
Error Responses
403 Forbidden - Invalid Signature
{
"Code": "SignatureDoesNotMatch",
"Message": "The request signature we calculated does not match the signature you provided."
}
410 Gone - URL Expired
{
"Code": "ExpiredToken",
"Message": "The provided token has expired."
}
