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.