Slope Software DataTables API

The DataTables API from Slope Software — 7 operation(s) for datatables.

Operations 7

POST /api/v2/DataTables Creates a new data table without a file using row data provided in the request. #
POST /api/v2/DataTables/Import Creates a new data table from an imported file. #
PUT /api/v2/DataTables/{dataTableId}/Import Overwrites an existing data table from an imported file. #
PATCH /api/v2/DataTables/{dataTableId} Updates individual properties of an existing data table. #
GET /api/v1/DataTables/Data Get a data table's data. #
PATCH /api/v1/DataTables Update a data table using an existing file. #
PUT /api/v1/DataTables/{DataTableId}/Data Update a data table's row data without uploading a file. #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/slope-software-datatables-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

slope-software-datatables-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Slope Arrays Data Tables API
  version: '1.0'
servers:
- url: https://api.slopesoftware.com
  description: Base URL declared by the provider in apis.yml (roadmap#122).
tags:
- name: DataTables
paths:
  /api/v2/DataTables:
    post:
      tags:
      - DataTables
      summary: Creates a new data table without a file using row data provided in the request.
      description: 'Creates a new data table using row data provided directly in the request body.


        **Limits:**

        - Minimum: 1 row

        - Maximum: 100,000 rows

        - Request size: 10MB


        **Row Format:**

        Each row is an array of strings where values are **positional** - each position corresponds to a column in table structure order. Use empty string `""` for null/empty values at any position.


        **Example 1:** For columns [Name (String), Age (Integer), Rate (Decimal)]:

        - `["John", "25", "0.05"]` - all values

        - `["John", "", "0.05"]` - Age is empty

        - `["", "25", ""]` - Name and Rate are empty


        **Example 2:** For columns [Name (String), Scenario (ScenarioTable), Active (Boolean)]:

        - `["Base", "15", "true"]` - references ScenarioTable ID 15

        - `["Alt", "", "true"]` - no ScenarioTable reference (empty string)


        **Example 3:** For columns [Name (String), Mortality (MortalityTable), Nested (DataTable)]:

        - `["Row1", "16757", "499", "42"]` - MortalityTable uses 2 positions, DataTable uses 1

        - `["Row2", "", "", ""]` - all reference columns empty


        **Supported Column Types:**

        | Type | Values | Example |

        |------|--------|--------|

        | Integer (1) | 1 value | "100" |

        | Decimal (2) | 1 value | "0.0123" |

        | String (3) | 1 value | "Male" |

        | Date (4) | 1 value | "2024-01-15" |

        | Boolean (5) | 1 value | "true" or "false" |

        | MortalityTable (6) | **2 values** | "16757", "499" |

        | DataTable (7) | 1 value | "42" or "" |

        | DropDownList (8) | 1 value | "Option1" |

        | ScenarioTable (9) | 1 value | "15" or "" |


        **Important:**

        - MortalityTable columns expand to **2 positions** in the row array (decrementTableId, improvementScaleId)

        - All other column types use **1 position** each

        - Row length must equal: (column count) + (number of MortalityTable columns)

        - Invalid DataTable/ScenarioTable reference IDs are silently cleared to empty

        - Format matches GET /api/v1/DataTables/{id}/Data response'
      operationId: CreateDataTableV2
      requestBody:
        description: Create request containing table structure, name, and row data
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDataTableRequestV2'
          text/json:
            schema:
              $ref: '#/components/schemas/CreateDataTableRequestV2'
          application/*+json:
            schema:
              $ref: '#/components/schemas/CreateDataTableRequestV2'
      responses:
        '200':
          description: Data table created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportDataTableResponseV2'
        '201':
          description: Created
        '400':
          description: Invalid request parameters or validation errors
        '403':
          description: Forbidden - insufficient permissions
        '429':
          description: Too Many Requests
        '404':
          description: Table structure not found
        '401':
          description: Unauthorized
        '409':
          description: Data table with the same name already exists for this table structure
      security:
      - API Token: []
  /api/v2/DataTables/Import:
    post:
      tags:
      - DataTables
      summary: Creates a new data table from an imported file.
      description: Creates a new data table using an existing file. This endpoint cannot be used to update existing data tables. The excel sheet name field is required for excel files and the delimiter field, which defaults to a comma if not set, is required for non-excel files. The limit for the number of rows is 25,000 for data tables that aren't file only.
      operationId: ImportDataTable
      requestBody:
        description: Import request containing table structure, name, and file reference
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImportDataTableRequestV2'
          text/json:
            schema:
              $ref: '#/components/schemas/ImportDataTableRequestV2'
          application/*+json:
            schema:
              $ref: '#/components/schemas/ImportDataTableRequestV2'
      responses:
        '200':
          description: Data table created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportDataTableResponseV2'
        '201':
          description: Created
        '400':
          description: Invalid request parameters
        '403':
          description: Forbidden - insufficient permissions
        '429':
          description: Too Many Requests
        '404':
          description: Not Found
        '401':
          description: Unauthorized
        '409':
          description: Data table with the same name already exists for this table structure
      security:
      - API Token: []
  /api/v2/DataTables/{dataTableId}/Import:
    put:
      tags:
      - DataTables
      summary: Overwrites an existing data table from an imported file.
      description: Overwrites the contents of an existing data table using the specified file. Library and Production models cannot be updated using this endpoint. The excel sheet name field is required for excel files and the delimiter field, which defaults to a comma if not set, is required for non-excel files. The limit for the number of rows is 25,000 for data tables that aren't file only.
      operationId: OverwriteDataTable
      parameters:
      - name: dataTableId
        in: path
        description: The ID of the data table to overwrite
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        description: Import request containing file reference
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OverwriteDataTableRequestV2'
          text/json:
            schema:
              $ref: '#/components/schemas/OverwriteDataTableRequestV2'
          application/*+json:
            schema:
              $ref: '#/components/schemas/OverwriteDataTableRequestV2'
      responses:
        '200':
          description: Data table overwritten successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportDataTableResponseV2'
        '201':
          description: Created
        '400':
          description: Invalid request parameters or Library/Production model
        '403':
          description: Forbidden - insufficient permissions
        '429':
          description: Too Many Requests
        '404':
          description: Data table not found
        '401':
          description: Unauthorized
      security:
      - API Token: []
  /api/v2/DataTables/{dataTableId}:
    patch:
      tags:
      - DataTables
      summary: Updates individual properties of an existing data table.
      description: 'This endpoint cannot be used on production models. Only development models can be updated.

        If the data table indexes are being updated and the table is used in any projections, a new version will be created automatically to preserve projection integrity.

        Name-only updates do not trigger versioning.'
      operationId: UpdateDataTableProperties
      parameters:
      - name: dataTableId
        in: path
        description: The ID of the data table to update
        required: true
        schema:
          type: integer
          format: int32
      requestBody:
        description: Update request containing optional Name and/or Indexes
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDataTableRequestV2'
          text/json:
            schema:
              $ref: '#/components/schemas/UpdateDataTableRequestV2'
          application/*+json:
            schema:
              $ref: '#/components/schemas/UpdateDataTableRequestV2'
      responses:
        '200':
          description: Data table updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateDataTableResponseV2'
        '201':
          description: Created
        '400':
          description: Invalid request parameters or no properties provided
        '403':
          description: Forbidden - cannot update production models or insufficient permissions
        '429':
          description: Too Many Requests
        '404':
          description: Data table not found
        '401':
          description: Unauthorized
        '409':
          description: Data table with the same name already exists for this table structure
      security:
      - API Token: []
  /api/v1/DataTables/Data:
    get:
      tags:
      - DataTables
      summary: Get a data table's data.
      description: Either the data table ID must be provided, or the data table's name along with its associated table structure ID must be provided. <br/>If the data table is file only, then a file path to the file along with the file version will be returned so that it can be used with the GetDownloadUrl endpoint. <br/>For other data tables the rows are returned in the response up to the limit. The default limit is 2,000 and the max limit is 10,000. <br/>If the row limit is reached, then an offset is returned that can be used in a subsequent request to get the next set of rows. <br/>The response includes the TableStructureId of the table structure the data table is a part of, even when the requested data table is not the latest version.
      operationId: GetDataTableData
      parameters:
      - name: DataTableId
        in: query
        description: Data Table ID
        schema:
          type: integer
          format: int32
      - name: Name
        in: query
        description: Data Table Name
        schema:
          type: string
      - name: Version
        in: query
        description: Data Table Version
        schema:
          type: integer
          format: int32
      - name: TableStructureId
        in: query
        description: Table Structure ID
        schema:
          type: integer
          format: int32
      - name: Fields
        in: query
        description: "Optional parameter to filter the top-level fields that are returned. \nThe list must be in CSV format. Example: field1,field2,field3"
        schema:
          type: string
      - name: Limit
        in: query
        description: Optional parameter to limit the number of items returned. Default is 200.
        schema:
          type: integer
          format: int32
      - name: Offset
        in: query
        description: Optional parameter to offset the items returned. Default is 0.
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetDataTableResponseV1'
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Not Allowed To Access
        '429':
          description: Too Many Requests
        '404':
          description: Not Found
        '401':
          description: Unauthorized
      security:
      - API Token: []
  /api/v1/DataTables:
    patch:
      tags:
      - DataTables
      summary: Update a data table using an existing file.
      description: This endpoint has the same limitations mentioned in the create data table POST endpoint. <br/>In addition, be aware that a successful request might cause the table to be versioned, thus returning a new data table id that represents the versioned table. <br/>A table will be versioned if it's been used in a projection since the last time it was modified.
      operationId: UpdateDataTable
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDataTableRequestV1'
          text/json:
            schema:
              $ref: '#/components/schemas/UpdateDataTableRequestV1'
          application/*+json:
            schema:
              $ref: '#/components/schemas/UpdateDataTableRequestV1'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateOrUpdateDataTableResponseV1'
        '201':
          description: Created
        '400':
          description: Bad Request
        '403':
          description: Not Allowed To Access
        '429':
          description: Too Many Requests
        '404':
          description: Not Found
        '401':
          description: Unauthorized
      security:
      - API Token: []
  /api/v1/DataTables/{DataTableId}/Data:
    put:
      tags:
      - DataTables
      summary: Update a data table's row data without uploading a file.
      description: 'Pass row data directly to update the data table without needing to upload a file first. Rows should be formatted as arrays of string values matching the column order from the GET /Data endpoint. Index columns come first (sorted by SortOrder), then data columns (sorted by SortOrder). For MortalityTable columns, pass two values: DecrementTableId and ImprovementScaleId. Maximum of 100,000 rows. Note: There is also a 10MB request size limit. A successful request might cause the table to be versioned if it has been used in a projection since the last modification.'
      operationId: UpdateDataTableData
      parameters:
      - name: DataTableId
        in: path
        description: The ID of the data table to update.
        required: true
        schema:
          type: integer
          description: Data Table Id
          format: int32
      requestBody:
        description: The row data to replace existing data.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateDataTableDataRequestV1'
          text/json:
            schema:
              $ref: '#/components/schemas/UpdateDataTableDataRequestV1'
          application/*+json:
            schema:
              $ref: '#/components/schemas/UpdateDataTableDataRequestV1'
      responses:
        '200':
          description: Data table data updated successfully.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateDataTableDataResponseV1'
        '201':
          description: Created
        '400':
          description: Invalid request (file-only table, validation errors, row limit exceeded).
        '403':
          description: Cannot update data tables on production models or no model access.
        '429':
          description: Too Many Requests
        '404':
          description: Data table not found.
        '401':
          description: Unauthorized
      security:
      - API Token: []
components:
  schemas:
    UpdateDataTableRequestV2:
      type: object
      properties:
        name:
          maxLength: 128
          minLength: 0
          type:
          - string
          - 'null'
          description: 'Updated name for the data table (optional).

            If not provided, the existing name will be retained.'
          example: Updated Pension Conversion Table
        indexes:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/DataTableIndexV2'
          description: 'Updated list of indexes for the data table (optional).

            If not provided, existing indexes will be retained.

            Pass an empty array to remove all indexes.'
          example:
          - columnName: Age
            indexReadMethod: ExactMatch
          - columnName: Duration
            indexReadMethod: RangeLowerBound
      additionalProperties: false
      description: 'Request model for updating individual properties of a data table.

        Only properties that are provided will be updated.'
    DataTableIndexV1:
      required:
      - columnName
      type: object
      properties:
        columnName:
          type:
          - string
          - 'null'
        indexReadMethod:
          $ref: '#/components/schemas/DataTableIndexReadMethod'
      additionalProperties: false
    DataTableIndexRequestV2:
      required:
      - columnName
      type: object
      properties:
        columnName:
          minLength: 1
          type: string
          description: Column name to index (required)
          example: Age
        indexReadMethod:
          $ref: '#/components/schemas/DataTableIndexReadMethod'
      additionalProperties: false
      description: Defines an index on a data table column for optimized lookups
    UpdateDataTableDataResponseV1:
      type: object
      properties:
        id:
          type: integer
          description: The data table ID (may differ from request if table was versioned).
          format: int32
        version:
          type: integer
          description: The current version number of the data table.
          format: int32
      additionalProperties: false
      description: Response model for successful data table data update.
    UpdateDataTableDataRequestV1:
      required:
      - rows
      type: object
      properties:
        rows:
          type: array
          items:
            type: array
            items:
              type: string
          description: 'Row data to replace existing table data.

            Each row is an array of string values matching the column order from GET /Data endpoint.

            Index columns first (sorted by SortOrder), then data columns (sorted by SortOrder).'
        indexes:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/DataTableIndexV1'
          description: 'Optional - Update index read methods while updating data.

            If not provided, existing index read methods are preserved.'
      additionalProperties: false
      description: Request model for updating data table row data without a file upload.
    CreateDataTableRequestV2:
      required:
      - name
      - rows
      - tableStructureId
      type: object
      properties:
        tableStructureId:
          type: integer
          description: Table Structure ID (required)
          format: int32
          example: 1
        name:
          maxLength: 200
          minLength: 0
          type: string
          description: Data Table Name (required)
          example: 2024 Mortality Assumptions
        rows:
          maxItems: 100000
          minItems: 1
          type: array
          items:
            type: array
            items:
              type: string
          description: 'Table rows as a 2D array of string values. Values are positional - each position

            corresponds to a column in table structure order. Use empty string "" for null/empty values.'
          example:
          - - '100'
            - Male
            - '0.0123'
            - '2024-01-15'
            - 'true'
            - '16757'
            - '499'
            - '42'
            - Option1
            - '15'
          - - '101'
            - Female
            - '0.0098'
            - '2024-02-20'
            - 'false'
            - '16758'
            - '500'
            - ''
            - Option2
            - ''
        indexes:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/DataTableIndexRequestV2'
          description: Optional list of column indexes for table lookup optimization
      additionalProperties: false
      description: Request model for creating a data table without a file
    OverwriteDataTableRequestV2:
      type: object
      properties:
        fileId:
          type:
          - integer
          - 'null'
          description: File ID
          format: int32
        filePath:
          type:
          - string
          - 'null'
          description: File Path
        fileVersion:
          type:
          - integer
          - 'null'
          description: File Version
          format: int32
        delimiter:
          type:
          - string
          - 'null'
          description: Delimiter
        excelSheetName:
          type:
          - string
          - 'null'
          description: Excel Sheet Name
        isFileOnly:
          type: boolean
          description: Is File Only?
        indexes:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/DataTableIndexV2'
          description: Optional list of indexes to update index read methods.
      additionalProperties: false
      description: Request model for overwriting an existing data table from a file.
    UpdateDataTableRequestV1:
      type: object
      properties:
        fileId:
          type:
          - integer
          - 'null'
          description: File ID
          format: int32
        filePath:
          type:
          - string
          - 'null'
          description: File Path
        fileVersion:
          type:
          - integer
          - 'null'
          description: File Version
          format: int32
        delimiter:
          type:
          - string
          - 'null'
          description: Delimiter
        excelSheetName:
          type:
          - string
          - 'null'
          description: Excel Sheet Name
        dataTableId:
          type:
          - integer
          - 'null'
          description: Date Table ID
          format: int32
        tableStructureId:
          type:
          - integer
          - 'null'
          description: Table Structure ID
          format: int32
        name:
          type:
          - string
          - 'null'
          description: Date Table Name
        isFileOnly:
          type: boolean
          description: Is File Only?
        indexes:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/DataTableIndexV1'
      additionalProperties: false
    GetDataTableResponseColumnV1:
      type: object
      properties:
        name:
          type:
          - string
          - 'null'
        order:
          type: integer
          format: int32
        isIndex:
          type: boolean
        indexReadMethod:
          type:
          - string
          - 'null'
        dataType:
          type:
          - string
          - 'null'
        displayPrecision:
          type:
          - integer
          - 'null'
          format: int32
        dropDownListArrayId:
          type:
          - integer
          - 'null'
          format: int32
        nestedTableStructureId:
          type:
          - integer
          - 'null'
          format: int32
      additionalProperties: false
    ImportDataTableRequestV2:
      required:
      - name
      - tableStructureId
      type: object
      properties:
        fileId:
          type:
          - integer
          - 'null'
          description: File ID
          format: int32
        filePath:
          type:
          - string
          - 'null'
          description: File Path
        fileVersion:
          type:
          - integer
          - 'null'
          description: File Version
          format: int32
        delimiter:
          type:
          - string
          - 'null'
          description: Delimiter
        excelSheetName:
          type:
          - string
          - 'null'
          description: Excel Sheet Name
        tableStructureId:
          type: integer
          description: Table Structure ID (required)
          format: int32
          example: 1
        name:
          maxLength: 128
          minLength: 0
          type: string
          description: Name (required)
        isFileOnly:
          type: boolean
          description: Is File Only?
        indexes:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/DataTableIndexV2'
          description: Optional list of indexes
      additionalProperties: false
    ImportDataTableResponseV2:
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type:
          - string
          - 'null'
        tableStructureId:
          type: integer
          format: int32
        tableStructureName:
          type:
          - string
          - 'null'
        isFileOnly:
          type: boolean
        version:
          type: integer
          format: int32
        isLatestVersion:
          type: boolean
      additionalProperties: false
    DataTableIndexReadMethod:
      enum:
      - ExactMatch
      - RangeLowerBound
      type: string
    GetDataTableResponseV1:
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type:
          - string
          - 'null'
        tableStructureId:
          type:
          - integer
          - 'null'
          format: int32
        filePath:
          type:
          - string
          - 'null'
        fileVersion:
          type:
          - integer
          - 'null'
          format: int32
        columns:
          type:
          - array
          - 'null'
          items:
            $ref: '#/components/schemas/GetDataTableResponseColumnV1'
        rows:
          type:
          - array
          - 'null'
          items:
            type: array
            items:
              type: string
        offset:
          type:
          - integer
          - 'null'
          format: int32
      additionalProperties: false
    DataTableIndexV2:
      required:
      - columnName
      type: object
      properties:
        columnName:
          type:
          - string
          - 'null'
        indexReadMethod:
          $ref: '#/components/schemas/DataTableIndexReadMethod'
      additionalProperties: false
    CreateOrUpdateDataTableResponseV1:
      type: object
      properties:
        id:
          type: integer
          format: int32
        name:
          type:
          - string
          - 'null'
        tableStructureId:
          type: integer
          format: int32
        tableStructureName:
          type:
          - string
          - 'null'
        isFileOnly:
          type: boolean
        version:
          type: integer
          format: int32
        isLatestVersion:
          type: boolean
      additionalProperties: false
    UpdateDataTableResponseV2:
      type: object
      properties:
        id:
          type: integer
          description: The ID of the updated data table.
          format: int32
          example: 12345
        version:
          type: integer
          description: 'The version number of the data table after the update.

            This may be incremented if the table was versioned due to being used in projections.'
          format: int32
          example: 2
      additionalProperties: false
      description: Response model for data table update operations.
  securitySchemes:
    API_Token:
      type: http
      description: The API token received from the Authorize endpoint goes here.
      scheme: Bearer
      bearerFormat: JWT