Skip to main content

Question bank

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

Expert Hire developer workflow for Question bank
Build against the same evidence trail the product uses.

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.