KlockworkKlockworkAPI
Solo

Solo invoices

Solo invoice request and response fields.

Base URL https://api.klockwork.org. Send the agency key and X-Klockwork-Talent (or talentId). The call acts as that active talent. /api/public/solo/public returns 404.

List invoices

GET /api/public/solo/invoices

Response 200: { invoices: Invoice[] }

FieldTypeRequired
idstring (uuid)yes
clerkUserIdstring, min 1yes
clientIdstring (uuid)yes
invoicePrefixstring, min 1yes
invoiceNumberintegeryes
fromAtstringyes
toAtstringyes
currencystring, min 1, max 8yes
status"draft" or "sent" or "viewed" or "void" or "paid" or "overdue"yes
paymentTermsstring or nullyes
taxMode"none" or "vat_12" or "custom"yes
customTaxLabelstring or nullyes
customTaxRateBpsinteger, min 0 or nullyes
notesstring or nullyes
businessSnapshotobjectyes
payoutSnapshotobjectyes
subtotalCentsinteger, min 0yes
taxCentsinteger, min 0yes
totalCentsinteger, min 0yes
issuedAtstring or nullyes
dueAtstring or nullyes
paidAtstring or nullyes
createdAtstringyes
updatedAtstringyes
lineItemsarray of objectyes

lineItems items:

FieldTypeRequired
idstring (uuid)yes
invoiceIdstring (uuid)yes
sessionIdstring (uuid) or nullyes
descriptionstringyes
quantityHoursnumber, min 0yes
unitRateCentsinteger, min 0yes
amountCentsinteger, min 0yes
sortOrderinteger, min -9007199254740991yes
createdAtstringyes

Create an invoice

POST /api/public/solo/invoices

Request body:

FieldTypeRequired
clientIdstring (uuid)yes
fromstring, min 1yes
tostring, min 1yes
notesstring, max 4000no

Response 201: { invoice: Invoice }

FieldTypeRequired
idstring (uuid)yes
clerkUserIdstring, min 1yes
clientIdstring (uuid)yes
invoicePrefixstring, min 1yes
invoiceNumberintegeryes
fromAtstringyes
toAtstringyes
currencystring, min 1, max 8yes
status"draft" or "sent" or "viewed" or "void" or "paid" or "overdue"yes
paymentTermsstring or nullyes
taxMode"none" or "vat_12" or "custom"yes
customTaxLabelstring or nullyes
customTaxRateBpsinteger, min 0 or nullyes
notesstring or nullyes
businessSnapshotobjectyes
payoutSnapshotobjectyes
subtotalCentsinteger, min 0yes
taxCentsinteger, min 0yes
totalCentsinteger, min 0yes
issuedAtstring or nullyes
dueAtstring or nullyes
paidAtstring or nullyes
createdAtstringyes
updatedAtstringyes
lineItemsarray of objectyes

lineItems items:

FieldTypeRequired
idstring (uuid)yes
invoiceIdstring (uuid)yes
sessionIdstring (uuid) or nullyes
descriptionstringyes
quantityHoursnumber, min 0yes
unitRateCentsinteger, min 0yes
amountCentsinteger, min 0yes
sortOrderinteger, min -9007199254740991yes
createdAtstringyes

Get an invoice

GET /api/public/solo/invoices/{id}

Response 200: { invoice: Invoice }

FieldTypeRequired
idstring (uuid)yes
clerkUserIdstring, min 1yes
clientIdstring (uuid)yes
invoicePrefixstring, min 1yes
invoiceNumberintegeryes
fromAtstringyes
toAtstringyes
currencystring, min 1, max 8yes
status"draft" or "sent" or "viewed" or "void" or "paid" or "overdue"yes
paymentTermsstring or nullyes
taxMode"none" or "vat_12" or "custom"yes
customTaxLabelstring or nullyes
customTaxRateBpsinteger, min 0 or nullyes
notesstring or nullyes
businessSnapshotobjectyes
payoutSnapshotobjectyes
subtotalCentsinteger, min 0yes
taxCentsinteger, min 0yes
totalCentsinteger, min 0yes
issuedAtstring or nullyes
dueAtstring or nullyes
paidAtstring or nullyes
createdAtstringyes
updatedAtstringyes
lineItemsarray of objectyes

lineItems items:

FieldTypeRequired
idstring (uuid)yes
invoiceIdstring (uuid)yes
sessionIdstring (uuid) or nullyes
descriptionstringyes
quantityHoursnumber, min 0yes
unitRateCentsinteger, min 0yes
amountCentsinteger, min 0yes
sortOrderinteger, min -9007199254740991yes
createdAtstringyes

Update an invoice

PATCH /api/public/solo/invoices/{id}

Request body:

FieldTypeRequired
notesstring, max 4000no
dueAtstring or nullno
paymentTermsstring, max 80 or nullno
lineItemDescriptionsarray of objectno
reasonstring, max 1000no
markSentbooleanno

lineItemDescriptions items:

FieldTypeRequired
idstring (uuid)yes
descriptionstring, min 1, max 500yes

Response 200: { invoice: Invoice }

FieldTypeRequired
idstring (uuid)yes
clerkUserIdstring, min 1yes
clientIdstring (uuid)yes
invoicePrefixstring, min 1yes
invoiceNumberintegeryes
fromAtstringyes
toAtstringyes
currencystring, min 1, max 8yes
status"draft" or "sent" or "viewed" or "void" or "paid" or "overdue"yes
paymentTermsstring or nullyes
taxMode"none" or "vat_12" or "custom"yes
customTaxLabelstring or nullyes
customTaxRateBpsinteger, min 0 or nullyes
notesstring or nullyes
businessSnapshotobjectyes
payoutSnapshotobjectyes
subtotalCentsinteger, min 0yes
taxCentsinteger, min 0yes
totalCentsinteger, min 0yes
issuedAtstring or nullyes
dueAtstring or nullyes
paidAtstring or nullyes
createdAtstringyes
updatedAtstringyes
lineItemsarray of objectyes

lineItems items:

FieldTypeRequired
idstring (uuid)yes
invoiceIdstring (uuid)yes
sessionIdstring (uuid) or nullyes
descriptionstringyes
quantityHoursnumber, min 0yes
unitRateCentsinteger, min 0yes
amountCentsinteger, min 0yes
sortOrderinteger, min -9007199254740991yes
createdAtstringyes

Void an invoice

POST /api/public/solo/invoices/{id}/void

The body may be {}.

No request body.

Response 200: { invoice: Invoice }

FieldTypeRequired
idstring (uuid)yes
clerkUserIdstring, min 1yes
clientIdstring (uuid)yes
invoicePrefixstring, min 1yes
invoiceNumberintegeryes
fromAtstringyes
toAtstringyes
currencystring, min 1, max 8yes
status"draft" or "sent" or "viewed" or "void" or "paid" or "overdue"yes
paymentTermsstring or nullyes
taxMode"none" or "vat_12" or "custom"yes
customTaxLabelstring or nullyes
customTaxRateBpsinteger, min 0 or nullyes
notesstring or nullyes
businessSnapshotobjectyes
payoutSnapshotobjectyes
subtotalCentsinteger, min 0yes
taxCentsinteger, min 0yes
totalCentsinteger, min 0yes
issuedAtstring or nullyes
dueAtstring or nullyes
paidAtstring or nullyes
createdAtstringyes
updatedAtstringyes
lineItemsarray of objectyes

lineItems items:

FieldTypeRequired
idstring (uuid)yes
invoiceIdstring (uuid)yes
sessionIdstring (uuid) or nullyes
descriptionstringyes
quantityHoursnumber, min 0yes
unitRateCentsinteger, min 0yes
amountCentsinteger, min 0yes
sortOrderinteger, min -9007199254740991yes
createdAtstringyes

List invoice events

GET /api/public/solo/invoices/{id}/events

Response 200: { events: Event[] }

FieldTypeRequired
idstring (uuid)yes
clerkUserIdstring, min 1yes
invoiceIdstring (uuid)yes
action"created" or "updated" or "voided" or "status_changed"yes
actorLabelstringyes
reasonstring or nullyes
beforeobject or nullyes
afterobject or nullyes
createdAtstringyes

List invoice shares

GET /api/public/solo/invoices/{id}/shares

Response 200: { shares: Share[] }

FieldTypeRequired
idstring (uuid)yes
clerkUserIdstring, min 1yes
invoiceIdstring (uuid)yes
tokenstring, min 1yes
createdAtstringyes
revokedAtstring or nullyes
expiresAtstring or nullyes
status"active" or "revoked" or "expired"yes
viewCountinteger, min 0yes
lastViewedAtstring or nullyes
totalViewDurationMsinteger, min 0yes
viewsarray of objectyes

views items:

FieldTypeRequired
idstring (uuid)yes
shareIdstring (uuid)yes
startedAtstringyes
lastSeenAtstringyes
endedAtstring or nullyes
durationMsinteger, min 0yes
createdAtstringyes

Create an invoice share

POST /api/public/solo/invoices/{id}/shares

The body may be {} when every share field is optional.

Request body:

FieldTypeRequired
expiresInDaysinteger, max 365, default 30no

Response 201: { share: Share }

FieldTypeRequired
idstring (uuid)yes
clerkUserIdstring, min 1yes
invoiceIdstring (uuid)yes
tokenstring, min 1yes
createdAtstringyes
revokedAtstring or nullyes
expiresAtstring or nullyes
status"active" or "revoked" or "expired"yes
viewCountinteger, min 0yes
lastViewedAtstring or nullyes
totalViewDurationMsinteger, min 0yes
viewsarray of objectyes

views items:

FieldTypeRequired
idstring (uuid)yes
shareIdstring (uuid)yes
startedAtstringyes
lastSeenAtstringyes
endedAtstring or nullyes
durationMsinteger, min 0yes
createdAtstringyes

Revoke an invoice share

POST /api/public/solo/invoices/shares/{id}/revoke

No request body.

Response 200: { share: Share }

FieldTypeRequired
idstring (uuid)yes
clerkUserIdstring, min 1yes
invoiceIdstring (uuid)yes
tokenstring, min 1yes
createdAtstringyes
revokedAtstring or nullyes
expiresAtstring or nullyes
status"active" or "revoked" or "expired"yes
viewCountinteger, min 0yes
lastViewedAtstring or nullyes
totalViewDurationMsinteger, min 0yes
viewsarray of objectyes

views items:

FieldTypeRequired
idstring (uuid)yes
shareIdstring (uuid)yes
startedAtstringyes
lastSeenAtstringyes
endedAtstring or nullyes
durationMsinteger, min 0yes
createdAtstringyes

List unbilled time

GET /api/public/solo/invoices/unbilled

Response 200: { summary: Summary }

FieldTypeRequired
clientsarray of objectyes
sessionCountinteger, min 0yes
totalBillableMsnumber, min 0yes
currencystring, min 1, max 8 or nullyes
totalCentsinteger, min 0 or nullyes

clients items:

FieldTypeRequired
clientIdstring (uuid)yes
clientNamestringyes
currencystring, min 1, max 8yes
amountCentsinteger, min 0yes
billableMsnumber, min 0yes
sessionCountinteger, min 0yes

List timesheet shares

GET /api/public/solo/timesheet/shares

Query:

FieldTypeRequired
clientIdstring (uuid)no

Response 200: { shares: Share[] }

FieldTypeRequired
idstring (uuid)yes
clerkUserIdstring, min 1yes
clientIdstring (uuid)yes
fromAtstringyes
toAtstringyes
tokenstring, min 1yes
createdAtstringyes
revokedAtstring or nullyes
expiresAtstring or nullyes
status"active" or "revoked" or "expired"yes
viewCountinteger, min 0yes
lastViewedAtstring or nullyes
totalViewDurationMsinteger, min 0yes
viewsarray of objectyes

views items:

FieldTypeRequired
idstring (uuid)yes
shareIdstring (uuid)yes
startedAtstringyes
lastSeenAtstringyes
endedAtstring or nullyes
durationMsinteger, min 0yes
createdAtstringyes

Create a timesheet share

POST /api/public/solo/timesheet/shares

Request body:

FieldTypeRequired
clientIdstring (uuid)yes
fromstring, min 1yes
tostring, min 1yes
expiresInDaysinteger, max 365, default 30no

Response 201: { share: Share }

FieldTypeRequired
idstring (uuid)yes
clerkUserIdstring, min 1yes
clientIdstring (uuid)yes
fromAtstringyes
toAtstringyes
tokenstring, min 1yes
createdAtstringyes
revokedAtstring or nullyes
expiresAtstring or nullyes
status"active" or "revoked" or "expired"yes
viewCountinteger, min 0yes
lastViewedAtstring or nullyes
totalViewDurationMsinteger, min 0yes
viewsarray of objectyes

views items:

FieldTypeRequired
idstring (uuid)yes
shareIdstring (uuid)yes
startedAtstringyes
lastSeenAtstringyes
endedAtstring or nullyes
durationMsinteger, min 0yes
createdAtstringyes

Revoke a timesheet share

POST /api/public/solo/timesheet/shares/{id}/revoke

No request body.

Response 200: { share: Share }

FieldTypeRequired
idstring (uuid)yes
clerkUserIdstring, min 1yes
clientIdstring (uuid)yes
fromAtstringyes
toAtstringyes
tokenstring, min 1yes
createdAtstringyes
revokedAtstring or nullyes
expiresAtstring or nullyes
status"active" or "revoked" or "expired"yes
viewCountinteger, min 0yes
lastViewedAtstring or nullyes
totalViewDurationMsinteger, min 0yes
viewsarray of objectyes

views items:

FieldTypeRequired
idstring (uuid)yes
shareIdstring (uuid)yes
startedAtstringyes
lastSeenAtstringyes
endedAtstring or nullyes
durationMsinteger, min 0yes
createdAtstringyes

On this page