Skip to navigation

Landscapes

A landscape is the primary workspace in IcePanel. It holds a complete C4 architecture model including all objects, connections, diagrams, flows, and versions.


What a landscape contains

Each landscape is versioned. All models like objects, connections, diagrams, flows, and domains live inside a version of a landscape.

When you create a landscape, IcePanel automatically creates an initial latest version that you can modify immediately.

Create a landscape:

POST
/v1/organizations/:organizationId/landscapes
import { IcePanelClient } from "@icepanel/sdk";
async function main() {
const client = new IcePanelClient({
apiKey: "YOUR_API_KEY_HERE",
});
await client.organizations.landscapes.create({
organizationId: "organizationId",
name: "string",
});
}
main();

The response returns both the landscape and the initial version objects.

List all landscapes in your organization:

GET
/v1/organizations/:organizationId/landscapes
import { IcePanelClient } from "@icepanel/sdk";
async function main() {
const client = new IcePanelClient({
apiKey: "YOUR_API_KEY_HERE",
});
await client.organizations.landscapes.list({
organizationId: "organizationId",
});
}
main();

URL patterns

Landscape endpoints are available in two forms.

Organization-scoped (includes org context, useful when you have the org ID in scope):

GET /organizations/{organizationId}/landscapes/{landscapeId}

Landscape-scoped (shorter, useful when you already know the landscape ID):

GET /landscapes/{landscapeId}

All version-scoped resources (model objects, diagrams, flows, etc.) use only the landscape-scoped pattern:

GET /landscapes/{landscapeId}/versions/{versionId}/model/objects

You can also specify latest as a shorthand for getting the latest version:

GET /landscapes/{landscapeId}/versions/latest/model/objects

Duplicate vs copy

IcePanel provides two operations for replicating a landscape:

OperationDescription
DuplicateCreates a full copy of the landscape within the same organization, including all versions and model content
CopyCopies the model content of a specific version into a different target landscape. This is useful for merging two models or seeding a new landscape from an existing one

Duplicate a landscape:

POST
/v1/landscapes/:landscapeId/duplicate
import { IcePanelClient } from "@icepanel/sdk";
async function main() {
const client = new IcePanelClient({
apiKey: "YOUR_API_KEY_HERE",
});
await client.landscapes.duplicate({
landscapeId: "landscapeId",
body: {
name: "string",
},
});
}
main();

Copy to another landscape:

POST
/v1/landscapes/:landscapeId/copy
import { IcePanelClient } from "@icepanel/sdk";
async function main() {
const client = new IcePanelClient({
apiKey: "YOUR_API_KEY_HERE",
});
await client.landscapes.copy({
landscapeId: "landscapeId",
targetLandscapeId: "targetLandscapeId",
});
}
main();