invoices.create
Create an invoice without a quote, from lines the worker wrote (never filled in by AI). Optional due date, memo and deposit. Send it with invoices.send.
| Who | Agents can call this |
| REST | POST /v1/invoices/direct |
| MCP tool | invoices_create |
| Writes | yes, send an Idempotency-Key |
| Area | Shop |
When to use it
Create an invoice without a quote, from lines the worker wrote (never filled in by AI). Optional due date, memo and deposit.
What to tell the owner
Say what you did in plain words and what happens next.
Input
| Field | Type | Required |
|---|---|---|
job_id | string (uuid) | yes |
lines | array | yes |
lines[].description | string | yes |
lines[].quantity | number | yes |
lines[].unit_price_minor | integer | yes |
lines[].kind | string (one of item, fee, discount) | no |
lines[].taxable | boolean | no |
due_on | string | no |
memo | string | no |
deposit_minor | integer | no |
tax_rate_id | ['string', 'null', ' ', '(', 'u', 'u', 'i', 'd', ')'] | no |
Example
POST https://doingwork.work/v1/invoices/direct
content-type: application/json
Idempotency-Key: 3f1c...
{
"job_id": "00000000-0000-4000-8000-000000000000",
"lines": [
{
"description": "40 gallon gas heater, installed",
"quantity": "...",
"unit_price_minor": 50000
}
]
}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 |
|---|---|---|
invalid_input, invalid_token, rate_limited | Can happen on any call. See errors. |