invoices.pay
Start paying an invoice (hosted page). Returns the processor checkout URL. Final payment on an Idaho job over the threshold needs the payer to acknowledge the signed subcontractor list. Always collects on the shop's current active payments account; refused with payments_not_set_up while none is active, and with payments_paused while Stripe restricts the account.
| Who | Hosted page only (a person does it in the browser) |
| REST | POST /v1/invoices/pay |
| MCP tool | Not an MCP tool |
| Writes | no |
| Area | Invoices and payments (unlimited) |
When to use it
Never call it. The customer pays on the hosted page.
What to tell the owner
Your customer pays from the link.
Input
| Field | Type | Required |
|---|---|---|
t | string | yes |
subcontractor_ack | string (one of yes, no) | no |
tip_minor | integer | no |
tip_percent | string | no |
Example
POST https://doingwork.work/v1/invoices/pay
content-type: application/json
Idempotency-Key: 3f1c...
{
"t": "..."
}Output
JSON. The response shape isn't published yet; read the fields you need and ignore the rest. Errors are {code, message, status}.
Errors
| Code | Status | What to do |
|---|---|---|
human_only | 403 | This step happens on a hosted page the person opens themselves. Send them the link; don't try another route. |
invalid_link | 400 | The link was used, expired, or replaced by a newer one. Get a new link. |
invalid_input, invalid_token, rate_limited | Can happen on any call. See errors. |