1. Guides
CVViZ API Documentation
  • Start here
    • Quickstart
    • Authentication & permissions
  • Guides
    • API concepts
    • Create a job
    • Find candidates and download resumes
    • Pagination & filtering
    • Rate limits & usage
    • Errors & troubleshooting
    • Safe retries & idempotency
  • Jobs
    • Create a job
      POST
    • List jobs
      GET
    • Get a job
      GET
    • Update a job
      PATCH
    • List candidates for a job
      GET
    • List job benchmark resumes
      GET
    • List candidate job offers
      GET
    • Update a candidate application stage
      PATCH
    • Update job status
      PATCH
  • Candidates
    • List candidates
      GET
    • Get a candidate
      GET
    • Update a candidate
      PATCH
    • List applications for a candidate
      GET
    • List candidate events
      GET
    • List candidate documents
      GET
    • Download a candidate resume
      GET
  • Tasks
    • List tasks
    • Create a task
    • Update a task
    • Update task completion
  • Notes & tags
    • List job notes
    • Add a job note
    • List tags for a job
    • Add tags to a job
    • List tags for a candidate
    • Add tags to a candidate
    • List candidate notes
    • Add a candidate note
    • List candidate tags
  • Screening & interviews
    • List job pre-screening questions
    • List candidate screening answers
    • List candidate interview feedback
  • Organization & lookup data
    • List candidate stages for a job
    • Get job creation options
    • List industries
    • List job functions
    • List employer types
    • List client companies
    • List account users
    • List departments
    • List hiring managers
    • List candidate grades
  1. Guides

Create a job

Create a job through your account's standard CVViZ workflow.
Active is not automatically published. Both publication channels default to off on creation. You can explicitly request career-page or eligible free-job-board publication for an active, approved job.

Before you begin#

TaskPermission
Read lookup dataorganization.read
Create a jobjobs.write
Change an existing job's lifecycle statusjobs.status.write
Read the job backjobs.read

1. Look up valid values#

Value you needEndpoint
Job types, education levels, salary intervals, lifecycle statesGET /job-options
IndustryGET /industries
Job function for an industryGET /job-functions?industry_id=12
Employer type for an industryGET /employer-types?industry_id=12
Client company (required for staffing accounts)GET /customers
Optional department and hiring managerGET /departments, GET /hiring-managers
Replace example IDs with your lookup results. Employer types are classifications,
not client companies. Lookups are paginated where documented.

2. Create a job#

Grant jobs.write to your credential. For supporting lookups, also grant
organization.read. There is no separate jobs.create permission.
Complete job requests require the fields shown below. Replace the sample
classification IDs with values from your lookups; staffing accounts must also
include a valid customerId from /customers. Job code is generated when
omitted. The description needs at least 100 words, and full location is required
even for remote jobs. skills means Required; optionalSkills means Good to have.
Creation returns 201 with the job ID and the result of the account workflow:
When job approval is disabled, the job is active with status: 5.
When job approval is enabled, the job is pending approval with status: 3,
and approvalStatus: 0.
Retry with the same idempotency key and body to retrieve the original result
without creating another job.
Use /job-options, /industries, /job-functions?industry_id=…,
/employer-types?industry_id=…, /customers, /departments, /hiring-managers
and /users for valid values and account-owned IDs. All collection endpoints
default to 10 items. Qualifications and locations are text fields; experience
is in years, and salary intervals are H, D, W, M, or Y.
New jobs use the account's default workflow and are not published to the career
page or job boards. When approval is enabled, complete the normal approval flow
in CVViZ. Use PATCH /jobs/{jobId}/status with jobs.status.write only for a
later lifecycle change. Activating a job enforces the active-job limit and
revalidates its required details.
If active-job capacity is unavailable for an account that creates jobs directly
as active, the API returns 409 and creates no job. Pending-approval jobs do not
consume an active-job slot until activation.

Choose publication channels#

Use these optional boolean fields on POST /jobs or PATCH /jobs/{jobId}:
FieldCreation when omittedUpdate when omitted
publishToCareerPageOffExisting career-page setting is preserved
publishToFreeJobBoardsOffFree-job-board publication is turned off
To create and publish in one request, add the desired flags to the normal
creation body. This succeeds only when the account workflow creates an active,
approved job. If approval is required, the API returns 409; create the job
without publication, complete approval, then update publication afterward.
Alternatively, update publication after the job is active and approved:
{
  "publishToCareerPage": true,
  "publishToFreeJobBoards": true
}
Send this body to PATCH /jobs/{jobId} with jobs.write and a new
Idempotency-Key. Enabling either channel on an inactive or unapproved job returns
409; publication never bypasses approval or active-job capacity checks.
Include publishToFreeJobBoards: true on each job update that should keep free
distribution enabled.
Omitting it, even when only changing a title, disables that
channel. Explicit false disables the corresponding channel. Status-only requests
to /jobs/{jobId}/status do not change publication settings.
CVViZ manages eligible free boards without exposing individual board selections.
Existing account, integration, moderation and provider requirements still apply;
some channels also need career-page publication enabled. No paid advertising is
purchased. Provider listing and removal can be delayed and are not guaranteed.
Publication changes and the job mutation share the same transaction and replay
receipt; reuse a key only with the same request.

Read job status and approval#

GET /jobs/{jobId} and job lists include status, statusLabel,
approvalStatus and approvalStatusLabel. These are separate states:
approval 0 means pending, 1 approved and -1 rejected; unavailable values
are returned as null / Unknown. Lifecycle status 5 is labelled
In Progress and means active, not publicly advertised.
GET /job-options returns initialStatus: "account_workflow" and a statuses
list with code, label, and canSet. canSet describes status-endpoint
support, not whether approval or capacity permits a particular transition.
Supported status updates remain 1, 2, 4, and 5; 2 means New and 4
means Rejected, not Closed and On Hold. Setting a lifecycle code does not
approve or reject an approval request.
Previous
API concepts
Next
Find candidates and download resumes
Built with