Top 10 tasks

The ten things an agent does 95% of the time, with minimal runnable examples. Every example assumes you have set:

export SILKY_API_KEY=sk_trial_...
export SILKY_HOST=https://app.silky.so

1. Create a job from a description

curl -X POST $SILKY_HOST/api/v1/jobs/from-description \
  -H "Authorization: Bearer $SILKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "description": "Senior backend engineer, remote-friendly, GBP 120-140k base. 5+ years experience, strong in Go or Rust. Payments systems background preferred."
  }'

Response (HTTP 202 with a task_id):

{
  "success": true,
  "data": { "task_id": "task_01HXXX...", "job_id": "job_01HXXX..." },
  "meta": { "request_id": "req_..." }
}

The task runs asynchronously (AI drafts the spec + assessment criteria + interview plan). Poll GET /api/v1/tasks/{task_id} or subscribe to job.created webhooks. The job_id is live immediately in draft status.

2. Post the job (publish + share bundle)

Once the job spec is ready, create a job ad:

curl -X POST $SILKY_HOST/api/v1/job-ads \
  -H "Authorization: Bearer $SILKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "job_id": "job_01HXXX...", "status": "published" }'

Response includes share_links - pre-generated URLs for the careers page, LinkedIn, X, and an embed widget. Post them anywhere.

3. Receive an application (and what auto-runs)

Applications arrive via the careers page, embed widget, or POST /api/v1/applications (for manual ingestion). On arrival, Silky runs automatically:

  • Resume text extraction (PDF/DOCX).
  • Structured parse (contact, work history, skills, education) via Claude Haiku.
  • Assessment against the job's criteria.
  • Auto-longlist decision based on the assessment score.

No human action required. Subscribe to application.created and application.assessed webhooks to observe.

Fetch what's been longlisted:

curl "$SILKY_HOST/api/v1/applications?job_id=job_01HXXX&stage=longlisted&limit=20" \
  -H "Authorization: Bearer $SILKY_API_KEY"

4. Review the longlist / shortlist

curl "$SILKY_HOST/api/v1/applications?job_id=job_01HXXX&stage=longlisted" \
  -H "Authorization: Bearer $SILKY_API_KEY"

Each row includes the candidate's contact details, resume data, and the AI assessment with a per-criterion score. Sort by assessment.score_total descending to triage.

To see the shortlist, use stage=shortlisted.

5. Move a candidate to a new stage

curl -X POST $SILKY_HOST/api/v1/applications/app_01HXXX/transition \
  -H "Authorization: Bearer $SILKY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{ "to_stage": "shortlisted", "reason": "Strong ledger experience" }'

Valid stages live in lib/stages.ts: new, longlisted, phone_screen, shortlisted, recruiter_interview, references, hm_interview, offered, hired, withdrawn, rejected.

Invalid transitions return HTTP 400 with the allowed next stages listed in error.details.

6. Schedule an interview

curl -X POST $SILKY_HOST/api/v1/interviews \
  -H "Authorization: Bearer $SILKY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
    "application_id": "app_01HXXX...",
    "interviewer_id": "hm_01HXXX...",
    "starts_at": "2026-05-03T14:00:00Z",
    "duration_minutes": 45,
    "format": "video"
  }'

If format: "video" and the interviewer has Google Calendar connected, Silky creates the Meet link and invites both parties. Otherwise it falls back to the interviewer's phone or the job location.

7. Submit a scorecard

Called by the interviewer (or an agent representing them) after the interview:

curl -X POST $SILKY_HOST/api/v1/interviews/int_01HXXX/scorecard \
  -H "Authorization: Bearer $SILKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "overall": 4,
    "recommendation": "advance",
    "notes": "Strong on system design. Clear ownership of the payments rewrite at previous role.",
    "scores": [
      { "criterion": "technical_depth", "value": 4 },
      { "criterion": "communication", "value": 5 }
    ]
  }'

Scorecards feed the aggregate ranking available at GET /api/v1/jobs/{id}/ranking.

8. Send reference requests

curl -X POST $SILKY_HOST/api/v1/applications/app_01HXXX/references \
  -H "Authorization: Bearer $SILKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "referees": [
      { "name": "Jane Doe", "email": "jane@oldemployer.com", "relationship": "manager" }
    ],
    "method": "email"
  }'

Silky emails the referees a structured feedback form and chases once after 3 days if unanswered. Red-flag responses trigger a Slack DM to the recruiter automatically.

9. Create and send an offer

curl -X POST $SILKY_HOST/api/v1/offers \
  -H "Authorization: Bearer $SILKY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "application_id": "app_01HXXX...",
    "base_salary": 135000,
    "currency": "GBP",
    "start_date": "2026-06-01",
    "equity": "0.15%",
    "send": true
  }'

With send: true, Silky generates the offer letter (matching company brand voice), emails it to the candidate, and exposes a signed acceptance URL. Accept/decline events fire on the offer.* webhook channel.

10. Get the weekly digest

The digest is pushed automatically to Slack (if connected) or email on a weekly cadence in the company's configured timezone. To fetch it on demand:

curl "$SILKY_HOST/api/v1/analytics/digest?range=last_7_days" \
  -H "Authorization: Bearer $SILKY_API_KEY"

Returns applications received, longlist size, interviews scheduled, offers made, and per-job breakdowns. No pretty charts - just numbers an agent can forward to Slack or paste into a summary.

Hand this to Claude

Paste into a Claude session with Silky MCP or the API key in env:

Create a job for a Senior Backend Engineer, GBP 120k base, remote OK.
Publish it. Once 10 applications arrive, shortlist the top 3 by
assessment score and schedule 30-minute video interviews with Anna
Smith (interviewer id: hm_01H...). Post a summary to Slack when done.