recruiter.createProjectJob
Requires the Recruiter add-on. Calls return
TIER_NOT_ACTIVE(403) when the seat does not have this add-on active.
Create a job-posting DRAFT attached to an EXISTING project — project_name is not accepted (the project comes from the path).
Signature
createProjectJob(projectId: string, body: RecruiterCreateProjectJobBody): Promise<RecruiterCreateProjectJobResult>Example
import { Curviate } from "@curviate/sdk";
const curviate = new Curviate({
apiKey: "cvt_live_…",
baseUrl: "https://api.curviate.com",
});
const result = await curviate.account("acc_YOUR_ACCOUNT_ID").recruiter.createProjectJob("proj_YOUR_PROJECT_ID", { job_title: { id: "…", name: "…" }, company: { id: "…" }, workplace_type: "ON_SITE", location: "…", employment_status: "FULL_TIME", seniority_level: "INTERNSHIP", description: "…", industry: [], job_function: [], apply_method: { method: "linkedin", notification_email: "…" } });
console.log(`CreateProjectJob: ${result.job_id}`);Parameters
| Name | Type | Required | Description |
|---|---|---|---|
projectId | string | Yes | Path parameter. |
job_title | object | Yes | The resolved job-title parameter id + its display name. |
company | object | Yes | Target company: a resolved company id, or a free-text name. |
workplace_type | string | Yes | Body parameter. |
location | string | Yes | A resolved LOCATION parameter id. |
employment_status | string | Yes | Body parameter. |
seniority_level | string | Yes | Body parameter. |
description | string | Yes | Content — minimum 200 characters, forwarded verbatim, never persisted. |
industry | array | Yes | 1–3 resolved industry parameter ids. |
job_function | array | Yes | 1–3 resolved job-function parameter ids. |
apply_method | object | Yes | How candidates apply: {method:'linkedin', notification_email, resume_required?} or {method:'external', website_url}. |
skills | array | No | Up to 10 resolved skill parameter ids. |
include_poster_info | boolean | No | Whether to show the posting recruiter's info. Defaults to true. |
tracking_pixel_url | string | No | Body parameter. |
company_job_id | string | No | Your own external job-requisition id, for reference. |
screening_questions | array | No | Body parameter. |
salary | object | No | Body parameter. |
additional_compensation | object | No | Body parameter. |
rejection_settings | object | No | Body parameter. |
Returns
Resolves to RecruiterCreateProjectJobResult. Top-level fields: object, job_id, project_id.
Error codes
UNAUTHORIZEDINVALID_REQUESTRATE_LIMIT_ACCOUNTRATE_LIMIT_TENANTPLATFORM_RATE_LIMITPLATFORM_ERRORACCOUNT_RESTRICTEDLINKEDIN_AUTH_FAILEDLINKEDIN_FEATURE_NOT_SUBSCRIBEDRESOURCE_NOT_FOUNDTIER_NOT_ACTIVE
All error codes link to Error codes reference.
Notes
Note: The
account_idis injected automatically by the account-scoped accessor. Call ascurviate.account("acc_YOUR_ACCOUNT_ID").recruiter.createProjectJob(...).