Sureshake Documentation

Recruiter Guide

How to create, manage, and publish hiring roles for your organization on Sureshake.

Recruiter Guide

This guide explains how to create, manage, and publish hiring roles for your organization on Sureshake.

Overview

As an entity team member with manage_hiring_roles permission, you can:

  • Create role drafts with job details and requirements
  • Define problem specifications and evaluation rubrics
  • Publish roles to make them visible to candidates
  • Close roles when you're done accepting applications
  • View and manage all roles for your organization

Prerequisites

Before posting a role, ensure you have:

  1. Entity membership — You must be a team member of the organization
  2. Hiring permission — You need manage_hiring_roles permission
  3. Entity setup — Your organization (entity) must be created and verified

Creating a Role Draft

Prepare Role Information

Gather the following information before creating a role:

FieldRequiredDescription
TitleYesJob title (e.g., "Senior Backend Engineer")
DescriptionNoDetailed job description (up to 5000 characters)
LocationNoPhysical location (e.g., "San Francisco, CA")
Remote PolicyNoremote, hybrid, or onsite
Salary RangeNoMin/max salary with currency and period
VisibilityNopublic, unlisted, or private (default: private)

Create the Role

curl -X POST "https://api.sureshake.com/api/v1/entities/{entityId}/hiring/roles" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "entityId": "your-entity-uuid",
    "title": "Senior Backend Engineer",
    "description": "We are looking for an experienced backend engineer...",
    "location": "San Francisco, CA",
    "remotePolicy": "hybrid",
    "salaryRange": {
      "min": 150000,
      "max": 200000,
      "currency": "USD",
      "period": "yearly"
    },
    "visibility": "private"
  }'

New roles are always created as draft status. You must explicitly publish them to start accepting applications.

Adding Problem Specifications

Problem specifications define what candidates should demonstrate in their applications.

Structure

{
  "problemSpecs": [
    {
      "id": "ps-1",
      "prompt": "Describe a complex distributed system you've designed",
      "successCriteria": "Clear explanation of trade-offs and scalability considerations",
      "orderIndex": 0
    },
    {
      "id": "ps-2",
      "prompt": "How would you handle data consistency in a microservices architecture?",
      "orderIndex": 1
    }
  ]
}

Adding to a Role

Include problemSpecs when creating or updating a role:

curl -X PUT "https://api.sureshake.com/api/v1/entities/{entityId}/hiring/roles/{roleId}" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "entityId": "your-entity-uuid",
    "roleId": "role-uuid",
    "problemSpecs": [
      {
        "id": "ps-1",
        "prompt": "Describe your experience with API design",
        "successCriteria": "RESTful principles, versioning strategy",
        "orderIndex": 0
      }
    ]
  }'

Defining an Evaluation Rubric

The rubric helps standardize candidate evaluation across reviewers.

Structure

{
  "rubric": {
    "version": 1,
    "dimensions": [
      {
        "id": "dim-1",
        "name": "Technical Skills",
        "description": "Depth of technical knowledge and practical experience",
        "weight": 0.4,
        "scaleMin": 1,
        "scaleMax": 5
      },
      {
        "id": "dim-2",
        "name": "Communication",
        "description": "Clarity of written and verbal communication",
        "weight": 0.3,
        "scaleMin": 1,
        "scaleMax": 5
      },
      {
        "id": "dim-3",
        "name": "Problem Solving",
        "description": "Approach to complex problems",
        "weight": 0.3,
        "scaleMin": 1,
        "scaleMax": 5
      }
    ]
  }
}

Weights should sum to 1.0 for proper score calculation.

Publishing a Role

Once your role is ready, publish it to start accepting applications.

Requirements Before Publishing

  • Role must have a title
  • Role must be in draft status
  • Recommended: Add problem specifications and rubric

Publish Command

curl -X POST "https://api.sureshake.com/api/v1/entities/{entityId}/hiring/roles/{roleId}/publish" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "entityId": "your-entity-uuid",
    "roleId": "role-uuid"
  }'

What Happens:

  1. Status changes from draft to published
  2. publishedAt timestamp is recorded
  3. Role becomes visible based on its visibility setting:
    • public: Appears in public job board search
    • unlisted: Accessible via direct link
    • private: Only visible to entity team members

Managing Role Visibility

Visibility Options

VisibilityPublic SearchDirect LinkEntity Members
publicYesYesYes
unlistedNoYesYes
privateNoNoYes

Changing Visibility

curl -X PUT "https://api.sureshake.com/api/v1/entities/{entityId}/hiring/roles/{roleId}" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "entityId": "your-entity-uuid",
    "roleId": "role-uuid",
    "visibility": "public"
  }'

Closing a Role

When you're done accepting applications, close the role.

curl -X POST "https://api.sureshake.com/api/v1/entities/{entityId}/hiring/roles/{roleId}/close" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "entityId": "your-entity-uuid",
    "roleId": "role-uuid"
  }'

What Happens:

  1. Status changes from published to closed
  2. closesAt timestamp is recorded
  3. Role no longer accepts new applications
  4. Existing applications remain accessible

Listing Your Organization's Roles

View all roles for your organization (including drafts and closed):

curl -X GET "https://api.sureshake.com/api/v1/entities/{entityId}/hiring/roles?status=published&limit=20" \
  -H "Authorization: Bearer $TOKEN"

Query Parameters

ParameterTypeDefaultDescription
statusstringallFilter by draft, published, or closed
limitnumber20Results per page (1-100)
offsetnumber0Pagination offset

Role Lifecycle

DRAFT ─────→ PUBLISHED ─────→ CLOSED
  │              │               │
  │              │               │
Create        Publish          Close
Update        Accept Apps      No new apps
              AI Matching      Archive

Reviewing Applications

List Applications for a Role

curl -X GET "https://api.sureshake.com/api/v1/entities/{entityId}/hiring/roles/{roleId}/applications" \
  -H "Authorization: Bearer $TOKEN"

View Application Details

curl -X GET "https://api.sureshake.com/api/v1/entities/{entityId}/hiring/applications/{applicationId}" \
  -H "Authorization: Bearer $TOKEN"

Update Application Status

curl -X PUT "https://api.sureshake.com/api/v1/entities/{entityId}/hiring/applications/{applicationId}/status" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "reviewing"
  }'

Creating Evaluations

Score candidates against your rubric dimensions:

curl -X POST "https://api.sureshake.com/api/v1/entities/{entityId}/hiring/applications/{applicationId}/evaluations" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "scores": [
      {
        "dimensionId": "dim-1",
        "score": 4,
        "notes": "Strong technical background with relevant experience"
      },
      {
        "dimensionId": "dim-2",
        "score": 5,
        "notes": "Excellent communication in problem spec responses"
      }
    ],
    "overallNotes": "Strong candidate, recommend for interview"
  }'

Once submitted, evaluations are immutable. This ensures a fair and consistent evaluation process.

Publishing Feedback

Share structured feedback with candidates:

curl -X POST "https://api.sureshake.com/api/v1/entities/{entityId}/hiring/applications/{applicationId}/feedback" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "strengths": ["Technical skills", "Problem solving approach"],
    "gaps": ["Domain expertise in payments"],
    "recommendation": "consider",
    "notes": "Strong candidate overall, would benefit from more payments experience",
    "publishToCandidate": true
  }'

AI-Powered Matching

Get ranked candidates for your role:

curl -X GET "https://api.sureshake.com/api/v1/entities/{entityId}/hiring/roles/{roleId}/matches" \
  -H "Authorization: Bearer $TOKEN"

The response includes match scores and explanations for each candidate.

Best Practices

Writing Effective Role Descriptions

  1. Be specific — Clearly state responsibilities and requirements
  2. Include growth — Mention career development opportunities
  3. Be honest — Accurately represent the role and team
  4. Use structure — Break into sections (About, Responsibilities, Requirements)

Designing Good Problem Specifications

  1. Open-ended — Allow candidates to demonstrate depth
  2. Relevant — Tie to actual job responsibilities
  3. Clear criteria — Define what "good" looks like
  4. Reasonable scope — Respect candidates' time

Building Fair Rubrics

  1. Multiple dimensions — Avoid single-metric evaluation
  2. Clear descriptions — Reduce evaluator subjectivity
  3. Balanced weights — Reflect actual job priorities
  4. Consistent scales — Use same min/max across dimensions

Troubleshooting

"FORBIDDEN: You do not have permission"

Cause: Missing manage_hiring_roles permission Solution: Contact your entity admin to grant hiring permissions

"BAD_REQUEST: Cannot publish role without title"

Cause: Role is missing required fields Solution: Update the role to add a title before publishing

"CONFLICT: Role status does not allow this action"

Cause: Trying to publish a closed role or close a draft Solution: Check current status; only draft → published and published → closed transitions are allowed

On this page