> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to HackerRank Work

The HackerRank Work connector lets your AI agent act in each user's HackerRank Work account. Each user connects their own HackerRank Work access token once, and Scalekit sends it with every call, so your agent never handles credentials. It comes with 36 tools.

**Authentication:** Bearer Token
**Categories:** Productivity, Developer Tools
**Tools:** 36: 25 read, 9 write, 2 destructive
**Users sign in with:** Access token
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=HACKERRANKWORK)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the HackerRank Work connection

   In **AgentKit > Connections**, create a HackerRank Work connection. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'hackerrankwork'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize HackerRank Work:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'hackerrankwork_list_audit_logs',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "hackerrankwork"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize HackerRank Work:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="hackerrankwork_list_audit_logs",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user opens the link once and enters their HackerRank Work credentials there. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'hackerrankwork_get_candidate_report_pdf',
  toolInput: {
    candidate_id: '<candidate_id>',
    test_id: '<test_id>',
  },
  connector: 'hackerrankwork',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="hackerrankwork_get_candidate_report_pdf",
    tool_input={
        "candidate_id": "<candidate_id>",
        "test_id": "<test_id>",
    },
    connection_name="hackerrankwork",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `hackerrankwork_get_candidate_report_pdf`

Get Candidate Report PDF · Read-only

Get the PDF score report for a test candidate as a download URL.
Returns the location of the candidate's PDF report (requested with format=url). HackerRank answers 503 while the PDF is still being generated; retry after a short wait.
Use hackerrankwork_get_candidate_report_pdf once a candidate has finished; use hackerrankwork_get_test_candidate for scores as data.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `candidate_id` (`string`, required): ID of the candidate whose report to fetch.
- `test_id` (`string`, required): ID of the test the candidate attempted.

Example input: `{"candidate_id":"<candidate_id>","test_id":"<test_id>"}`

### `hackerrankwork_get_interview`

Get Interview · Read-only

Retrieve one live coding interview by id.
Returns the interview's id, title, status, scheduled and actual times, url, owner, interviewers, candidate, notes, feedback, thumbs_up, report_url, metadata and template id.
Use hackerrankwork_get_interview for one interview; use hackerrankwork_get_interview_transcript for its transcript.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `interview_id` (`string`, required): ID of the interview, as returned by hackerrankwork_list_interviews.

Example input: `{"interview_id":"<interview_id>"}`

### `hackerrankwork_get_interview_template`

Get Interview Template · Read-only

Retrieve one interview template by id.
Returns the template's id, name, status, owner, roles, questions, scorecard, sharing and editor access.
Use hackerrankwork_get_interview_template for one template; use hackerrankwork_list_interview_templates to browse.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `template_id` (`integer`, required): ID of the interview template, as returned by hackerrankwork_list_interview_templates.

Example input: `{"template_id":1}`

### `hackerrankwork_get_interview_transcript`

Get Interview Transcript · Read-only

Retrieve the transcript of a live coding interview.
Returns a messages list with the recorded conversation.
Use hackerrankwork_get_interview_transcript after the interview has run; use hackerrankwork_get_interview for its metadata and feedback.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `interview_id` (`string`, required): ID of the interview whose transcript to fetch.

Example input: `{"interview_id":"<interview_id>"}`

### `hackerrankwork_get_invite_template`

Get Invite Template · Read-only

Retrieve one candidate invitation email template by id.
Returns the template's id, name, subject, content, default flag, timestamps and owner.
Use hackerrankwork_get_invite_template to view a template; use hackerrankwork_list_invite_templates to find ids.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `template_id` (`string`, required): ID of the invite template, as returned by hackerrankwork_list_invite_templates.

Example input: `{"template_id":"<template_id>"}`

### `hackerrankwork_get_question`

Get Question · Read-only

Retrieve one question from the question bank by id.
Returns the question's id, unique_id, type, name, owner, status, languages, problem statement, recommended duration, tags, max_score, options and answer.
Use hackerrankwork_get_question for the full content of one question; use hackerrankwork_list_questions to find ids.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `question_id` (`string`, required): ID of the question, as returned by hackerrankwork_list_questions.

Example input: `{"question_id":"<question_id>"}`

### `hackerrankwork_get_team`

Get Team · Read-only

Retrieve one team by id.
Returns the team's id, name, owner, created_at, recruiter and developer counts and caps, invite_as, locations and departments.
Use hackerrankwork_get_team for one team; use hackerrankwork_list_teams to find ids.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `team_id` (`string`, required): ID of the team, as returned by hackerrankwork_list_teams.

Example input: `{"team_id":"<team_id>"}`

### `hackerrankwork_get_team_membership`

Get Team Membership · Read-only

Check whether a user belongs to a team and retrieve the membership.
Returns the membership record with the team and the user.
Use hackerrankwork_get_team_membership to confirm one user's membership; use hackerrankwork_list_team_members for the whole roster.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `team_id` (`string`, required): ID of the team.
- `user_id` (`string`, required): ID of the user.

Example input: `{"team_id":"<team_id>","user_id":"<user_id>"}`

### `hackerrankwork_get_test`

Get Test · Read-only

Retrieve one assessment test by id, optionally with extra detail fields.
Returns the test's id, name, duration, start and end times, owner, state, languages, tags, questions, sections, scoring settings, login URLs and any requested additional fields.
Use hackerrankwork_get_test after hackerrankwork_list_tests when you need the full settings of a single test.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `test_id` (`string`, required): ID of the test to retrieve, as returned by hackerrankwork_list_tests.
- `additional_fields` (`string`, optional): Comma-separated extra test fields to include in the response, for example languages,candidate_details,cutoff_score,test_admins. Leave empty for the default fields.

Example input: `{"test_id":"<test_id>"}`

### `hackerrankwork_get_test_candidate`

Get Test Candidate · Read-only

Retrieve one candidate's record for a test, including scores and report links.
Returns the candidate's id, name, email, score, status, attempt times, integrity status, invite details, tags, report URLs and any requested additional fields.
Use hackerrankwork_get_test_candidate for the detail of one candidate; use hackerrankwork_list_test_candidates to browse.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `candidate_id` (`string`, required): ID of the test candidate, as returned by hackerrankwork_list_test_candidates or hackerrankwork_invite_candidate.
- `test_id` (`string`, required): ID of the test the candidate was invited to.
- `additional_fields` (`string`, optional): Comma-separated extra fields to include, for example questions,scores_sections_split. Leave empty for the default fields.

Example input: `{"candidate_id":"<candidate_id>","test_id":"<test_id>"}`

### `hackerrankwork_get_user`

Get User · Read-only

Retrieve one user by id.
Returns the user's id, email, name, country, role, status, phone, timezone, permissions, admin flags, teams and last activity time.
Use hackerrankwork_get_user for one user; use hackerrankwork_list_users or hackerrankwork_search_users to find ids.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `user_id` (`string`, required): ID of the user, as returned by hackerrankwork_list_users.

Example input: `{"user_id":"<user_id>"}`

### `hackerrankwork_list_audit_logs`

List Audit Logs · Read-only

List audit log entries describing recruiter activity in your account, optionally for one user.
Returns each entry's source id and type, user, action, modified fields and values, ip address and created_at, plus pagination links.
Use hackerrankwork_list_audit_logs to review who changed what.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.
- `user_id` (`string`, optional): Return only entries for this user id.

Example input: `{}`

### `hackerrankwork_list_interview_templates`

List Interview Templates · Read-only

List the interview templates you can access, optionally only the ones you own or ones shared with you.
Returns each template's id, name, status, owner, roles, questions, scorecard and sharing details, plus pagination links.
Use hackerrankwork_list_interview_templates to browse; use hackerrankwork_get_interview_template for one template.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `filter` (`string`, optional): Filter by ownership: owned for templates you created, shared for templates shared with you. One of: `owned`, `shared`.
- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.

Example input: `{}`

### `hackerrankwork_list_interviews`

List Interviews · Read-only

List live coding interviews, optionally filtered by dates, owner, interviewers, access or status.
Returns each interview's id, title, status, scheduled times, url, owner, interviewers, candidate, feedback, report_url and template id, plus pagination links.
Use hackerrankwork_list_interviews to browse; use hackerrankwork_get_interview for one interview in full.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `access` (`string`, optional): Filter by access rights: owned or shared. One of: `owned`, `shared`.
- `created_at` (`string`, optional): Range of creation datetimes in the form from..to, for example 2024-01-21T13:36:21+0000..2024-01-22T00:00:00+0000.
- `current_status` (`string`, optional): Filter by current status code: 0 New, 1 Active, 2 Ended, 3 Paused. One of: `0`, `1`, `2`, `3`.
- `ended_at` (`string`, optional): Range of end datetimes in the form from..to, for example 2024-01-21T13:36:21+0000..2024-01-22T00:00:00+0000.
- `interviewers` (`string`, optional): Return only interviews that include this interviewer's user id.
- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.
- `order_by` (`string`, optional): Sort field: title, id, created_at, ended_at, current_status or user. One of: `title`, `id`, `created_at`, `ended_at`, `current_status`, `user`.
- `order_dir` (`string`, optional): Sort direction, asc or desc. Required whenever order_by is used. One of: `asc`, `desc`.
- `updated_at` (`string`, optional): Range of update datetimes in the form from..to, for example 2024-01-21T13:36:21+0000..2024-01-22T00:00:00+0000.
- `user` (`string`, optional): Return only interviews created by this user id.

Example input: `{}`

### `hackerrankwork_list_invite_templates`

List Invite Templates · Read-only

List the candidate invitation email templates you can use, optionally only owned or shared ones.
Returns each template's id, name, subject, content, default flag, timestamps and owner, plus pagination links.
Use hackerrankwork_list_invite_templates to find a template id for hackerrankwork_invite_candidate; use hackerrankwork_get_invite_template for one template.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `access` (`string`, optional): Filter by access type: shared or owned. One of: `shared`, `owned`.
- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.

Example input: `{}`

### `hackerrankwork_list_questions`

List Questions · Read-only

List questions in the question bank, optionally filtered by status, access, difficulty, type, owner, tags, skills or languages.
Returns each question's id, unique_id, type, name, owner, status, languages, difficulty-related fields, tags, max_score and recommended duration, plus pagination links.
Use hackerrankwork_list_questions to find question ids for tests and interview templates; use hackerrankwork_get_question for one question in full.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `access` (`string`, optional): Comma-separated access types: library, owned, shared.
- `difficulty` (`string`, optional): Comma-separated difficulty levels to include.
- `languages` (`string`, optional): Comma-separated languages the question allows.
- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.
- `owner` (`string`, optional): Comma-separated user ids of question owners.
- `skills` (`string`, optional): Comma-separated skills to match.
- `status` (`string`, optional): Question status: active or archived. One of: `active`, `archived`.
- `tags` (`string`, optional): Comma-separated tags to match.
- `type` (`string`, optional): Comma-separated question types to include, for example code,mcq.

Example input: `{}`

### `hackerrankwork_list_team_members`

List Team Members · Read-only

List the users who belong to a team.
Returns membership records, each with the team and the user, plus pagination links.
Use hackerrankwork_list_team_members to see a team's roster; use hackerrankwork_get_team_membership to check one user.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `team_id` (`string`, required): ID of the team whose members to list.
- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.

Example input: `{"team_id":"<team_id>"}`

### `hackerrankwork_list_teams`

List Teams · Read-only

List the teams in your HackerRank for Work company account.
Returns each team's id, name, owner, created_at, recruiter and developer counts and caps, invite_as, locations and departments, plus pagination links.
Use hackerrankwork_list_teams to browse; use hackerrankwork_get_team for one team and hackerrankwork_list_team_members for its members.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.

Example input: `{}`

### `hackerrankwork_list_test_candidates`

List Test Candidates · Read-only

List the candidates invited to a test.
Returns each candidate's id, name, email, score, status, attempt times, invite details, tags and report URLs, plus pagination links.
Use hackerrankwork_list_test_candidates to browse one test's candidates; use hackerrankwork_search_test_candidates to find by name or email, or hackerrankwork_search_candidates to search across all tests.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `test_id` (`string`, required): ID of the test whose candidates to list.
- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.

Example input: `{"test_id":"<test_id>"}`

### `hackerrankwork_list_test_inviters`

List Test Inviters · Read-only

List the users who are allowed to invite candidates to a test.
Returns each inviter's id, email, name, role, status, permissions, teams and number of candidates invited.
Use hackerrankwork_list_test_inviters to see who can invite for a test; use hackerrankwork_list_users for every user in the account.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `test_id` (`string`, required): ID of the test whose inviters to list.
- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.

Example input: `{"test_id":"<test_id>"}`

### `hackerrankwork_list_tests`

List Tests · Read-only

List the assessment tests in your HackerRank for Work account, newest page first.
Returns, per test, its id, unique_id, name, duration, owner, state, draft and locked flags, languages, tags, role ids, questions, login URLs and pagination links.
Use hackerrankwork_list_tests to browse tests; use hackerrankwork_get_test for the full settings of one test.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.

Example input: `{}`

### `hackerrankwork_list_users`

List Users · Read-only

List the users in your HackerRank for Work company account.
Returns each user's id, email, name, role, status, permissions, admin flags, teams and last activity time, plus pagination links.
Use hackerrankwork_list_users to browse everyone; use hackerrankwork_search_users to find by name or email, or hackerrankwork_get_user for one user.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.

Example input: `{}`

### `hackerrankwork_search_candidates`

Search Candidates · Read-only

Search candidates across all tests by name or email.
Returns each matching candidate's uuid, name, email, timestamps and the accessible test attempts with their results, plus pagination links.
Use hackerrankwork_search_candidates to find a person across every test; use hackerrankwork_search_test_candidates to search inside one test.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `query` (`string`, required): Candidate name or email to search for.
- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.

Example input: `{"query":"<query>"}`

### `hackerrankwork_search_test_candidates`

Search Test Candidates · Read-only

Search one test's candidates by name or email.
Returns matching candidates with id, name, email, score, status, attempt times, invite details and report URLs, plus pagination links.
Use hackerrankwork_search_test_candidates when you know part of a name or email and the test; use hackerrankwork_search_candidates to search across every test.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `search` (`string`, required): Candidate name or email, or part of one.
- `test_id` (`string`, required): ID of the test to search within.
- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.

Example input: `{"search":"<search>","test_id":"<test_id>"}`

### `hackerrankwork_search_users`

Search Users · Read-only

Search users by name or email.
Returns matching users with id, email, name, role, status, permissions, teams and last activity time, plus pagination links.
Use hackerrankwork_search_users when you know part of a name or email; use hackerrankwork_list_users to browse everyone.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `search` (`string`, required): Name or email, or part of one, to search for.
- `limit` (`integer`, optional): Number of records to return per page. Maximum 100. Default: `10`.
- `offset` (`integer`, optional): Number of records to skip before the first result, used for pagination. Follow the next link in the response for the following page. Default: `0`.

Example input: `{"search":"<search>"}`

### `hackerrankwork_archive_test`

Archive Test · Write

Archive an assessment test so it no longer appears among active tests.
Returns an empty success response (HTTP 204) when the test is archived.
Use hackerrankwork_archive_test to retire a test without deleting its data.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `test_id` (`string`, required): ID of the test to archive.

Example input: `{"test_id":"<test_id>"}`

### `hackerrankwork_create_interview`

Create Interview · Write

Schedule a new live coding interview, optionally inviting the interviewers and candidate by email.
Returns the created interview with its id, title, url, scheduled times, interviewers and candidate.
Use hackerrankwork_create_interview to schedule one; use hackerrankwork_update_interview to change an existing interview. Emails go out only when send_email is true.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `title` (`string`, required): Title of the interview.
- `ai_assistant_available` (`boolean`, optional): Set true to make the AI assistant available. Applies only when the AI add-on and AI assistant setting are enabled for your company.
- `candidate` (`object`, optional): Candidate to invite, as an object with an email and optional name, for example {"name":"Mark Ramone","email":"mark@example.com"}.
- `from` (`string`, optional): Scheduled start time of the interview as an ISO 8601 datetime.
- `interview_template_id` (`integer`, optional): ID of the interview template to use, from hackerrankwork_list_interview_templates.
- `interviewers` (`array`, optional): Email addresses of the interviewers to invite, for example ["hina@techcorp.com"].
- `metadata` (`object`, optional): Any additional information to store with the interview.
- `notes` (`string`, optional): Notes shown to the interviewers.
- `result_url` (`string`, optional): Webhook URL that receives results after the interview ends or when feedback changes on a completed interview.
- `resume_url` (`string`, optional): Link to the candidate's resume.
- `send_email` (`boolean`, optional): Set true to send or resend invitation emails to the attendees.
- `to` (`string`, optional): Scheduled end time of the interview as an ISO 8601 datetime.

Example input: `{"title":"<title>"}`

### `hackerrankwork_create_interview_template`

Create Interview Template · Write

Create a new interview template, optionally with starting questions.
Returns the created template with its id, name, roles and questions.
Use hackerrankwork_create_interview_template to make a template; use hackerrankwork_update_interview_template to rename or re-role an existing one. Question ids must be accessible to you.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the interview template.
- `question_ids` (`array`, optional): Ids of questions to add to the template, from hackerrankwork_list_questions.
- `role_id` (`string`, optional): Role unique id for the template.

Example input: `{"name":"<name>"}`

### `hackerrankwork_create_test`

Create Test · Write

Create a new assessment test in HackerRank for Work.
Returns the created test with its id, unique_id, name, state and settings.
Use hackerrankwork_create_test to add a test; use hackerrankwork_update_test to change an existing one. Candidates can only be invited once the test is published (draft false).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `duration` (`integer`, required): Duration of the test in minutes.
- `experience` (`array`, required): Experience levels the test targets. Allowed values: Intern, New Graduate, 0-2 years, 2-5 years, >5 years, All Experience Levels.
- `name` (`string`, required): Name of the test as shown to your team.
- `role_ids` (`array`, required): IDs of the roles associated with the test.
- `candidate_details` (`array`, optional): Details candidates must enter before logging in, as a list of objects such as [{"predefined_label":"full_name","required":true}]. They appear in the candidate report.
- `custom_acknowledge_text` (`string`, optional): Text candidates must agree to before logging in.
- `cutoff_score` (`integer`, optional): Candidates scoring at or above this value are placed in the Qualified bucket, those below in Failed.
- `draft` (`boolean`, optional): True keeps the test in Draft state, false publishes it. Candidates can only be invited to published tests.
- `enable_acknowledgement` (`boolean`, optional): If false, candidates are not asked to agree to the acknowledgement text.
- `enable_advanced_proctoring` (`boolean`, optional): If true, webcam photos are analyzed with AI to detect suspicious activity.
- `enable_ml_plagiarism_analysis` (`boolean`, optional): If true, detects whether a candidate received help from an external source. Defaults to false.
- `enable_photo_identification` (`boolean`, optional): If true, candidates must take a photo before starting. Defaults to false.
- `enable_proctoring` (`boolean`, optional): If true, candidates must turn their webcam on and periodic snapshots appear in the report.
- `enable_secure_assessment_mode` (`boolean`, optional): If true, enables secure mode (Integrity settings). Defaults to false.
- `endtime` (`string`, optional): ISO 8601 datetime. Candidate logins after this time are disabled; candidates already logged in can finish normally.
- `hide_compile_test` (`boolean`, optional): If true, candidates cannot see the compile button for coding and approximate questions.
- `hide_template` (`boolean`, optional): If true, head and tail code templates are not shown to candidates.
- `ide_config` (`string`, optional): IDE configuration for front-end, back-end and full-stack questions: ide_and_git, ide or git. API default is ide. One of: `ide_and_git`, `ide`, `git`.
- `instructions` (`string`, optional): HTML shown to candidates on the test login page.
- `languages` (`array`, optional): Programming languages available for coding and approximate questions, for example ["java","cpp"]. Null enables all languages.
- `locked` (`boolean`, optional): Whether the test is locked. A locked test cannot be edited, but candidates can still be invited.
- `master_password` (`string`, optional): If set, candidates can log in to the test with this password.
- `mcq_correct_score` (`integer`, optional): Score added per correct multiple-choice answer.
- `mcq_incorrect_score` (`integer`, optional): Score deducted per incorrect multiple-choice answer.
- `questions` (`array`, optional): IDs of the questions in the test, as returned by hackerrankwork_list_questions.
- `shuffle_questions` (`boolean`, optional): If true, questions are shuffled for each candidate.
- `starttime` (`string`, optional): ISO 8601 datetime. Candidate logins before this time are disabled; candidates already logged in are not affected.
- `tags` (`array`, optional): Tags to associate with the test, for example ["Java","Senior"].
- `test_admins` (`array`, optional): Email addresses of test admins, who also receive summary mails when a candidate completes the test.

Example input: `{"duration":1,"experience":[],"name":"<name>","role_ids":[]}`

### `hackerrankwork_invite_candidate`

Invite Candidate · Write

Invite a single candidate to a published test, optionally sending the invitation email.
Returns the candidate's id, email and the test_link they use to take the test.
Use hackerrankwork_invite_candidate to invite one person per call. No email is sent unless send_email is true. The test must be published (not draft).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `email` (`string`, required): Email address of the candidate.
- `test_id` (`string`, required): ID of the published test to invite the candidate to.
- `accept_result_updates` (`boolean`, optional): Set true to also send score and status updates to test_result_url. API default is false.
- `accommodations` (`object`, optional): Accommodations object, for example {"additional_time_percent": 25} to add 25 percent extra time.
- `ats_state` (`integer`, optional): Current state of the candidate application, an integer from 0 to 22.
- `evaluator_email` (`string`, optional): Email of the evaluator, if different from the test admins and owner.
- `force` (`boolean`, optional): Set true to send the email even if the candidate was already invited.
- `force_reattempt` (`boolean`, optional): Set true to re-invite even if the candidate already attempted the test.
- `full_name` (`string`, optional): Full name of the candidate.
- `invite_metadata` (`object`, optional): Custom metadata object stored with the candidate, for example {"ats_candidate_id": 1}.
- `invite_valid_from` (`string`, optional): ISO 8601 time from which the invite is valid. Omit for no start restriction.
- `invite_valid_to` (`string`, optional): ISO 8601 time until which the invite is valid. Omit for a permanently valid invite.
- `message` (`string`, optional): Custom message prepended to the invite email body.
- `send_email` (`boolean`, optional): Set true to send the invitation email. When false or omitted the invite is recorded but no email is sent.
- `subject` (`string`, optional): Subject of the invite email.
- `tags` (`array`, optional): Tags to associate with the candidate.
- `template` (`string`, optional): ID of the invite template to use, from hackerrankwork_list_invite_templates.
- `test_finish_url` (`string`, optional): URL candidates are redirected to when the test ends. Defaults to the feedback page.
- `test_result_url` (`string`, optional): Webhook URL that receives the candidate report when it is processed. By default the inviter gets it by email.
- `webhook_authentication` (`object`, optional): Authentication for the result webhook: {"type":"bearer_token","data":{"token":"..."}} or {"type":"basic_auth","data":{"username":"...","password":"..."}}.

Example input: `{"email":"<email>","test_id":"<test_id>"}`

### `hackerrankwork_update_interview`

Update Interview · Write

Update a live coding interview's schedule, interviewers, candidate or notes; only the fields you pass are changed.
Returns the updated interview with its id, title, url, scheduled times, interviewers and candidate.
Use hackerrankwork_update_interview to edit an existing interview; use hackerrankwork_create_interview to schedule a new one. Pass replace_interviewers true to replace the interviewer list instead of adding to it.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `interview_id` (`string`, required): ID of the interview to update.
- `ai_assistant_available` (`boolean`, optional): Set true to make the AI assistant available. Applies only when the AI add-on and AI assistant setting are enabled for your company.
- `candidate` (`object`, optional): Candidate to invite, as an object with an email and optional name, for example {"name":"Mark Ramone","email":"mark@example.com"}.
- `from` (`string`, optional): Scheduled start time of the interview as an ISO 8601 datetime.
- `interview_template_id` (`integer`, optional): ID of the interview template to use, from hackerrankwork_list_interview_templates.
- `interviewers` (`array`, optional): Email addresses of the interviewers to invite, for example ["hina@techcorp.com"].
- `metadata` (`object`, optional): Any additional information to store with the interview.
- `notes` (`string`, optional): Notes shown to the interviewers.
- `replace_interviewers` (`boolean`, optional): If true, the interviewers list is replaced with the interviewers provided instead of being added to.
- `result_url` (`string`, optional): Webhook URL that receives results after the interview ends or when feedback changes on a completed interview.
- `resume_url` (`string`, optional): Link to the candidate's resume.
- `send_email` (`boolean`, optional): Set true to send or resend invitation emails to the attendees.
- `title` (`string`, optional): New title of the interview.
- `to` (`string`, optional): Scheduled end time of the interview as an ISO 8601 datetime.

Example input: `{"interview_id":"<interview_id>"}`

### `hackerrankwork_update_interview_template`

Update Interview Template · Write

Update an interview template's name, role or scorecard; only the fields you pass are changed.
Returns the updated template with its id, name, roles, questions and scorecard.
Use hackerrankwork_update_interview_template to edit a template; use hackerrankwork_create_interview_template for a new one. Only the owner, permitted admins or editors can update.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `template_id` (`integer`, required): ID of the interview template to update.
- `name` (`string`, optional): New name of the interview template.
- `role_id` (`string`, optional): Role unique id for the template.
- `scorecard_id` (`integer`, optional): Id of the scorecard to associate with the template.

Example input: `{"template_id":1}`

### `hackerrankwork_update_test`

Update Test · Write

Update the settings of an existing assessment test; only the fields you pass are changed.
Returns the updated test with its id, name, state and settings.
Use hackerrankwork_update_test to edit a test; use hackerrankwork_create_test to make a new one. Locked tests cannot be edited.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `test_id` (`string`, required): ID of the test to update.
- `candidate_details` (`array`, optional): Details candidates must enter before logging in, as a list of objects such as [{"predefined_label":"full_name","required":true}]. They appear in the candidate report.
- `custom_acknowledge_text` (`string`, optional): Text candidates must agree to before logging in.
- `cutoff_score` (`integer`, optional): Candidates scoring at or above this value are placed in the Qualified bucket, those below in Failed.
- `draft` (`boolean`, optional): True keeps the test in Draft state, false publishes it. Candidates can only be invited to published tests.
- `duration` (`integer`, optional): Duration of the test in minutes.
- `enable_acknowledgement` (`boolean`, optional): If false, candidates are not asked to agree to the acknowledgement text.
- `enable_advanced_proctoring` (`boolean`, optional): If true, webcam photos are analyzed with AI to detect suspicious activity.
- `enable_ml_plagiarism_analysis` (`boolean`, optional): If true, detects whether a candidate received help from an external source. Defaults to false.
- `enable_photo_identification` (`boolean`, optional): If true, candidates must take a photo before starting. Defaults to false.
- `enable_proctoring` (`boolean`, optional): If true, candidates must turn their webcam on and periodic snapshots appear in the report.
- `enable_secure_assessment_mode` (`boolean`, optional): If true, enables secure mode (Integrity settings). Defaults to false.
- `endtime` (`string`, optional): ISO 8601 datetime. Candidate logins after this time are disabled; candidates already logged in can finish normally.
- `experience` (`array`, optional): Experience levels the test targets. Allowed values: Intern, New Graduate, 0-2 years, 2-5 years, >5 years, All Experience Levels.
- `hide_compile_test` (`boolean`, optional): If true, candidates cannot see the compile button for coding and approximate questions.
- `hide_template` (`boolean`, optional): If true, head and tail code templates are not shown to candidates.
- `ide_config` (`string`, optional): IDE configuration for front-end, back-end and full-stack questions: ide_and_git, ide or git. API default is ide. One of: `ide_and_git`, `ide`, `git`.
- `instructions` (`string`, optional): HTML shown to candidates on the test login page.
- `languages` (`array`, optional): Programming languages available for coding and approximate questions, for example ["java","cpp"]. Null enables all languages.
- `locked` (`boolean`, optional): Whether the test is locked. A locked test cannot be edited, but candidates can still be invited.
- `master_password` (`string`, optional): If set, candidates can log in to the test with this password.
- `mcq_correct_score` (`integer`, optional): Score added per correct multiple-choice answer.
- `mcq_incorrect_score` (`integer`, optional): Score deducted per incorrect multiple-choice answer.
- `name` (`string`, optional): Name of the test as shown to your team.
- `questions` (`array`, optional): IDs of the questions in the test, as returned by hackerrankwork_list_questions.
- `role_ids` (`array`, optional): IDs of the roles associated with the test.
- `shuffle_questions` (`boolean`, optional): If true, questions are shuffled for each candidate.
- `starttime` (`string`, optional): ISO 8601 datetime. Candidate logins before this time are disabled; candidates already logged in are not affected.
- `tags` (`array`, optional): Tags to associate with the test, for example ["Java","Senior"].
- `test_admins` (`array`, optional): Email addresses of test admins, who also receive summary mails when a candidate completes the test.

Example input: `{"test_id":"<test_id>"}`

### `hackerrankwork_update_test_candidate`

Update Test Candidate · Write

Update a test candidate's invite settings, metadata or tags; only the fields you pass are changed.
Returns the updated candidate record with id, name, email, score, status and invite details.
Use hackerrankwork_update_test_candidate to change an existing candidate; use hackerrankwork_invite_candidate to invite someone new.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `candidate_id` (`string`, required): ID of the candidate to update.
- `test_id` (`string`, required): ID of the test the candidate was invited to.
- `accept_result_updates` (`boolean`, optional): Set true to also send score and status updates to test_result_url.
- `accommodations` (`object`, optional): Accommodations object, for example {"additional_time_percent": 25}.
- `ats_state` (`integer`, optional): Current state of the candidate application, an integer from 0 to 22.
- `evaluator_email` (`string`, optional): Email of the evaluator, if different from the test admins and owner.
- `full_name` (`string`, optional): New full name of the candidate.
- `invite_metadata` (`object`, optional): Custom metadata object stored with the candidate.
- `invite_valid_from` (`string`, optional): ISO 8601 time from which the invite is valid.
- `invite_valid_to` (`string`, optional): ISO 8601 time until which the invite is valid.
- `tags` (`array`, optional): Tags to associate with the candidate.
- `test_finish_url` (`string`, optional): URL candidates are redirected to when the test ends.
- `test_result_url` (`string`, optional): Webhook URL that receives the candidate report when it is processed.
- `webhook_authentication` (`object`, optional): Authentication for the result webhook: {"type":"bearer_token","data":{"token":"..."}} or {"type":"basic_auth","data":{"username":"...","password":"..."}}.

Example input: `{"candidate_id":"<candidate_id>","test_id":"<test_id>"}`

### `hackerrankwork_cancel_candidate_invite`

Cancel Candidate Invite · Destructive

Cancel a candidate's invitation to a test so the invite link stops working.
Returns an empty success response when the invite is cancelled.
Use hackerrankwork_cancel_candidate_invite to withdraw an invitation; use hackerrankwork_update_test_candidate to change its validity window instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `candidate_id` (`string`, required): ID of the candidate whose invite to cancel.
- `test_id` (`string`, required): ID of the test the candidate was invited to.

Example input: `{"candidate_id":"<candidate_id>","test_id":"<test_id>"}`

### `hackerrankwork_delete_interview`

Delete Interview · Destructive

Delete a live coding interview.
Returns an empty success response when the interview is deleted.
Use hackerrankwork_delete_interview to remove an interview permanently; use hackerrankwork_update_interview to reschedule it instead.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `interview_id` (`string`, required): ID of the interview to delete.

Example input: `{"interview_id":"<interview_id>"}`

## Related

Other Productivity connectors ([all 144](/agentkit/connectors/?category=productivity)):

- [Slack](/agentkit/connectors/slack/): Scalekit connector, OAuth, 96 tools
- [Microsoft 365](/agentkit/connectors/microsoft365/): Scalekit connector, OAuth, 317 tools
- [Notion](/agentkit/connectors/notion/): Scalekit connector, OAuth, 51 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
