Plans and access
How the plan decides which areas open, and what happens when a subscription lapses.
Access to anything in Portline is two checks:
- Does the plan include the area? Each area has a feature (
core,fleet,warehouses,docks,telemetry,yard,api) and each tier or pack includes a set of them. Add-ons add single features on top. - Does the role reach the level? View, edit or approve, see Roles.
The app runs both checks to build the sidebar and gate pages and actions, so you never see a link you can't open. Postgres runs the same two checks independently in pl.can() for every row.
Plan to areas
| Area | Starter | Growth | Scale | Cold chain | Drayage & trucking | 3PL warehousing |
|---|---|---|---|---|---|---|
| Overview | Yes | Yes | Yes | Yes | Yes | Yes |
| Shipments | Yes | Yes | Yes | Yes | Yes | Yes |
| Containers | Yes | Yes | Yes | Yes | Yes | Yes |
| Fleet | No | Yes | Yes | No | Yes | Yes |
| Warehouses | No | Yes | Yes | Yes | No | Yes |
| Docks | No | Yes | Yes | Yes | Yes | Yes |
| Yard & gate | No | Yes | Yes | No | No | No |
| Messages | Yes | Yes | Yes | Yes | Yes | Yes |
| Team | Yes | Yes | Yes | Yes | Yes | Yes |
Reefer temperature in Containers needs the telemetry feature, which comes with Growth and the Cold chain pack, or as the Reefer monitoring add-on. On Starter you see the container register without the temperature chart.
Yard events are included from Growth up. A row names a Pruva vessel only when the event is linked to one. Starter sees the area under "Available" with a lock. The API stays on Scale and is not built.
Who changes the plan
Nobody inside the workspace. The plan, add-ons, status, seat count and term dates live in pl_subscriptions, and signed-in users have no write grant on that table. Only the service role writes it: the store's checkout, or pnpm plan:set locally. The one thing an owner can do is cancel renewal, see Billing and terms.
When a subscription lapses
| Status | Access | Notes |
|---|---|---|
active | Full access | Also applies to trialing workspaces. |
grace | Full access | Up to 7 days after the period ends while payment is sorted out. |
lapsed | Read-only | Everyone can still read and export. Every write is refused, by the app and by Postgres. |
| After 90 days lapsed | Data deleted | Workspace data is kept for 90 days, then removed. |
During grace everything works as normal. Once a workspace is lapsed, every role behaves like a viewer: reads work, writes fail in the app and in the database. Data is kept for 90 days after that.