Cube Planning Table API

The Planning Table API from Cube — 4 operation(s) for planning table.

OpenAPI Specification

cubesoftware-planning-table-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Cube Agents Planning Table API
  version: 1.0.0 (1.0)
  description: "#### General Description\nAn API to access underlying Cube functionality. These endpoints are the same endpoints\nthat support Cube's universal add-ons and a plethora of integrations meaning you'll be able to interact with your\nCube data in many powerful ways. Visit the API section of Cube's [Help Center](https://help.cubesoftware.com/hc/en-us/sections/18205290556180-Custom-Integrations)\nfor more usage guides on how you can use this API to integrate with Cube to accomplish various tasks!\n\n#### Versioning\nAll requests to the API require a version to be configured via an `Accept` Header. The value of this Header should look like this:\n```\nAccept: application/json; version=1.0\n```\nNote that the version number may differ depending on which version of the endpoint is needed.\n\n#### Response Structure\nThe general response structure of Cube's API endpoints will contain a `\"data\"` and `\"metadata\"` root level key:\n```json\n{\n    \"data\": { ... object data or list of objects ... },\n    \"metadata\": {\n        \"status\": 200,\n        \"message\": \"Potential message with additional context\",\n        \"error\": false,\n        \"code\": \"\"\n    }\n}\n```\n\n#### Rate Limiting\nAll endpoints have a rate limit configured, most of them default to 5/s.\nWhen the rate limit is encountered, a 429 HTTP code will be returned.\n\n#### Error Handling\nIn the event an error occurs, the response will typically look like this:\n```json\n{\n    \"data\": {},\n    \"metadata\": {\n        \"status\": 400,\n        \"message\": \"Some error message\",\n        \"error\": true,\n        \"code\": \"SOME_ERROR_CODE\"\n    }\n}\n```\n"
  termsOfService: https://www.cubesoftware.com/terms-of-service
servers:
- url: https://api.cubesoftware.com
  description: Production API URL
tags:
- name: Planning Table
paths:
  /tables:
    get:
      operationId: tables_list
      description: List all planning tables
      summary: List all planning tables
      parameters:
      - in: header
        name: X-Company-ID
        schema:
          type: string
        description: Associates request with company
        required: true
      tags:
      - Planning Table
      security:
      - OAuth2: []
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PlanningTable'
          description: ''
    post:
      operationId: tables_create
      description: 'Planning tables store a typed column schema (number, text, dimension, and calculated columns).


        A calculated column''s output type is inferred from its formula on save and controls whether numeric formatting applies; formulas with an ambiguous type or invalid dimension usage are rejected.'
      summary: Create a planning table
      parameters:
      - in: header
        name: X-Company-ID
        schema:
          type: string
        description: Associates request with company
        required: true
      tags:
      - Planning Table
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlanningTable'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PlanningTable'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PlanningTable'
        required: true
      security:
      - OAuth2: []
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanningTable'
          description: ''
  /tables/{id}:
    get:
      operationId: tables_retrieve
      description: Retrieve a planning table
      summary: Retrieve a planning table
      parameters:
      - in: header
        name: X-Company-ID
        schema:
          type: string
        description: Associates request with company
        required: true
      - in: path
        name: id
        schema:
          type: string
        required: true
      tags:
      - Planning Table
      security:
      - OAuth2: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanningTable'
          description: ''
    patch:
      operationId: tables_partial_update
      description: 'Planning tables store a typed column schema (number, text, dimension, and calculated columns).


        A calculated column''s output type is inferred from its formula on save and controls whether numeric formatting applies; formulas with an ambiguous type or invalid dimension usage are rejected.'
      summary: Update a planning table
      parameters:
      - in: header
        name: X-Company-ID
        schema:
          type: string
        description: Associates request with company
        required: true
      - in: path
        name: id
        schema:
          type: string
        required: true
      tags:
      - Planning Table
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchedPlanningTable'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PatchedPlanningTable'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PatchedPlanningTable'
      security:
      - OAuth2: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanningTable'
          description: ''
    delete:
      operationId: tables_destroy
      description: Delete a planning table
      summary: Delete a planning table
      parameters:
      - in: header
        name: X-Company-ID
        schema:
          type: string
        description: Associates request with company
        required: true
      - in: path
        name: id
        schema:
          type: string
        required: true
      tags:
      - Planning Table
      security:
      - OAuth2: []
      responses:
        '204':
          description: No response body
  /tables/{table_pk}/datasets:
    get:
      operationId: tables_datasets_list
      description: Get planning table datasets, optionally filtered by scenario
      summary: Get planning table datasets
      parameters:
      - in: header
        name: X-Company-ID
        schema:
          type: string
        description: Associates request with company
        required: true
      - in: path
        name: table_pk
        schema:
          type: integer
        required: true
      tags:
      - Planning Table
      security:
      - OAuth2: []
      responses:
        '200':
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PlanningTableDataset'
          description: ''
    put:
      operationId: tables_datasets_update
      description: 'Table-anchored nested resource for a Planning Table''s datasets.


        A dataset is never addressed by its own id here: the route is keyed on the parent table

        (`table_pk`) and a dataset is identified by (table, scenario_id from the request). Hence

        `get_queryset`/`get_object` return the parent `PlanningTable` (access control -- sharing

        scheme and `created_by` -- lives on the table), while the actions query `PlanningTableDataset`

        rows directly.


        Consequence for `permission_classes`: model-derived primitives (`ModelPermissions`,

        `UserHasModelShared`) resolve `model_name` from the queryset, so they check `*_planningtable`

        perms, NOT `*_planningtabledataset`. Only the hardcoded `SpecificModelPermissions` /

        `EditSharedPermissions` target the dataset model. That is why the expression below mixes

        table-level and dataset-level permissions.'
      parameters:
      - in: header
        name: X-Company-ID
        schema:
          type: string
        description: Associates request with company
        required: true
      - in: path
        name: table_pk
        schema:
          type: integer
        required: true
      tags:
      - Planning Table
      security:
      - OAuth2: []
      responses:
        '200':
          description: No response body
  /tables/compute-calculated-columns:
    post:
      operationId: tables_compute_calculated_columns_create
      description: Compute calculated column values for the submitted schema and rows without persisting. Dirty/invalid cell values degrade to null per the evaluator rules, and an invalid or unsaved formula nulls only its own column (reported in column_errors) instead of rejecting the payload. Each calculated column also reports its inferred output type in column_types when the formula resolves cleanly; inference mirrors save-time validation and depends only on the schema.
      summary: Compute calculated columns
      parameters:
      - in: header
        name: X-Company-ID
        schema:
          type: string
        description: Associates request with company
        required: true
      tags:
      - Planning Table
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PlanningTableCompute'
            examples:
              ComputeCalculatedColumns:
                value:
                  schema:
                  - id: b1c2d3e4-0000-4000-8000-000000000001
                    name: Salary
                    type: number
                    required: false
                    format: number
                  - id: b1c2d3e4-0000-4000-8000-000000000002
                    name: Annual
                    type: calculation
                    required: false
                    formula: '[Salary] * 12'
                  data:
                  - - value: Salary
                    - value: Annual
                  - - value: '100'
                    - value: null
                summary: Compute calculated columns
              PreviewAnUnsavedFormula(best-effort):
                value:
                  schema:
                  - id: b1c2d3e4-0000-4000-8000-000000000001
                    name: Salary
                    type: number
                    required: false
                    format: number
                  - id: b1c2d3e4-0000-4000-8000-000000000002
                    name: Annual
                    type: calculation
                    required: false
                    formula: '[Unknown] * 12'
                  data:
                  - - value: Salary
                    - value: Annual
                  - - value: '100'
                    - value: null
                summary: Preview an unsaved formula (best-effort)
                description: An invalid/unsaved formula nulls only its column and is reported in column_errors.
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/PlanningTableCompute'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/PlanningTableCompute'
        required: true
      security:
      - OAuth2: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/data'
              examples:
                ComputedRows:
                  value:
                    data:
                      data:
                      - - value: Salary
                        - value: Annual
                      - - value: '100'
                        - value: '1200'
                      column_types:
                      - index: 1
                        name: Annual
                        output_type: number
                      column_errors: []
                    metadata:
                      status: 200
                      error: false
                      message: null
                      code: ''
                  summary: Computed rows
          description: Rows with calculated columns computed (best-effort), each calculated column's inferred output type (column_types), plus any per-column formula errors (column_errors).
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_response_serializer'
              examples:
                MalformedSchema:
                  value:
                    data: {}
                    metadata:
                      status: 400
                      error: true
                      message: Invalid table schema.
                      code: INVALID_TABLE_SCHEMA
                  summary: Malformed schema
                PayloadTooLarge:
                  value:
                    data: {}
                    metadata:
                      status: 400
                      error: true
                      message: Table data is too large. Reduce rows, columns, or characters per cell.
                      code: INVALID_DATASET_DATA_TOO_LARGE
                  summary: Payload too large
          description: Malformed table schema, or request payload too large.
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/error_response_serializer'
              examples:
                PermissionDenied:
                  value:
                    data: {}
                    metadata:
                      status: 403
                      error: true
                      message: Permission denied
                      code: PERMISSION_DENIED
                  summary: Permission denied
          description: User lacks the view_planningtable permission.
components:
  schemas:
    SharingScheme2f1Enum:
      enum:
      - ALL
      - MANAGERS
      - SPECIFIC
      type: string
      description: '* `ALL` - All Team Members

        * `MANAGERS` - Managers Only

        * `SPECIFIC` - Specific Users'
    PlanningTableDataset:
      type: object
      description: Mixin to delegate create and update operations to a service class.
      properties:
        id:
          type: integer
          readOnly: true
        planning_table_id:
          type: integer
          readOnly: true
        planning_table_schema:
          type: string
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
        modified_at:
          type: string
          format: date-time
          readOnly: true
        version:
          type: string
          readOnly: true
          nullable: true
        scenario_id:
          type: integer
        data: {}
        created_by_id:
          type: integer
          readOnly: true
        modified_by_id:
          type: integer
          readOnly: true
      required:
      - created_at
      - created_by_id
      - data
      - id
      - modified_at
      - modified_by_id
      - planning_table_id
      - planning_table_schema
      - scenario_id
      - version
    error_response_serializer:
      type: object
      properties:
        data:
          type: object
          additionalProperties: {}
        metadata:
          $ref: '#/components/schemas/metadata_serializer'
      required:
      - data
      - metadata
    PlanningTableCompute:
      type: object
      properties:
        schema: {}
        data: {}
      required:
      - data
      - schema
    metadata_serializer:
      type: object
      properties:
        status:
          type: integer
        error:
          type: boolean
        message:
          type: string
        code:
          type: string
      required:
      - code
      - error
      - message
      - status
    PatchedPlanningTable:
      type: object
      description: Mixin to delegate create and update operations to a service class.
      properties:
        id:
          type: integer
          readOnly: true
        company_id:
          type: string
          format: uuid
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
        modified_at:
          type: string
          format: date-time
          readOnly: true
        name:
          type: string
          maxLength: 255
        sharing_scheme:
          $ref: '#/components/schemas/SharingScheme2f1Enum'
        schema: {}
        schema_reviewed:
          type: boolean
        created_by_id:
          type: integer
          readOnly: true
        modified_by_id:
          type: integer
          readOnly: true
        has_templates:
          type: boolean
          readOnly: true
        shared_with:
          type: array
          items:
            type: string
            nullable: true
    data:
      type: object
      properties:
        data:
          type: object
          additionalProperties: {}
        metadata:
          type: object
          additionalProperties: {}
      required:
      - data
      - metadata
    PlanningTable:
      type: object
      description: Mixin to delegate create and update operations to a service class.
      properties:
        id:
          type: integer
          readOnly: true
        company_id:
          type: string
          format: uuid
          readOnly: true
        created_at:
          type: string
          format: date-time
          readOnly: true
        modified_at:
          type: string
          format: date-time
          readOnly: true
        name:
          type: string
          maxLength: 255
        sharing_scheme:
          $ref: '#/components/schemas/SharingScheme2f1Enum'
        schema: {}
        schema_reviewed:
          type: boolean
        created_by_id:
          type: integer
          readOnly: true
        modified_by_id:
          type: integer
          readOnly: true
        has_templates:
          type: boolean
          readOnly: true
        shared_with:
          type: array
          items:
            type: string
            nullable: true
      required:
      - company_id
      - created_at
      - created_by_id
      - has_templates
      - id
      - modified_at
      - modified_by_id
      - name
      - schema
  securitySchemes:
    OAuth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://portal.cubesoftware.com/o/authorize/
          tokenUrl: https://api.cubesoftware.com/o/token/
          scopes: {}
      description: Standard Cube OAuth 2.0 flow