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 Users API handles the complete lifecycle of a Yeti Jobs account — from signing up and verifying your email to managing your profile, uploading a resume for ATS scoring, adding education records, tracking skills, and following companies. Authentication is cookie-based: a signed token JWT is set on login or signup and must be present for all protected routes. The JWT is signed with the JSON_SECRET_KEY environment variable and stored in the token cookie. Roles available in the system are guest (job seeker), recruiter, and admin.

POST /api/v1/users/signup

Creates a new user account and sends a 6-digit verification code to the supplied email address. Sets a token cookie that marks the session as logged-in but unverified. The email domain is validated via DNS MX lookup before the record is inserted.
This route is blocked for already-authenticated users. If a valid token cookie is already present the request is rejected with 401.
fname
string
required
First name. Minimum 2 characters.
lname
string
required
Last name. Minimum 2 characters.
email
string
required
Valid email address. The domain must have resolvable MX records.
education
string
required
Highest education level. One of: Basic, Matrix, High School, Undergraduation, Postgraduation.
password
string
required
Password matching the platform’s complexity regex (uppercase, lowercase, digit, special character, 8–20 chars).
curl -s -X POST https://yeti-jobs.onrender.com/api/v1/users/signup \
  -H "Content-Type: application/json" \
  -d '{
    "fname": "Jane",
    "lname": "Doe",
    "email": "jane.doe@example.com",
    "education": "Undergraduation",
    "password": "Secret@123"
  }'
{
  "message": "Succssfully Signed Up, Verification Code have been sent to your mail"
}

POST /api/v1/users/login

Authenticates an existing user and sets a signed token cookie. If the account email is not yet verified, the cookie is issued with verify: false and the response status is 200; subsequent requests to protected routes will be blocked until the email is confirmed.
Blocked for already-authenticated users.
email
string
required
Registered email address.
password
string
required
Account password.
curl -s -X POST https://yeti-jobs.onrender.com/api/v1/users/login \
  -c cookies.txt \
  -H "Content-Type: application/json" \
  -d '{
    "email": "jane.doe@example.com",
    "password": "Secret@123"
  }'
{
  "message": "Succssfully Logged In"
}

GET /api/v1/users/logout

Clears the token cookie and ends the session. No request body is needed.
curl -s https://yeti-jobs.onrender.com/api/v1/users/logout \
  --cookie 'token=JWT_TOKEN'
{
  "message": "Logged Out Succssfully"
}

GET /api/v1/users/login-status

Returns the current authentication and verification state of the caller. Use this to hydrate your frontend on page load without an additional profile fetch. Response fields
message.login
boolean
true if a valid JWT cookie is present.
message.verify
boolean
true if the user’s email has been verified.
message.uid
string
User UUID (present when login is true).
message.role
string
guest, recruiter, or admin.
message.company_id
string | null
UUID of the company the user belongs to, or null.
url
string | null
Public URL of the user’s profile picture.
curl -s https://yeti-jobs.onrender.com/api/v1/users/login-status \
  --cookie 'token=JWT_TOKEN'
{
  "message": {
    "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "role": "guest",
    "company_id": null,
    "verify": true,
    "login": true
  },
  "url": "https://cdn.example.com/profiles/jane.jpg"
}

POST /api/v1/users/verify

Verifies an account’s email address using the 6-digit code that was emailed at signup. Requires the unverified-user cookie (verify: false).
Rate limited to 2 requests per minute. Requires the unverified session cookie.
code
integer
required
The 6-digit numeric verification code sent to the registered email.
curl -s -X POST https://yeti-jobs.onrender.com/api/v1/users/verify \
  --cookie 'token=UNVERIFIED_JWT_TOKEN' \
  -H "Content-Type: application/json" \
  -d '{ "code": 482910 }'
{
  "message": "Email Verified Successfully"
}

POST /api/v1/users/verify/resend

Resends the email verification code to the address on file. Requires the unverified-user cookie.
Rate limited to 2 requests per minute. Requires the unverified session cookie.
curl -s -X POST https://yeti-jobs.onrender.com/api/v1/users/verify/resend \
  --cookie 'token=UNVERIFIED_JWT_TOKEN'
{
  "message": "Verification Code Resent Successfully"
}

POST /api/v1/users/forget-password

Initiates the password-reset flow by emailing a 6-digit code to the supplied address. No authentication cookie is required.
Rate limited to 2 requests per minute.
email
string
required
The email address associated with the account.
curl -s -X POST https://yeti-jobs.onrender.com/api/v1/users/forget-password \
  -H "Content-Type: application/json" \
  -d '{ "email": "jane.doe@example.com" }'
{
  "message": "Reset Code Sent to your Email"
}

POST /api/v1/users/forget-password/verify

Completes the password-reset flow by submitting the code and the new password.
Rate limited to 2 requests per minute.
code
integer
required
The 6-digit reset code received by email.
password
string
required
The new password. Must satisfy the platform password regex.
curl -s -X POST https://yeti-jobs.onrender.com/api/v1/users/forget-password/verify \
  -H "Content-Type: application/json" \
  -d '{
    "code": 738291,
    "password": "NewSecret@456"
  }'
{
  "message": "Password Reset Successfully"
}

GET /api/v1/users/:id

Returns the full profile of the user identified by :id, including education, skills, resume URL, and employment status.
Requires authentication (token cookie) and ownership — the authenticated user’s uid must match :id.
id
string
required
The UUID of the user.
curl -s https://yeti-jobs.onrender.com/api/v1/users/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --cookie 'token=JWT_TOKEN'
{
  "message": {
    "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "fname": "Jane",
    "lname": "Doe",
    "email": "jane.doe@example.com",
    "phone_number": "+14155552671",
    "education": "Undergraduation",
    "experience": "3",
    "resume_url": "https://cdn.example.com/resumes/jane-doe.pdf",
    "profile_pic_url": "https://cdn.example.com/profiles/jane.jpg",
    "skills": ["JavaScript", "React", "Node.js"],
    "company_id": null,
    "is_employee": false,
    "job_uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "degree": "B.Sc. Computer Science"
  }
}

PUT /api/v1/users/:id

Replaces the user’s profile with the supplied values. All updatable fields must be provided.
Requires authentication and ownership.
id
string
required
UUID of the user to update.
fname
string
required
First name (minimum 2 characters).
lname
string
required
Last name (minimum 2 characters).
email
string
required
Email address.
education
string
required
One of: Basic, Matrix, High School, Undergraduation, Postgraduation.
experience
string
Years of experience as a string (0–35).
number
string
Phone number in international format, e.g. +14155552671. 10–15 digits.
curl -s -X PUT https://yeti-jobs.onrender.com/api/v1/users/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --cookie 'token=JWT_TOKEN' \
  -H "Content-Type: application/json" \
  -d '{
    "fname": "Jane",
    "lname": "Smith",
    "email": "jane.smith@example.com",
    "education": "Postgraduation",
    "experience": "5",
    "number": "+14155552671"
  }'
{
  "message": "Data Updated Succssfully"
}

PATCH /api/v1/users/:id

Partially updates the user profile. Only the fields included in the request body are changed.
Requires authentication and ownership.
id
string
required
UUID of the user to update.
fname
string
First name.
lname
string
Last name.
experience
string
Years of experience (0–35).
phone_number
string
Phone number in international format.
curl -s -X PATCH https://yeti-jobs.onrender.com/api/v1/users/a1b2c3d4-e5f6-7890-abcd-ef1234567890 \
  --cookie 'token=JWT_TOKEN' \
  -H "Content-Type: application/json" \
  -d '{ "experience": "6" }'
{
  "message": {
    "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "fname": "Jane",
    "lname": "Smith",
    "experience": "6"
  }
}

POST /api/v1/users/:id/skills

Appends a single skill to the user’s skills array. Returns an error if the skill already exists.
Requires authentication and ownership.
id
string
required
UUID of the user.
skills
string
required
A single skill string to add, e.g. "JavaScript". To add multiple skills call this endpoint once per skill.
curl -s -X POST https://yeti-jobs.onrender.com/api/v1/users/a1b2c3d4-e5f6-7890-abcd-ef1234567890/skills \
  --cookie 'token=JWT_TOKEN' \
  -H "Content-Type: application/json" \
  -d '{ "skills": "TypeScript" }'
{
  "message": {
    "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "skills": ["JavaScript", "React", "Node.js", "TypeScript"]
  }
}

POST /api/v1/users/resume

Uploads a PDF resume. The file is stored in Supabase Storage, its URL is saved against the user record, and ATS analysis is triggered asynchronously.
Requires authentication (token cookie). Send as multipart/form-data.
resume
file
required
PDF file. Form field name must be resume.
curl -s -X POST https://yeti-jobs.onrender.com/api/v1/users/resume \
  --cookie 'token=JWT_TOKEN' \
  -F "resume=@/path/to/resume.pdf"
{
  "message": "Resume Uploaded Successfully"
}

GET /api/v1/users/resume

Returns the most recent ATS score, feedback, and the public resume URL for the authenticated user.
Requires authentication.
curl -s https://yeti-jobs.onrender.com/api/v1/users/resume \
  --cookie 'token=JWT_TOKEN'
{
  "message": {
    "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "resume_url": "https://cdn.example.com/resumes/jane-doe.pdf",
    "score": 82,
    "feedback": "Strong skills section. Add quantified achievements to work experience.",
    "created_at": "2024-11-15T10:23:00.000Z"
  }
}

POST /api/v1/users/profile-picture

Uploads a profile picture. The image is stored in Supabase Storage and the profile_pic_url column is updated.
Requires authentication and ownership. Send as multipart/form-data.
profile
file
required
Image file (JPEG, PNG, WebP). Form field name must be profile.
curl -s -X POST https://yeti-jobs.onrender.com/api/v1/users/profile-picture \
  --cookie 'token=JWT_TOKEN' \
  -F "profile=@/path/to/avatar.jpg"
{
  "message": "Profile Picture Uploaded Successfully"
}

POST /api/v1/users/add-education

Adds or replaces the user’s education record. Each call runs inside a transaction: the old record for the user is deleted and the new one is inserted atomically.
Requires authentication and ownership.
university_name
string
required
Name of the university or institution (minimum 8 characters).
degree
string
required
Degree title (minimum 5 characters).
start_date
integer
required
Start year (1940–2026).
end_date
integer
required
End year (1944–2031). Must be greater than start_date and within 6 years of it.
grade
number
required
Numeric grade or percentage (0–100).
curl -s -X POST https://yeti-jobs.onrender.com/api/v1/users/add-education \
  --cookie 'token=JWT_TOKEN' \
  -H "Content-Type: application/json" \
  -d '{
    "university_name": "University of California, Berkeley",
    "degree": "B.Sc. Computer Science",
    "start_date": 2019,
    "end_date": 2023,
    "grade": 88
  }'
{
  "message": {
    "uid": "edu-uuid-1234",
    "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "university_name": "University of California, Berkeley",
    "degree": "B.Sc. Computer Science",
    "start_date": 2019,
    "end_date": 2023,
    "grade": 88
  }
}

GET /api/v1/users/following

Returns the list of companies the authenticated job-seeker is currently following.
Requires authentication and the guest (job seeker) role.
curl -s https://yeti-jobs.onrender.com/api/v1/users/following \
  --cookie 'token=JWT_TOKEN'
{
  "message": [
    {
      "uid": "c1d2e3f4-0000-1111-2222-aabbccddeeff",
      "name": "Acme Corp",
      "logo_url": "https://cdn.example.com/logos/acme.png",
      "website": "https://acme.example.com",
      "location": "San Francisco, CA",
      "founded_year": 2010
    }
  ]
}

GET /api/v1/users/all

Returns every user record in the system. Reserved for platform administrators.
Requires authentication and the admin role.
curl -s https://yeti-jobs.onrender.com/api/v1/users/all \
  --cookie 'token=ADMIN_JWT_TOKEN'
{
  "message": [
    {
      "userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "firstName": "Jane",
      "lastName": "Doe",
      "email": "jane.doe@example.com",
      "role": "guest",
      "education": "Undergraduation",
      "resume_url": "https://cdn.example.com/resumes/jane-doe.pdf",
      "profile_pic_url": "https://cdn.example.com/profiles/jane.jpg",
      "skills": ["JavaScript", "React"],
      "experience": "3"
    }
  ]
}

Build docs developers (and LLMs) love