API reference navigation
POST /v1/projects

Create a project

Access
Authenticated
project:create
Cost
Free
Rate limit
60 / minute per account
Quota
None

Create a project instantly. Auto-creates the project shortlist, claims staged attachments, and (best-effort) writes the role context doc plus a free first-round saved search. Never blocks on extraction.

Request body CreateProjectRequest

  • name string

    The project name. At least one of `name` or `description` is required.

    min 1 chars, max 80 chars
  • description string

    The role description, up to a full job-description paste. When present it is compiled into a brief and a first-round search config, returned on `context`.

    max 50000 chars
  • companyId string

    The client company this role hires for. Omit when hiring for your own account.

    max 16 chars
  • attachmentIds array of string

    Previously uploaded context attachments to fold into the brief.

    max 20 items

Responses

  • 201 The created project
    • project object required
      • id string required

        The project id.

      • name string required

        The project name, usually the role being hired for.

      • status string required

        Where the project stands.

      • companyRef ProjectCompanyRef required

        The company this role hires for. Null only on projects created before companies existed.

        • subjectType string required

          What kind of company record this points at: a client company on this account, or the account’s own profile.

        • subjectId string required

          The id of that record.

      • companyName string | null required

        That company’s display name, resolved for you. Null only when no printable name is on file.

      • createdBy string | null required

        The member or key that created the project. Null when unknown.

      • createdAt string required

        When the project was created, as an ISO 8601 instant.

      • updatedAt string required

        When it last changed, as an ISO 8601 instant.

      • candidateListId string | null required

        The shortlist holding this project’s candidates. Every project gets one at creation.

      • managedAgents array of ProjectManagedAgent required

        Vamo-managed agents working this project. Empty on an ordinary project; a project can have any number.

        • id string required

          The managed agent id.

        • name string required

          The agent’s name.

        • status string required

          Where the agent stands on this project.

      • stats object required

        Candidate, sequence and outreach counters for this project.

        • candidates integer required

          How many candidates are on this project.

        • sequences integer required

          How many outreach sequences are running for it.

        • contacted integer required

          Distinct people who have actually had at least one message sent to them on this project. Not the number of messages, and not the number scheduled.

        • replyRate number | null required

          Replies as a fraction of people contacted, 0 to 1. Null when nobody has been contacted yet, which is different from a rate of zero.

    • candidateListId string required

      The shortlist minted to hold this project’s candidates.

    • context ProjectContext required

      The compiled brief and first-round search. Null when no description was supplied, since there was nothing to compile.

      • markdown string required

        The role brief as markdown, assembled from what you supplied at creation.

      • understandingLine string required

        A one-line readback of how the role was understood, for a human to check before spending credits.

      • savedSearchId string required

        The saved search minted for this project’s first round. Execute it to get candidates.

      • searchConfig any

        The compiled search config behind that saved search, as a `SearchConfig`. Read it to see which levers were inferred from the brief.

  • 400 Neither name nor description, or too many attachments
    • 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.

  • 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 project:create
    • 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.

  • 404 One or more attachments are unknown or foreign
    • 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.

  • 409 Duplicate project name or an attachment already claimed
    • 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.