DEVELOPER DOCUMENTATION
Start Proposal Conversation
Open (or reuse) the pre-hire direct-message thread with a candidate. Employer-first; idempotent.
/api/public/v1/proposals/{proposalId}/conversationOpens the pre-hire direct-message thread for one of your proposals so you can talk to the candidate before hiring. Idempotent: if the thread already exists, you get the same conversationId back with created: false. Once you have the ID, send with POST /messages and read with GET /messages.
Proposal conversations are employer-first: only the job owner can open the thread, and the candidate cannot reply until the employer has sent the first message. This endpoint never creates any other kind of conversation — job threads come from hiring.
Requirements: messages:write scope + the public_api_messaging_writes feature + a claimed account (unclaimed accounts get 403 with details.reason: "account_claim_required" and a claimUrl). The proposal must be on a job you own.
Request
Section titled “Request”proposalIdstringpathrequiredThe proposal whose thread to open.
No body.
Response
Section titled “Response”okbooleantrue on success.
conversationIdstringThe conversation to use with the messages endpoints.
proposalIdstringThe proposal ID.
jobIdstringThe job the proposal belongs to.
createdbooleantrue when a new thread was created, false when an existing one was returned.
Errors
Section titled “Errors”| Status | code | Meaning |
|---|---|---|
400 | BAD_REQUEST | Missing proposalId |
401 | UNAUTHORIZED | Missing or invalid token |
403 | FORBIDDEN | Missing messages:write scope, feature disabled, account not claimed (details.reason: "account_claim_required", details.claimUrl), the proposal is on another account’s job, or you are the candidate (details.reason: "employer_first_message_required" — only the employer opens the thread) |
404 | NOT_FOUND | No such proposal |
409 | CONFLICT | Proposal is not ready for messaging — details.reason: "proposal_not_ready_for_messaging" (e.g. missing invited user or linked job) |