Add Skills
curl --request POST \
--url https://api.example.com/api/v1/job-seekers/me/skillsimport requests
url = "https://api.example.com/api/v1/job-seekers/me/skills"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.example.com/api/v1/job-seekers/me/skills', 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/skills",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$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/api/v1/job-seekers/me/skills"
req, _ := http.NewRequest("POST", url, nil)
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/skills")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/job-seekers/me/skills")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_body{
"skillId": "<string>",
"name": "<string>",
"verified": true
}Skills
Add Skills
Add skills to the authenticated job seeker profile
POST
/
api
/
v1
/
job-seekers
/
me
/
skills
Add Skills
curl --request POST \
--url https://api.example.com/api/v1/job-seekers/me/skillsimport requests
url = "https://api.example.com/api/v1/job-seekers/me/skills"
response = requests.post(url)
print(response.text)const options = {method: 'POST'};
fetch('https://api.example.com/api/v1/job-seekers/me/skills', 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/skills",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
]);
$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/api/v1/job-seekers/me/skills"
req, _ := http.NewRequest("POST", url, nil)
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/skills")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/job-seekers/me/skills")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
response = http.request(request)
puts response.read_body{
"skillId": "<string>",
"name": "<string>",
"verified": true
}Endpoint
POST /api/v1/job-seekers/me/skills
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
Add skills to your profile. Supports multiple formats:- By skill ID: Link existing platform skills (must exist in database)
- By skill name: Create new skill if not exists, then link
Request Body
Option 1: By Skill ID (single)
{
"skillId": "95847893-6c58-404a-8560-528ec9653502"
}
Option 2: By Skill IDs (bulk)
{
"skillIds": ["95847893-6c58-404a-8560-528ec9653502", "531c1ac0-1606-4313-9ad3-77420ba09005"]
}
Option 3: By Skill Name (single - creates if not exists)
{
"skillName": "Python"
}
Option 4: By Skill Names (bulk - creates if not exists)
{
"skillNames": ["Python", "JavaScript", "Go"]
}
Request Fields
At least one of
skillId, skillIds, skillName, or skillNames must be provided.Response
Success Response (201 Created)
{
"success": true,
"data": [
{
"skillId": "95847893-6c58-404a-8560-528ec9653502",
"verified": false,
"name": "golang"
},
{
"skillId": "531c1ac0-1606-4313-9ad3-77420ba09005",
"verified": false,
"name": "rust"
}
],
"message": "Success",
"meta": {
"timestamp": "2026-04-23T20:00:00.000Z",
"path": "/job-seekers/me/skills",
"method": "POST"
}
}
Response Fields
string
Unique identifier for the skill.
string
Name of the skill.
boolean
Always
false for manually added skills. Skills from CV parsing would be true.Error Responses
400 Bad Request - No Skill Provided
{
"success": false,
"error": {
"message": "At least one of skillId, skillIds, skillName, or skillNames must be provided",
"statusCode": 400,
"timestamp": "2026-04-23T20:00:00.000Z",
"path": "/job-seekers/me/skills",
"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/skills",
"method": "POST",
"details": "Unauthorized"
}
}
403 Forbidden
{
"success": false,
"error": {
"message": "Forbidden resource",
"statusCode": 403,
"timestamp": "2026-04-23T20:00:00.000Z",
"path": "/job-seekers/me/skills",
"method": "POST",
"details": "Forbidden"
}
}
404 Not Found - Skill ID Not Found
{
"success": false,
"error": {
"message": "Skill with ID {skillId} not found in the platform",
"statusCode": 404,
"timestamp": "2026-04-23T20:00:00.000Z",
"path": "/job-seekers/me/skills",
"method": "POST",
"details": "Not Found"
}
}
Notes
Create if not exists: When using
skillName or skillNames, new skills will be automatically
created in the platform if they don’t exist.Duplicate handling: If a skill is already associated with your profile, it returns the
existing association without error.
Verification: Manually added skills are marked as
verified: false. Only skills parsed from
CV are marked as verified: true.