Ascora + AI: 46 tools, and the quote is how the job gets built
Ascora runs on a connector we build and maintain ourselves, with 46 tools across enquiries, customers, quotes, jobs, labour, timesheets, suppliers, bills and the accounting handoff. The interesting part is what we had to do about an API that says yes rather more often than it means it.
A lead comes in on Tuesday. Someone prices it Thursday night. The customer says yes the following week, the job runs, the hours land on it, and about a month later a number turns up in the accounts that nobody has compared to the quote.
Every step of that is in Ascora. The comparison is not, because it is four screens and a spreadsheet, and it happens after the argument rather than before it.
Ascora is now live on FloConnector, on a connector we build and maintain ourselves, with 46 tools. Most of this post is about those tools. Some of it is about a habit their API has, which is answering success: true for things it did not do, and what we did so that does not become your problem.
YouJ112. What did we quote it at, what has gone on it, and are we still in front?
ClaudeQuoted at $8,400 ex tax on Q57, won on 14 August. Chargeable labour recorded so far is 61 hours across two roles, $6,710. On the payroll side those same hours cost $2,847. Two supplier bills are attached, $1,980 between them, so you are at $4,827 in cost against $8,400 quoted. The apprentice hours are the movement: 22 of the 61, all in the last week.
Two exports and an afternoon, answered in the time it takes to read it.
What “46 tools” covers
| Area | Tools | What it reaches |
|---|---|---|
| Quotes, their sections, items and reference sets | 14 | Build, price, section, win, lose, delete |
| Customers and contacts | 9 | Who the work is for, who to ring about it |
| Jobs, their labour and their timesheets | 5 | What is running, and the hours on it both ways |
| Customer invoices and payments awaiting export | 5 | The handoff to your accounting package |
| Suppliers | 4 | Who you buy from, and their terms |
| Supplier invoices and credit notes | 4 | What you were billed, line by line |
| Supplies, kits and inventory categories | 3 | Your actual price list, not last year's |
| Enquiries and notes | 2 | Leads in, and what got written down |
| 46 tools | 23 read, 23 write | 35 flagged sensitive |
That is close to the whole published API. Ascora documents 46 operations across eleven resource families in one 80 page PDF, and everything in it is here except two things we chose not to ship, which are further down.
Every one of the 46 has been run against a live Ascora account. Twice. The second pass re-tested the fixes from the first and found three more problems, and several sections of this post exist only because of what those two passes turned up.
The quote is the only way to build a job
This is the single most useful thing to know about Ascora before you ask your AI to do anything with it, and it is not obvious from the outside.
Ascora’s API can create a job. It cannot update one, cannot change its status, cannot delete it, and cannot add a single line of labour or materials to it. A job created directly through the API sits there as New until a person moves it.
The quote is where the work happens. Build the quote against the customer, add its supplies, its kits, its write-in lines, break it into sections if it is that kind of job, then mark it WON. Ascora converts it into the job and hands back the job number. That is the path to a fully specified job, and it is the only one.
- Create the quote against the customer, priced off your own supplies and kits
- Add the sections if it needs them, each with its own lines
- Show the customer the total, adjust, mark it sent
- Mark it won, and Ascora makes the job
- Later: read the labour and the timesheets that landed on it
Quotes and jobs are addressed the way you see them on screen, Q57 and J112, and a section is Q57.01. Not a GUID you would have to go and find. Customers, contacts and suppliers are the other way around and take their id, and the tools that take each are named so nobody has to remember which.
One quirk we handle silently: a quote section is spelled Q57.01 when you write to it and Q57-01 when you read it back. Same section, two spellings, depending on the verb. The connector converts, so the model never has to know and never gets a 404 that reads like a deleted record.
The hours are in there twice, on purpose
Ascora gives you two views of the same clocked time, and adding them together is the most expensive mistake available in this API.
Job labour is the chargeable view: hours multiplied by the charge-out rate for the role. Job timesheets is the payroll view: the same clocked span at cost. In Ascora’s own sample data it is thirteen hours by the same person on the same job, $1,300 on one and $546 on the other.
Both are here, both are useful, and the tools say plainly which is which so that “what did this job cost” and “what can we bill for it” are two different questions with two different answers rather than one number that is quietly double.
There is a side effect worth knowing. Ascora publishes no endpoint that lists your users, yet several filters take a person’s full name. The only place a name and a user id appear together is on job labour and timesheet rows, so that is where an assistant finds out who works for you. It is a strange design and it does work.
The accounting handoff, and when not to use it
Five of the 46 tools are the export queue: the customer invoices waiting to go to your accounting package, the payments waiting to go with them, and the calls that mark a batch as sent. Supplier bills have their own four.
Two honest things about it.
There is no invoice search in Ascora’s API. The unsent queue is the entire customer-invoice read surface. Once an invoice is marked as sent, Ascora will not return it again, ever. There is no un-mark and no “include sent” flag. So those tools are named for what they are, list_invoices_to_send rather than list_invoices, and the mark is flagged sensitive with a description that says to run it only once the downstream write is confirmed. Marking on a failure loses the invoice from every future export.
Most Ascora customers should not use this family at all. Ascora’s own words: these endpoints are “only required if you do not have a modern accounting package that supports a direct API connection, such as Xero, MYOB or QuickBooks.” Ascora ships native integrations to all three. If yours is already syncing, running this export beside it means two systems marking the same invoices into the same ledger. The tools say so before they run.
Which is the more interesting arrangement anyway. Leave Ascora’s own sync doing the sync, connect Xero to the same FloConnector workspace, and “what did we quote it at, what did it cost, and has it been paid” is one question across two platforms rather than an export from each.
The API says yes rather a lot
Here is the part that shaped the connector more than anything else.
Ascora’s failure mode is not an error. It is a success: true for something that did not happen. We found five separate cases across the two live passes, and each one is now closed by something structural rather than by a note in a description that a model may or may not have read.
An update replaced the record instead of merging it. Ascora’s three update endpoints are upserts that write the whole body, so every field you did not mention is written back empty. We proved it: an update carrying only a postcode blanked the company name, both contact names, the email, the phone, the mobile and the entire street address. Response was success: true, and it persisted.
Clearing the items off a sectioned quote did nothing and reported success. The same call empties a normal quote properly, $500 to $0. On a quote with sections it comes back fine and the total does not move. That one cannot be detected after the fact, so the tool now refuses before it sends: it checks the shape of the quote and declines rather than telling you it cleared something it did not.
A quote that fails to create has often been created anyway. A failure part way through leaves a real quote sitting in Ascora at $0. The error now tells you to check the quote list before trying again, because the intuitive response to a failed create is to run it again, and that gives you two.
An unrecognised supply, kit or labour id adds nothing and says it worked. There is no defence for that one, because the vendor genuinely reports the same thing either way. Worse, no endpoint anywhere returns a quote’s lines: you can write items to a quote and never read them back. The total is the only evidence they landed, so the tools say to confirm by the total rather than promising to check the quote.
The filter that decides what has not been exported yet is spelled two ways, and the official-looking one is dead. Ascora’s docs list ToBeSentToAccounting in the endpoint’s own filter list and ToBeSentToAccountsOnly in a workflow note seventeen pages later. Only the second one works, and an unrecognised query parameter is silently ignored, which means the wrong spelling returns every invoice you have ever raised while looking exactly like it worked. We shipped sending both until a live account settled it. Had we picked the official-looking one, every sync would have re-exported the customer’s entire purchase history and reported success.
None of that is a criticism of Ascora as a product. It is what a decade-old API looks like when it was built for two or three known integrations rather than for anything that might turn up. It is also exactly the reason we test these against a live account before listing them, twice, rather than against the documentation.
One thing that does not work, and we are saying so
Adding a labour role to a quote fails. Every time, for every role, including one created seconds earlier, with the response “An error has occurred.”
It is a fault inside Ascora, a foreign key on their own labour table, and it is not something configuration can fix. Ascora’s own screens add quote labour without trouble, so it is specific to the API. We have raised it with them.
Until it is fixed, the tool tells you what happened and how to get the same result in the same breath: add the labour as a write-in line at the role’s hourly rate. The quote prices identically and the customer sees the same document. It is a workaround and we would rather name it here than have you discover it mid-quote.
That is 45 of 46 working. We would rather publish the number than round it.
What we chose not to ship
Webhook subscriptions. Ascora lets an API caller register a callback URL for job and quote events. An assistant that can be talked into pointing your event feed somewhere else is a standing data leak, and these are our plumbing rather than model work. Not even read access.
Attachment upload. Ascora’s upload endpoint takes a multipart binary body with an undocumented field name. Nothing on a connector surface can supply that, so it would ship as a tool that always fails.
No delete except for quotes. Ascora has no delete for customers, contacts, suppliers or jobs, so neither do we. Quote delete is the exception, and it is there for a specific reason: there is no way to edit a quote once it exists, so a quote built against the wrong customer can only be deleted and rebuilt. Withholding it would leave an assistant unable to undo its own mistake.
Enquiries are worth a note in the same spirit. An enquiry is the lead capture endpoint Ascora markets for website forms, and it is write only. There is no list, no read and no update, so once created it is invisible to the API. Your AI can put a lead in and cannot go and look at it afterwards, which is Ascora’s design, not ours.
Once it is more than a conversation’s worth
Ask about one job and the numbers fit in the chat. Ask about a quarter of supplier invoices and they do not.
At that point the connector loads the set into a temporary, in-memory analytics workspace, the model queries the aggregate, and thousands of rows never enter the conversation. There is more on how that works and why it is not a code sandbox, but you do not have to do anything to get it.
It matters more here than on most connectors, because Ascora’s export endpoints have no paging at all. They return everything that matches, with every line item, in one response.
Connecting is a pasted key, and the key is the whole account
Ascora does not offer integrations like ours a sign in and approve flow, so an administrator on your account generates an API key under Administration, API Settings, and pastes it into FloConnector along with a name for the connection. That is the setup.
Be clear-eyed about what that key is. Ascora has no scopes, no read-only mode and no per-user keys. One key per account, full access to everything. There is nothing on a consent screen to tick, because there is no consent screen.
So the control moves to our side, and this is where the profile does the work.
A profile decides which of the 46 tools a given endpoint publishes and who on your team can use it. Describe what the profile is for in your own words and we switch on the ones it needs, including the supporting reads a write depends on. Or tick the whole thing read only and hand out something that answers questions and changes nothing, which for most businesses is the right first month. The tools that mark things as sent to accounting, the ones that cannot be undone, are exactly the ones to leave off until you trust the rest.
Your Ascora key never goes near the model either way. We hold it encrypted, the AI only ever gets to ask. That is how credentials work on every connector we run.
One more thing before you generate a key. Ascora issues one per account, and clicking Generate New API Key disconnects everything using the previous one, including this connection. If another integration ever asks you to generate a fresh key, reconnect FloConnector afterwards with the new one. It is one paste, and it is the ordinary lifecycle rather than a fault.
How to connect Ascora to Claude
- Create a FloConnector workspace and open the Ascora connector
- In Ascora, go to Administration, API Settings, and generate an API key
- Paste it into FloConnector with a name for the connection
- Create a profile, describe what it is for, and save
- Copy that profile’s endpoint into Claude as a custom connector
- Ask it something. “What is on job J112 against what we quoted” is a good first test
Common questions
Do I need Ascora’s permission, or a partner agreement? No. The key is one your own administrator generates. FloConnector is an independent connector built on Ascora’s public API, not an official Ascora integration. Ascora is a trademark of its owner.
Can it change a job? No, and nothing can. Ascora’s API creates jobs and cannot update, reschedule, close or delete one. Everything that shapes a job goes through the quote.
Can it read our invoices? Only the ones waiting to go to accounting. Ascora publishes no general invoice endpoint, and an invoice already marked as sent is permanently unreadable through the API. If you want invoice history in a conversation, that is a question for your accounting package, which is why Xero sitting in the same workspace is the useful pairing.
Can it add labour to a quote? Not today, and the fault is Ascora’s rather than ours. The tool explains the write-in workaround at the moment you hit it, and we have raised it with Ascora.
Can it delete something by accident? The only delete in the whole connector is quote delete, and Ascora itself restricts that to quotes still in progress. Everything else has no delete to reach for. If even that is too much, leave it off the profile.
Does it work with ChatGPT as well as Claude? Your Ascora MCP endpoint is a standard connector, so it works with any client that supports them. If the term is new, we wrote a plain-English explainer.
Can I use it alongside our other systems? Yes. A workspace holds more than one platform, so Ascora beside Xero makes “what did we quote, what did it cost, and has it been paid” a single question. The rest of the catalogue is at connectors.
What does it cost? Ascora is included on every plan, see pricing. New accounts get free credits to try it. It is in beta, which means connectable today, with 45 of the 46 tools exercised against a live Ascora account across two full passes and the one that is not working documented above.
46 tools. Build the quote, win the job, and find out where it went while you can still do something about it.
Keep reading
More from the blog
Deputy + AI: 174 tools, and the pay run stops being a surprise
Deputy runs on a connector we build and maintain ourselves, with 174 tools across rosters, timesheets, leave, awards, people and locations. Ask what the fortnight cost while there is still time to do something about it.
MCP Apps: fifty connectors, one widget
MCP Apps is the first official extension to the Model Context Protocol: a server can now render its own interface inside the conversation. Here's why a platform sitting in front of 50+ vendors should build exactly one of them, which one we picked, and what the protocol taught us on the way.
I gave Claude access to my entire business, and filmed what happened
A walkthrough of FloConnector doing real work in real systems: a lead in Gmail becomes a ServiceM8 job, a stale CRM pipeline gets chased and pushed through to a work order, and a supplier remittance marks off a month of invoices. Including the two things it got wrong.