MYOB has no webhooks. Everything is polling, and that changes the design.
MYOB does not support webhooks — its own documentation says so and points you at polling with OData filters. It also publishes no rate limit figures, only the error strings, and returns HTTP 403 rather than 429 when you exceed them. Both facts shape what an MYOB integration costs to run.
What MYOB publishes about its API
Documentation
Yes — developer.myob.com is public, and MYOB runs a separate API support centre at apisupport.myob.com MYOB developer centre, fetched 1 September 2026.
Authentication
OAuth 2.0 authorisation code flow for cloud files. Every request also needs an x-myobapi-key header and, for company-file access, an x-myobapi-cftoken. Desktop and local files use basic auth instead of a bearer token. MYOB authentication, fetched 1 September 2026.
Token lifetimes
Access tokens last 1,200 seconds — 20 minutes. Refresh tokens last up to one week, reduced from one year in January 2020, and rotate on use. MYOB’s own advice is to refresh every 15 minutes. MYOB API support, fetched 1 September 2026.
Rate limits
MYOB does not publish a rate limit figure anywhere in its documentation.
When you exceed one
HTTP 403 — not 429 — with the body "API key has exceeded the per-second rate limit" or "API key has exceeded the daily rate limit". No Retry-After header is documented. Requests also time out at 29 seconds. MYOB error messages, fetched 1 September 2026.
Pagination
OData-style $top and $skip. Default page size 400, maximum 1,000. Responses carry a NextPageLink. MYOB recommends $skip always be a multiple of $top. MYOB retrieving data, fetched 1 September 2026.
Webhooks
No. MYOB’s own answer is "we don’t currently support Webhook" and directs you to poll with $filter on LastModified. MYOB API support, fetched 1 September 2026.
Event verification
No payload signature scheme is published.
Retry behaviour
No retry policy is published.
Bulk operations
No batch endpoint or bulk limit is published.
Test environment
A shared sandbox company file comes with developer registration. No published record cap or reset period. MYOB getting started, fetched 1 September 2026.
Data location
MYOB does not publish where the data is stored.
Cost of API access
Paid developer program: Developer Access $110 a month, Developer Partner $220, Premium Developer Partner $630. Pricing includes GST and is billed monthly. MYOB developer program, fetched 1 September 2026.
Every line above is MYOB’s own documentation, fetched 1 September 2026, linked so you can check it yourself. 5 of the 13 fields are not published at all — those are marked, and they are the ones that cost you time. The full capability register puts this beside the other eight.
What the MYOB API does and does not allow
The other ledger. Long-established in Australian trade and manufacturing, with a desktop lineage that still shows in the API.
Everything in the strip above is MYOB’s own published documentation, fetched 1 September 2026 and linked to the page it came from. We have not paraphrased it into something friendlier, because the exact wording is what you need when a limit bites at four in the afternoon.
What follows is what those facts mean for a build — the constraints that change a design decision rather than the ones that are merely true. If you want the same treatment for the other eight systems side by side, that is the capability register. If you want to know whether we have built against both sides of a particular pairing, the integration checker answers that specific question.
No webhooks means a polling loop, and a polling loop has a budget
This is the defining fact about integrating MYOB and it is worth sitting with. Every other accounting system in our register can tell you the moment something changed. MYOB cannot. You find out by asking, repeatedly, and the answer is usually nothing.
MYOB’s own recommendation is to poll with an OData filter on LastModified, which works and is the right approach. The cost is that responsiveness becomes a dial you set rather than a property you get. Poll every five minutes and you have spent 288 requests a day per resource doing nothing. Poll every hour and a customer waits an hour.
The awkward part is that MYOB does not publish how much room you have. You are budgeting against a ceiling whose height is not documented. In practice this pushes the design toward fewer, wider requests — one filtered pull covering several record types on a schedule, rather than many narrow ones — and toward being honest with the client that "instant" is not on the menu here.
Set the interval against the decisionA supplier bill can wait an hour. A customer waiting on a quote cannot. Poll different things at different rates rather than picking one number for everything.
Filter server-side, always$filter on LastModified with a stored watermark. Pulling everything and comparing locally works right up until the client has three years of history.
Handle 403 as a rate limitNot as a permissions failure. Generic HTTP clients get this wrong by default and stop retrying entirely.
The desktop lineage still shows, and it is not all bad
MYOB serves cloud files and locally hosted AccountRight files through the same API, differing mainly in headers — bearer tokens and a company-file token for cloud, basic auth for local. That is genuinely useful in Australian trade and manufacturing, where a surprising number of businesses still run a file on a machine in the office because it has always been there and it works.
It also means an integration has to know which it is talking to, and that the two are not interchangeable in behaviour. The pagination is generous — 400 records by default and up to 1,000, which is four times Xero’s default — and the OData filtering is more expressive than most of the register. Those are real advantages that get overlooked because the webhook gap is louder.
The 29-second request timeout is the one to design around. It is short for a report-shaped query on a large file, and MYOB explicitly tells developers to adjust their code to it rather than treating it as a fault.
A polling integration is not worse. It is a different set of trade-offs, and they should be stated.
Rate limits and what breaks at scale
We cannot tell you MYOB’s rate limits, because MYOB does not publish them. What is documented is the shape of the failure: a per-second limit and a daily limit, both returning HTTP 403 with a message naming which one you hit, and no Retry-After header to tell you how long to wait.
That combination is genuinely hostile to a naive integration. A 403 reads as "you are not allowed to do this" to every HTTP library and most developers, so the usual response is to stop and log an authentication error. The sync appears to have broken for a permissions reason, someone re-authorises it, and it works again — until the next busy hour.
What breaks at scale, then, is not throughput so much as diagnosis. Build MYOB integrations with explicit handling for the two documented error strings, exponential backoff on both, and an alert that says "rate limited" rather than "auth failed". And build the initial historical sync as a resumable job, because you will find the ceiling during it.
What MYOB’s documentation supports — and the caveat on each. Source: MYOB developer documentation, fetched 1 September 2026.
MYOB
Read records on demand
●Yes400 per page by default, up to 1,000, with expressive OData filtering. No published rate limit.
Write records in
●YesStandard REST writes. Inventory is capped by the client’s plan on Business Lite and Pro.
Know the moment something changes
○NoNo webhooks at all. MYOB directs you to poll with a $filter on LastModified.
Verify an event came from them
–Not assessedNo events to verify.
Recover after an outage
●YesPolling has no gap to recover — a wider LastModified window catches everything missed.
Bulk load history
–Not assessedNo batch endpoint or bulk limit is published. The 29-second request timeout is the practical constraint.
Keep data in Australia
–Not assessedMYOB does not publish where the data is stored.
What MYOB does not publish
5 of the thirteen fields we track are simply absent from MYOB’s documentation: the rate limit, what happens when a webhook delivery fails, how to verify an event actually came from them, any bulk or batch limit and where your client’s data physically sits.
This is the part of an integration page that competitors leave out, and it is the part that costs money. An undocumented rate limit is not an academic gap — it means the first time you find the ceiling is in production, on someone else’s business, usually on the busiest day of their month.
We are not going to fill these in with figures from a forum thread. Numbers circulate for most of them, and some are probably right, but we cannot show you where they came from and neither can the person who posted them. When we have measured MYOB properly under load, those figures will appear here with the date we measured them and the conditions we measured them under. Not before.
What we have built, and what we have not measured
We have implemented against MYOB in production. That is a real fact and it is also a limited one — it tells you we have solved this system's problems before, and it does not tell you how fast, how reliably, or at what volume.
The honest position is this. Everything on this page above the line is the vendor's published documentation, which we fetched, dated and linked rather than paraphrased. Nothing on this page is a Kindra measurement, because our measured register is not finished and publishing half of it dressed up as all of it would make this page less useful, not more.
What we would do on an engagement is measure the specific things that matter for your build — the endpoints you depend on, at your volume, with your data — and hand you those numbers whether or not they suit us. If they say the integration is harder than we quoted, you get told that too. Start with a Leak Check, or read how we work first if you would rather know the shape of it before talking to anyone.
Objections
Our MYOB integration stopped authorising this week. Is that you?
Possibly not. MYOB’s CompanyFile scope — the blanket one that granted access to all of a user’s AccountRight files — reaches its end date on 1 September 2026, and integrations built on it have to move to granular scopes such as sme-general-ledger and sme-sales. If something that has worked for years stopped authorising in the last few days, check that first. It is documented on MYOB’s own API support site and it has caught a lot of people.
Isn’t MYOB enough on its own?
Very often, yes — and if it is, we will say so and there is no engagement. MYOB is a mature product that solves the problem it was built for. Integration work is only worth paying for when the cost sits between systems: the same information being typed into MYOB and then into something else, or a decision waiting because two systems disagree. If everything you need lives inside MYOB, buy the plan that fits and spend the money elsewhere.
What happens when they change their API?
They will. Three of the nine systems in our register shipped a breaking or cost-changing update in the last twelve months. What matters is not preventing that — nobody can — but whether the integration was built so the change is a contained fix rather than a rebuild, and whether anyone is watching for the deprecation notice. You own the code either way, so you are never stuck with us to get it fixed.
Book a free Leak Check
20 minutes. We find where the money's going. No pitch.