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

# Append rows to a table

> Append one or more rows to a table. Append-only: existing rows are never modified or deleted. Each row is an object of column name to scalar value, validated and type-coerced against the table's schema. Every row in a batch must carry the same column names.

The target must be a promoted (ACTIVE) Summation data table — one backed by a physical row store. Draft or unpromoted tables, calculation tables, and imported tables (e.g. file/CSV imports) have no row store and are rejected with 409; a table appearing with a SUMMATION source in the table list is not sufficient on its own.

Each row must include a value for the table's primary key column(s) — primary keys are caller-supplied, not auto-generated. A row missing its primary key is rejected with 400.

Returns 200 when all rows insert, 207 when some rows fail (see errors), and 422 when no rows insert. Requires the tables:append scope.



## OpenAPI

````yaml https://api.summation.com/openapi.json post /v1/tables/{table_id}/rows
openapi: 3.1.0
info:
  title: summation-api public API
  version: 0.1.0
servers: []
security: []
tags:
  - name: Auth
    description: Machine authentication for API clients.
  - name: Tenant
    description: Organization and tenant context resolved by summation-api.
  - name: Projects
    description: Project resources.
  - name: Conversations
    description: Conversation and message resources.
  - name: Reports
    description: Report resources and report operations.
  - name: Runs
    description: Project run history and execution status.
  - name: Playbooks
    description: Playbook resources.
  - name: Files
    description: Project file resources.
  - name: Catalog Entries
    description: Project-scoped data asset attachments.
  - name: Data Connectors
    description: Reusable external data source connections.
  - name: App Connectors
    description: External app connectors whose tools the agent can use during chat.
  - name: Tables
    description: Canonical table metadata and catalog.
  - name: Views
    description: Canonical Summation view metadata and catalog.
  - name: Query Executions
    description: Read-only SQL query execution.
  - name: Grid
    description: Materialized grid status, sync, and lineage.
  - name: Schedules
    description: Schedule and schedule run inspection.
paths:
  /v1/tables/{table_id}/rows:
    post:
      tags:
        - Tables
      summary: Append rows to a table
      description: >-
        Append one or more rows to a table. Append-only: existing rows are never
        modified or deleted. Each row is an object of column name to scalar
        value, validated and type-coerced against the table's schema. Every row
        in a batch must carry the same column names.


        The target must be a promoted (ACTIVE) Summation data table — one backed
        by a physical row store. Draft or unpromoted tables, calculation tables,
        and imported tables (e.g. file/CSV imports) have no row store and are
        rejected with 409; a table appearing with a SUMMATION source in the
        table list is not sufficient on its own.


        Each row must include a value for the table's primary key column(s) —
        primary keys are caller-supplied, not auto-generated. A row missing its
        primary key is rejected with 400.


        Returns 200 when all rows insert, 207 when some rows fail (see errors),
        and 422 when no rows insert. Requires the tables:append scope.
      operationId: append_table_rows
      parameters:
        - name: table_id
          in: path
          required: true
          schema:
            type: string
            title: Table Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TableAppendRowsRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '207':
          description: Some rows inserted; response includes errors for failed rows.
        '400':
          description: Invalid row content, e.g. a row missing its primary key column(s).
        '401':
          description: Missing, invalid, or expired credentials.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemError'
        '403':
          description: Authenticated but missing the required scope.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemError'
        '404':
          description: Resource not found or not accessible.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemError'
        '409':
          description: >-
            Table does not accept row appends: it is not a promoted (ACTIVE)
            Summation data table backed by a physical row store.
        '422':
          description: No rows inserted; response includes row-level errors.
        '429':
          description: Rate limit exceeded.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemError'
        '500':
          description: Internal server error.
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemError'
      security:
        - SummationMachineAuth:
            - tables:append
components:
  schemas:
    TableAppendRowsRequest:
      properties:
        rows:
          items:
            additionalProperties:
              anyOf:
                - type: string
                - type: integer
                - type: number
                - type: boolean
                - type: 'null'
            type: object
          type: array
          maxItems: 500
          minItems: 1
          title: Rows
          description: >-
            Rows to append, 1 to 500 per request. Each row is an object of
            column_name to scalar value; values are coerced to their column type
            by the table's schema. Every row must carry the same column names,
            and each must include the table's primary key column(s) — primary
            keys are caller-supplied, not auto-generated. Append-only — existing
            rows are never modified.
      type: object
      required:
        - rows
      title: TableAppendRowsRequest
    ProblemError:
      description: >-
        Public error envelope (RFC 7807 ``application/problem+json``).


        Mirrors the body produced by :func:`api_error`. Declaring it in the
        contract

        lets generated clients type error handling instead of guessing.
      properties:
        type:
          description: URI reference identifying the problem type.
          title: Type
          type: string
        title:
          description: Short, human-readable summary of the problem type.
          title: Title
          type: string
        status:
          description: HTTP status code.
          title: Status
          type: integer
        detail:
          description: Human-readable explanation specific to this occurrence.
          title: Detail
          type: string
        code:
          description: Stable, machine-readable error code.
          title: Code
          type: string
        request_id:
          description: Correlation id, echoed in the x-request-id header.
          title: Request Id
          type: string
      required:
        - type
        - title
        - status
        - detail
        - code
        - request_id
      title: ProblemError
      type: object
  securitySchemes:
    SummationMachineAuth:
      type: oauth2
      flows:
        clientCredentials:
          scopes:
            agent:read: agent:read
            agent:write: agent:write
          tokenUrl: /v1/auth/m2m/token

````