Migration Guides

API changes in the 31 October 2026 release

What scripts, automations and integrations that call the Phasio API need to update for the 31 October 2026 release, with a prompt for your AI coding assistant

These changes are live on the EU platform since 31 October 2026, about 13:00 CET. The US platform gets them with its next release. No endpoint was removed. Error responses keep the usual body: {"error": "<CODE>", "message": "..."}.

There are three ways to use this page:

  1. Give the prompt below to your AI coding assistant (Claude Code, Codex, Cursor or similar). It finds the affected code and fixes it.
  2. Connect your assistant to the Phasio docs MCP server, so it reads this page and the rest of the developer docs itself.
  3. Read the changes below. Each one says who must act and what to do.

Update your integration with an AI assistant

Open your assistant in the project that calls Phasio, and paste this prompt.

Phasio changed its Manufacturer API in the release of 31 October 2026. It is live on the EU platform since that day and comes to the US platform with its next release. Audit this codebase for code that calls the Phasio API and fix what the release breaks.

Full details: https://docs.phas.io/developers/migrations/api-changes-october-2026 (add .md to the URL for Markdown). If the phasio-docs MCP server is connected, call get_page with the pathname /developers/migrations/api-changes-october-2026 instead.

Steps:
1. Search the codebase for Phasio API calls: "/api/manufacturer/v1/", "phas.io", "phasio_", and every path named below.
2. For each item A to G, say whether it applies, with the file and line that shows it.
3. Fix the items that apply. Keep each change small and in the style of the code.
4. Report what you changed, which items do not apply, and what you could not check from the code (for example, which Phasio plan the account has).

A. Tokens. A token without a "permissions" claim now gets 401 on every /api/manufacturer/v1/ call. Tokens from Phasio's previous login system never had it. Send the Phasio API key (it starts with phasio_) as the Bearer token on each request. Replace any hard-coded or stored JWT, such as a token copied from the browser.
B. Plan modules. Without the Pro or Factory Floor module, gated endpoints return 403 with error MODULE_NOT_SUBSCRIBED. Pro: part specifications with their metadata and attachments, part revision lists, POST /catalog, POST /assemblies/{id}/catalog. Factory Floor: production steps, work order dates, requisition backlog and batch transitions, CAMSPEC, order traveller. Treat this 403 as permanent, not retryable. Code that matched WORKFLOWS_MODULE_DISABLED on POST /requisition/work-orders, /requisition/batch-status or /requisition/create-batches must match MODULE_NOT_SUBSCRIBED. In GET /analytics/dashboard, treat production, previous.production and materials as nullable.
C. Totals in cents. Totals now always round up to the cent, never to a whole number. Remove any assumption that totals are whole numbers, and any use of isRoundPriceToWholeNumberEnabled or roundPriceToWholeNumber.
D. Open quotes keep their price. A quote keeps the pricing it was given when pricing equations or material prices change. Remove logic that expects existing quotes to re-price after a pricing change.
E. List filters. A filter that cannot be parsed now returns 400 with error INVALID_FILTER instead of 500. Treat it as a fault in the request, not a retryable server error. URL-encode filter values, including "+".
F. Shipping. PUT /api/manufacturer/v1/order/{id}/shipping can return 400 with error ACCOUNTING_INVOICE_REFRESH_FAILED. The change was not saved, so try again.
G. Webhooks. The "expenses" list in order webhooks no longer includes deleted expenses.

Let your assistant read the docs over MCP

The Phasio docs serve an MCP server at https://docs.phas.io/api/mcp. It needs no sign-in and has three tools: search, list_pages, and get_page. This page's pathname is /developers/migrations/api-changes-october-2026.

To add it to Claude Code:

claude mcp add --transport http phasio-docs https://docs.phas.io/api/mcp

In Codex, Cursor or another client, add https://docs.phas.io/api/mcp as a remote MCP server (streamable HTTP). Without MCP, your assistant can read any page as Markdown by adding .md to its URL.

Manufacturer tokens need a permissions claim

Affects every /api/manufacturer/v1/... call.

  • Before: a token from Phasio's previous login system was still accepted.
  • After: a manufacturer token without a permissions claim gets 401. Tokens from the previous login system never had that claim, so they fail on every call.
  • Who is affected: a script or automation that sends a stored token instead of an API key.
  • What to do: send your API key (phasio_...) as the Bearer token on every request, as shown in Getting started. Phasio exchanges the key for a short-lived token on each request. Your existing API keys keep working.

On the EU platform, access tokens issued shortly before the release, such as an AI assistant's connection to Phasio MCP, were refused once until they refreshed. They last an hour, so this is over. A call that got 401 between 13:00 and 14:15 CET on 31 October 2026 may need running again.

Pro and Factory Floor endpoints need the module

Affects the Manufacturer API and Phasio MCP. Pro and Factory Floor features are now enforced on the API, as they are in the app. Without the module, the endpoint returns 403 with MODULE_NOT_SUBSCRIBED, and the message names the missing module, for example This needs a subscription to the PRO module. Not subscribed: PRO. A retry gets the same answer.

Paths are under /api/manufacturer/v1.

ModuleEndpoints
ProPOST and GET /part-specification, GET /part-specification/{id}, /part-specification/customer-organisation/{id}, /part-specification/part-revision/{id} and /part-specification/customer-reference; every /part-specification/{id}/metadata and /part-specification/{id}/attachments endpoint; GET /part-revision, /part-revision/design/{id} and /part-revision/requisition/{id}; PUT /part-revision/{id}/version-name; POST /catalog; POST /assemblies/{id}/catalog
Factory FloorGET /production-step/paginated, PATCH /production-step/move-batches, PATCH /production-step/{id}/rename, PATCH /work-orders/{id}/dates, GET /requisition/backlog, GET /requisition/batch-transitions, POST /camspec/download, POST /camspec/export, GET /document/{id}/order-traveller

Without the module, these also change:

  • POST /requisition/work-orders, /requisition/batch-status and /requisition/create-batches already needed Factory Floor. Their error code changes from WORKFLOWS_MODULE_DISABLED to MODULE_NOT_SUBSCRIBED.
  • GET /analytics/dashboard returns production and previous.production as null without Factory Floor, and materials as null without Pro.
  • Phasio MCP tools for these features return a tool error that names the module.
  • Without Pro, new quotes no longer apply a customer's fixed catalogue prices, and a connected accounting system is treated as not connected, so new orders and payments stop syncing to it without an error.

What to do: if your integration calls these endpoints, check that your plan includes the module. Contact Phasio support if you are not sure.

Smaller changes

  • Totals round to the cent. The Round price to whole number setting is removed, so totals always round up to the cent, for example 124.61 where you used to get 125. isRoundPriceToWholeNumberEnabled and roundPriceToWholeNumber are gone.
  • Open quotes keep their price. A quote keeps the pricing equation version and material prices it was priced on, so publishing a new equation or changing a material price no longer moves quotes you already sent. To re-price a quote, edit it in Phasio and choose Update all to latest pricing.
  • Bad list filters return 400. A filter that cannot be parsed or converted on a manufacturer list endpoint (orders, customers, customer organisations, carts, parts, part specifications, assemblies, projects, production steps, file access events, and reports) now returns 400 with INVALID_FILTER instead of 500 with INTERNAL_ERROR. Typical causes are a date-time with a time zone, or a + that is not URL-encoded. Fix the request instead of retrying it.
  • Shipping changes update the accounting invoice. PUT /api/manufacturer/v1/order/{id}/shipping on an unpaid order that already has a QuickBooks, Xero or Zoho invoice now updates that invoice too. If the update fails, the call returns 400 with ACCOUNTING_INVOICE_REFRESH_FAILED and the shipping change is not saved. Try again.
  • Order webhooks leave out deleted expenses. The expenses list in order webhook payloads no longer includes deleted expenses. Payloads and event types are otherwise unchanged.

Last updated on

On this page