Job Posting API
Submit job postings and retrieve plans programmatically via the Board API or the TypeScript SDK.
A
JJob posting endpoints are part of the Board API (/v1/boards/:identifier/job-postings/*) and require no authentication. The :identifier is your board slug, board ID (boards_…), or a publishable key (pk_…).
List plans
GET /v1/boards/:identifier/job-postings/plans— list the board's public job-posting plans
The response is a paginated list of JobPostingPlan objects. Pass ?purpose=job_posting (default) or ?purpose=talent_access to filter by plan type. Use the plan id as selectedPlan when submitting a job.
Submit a job posting
POST /v1/boards/:identifier/job-postings— submit a job through the board's public funnel
The server selects the billing flow based on the employer's entitlements and the chosen plan: free, bundle credit, subscription credit, Stripe Checkout, or invoice. The response is a status-discriminated job_posting_result object — branch on .status:
published— job is livepending_approval— job is queued for moderationcheckout— redirect the employer to.checkoutUrlto complete paymentinvoice_sent— an invoice has been emailed; no redirect needed
Use the TypeScript SDK
Import createBoardClient from @cavuno/board:
1234567891011121314import { createBoardClient } from '@cavuno/board';const board = createBoardClient({ baseUrl: 'https://api.cavuno.com', board: 'pk_a8f3…' });const { data: plans } = await board.jobPosting.plans();const selectedPlan = plans[0].id;const result = await board.jobPosting.create({submission: { selectedPlan, title: 'Senior Engineer', companyName: 'Acme' },});if (result.status === 'checkout') {window.location.href = result.checkoutUrl;}
The client exposes plans and create on board.jobPosting. A rejected submission throws a BoardApiError.