Get All Jobs
curl --request GET \
--url https://api.example.com/api/v1/jobsimport requests
url = "https://api.example.com/api/v1/jobs"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/api/v1/jobs', 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/jobs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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/jobs"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/api/v1/jobs")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/jobs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"jobs": [
{}
],
"total": 123,
"page": 123,
"limit": 123,
"totalPages": 123
}Jobs
Get All Jobs
List all jobs with optional filters and pagination
GET
/
api
/
v1
/
jobs
Get All Jobs
curl --request GET \
--url https://api.example.com/api/v1/jobsimport requests
url = "https://api.example.com/api/v1/jobs"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/api/v1/jobs', 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/jobs",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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/jobs"
req, _ := http.NewRequest("GET", url, nil)
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.example.com/api/v1/jobs")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/v1/jobs")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"jobs": [
{}
],
"total": 123,
"page": 123,
"limit": 123,
"totalPages": 123
}Endpoint
GET /api/v1/jobs
http://localhost:3000/api/v1
This endpoint is public - no authentication required.
Query Parameters
Response - Direct Jobs
{
"success": true,
"data": {
"jobs": [
{
"id": "uuid",
"type": "direct",
"title": "Senior Backend Engineer",
"description": "We are looking for...",
"requirements": "5+ years experience",
"responsibilities": "Design APIs",
"location": "Cairo, Egypt",
"salaryMin": 15000,
"salaryMax": 25000,
"jobType": "FULL_TIME",
"workPreference": "REMOTE",
"experienceLevel": "SENIOR",
"publishedAt": "2026-02-22T14:51:00.000Z",
"deadline": "2026-04-30T23:59:59.000Z",
"company": {
"id": "uuid",
"name": "Tech Corp",
"logoUrl": null,
"industry": "Technology"
},
"source": "direct",
"skills": [{ "skillId": "uuid", "name": "Node.js" }],
"applicants": 1
}
],
"total": 50,
"page": 1,
"limit": 20,
"totalPages": 3
},
"message": "Success",
"meta": {
"timestamp": "2026-04-23T20:00:00.000Z",
"path": "/jobs",
"method": "GET"
}
}
Response - Scraped Jobs
{
"success": true,
"data": {
"jobs": [
{
"id": "uuid",
"type": "scraped",
"title": "Frontend Developer",
"description": "Join our team...",
"location": "Remote",
"salary": "5000-8000 EGP",
"jobType": "FULL_TIME",
"companyName": "External Corp",
"sourceUrl": "https://linkedin.com/jobs/...",
"postedAt": "2026-02-20T10:00:00.000Z",
"source": "LinkedIn" | "Indeed" | "Glassdoor" | "Bayt" | "Wuzzuf",
"skills": [{ "skillId": "uuid", "name": "React" }]
}
],
"total": 100,
"page": 1,
"limit": 20,
"totalPages": 5
},
"message": "Success",
"meta": {
"timestamp": "2026-04-23T20:00:00.000Z",
"path": "/jobs",
"method": "GET"
}
}
Response Fields
array
Array of jobs. Shape varies based on source.
number
Total number of jobs matching the query.
number
Current page number.
number
Results per page.
number
Total number of pages.
Examples
Get all jobs
GET /api/v1/jobs
Get only direct jobs
GET /api/v1/jobs?source=direct
Get only scraped jobs
GET /api/v1/jobs?source=scraped
Filter by job type and location
GET /api/v1/jobs?jobType=FULL_TIME&location=Cairo
Pagination
GET /api/v1/jobs?page=2&limit=10
Search
GET /api/v1/jobs?search=backend
Error Responses
400 Bad Request - Validation Error
{
"success": false,
"error": {
"message": ["source must be one of: direct, scraped, all"],
"statusCode": 400,
"timestamp": "2026-04-23T20:00:00.000Z",
"path": "/jobs",
"method": "GET",
"details": "Bad Request"
}
}
⌘I
