Simpro API Integration Guide: Auth, Endpoints, Rate Limits & Patterns (2026)

A developer-focused guide to Simpro's REST API, OAuth 2.0 authentication, the endpoints most integrations use (jobs, quotes, invoices, customers, cost.

The Simpro API is one of the more capable field-service management APIs in the Australian market, but the documentation assumes you already understand REST, OAuth, and Simpro's data model. This guide fills the gaps we wish we had known when we shipped our first Simpro integration.

Written for developers evaluating whether to build in-house, and for CTOs deciding whether to hire someone who already knows the platform.

What the Simpro API actually does

Simpro's REST API exposes almost everything the Simpro web UI does, jobs, quotes, invoices, customers, sites, employees, catalogues, cost centres, timesheets and reporting. If you can see it in the Simpro interface, you can read or write it via the API.

What it does not do (as of mid-2026):

  • Real-time webhooks. No native push notifications for events like "job status changed" or "invoice created". You poll or nothing.
  • Bulk operations. Every create/update is a single-record call. Batching 500 records means 500 HTTP requests.
  • Historical audit trail beyond a limited window. If you need who-changed-what-when for compliance, you need to record it yourself as you sync.

Authentication (OAuth 2.0)

Simpro uses OAuth 2.0 with the client credentials flow for server-to-server integrations. The steps:

  1. Get your customer to create an API user in their Simpro build under System → Setup → API, you cannot create it for them.
  2. They generate a client ID and client secret for the API user.
  3. You exchange those for an access token against https://{their-build}.simprosuite.com/oauth2/token.
  4. Every subsequent API call goes to https://{their-build}.simprosuite.com/api/v1.0/companies/{company-id}/....

Access tokens expire in 1 hour. Store the expiry timestamp with the token and refresh proactively, do not wait for a 401 to trigger a refresh in production.

Multi-company gotcha: a Simpro build can contain multiple companies. The company ID is a path parameter on every URL. Do not hard-code it; look it up from /companies at start-up and confirm with your customer which one to use.

Core endpoints most integrations use

Endpoint Purpose Notes
GET /jobs List jobs Filter by Stage, DateModified, CustomerID.
GET /jobs/{id} Full job detail Includes cost centres, sections, tasks. Big payload.
GET /quotes / POST /quotes Quotes CRUD Quotes can convert to jobs; watch for the parent-child link.
GET /invoices List invoices Includes progress claims and credit notes.
GET /customers / POST /customers Customer records Simpro distinguishes company customers and individual customers, separate endpoints.
GET /timesheets Employee time entries Filter by EmployeeID and date range.
GET /catalogs Catalogue items Needed for price-book sync.

Rate limits and pagination

Simpro rate limits are documented as 200 requests per minute per API user. In practice we have seen bursty patterns triggering earlier throttling. Assume:

  • Bake in exponential backoff on 429 responses (Simpro returns Retry-After, respect it).
  • Do not parallelise more than 4 concurrent requests to the same build.
  • Cache reference data (cost centres, catalogue items, tax codes), do not hit the API for these on every sync.

Pagination is the source of most Simpro integration bugs. The API returns paginated collections with page and pageSize query params. The default page size is small (25). Common bugs:

  • Reading only page 1 and assuming that is the full dataset (this passes acceptance testing on a demo build with 20 jobs, fails in production with 2,000)
  • Not handling the case where new records are added mid-pagination (record N+1 you see on page 2 was on page 1 five seconds ago)
  • Sorting order changes between pages if you do not specify an explicit orderby

Common integration patterns

Pattern 1: Simpro → Xero invoice sync

Most common integration by far. Poll GET /invoices?DateIssuedSince={last-sync}, transform to Xero's invoice schema, POST to Xero. Watch for:

  • Simpro tax codes → Xero tax rates mapping (not 1:1, needs a lookup table you configure per customer)
  • Progress claims and retention (Simpro handles these as separate invoice types)
  • Credit notes (Simpro allows partial credits with different reason codes)

Pattern 2: Job → payroll timesheet sync

GET /timesheets filtered by date range, transformed to your payroll platform's schema (Deputy, Employment Hero, MYOB Payroll, Xero Payroll). See our rostering-to-MYOB compatibility guide for platform-specific mapping notes.

Pattern 3: Two-way customer sync

Customers can be created in either Simpro or your CRM. Two-way sync needs:

  • A stable external ID stored on both sides (Simpro custom fields work well)
  • Conflict-resolution policy (last-write-wins is dangerous, usually one system is authoritative for a given field)
  • Deduplication logic (email + business name is more reliable than either alone)

Gotchas we have seen in production

  • Time zones. Simpro stores dates in the build's local timezone but the API returns them without offset. If your integration runs in a different timezone, off-by-hours errors sneak in.
  • Deleted records. Deletes do not appear in DateModified filters. If a job is deleted in Simpro, you will not detect it unless you compare the full ID list.
  • Cost centre changes. A cost centre renamed in Simpro keeps the same ID, but any downstream system doing a name-based join will silently break.
  • Sandbox drift. Simpro sandboxes do not stay in sync with production. Test on a copy of real data before go-live, not just the sandbox.

When to build vs when to hire

You can build a working Simpro → Xero invoice sync in a week of focused developer time. The maintainable version, the one that handles pagination correctly, retries safely, logs failures where someone will actually see them, and survives Simpro API version bumps, takes 3-6 weeks depending on scope.

Reasons to hire out:

  • Multiple downstream systems (Simpro → Xero AND payroll AND Power BI)
  • Compliance stakes (STP2, GST, audit trails)
  • You need it done in a fixed timeframe with a fixed price
  • The internal dev team has other priorities and this is the third integration this quarter

If you want a scoped conversation, our Simpro integration services page covers the workflows we build for Australian trade businesses and the fixed-price model we use.

Key takeaways

  • Simpro uses OAuth 2.0 with a company-specific base URL, every request needs the company code as a path parameter.
  • The API is well-documented but paginated aggressively; most integration bugs are pagination bugs.
  • Rate limits are per-company, not per-token, sharing a token across services will throttle you unexpectedly.
  • Job, quote, invoice, and customer endpoints are the 80% workload. Cost centres and pre-builds are where the mapping complexity lives.
  • Simpro does not currently offer real-time webhooks; you poll or you build your own change-detection layer.
Kasun Wijayamanna
Kasun Wijayamanna Founder & Lead Developer

Postgraduate Researcher (AI & RAG), Curtin University - Western Australia

View profile →

Meet the person

Written by the person who does the work

This article comes from real projects. If it raises a question about your own system, you can ask the founder directly.

HELLO PEOPLE designs, builds and looks after AI, software, app and data solutions for Australian businesses, with senior expertise on every project and a scope agreed before work starts. For an integration, that means every record lands where it should and both systems agree.

Since 2007, HELLO PEOPLE has delivered more than 100 projects from Perth for small and medium businesses across Australia: custom software and apps, system integrations, data migrations, reporting and dashboards, and AI that works inside the systems a business already runs.

I lead every engagement myself. I trained in accounting before moving into IT, hold accounting and IT professional qualifications and an MBA, and bring more than 20 years of experience across sales, service delivery, inventory and compliance. I am also a PhD candidate in AI at Curtin University, researching retrieval-augmented generation (RAG), so the technology is always judged by what it does for the business.

  • An old-fashioned service

    Small and boutique. The person who scopes your integration is the person who builds it, and the same person watches the first live syncs.

  • Quick responses

    No ticket queue and no account manager in between. You hear back within one business day, usually sooner.

  • A long-term partner

    The integration is the start, not the end. When you need the next system, integration or report, you call the same person, who already knows your business.

Ask the author

Still have a question?

Ask it here and it comes straight to the founder. No sales call, no obligation, and a real answer even if the answer is that you do not need us.

Kasun Wijayamanna, Founder Kasun Wijayamanna
Founder, replies within one business day

Ready to discuss your project?

Tell us what you're working on. We'll come back with a practical recommendation and clear next steps.

Australian owned and operated

Built here. Your data stays here.

  • No offshore development. Everything is written by our own team in Australia. Nothing is subcontracted overseas.
  • Your data stays onshore. Hosted in Australia, on infrastructure you own, under Australian law.
  • Every state, not just ours. Perth, Melbourne, Sydney, Brisbane, Adelaide and everywhere between.