Workspaces and Campaigns
In Perspective, a workspace is an organizational container that groups related campaigns. A campaign is Perspective's internal term for a funnel — the same funnel you retrieve contacts from and query metrics against. The workspace model exists so that teams can manage multiple funnels under a shared namespace (for example, a workspace per client, per product line, or per business unit).
Why start with workspaces
The GET /v1/workspaces endpoint is the recommended entry point for any REST API integration. It returns a single response that tells you everything you need to start working:
- Every workspace the account has access to, with its
idandname - Every campaign (funnel) within each workspace, with the campaign
id,name, and publication status (onlineoroffline)
The campaign id — for example, fnl_xyz789 — is the funnelId you pass to all other endpoints: contact listing, contact creation, KPI queries, chart queries, insight queries, and more. Until you have a funnelId, you cannot call most of the API. Listing workspaces is how you get those IDs.
See the Quickstart for a concrete step-by-step example that starts with GET /v1/workspaces.
The workspace and campaign objects
A workspace response contains:
| Field | Type | Description |
|---|---|---|
id | string | Unique workspace identifier. |
name | string | Human-readable workspace name. |
campaigns | array | The funnels inside this workspace. |
Each campaign inside a workspace has:
| Field | Type | Description |
|---|---|---|
id | string | The funnel ID. Use this as funnelId in contacts and metrics endpoints. |
name | string | Campaign display name. |
status | string | "online" if published, "offline" if not yet live. |
See List Workspaces for the full response schema and an example.
How IDs flow through the API
Once you have a funnelId from the workspace response, it unlocks the rest of the API:
GET /v1/workspaces
→ campaigns[].id (this is your funnelId)
├── GET /v1/funnels/{funnelId}/contacts
├── POST /v1/funnels/{funnelId}/contacts
├── GET /v1/funnels/{funnelId}/contacts/{contactId}
├── PUT /v1/funnels/{funnelId}/contacts/{contactId}/values
├── GET /v1/funnels/{funnelId}/metrics/kpis/{subtype}
├── GET /v1/funnels/{funnelId}/metrics/charts/{subtype}
└── GET /v1/funnels/{funnelId}/metrics/insights/{insightId}
If you already know your funnel IDs (for example, from a previous integration or from the Perspective dashboard URL), you can call the contact and metrics endpoints directly without calling workspaces first. However, listing workspaces is the most reliable way to discover IDs programmatically.
Campaigns vs funnels: same thing, different name
You will see both terms in this documentation. The REST API uses "funnel" in its route paths and the id prefix (fnl_). The workspace endpoint uses "campaign" to match Perspective's internal organizational model. These refer to the same entity: a funnel ID and a campaign ID are the same value.
Workspaces in the MCP
The MCP server exposes a tool for listing workspaces, which AI agents use to orient themselves before working with a specific funnel or campaign. See MCP Workspaces tools for details.
Next steps
- List Workspaces reference — full response schema and error codes
- Quickstart — walk through discovering workspaces and making your first contact query
- Funnels — more about funnel IDs and creating funnels
- Contacts and CRM — using a
funnelIdto read and write contacts - Metrics and Analytics — using a
funnelIdto pull KPIs and charts