Model Objects

Model objects are the nodes in your architecture graph. They represent the actors, systems, services, and components that make up your software architecture.


Object types

IcePanel uses the C4 model’s levels of abstraction. Each object type maps to a C4 level:

TypeC4 LevelDescription
rootThe root node of every domain. There is exactly one per domain. All top-level systems and actors are children of the root.
actorLevel 1A person or external role that interacts with your architecture (e.g. “Customer”, “Admin”)
systemLevel 1A top-level software system (e.g. “IcePanel”)
groupLevel 1A visual grouping (e.g. “Worker Pool”, “Subnet”)
appLevel 2A deployable unit (container) inside a system: a service, web app, mobile app, or queue
storeLevel 2A persistent data store inside a system: a database, blob store, or cache
componentLevel 3An internal building block inside an app or store

The parent–child hierarchy

Model objects form a tree. Every object except root has a parentId pointing to its parent:

root
├── actor: Customer
├── system: Payment Service
│ ├── app: API Gateway
│ │ ├── component: Auth Middleware
│ │ └── component: Rate Limiter
│ ├── app: Payment Processor
│ └── store: Transactions DB
└── system: Auth Platform (external)

Creating objects

To create a new object, specify the landscapeId and either the versionId or latest:

POST
/v1/landscapes/:landscapeId/versions/:versionId/model/objects
1import { IcePanelClient } from "@icepanel/sdk";
2
3async function main() {
4 const client = new IcePanelClient({
5 apiKey: "YOUR_API_KEY_HERE",
6 });
7 await client.model.objects.create("landscapeId", "versionId", {
8 body: {
9 name: "string",
10 parentId: "string",
11 type: "actor",
12 },
13 });
14}
15main();

Filtering objects

To find the root object (required as parentId when creating top-level objects), use the query parameter ?filter[type]=root

GET
/v1/landscapes/:landscapeId/versions/:versionId/model/objects
1import { IcePanelClient } from "@icepanel/sdk";
2
3async function main() {
4 const client = new IcePanelClient({
5 apiKey: "YOUR_API_KEY_HERE",
6 });
7 await client.model.objects.list("landscapeId", "versionId", {});
8}
9main();

The GET /model/objects endpoint supports the following filters:

Query parameterDescription
filter[type]Object type
filter[status]Status lifecycle value
filter[parentId]Direct parent ID
filter[domainId]Domain ID
filter[external]true / false
filter[tagIds][]One or more tag IDs
filter[teamIds][]One or more team IDs
filter[technologyIds][]One or more technology IDs
filter[labels][key]Label key-value pair
filter[name]Partial name match
filter[linked]true to return only objects with at least one link

Status lifecycle

Objects and connections share a four-state lifecycle representing their architectural status:

live → deprecated → removed → future
StatusDescription
liveCurrent, active element
futurePlanned but not yet built
deprecatedStill in use but being phased out
removedRetired, kept for historical reference

Use the filter[status] query parameter to retrieve only objects with a given status.