quote
Draft or send a quote. Draft, change or send a quote (send waits for the owner's yes; the client accepts with one tap). Only a draft changes or is sent; valid_until is at most a year ahead. Skill: send-a-quote. Not for: billing agreed work (invoice).
Where it is
In the money area (quotes and payments): open it with tools_for { area: "money" }, then call it with use_tool { name: "quote", args }.
Does it need a yes?
Depends on what it changes: the everyday part runs at once, anything that reaches people or core files waits for the owner's yes. Here: a draft is busywork; sending it is an email's yes.
Inputs
| Input | Type | Needed | About |
|---|---|---|---|
action | "draft" | "change" | "send" | yes | |
number | integer | no | The task number, e.g. 12. · 1 or more |
person_id | string | no | format `^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$` |
lines | array of object | no | Before VAT. · 1 to 50 items |
lines[].what | string | yes | 1 to 200 characters |
lines[].qty | number | yes | 1 to 10000 |
lines[].price | number | yes | 0 to 10000000 |
buyer_country | string | no | draft and change: required. The buyer's country, like DE: Stripe Tax works out the VAT for it when the quote is made (a business's EU VAT number reverse-charges). Not in the files: ask the owner; never guess. · format `^[A-Za-z]{2}$` |
buyer_vat_id | string | no | Optional. draft and change: a business buyer's EU VAT number, like DE123456789. · up to 20 characters |
buyer_postal_code | string | no | draft and change: the buyer's postal code. Required for a buyer in the US or Canada (the tax there needs it); ask the owner. · 2 to 12 characters |
valid_until | string | no | |
note | string | no | 1 to 1,000 characters |
plan | object | no | Recurring: the Stripe plan its first payment joins. The plan's price must include VAT and be in the company's currency; the lines add up to that price (what the join link charges). |
plan.price | string | yes | format `^price_[A-Za-z0-9_]{1,200}$` |
plan.mode | "test" | "live" | no | |
subject | string | no | 1 to 200 characters |
text | string | no | send: the link is added when it goes out. · 1 to 4,000 characters |
task | integer | no | send: your task. · 1 or more |
tax_rate_id | string | no | send, Moneybird only, optional: the Moneybird sales rate is picked to match Stripe Tax's answer; give it only when Moneybird has several such rates. · format `^\d{1,30}$` |
ledger_account_id | string | no | send, Moneybird only. · format `^\d{1,30}$` |
request_key | string | no | format `^[A-Za-z0-9][A-Za-z0-9:._-]{0,99}$` |
run_id | string | yes | The run_id from start. Pass it on every call: it keeps your task held. · 1 to 100 characters |
Example
{
"name": "quote",
"arguments": {
"action": "draft",
"run_id": "the run_id from start"
}
}When it is refused
invalid: The input isn't right. The sentence names the field and the fix; nothing was done. Fix it and call again.not_found: No such thing in this company (a task, file, person, record). Check the number or name, or list first.not_allowed: Not without another step: the owner's yes, your own task held with pick_up, or a setting the owner turns on. The sentence says which.taken: Someone else holds it (another AI on that task). Pick another task.stale: It changed since you read it. Read it again and use the new version.failed: On our side or a service's, never your input. Try again in a minute; if it keeps failing, call report_problem.