Orders, stock and suppliers, modelled the way you operate.
Orders, products, stock, suppliers and purchase orders become entities with your rules inside actions. A purchase order over a threshold needs a second approver, and a stock adjustment needs a reason. Finance and sales see the same customers.
Open orders on the same customers as sales and finance, purchase orders waiting for the right approver, and stock below its reorder point.
Operations, supply chain and back-office teams
Tell your agent how an order moves through your business. It writes the entities, the approval and adjustment actions, and the roles that may run them.
- Orders, products, stock, suppliers and purchase orders become entities with your rules inside actions.
- A purchase order over your threshold needs a second approver, and a stock adjustment needs a reason.
- Finance and sales see the same customers as operations, not a copy in another tool.
- Agents ask "what's late this week?" with the operator's own permissions.
What it covers
Orders
Orders and their lines with statuses that change only through your actions, linked to the same clients as sales and finance.
Stock
Stock per product and location. Every adjustment needs a reason and is kept with who made it.
Suppliers and purchase orders
Suppliers and purchase orders. Over your threshold, a second approver; nobody approves their own.
Margin and stock reports
Margin and stock models in the warehouse from your orders, costs and store data.
The company agent →
Ask what is late this week in Telegram. The company agent answers with the operator's own permissions.
Your store and carriers →
Store, marketplace and carrier APIs connect through API-key or OAuth 2.0 connections, with the credentials held by the platform.
Built from typed blocks
No new product to buy: the blocks below, written by an agent into your workspace's repository and deployed with one command.
$ segmentstream deploy
Every block ships together from one git repository your company owns. SegmentStream runs it.
- number
- status
- total
- client
- order_line
- confirm
- quantity
- unit price
- order
- product
- sku
- name
- unit cost
- stock_item
- supplier
- location
- on hand
- reorder point
- product
- adjust
- name
- payment terms
- purchase_order
- status
- total
- supplier
- raised by
- approve
- carrier
- tracking
- status
- order
- dispatch
The rule is code, not a setting someone can skip.
Every change goes through an action. The role that may run it is checked first, then the rule inside it. The same check applies to people in the app, to API keys and to agents over MCP.
export const PurchaseOrder = entity("purchase_order", {
description: "An order to a supplier. Over £5,000 it needs a finance approver.",
properties: {
status: p.select(PO_STATUS, { default: "draft", managed: true }),
totalMinor: p.integer({ min: 0 }),
},
relationships: {
supplier: rel.one("supplier", { inverse: "purchaseOrders" }),
raisedBy: rel.one(User, { inverse: "raisedPurchaseOrders" }),
},
}).actions((self) => ({
approve: action({
description: "Approve a draft order. Nobody approves their own.",
input: Schema.Struct({ order: self.ref }),
handler: ({ input, principal }) =>
Effect.gen(function* () {
const order = yield* self.get(input.order, { forUpdate: true });
if (order.raisedById === principal.id)
return yield* reject("Nobody approves their own order.");
if (order.totalMinor > 500_000 && !principal.roles.includes("finance"))
return yield* reject("Over £5,000 needs a finance approver.");
yield* self.update(order, { status: "approved" });
}),
}),
}));- spreadsheets
- Airtable bases
- light ERP modules such as Odoo, Katana or Cin7
- back-office SaaS
Our engineers model your orders, stock and suppliers with the people who run them, connect your store and carrier APIs, and run the new system beside your spreadsheets until the numbers match.
Enterprise, with our engineers
Our engineers model your orders, stock and suppliers with the people who run them, connect your store and carrier APIs, and run the new system beside your spreadsheets until the numbers match.
Self-serve, with your own agent
Tell your agent how an order moves through your business. It writes the entities, the approval and adjustment actions, and the roles that may run them.
Related solutions
Read more
Questions
How does it connect to our store and carriers?
Stripe is a ready-made connection. Shopify, other stores, marketplaces and carriers connect through API-key or OAuth 2.0 connections, with the credential held by the platform, never in your code.
Can an agent work in it?
Yes. Ask the company agent which orders are late this week and it answers with the operator's own permissions. Any agent connected over MCP works the same way.
What does the first version include?
Orders, stock and purchase orders with your rules, the app your team opens, and the reports you rely on. Our engineers build it on your data in a two-week pilot, or your own agent builds it from the same blocks.
Rather have it built for you? Start a pilot.
Our engineers model your orders, stock and suppliers with the people who run them, connect your store and carrier APIs, and run the new system beside your spreadsheets until the numbers match.
- One solution, on your data, in your own workspace
- First version live in two weeks
- Parity proven before anything is switched off
- Fixed scope and price, credited to your contract if you continue
Not ready for a pilot? Send the form anyway with your question. An engineer will reply, not a sales rep.
How the pilot worksYour company’s software, built by agents, owned by you.
$ segmentstream workspace create acme --region eu --subdomain acme
▸ Created workspace acme · database, warehouse and a private git repository
$ segmentstream workspace WORKSPACE-ID clone acme && cd acme
▸ your agent writes the five folders and runs the checks
$ git add -A && git commit -m "First version"
$ segmentstream deploy
▸ app, ontology API and MCP tools live for your invited members
Our engineers build the first version on your data in two weeks, at a fixed price.
Or join the waitlist for self-serve:
Self-serve opens to the waitlist first.