> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cube.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Update a report delivery

In preview: ask Cube support to enable it. Omitted fields stay unchanged; `destination` and `schedule` are replaced whole, and `schedule: null` removes it. A new `reportId` needs read access to that report; `ownerUserId` transfers the delivery.


## OpenAPI

````yaml /api-reference/api.yaml put /api/v1/deployments/{deploymentId}/report-deliveries/{id}
openapi: 3.1.0
info:
  title: Cube Platform API
  version: 1.0.0
  description: >-
    Programmatically manage Cube: deployments and everything scoped to them

    (environments, folders, reports, workbooks, notifications, workspace, and
    agents),

    plus account-level users, groups, policies, embedding, and AI settings.
    Data-model

    authoring, dev mode, branches, and uploads live under /build/api/v1 — same
    host and

    token, routed to the build pods.
servers:
  - url: https://{tenant}.cubecloud.dev
    description: Your tenant host. Replace the whole host if you use a custom domain.
    variables:
      tenant:
        default: your-tenant
        description: Your Cube tenant subdomain
security:
  - bearerAuth: []
tags:
  - name: Deployments
  - name: Deployment Creation
  - name: Environments
  - name: Env Variables
  - name: Regions
  - name: Data Model
  - name: Data Model Uploads
  - name: GitHub
  - name: GitHub Connection
  - name: dbt Sync
  - name: Databricks Metric View Publication
  - name: Databricks Metric View Integration
  - name: Snowflake Semantic View Sync
  - name: Folders
  - name: Reports
  - name: External Documents
  - name: Workbooks
  - name: Workbook Promotions
  - name: Dashboard Exports
  - name: Notifications
  - name: Scheduled Tasks
  - name: Workspace
  - name: Agents
  - name: Users
  - name: Users Admin
  - name: API Keys
  - name: User Attributes
  - name: User Attribute Values
  - name: Tenant Settings
  - name: OAuth Integrations
  - name: User OAuth Tokens
  - name: OIDC Token Configs
  - name: App Theme
  - name: Embed
  - name: Embed Tenants
  - name: Dashboard Embed Access
  - name: Usage Analytics
  - name: OpenAPI Spec
  - name: Report Deliveries
paths:
  /api/v1/deployments/{deploymentId}/report-deliveries/{id}:
    put:
      tags:
        - Report Deliveries
      summary: Update a report delivery
      operationId: updateReportDelivery
      parameters:
        - in: path
          name: deploymentId
          required: true
          schema:
            type: integer
          description: Numeric id of the deployment that owns the delivery.
        - in: path
          name: id
          required: true
          schema:
            type: integer
          description: Numeric id of the report delivery.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateReportDeliveryInput'
        description: UpdateReportDeliveryInput
        required: false
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportDeliveryResponse'
          description: ''
components:
  schemas:
    UpdateReportDeliveryInput:
      properties:
        destination:
          oneOf:
            - $ref: '#/components/schemas/ReportDeliveryDestinationInput'
            - type: 'null'
          description: Replaces the whole destination.
        name:
          oneOf:
            - maxLength: 255
              minLength: 1
              type: string
            - type: 'null'
        notifications:
          oneOf:
            - $ref: '#/components/schemas/ReportDeliveryNotificationsInput'
            - type: 'null'
          description: >-
            Replaces the whole setting; null resets it to the inbox only. How
            the owner hears that the delivery failed or recovered. A delivery
            that runs more than once a day reports only changes in its status; a
            daily or rarer one reports every failed run.
        ownerUserId:
          oneOf:
            - type: integer
            - type: 'null'
          description: >-
            Transfer the delivery to this active user, who must be able to read
            its report. They become owner and run-as user. Admins only.
        reportId:
          oneOf:
            - type: integer
            - type: 'null'
          description: Deliver another report. The caller must be able to read it.
        schedule:
          oneOf:
            - $ref: '#/components/schemas/ReportDeliveryScheduleInput'
            - type: 'null'
          description: >-
            Replaces the whole schedule. `null` removes it, so the delivery runs
            only on request.
        shape:
          oneOf:
            - $ref: '#/components/schemas/ReportDeliveryShapeInput'
            - type: 'null'
          description: >-
            Replaces the whole shape. `null` removes it, delivering every
            column.
        writeMode:
          oneOf:
            - $ref: '#/components/schemas/UpdateReportDeliveryInputWriteMode'
            - type: 'null'
      type: object
    ReportDeliveryResponse:
      properties:
        deploymentId:
          type: integer
        destination:
          $ref: '#/components/schemas/ReportDeliveryDestination'
        id:
          type: integer
        lastRunAt:
          oneOf:
            - format: date-time
              type: string
            - type: 'null'
          description: When the last run finished. `null` before the first.
        lastSuccessAt:
          oneOf:
            - format: date-time
              type: string
            - type: 'null'
          description: When the last successful run finished. `null` if none has succeeded.
        name:
          type: string
        nextRunAt:
          oneOf:
            - {}
            - type: 'null'
          description: >-
            When the schedule next fires. `null` when there is no schedule or it
            is paused.
        notifications:
          $ref: '#/components/schemas/ReportDeliveryNotificationSettings'
          description: >-
            How the owner hears that the delivery failed or recovered. A
            delivery that runs more than once a day reports only changes in its
            status; a daily or rarer one reports every failed run.
        ownerUserId:
          oneOf:
            - type: integer
            - type: 'null'
          description: >-
            The accountable user, whose Google account writes the sheet. `null`
            once that user has been deleted.
        pausedAt:
          oneOf:
            - {}
            - type: 'null'
          description: When the delivery was paused. `null` if it is not.
        reportId:
          oneOf:
            - type: integer
            - type: 'null'
          description: The delivered report. `null` once that report has been deleted.
        reportName:
          oneOf:
            - type: string
            - type: 'null'
          description: >-
            Name of the delivered report. `null` once that report has been
            deleted.
        reportPublicId:
          oneOf:
            - type: string
            - type: 'null'
          description: >-
            Public id of the delivered report. `null` once that report has been
            deleted.
        reportWorkbookId:
          oneOf:
            - type: integer
            - type: 'null'
          description: >-
            Workbook holding the delivered report. `null` once that report has
            been deleted.
        runAsUserId:
          oneOf:
            - type: integer
            - type: 'null'
          description: >-
            The user whose data access the query runs with. `null` once that
            user has been deleted.
        runningSince:
          oneOf:
            - format: date-time
              type: string
            - type: 'null'
          description: >-
            When the run still in progress started. `null` while no run is
            going.
        schedule:
          oneOf:
            - $ref: '#/components/schemas/ReportDeliverySchedule'
            - type: 'null'
          description: '`null` for a delivery that runs only on request.'
        shape:
          oneOf:
            - $ref: '#/components/schemas/ReportDeliveryShape'
            - type: 'null'
          description: '`null` when every column is delivered as is.'
        sheetTitle:
          oneOf:
            - type: string
            - type: 'null'
          description: >-
            Current title of the destination tab, read from Google at most every
            few minutes. `null` for a `new_sheet` delivery, or before its title
            has been read.
        spreadsheetTitle:
          oneOf:
            - type: string
            - type: 'null'
          description: >-
            Title of the destination spreadsheet, read from Google at most every
            few minutes and by each run. `null` before then.
        status:
          $ref: '#/components/schemas/ReportDeliveryResponseStatus'
        writeMode:
          $ref: '#/components/schemas/ReportDeliveryResponseWriteMode'
      required:
        - id
        - deploymentId
        - name
        - destination
        - writeMode
        - notifications
        - status
      type: object
    ReportDeliveryDestinationInput:
      properties:
        anchorCell:
          oneOf:
            - type: string
            - type: 'null'
          description: >-
            Top-left cell of the delivered block, in A1 notation (e.g. `B3`).
            Defaults to `A1`.
        sheetId:
          oneOf:
            - minimum: 0
              type: integer
            - type: 'null'
          description: >-
            Id of the tab to write into (the `gid` in the spreadsheet URL). A
            tab is followed by its id through a rename. Provide this OR
            `sheetName`; neither when `writeMode` is `new_sheet`.
        sheetName:
          oneOf:
            - minLength: 1
              type: string
            - type: 'null'
          description: >-
            Title of the tab to write into. Provide this OR `sheetId`; neither
            when `writeMode` is `new_sheet`.
        spreadsheet:
          description: 'The Google Sheets spreadsheet: its URL or its id.'
          minLength: 1
          type: string
      required:
        - spreadsheet
      type: object
    ReportDeliveryNotificationsInput:
      properties:
        email:
          description: Email the owner's Cube address.
          type: boolean
        inbox:
          description: Notify in the owner's Cube inbox.
          type: boolean
        slackChannelId:
          oneOf:
            - maxLength: 255
              minLength: 1
              type: string
            - type: 'null'
          description: >-
            Also post to this Slack channel, by id. Needs the Cube Slack app
            installed.
        slackChannelName:
          oneOf:
            - maxLength: 255
              type: string
            - type: 'null'
          description: The channel's name, kept for display only.
      required:
        - inbox
        - email
      type: object
    ReportDeliveryScheduleInput:
      properties:
        cronExpressions:
          description: >-
            Five-field cron expressions; the delivery runs whenever any matches.
            Runs of one expression must be at least 15 minutes apart: `*/15 9-17
            * * 1-5` is every quarter hour from 09:00 to 17:45 on weekdays.
          items:
            type: string
          maxItems: 24
          minItems: 1
          type: array
        timezone:
          oneOf:
            - type: string
            - type: 'null'
          description: >-
            IANA timezone the cron expressions are read in, e.g.
            `America/New_York`. Fixed offsets such as `+02:00` are rejected.
            Defaults to `UTC`.
      required:
        - cronExpressions
      type: object
    ReportDeliveryShapeInput:
      properties:
        columns:
          description: >-
            The delivered columns, left to right. A column the query stops
            returning fails the run rather than shifting the ones after it.
          items:
            $ref: '#/components/schemas/ReportDeliveryColumnInput'
          maxItems: 500
          minItems: 1
          type: array
      required:
        - columns
      type: object
    UpdateReportDeliveryInputWriteMode:
      enum:
        - overwrite
        - append
        - new_sheet
      type: string
    ReportDeliveryDestination:
      properties:
        anchorCell:
          description: Top-left cell of the delivered block, in A1 notation.
          type: string
        sheetId:
          oneOf:
            - type: integer
            - type: 'null'
        sheetName:
          oneOf:
            - type: string
            - type: 'null'
        spreadsheetId:
          type: string
      required:
        - spreadsheetId
        - anchorCell
      type: object
    ReportDeliveryNotificationSettings:
      properties:
        email:
          type: boolean
        inbox:
          type: boolean
        slackChannelId:
          oneOf:
            - type: string
            - type: 'null'
          description: '`null` when nothing is posted to Slack.'
        slackChannelName:
          oneOf:
            - type: string
            - type: 'null'
      required:
        - inbox
        - email
      type: object
    ReportDeliverySchedule:
      properties:
        cronExpressions:
          items:
            type: string
          type: array
        timezone:
          type: string
      required:
        - cronExpressions
        - timezone
      type: object
    ReportDeliveryShape:
      properties:
        columns:
          items:
            $ref: '#/components/schemas/ReportDeliveryColumn'
          type: array
      required:
        - columns
      type: object
    ReportDeliveryResponseStatus:
      enum:
        - active
        - failing
        - needs_reconnect
        - orphaned
      type: string
    ReportDeliveryResponseWriteMode:
      enum:
        - overwrite
        - append
        - new_sheet
      type: string
    ReportDeliveryColumnInput:
      properties:
        column:
          oneOf:
            - minLength: 1
              type: string
            - type: 'null'
          description: >-
            Name of a column the report’s query returns: its alias in the SQL.
            Provide this OR `placeholder` (exactly one).
        header:
          oneOf:
            - maxLength: 1000
              type: string
            - type: 'null'
          description: >-
            Text of the header cell. Defaults to the column name; required for a
            placeholder, where it may be empty.
        placeholder:
          oneOf:
            - $ref: '#/components/schemas/ReportDeliveryColumnInputPlaceholder'
            - type: 'null'
      type: object
    ReportDeliveryColumn:
      properties:
        column:
          oneOf:
            - type: string
            - type: 'null'
        header:
          oneOf:
            - type: string
            - type: 'null'
        placeholder:
          oneOf:
            - type: boolean
            - type: 'null'
      type: object
    ReportDeliveryColumnInputPlaceholder:
      enum:
        - true
      type: boolean
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Token authentication. Send `Authorization: Bearer <YOUR_TOKEN>`.'

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.