add_drawings
ChatGPTUse this when the person has drawings (a PDF plan set) for a Leva project. Adds a PDF drawing set to a project. If the person attached a PDF in this chat, pass it as file (or an https link to the PDF as file_url); Leva downloads it (PDF only, up to 40 MB). Call once per file. If you can't pass the file, call with only project_id: you get an upload link to give the person, where they can add up to 5 PDFs (one at a time) within 30 minutes. Adding drawings doesn't start the takeoff; call start_takeoff next.
add_note
ChatGPTUse this when the person changes what should be measured on a job, for example "also measure the garage" or "the laundry isn't tiled". While a takeoff is running, it reads the note straight away and may change or replace its measurements. With nothing running, the note isn't sent or saved and nothing starts, so nothing is spent: offer start_takeoff with the note as its request (on a job that already has a takeoff, that run is a change and doesn't use one of the account's takeoffs). Don't use this to answer one of Leva's questions; use answer_question.
answer_question
ChatGPTUse this when the person answers one of Leva's questions about a takeoff. Pass their answer in their own words, or as the value the question's answer_control expects. Leva checks it and gives it to the takeoff; on a finished takeoff it re-measures the quantities the answer affects and replaces them, which doesn't use one of the account's takeoffs. If the person hasn't answered yet, call it without an answer: where the host can show a form, they answer there; otherwise the result has input_mode chat and the question to ask in the conversation, and nothing is saved. Never answer for the person. Don't use this for other changes to what is measured; use add_note.
create_project
ChatGPTUse this when someone wants a takeoff, quantities, a bill of materials or a materials estimate from construction drawings (plans, structural or architectural PDFs) and there is no Leva project for the job yet. Creates a project for the job, for example a builder's house or a tender. Put what the customer asked for in scope_note (for example "tiles to wet areas only"); the takeoff follows it together with the supplier's scope profile. Then call add_drawings.
get_profile
ChatGPTReturn the profile this connection acts as: one person at one supplier. The opaque id is unique within Leva and stays the same across token refresh, reconnection and display changes.
get_takeoff_card
ChatGPTThe takeoff card's own refresh: the same data as show_takeoff, for the card to call while a takeoff runs. Not for the model.
get_takeoff_results
ChatGPTRead saved measured quantities and their review labels, scope, questions, basis and report link. Use Leva's quantity_display in ordinary responses; raw quantity is retained for explicitly requested unrounded precision. Include the review label even when brief: system checking is separate from human acceptance. Do not calculate unrequested totals. When all rows have the same review label, state it once alongside the concise result. Open questions and consequential qualifications still apply. Quantities come from saved drawing geometry; never invent or change them.
get_takeoff_status
ChatGPTRetrieve run stage, saved_quantity_count and open questions when the person asks how it is going or you need to continue the takeoff conversation. The drawing refreshes itself; don't poll just to update visual progress. Report stage and saved count concisely. The progress field counts scope-plan items, not measured quantities, elapsed time or percentage completion; never describe it as quantities completed. Questions include the current assumption; ask consequential ones directly in chat.
list_projects
ChatGPTUse this when the person asks about their Leva jobs, or you need a project_id before adding drawings or reading results. Lists this supplier's projects (newest first) with each one's drawings count and latest takeoff status.
open_jobs
ChatGPTUse this when the person wants to browse their Leva jobs, or open one job in the Leva jobs app (pass project_id). Opens the app beside the conversation: every job with its takeoff status, and each job's marked-up drawings and quantities. It changes nothing. Don't use this to show a particular measurement on the drawing (use show_takeoff with its quantity_id), to get job ids for other tools (use list_projects), or to start a new takeoff: carry on in the conversation and ask only for missing drawings or scope, because the app has no job setup form.
read_settings
ChatGPTRead Leva's settings for the connected supplier: what it supplies (the scope every takeoff measures). Takes no arguments.
search_jobs
ChatGPTSearch the supplier's Leva jobs by name, for @-mentions in the composer.
show_takeoff
ChatGPTUse this when the person wants to see a job's takeoff on its drawing: right after start_takeoff, to follow it live, or to show where a saved measurement comes from ("show the floor area on the drawing", "where does 122.4 m come from?"). For a measurement, pass its quantity_id from get_takeoff_results to select its marks; an empty quantity_id clears the selection. Shows the marked-up drawing in the conversation with the run stage and saved quantity count, and returns the status and results for your reply; it changes nothing. The drawing refreshes itself, so don't poll for visual progress, and it doesn't start a new turn by itself: check status when the person asks. Keep quantities, questions and explanations in the chat. Don't use this to browse or open the person's jobs; use open_jobs.
start_takeoff
ChatGPTUse this when a project has drawings and the person wants them measured: a quantity takeoff, a bill of materials or quantities for a quote. Starts Leva's takeoff on the project's drawings; it is the only tool that starts one. A job's first takeoff counts as one of the account's takeoffs; on an account with a takeoff limit, where the host can show a form, the person confirms it first. A later run on the same job is a change that doesn't count but can replace its saved quantities. Returns at once with a run_id: the takeoff takes several minutes, so call show_takeoff next to show the person the live takeoff card (where no card can be shown, call get_takeoff_status about every 30 seconds until it is completed, then get_takeoff_results). request says what to measure; it can be left out when the supplier's scope profile or the project's scope note already says. If a takeoff is already running, its run is returned and the request is passed to it as a note.
update_settings
ChatGPTUse this only when the person asks to change their usual measurement scope. set holds only the changed settings: scope_profile is what the account usually measures, in the person’s own words. Only the account’s owner can change it. Saving replaces the previous scope, and an empty string clears it. It never starts a takeoff or spends one: ready_jobs lists jobs that have drawings but no takeoff yet, so offer start_takeoff for those the person wants measured. Jobs, account permissions and other settings are unchanged.