---
title: "Create a profile tab"
method: POST
path: "/v1/org/{orgId}/profile-tab"
tags: ["profile-tab"]
---

# Create a profile tab

`POST /v1/org/{orgId}/profile-tab`

## Path parameters

- `orgId` string, required

## Request body

- CreateProfileTab
  - `label` string, required — human-readable name of profile tab
  - `labelTr` Translations
    - `values` object, required
  - `blocks` Block[], required — ordered list of blocks contained by profile tab
    - `type` 'CONTENT' | 'TASK' | 'CALENDAR' — the type of this block, or null if legacy
    - `label` string — human readable label for this block
    - `height` object — fixed height in px, or expand if “stretch”, or fit to contents if null
    - `targetFilter` string — filter condition expression applied to this block, used to determine whether the content appears on the target or not
    - `readFilter` string — filter condition expression applied to this block, relative to the viewer
    - `formIds` string[] — form ids to surface responses in this block
    - `fields` string[] — fields retrieved in this block
    - `title` string — title to show in block header
    - `content` string — template content returned in this block
    - `contentTr` Translations
      - `values` object, required
    - `primaryButton` LayoutButton
      - `url` string, required
      - `label` string, required
    - `secondaryButton` LayoutButton
      - `url` string, required
      - `label` string, required
  - `layout` Layout
    - `rows` LayoutRow[], required
      - `columns` LayoutColumn[], required
        - `blocks` Block[], required
          - `type` 'CONTENT' | 'TASK' | 'CALENDAR' — the type of this block, or null if legacy
          - `label` string — human readable label for this block
          - `height` object — fixed height in px, or expand if “stretch”, or fit to contents if null
          - `targetFilter` string — filter condition expression applied to this block, used to determine whether the content appears on the target or not
          - `readFilter` string — filter condition expression applied to this block, relative to the viewer
          - `formIds` string[] — form ids to surface responses in this block
          - `fields` string[] — fields retrieved in this block
          - `title` string — title to show in block header
          - `content` string — template content returned in this block
          - `contentTr` Translations
            - `values` object, required
          - `primaryButton` LayoutButton
            - `url` string, required
            - `label` string, required
          - `secondaryButton` LayoutButton
            - `url` string, required
            - `label` string, required
      - `format` string, required
  - `status` 'ACTIVE' | 'INACTIVE', required — status of the profile tab
  - `targetFilter` string — filter that controls on which profiles this tab will appear
  - `readFilter` string — filter that controls which viewers can read this profile tab. The profileTab:read permission, if present, overrides this filter
  - `sort` integer — sort order

## Response `201`

created

- ProfileTab
  - `id` string, required — globally unique id
  - `orgId` string, required — parent organization id
  - `label` string, required — human-readable name of profile tab
  - `labelTr` Translations
    - `values` object, required
  - `blocks` Block[], required — ordered list of blocks contained by profile tab
    - `type` 'CONTENT' | 'TASK' | 'CALENDAR' — the type of this block, or null if legacy
    - `label` string — human readable label for this block
    - `height` object — fixed height in px, or expand if “stretch”, or fit to contents if null
    - `targetFilter` string — filter condition expression applied to this block, used to determine whether the content appears on the target or not
    - `readFilter` string — filter condition expression applied to this block, relative to the viewer
    - `formIds` string[] — form ids to surface responses in this block
    - `fields` string[] — fields retrieved in this block
    - `title` string — title to show in block header
    - `content` string — template content returned in this block
    - `contentTr` Translations
      - `values` object, required
    - `primaryButton` LayoutButton
      - `url` string, required
      - `label` string, required
    - `secondaryButton` LayoutButton
      - `url` string, required
      - `label` string, required
  - `layout` Layout
    - `rows` LayoutRow[], required
      - `columns` LayoutColumn[], required
        - `blocks` Block[], required
          - `type` 'CONTENT' | 'TASK' | 'CALENDAR' — the type of this block, or null if legacy
          - `label` string — human readable label for this block
          - `height` object — fixed height in px, or expand if “stretch”, or fit to contents if null
          - `targetFilter` string — filter condition expression applied to this block, used to determine whether the content appears on the target or not
          - `readFilter` string — filter condition expression applied to this block, relative to the viewer
          - `formIds` string[] — form ids to surface responses in this block
          - `fields` string[] — fields retrieved in this block
          - `title` string — title to show in block header
          - `content` string — template content returned in this block
          - `contentTr` Translations
            - `values` object, required
          - `primaryButton` LayoutButton
            - `url` string, required
            - `label` string, required
          - `secondaryButton` LayoutButton
            - `url` string, required
            - `label` string, required
      - `format` string, required
  - `status` 'ACTIVE' | 'INACTIVE', required — status of the profile tab
  - `targetFilter` string — filter that controls on which profiles this tab will appear
  - `readFilter` string — filter that controls which viewers can read this profile tab. The profileTab:read permission, if present, overrides this filter
  - `sort` integer — sort order
  - `createId` string — created by user id
  - `createBehalfId` string — created on behalf of user id
  - `createAttribution` Attribution
    - `principalUserId` string
    - `agentUserIds` string[]
    - `eventId` string
    - `aiChatId` string
    - `aiToolUseId` string
    - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
  - `createAt` string — created timestamp
  - `updateId` string — last updated by user id
  - `updateBehalfId` string — last updated on behalf of user id
  - `updateAttribution` Attribution
    - `principalUserId` string
    - `agentUserIds` string[]
    - `eventId` string
    - `aiChatId` string
    - `aiToolUseId` string
    - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
  - `updateAt` string — last updated timestamp
  - `deleteId` string — deleted by user id
  - `deleteBehalfId` string — deleted on behalf of user id
  - `deleteAttribution` Attribution
    - `principalUserId` string
    - `agentUserIds` string[]
    - `eventId` string
    - `aiChatId` string
    - `aiToolUseId` string
    - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
  - `deleteAt` string — deleted timestamp

## Other responses

- `400` — invalid data
- `401` — not authorized
- `403` — permission denied
- `404` — org not found

---

[API](https://skmtc.net/charthop/apis/charthop-api.md) · [All operations](https://skmtc.net/charthop/apis/charthop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/charthop/charthop-api/revisions/3040a9f4373f/schema)
