---
title: "Session-start context bundle (workspaces, custom conversions, custom columns, user, conversion-time mode default, tracker setup)."
method: GET
path: "/startup"
tags: ["Session"]
---

# Session-start context bundle (workspaces, custom conversions, custom columns, user, conversion-time mode default, tracker setup).

`GET /startup`

Context bundle for session start. Call once per session and cache for the
lifetime — state changes rarely.

## Envelope shape

```
{
  "responses": {
    "<key>": {
      "status":     <HTTP status, integer>,
      "statusText": "...",
      "body":       <deserialized JSON when status is 2xx; null otherwise>
    },
    ...
  }
}
```

Each sub-response carries its own HTTP status; the envelope itself is
**always 200** even when sub-responses fail. **Inspect each
`responses.<key>.status` — checking only the envelope status treats partial
failures as success.**

## Sub-responses relevant to API and MCP clients

| Key | Carries |
|---|---|
| `user` | `id`, `email`, `timezone`, `defaultClientId` |
| `workspaces.workspaces[]` | `{id, name, ...}` — ids accepted by the `workspaces` parameter on `/report` |
| `customConversions.customConversions[]` | cc1..cc20 with `{index, name, removed, ...}` — filter `!removed`; maps to `customConversions1`..`20` and `customRevenue1`..`20` report columns |
| `customColumns.customColumnsDefinitions[]` | User-defined derived metrics: `{name, label, format, expression, ...}`. Pass `name` as a `column` value on `/report`. `format` (`DECIMAL`/`PERCENT`/`INTEGER`) drives rendering; `expression` is the formula tree. Referencing an unknown name returns an error |
| `preferences.reportPreference.conversionRegistrationTime` | `VISIT` or `CONVERSION` — default for the `conversionTimeMode` parameter on `/report` |
| `setup.urls` | Tracker URL templates (`clickUrl`, `multiOfferClickUrl`, `postbackUrl`, `securePostbackUrl`, `trackingPixelUrl`, `trackingScriptUrl`). Use to validate a reported-broken URL against the canonical template |
| `setup.domains` | `redirectDomain` (active), `defaultRedirectDomain` (fallback), plus `dedicatedDomains[]` / `internalDomains[]` / `customDomains[]`. Each entry: `address`, `mainDomain`, `sslStatus`, plus `workspaceIds` (dedicated/custom only) — the field that answers "why does this domain work for workspace A but not B" |

The envelope also contains panel-only sub-responses (UI prefs, onboarding,
billing notifications, etc.). Ignore unrecognized keys; the set may change
without notice.

## What `/startup` does NOT contain

Fetch separately:
- **Traffic sources catalog** — `GET /traffic-source`. Each entry's
  `customVariables[]` array carries the per-slot labels and URL parameter
  names needed to interpret `customVariable1`..`10` report columns.
- **Affiliate networks catalog** — `GET /affiliate-network`.
- **Current usage counts** — no aggregate endpoint; use list endpoints'
  `totalRows`.

## Query parameters

- `invitationId` string

## Response `200`

Session-start context envelope (sub-responses keyed by name).

---

[API](https://skmtc.net/voluum/apis/voluum-api.md) · [All operations](https://skmtc.net/voluum/apis/voluum-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/voluum/voluum-api/versions/81b7ec5eb841/schema)
