Wizehire Scout Service API

Backend service for the Wizehire Scout Chrome extension — the AI recruiting assistant. Five operations over HTTP Bearer auth: a streaming (Server-Sent Events) agent chat endpoint that runs a LangGraph-backed recruiting agent with human-in-the-loop resume support, top-candidate retrieval by fit score for a job, single-application detail lookup, and interview scheduling proxied through to the Wizehire ATS. Published as OpenAPI 3.1.0 at the service host root.

Operations 5

GET /healthz Healthz #
POST /v1/agent/chat Agent Chat #
GET /v1/candidates/top/{job_key} Get Top Applies #
GET /v1/candidates/{apply_id} Get Apply Details #
POST /v1/interviews/schedule Schedule Interview #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/wizehire-scout-service-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

wizehire-scout-service-openapi.yml Raw ↑
# Harvested verbatim from https://scout.wizehire.com/openapi.json on 2026-09-04 (HTTP 200, application/json).
# Original bytes preserved at openapi/_original/wizehire-scout-service-openapi.json.
# Two additions by API Evangelist, both captured in overlays/wizehire-scout-service-overlay.yaml:
#   servers[] (the spec ships none; the URL is the host it was served from) and tags[] descriptions.
openapi: 3.1.0
info:
  title: Scout Service
  description: Backend service for the Scout Chrome Extension — AI-powered recruiting assistant
  version: 0.1.0
servers:
- url: https://scout.wizehire.com
  description: Scout Service production host (the host this specification was fetched from)
tags:
- name: health
  description: Service health probe
- name: agent
  description: Scout AI recruiting agent conversation
- name: candidates
  description: Candidate / application retrieval
- name: interviews
  description: Interview scheduling (proxied to the Wizehire ATS)
paths:
  /healthz:
    get:
      tags:
      - health
      summary: Healthz
      operationId: healthz
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HealthResponse'
  /v1/agent/chat:
    post:
      tags:
      - agent
      summary: Agent Chat
      description: 'Send a message to the Scout AI agent and receive a streaming response.


        Returns Server-Sent Events (SSE) with the agent''s response, including

        text deltas and tool use notifications.'
      operationId: agentChat
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AgentChatRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - HTTPBearer: []
  /v1/candidates/top/{job_key}:
    get:
      tags:
      - candidates
      summary: Get Top Applies
      description: Get the top candidates by fit score for a job.
      operationId: get_top_applies_v1_candidates_top__job_key__get
      security:
      - HTTPBearer: []
      parameters:
      - name: job_key
        in: path
        required: true
        schema:
          type: string
          title: Job Key
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/candidates/{apply_id}:
    get:
      tags:
      - candidates
      summary: Get Apply Details
      description: Get applied details for a candidate by apply ID.
      operationId: get_apply_details_v1_candidates__apply_id__get
      security:
      - HTTPBearer: []
      parameters:
      - name: apply_id
        in: path
        required: true
        schema:
          type: integer
          title: Apply Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /v1/interviews/schedule:
    post:
      tags:
      - interviews
      summary: Schedule Interview
      description: 'Schedule an interview on behalf of the authenticated user.


        Proxies the request to ATS, positioning Scout Service as the

        intermediary for interview scheduling.'
      operationId: schedule_interview_v1_interviews_schedule_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ScheduleInterviewRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
      - HTTPBearer: []
components:
  schemas:
    AgentChatRequest:
      properties:
        message:
          anyOf:
          - type: string
          - type: 'null'
          title: Message
          description: The user's natural language message. Optional only when `resume` is set — resumed turns pick
            up from checkpointer state and have no new user input.
        session_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Session Id
          description: Stable ID grouping all messages in one chat thread. The extension mints a UUID per new chat
            and rotates it on reset so multi-turn conversations land together in Langfuse's Sessions view. Also
            doubles as the LangGraph thread_id so paused turns can resume.
        context:
          anyOf:
          - $ref: '#/components/schemas/AgentContext'
          - type: 'null'
          description: Page context from the Chrome extension
        conversation_history:
          anyOf:
          - items:
              $ref: '#/components/schemas/HistoryMessage'
            type: array
          - type: 'null'
          title: Conversation History
          description: Previous messages for multi-turn conversations
        resume:
          anyOf:
          - $ref: '#/components/schemas/ResumePayload'
          - type: 'null'
          description: Set to resume a turn that was paused for human review. Requires the same `session_id` as
            the paused turn so the checkpointer can look up its state.
      type: object
      title: AgentChatRequest
    AgentContext:
      properties:
        job_key:
          anyOf:
          - type: string
          - type: 'null'
          title: Job Key
        apply_id:
          anyOf:
          - type: integer
          - type: 'null'
          title: Apply Id
        page:
          anyOf:
          - type: string
          - type: 'null'
          title: Page
        candidate_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Candidate Name
        job_title:
          anyOf:
          - type: string
          - type: 'null'
          title: Job Title
        registry_set:
          anyOf:
          - type: string
          - type: 'null'
          title: Registry Set
        user_id:
          anyOf:
          - type: integer
          - type: 'null'
          title: User Id
        quick_replies:
          anyOf:
          - items:
              $ref: '#/components/schemas/QuickReply'
            type: array
          - type: 'null'
          title: Quick Replies
      type: object
      title: AgentContext
      description: Optional context from the Chrome extension about the current page.
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    HealthResponse:
      properties:
        status:
          type: string
          title: Status
          default: ok
        environment:
          type: string
          title: Environment
      type: object
      required:
      - environment
      title: HealthResponse
    HistoryMessage:
      properties:
        role:
          type: string
          enum:
          - user
          - assistant
          - tool
          title: Role
        content:
          anyOf:
          - type: string
          - type: 'null'
          title: Content
        tool_calls:
          anyOf:
          - items:
              $ref: '#/components/schemas/HistoryToolCall'
            type: array
          - type: 'null'
          title: Tool Calls
        tool_call_id:
          anyOf:
          - type: string
          - type: 'null'
          title: Tool Call Id
      type: object
      required:
      - role
      title: HistoryMessage
      description: 'A single prior-turn message the client sends back on each request.


        Carries enough to rehydrate the LangChain message list the agent expects:

        - `role="user"` → HumanMessage

        - `role="assistant"` with `content` only → AIMessage (text reply)

        - `role="assistant"` with `tool_calls` → AIMessage recording a tool invocation

        - `role="tool"` with `tool_call_id` → ToolMessage (tool''s response)


        The old `{role, content}` shape still validates — new fields are optional.'
    HistoryToolCall:
      properties:
        id:
          type: string
          title: Id
        name:
          type: string
          title: Name
        args:
          additionalProperties: true
          type: object
          title: Args
      type: object
      required:
      - id
      - name
      title: HistoryToolCall
      description: A tool invocation recorded in the conversation history.
    InterviewType:
      type: string
      enum:
      - phone
      - video
      - in_person
      title: InterviewType
    QuickReply:
      properties:
        label:
          type: string
          title: Label
        value:
          type: string
          title: Value
      type: object
      required:
      - label
      - value
      title: QuickReply
      description: A quick reply option with a display label and a value sent as the message.
    ResumePayload:
      properties:
        value:
          additionalProperties: true
          type: object
          title: Value
          description: Opaque resume payload forwarded to the LangGraph node.
      type: object
      title: ResumePayload
      description: 'Client-side approval to resume a paused agent turn.


        v1 contract: any resume means "approved, continue." `value` is reserved

        for future decision shapes (e.g. operator overrides, modified args) and

        is passed verbatim into LangGraph''s `Command(resume=...)`.'
    ScheduleInterviewRequest:
      properties:
        apply_id:
          type: integer
          title: Apply Id
        interview_type:
          $ref: '#/components/schemas/InterviewType'
      type: object
      required:
      - apply_id
      - interview_type
      title: ScheduleInterviewRequest
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer