Solo payments
Solo payment 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.
Proof uploads are multipart, not JSON. The file field name is file. Allowed types are PDF, JPEG, PNG, and WebP, up to 5 MB, with at most 3 files on a payment.
List payments
GET /api/public/solo/payments
Response 200: { payments: Payment[] }
| Field | Type | Required |
|---|---|---|
id | string (uuid) | yes |
clerkUserId | string, min 1 | yes |
invoiceId | string (uuid) | yes |
clientId | string (uuid) | yes |
currency | string, min 1, max 8 | yes |
grossCents | integer, min 0 | yes |
platformFeeCents | integer, min 0 | yes |
netCents | integer, min 0 | yes |
method | "wise" or "bank" or "gcash" or "maya" or "card" or "other" | yes |
notes | string or null | yes |
paidAt | string | yes |
createdAt | string | yes |
updatedAt | string | yes |
attachments | array of object | yes |
clientName | string | yes |
invoicePrefix | string | yes |
invoiceNumber | integer | yes |
attachments items:
| Field | Type | Required |
|---|---|---|
id | string (uuid) | yes |
paymentId | string (uuid) | yes |
clerkUserId | string, min 1 | yes |
storageBucket | string, min 1 | yes |
storagePath | string, min 1 | yes |
fileName | string, min 1 | yes |
contentType | string, min 1 | yes |
sizeBytes | integer | yes |
createdAt | string | yes |
Record a payment
POST /api/public/solo/payments
Request body:
| Field | Type | Required |
|---|---|---|
invoiceId | string (uuid) | yes |
method | "wise" or "bank" or "gcash" or "maya" or "card" or "other" | yes |
notes | string, max 4000 | no |
paidAt | string | no |
Response 201: { payment: Payment }
| Field | Type | Required |
|---|---|---|
id | string (uuid) | yes |
clerkUserId | string, min 1 | yes |
invoiceId | string (uuid) | yes |
clientId | string (uuid) | yes |
currency | string, min 1, max 8 | yes |
grossCents | integer, min 0 | yes |
platformFeeCents | integer, min 0 | yes |
netCents | integer, min 0 | yes |
method | "wise" or "bank" or "gcash" or "maya" or "card" or "other" | yes |
notes | string or null | yes |
paidAt | string | yes |
createdAt | string | yes |
updatedAt | string | yes |
attachments | array of object | yes |
attachments items:
| Field | Type | Required |
|---|---|---|
id | string (uuid) | yes |
paymentId | string (uuid) | yes |
clerkUserId | string, min 1 | yes |
storageBucket | string, min 1 | yes |
storagePath | string, min 1 | yes |
fileName | string, min 1 | yes |
contentType | string, min 1 | yes |
sizeBytes | integer | yes |
createdAt | string | yes |
Get a payment
GET /api/public/solo/payments/{id}
Response 200: { payment: Payment }
| Field | Type | Required |
|---|---|---|
id | string (uuid) | yes |
clerkUserId | string, min 1 | yes |
invoiceId | string (uuid) | yes |
clientId | string (uuid) | yes |
currency | string, min 1, max 8 | yes |
grossCents | integer, min 0 | yes |
platformFeeCents | integer, min 0 | yes |
netCents | integer, min 0 | yes |
method | "wise" or "bank" or "gcash" or "maya" or "card" or "other" | yes |
notes | string or null | yes |
paidAt | string | yes |
createdAt | string | yes |
updatedAt | string | yes |
attachments | array of object | yes |
attachments items:
| Field | Type | Required |
|---|---|---|
id | string (uuid) | yes |
paymentId | string (uuid) | yes |
clerkUserId | string, min 1 | yes |
storageBucket | string, min 1 | yes |
storagePath | string, min 1 | yes |
fileName | string, min 1 | yes |
contentType | string, min 1 | yes |
sizeBytes | integer | yes |
createdAt | string | yes |
Upload proof
POST /api/public/solo/payments/{id}/attachments
Send multipart/form-data with a file part. There is no JSON body.
No request body.
Response 201: { attachment: Attachment }
| Field | Type | Required |
|---|---|---|
id | string (uuid) | yes |
paymentId | string (uuid) | yes |
clerkUserId | string, min 1 | yes |
storageBucket | string, min 1 | yes |
storagePath | string, min 1 | yes |
fileName | string, min 1 | yes |
contentType | string, min 1 | yes |
sizeBytes | integer | yes |
createdAt | string | yes |
Delete proof
DELETE /api/public/solo/payments/{id}/attachments/{attachmentId}
Response 200: { ok: true }
Get a proof URL
GET /api/public/solo/payments/{id}/attachments/{attachmentId}/url
Response 200: { url: string, expiresInSeconds: number }
