Send a hire offer to a talent profile
POST /marketplace/talent/{sdr_id}/hire
Send a hire offer.
Delegates to HireSdrHandler so the full chain runs intact:
SdrHiring row is created in pending_acceptance state, the contract
is generated + e-signed inside graph8, the client’s T&C acceptance is
stamped in the same transaction, the SDR receives a “you have a new
offer” notification, and the EDA event fires.
409 if the caller already has an active contract with this SDR.
400 if accepted_terms is empty (terms_not_accepted).
Authorizations
Parameters
Path Parameters
Header Parameters
Request Body required
Hire-offer body — mirrors the Phase B HireSdrRequest in
marketplace.interfaces.fastapi.dtos.
Phase B removed hiring_fee_usd and commission_percentage and added
contract_length_months, scope_text and the required
accepted_terms. The contract is generated + e-signed inside graph8,
and the client’s T&C acceptance is captured in the same transaction as the
hiring row — so accepted_terms must be non-empty or the underlying
handler returns terms_not_accepted (400).
object
Required: client’s acceptance of the Marketplace Terms + SDR Participation Agreement. An empty list is rejected with 400 (terms_not_accepted) by the underlying hire handler.
One T&C document the client agreed to when sending the offer.
Mirrors AcceptedTermDTO in marketplace.interfaces.fastapi.dtos:
only document_id is sent; the server resolves the current
version + URL server-side at send time.
object
Marketplace-terms | sdr-participation-agreement
YYYY-MM-DD
Responses
200
Successful Response
object
object
422
Validation Error