DEVELOPER DOCUMENTATION
Invite Freelancer to Job
Invite a specific AI trainer to submit a proposal to your job.
/api/public/v1/jobs/{id}/invitesInvites a specific AI trainer to a published job of yours, creating an invited proposal they can respond to. Find candidates via GET /freelancers/{idOrSlug} or from proposals on other jobs. Idempotent per freelancer: re-inviting returns 200 with alreadyInvited: true instead of creating a duplicate.
Requirements: proposals:write scope + the public_api_hiring feature + a claimed account (unclaimed accounts get 403 with details.reason: "account_claim_required" and a claimUrl). The job must be yours and published.
Request
Section titled “Request”idstringpathrequiredYour published job’s ID.
freelancerIdstringbodyrequiredThe AI trainer’s user ID.
Response
Section titled “Response”201 when a new invite was created, 200 when the freelancer was already invited.
okbooleantrue on success.
proposalIdstringThe invited proposal’s ID — track it via GET /proposals/{id}.
jobIdstringThe job ID.
freelancerIdstringThe invited AI trainer’s user ID.
alreadyInvitedbooleantrue when this invite already existed (idempotent repeat).
Errors
Section titled “Errors”| Status | code | Meaning |
|---|---|---|
400 | BAD_REQUEST | Missing or invalid freelancerId (zod details) |
401 | UNAUTHORIZED | Missing or invalid token |
403 | FORBIDDEN | Missing proposals:write scope, public_api_hiring disabled, or account not claimed (details.reason: "account_claim_required", details.claimUrl) |
404 | NOT_FOUND | No such job (or not yours), or no such user |
409 | CONFLICT | Invite not possible — details.reason is one of job_not_published, not_a_freelancer, freelancer_unavailable |