A dark server aisle photographed down its length, rack indicator lights receding into the distance, no signage.

Integration · Simpro

Simpro signs its webhooks and has 110 of them. There is also no single API endpoint.

Simpro allows 10 requests a second per customer build, signs every webhook with an HMAC, and publishes around 110 events — the widest coverage in our register. It also gives every customer their own hostname and expires refresh tokens after 14 days, which shapes the whole integration.

What Simpro publishes about its API

Documentation
Yes, though the reference is a JavaScript app with opaque page hashes rather than stable URLs. An OpenAPI 2.0 specification is downloadable. Simpro API docs, fetched 1 September 2026.
Authentication
Five methods: authorisation code, implicit, resource owner credentials, client credentials, and a non-expiring API key. Simpro does not use OAuth scopes at all. Simpro authentication, fetched 1 September 2026.
Token lifetimes
Access tokens expire in 3,600 seconds. Authorisation codes must be exchanged within 3 minutes. Refresh tokens expire after 14 days and rotate on every use — the old ones stop working immediately. Simpro authentication, fetched 1 September 2026.
Rate limits
10 API requests per second per client build. Simpro publishes no daily cap. Simpro rate limiting, fetched 1 September 2026.
When you exceed one
HTTP 429 on every subsequent request until the rate falls back under the limit. No Retry-After header is documented. Simpro rate limiting, fetched 1 September 2026.
Pagination
Page and pageSize parameters. Only the first 30 results come back by default, maximum 250. Result-Total, Result-Pages and Result-Count come back as response headers. Simpro pagination, fetched 1 September 2026.
Webhooks
Yes, and the most comprehensive set of the nine — around 110 events across jobs, quotes, invoices, payments, customers, sites, purchase orders, schedules and stock. Simpro webhooks, fetched 1 September 2026.
Event verification
SHA1 HMAC hexdigest of the request body in an X-Response-Signature header, keyed with a secret you set on the subscription. Simpro recommends a constant-time comparison. Simpro webhooks, fetched 1 September 2026.
Retry behaviour
No retry policy is published.
Bulk operations
POST and PATCH /multiple/ routes exist specifically as the documented answer to the rate limit, and batch delete is capped at 250. Simpro rate limiting, fetched 1 September 2026.
Test environment
A sandbox build is provided to partner-level integrators during approval. Nothing published for single-customer integrations. Simpro getting started, fetched 1 September 2026.
Data location
Simpro does not publish where the data is stored.
Cost of API access
No separate charge for API access is published.

Every line above is Simpro’s own documentation, fetched 1 September 2026, linked so you can check it yourself. 3 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 Simpro API does and does not allow

Job and project management for larger contracting businesses. Brisbane-headquartered, and the most structurally complex API of the nine.

Everything in the strip above is Simpro’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.

Every customer has their own hostname, and that is the whole story

Simpro builds live at buildname.simprosuite.com or buildname.simprocloud.com. There is no api.simpro.com to point at. Before you can call anything you have to know which build this particular client is on, store it, and get it right — because getting it wrong means querying a different business entirely.

It goes further than a variable in a config file. Multi-company builds put a company ID in every route, and Simpro requires partner-level applications to support both single and multi-company builds before it will approve them. If you develop against a single-company build and discover multi-company at the first larger client, that is a refactor of every path in the integration.

This is not a criticism so much as a description. Simpro serves bigger and more structurally complicated contracting businesses than the rest of this cluster, and the API reflects that. It is the difference between a tool for a five-van plumbing business and a tool for a company with three divisions and a service department.

  • Store the build name per client Alongside the credentials, validated once at connection. Treat it as part of the identity of the connection, not as configuration.
  • Assume multi-company from day one Carry the company ID through every path even when there is only one. Retrofitting it later touches everything.
  • Customers are two resources Companies and individuals are separate endpoints with different shapes, resolved through _href links. "List all customers" is always two calls and a merge.

The webhook coverage is the best here, and it is worth using

Around 110 events, spanning jobs and their stages, quotes, invoices, payments, customers, sites, purchase orders, receipts, schedules and stock allocation. Job stage transitions alone — pending, in progress, complete, invoiced, archived — give you enough to drive a real workflow without polling for anything.

And they are signed. A SHA1 HMAC hexdigest of the body in an X-Response-Signature header, keyed with a secret you set on the subscription, with Simpro recommending a constant-time comparison. That is a materially better security position than ServiceM8’s unsigned events, and it is the kind of difference that never appears in a feature comparison because neither vendor markets it.

The gap is retry behaviour. Simpro publishes no retry policy at all, so what happens when your endpoint is down for ten minutes is undocumented. Build as though delivery is best-effort: acknowledge fast, queue internally, and keep a periodic reconciliation pass using If-Modified-Since to catch whatever the webhooks did not bring you. That is the right architecture regardless, and here it is not optional.

Rate limits and what breaks at scale

Ten requests a second per client build, with a 429 on everything above it until you slow down. There is no published daily cap, which makes Simpro more forgiving than most of the register for sustained work and less forgiving for bursts.

Simpro’s own documented answer to the limit is worth following rather than working around: POST and PATCH /multiple/ batch routes, display=all to pull subresources in one call rather than N+1, and — for genuinely high-volume extraction — a note telling you to contact them about alternatives that are not the API at all. A vendor saying "our API is the wrong tool for this" is unusual and useful.

Pagination is the tightest here: 30 results by default, 250 maximum. Combined with ten a second, a full historical extract of a large build is a scheduled overnight job, not something you run while the client is on the phone. And the 14-day refresh token expiry means any integration that goes quiet over a shutdown period needs a human to reconnect it in January.

What Simpro’s documentation supports — and the caveat on each. Source: Simpro developer documentation, fetched 1 September 2026.
  Simpro
Read records on demand Yes 10 a second per build. 30 results by default, 250 maximum, with rich filtering and If-Modified-Since.
Write records in Partly PATCH almost everywhere — very few handlers support PUT, and ID cannot be posted.
Know the moment something changes Yes Around 110 events, the widest coverage of the nine, including every job stage transition.
Verify an event came from them Yes SHA1 HMAC in X-Response-Signature, keyed with a secret you set. Constant-time comparison recommended.
Recover after an outage Partly No retry policy is published. Reconcile with If-Modified-Since rather than trusting delivery.
Bulk load history Yes POST and PATCH /multiple/ routes exist as the documented answer to the rate limit. Batch delete caps at 250.
Keep data in Australia Not assessed Simpro is Brisbane-headquartered but does not publish where build data is stored.

What Simpro does not publish

3 of the thirteen fields we track are simply absent from Simpro’s documentation: what happens when a webhook delivery fails, where your client’s data physically sits and whether API access itself costs anything.

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 Simpro 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 Simpro 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

Isn’t Simpro enough on its own?

Very often, yes — and if it is, we will say so and there is no engagement. Simpro 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 Simpro and then into something else, or a decision waiting because two systems disagree. If everything you need lives inside Simpro, 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.

Book a free Leak Check