/v1/projectsCreate a project
project:createCreate 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
namestringThe project name. At least one of `name` or `description` is required.
min 1 chars, max 80 charsdescriptionstringThe 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 charscompanyIdstringThe client company this role hires for. Omit when hiring for your own account.
max 16 charsattachmentIdsarray of stringPreviously uploaded context attachments to fold into the brief.
max 20 items
Responses
201The created projectprojectobject requiredidstring requiredThe project id.
namestring requiredThe project name, usually the role being hired for.
statusstring requiredWhere the project stands.
companyRefProjectCompanyRef requiredThe company this role hires for. Null only on projects created before companies existed.
subjectTypestring requiredWhat kind of company record this points at: a client company on this account, or the account’s own profile.
subjectIdstring requiredThe id of that record.
companyNamestring | null requiredThat company’s display name, resolved for you. Null only when no printable name is on file.
createdBystring | null requiredThe member or key that created the project. Null when unknown.
createdAtstring requiredWhen the project was created, as an ISO 8601 instant.
updatedAtstring requiredWhen it last changed, as an ISO 8601 instant.
candidateListIdstring | null requiredThe shortlist holding this project’s candidates. Every project gets one at creation.
managedAgentsarray of ProjectManagedAgent requiredVamo-managed agents working this project. Empty on an ordinary project; a project can have any number.
idstring requiredThe managed agent id.
namestring requiredThe agent’s name.
statusstring requiredWhere the agent stands on this project.
statsobject requiredCandidate, sequence and outreach counters for this project.
candidatesinteger requiredHow many candidates are on this project.
sequencesinteger requiredHow many outreach sequences are running for it.
contactedinteger requiredDistinct 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.
replyRatenumber | null requiredReplies as a fraction of people contacted, 0 to 1. Null when nobody has been contacted yet, which is different from a rate of zero.
candidateListIdstring requiredThe shortlist minted to hold this project’s candidates.
contextProjectContext requiredThe compiled brief and first-round search. Null when no description was supplied, since there was nothing to compile.
markdownstring requiredThe role brief as markdown, assembled from what you supplied at creation.
understandingLinestring requiredA one-line readback of how the role was understood, for a human to check before spending credits.
savedSearchIdstring requiredThe saved search minted for this project’s first round. Execute it to get candidates.
searchConfiganyThe compiled search config behind that saved search, as a `SearchConfig`. Read it to see which levers were inferred from the brief.
400Neither name nor description, or too many attachmentscodestring requiredStable 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_errormessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at the credit top-up).
kindstring requiredWhat 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_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.
401No or invalid credentialcodestring requiredStable 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_errormessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at the credit top-up).
kindstring requiredWhat 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_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.
403Missing project:createcodestring requiredStable 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_errormessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at the credit top-up).
kindstring requiredWhat 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_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.
404One or more attachments are unknown or foreigncodestring requiredStable 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_errormessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at the credit top-up).
kindstring requiredWhat 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_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.
409Duplicate project name or an attachment already claimedcodestring requiredStable 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_errormessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at the credit top-up).
kindstring requiredWhat 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_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.