• AI reference · Area money

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

InputTypeNeededAbout
action"draft" | "change" | "send"yes
numberintegernoThe task number, e.g. 12. · 1 or more
person_idstringnoformat `^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`
linesarray of objectnoBefore VAT. · 1 to 50 items
lines[].whatstringyes1 to 200 characters
lines[].qtynumberyes1 to 10000
lines[].pricenumberyes0 to 10000000
buyer_countrystringnodraft 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_idstringnoOptional. draft and change: a business buyer's EU VAT number, like DE123456789. · up to 20 characters
buyer_postal_codestringnodraft 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_untilstringno
notestringno1 to 1,000 characters
planobjectnoRecurring: 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.pricestringyesformat `^price_[A-Za-z0-9_]{1,200}$`
plan.mode"test" | "live"no
subjectstringno1 to 200 characters
textstringnosend: the link is added when it goes out. · 1 to 4,000 characters
taskintegernosend: your task. · 1 or more
tax_rate_idstringnosend, 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_idstringnosend, Moneybird only. · format `^\d{1,30}$`
request_keystringnoformat `^[A-Za-z0-9][A-Za-z0-9:._-]{0,99}$`
run_idstringyesThe 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.