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

# Update chart data in existing presentation (async)

> Update supported bar or column chart data in an existing generated presentation while preserving all formatting.

**Workflow:**
1. PUT to this endpoint with your chart update data
2. Receive `generation_id` immediately (HTTP 202)
3. Poll `GET /presentations/{generation_id}/status` every 2-5 seconds
4. When status is `completed`, download from `download_url`

**Accepts both ID formats:**
- `gen_xxx` - From slide/deck generation or chart updates
- `pres_xxx` - Older direct-return generation output, if present

**How it works:**
1. Loads the existing presentation from storage
2. For each update, clones the target slide (preserving position) and updates chart data in-place
3. Saves as a new generated presentation

**Important:** Only provide data fields (categories, series, data_rows) in chart_data.
Omit formatting fields (chart_type, title, legend, axes) to preserve existing formatting.



## OpenAPI

````yaml /openapi/powerpoint-api.json put /api/v1/presentations/{presentation_id}/update-charts
openapi: 3.1.0
info:
  title: SlideKit
  description: >-
    A comprehensive API for PowerPoint template management and presentation
    generation
  version: 1.0.0
servers: []
security: []
paths:
  /api/v1/presentations/{presentation_id}/update-charts:
    put:
      tags:
        - presentations
      summary: Update chart data in existing presentation (async)
      description: >-
        Update supported bar or column chart data in an existing generated
        presentation while preserving all formatting.


        **Workflow:**

        1. PUT to this endpoint with your chart update data

        2. Receive `generation_id` immediately (HTTP 202)

        3. Poll `GET /presentations/{generation_id}/status` every 2-5 seconds

        4. When status is `completed`, download from `download_url`


        **Accepts both ID formats:**

        - `gen_xxx` - From slide/deck generation or chart updates

        - `pres_xxx` - Older direct-return generation output, if present


        **How it works:**

        1. Loads the existing presentation from storage

        2. For each update, clones the target slide (preserving position) and
        updates chart data in-place

        3. Saves as a new generated presentation


        **Important:** Only provide data fields (categories, series, data_rows)
        in chart_data.

        Omit formatting fields (chart_type, title, legend, axes) to preserve
        existing formatting.
      operationId: update_charts_api_v1_presentations__presentation_id__update_charts_put
      parameters:
        - name: presentation_id
          in: path
          required: true
          schema:
            type: string
            title: Presentation Id
      responses:
        '202':
          description: Chart update started - poll status endpoint for progress
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeckGenerateResponse'
        '400':
          description: Invalid request (slide/chart index out of range, no chart found)
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
        '429':
          description: Too many pending generation requests
      security:
        - ApiKeyAuth: []
components:
  schemas:
    DeckGenerateResponse:
      properties:
        generation_id:
          type: string
          title: Generation Id
          description: >-
            Unique identifier for this generation job. Use this to poll status
            and download the result.
          example: gen_abc123def456
        status:
          type: string
          title: Status
          description: Initial status. Always 'pending' for new requests.
          example: pending
        message:
          type: string
          title: Message
          description: Human-readable status message.
          default: Generation started
          example: Generation started. Poll status URL for progress.
        status_url:
          type: string
          title: Status Url
          description: >-
            Full URL to poll for generation status. Convenience field - you can
            also construct this as GET /presentations/{generation_id}/status.
          example: https://api.example.com/api/v1/presentations/gen_abc123def456/status
        created_at:
          type: string
          format: date-time
          title: Created At
          description: Timestamp when the generation request was created.
      type: object
      required:
        - generation_id
        - status
        - status_url
        - created_at
      title: DeckGenerateResponse
      description: >-
        Response schema for async generation requests.


        This response is returned immediately when you POST to
        `/presentations/generate`

        or `/presentations/generate-deck`, and when you PUT to

        `/presentations/{id}/update-charts`. The actual Aspose work happens in
        the

        background.


        **Next steps:**

        1. Save the `generation_id` from this response

        2. Poll `status_url` (or `GET /presentations/{generation_id}/status`)
        every few seconds

        3. When status becomes `completed`, `partial`, or `failed`, generation
        is done

        4. Download from `download_url` in the status response (for `completed`
        or `partial`)
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Production API key. Development/test deployments may also allow
        X-Org-Name.

````