---
title: "Add report columns"
method: POST
path: "/reports/{reportId}/columns"
tags: ["reports"]
---

# Add report columns

`POST /reports/{reportId}/columns`

Add columns to a report specified by a report ID. The source sheet columns are matched in these ways:

- [`type`, `title`] for **regular columns**
- [`type`, `systemColumnType`] for **system columns**
- [`type=TEXT_NUMBER`, `sheetNameColumn=true`] for the special **sheet name report column**

**Note:** All indexes of the columns must be equal. The columns will be added at the specified index, and existing columns at that index or greater will be shifted to the right. For example, if there are 5 columns in the report and a new column is added with index 2, the new column will be added at position 3 and the existing columns that were at positions 3 and 4 will be shifted to positions 4 and 5, respectively.

**Note:** You can combine multiple `CHECKBOX` columns or multiple `PICKLIST` columns from different sheets into a single report column, even if their underlying symbols differ. However, you can't combine a `CHECKBOX` column with a `PICKLIST` column, because they're different types.

**Note:** The system column type `AUTO_NUMBER` is matched together with columns having the same `title` and `type=TEXT_NUMBER`.

## Request body

- AddReportColumn[]
  - union
    - object
      - `title` string, required — Title of a column to match. **Note:** If you specified `primary=true` to match primary columns, you can set the resulting report column title to this value.
      - `type` 'CHECKBOX' | 'DATE' | 'DATETIME' | 'DURATION' | 'CONTACT_LIST' | 'MULTI_CONTACT_LIST' | 'PICKLIST' | 'MULTI_PICKLIST' | 'PREDECESSOR' | 'TEXT_NUMBER', required — Type of column to match. See [Column Types](/api/smartsheet/openapi/columns).
      - `systemColumnType` 'CREATED_BY' | 'CREATED_DATE' | 'MODIFIED_BY' | 'MODIFIED_DATE' | 'AUTO_NUMBER' — System column type to match. See [System Columns](/api/smartsheet/openapi/columns).
      - `sheetNameColumn` boolean — Set this to `true` to match the special "Sheet Name" report column.
      - `virtualId` integer — The virtual ID of this report column.
      - `index` integer, required — Column index or position. This number is zero-based. Indicates the position of the column in the generated report.
      - `hidden` boolean — Indicates whether the column is hidden.
      - `version` 0 | 1 | 2 — * `0`: CONTACT_LIST, PICKLIST, or TEXT_NUMBER. * `1`: MULTI_CONTACT_LIST. * `2`: MULTI_PICKLIST.
      - `width` integer — Display width of the column in pixels.
      - `validation` boolean — Indicates whether validation has been enabled for the column (value = **true**).
      - `autoNumberFormat` object — Specifies how to format values for an auto-generated numbers column.
        - `fill` string — Indicates zero-padding. It must be between 0 and 10 "0" (zero) characters.
        - `prefix` string — The prefix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}
        - `startingNumber` number — The starting number for the auto-ID.
        - `suffix` string — The suffix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}
    - object
      - `title` string, required — Title of a column to match. **Note:** If you specified `primary=true` to match primary columns, you can set the resulting report column title to this value.
      - `type` 'CHECKBOX' | 'DATE' | 'DATETIME' | 'DURATION' | 'CONTACT_LIST' | 'MULTI_CONTACT_LIST' | 'PICKLIST' | 'MULTI_PICKLIST' | 'PREDECESSOR' | 'TEXT_NUMBER', required — Type of column to match. See [Column Types](/api/smartsheet/openapi/columns).
      - `systemColumnType` 'CREATED_BY' | 'CREATED_DATE' | 'MODIFIED_BY' | 'MODIFIED_DATE' | 'AUTO_NUMBER', required — System column type to match. See [System Columns](/api/smartsheet/openapi/columns).
      - `sheetNameColumn` boolean — Set this to `true` to match the special "Sheet Name" report column.
      - `virtualId` integer — The virtual ID of this report column.
      - `index` integer, required — Column index or position. This number is zero-based. Indicates the position of the column in the generated report.
      - `hidden` boolean — Indicates whether the column is hidden.
      - `version` 0 | 1 | 2 — * `0`: CONTACT_LIST, PICKLIST, or TEXT_NUMBER. * `1`: MULTI_CONTACT_LIST. * `2`: MULTI_PICKLIST.
      - `width` integer — Display width of the column in pixels.
      - `validation` boolean — Indicates whether validation has been enabled for the column (value = **true**).
      - `autoNumberFormat` object — Specifies how to format values for an auto-generated numbers column.
        - `fill` string — Indicates zero-padding. It must be between 0 and 10 "0" (zero) characters.
        - `prefix` string — The prefix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}
        - `startingNumber` number — The starting number for the auto-ID.
        - `suffix` string — The suffix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}
    - object
      - `title` string, required — Title of a column to match. **Note:** If you specified `primary=true` to match primary columns, you can set the resulting report column title to this value.
      - `type` 'CHECKBOX' | 'DATE' | 'DATETIME' | 'DURATION' | 'CONTACT_LIST' | 'MULTI_CONTACT_LIST' | 'PICKLIST' | 'MULTI_PICKLIST' | 'PREDECESSOR' | 'TEXT_NUMBER', required — Type of column to match. See [Column Types](/api/smartsheet/openapi/columns).
      - `systemColumnType` 'CREATED_BY' | 'CREATED_DATE' | 'MODIFIED_BY' | 'MODIFIED_DATE' | 'AUTO_NUMBER' — System column type to match. See [System Columns](/api/smartsheet/openapi/columns).
      - `sheetNameColumn` boolean, required — Set this to `true` to match the special "Sheet Name" report column.
      - `virtualId` integer — The virtual ID of this report column.
      - `index` integer, required — Column index or position. This number is zero-based. Indicates the position of the column in the generated report.
      - `hidden` boolean — Indicates whether the column is hidden.
      - `version` 0 | 1 | 2 — * `0`: CONTACT_LIST, PICKLIST, or TEXT_NUMBER. * `1`: MULTI_CONTACT_LIST. * `2`: MULTI_PICKLIST.
      - `width` integer — Display width of the column in pixels.
      - `validation` boolean — Indicates whether validation has been enabled for the column (value = **true**).
      - `autoNumberFormat` object — Specifies how to format values for an auto-generated numbers column.
        - `fill` string — Indicates zero-padding. It must be between 0 and 10 "0" (zero) characters.
        - `prefix` string — The prefix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}
        - `startingNumber` number — The starting number for the auto-ID.
        - `suffix` string — The suffix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}

## Response `200`

Returns [Result object](/api/smartsheet/openapi/schemas/result) containing the [Report column objects](/api/smartsheet/openapi/reports/reportcolumn) that were added.

- object
  - `message` 'PARTIAL_SUCCESS' | 'SUCCESS' — Message that indicates the outcome of the request. (One of `SUCCESS` or `PARTIAL_SUCCESS`.)
  - `resultCode` 0 | 3 — * '0' Success * '3' Partial Success of Bulk Operation
  - `result` ReportColumn[]
    - union
      - object
        - `title` string, required — Title of a column to match. **Note:** If you specified `primary=true` to match primary columns, you can set the resulting report column title to this value.
        - `type` 'CHECKBOX' | 'DATE' | 'DATETIME' | 'DURATION' | 'CONTACT_LIST' | 'MULTI_CONTACT_LIST' | 'PICKLIST' | 'MULTI_PICKLIST' | 'PREDECESSOR' | 'TEXT_NUMBER', required — Type of column to match. See [Column Types](/api/smartsheet/openapi/columns).
        - `systemColumnType` 'CREATED_BY' | 'CREATED_DATE' | 'MODIFIED_BY' | 'MODIFIED_DATE' | 'AUTO_NUMBER' — System column type to match. See [System Columns](/api/smartsheet/openapi/columns).
        - `sheetNameColumn` boolean — Set this to `true` to match the special "Sheet Name" report column.
        - `primary` boolean — Set this to `true` to match the primary column.
        - `virtualId` integer — The virtual ID of this report column.
        - `index` integer, required — Column index or position. This number is zero-based. Indicates the position of the column in the generated report.
        - `hidden` boolean — Indicates whether the column is hidden.
        - `version` 0 | 1 | 2 — * `0`: CONTACT_LIST, PICKLIST, or TEXT_NUMBER. * `1`: MULTI_CONTACT_LIST. * `2`: MULTI_PICKLIST.
        - `width` integer — Display width of the column in pixels.
        - `validation` boolean — Indicates whether validation has been enabled for the column (value = **true**).
        - `autoNumberFormat` object — Specifies how to format values for an auto-generated numbers column.
          - `fill` string — Indicates zero-padding. It must be between 0 and 10 "0" (zero) characters.
          - `prefix` string — The prefix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}
          - `startingNumber` number — The starting number for the auto-ID.
          - `suffix` string — The suffix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}
      - object
        - `title` string, required — Title of a column to match. **Note:** If you specified `primary=true` to match primary columns, you can set the resulting report column title to this value.
        - `type` 'CHECKBOX' | 'DATE' | 'DATETIME' | 'DURATION' | 'CONTACT_LIST' | 'MULTI_CONTACT_LIST' | 'PICKLIST' | 'MULTI_PICKLIST' | 'PREDECESSOR' | 'TEXT_NUMBER', required — Type of column to match. See [Column Types](/api/smartsheet/openapi/columns).
        - `systemColumnType` 'CREATED_BY' | 'CREATED_DATE' | 'MODIFIED_BY' | 'MODIFIED_DATE' | 'AUTO_NUMBER', required — System column type to match. See [System Columns](/api/smartsheet/openapi/columns).
        - `sheetNameColumn` boolean — Set this to `true` to match the special "Sheet Name" report column.
        - `primary` boolean — Set this to `true` to match the primary column.
        - `virtualId` integer — The virtual ID of this report column.
        - `index` integer, required — Column index or position. This number is zero-based. Indicates the position of the column in the generated report.
        - `hidden` boolean — Indicates whether the column is hidden.
        - `version` 0 | 1 | 2 — * `0`: CONTACT_LIST, PICKLIST, or TEXT_NUMBER. * `1`: MULTI_CONTACT_LIST. * `2`: MULTI_PICKLIST.
        - `width` integer — Display width of the column in pixels.
        - `validation` boolean — Indicates whether validation has been enabled for the column (value = **true**).
        - `autoNumberFormat` object — Specifies how to format values for an auto-generated numbers column.
          - `fill` string — Indicates zero-padding. It must be between 0 and 10 "0" (zero) characters.
          - `prefix` string — The prefix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}
          - `startingNumber` number — The starting number for the auto-ID.
          - `suffix` string — The suffix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}
      - object
        - `title` string, required — Title of a column to match. **Note:** If you specified `primary=true` to match primary columns, you can set the resulting report column title to this value.
        - `type` 'CHECKBOX' | 'DATE' | 'DATETIME' | 'DURATION' | 'CONTACT_LIST' | 'MULTI_CONTACT_LIST' | 'PICKLIST' | 'MULTI_PICKLIST' | 'PREDECESSOR' | 'TEXT_NUMBER', required — Type of column to match. See [Column Types](/api/smartsheet/openapi/columns).
        - `systemColumnType` 'CREATED_BY' | 'CREATED_DATE' | 'MODIFIED_BY' | 'MODIFIED_DATE' | 'AUTO_NUMBER' — System column type to match. See [System Columns](/api/smartsheet/openapi/columns).
        - `sheetNameColumn` boolean — Set this to `true` to match the special "Sheet Name" report column.
        - `primary` boolean, required — Set this to `true` to match the primary column.
        - `virtualId` integer — The virtual ID of this report column.
        - `index` integer, required — Column index or position. This number is zero-based. Indicates the position of the column in the generated report.
        - `hidden` boolean — Indicates whether the column is hidden.
        - `version` 0 | 1 | 2 — * `0`: CONTACT_LIST, PICKLIST, or TEXT_NUMBER. * `1`: MULTI_CONTACT_LIST. * `2`: MULTI_PICKLIST.
        - `width` integer — Display width of the column in pixels.
        - `validation` boolean — Indicates whether validation has been enabled for the column (value = **true**).
        - `autoNumberFormat` object — Specifies how to format values for an auto-generated numbers column.
          - `fill` string — Indicates zero-padding. It must be between 0 and 10 "0" (zero) characters.
          - `prefix` string — The prefix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}
          - `startingNumber` number — The starting number for the auto-ID.
          - `suffix` string — The suffix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}
      - object
        - `title` string, required — Title of a column to match. **Note:** If you specified `primary=true` to match primary columns, you can set the resulting report column title to this value.
        - `type` 'CHECKBOX' | 'DATE' | 'DATETIME' | 'DURATION' | 'CONTACT_LIST' | 'MULTI_CONTACT_LIST' | 'PICKLIST' | 'MULTI_PICKLIST' | 'PREDECESSOR' | 'TEXT_NUMBER', required — Type of column to match. See [Column Types](/api/smartsheet/openapi/columns).
        - `systemColumnType` 'CREATED_BY' | 'CREATED_DATE' | 'MODIFIED_BY' | 'MODIFIED_DATE' | 'AUTO_NUMBER' — System column type to match. See [System Columns](/api/smartsheet/openapi/columns).
        - `sheetNameColumn` boolean, required — Set this to `true` to match the special "Sheet Name" report column.
        - `primary` boolean — Set this to `true` to match the primary column.
        - `virtualId` integer — The virtual ID of this report column.
        - `index` integer, required — Column index or position. This number is zero-based. Indicates the position of the column in the generated report.
        - `hidden` boolean — Indicates whether the column is hidden.
        - `version` 0 | 1 | 2 — * `0`: CONTACT_LIST, PICKLIST, or TEXT_NUMBER. * `1`: MULTI_CONTACT_LIST. * `2`: MULTI_PICKLIST.
        - `width` integer — Display width of the column in pixels.
        - `validation` boolean — Indicates whether validation has been enabled for the column (value = **true**).
        - `autoNumberFormat` object — Specifies how to format values for an auto-generated numbers column.
          - `fill` string — Indicates zero-padding. It must be between 0 and 10 "0" (zero) characters.
          - `prefix` string — The prefix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}
          - `startingNumber` number — The starting number for the auto-ID.
          - `suffix` string — The suffix. Can include these date tokens: * {DD} * {MM} * {YY} * {YYYY}

## Other responses

- `400` — This can be caused by the following situations: - Request body exceeds maximum of 100 items. Example response: ```json { "errorCode": 1008, "message": "Unable to parse request. The following error occurred: Maximum of 100 items allowed in property $.", "refId": "abcd1234" } ``` - Column limit exceeded. Example response: ```json { "errorCode": 1373, "message": "Column limit of 400 exceeded. Report currently has 380 columns, attempting to add 30.", "refId": "abcd1234" } ``` - Duplicate system columns are specified. Example response: ```json { "errorCode": 1134, "message": "Duplicate system column type among input columns.", "refId": "abcd1234" } ``` - Duplicate non-system report columns are specified. Example response: ```json { "errorCode": 1369, "message": "Duplicate title TestColumn and type TEXT_NUMBER among input columns.", "refId": "abcd1234" } ``` - Column already exists in the report. Example response: ```json { "errorCode": 1372, "message": "Column with type {0} and {1} already exists in the report.", "refId": "abcd1234" } ``` - Attempting to change the report columns of a program report, which is currently unsupported by API. Example response: ```json { "errorCode": 1146, "message": "Unsupported operation: Program reports currently cannot be modified via API.", "refId": "abcd1234" } ```
- `403` — This can be caused by the following situations: - Caller does not have EDITOR or ADMIN permissions to the report. ```json { "errorCode": 1004, "message": "You are not authorized to perform this action.", "refId": "abcd1234" } ```
- `404` — This can be caused by the following situations: - Report does not exist. ```json { "errorCode": 1006, "message": "Not Found.", "refId": "abcd1234" } ```
- `default` — Generic Error Payload

---

[API](https://skmtc.net/smartsheet/apis/smartsheet-openapi-reference.md) · [All operations](https://skmtc.net/smartsheet/apis/smartsheet-openapi-reference/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/smartsheet/smartsheet-openapi-reference/versions/b4afda95fb51/schema)
