Headless Board API
Public Board API endpoints and the @cavuno/board SDK for building a custom job-posting flow on a headless board.
A
JThe Board API endpoints under /v1/boards/:identifier/ require no authentication and are designed for headless boards that implement their own posting UI. The :identifier is your board slug.
List job-posting plans
1GET /v1/boards/:identifier/job-postings/plans
Returns the board's available plans. Pass the chosen plan's id as selectedPlan when submitting a job.
Submit a job posting
1POST /v1/boards/:identifier/job-postings
Creates the job and returns a status-discriminated result. Branch on .status: checkout (redirect to .checkoutUrl), published, pending_approval, or invoice_sent.
Check billing status
1POST /v1/boards/:identifier/job-postings/check-billing
Body: { email }. Returns { hasActiveBilling } — whether this email already has billing credit on the board.
Send a billing-verification token
1POST /v1/boards/:identifier/job-postings/send-verification
Body: { email }. Sends a verification token to the address. Pass the token to the billing-options endpoint.
Get billing options
1POST /v1/boards/:identifier/job-postings/billing-options
Body: { verificationToken }. Returns the credit options for the verified email. Use one option as selectedBilling in the job submission.
Check subscription entitlements
1POST /v1/boards/:identifier/job-postings/subscription-entitlements
Body: { email, planId }. Returns the featured slots and active entitlements the email's subscription grants for the given plan.
Use the @cavuno/board SDK
Install @cavuno/board and call the board.jobPosting namespace:
12345678import { createBoardClient } from '@cavuno/board';const board = createBoardClient({ identifier: 'my-board' });const { hasActiveBilling } = await board.jobPosting.checkBilling({ email });await board.jobPosting.sendBillingVerification({ email });const options = await board.jobPosting.getBillingOptions({ verificationToken });const entitlements = await board.jobPosting.checkSubscriptionEntitlements({ email, planId });
The namespace also exposes plans() and create(input) for the full posting flow. See the API reference for request and response schemas.