Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/tech-dipesh/yeti-Jobs/llms.txt

Use this file to discover all available pages before exploring further.

The Jobs API powers every part of the job-listing experience in Yeti Jobs. Recruiters who belong to a company can create, edit, and delete listings; job seekers can browse, filter, full-text search, and bookmark roles they are interested in. Browsing the public listing feeds (GET /api/v1/jobs and GET /api/v1/jobs/jobs) does not require authentication, but all other operations require a valid token cookie. Full-text search is backed by a PostgreSQL tsvector GIN index on the search_title column, which supports fast prefix and relevance queries.

GET /api/v1/jobs

Lists all jobs with basic pagination. Jobs are joined with their parent company so the company_name field is always populated. No authentication is required.
page
integer
Page number (default: 1).
limit
integer
Number of results per page (default: 10).
sortby
string
Column to sort by. Validated against the allowed list: uid, title, description, salary, job_type, is_job_open, created_by, created_at (default), skills, views. Results are sorted descending.
min_salary
integer
Minimum salary filter (not applied when omitted).
max_salary
integer
Maximum salary filter (not applied when omitted).
min_exp
integer
Minimum years of experience filter (not applied when omitted).
max_exp
integer
Maximum years of experience filter (not applied when omitted).
job_type
string
Filter by work arrangement: Remote, Onsite, or Hybrid.
curl -s "https://yeti-jobs.onrender.com/api/v1/jobs?page=1&limit=5"
{
  "message": [
    {
      "uid": "d4e5f6a7-b8c9-0000-1111-223344556677",
      "title": "Senior Frontend Engineer",
      "description": "Build and maintain customer-facing React applications...",
      "salary": 120000,
      "job_type": "Remote",
      "location": "San Francisco, CA",
      "experience_years": 4,
      "is_job_open": "active",
      "total_job_views": 342,
      "created_at": "2024-10-01T08:00:00.000Z",
      "company_name": "Acme Corp"
    }
  ],
  "limit": "5",
  "page": "1",
  "total": "148"
}

GET /api/v1/jobs/jobs

Lists jobs with rich filtering. Multiple filters can be combined in a single request. Results are paginated and include a total count for building pagination UI. Note the double /jobs segment in the path — this is the filtered listing endpoint, distinct from the basic GET /api/v1/jobs.
job_type
string
Filter by work arrangement: Remote, Onsite, or Hybrid.
location
string
Case-insensitive partial match on the job’s location field.
min_salary
integer
Minimum salary (inclusive).
max_salary
integer
Maximum salary (inclusive).
min_exp
integer
Minimum years of experience required.
max_exp
integer
Maximum years of experience required.
skills
string
Comma-separated skill names. Jobs must have all specified skills (@> array containment).
status
string
open or closed to filter by is_job_open.
posted
string
Recency filter: 24h, 7d, or 30d.
sortby
string
created_at (default), salary, or total_job_views. Results are sorted ascending.
page
integer
Page number (default: 1).
limit
integer
Results per page (default: 10).
curl -s "https://yeti-jobs.onrender.com/api/v1/jobs/jobs?job_type=Remote&min_salary=80000&skills=React,TypeScript&page=1&limit=10"
{
  "message": [
    {
      "uid": "d4e5f6a7-b8c9-0000-1111-223344556677",
      "title": "Senior Frontend Engineer",
      "description": "Build and maintain customer-facing React applications...",
      "salary": 120000,
      "job_type": "Remote",
      "location": "San Francisco, CA",
      "skills": ["React", "TypeScript", "GraphQL"],
      "experience_years": 4,
      "is_job_open": "active",
      "company_name": "Acme Corp"
    }
  ],
  "limit": "10",
  "page": "1",
  "total": "12"
}

GET /api/v1/jobs/search

Performs a full-text search against job titles using a PostgreSQL tsvector GIN index. The query string is normalised to a prefix tsquery so partial words match.
Requires authentication (token cookie).
title
string
required
The search term (e.g. "react developer"). Maps to the search_title tsvector column.
sortby
string
created_at (default) or salary.
curl -s "https://yeti-jobs.onrender.com/api/v1/jobs/search?title=react+developer" \
  --cookie 'token=JWT_TOKEN'
{
  "message": [
    {
      "uid": "d4e5f6a7-b8c9-0000-1111-223344556677",
      "title": "React Developer",
      "salary": 95000,
      "job_type": "Hybrid",
      "location": "Austin, TX",
      "skills": ["React", "JavaScript"],
      "company_name": "Beta Inc"
    }
  ]
}

POST /api/v1/jobs/new

Creates a new job listing under the authenticated user’s company. The company_id is derived from the JWT — the caller must be a company employee.
Requires authentication and the company-employee middleware (company_id must be set on the user record).
title
string
required
Job title. 2–25 characters.
description
string
required
Job description. 25–500 characters.
salary
integer
required
Annual salary in the local currency. 2,500–2,500,000.
job_type
string
required
One of Remote, Onsite, or Hybrid.
skills
array
required
Array of required skill strings, e.g. ["React", "Node.js"]. A comma-separated string is also accepted.
experience_years
integer
Minimum years of experience (0–50, default: 0).
location
string
required
Job location. Minimum 3 characters. Required by schema validation.
curl -s -X POST https://yeti-jobs.onrender.com/api/v1/jobs/new \
  --cookie 'token=JWT_TOKEN' \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Backend Engineer",
    "description": "Design and build scalable REST APIs using Node.js and PostgreSQL for our SaaS platform.",
    "salary": 110000,
    "job_type": "Remote",
    "skills": ["Node.js", "PostgreSQL", "Docker"],
    "experience_years": 3,
    "location": "New York, NY"
  }'
{
  "message": {
    "uid": "f1e2d3c4-b5a6-7890-abcd-112233445566"
  }
}

GET /api/v1/jobs/:id

Returns a single job with full details including company info, and context flags (is_owner, is_saved, is_applied) derived from the authenticated caller. Also increments the total_job_views counter.
Requires authentication.
id
string
required
UUID of the job.
curl -s https://yeti-jobs.onrender.com/api/v1/jobs/f1e2d3c4-b5a6-7890-abcd-112233445566 \
  --cookie 'token=JWT_TOKEN'
{
  "message": {
    "uid": "f1e2d3c4-b5a6-7890-abcd-112233445566",
    "title": "Backend Engineer",
    "description": "Design and build scalable REST APIs...",
    "salary": 110000,
    "job_type": "Remote",
    "location": "New York, NY",
    "skills": ["Node.js", "PostgreSQL", "Docker"],
    "experience_years": 3,
    "is_job_open": "active",
    "total_job_views": 57,
    "created_at": "2024-11-01T09:00:00.000Z",
    "company_name": "Acme Corp",
    "logo_url": "https://cdn.example.com/logos/acme.png",
    "is_owner": false,
    "is_saved": false,
    "is_applied": false
  }
}

PUT /api/v1/jobs/:id/edit

Replaces a job listing’s content. The caller must be an authenticated company employee who owns the listing (i.e. the job’s company_id matches the caller’s company_id).
Requires authentication and job ownership.
id
string
required
UUID of the job to update.
title
string
required
Job title. 2–25 characters.
description
string
required
Job description. 25–500 characters.
salary
integer
required
Annual salary. 2,500–2,500,000.
job_type
string
required
Remote, Onsite, or Hybrid.
skills
array
required
Array of skill strings.
experience_years
integer
required
Minimum years of experience (0–50).
location
string
required
Job location (minimum 3 characters).
curl -s -X PUT https://yeti-jobs.onrender.com/api/v1/jobs/f1e2d3c4-b5a6-7890-abcd-112233445566/edit \
  --cookie 'token=JWT_TOKEN' \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Senior Backend Engineer",
    "description": "Design and build scalable REST APIs using Node.js and PostgreSQL for our SaaS platform.",
    "salary": 130000,
    "job_type": "Hybrid",
    "skills": ["Node.js", "PostgreSQL", "Docker", "Kubernetes"],
    "experience_years": 5,
    "location": "New York, NY"
  }'
{
  "message": {
    "uid": "f1e2d3c4-b5a6-7890-abcd-112233445566",
    "title": "Senior Backend Engineer",
    "salary": 130000,
    "job_type": "Hybrid",
    "location": "New York, NY",
    "skills": ["Node.js", "PostgreSQL", "Docker", "Kubernetes"],
    "experience_years": 5
  }
}

DELETE /api/v1/jobs/:id/delete

Permanently deletes a job listing and all its associated data. Returns 204 No Content on success.
Requires authentication and job ownership.
id
string
required
UUID of the job to delete.
curl -s -X DELETE https://yeti-jobs.onrender.com/api/v1/jobs/f1e2d3c4-b5a6-7890-abcd-112233445566/delete \
  --cookie 'token=JWT_TOKEN'
{
  "message": "Job Deleted Successfully"
}

GET /api/v1/jobs/saved_jobs/list

Returns all jobs the authenticated job seeker has bookmarked, sorted by most recently saved.
Requires authentication and the guest (job seeker) role.
curl -s https://yeti-jobs.onrender.com/api/v1/jobs/saved_jobs/list \
  --cookie 'token=JWT_TOKEN'
{
  "message": [
    {
      "uid": "f1e2d3c4-b5a6-7890-abcd-112233445566",
      "title": "Backend Engineer",
      "company_name": "Acme Corp",
      "job_type": "Remote",
      "salary": 110000,
      "location": "New York, NY"
    }
  ]
}

POST /api/v1/jobs/:id/bookmark_job

Saves a job to the authenticated user’s bookmark list.
Requires authentication and the job-seeker role.
id
string
required
UUID of the job to bookmark.
curl -s -X POST https://yeti-jobs.onrender.com/api/v1/jobs/f1e2d3c4-b5a6-7890-abcd-112233445566/bookmark_job \
  --cookie 'token=JWT_TOKEN'
{
  "message": "Job Bookmarked Successfully"
}

DELETE /api/v1/jobs/:id/remove_from_bookmark

Removes a previously bookmarked job from the user’s saved list.
Requires authentication, the job-seeker role, and bookmark ownership.
id
string
required
UUID of the job to un-bookmark.
curl -s -X DELETE https://yeti-jobs.onrender.com/api/v1/jobs/f1e2d3c4-b5a6-7890-abcd-112233445566/remove_from_bookmark \
  --cookie 'token=JWT_TOKEN'
{
  "message": "Bookmark Removed Successfully"
}

GET /api/v1/jobs/:id/verify-owner

Checks whether the authenticated user’s company owns the specified job. Useful for conditionally rendering edit/delete controls on the frontend without an extra profile fetch.
Requires authentication.
id
string
required
UUID of the job to verify ownership of.
curl -s https://yeti-jobs.onrender.com/api/v1/jobs/f1e2d3c4-b5a6-7890-abcd-112233445566/verify-owner \
  --cookie 'token=JWT_TOKEN'
{
  "message": "You owned this route."
}

Build docs developers (and LLMs) love