Integrations / ERP / Xero
Xero Integration Guide for Production Scheduling with SkyPlanner APS
This Xero integration guide shows Xero advisors, consultants and IT teams how to connect Xero to SkyPlanner APS. SkyPlanner integrates with Xero in both directions over the Xero Accounting API and Projects API:
- Contacts, tracked items with quantity on hand, accepted quotes and purchase orders with their arrival dates flow in.
- The planned finish date goes back as a note in each quote’s history.
- Finished orders go back as draft sales invoices with the quote’s lines and reference, and the quote moves to Invoiced.
- Logged hours on project work go back as Xero Projects time entries.
- Xero webhooks report contact and invoice changes, and SkyPlanner webhooks push schedule changes as they happen.
Xero is accounting software, so it holds no bills of materials, routings, machines or production orders. Workstations, process steps, shifts and setup times live in SkyPlanner. The SkyPlanner team configures the integration to your Xero organization during onboarding and supports it after go-live. This guide is for advisors and developers who want to take part, or to build on SkyPlanner’s documented REST API (API reference) themselves.
The Xero Accounting API
Xero is one multi-tenant cloud product, and every organization runs the same API. The Accounting API is a REST API at https://api.xero.com/api.xro/2.0/, with JSON or XML. Each call names the organization in the Xero-tenant-id header. (source)
The endpoints a scheduler needs:
- Master data:
/Contacts(customers and suppliers),/Items(Code, IsTrackedAsInventory, QuantityOnHand). - Demand:
/Quotes(Status ACCEPTED, LineItems), and for workshops that invoice first,/Invoiceswith Type ACCREC. - Supply:
/PurchaseOrders(DeliveryDate, ExpectedArrivalDate, LineItems with ItemCode). - Write-back:
/Quotes/{QuoteID}/History,/Invoices,/Quotes, and the Projects API athttps://api.xero.com/projects.xro/2.0/projects/{projectId}/time.
Every list endpoint accepts an If-Modified-Since header, so each sync reads only what changed. Creates and updates go in batches. There is no bill of materials, routing or production order endpoint.
Authentication, scopes and limits
Xero uses OAuth 2.0. A Xero admin signs in once, approves the app and picks the organization. The app requests offline_access to keep the connection with refresh tokens. (source)
Xero is replacing broad scopes with granular ones, and new apps get granular scopes. A scheduling integration needs:
accounting.invoicesfor quotes, invoices, purchase orders and itemsaccounting.contactsfor customers and suppliersaccounting.settings.readfor item settingsprojectsfor time entriesoffline_access
Xero limits calls per organization (concurrent, per minute and per day) and per app, and returns HTTP 429 with a Retry-After header when an app goes over. The daily allowance and the number of connected organizations depend on the app’s partner tier. Both are on Xero’s API limits page. Webhooks, If-Modified-Since reads and batched writes keep a scheduling integration well inside them.
On the SkyPlanner side, the REST API authenticates with an API token in the Authorization-Token header (SkyPlanner Settings > API) and is documented in Swagger/OpenAPI. The integration tutorial walks through the first calls.
Webhooks
“Webhooks allow you to subscribe to certain events that happen in Xero.” (source) The events that matter for scheduling are Contact and Invoice, each with CREATE and UPDATE.
How they work:
- One webhook per app covers every connected organization.
- Each delivery holds an events array with the resource ID and event type. The receiver reads the resource afterwards.
- Every delivery is signed with an
x-xero-signatureheader, built from the app’s webhook key. Xero sends an “Intent to receive” check before it starts delivering. - Xero retries failed deliveries and disables a webhook that keeps failing, so the receiver answers fast and does the work after.
Quotes, items and purchase orders have no webhook events. SkyPlanner reads them on a short polling cycle with If-Modified-Since, which costs one call per entity when nothing has changed.
Data mapping
| Xero object (endpoint) | SkyPlanner object | Direction | Frequency |
|---|---|---|---|
Contact, IsCustomer (/Contacts) | Customer (external_identifier, delivery_priority) | Xero → SkyPlanner | Initial load, then on webhook |
Item, tracked and untracked, with QuantityOnHand (/Items) | Products and materials, stock | Xero → SkyPlanner | Initial load, then by If-Modified-Since |
Quote, Status ACCEPTED, with LineItems (/Quotes) | Order (external_order_number, delivery_date), jobs per line | Xero → SkyPlanner | Polling by If-Modified-Since |
Invoice, Type ACCREC (bill-first workshops) (/Invoices) | Order and jobs | Xero → SkyPlanner | Real time via webhook |
PurchaseOrder with ExpectedArrivalDate or DeliveryDate (/PurchaseOrders) | Incoming material (estimated_delivery_date) | Xero → SkyPlanner | Polling by If-Modified-Since |
Quote history note (PUT /Quotes/{QuoteID}/History) | Planned finish date | SkyPlanner → Xero | On schedule change |
Invoice, Type ACCREC, Status DRAFT, Reference = quote number (POST /Invoices) | Finished order | SkyPlanner → Xero | When the order is completed |
Quote Status INVOICED (POST /Quotes) | Finished order | SkyPlanner → Xero | When the invoice is created |
Projects time entry (POST /projects/{projectId}/time) | Mobile Confirmations, timelogs | SkyPlanner → Xero | As work is logged |
| Not in Xero | Workstations, process steps, shifts, absences, setting time matrix, tools, operator counts, alternative workstations | Maintained in SkyPlanner | Set up during onboarding |
Integration patterns
1. Initial master data load. Page through contacts and items, then open purchase orders and accepted quotes. Create SkyPlanner customers with the Xero ContactID as external_identifier, and products and materials with the item code as the key. Then build what Xero does not hold: workstations, process steps per product, shifts, leave and setup times. CSV or Excel import is the fastest route for process steps.
2. Order sync. Poll quotes with If-Modified-Since. When a quote turns ACCEPTED, SkyPlanner creates an order with the quote number as external_order_number. The delivery_date comes from the field your workshop uses for the promised date, mapped during onboarding. Each line item becomes jobs through the product’s process steps. Purchase order lines become incoming material on their expected arrival date, so jobs wait for the delivery. A nightly full read of open quotes and purchase orders catches anything missed.
3. Schedule and completion write-back. Three calls put the results into Xero:
- PUT
/Quotes/{QuoteID}/Historyadds a note with the planned finish date. An accepted quote allows contact and note changes only, so the history note is where the date lives. (source) - When the order is completed, POST
/Invoicescreates a sales invoice with Type ACCREC, Status DRAFT, the quote’s contact and line items, and the quote number as Reference. Your bookkeeper approves and sends it in Xero. - POST
/Quoteswith the QuoteID and Status INVOICED closes the quote. Accepted to Invoiced is a valid status change in the Accounting API.
4. Shop-floor confirmations and project time. Operators log work with SkyPlanner Mobile Confirmations, Production Timer or Quick Log Mode. Progress updates the schedule at once, and Autopilot replans the rest. For project work, SkyPlanner posts the hours as time entries on the project task with the Xero user, date and duration. (source)
5. Ownership and conflict rules. Write them down before go-live:
| Data | Owner |
|---|---|
| Contacts, items, prices, quotes, purchase orders, invoices, accounting | Xero |
| Workstations, process steps, shifts, absences, setting time matrix, tools, alternative resources | SkyPlanner |
| Job sequence, start and end times, workstation per job | SkyPlanner |
| Planned finish note on the quote | SkyPlanner, written to Xero |
| Draft invoice for finished orders, project time | SkyPlanner creates, Xero owns after approval |
Typical project steps
Implementation is normally completed within weeks after onboarding starts. Before that, the 30-day free trial runs on your own data from a Xero CSV export of contacts, products and open quotes.
The project itself contains:
- Connect. A Xero admin approves SkyPlanner and picks the organization.
- Demand object. Agree whether accepted quotes or sales invoices start production.
- Mapping. Fix the mapping table, item codes, invoice accounts and tax defaults, and the ownership rules.
- Initial load. Contacts, items, open purchase orders, accepted quotes.
- Production model. Workstations, process steps per product, shifts, setting time matrix, tools and operator counts in SkyPlanner.
- Sync. Webhooks for contacts and invoices,
If-Modified-Sincepolling for quotes, items and purchase orders, plus nightly reconciliation. - Write-back. Quote notes first, then draft invoices and quote status, then project time where used.
- Parallel testing and go-live. Compare SkyPlanner dates with your current plan, have your bookkeeper check the first draft invoices, then switch write-back on.
What to plan for in a Xero integration
- No production objects in Xero. Keep process steps per product in SkyPlanner, keyed to the Xero item code. Keep item codes stable.
- Quotes have no webhook. Poll them with
If-Modified-Sinceon a short cycle, inside the per-minute and daily limits. - Accepted quotes are locked. Only contact details and notes change after acceptance, so the promised date is read once at acceptance and the planned date is written as a history note.
- Stock follows invoices and bills. Xero moves quantity on hand through sales invoices, bills and credit notes on tracked items. Agree with your bookkeeper how finished goods and used materials are accounted for.
- Project time needs Xero users. Time entries belong to a Xero user. Decide which operators post time to Xero Projects, and keep the rest in SkyPlanner.
- Granular scopes. Request granular scopes from the start, since broad scopes are being retired.
- App tier. The partner tier sets how many organizations an app can connect and how many calls it gets per day. Plan the tier with the number of plants.
The Xero integration: who configures and supports it
The work covers your items, quotes, purchase orders and how finished work reaches billing. It adds what Xero does not hold: workstations, process steps, shifts, setting time matrix, tools, operator counts and alternative resources.
- The SkyPlanner team configures it during onboarding and supports it after go-live. Every workshop sets up items, quotes and stock differently in Xero, and this is where that know-how goes.
- Your Xero advisor or integration partner can build it. SkyPlanner provides the REST API, Swagger/OpenAPI documentation and webhooks.
- Your own developers can build on it with an API token. An API token is enough to start, and the SkyPlanner team assists when needed. Product documentation, including purchase orders and the products and materials API, is in the SkyPlanner docs.
SkyPlanner starts from 199 € per month with 5 workstations included, billed monthly. The integration is quoted up front for your process and needs, together with your plan, so you see the full cost before you start. See pricing, features and what Xero covers on its own in Does Xero have production scheduling? The overview is on the Xero page, and other systems are in all integrations.
SkyPlanner reviews from manufacturers
2 hsaved every week
“SkyPlanner has taken our production planning from Excel spreadsheets to real-time production optimization.”
Kalle Kalliomäki, Supply Chain Specialist
UTU · Electrical switchboards and switchgear
Production planning saves 2 hours of working time every week, and a new work queue reaches the line in seconds.
+90%production efficiency
“Efficiency has gone up 90% in production.”
Abdul Rucyinga, Head of IT
Laboratory & Allied · Pharmaceutical manufacturing
Production efficiency is up 90%, and a three-month optimized plan across all workstations takes under 30 minutes.
Fewerstoppages from material shortages
“The value SkyPlanner brings us is that it is a tool that works in daily use, especially for setting delivery dates.”
Tommi Männistö, Production Planning Manager
Eskomatic · Contract machining
Automatic load scheduling gives more accurate delivery dates, and production stoppages caused by material shortages have fallen sharply.
1,000swork orders scheduled automatically
“Production is under control in a different way, and our understanding of capacity is on a completely different level.”
Hannu Ryynänen, CEO
Mamec · Industrial mixers, pumps and high-tech contract manufacturing
Thousands of work orders are scheduled automatically, with a real-time view of production for the whole organization.
FAQ
Does Xero have an API for production data?
Xero has the Accounting API and the Projects API, both REST with OAuth 2.0. They cover contacts, items, quotes, invoices, purchase orders and time entries. Production data such as workstations and process steps lives in SkyPlanner.
Can SkyPlanner write back to Xero?
Yes. SkyPlanner adds the planned finish date to each quote’s history, creates a draft sales invoice with the quote’s lines when the order is finished, moves the quote to Invoiced and posts project time entries.
Does Xero push changes in real time?
Xero webhooks cover contacts and invoices. SkyPlanner reads quotes, items and purchase orders changed since its last sync with If-Modified-Since and reconciles nightly, so a new accepted quote reaches the schedule quickly.
Where do bills of materials, routings and machines come from if Xero has none?
From SkyPlanner. You set up workstations, process steps per product, shifts and setup times once, by hand or with a CSV or Excel import. Each product links to the Xero item code, so new accepted quotes schedule automatically.
Can we test SkyPlanner before building the integration?
Yes. The 30-day free trial supports up to 20 workstations with a CSV import from Xero, no credit card needed. Start the trial, or talk to sales to scope the integration.