API reference navigation
POST /v1/searches/plan

Plan a search from natural language

Access
Authenticated
search:read
Cost
Free
Rate limit
30 / minute per account
Quota
None

Turn a plain-language hiring ask into a query plan: the lanes to run, the filters to apply, and how to fuse them. Planning is free and the plan is yours to edit. Send it back to POST /v1/searches/run to execute it, or change a filter first. The plan is honest about its own limits: warnings name the coverage gaps it depends on (a LinkedIn lane only sees the LinkedIn-linked subset, a country filter only sees profiles whose location resolved), the preferences that ended up ranked rather than filtered, and anything you asked for that this corpus cannot answer. Identical queries are served from a cache for seven days. A request that cannot be grounded in the corpus at all answers 422 rather than inventing a plan.

Request body PlanSearchRequest

  • query string required

    What you are looking for, in plain language. Describe the work you want evidence of, not a boolean query.

    max 2000 chars

Responses

  • 200 The plan, and what it cannot promise
    • plan object required

      The plan to run. Edit it and POST it to /v1/searches/run.

      • intent string required
        max 300 chars
      • lanes array of one of required
        min 1 items, max 4 items
        Option 1
        • kind string required
          users.bm25
        • text string required
          min 1 chars, max 200 chars
        Option 2
        • kind string required
          users.rank
        • attribute string required
          createdAt
        • direction string required
          ascdesc
        Option 3
        • kind string required
          repos.ann
        • text string required
          min 1 chars, max 500 chars
        • repoFilters array of array
          max 6 items
        Option 4
        • kind string required
          repos.bm25
        • text string required
          min 1 chars, max 200 chars
        • repoFilters array of array
          max 6 items
        Option 5
        • kind string required
          linkedin.ann
        • text string required
          min 1 chars, max 500 chars
        • liFilters array of array
          max 6 items
        Option 6
        • kind string required
          users.ann
        • text string required
          min 1 chars, max 500 chars
      • userFilters array of array default: []
        max 8 items
      • post object
        • minDevrankTier string
          EliteRareSolid
      • fuse object default: {"method":"rrf","k":60}
        • method string required
          rrf
        • k integer default: 60
          min 1, max 200
    • warnings array of string required

      What this plan cannot honestly promise: coverage gaps it relies on, preferences that are ranked rather than filtered, and any part of the ask this corpus cannot answer.

      max 100 items
  • 401 No or invalid credential
    • code string required

      Stable machine-readable error code. Branch on this, never on the numeric status.

      bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_error
    • message string required

      Human-readable explanation of the refusal.

    • status integer required

      The HTTP status code, repeated in the body.

    • remedy object

      A self-serve path forward, when one exists (a 402 points at the credit top-up).

      • kind string required

        What kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.

        topupconnect_mailbox
      • url string required

        Where to go to clear the condition: an API path, or a web app page when only a person can.

  • 403 Missing search:read
    • code string required

      Stable machine-readable error code. Branch on this, never on the numeric status.

      bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_error
    • message string required

      Human-readable explanation of the refusal.

    • status integer required

      The HTTP status code, repeated in the body.

    • remedy object

      A self-serve path forward, when one exists (a 402 points at the credit top-up).

      • kind string required

        What kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.

        topupconnect_mailbox
      • url string required

        Where to go to clear the condition: an API path, or a web app page when only a person can.

  • 422 The request could not be turned into a plan (UNPLANNABLE)
    • code string required

      Stable machine-readable error code. Branch on this, never on the numeric status.

      bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_error
    • message string required

      Human-readable explanation of the refusal.

    • status integer required

      The HTTP status code, repeated in the body.

    • remedy object

      A self-serve path forward, when one exists (a 402 points at the credit top-up).

      • kind string required

        What kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.

        topupconnect_mailbox
      • url string required

        Where to go to clear the condition: an API path, or a web app page when only a person can.

  • 502 The planner is unavailable
    • code string required

      Stable machine-readable error code. Branch on this, never on the numeric status.

      bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_error
    • message string required

      Human-readable explanation of the refusal.

    • status integer required

      The HTTP status code, repeated in the body.

    • remedy object

      A self-serve path forward, when one exists (a 402 points at the credit top-up).

      • kind string required

        What kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.

        topupconnect_mailbox
      • url string required

        Where to go to clear the condition: an API path, or a web app page when only a person can.