Programeri

Povežite Screenwell s alatima koje već koristite

Webhookovi za svaku ocjenu i promjenu faze, REST API za Vaše pozicije i kandidate, te MCP server kako bi Claude, ChatGPT i drugi AI asistenti mogli raditi sa Screenwellom umjesto Vas.

Na svakom planu i u probnom periodu

API ključevi

Webhookovi, API i MCP server za skripte koriste API ključ Vašeg naloga. Naći ćete ga u aplikaciji pod Podešavanja → API i webhookovi. Claude i ChatGPT konektori ne trebaju ključ: umjesto toga se prijavljujete sa Screenwellom.

  • Imate primarni i sekundarni ključ, tako da možete preći na novi ključ bez prekida rada.
  • Ključ djeluje u Vaše ime: vidi Vaše pozicije i pozicije Vašeg tima, i ništa drugo.
  • Čuvajte ga na svom serveru. Nikada ga ne stavljajte u web stranicu ili mobilnu aplikaciju.

Zapier

Povežite Screenwell sa svojim ATS-om, Slackom, Google Sheetsom i s više od 7.000 drugih aplikacija, bez pisanja koda. Svaki okidač se aktivira u trenutku kada se nešto desi u Screenwellu.

Postavljanje

  1. 1Kopirajte svoj API ključ u aplikaciji: Postavke → API i webhookovi.
  2. 2Otvorite Screenwell na Zapieru dugmetom ispod i prihvatite pozivnicu.
  3. 3Napravite Zap, odaberite Screenwell i zalijepite API ključ kada ga Zapier zatraži.
  4. 4Odaberite okidač ili radnju, testirajte i uključite Zap.
Otvori Screenwell na Zapieru

Okidači

Interview Scored
Luna je završila intervju i ocjena je spremna: rezultat, preporuka, sažetak i link.
Candidate Moved to Stage
Kandidat je promijenio fazu. Opcionalno samo za jednu fazu, npr. Uži izbor.
New Candidate
Dodan je kandidat, u aplikaciji, putem API-ja ili preko linka za intervju.
New Job
Kreiran je posao.
Interview Completed
Intervju je završen, prije nego što je ocjena spremna.

Radnje i pretrage

Add Candidate to Job
Ime, e-mail, telefon i opcionalno CV.
Send Interview Invite
E-mailom šalje link za intervju. Pronalazi kandidata po e-mailu ili ga dodaje.
Schedule Meet/Teams Interview
Zakazuje Lunu za intervju u Google Meetu ili Microsoft Teamsu.
Update Candidate Stage
Premješta u Novi, Pozvan, Intervjuisan, Uži izbor, Zaposlen ili Ne odgovara.
Create Job
Naziv, opis, firma i jezik intervjua.
Find Candidate
Po e-mailu, opcionalno unutar jednog posla.
Find Job
Po nazivu.

Ideje

  • Novi kandidat u Workableu, Recruiteeu, Teamtailoru ili Greenhouseu → Send Interview Invite
  • Interview Scored → bilješka i sljedeća faza u vašem ATS-u
  • Interview Scored → poruka u kanalu za zapošljavanje u Slacku
  • Interview Scored → novi red u Google Sheetsu

Webhookovi

Screenwell šalje potpisani POST zahtjev sa JSON sadržajem na Vaš URL čim se nešto dogodi. Usmjerite ga na svoj ATS, Zapier catch hook ili vlastiti endpoint.

Postavljanje

  1. 1U aplikaciji otvorite Podešavanja → API i webhookovi i dodajte svoj webhook URL. Mora biti javna https adresa.
  2. 2Kopirajte tajni ključ za potpis koji se pojavljuje nakon prvog čuvanja. Potreban Vam je za provjeru potpisa.
  3. 3Pritisnite „Pošalji testni događaj” da dobijete uzorak interview.scored sa test: true.

URL možete postaviti i putem API-ja: PUT /api/v1/settings/webhook {"webhookUrl": "https://…"}.

Događaji

interview.scored
Luna je završila intervju i ocjena je spremna: rezultat od 100, njena odluka i koliko je sigurna, njeno obrazloženje i link na ocjenu.
candidate.stage_changed
Kandidat je promijenio fazu na tabli, s podacima odakle, kamo i ko ga je premjestio: luna nakon intervjua, ili recruiter kada je to učinio neko iz Vašeg tima.

Nalozi koji su koristili CV Parsing i dalje primaju njegove starije događaje (cv_parsed, candidate_created i druge).

Kako izgleda isporuka

Svaka isporuka ima isti omot podataka: id, eventType, timestamp, userId i data. Testni događaji nose i test: true.

interview.scored
{
  "id": "evt_01J9ZK4T7Q2M8C6V",
  "eventType": "interview.scored",
  "timestamp": "2026-09-26T09:44:12.000Z",
  "userId": "usr_4f1c",
  "data": {
    "candidate": { "id": "cand_8f2c", "name": "Maya Kowalski", "email": "maya@example.com" },
    "job": { "id": "job_31a0", "title": "Senior Frontend Engineer" },
    "interview": { "id": "int_77b1", "finishedAt": "2026-09-26T09:43:50.000Z", "durationSeconds": 1920 },
    "score": 84,
    "decision": "hire",
    "confidence": 82,
    "summary": "Strong frontend engineer who led a design system migration.",
    "reasoning": "Explains her trade-offs clearly and meets 4 of 5 requirements.",
    "scorecardUrl": "https://<app-host>/interviews/int_77b1",
    "integrity": { "level": "none" }
  }
}
candidate.stage_changed
{
  "id": "evt_01J9ZK4VB1XK0D3R",
  "eventType": "candidate.stage_changed",
  "timestamp": "2026-09-26T09:44:13.000Z",
  "userId": "usr_4f1c",
  "data": {
    "candidate": { "id": "cand_8f2c", "name": "Maya Kowalski", "email": "maya@example.com" },
    "job": { "id": "job_31a0", "title": "Senior Frontend Engineer" },
    "from": "invited",
    "to": "shortlisted",
    "movedBy": "luna",
    "changedBy": "rule",
    "reason": "Moved by rule: score 84 ≥ 75",
    "at": "2026-09-26T09:44:13.000Z"
  }
}

Zaglavlja

X-Screenwell-Event
Tip događaja, npr. interview.scored.
X-Screenwell-Event-Id
ID događaja. Ostaje isti pri svakom ponovnom pokušaju, pa ga koristite da preskočite događaje koje ste već obradili.
X-Screenwell-Signature
t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>">, potpisano Vašim tajnim ključem za potpis.

Provjera potpisa

  1. 1Pročitajte sirovo tijelo zahtjeva, prije bilo kakvog JSON parsiranja.
  2. 2Izračunajte HMAC-SHA256 od "<t>.<raw body>" s Vašim tajnim ključem za potpis, u hex formatu.
  3. 3Uporedite ga sa v1 u konstantnom vremenu i odbijte zahtjeve čiji je t stariji od 5 minuta.
Node.js (Express)
import crypto from 'node:crypto'
import express from 'express'

const app = express()
const SECRET = process.env.SCREENWELL_WEBHOOK_SECRET // whsec_...

// Keep the raw body: the signature is over the exact bytes we sent.
app.post('/webhooks/screenwell', express.raw({ type: 'application/json' }), (req, res) => {
  const header = req.get('X-Screenwell-Signature') ?? ''
  const { t, v1 } = Object.fromEntries(header.split(',').map((part) => part.split('=')))
  const expected = crypto.createHmac('sha256', SECRET).update(`${t}.${req.body}`).digest('hex')

  const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 5 * 60
  const valid = v1?.length === expected.length && crypto.timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
  if (!fresh || !valid) return res.status(400).send('bad signature')

  const event = JSON.parse(req.body)
  // Skip events you have already handled: event.id stays the same on retries.
  console.log(event.eventType, event.data)
  res.sendStatus(200)
})

app.listen(3000)
Python (Flask)
import hashlib, hmac, json, os, time
from flask import Flask, request, abort

app = Flask(__name__)
SECRET = os.environ["SCREENWELL_WEBHOOK_SECRET"].encode()  # whsec_...

@app.post("/webhooks/screenwell")
def screenwell():
    header = request.headers.get("X-Screenwell-Signature", "")
    parts = dict(p.split("=", 1) for p in header.split(",") if "=" in p)
    t, v1 = parts.get("t", "0"), parts.get("v1", "")

    body = request.get_data()  # the raw bytes, before any JSON parsing
    expected = hmac.new(SECRET, f"{t}.".encode() + body, hashlib.sha256).hexdigest()

    if abs(time.time() - int(t)) > 300 or not hmac.compare_digest(v1, expected):
        abort(400)

    event = json.loads(body)
    # Skip events you have already handled: event["id"] stays the same on retries.
    print(event["eventType"], event["data"])
    return "", 200

Ponovni pokušaji

Odgovorite bilo kojim 2xx statusom u roku od 10 sekundi. Ako Vaš endpoint ne uspije ili ne odgovori, Screenwell pokušava ponovo nakon 1 minute, 5 minuta, 30 minuta i 2 sata. Podešavanja → API i webhookovi prikazuje najnovije isporuke s njihovim statusom i odgovorom Vašeg endpointa.

  1. 0
  2. +1m
  3. +5m
  4. +30m
  5. +2h

REST API

JSON API za pozicije, kandidate i intervjue u Vašem nalogu. Pošaljite svoj ključ u zaglavlju X-API-KEY. Odgovori izgledaju kao {"status": "success", "data": …}.

Osnovni URL
https://api.screenwell.ai/api/v1
Autentifikacija
X-API-KEY: <API key>

Pozicije

  • GET/jobsVaše pozicije i pozicije Vašeg tima.
  • GET/jobs/:idJedna pozicija s opisom i vještinama.
  • POST/jobsKreirajte poziciju: naziv, kompanija, lokacija, opis i drugo.
  • PUT/jobs/:idIzmijenite podatke o poziciji.

Kandidati

  • POST/jobs/:id/candidatesDodajte kandidata na poziciju na osnovu njegovog CV-a: otpremanjem fajla (file), linkom (fileUrl) ili base64 formatom.
  • POST/jobs/:id/candidates/batchDodajte više CV-ova na poziciju odjednom (fileUrls ili base64Files).
  • GET/candidates/:idKandidat s podacima iz CV-a, statusom i Luninom analizom.
  • PUT/candidates/:id/statusPremjestite kandidata, npr. u selected (Uži izbor), hired ili rejected.
  • GET/candidates/:id/cvLink na CV fajl kandidata.

Intervjui i ocjene

  • GET/meetingsIntervjui i pozivi, od najnovijih. Filtrirajte pomoću isInterview=true, limit i offset.
  • GET/meetings/:id/interview-insightsOcjena intervjua: rezultat, preporuka, prednosti, nedoumice i dokazi.
  • GET/meetings/:id/transcriptTranskript intervjua.

Nalog

  • GET/quotaKoliko Vam je intervjua preostalo ovog mjeseca.
  • GET · PUT/settings/webhookPročitajte ili postavite svoj webhook URL.

Statusi kandidata

Faze na tabli odgovaraju ovim statusima: Novi = applied, Pozvan = interview_scheduled, Intervjuisan = interviewed, Uži izbor = selected, Zaposlen = hired, Ne odgovara = rejected. Promjena statusa nikada ne šalje email kandidatu.

Primjer: dodavanje kandidata na osnovu CV-a

curl
curl -X POST https://api.screenwell.ai/api/v1/jobs/job_31a0/candidates \
  -H "X-API-KEY: $SCREENWELL_API_KEY" \
  -F "file=@maya-kowalski-cv.pdf"

# or from a link
curl -X POST https://api.screenwell.ai/api/v1/jobs/job_31a0/candidates \
  -H "X-API-KEY: $SCREENWELL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fileUrl": "https://example.com/cv/maya.pdf"}'
curl
curl -X PUT https://api.screenwell.ai/api/v1/candidates/cand_8f2c/status \
  -H "X-API-KEY: $SCREENWELL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"status": "selected"}'

MCP server

Radite sa Screenwellom iz Claudea, ChatGPT-a, Cursora ili bilo kojeg MCP klijenta: „Koga je Luna stavila u uži izbor ove sedmice?”, „Dodaj ovih 5 CV-ova na poziciju Backend”, „Pošalji Tomasu link za intervju”. Asistent djeluje u Vaše ime, s istim pristupom koji imate u aplikaciji.

Endpoint
POST https://api.screenwell.ai/mcp
Authorization
Bearer <token za prijavu ili API ključ>

Iz claude.ai ili ChatGPT-a: prijavite se sa Screenwellom

Nema ključa za kopiranje. Dodajte Screenwell kao konektor sa URL-om servera, zatim se prijavite svojim Screenwell nalogom i odobrite pristup.

claude.ai (web, desktop i mobilni)

  1. 1Otvorite Settings → Connectors → Add custom connector. Na Team i Enterprise planovima, vlasnik ga prvo dodaje pod Organization settings.
  2. 2Nazovite ga Screenwell i unesite URL servera. Ostavite OAuth client ID i secret prazne.
  3. 3Kliknite Connect. Otvara se Screenwell: prijavite se, provjerite pristup i kliknite Allow. Zatim uključite Screenwell u meniju alata unutar razgovora.

ChatGPT

  1. 1Otvorite Settings → Apps & Connectors → Advanced settings i uključite Developer mode. Za Business, Enterprise i Edu radne prostore to prvo mora dozvoliti administrator.
  2. 2Odaberite Create, nazovite ga Screenwell, unesite URL servera i izaberite OAuth kao metod autentifikacije.
  3. 3Otvara se Screenwell: prijavite se, provjerite pristup i kliknite Allow. Zatim izaberite konektor unutar razgovora.
Endpointhttps://api.screenwell.ai/mcp

Screenwell stranica prikazuje koja aplikacija traži pristup, adresu na koju Vas vraća, i pristup koji traži: samo čitanje, ili čitanje i djelovanje (dodavanje, premještanje i slanje emaila kandidatima, uvijek nakon Vaše potvrde).

Svaka povezana aplikacija je navedena pod Podešavanja → API i webhookovi → Povezane aplikacije. Prekini vezu je isključuje kod sljedećeg zahtjeva.

S API ključem: Claude Code, Cursor i skripte

Alati koji omogućavaju postavljanje zaglavlja mogu umjesto toga koristiti Vaš API ključ. Claude Code se može i prijaviti: dodajte server bez zaglavlja, zatim pokrenite /mcp i izaberite Authenticate.

Claude Code
# sign in with Screenwell: add the server, then run /mcp and choose Authenticate
claude mcp add --transport http screenwell https://api.screenwell.ai/mcp

# or with an API key
claude mcp add --transport http screenwell https://api.screenwell.ai/mcp \
  --header "Authorization: Bearer <API key>"

# read-only
claude mcp add --transport http screenwell-read https://api.screenwell.ai/mcp \
  --header "Authorization: Bearer <API key>" \
  --header "X-Screenwell-Scope: read"
Claude Desktop · claude_desktop_config.json
{
  "mcpServers": {
    "screenwell": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://api.screenwell.ai/mcp", "--header", "Authorization: Bearer ${SCREENWELL_KEY}"],
      "env": { "SCREENWELL_KEY": "<API key>" }
    }
  }
}

Claude Desktop se povezuje putem mcp-remote, koji za Vas dodaje zaglavlje s ključem.

Cursor, VS Code, MCP Inspector i skripte koriste isti URL, s API ključem u zaglavlju ili prijavom.

S API ključem dodajte zaglavlje X-Screenwell-Scope: read za vezu samo za čitanje. Asistent tada može pretraživati podatke, ali ne može ništa dodavati, premještati niti slati email bilo kome.

Alati

Pretraga

  • list_jobsVaše pozicije s kandidatima po fazi i informacijom da li je link za intervju uključen.
  • get_jobPozicija s Luninim planom intervjua, linkom za intervju i tokom kandidata.
  • list_candidatesKandidati po poziciji, fazi ili imenu, s njihovim posljednjim rezultatom i ko ih je posljednji premjestio.
  • get_candidateJedan kandidat: kontakt podaci, Luninu pripremu, sažetak CV-a, ocjena i povratna informacija hiring managera.
  • get_scorecardPuna ocjena: rezultat od 100, odluka, prednosti, nedostaci i ključni trenuci.
  • ask_lunaPostavite pitanje Luni, Vašoj savjetnici za zapošljavanje, o Vašim kandidatima.

Radnje

  • add_candidateDodajte kandidata na osnovu njegovih podataka ili CV-a (PDF ili Word). Luna prvo pročita CV.
  • move_candidateTreba Vaš pristanakPremjestite kandidata u drugu fazu.
  • add_noteDodajte bilješku za svoj tim uz kandidata.
  • send_interview_linkTreba Vaš pristanakPošaljite email s linkom za intervju za poziciju do 50 kandidata.

Ništa ne stiže do kandidata bez Vaše potvrde

  • Slanje linka za intervju, kao i premještanje nekoga u Zaposlen ili Ne odgovara, prvo vraća pregled („Ovo će poslati email na 3 kandidata: …”). Ništa se ne dešava dok se asistent ne obrati Vama i Vi se ne saglasite.
  • Asistent vidi samo ono što vidite i Vi u aplikaciji: Vaše pozicije i pozicije Vašeg tima. Radi na svakom planu i u probnom periodu, isto kao i API.
  • Najviše 60 poziva alata po minuti za svaki ključ. Čitanje CV-ova i Pitaj Lunu imaju vlastita satna ograničenja.

Gradite nešto veće?

Recite nam šta biste željeli povezati. Pomoći ćemo Vam da to postavite.

Kontaktirajte nas