Fejlesztőknek

Kösd össze a Screenwellt azokkal az eszközökkel, amiket már használsz

Webhookok minden értékeléshez és szakaszváltáshoz, egy REST API az állásaidhoz és jelentkezőidhez, és egy MCP szerver, hogy a Claude, a ChatGPT és más AI-asszisztensek dolgozhassanak neked a Screenwellben.

Minden csomagban és a próbaidőszakban

API kulcsok

A webhookok, az API és az MCP szerver szkriptes használata a fiókod API kulcsát használja. Az alkalmazásban a Beállítások → API és webhookok alatt találod. A Claude és a ChatGPT connectorainak nincs szükségük kulcsra: helyette a Screenwell-lel jelentkezel be.

  • Van egy elsődleges és egy másodlagos kulcsod, így üzemkiesés nélkül válthatsz újra.
  • A kulcs a te fiókoddal jár el: csak a te állásaidat és a csapatodét látja, mást nem.
  • Tartsd a szerveredben. Soha ne tedd bele egy weboldalba vagy mobilalkalmazásba.

Zapier

Kapcsold össze a Screenwellt az ATS-eddel, a Slackkel, a Google Sheetsszel és több mint 7000 alkalmazással, kód nélkül. Minden esemény abban a pillanatban fut le, amikor a Screenwellben megtörténik.

Beállítás

  1. 1Másold ki az API-kulcsodat az alkalmazásban: Beállítások → API és webhookok.
  2. 2Nyisd meg a Screenwellt a Zapieren az alábbi gombbal, és fogadd el a meghívást.
  3. 3Hozz létre egy Zapet, válaszd a Screenwellt, és illeszd be az API-kulcsot, amikor a Zapier kéri.
  4. 4Válassz eseményt vagy műveletet, teszteld, és kapcsold be a Zapet.
Screenwell megnyitása a Zapieren

Események

Interview Scored
Luna befejezett egy interjút, és kész az értékelés: pontszám, ajánlás, összefoglaló és link.
Candidate Moved to Stage
Egy jelölt másik szakaszba került. Választhatóan csak egy szakaszra, például a szűkített listára.
New Candidate
Új jelölt került be, az alkalmazásban, API-n vagy az interjú linkjén keresztül.
New Job
Új állás jött létre.
Interview Completed
Véget ért egy interjú, még az értékelés előtt.

Műveletek és keresések

Add Candidate to Job
Név, e-mail, telefon és opcionálisan önéletrajz.
Send Interview Invite
E-mailben elküldi az interjú linkjét. E-mail alapján megkeresi vagy felveszi a jelöltet.
Schedule Meet/Teams Interview
Lunát beütemezi egy Google Meet- vagy Microsoft Teams-interjúra.
Update Candidate Stage
Áthelyezi: Új, Meghívva, Interjú megvolt, Szűkített lista, Felvéve vagy Nem megfelelő.
Create Job
Cím, leírás, cég és az interjú nyelve.
Find Candidate
E-mail alapján, opcionálisan egy álláson belül.
Find Job
Cím alapján.

Ötletek

  • Új jelentkező a Workable-ben, Recruitee-ben, Teamtailorban vagy Greenhouse-ban → Send Interview Invite
  • Interview Scored → jegyzet és következő szakasz az ATS-ben
  • Interview Scored → üzenet a toborzási csatornában Slacken
  • Interview Scored → új sor a Google Sheetsben

Webhookok

A Screenwell egy aláírt POST kérést küld JSON törzzsel az URL-edre, amint történik valami. Irányítsd az ATS-edre, egy Zapier catch hookra, vagy a saját végpontodra.

Állítsd be

  1. 1Az alkalmazásban nyisd meg a Beállítások → API és webhookok menüt, és add meg a webhook URL-edet. Ennek egy nyilvános https:// címnek kell lennie.
  2. 2Másold ki az aláíró titkot, ami az első mentés után jelenik meg. Ez kell az aláírások ellenőrzéséhez.
  3. 3Nyomd meg a „Tesztesemény küldése” gombot, hogy kapj egy minta interview.scored eseményt test: true értékkel.

Az URL-t az API-val is beállíthatod: PUT /api/v1/settings/webhook {"webhookUrl": "https://…"}.

Események

interview.scored
Luna befejezett egy interjút, és elkészült az értékelés: a 100-ból adott pontszám, a döntése és ennek biztonsága, az indoklása, valamint egy link az értékelőlapra.
candidate.stage_changed
Egy jelentkező áthelyeződött a tábla két szakasza között: honnan, hová, és ki mozgatta – luna az interjú után, vagy recruiter, ha valaki a csapatodból tette.

A CV Parsingot használó fiókok továbbra is megkapják annak régebbi eseményeit (cv_parsed, candidate_created és mások).

Így néz ki egy kézbesítés

Minden kézbesítésnek ugyanaz a burkolata: id, eventType, timestamp, userId és data. A teszteseményekben ott van a test: true is.

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"
  }
}

Fejlécek

X-Screenwell-Event
Az esemény típusa, például interview.scored.
X-Screenwell-Event-Id
Az esemény azonosítója. Minden újrapróbálkozáskor ugyanaz marad, így ezzel szűrheted ki a már feldolgozott eseményeket.
X-Screenwell-Signature
t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>">, az aláíró titkoddal kulcsolva.

Ellenőrizd az aláírást

  1. 1Olvasd be a nyers kérés törzsét, még a JSON feldolgozása előtt.
  2. 2Számítsd ki a "<t>.<raw body>" HMAC-SHA256 értékét az aláíró titkoddal, hex formátumban.
  3. 3Hasonlítsd össze a v1 értékkel konstans idejű összehasonlítással, és utasítsd el azokat a kéréseket, amelyeknél a t 5 percnél régebbi.
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

Újrapróbálkozások

Válaszolj bármilyen 2xx státusszal 10 másodpercen belül. Ha a végpontod hibázik vagy nem válaszol, a Screenwell 1 perc, 5 perc, 30 perc és 2 óra múlva próbálja újra. A Beállítások → API és webhookok mutatja a legutóbbi kézbesítéseket az állapotukkal és a végpontod válaszával.

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

REST API

Egy JSON API a fiókod állásaihoz, jelentkezőihez és interjúihoz. Küldd a kulcsodat az X-API-KEY fejlécben. A válaszok így néznek ki: {"status": "success", "data": …}.

Alap URL
https://api.screenwell.ai/api/v1
Hitelesítés
X-API-KEY: <API key>

Állások

  • GET/jobsA te állásaid és a csapatodéi.
  • GET/jobs/:idEgy állás a leírásával és a szükséges készségekkel.
  • POST/jobsHozz létre egy állást: cím, cég, helyszín, leírás és több más adat.
  • PUT/jobs/:idMódosítsd egy állás adatait.

Jelentkezők

  • POST/jobs/:id/candidatesAdj hozzá egy jelentkezőt egy álláshoz az önéletrajzuk alapján: fájlfeltöltéssel (file), linkkel (fileUrl) vagy base64 formátumban.
  • POST/jobs/:id/candidates/batchAdj hozzá több önéletrajzot egyszerre egy álláshoz (fileUrls vagy base64Files).
  • GET/candidates/:idEgy jelentkező az önéletrajz adataival, az állapotával és Luna elemzésével.
  • PUT/candidates/:id/statusHelyezz át egy jelentkezőt, például erre: selected (Rövidlistás), hired vagy rejected.
  • GET/candidates/:id/cvEgy link a jelentkező önéletrajz-fájljához.

Interjúk és értékelések

  • GET/meetingsInterjúk és hívások, legújabb elöl. Szűrhetsz az isInterview=true, limit és offset paraméterekkel.
  • GET/meetings/:id/interview-insightsEgy interjú értékelőlapja: pontszám, javaslat, erősségek, aggályok és bizonyítékok.
  • GET/meetings/:id/transcriptAz interjú átirata.

Fiók

  • GET/quotaHány interjú maradt neked ebben a hónapban.
  • GET · PUT/settings/webhookOlvasd le vagy állítsd be a webhook URL-edet.

Jelentkezői állapotok

A tábla szakaszai ezekre az állapotokra képződnek le: Új = applied, Meghívva = interview_scheduled, Interjúztatva = interviewed, Rövidlistás = selected, Felvéve = hired, Nem megfelelő = rejected. Az állapot módosítása sosem küld e-mailt a jelentkezőnek.

Példa: jelentkező hozzáadása önéletrajzból

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 szerver

Dolgozz a Screenwell-lel a Claude-ból, a ChatGPT-ből, a Cursorból vagy bármelyik MCP kliensből: „Kit tett Luna rövidlistára ezen a héten?”, „Adj hozzá 5 önéletrajzot a Backend pozícióhoz”, „Küldd el Tomasnak az interjúlinket”. Az asszisztens a te fiókoddal jár el, ugyanazzal a hozzáféréssel, amivel te rendelkezel az alkalmazásban.

Végpont
POST https://api.screenwell.ai/mcp
Authorization
Bearer <bejelentkezési token vagy API kulcs>

A claude.ai-ból vagy a ChatGPT-ből: jelentkezz be a Screenwell-lel

Nincs kulcs, amit másolnod kellene. Add hozzá a Screenwellt connectorként a szerver URL-lel, majd jelentkezz be a Screenwell-fiókoddal, és hagyd jóvá a hozzáférést.

claude.ai (web, asztali és mobil)

  1. 1Nyisd meg: Settings → Connectors → Add custom connector. Team és Enterprise csomagon egy tulajdonos adja hozzá először, az Organization settings alatt.
  2. 2Nevezd el Screenwellnek, és add meg a szerver URL-t. Az OAuth kliensazonosítót és titkot hagyd üresen.
  3. 3Kattints a Connect gombra. Megnyílik a Screenwell: jelentkezz be, ellenőrizd a hozzáférést, és kattints az Allow gombra. Utána kapcsold be a Screenwellt egy chat eszközmenüjében.

ChatGPT

  1. 1Nyisd meg: Settings → Apps & Connectors → Advanced settings, és kapcsold be a Developer mode-ot. Business, Enterprise és Edu munkaterületeken ehhez egy adminnak kell engedélyeznie.
  2. 2Válaszd a Create lehetőséget, nevezd el Screenwellnek, add meg a szerver URL-t, és hitelesítésként válaszd az OAuth-ot.
  3. 3Megnyílik a Screenwell: jelentkezz be, ellenőrizd a hozzáférést, és kattints az Allow gombra. Utána válaszd ki a connectort egy chatben.
Végponthttps://api.screenwell.ai/mcp

A Screenwell oldal megmutatja, melyik alkalmazás kér hozzáférést, hová küld vissza, és mit kér: csak olvasást, vagy olvasást és cselekvést (jelentkezők hozzáadása, áthelyezése és e-mail küldése, mindig a te jóváhagyásoddal).

Minden csatlakoztatott alkalmazás megjelenik a Beállítások → API és webhookok → Csatlakoztatott alkalmazások alatt. A Leválasztás a következő kérésnél megszünteti a hozzáférést.

API kulccsal: Claude Code, Cursor és szkriptek

Azok az eszközök, amelyeknél beállítható egy fejléc, az API kulcsodat is használhatják. A Claude Code be is tud jelentkezni: add hozzá a szervert fejléc nélkül, majd futtasd az /mcp parancsot, és válaszd az Authenticate lehetőséget.

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>" }
    }
  }
}

A Claude Desktop az mcp-remote-on keresztül csatlakozik, ami automatikusan hozzáadja a kulcs fejlécet.

A Cursor, a VS Code, az MCP Inspector és a szkriptek ugyanazt az URL-t használják, egy API kulcs fejléccel vagy bejelentkezéssel.

Egy API kulccsal add hozzá az X-Screenwell-Scope: read fejlécet egy csak olvasható kapcsolathoz. Az asszisztens ekkor csak rákereshet dolgokra, de nem adhat hozzá, helyezhet át vagy küldhet e-mailt senkinek.

Eszközök

Rákeresés

  • list_jobsAz állásaid a jelentkezőkkel szakaszonként, és hogy az interjúlink be van-e kapcsolva.
  • get_jobEgy állás Luna interjútervével, az interjúlinkkel és a jelentkezői folyamattal.
  • list_candidatesJelentkezők állás, szakasz vagy név szerint, a legutóbbi pontszámukkal és azzal, hogy ki mozgatta őket utoljára.
  • get_candidateEgy jelentkező: elérhetőségek, Luna felkészülési anyaga, önéletrajz-összefoglaló, értékelőlap és a hiring manager visszajelzése.
  • get_scorecardA teljes értékelőlap: 100-ból adott pontszám, döntés, erősségek, hiányosságok és kulcsfontosságú pillanatok.
  • ask_lunaTegyél fel egy kérdést Lunának, a felvételi tanácsadódnak, a jelentkezőidről.

Cselekvés

  • add_candidateAdj hozzá egy jelentkezőt az adataik vagy egy önéletrajz (PDF vagy Word) alapján. Luna először elolvassa az önéletrajzot.
  • move_candidateA te jóváhagyásod kell hozzáHelyezz át egy jelentkezőt egy másik szakaszba.
  • add_noteAdj hozzá egy jegyzetet a csapatodnak egy jelentkezőhöz.
  • send_interview_linkA te jóváhagyásod kell hozzáKüldd el e-mailben az állás interjúlinkjét legfeljebb 50 jelentkezőnek.

A te jóváhagyásod nélkül semmi nem jut el egy jelentkezőhöz

  • Az interjúlink elküldése, valamint valaki Felvéve vagy Nem megfelelő szakaszba helyezése előbb egy előnézetet ad vissza („Ez e-mailt küld 3 jelentkezőnek: …”). Semmi nem történik, amíg az asszisztens meg nem kérdez téged, és te bele nem egyezel.
  • Az asszisztens csak azt látja, amit te is látsz az alkalmazásban: a te állásaidat és a csapatodéit. Minden csomagban és a próbaidőszakban is működik, ugyanúgy, mint az API.
  • Kulcsonként legfeljebb 60 eszközhívás percenként. Az önéletrajzok olvasásának és a Kérdezd Lunát funkciónak saját óránkénti korlátja van.

Valami nagyobbat építenél?

Mondd el, mit szeretnél összekötni. Segítünk beállítani.

Írj nekünk