KlockworkKlockworkAPI
Agency

Talents

Agency talent roster request and response fields.

Base URL https://api.klockwork.org. Send X-Klockwork-Key or Authorization: Bearer kw_…. An agency key acts as the agency that created it. JSON bodies use these fields. A missing required field returns 400 with { "error": "Validation failed", "details": {} }.

List talents

GET /api/public/agency/talents

Query:

FieldTypeRequired
status"active" or "archived" or "pending" or "all"no

Response 200: { talents: Talent[] }

FieldTypeRequired
idstring (uuid)yes
clerkOrgIdstring, min 1yes
displayNamestring, min 1yes
contactNamestring, min 1yes
contactEmailstring (email)yes
hourlyRatenumber, min 0yes
currencystring, min 1, max 8yes
hoursPerDaynumberyes
shiftStartstringyes
shiftEndstringyes
timezonestring, min 1yes
status"active" or "archived" or "pending"yes
unpaidBreakHoursnumber, min 0 or nullyes
payoutHintsstring or nullyes
paymentTermsOverridestring or nullyes
internalNotesstring or nullyes
colorTagstring or nullyes
clerkUserIdstring or nullyes
clerkInvitationIdstring or nullyes
createdAtstringyes
updatedAtstringyes

Create a talent

POST /api/public/agency/talents

A new roster row returns 201. An email that is already on the roster returns 200 and re-sends the invite. If the invite itself fails, the same body includes warning instead of invitationSent. status on create must be omitted or pending. A duplicate email race returns 400 { "error": "A talent with this email is already on the roster" }.

Request body:

FieldTypeRequired
displayNamestring, min 1yes
contactNamestring, min 1yes
contactEmailstring (email)yes
hourlyRatenumber, min 0yes
currencystring, min 1, max 8yes
hoursPerDaynumberyes
shiftStartstringyes
shiftEndstringyes
timezonestring, min 1yes
status"active" or "archived" or "pending"no
unpaidBreakHoursnumber, min 0 or nullno
payoutHintsstring or nullno
paymentTermsOverridestring or nullno
internalNotesstring or nullno
colorTagstring or nullno

Response 201: { talent, invitationSent, linkedImmediately }

FieldTypeRequired
idstring (uuid)yes
clerkOrgIdstring, min 1yes
displayNamestring, min 1yes
contactNamestring, min 1yes
contactEmailstring (email)yes
hourlyRatenumber, min 0yes
currencystring, min 1, max 8yes
hoursPerDaynumberyes
shiftStartstringyes
shiftEndstringyes
timezonestring, min 1yes
status"active" or "archived" or "pending"yes
unpaidBreakHoursnumber, min 0 or nullyes
payoutHintsstring or nullyes
paymentTermsOverridestring or nullyes
internalNotesstring or nullyes
colorTagstring or nullyes
clerkUserIdstring or nullyes
clerkInvitationIdstring or nullyes
createdAtstringyes
updatedAtstringyes

Get a talent

GET /api/public/agency/talents/{id}

Response 200: { talent: Talent }

FieldTypeRequired
idstring (uuid)yes
clerkOrgIdstring, min 1yes
displayNamestring, min 1yes
contactNamestring, min 1yes
contactEmailstring (email)yes
hourlyRatenumber, min 0yes
currencystring, min 1, max 8yes
hoursPerDaynumberyes
shiftStartstringyes
shiftEndstringyes
timezonestring, min 1yes
status"active" or "archived" or "pending"yes
unpaidBreakHoursnumber, min 0 or nullyes
payoutHintsstring or nullyes
paymentTermsOverridestring or nullyes
internalNotesstring or nullyes
colorTagstring or nullyes
clerkUserIdstring or nullyes
clerkInvitationIdstring or nullyes
createdAtstringyes
updatedAtstringyes

Update a talent

PATCH /api/public/agency/talents/{id}

Every field is optional.

Request body:

FieldTypeRequired
displayNamestring, min 1no
contactNamestring, min 1no
contactEmailstring (email)no
hourlyRatenumber, min 0no
currencystring, min 1, max 8no
hoursPerDaynumberno
shiftStartstringno
shiftEndstringno
timezonestring, min 1no
status"active" or "archived" or "pending"no
unpaidBreakHoursnumber, min 0 or nullno
payoutHintsstring or nullno
paymentTermsOverridestring or nullno
internalNotesstring or nullno
colorTagstring or nullno

Response 200: { talent: Talent }

FieldTypeRequired
idstring (uuid)yes
clerkOrgIdstring, min 1yes
displayNamestring, min 1yes
contactNamestring, min 1yes
contactEmailstring (email)yes
hourlyRatenumber, min 0yes
currencystring, min 1, max 8yes
hoursPerDaynumberyes
shiftStartstringyes
shiftEndstringyes
timezonestring, min 1yes
status"active" or "archived" or "pending"yes
unpaidBreakHoursnumber, min 0 or nullyes
payoutHintsstring or nullyes
paymentTermsOverridestring or nullyes
internalNotesstring or nullyes
colorTagstring or nullyes
clerkUserIdstring or nullyes
clerkInvitationIdstring or nullyes
createdAtstringyes
updatedAtstringyes

Delete a talent

DELETE /api/public/agency/talents/{id}

Response 200: { ok: true }

Invite a talent

POST /api/public/agency/talents/{id}/invite

No request body.

Response 200: { talent, invitationSent, linkedImmediately }

FieldTypeRequired
idstring (uuid)yes
clerkOrgIdstring, min 1yes
displayNamestring, min 1yes
contactNamestring, min 1yes
contactEmailstring (email)yes
hourlyRatenumber, min 0yes
currencystring, min 1, max 8yes
hoursPerDaynumberyes
shiftStartstringyes
shiftEndstringyes
timezonestring, min 1yes
status"active" or "archived" or "pending"yes
unpaidBreakHoursnumber, min 0 or nullyes
payoutHintsstring or nullyes
paymentTermsOverridestring or nullyes
internalNotesstring or nullyes
colorTagstring or nullyes
clerkUserIdstring or nullyes
clerkInvitationIdstring or nullyes
createdAtstringyes
updatedAtstringyes

On this page