Solo workspace
Solo overview, billing, profile, and settings 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.
Get the overview
GET /api/public/solo/overview
Response 200: { overview: Overview }
| Field | Type | Required |
|---|---|---|
activeSession | object or null | yes |
outstanding | object | yes |
paidThisMonth | object | yes |
medianTimeToPayDays | number, min 0 or null | yes |
recentInvoices | array of object | yes |
activeSession object:
| Field | Type | Required |
|---|---|---|
id | string (uuid) | yes |
clientId | string (uuid) | yes |
clientName | string | yes |
status | "working" or "break" or "pending" | yes |
startedAt | string | yes |
startedAtMs | integer, min 0 | yes |
summary | string or null | yes |
outstanding object:
| Field | Type | Required |
|---|---|---|
totalCents | integer, min 0 | yes |
currency | string, min 1, max 8 | yes |
invoiceCount | integer, min 0 | yes |
paidThisMonth object:
| Field | Type | Required |
|---|---|---|
totalCents | integer, min 0 | yes |
currency | string, min 1, max 8 | yes |
paymentCount | integer, min 0 | yes |
recentInvoices items:
| Field | Type | Required |
|---|---|---|
id | string (uuid) | yes |
clientName | string | yes |
totalCents | integer, min 0 | yes |
currency | string, min 1, max 8 | yes |
status | "draft" or "sent" or "viewed" or "void" or "paid" or "overdue" | yes |
invoicePrefix | string | yes |
invoiceNumber | integer | yes |
Get billing
GET /api/public/solo/billing
changed is a boolean. events is the recent billing history, newest first, capped at 10.
Response 200: { account, events, changed }
| Field | Type | Required |
|---|---|---|
clerkUserId | string, min 1 | yes |
plan | "free" or "pro" | yes |
platformFeeBps | integer, min 0 | yes |
source | string, min 1 | yes |
lastSyncedAt | string | yes |
createdAt | string | yes |
updatedAt | string | yes |
Each item in events:
| Field | Type | Required |
|---|---|---|
id | string (uuid) | yes |
clerkUserId | string, min 1 | yes |
eventType | "synced" or "plan_changed" | yes |
planBefore | "free" or "pro" or null | yes |
planAfter | "free" or "pro" | yes |
platformFeeBpsAfter | integer, min 0 | yes |
meta | object | yes |
createdAt | string | yes |
Sync billing
POST /api/public/solo/billing
No request body.
Response 200: { account, changed }
| Field | Type | Required |
|---|---|---|
clerkUserId | string, min 1 | yes |
plan | "free" or "pro" | yes |
platformFeeBps | integer, min 0 | yes |
source | string, min 1 | yes |
lastSyncedAt | string | yes |
createdAt | string | yes |
updatedAt | string | yes |
Get the business profile
GET /api/public/solo/business-profile
Response 200: { profile: Profile }
| Field | Type | Required |
|---|---|---|
clerkUserId | string, min 1 | yes |
legalName | string | yes |
tradeName | string or null | yes |
tin | string or null | yes |
vatStatus | "non_vat" or "vat_registered" | yes |
addressLine | string | yes |
city | string | yes |
province | string | yes |
provinceIso | string | yes |
country | string, min 1, max 8 | yes |
invoiceEmail | string | yes |
phone | string or null | yes |
website | string or null | yes |
createdAt | string | yes |
updatedAt | string | yes |
Replace the business profile
PUT /api/public/solo/business-profile
Request body:
| Field | Type | Required |
|---|---|---|
legalName | string, max 200 | yes |
tradeName | string, max 200, default "" | no |
tin | string, max 64, default "" | no |
vatStatus | "non_vat" or "vat_registered" | yes |
addressLine | string, max 300 | yes |
city | string, max 120 | yes |
province | string, max 120 | yes |
provinceIso | string, max 16 | yes |
country | string, min 2, max 8 | yes |
invoiceEmail | string, max 254 | yes |
phone | string, max 40, default "" | no |
website | string, max 300, default "" | no |
Response 200: { profile: Profile }
| Field | Type | Required |
|---|---|---|
clerkUserId | string, min 1 | yes |
legalName | string | yes |
tradeName | string or null | yes |
tin | string or null | yes |
vatStatus | "non_vat" or "vat_registered" | yes |
addressLine | string | yes |
city | string | yes |
province | string | yes |
provinceIso | string | yes |
country | string, min 1, max 8 | yes |
invoiceEmail | string | yes |
phone | string or null | yes |
website | string or null | yes |
createdAt | string | yes |
updatedAt | string | yes |
Get invoice defaults
GET /api/public/solo/invoice-defaults
Response 200: { defaults: Defaults }
| Field | Type | Required |
|---|---|---|
clerkUserId | string, min 1 | yes |
invoicePrefix | string, min 1 | yes |
nextNumber | integer | yes |
defaultCurrency | string, min 1, max 8 | yes |
paymentTerms | string or null | yes |
taxMode | "none" or "vat_12" or "custom" | yes |
customTaxLabel | string or null | yes |
customTaxRateBps | integer, min 0 or null | yes |
defaultNotes | string or null | yes |
createdAt | string | yes |
updatedAt | string | yes |
Replace invoice defaults
PUT /api/public/solo/invoice-defaults
Request body:
| Field | Type | Required |
|---|---|---|
invoicePrefix | string, min 1, max 32 | yes |
nextNumber | integer, max 1000000000 | yes |
defaultCurrency | string, min 1, max 8 | yes |
paymentTerms | string, max 80 or null | no |
taxMode | "none" or "vat_12" or "custom" | yes |
customTaxLabel | string, max 80, default "" | no |
customTaxRateBps | integer, min 0, max 100000 or null | no |
defaultNotes | string, max 4000, default "" | no |
Response 200: { defaults: Defaults }
| Field | Type | Required |
|---|---|---|
clerkUserId | string, min 1 | yes |
invoicePrefix | string, min 1 | yes |
nextNumber | integer | yes |
defaultCurrency | string, min 1, max 8 | yes |
paymentTerms | string or null | yes |
taxMode | "none" or "vat_12" or "custom" | yes |
customTaxLabel | string or null | yes |
customTaxRateBps | integer, min 0 or null | yes |
defaultNotes | string or null | yes |
createdAt | string | yes |
updatedAt | string | yes |
Get preferences
GET /api/public/solo/preferences
Response 200: { preferences: Preferences }
| Field | Type | Required |
|---|---|---|
clerkUserId | string, min 1 | yes |
timezone | string, min 1 | yes |
dateFormat | "DD MMM YYYY" or "MMM DD, YYYY" or "YYYY-MM-DD" | yes |
weekStartsOn | "monday" or "tuesday" or "wednesday" or "thursday" or "friday" or "saturday" or "sunday" | yes |
workDaysPerWeek | integer, min 1, max 7 | yes |
theme | "system" or "light" or "dark" | yes |
timeFormat | "h12" or "h24" | yes |
defaultCurrency | string, min 1, max 8 | yes |
idleReminderMinutes | 15 or 30 or 60 or null | yes |
createdAt | string | yes |
updatedAt | string | yes |
Replace preferences
PUT /api/public/solo/preferences
Request body:
| Field | Type | Required |
|---|---|---|
timezone | string, min 1 | yes |
dateFormat | "DD MMM YYYY" or "MMM DD, YYYY" or "YYYY-MM-DD" | yes |
weekStartsOn | "monday" or "tuesday" or "wednesday" or "thursday" or "friday" or "saturday" or "sunday" | yes |
workDaysPerWeek | integer, min 1, max 7 | yes |
theme | "system" or "light" or "dark" | yes |
timeFormat | "h12" or "h24" | yes |
defaultCurrency | string, min 1, max 8 | yes |
idleReminderMinutes | 15 or 30 or 60 or null | yes |
Response 200: { preferences: Preferences }
| Field | Type | Required |
|---|---|---|
clerkUserId | string, min 1 | yes |
timezone | string, min 1 | yes |
dateFormat | "DD MMM YYYY" or "MMM DD, YYYY" or "YYYY-MM-DD" | yes |
weekStartsOn | "monday" or "tuesday" or "wednesday" or "thursday" or "friday" or "saturday" or "sunday" | yes |
workDaysPerWeek | integer, min 1, max 7 | yes |
theme | "system" or "light" or "dark" | yes |
timeFormat | "h12" or "h24" | yes |
defaultCurrency | string, min 1, max 8 | yes |
idleReminderMinutes | 15 or 30 or 60 or null | yes |
createdAt | string | yes |
updatedAt | string | yes |
Get notification settings
GET /api/public/solo/notification-settings
Response 200: { settings: Settings }
| Field | Type | Required |
|---|---|---|
clerkUserId | string, min 1 | yes |
emailInvoicePaid | boolean | yes |
emailPaymentFailed | boolean | yes |
emailPayoutSent | boolean | yes |
browserTimerReminder | boolean | yes |
createdAt | string | yes |
updatedAt | string | yes |
Replace notification settings
PUT /api/public/solo/notification-settings
Request body:
| Field | Type | Required |
|---|---|---|
emailInvoicePaid | boolean | yes |
emailPaymentFailed | boolean | yes |
emailPayoutSent | boolean | yes |
browserTimerReminder | boolean | yes |
Response 200: { settings: Settings }
| Field | Type | Required |
|---|---|---|
clerkUserId | string, min 1 | yes |
emailInvoicePaid | boolean | yes |
emailPaymentFailed | boolean | yes |
emailPayoutSent | boolean | yes |
browserTimerReminder | boolean | yes |
createdAt | string | yes |
updatedAt | string | yes |
Get payout settings
GET /api/public/solo/payout-settings
Response 200: { settings: Settings }
| Field | Type | Required |
|---|---|---|
clerkUserId | string, min 1 | yes |
method | "bank_transfer" or "gcash" or "maya" or "wise" or "other" | yes |
bankName | string or null | yes |
accountName | string or null | yes |
accountNumber | string or null | yes |
ewalletHandle | string or null | yes |
paymentInstructions | string or null | yes |
provider | "manual" or "paymongo" | yes |
status | "not_started" or "pending" or "verified" | yes |
createdAt | string | yes |
updatedAt | string | yes |
Replace payout settings
PUT /api/public/solo/payout-settings
Request body:
| Field | Type | Required |
|---|---|---|
method | "bank_transfer" or "gcash" or "maya" or "wise" or "other" | yes |
bankName | string, max 120, default "" | no |
accountName | string, max 120, default "" | no |
accountNumber | string, max 64, default "" | no |
ewalletHandle | string, max 120, default "" | no |
paymentInstructions | string, max 4000, default "" | no |
provider | "manual" or "paymongo" | yes |
status | "not_started" or "pending" or "verified" | yes |
Response 200: { settings: Settings }
| Field | Type | Required |
|---|---|---|
clerkUserId | string, min 1 | yes |
method | "bank_transfer" or "gcash" or "maya" or "wise" or "other" | yes |
bankName | string or null | yes |
accountName | string or null | yes |
accountNumber | string or null | yes |
ewalletHandle | string or null | yes |
paymentInstructions | string or null | yes |
provider | "manual" or "paymongo" | yes |
status | "not_started" or "pending" or "verified" | yes |
createdAt | string | yes |
updatedAt | string | yes |
