Skip to main content

Question bank

Real interview questions, searchable by company, topic and difficulty.

A read-only library of questions companies actually ask, plus anything your organisation has added privately. Use it to build practice sets, seed your own screening flow, or show candidates what a company tends to ask.

It costs no credit. It is reference data, not an assessment, so nothing here creates a session, schedules anything, or records a result.

What is in it

Two sources. leetcode questions carry a public url and an acceptance rate. curated questions are ours, and cover the ground LeetCode does not: aptitude, HR and behavioral, finance, management, and the core engineering streams.

Every question carries a statement_html we wrote, marked statement_source: "ai". It is a problem description, approach, complexity and edge cases, not a copy of the original text. Check statement_available before rendering it, and fall back to url when it is false.

Browsing

Four list endpoints, all filters for the fifth.

curl https://prep-api.experthire.cloud/v1/question-bank/companies \
  -H "Authorization: Bearer $EH_SECRET_KEY"

Still a placeholder: $EH_SECRET_KEY. Add it under Your values above.

{
  "object": "list",
  "data": [
    {
      "id": "c31b90ab-a0fc-40d5-b2c0-cee99f465b84",
      "name": "Accenture",
      "slug": "accenture",
      "question_count": 92
    }
  ],
  "has_more": false,
  "total_count": 61
}

categories and topics return plain strings rather than objects, since there is nothing else to say about them:

curl https://prep-api.experthire.cloud/v1/question-bank/categories \
  -H "Authorization: Bearer $EH_SECRET_KEY"

Still a placeholder: $EH_SECRET_KEY. Add it under Your values above.

{
  "object": "list",
  "data": [
    "Aptitude", "Arts/Humanities", "Civil", "Electrical/EEE",
    "Finance & Commerce", "HR/Behavioral", "Management (MBA)",
    "Mechanical", "Software/Coding"
  ],
  "total_count": 9
}

A category is the stream. A topic is the tag on an individual question (Array, Dynamic Programming, Accounting). There are far more topics than categories, and a question carries several.

Searching

curl -G https://prep-api.experthire.cloud/v1/question-bank/questions \
  -H "Authorization: Bearer $EH_SECRET_KEY" \
  --data-urlencode "company=accenture" \
  --data-urlencode "difficulty=medium" \
  --data-urlencode "sort=frequency" \
  --data-urlencode "limit=20"

Still a placeholder: $EH_SECRET_KEY. Add it under Your values above.

ParameterValues
companyCompany slug, from the companies list
categoryExact category string
topicA single topic tag
difficultyeasy, medium, hard
time_bucket30d, 90d, 180d, all (default)
searchSubstring of the title
sortfrequency (default), difficulty, acceptance

time_bucket only means something alongside company: it selects how recently that company was seen asking the question. frequency sorts by the same signal.

Each row carries company_name and company_slug for the company that asks it most in the selected window, so a list is renderable without a second call.

Fetching one

curl https://prep-api.experthire.cloud/v1/question-bank/questions/$QUESTION_ID \
  -H "Authorization: Bearer $EH_SECRET_KEY"

Still a placeholder: $QUESTION_ID, $EH_SECRET_KEY. Add them under Your values above.

The detail response is the question without the company columns, since a question can belong to several.

Paging

Follow next_cursor while has_more is true, the same as everywhere else.

This cursor is offset-backed, unlike the one on interviews. Questions are ordered by frequency and acceptance, which are not unique and shift when the bank refreshes, so a page taken during a refresh can repeat or miss a row. It does not matter for browsing. If you are exporting the bank, pin sort and accept that a refresh mid-export means rerunning it.

Access

Gated on the question_bank module. If it is off you get 403 with code module_not_enabled, and GET /v1/usage reports it false. Nothing here touches credits in either environment, and sandbox returns the same bank as live.