Build a reusable catalog of rates
Saved items are a per-business rate catalog: a name, a rate, and optional description, unit, type and tax rate. Invoices and estimates accept item_id or an exact item_name and copy the stored description and rate from the catalog.
Written and reviewed by the Billr team. Published , last reviewed .
- Who this is for
- Anyone whose agent drafts invoices from a prompt, where "bill 3 hours of Consulting" has to resolve to a real price.
- Billr capabilities used
list_itemscreate_itemupdate_itemcreate_invoice
What you need first
- The client you bill most often, added with
create_client. - The rate, billing unit and short description you want on documents.
- A key with the Read and draft profile so the catalog can be written, not just read.
Step by step
01Look before you add
list_itemstakes asearchterm and returns every active item with its stored rate. A short catalog that people trust beats a long one with three spellings of the same service.02Create each item once
rateandnameare required.unitandtypeare labels that print next to the price, andtax_rateis optional per item.create_item { "name": "Consulting", "description": "Senior consulting, billed hourly", "rate": 150, "unit": "hour", "type": "service" }03Correct instead of duplicating
update_itemacceptsitem_idor an exactitem_name, and can change the rate, description, unit, type or tax rate. Setis_active: falseto retire a rate without breaking the documents that already used it.04Bill from the catalog
In
create_invoiceandcreate_estimate, a line can referenceitem_idoritem_nameinstead of a description and rate. The server copies the stored description and rate, so the prompt can stay short.create_invoice { "request_id": "7c3d5a82-9e14-4b76-8f02-3a6c1d9e4b58", "client_id": "9f2a4d18-3b7c-4a6e-8f0d-1c5b2e9a7d44", "line_items": [{ "item_name": "Consulting", "quantity": 3 }] }
Worked example
Fictional account, field names as returned by the server
You say
Add Consulting at $150 an hour to my rate list.
Your agent calls
create_item { "name": "Consulting", "description": "Senior consulting, billed hourly", "rate": 150, "unit": "hour", "type": "service" }list_items { "search": "Consult" }
Expected responses, abridged
{
"summary": "Saved \"Consulting\" at 150 per hour",
"item": {
"id": "c5a9e1d4-7b23-4f68-9a10-3e6d2c8b4f17",
"name": "Consulting",
"description": "Senior consulting, billed hourly",
"type": "service",
"rate": 150,
"unit": "hour",
"is_active": true
}
}Limits and gotchas
unitis a label, not a conversion. "day" does not become eight hours; the quantity you pass is what prints.- Item names are unique only by convention. Two items called "Design" make
item_nameambiguous, so preferitem_idfor anything long-lived. - Retiring an item with
is_active: falsehides it fromlist_itemsunless you passinclude_inactive: true; documents that already used it are untouched. - Catalog items price lines. They do not change tax handling on an existing draft, which you set with
update_draft_invoice.
Troubleshooting
- create_invoice rejects a line with "Could not resolve line items"
- The
item_namedid not match exactly. Runlist_itemswith a search term and pass the returned name or theitem_id. - update_item changed the wrong item
item_namemust match one stored name. Passitem_idinstead, which is whatlist_itemsreturns.- An old invoice shows a rate you no longer charge
- Invoices store the rate they were created with. Change the catalog for future documents; correct the draft itself with
update_draft_invoicewhile it is still a draft.
Sources
Reviewed 2026-09-20 against Billr's own tool implementations and the client documentation linked above.
Read next
Once the catalog exists, prompts like "three hours of Consulting" bill your saved rate instead of the model guessing a number.
Draft an invoice by hand