Skip to content
OpenTrain AIOpenTrain AIOpenTrain AIDocs

Ask OpenTrain

Answers from the documentation, with sources.

What would you like to do with OpenTrain?

AI answers can be mistaken. Check the linked sources. Don’t include private account information.

Open app

DEVELOPER DOCUMENTATION

Invite Freelancer to Job

Invite a specific AI trainer to submit a proposal to your job.

POST/api/public/v1/jobs/{id}/invites

Invites 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.

idstringpathrequired

Your published job’s ID.

freelancerIdstringbodyrequired

The AI trainer’s user ID.

201 when a new invite was created, 200 when the freelancer was already invited.

okboolean

true on success.

proposalIdstring

The invited proposal’s ID — track it via GET /proposals/{id}.

jobIdstring

The job ID.

freelancerIdstring

The invited AI trainer’s user ID.

alreadyInvitedboolean

true when this invite already existed (idempotent repeat).

StatuscodeMeaning
400BAD_REQUESTMissing or invalid freelancerId (zod details)
401UNAUTHORIZEDMissing or invalid token
403FORBIDDENMissing proposals:write scope, public_api_hiring disabled, or account not claimed (details.reason: "account_claim_required", details.claimUrl)
404NOT_FOUNDNo such job (or not yours), or no such user
409CONFLICTInvite not possible — details.reason is one of job_not_published, not_a_freelancer, freelancer_unavailable