findjobs HR Suite

Platform

API for your agents

A key your company mints lets your own agents (Claude or any other) and scripts read and, as endpoints go live, act on your HR Suite and your findjobs.ge account. Scoped, logged, revocable, and described by machine so an agent can discover it on its own.

Try it in the demo

Who it is for

Companies that want an assistant to do the routine: answer "what should we offer a warehouse lead", list applicants waiting too long, post a vacancy from a brief, approve a pay run after a human has read the checks. The API is the same service layer the pages use, so anything the suite does will be reachable, with the same rules and the same role limits.

It is also the honest answer to "can I automate this": read-only endpoints are live now; write endpoints are listed with status "planned" and answer 501 until they are served, so an agent never guesses.

Minting a key

  1. Open Settings › API keys. Only the company owner can mint; a fresh second lock is asked for first.
  2. Name the key for what it does ("Claude agent", "payroll script"), pick the narrowest scopes that do the job, and choose when it expires.
  3. Read the risks and tick the acknowledgement. The key is shown once; copy it to your agent's secret store and nowhere else.
  4. Revoke it from the same page the moment you no longer need it. Revoking is instant.

In the demo anyone can mint a demo key (fjhr_demo_…). It acts on your demo company only and dies with it.

The risks, plainly

  • A key is a password for the company. Whoever holds it can do everything its scopes allow, with no second lock.
  • An agent acts in your name. A wrong instruction can close a vacancy, reject an applicant or change a record. Start with read scopes; add write scopes when the agent has earned them.
  • Never paste a key into a public chat, a repository or a prompt someone else can read. Rotate when in doubt.
  • Every call is logged with the key, the route, the status and the time. The owner reads the log on the same page.

Scopes

  • market:read: pay bands and hiring difficulty.
  • company:read: the company, Home and the counts.
  • jobs:read and jobs:write: read, post, edit, close and bump vacancies.
  • applications:read and applications:write: read applications and scores; move stages, reply, schedule interviews.
  • people:read and people:write: employee records without private details; add and change people, decide leave.
  • money:read and money:write: pay runs and rules; approve a pay run (files are prepared; no money moves).
  • settings:write: webhooks and settings. Keys themselves can never be minted or changed by a key.
  • all: everything above.

Calling it

Base URL https://hr.findjobs.ge/hr/api/v1. Send the key as Authorization: Bearer fjhr_live_… on every request. Answers are JSON. Add ?hl=ka, ru or tr to get summaries in that language where the API speaks.

Limits: 60 calls a minute and 20 writes a minute per key. A 429 carries Retry-After in seconds.

Errors are JSON with a stable code and a sentence: missing_key, invalid_key, scope, rate_limited, not_yet (designed, not served), not_found, server_error, and a docs link.

For an LLM agent

  1. Give the agent https://hr.findjobs.ge/hr/api/v1/llms.txt: it describes the API, the limits and the rules in plain text.
  2. Give it the OpenAPI document at https://hr.findjobs.ge/hr/api/v1/openapi.json to generate tools from.
  3. Store the key in the agent's secret store, never in the prompt.
  4. Tell it which scopes the key has, so it does not try what it cannot do.

Example: curl -H "Authorization: Bearer $KEY" "https://hr.findjobs.ge/hr/api/v1/market/pay-check?city=tbilisi&family=sales&offer=1200"

What a key can never do

  • Read another company's data, or any job seeker's private data beyond what the company already sees on findjobs.ge.
  • Move money, log in to a bank, or file with the Revenue Service.
  • Mint or change keys, or weaken the second lock.
  • Learn whether an employee has a findjobs profile or is applying elsewhere.

Endpoints

The table below is generated from the same list the API routes from, so it cannot drift. Status "live" answers today; "planned" is designed and answers 501 until served.

hr.findjobs.ge/hr/api/v1scopestatus
GET /me company:read live Who you are: the company, this key's scopes and limits
GET /home company:read live The Home queue: what needs a decision
GET /market/pay-check market:read live What a family pays in a city: lower quarter, middle, upper quarter
GET /market/difficulty market:read live Hiring difficulty in a city: ads per seeker, days ads stay up
GET /market/radar market:read live Competitor radar: your open roles, rival ads, pay, who hires most
GET /market/survey market:read live Salary survey groups in a city: companies, people, the middle of real pay
POST /market/survey money:write live Your company's pay entry for a family: people, low, middle, high
GET /jobs jobs:read live Your vacancies on findjobs.ge
GET /jobs/{id} jobs:read live One vacancy in full
GET /jobs/{id}/doctor jobs:read live The ad doctor: a 0–100 score, every check and what to fix
POST /jobs jobs:write planned Post a vacancy (goes to moderation, as on the site)
PATCH /jobs/{id} jobs:write planned Edit a vacancy
POST /jobs/{id}/close jobs:write planned Close a vacancy
POST /jobs/{id}/bump jobs:write planned Bump a vacancy (Pro)
GET /applications applications:read live Applications to your vacancies
GET /applications/{id} applications:read live One application: message, answers, scores
GET /people people:read live Employee records (without private fields)
POST /people people:write live Add a record
GET /people/{id} people:read live One record with its history and leave balance
PATCH /people/{id} people:write live Change a record; pay, role and department changes go to the history
POST /people/{id}/leaving people:write live Set the last day
GET /timeoff people:read live Time off: asked and approved
POST /timeoff people:write live Add time off (asked, or approved at once)
POST /timeoff/{id}/decide people:write live Decide: approved, declined, cancelled
GET /payrun money:read live A month's pay run: lines and totals
POST /payrun/{period}/approve money:write live Approve a month (a snapshot is taken first)
GET /payrun/{period}/file money:read live A file of an approved month: oris, fina, 1c, excel, journal, tbc, bog, liberty, bank-excel, rsge
GET /rules money:read live Rules and rates, with their confirmer
POST /rules/{id}/confirm money:write live Confirm a rule in a name
GET /snapshots settings:write live The snapshots
POST /snapshots settings:write live Take a snapshot now
POST /snapshots/{id}/restore settings:write live Restore a snapshot (a snapshot of now is taken first)
GET /pipeline applications:read live One vacancy's board: stages, cards, the reply clock, scorecards
POST /applications/{id}/status applications:write live Move a card to a stage: seen, shortlisted, hold, hired, rejected
POST /applications/{id}/scorecard applications:write live Save a scorecard: four scores 1–5 and a note
POST /applications/{id}/message applications:write planned Reply to the applicant in the same chat as on the site
POST /applications/{id}/interview applications:write planned Schedule an interview
GET /people people:read planned Employee records
POST /people people:write planned Add an employee
GET /people/{id} people:read planned One record (private details excluded)
GET /leave/requests people:read planned Leave requests
POST /leave/requests/{id}/decide people:write planned Approve or decline leave
GET /pay-runs money:read planned Pay runs
GET /pay-runs/{month} money:read planned One month's run with its lines
POST /pay-runs/{month}/approve money:write planned Approve a run (files are prepared; no money moves)
GET /rules money:read planned Rules and rates with their confirmation status
GET /keys settings:write planned This company's keys (keys cannot be minted by a key)
GET /webhooks settings:write planned Webhook subscriptions