Structify dataset API

Dataset management endpoints

OpenAPI Specification

structify-dataset-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  contact:
    email: team@structify.ai
    name: Structify Team
  description: Every enterprise's data team.
  license:
    name: Discuss directly with founders for license.
    url: https://structify.ai
  title: Structify account dataset API
  version: 0.1.0
servers:
- description: Production server
  url: https://api.structify.ai
- description: Local server
  url: http://localhost:8080
security:
- api_key: []
- session_token: []
tags:
- description: Dataset management endpoints
  name: dataset
paths:
  /dataset/add_property:
    post:
      operationId: dataset_add_property
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddPropertyRequest'
        required: true
      responses:
        '200':
          description: Property added successfully
      security:
      - api_key: []
      - session_token: []
      summary: Add a property descriptor to a table in the dataset schema
      tags:
      - dataset
  /dataset/count_missing_embeddings:
    get:
      operationId: dataset_count_missing_embeddings
      parameters:
      - in: query
        name: name
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MissingEmbeddingsCount'
          description: Count of entities with missing embeddings retrieved successfully.
        '404':
          description: Dataset not found
        '500':
          description: Internal server error
      security:
      - api_key: []
      - session_token: []
      tags:
      - dataset
  /dataset/create:
    post:
      description: Creates a dataset.
      operationId: dataset_create
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatasetDescWithFlags'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatasetId'
          description: Dataset created successfully
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Bad request - dataset already exists or invalid input
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Forbidden - user does not have write access in any team
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Internal server error
      security:
      - api_key: []
      - session_token: []
      summary: Create a Dataset
      tags:
      - dataset
  /dataset/delete:
    delete:
      operationId: dataset_delete
      parameters:
      - description: The name of the dataset
        in: query
        name: name
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Dataset deleted successfully
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Bad request
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Forbidden - user does not have write access in any team
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Dataset not found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Internal server error
      security:
      - api_key: []
      summary: Permanently delete a dataset and all its contents
      tags:
      - dataset
  /dataset/enrichment_progress:
    get:
      operationId: dataset_enrichment_progress
      parameters:
      - description: Enrichment progress for the dataset
        in: query
        name: name
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobCount'
          description: Enrichment progress for dataset retrieved successfully.
      security:
      - api_key: []
      - session_token: []
      summary: Get the enrichment progress for a dataset
      tags:
      - dataset
  /dataset/entity_ws:
    get:
      operationId: dataset_entity_ws
      parameters:
      - description: The name of the dataset to monitor
        in: query
        name: name
        required: true
        schema:
          type: string
      - description: API key for authentication
        in: query
        name: api_key
        required: false
        schema:
          nullable: true
          type: string
      - description: Session token for authentication
        in: query
        name: session_token
        required: false
        schema:
          nullable: true
          type: string
      responses:
        '101':
          description: WebSocket connection established
      security:
      - api_key: []
      - session_token: []
      tags:
      - dataset
  /dataset/evaluate/delete:
    delete:
      operationId: dataset_evaluate_delete
      parameters:
      - in: query
        name: id
        required: true
        schema:
          $ref: '#/components/schemas/ComparisonNodeId'
      responses:
        '200':
          description: Dataset evaluation deleted successfully
      security:
      - api_key: []
      summary: Delete a dataset evaluation result by ID
      tags:
      - dataset
  /dataset/evaluate/get:
    get:
      operationId: dataset_evaluate_get
      parameters:
      - in: query
        name: id
        required: true
        schema:
          $ref: '#/components/schemas/ComparisonNodeId'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EvaluateComparisonResult'
          description: Dataset evaluated successfully
      security:
      - api_key: []
      summary: Get a dataset evaluation result by ID
      tags:
      - dataset
  /dataset/evaluate/list:
    get:
      operationId: dataset_evaluate_list
      parameters:
      - in: query
        name: offset
        required: true
        schema:
          minimum: 0
          type: integer
      - in: query
        name: limit
        required: true
        schema:
          maximum: 100
          minimum: 1
          type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/EvaluateListItem'
                type: array
          description: Dataset evaluations listed successfully
      security:
      - api_key: []
      summary: List all dataset evaluation results with pagination
      tags:
      - dataset
  /dataset/evaluate/run:
    post:
      operationId: dataset_evaluate_run
      parameters:
      - in: query
        name: dataset_1
        required: true
        schema:
          $ref: '#/components/schemas/DatasetId'
      - in: query
        name: dataset_2
        required: true
        schema:
          $ref: '#/components/schemas/DatasetId'
      - in: query
        name: dataset_2_is_ground_truth
        required: true
        schema:
          default: false
          type: boolean
      - in: query
        name: merge_threshold_override
        required: false
        schema:
          format: double
          nullable: true
          type: number
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ComparisonNodeId'
          description: Dataset evaluation started
      security:
      - api_key: []
      summary: Evaluate two datasets
      tags:
      - dataset
  /dataset/evaluate/status:
    get:
      operationId: dataset_evaluate_status
      parameters:
      - in: query
        name: id
        required: true
        schema:
          $ref: '#/components/schemas/ComparisonNodeId'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StatusResponse'
          description: Dataset evaluation status retrieved successfully
      security:
      - api_key: []
      summary: Get the status of a dataset evaluation
      tags:
      - dataset
  /dataset/export_to_csv:
    get:
      description: You need to specify a dataset and a table_name
      operationId: dataset_export_csv
      parameters:
      - in: query
        name: dataset
        required: true
        schema:
          type: string
      - in: query
        name: name
        required: true
        schema:
          type: string
      responses:
        '200':
          description: CSV file containing table data
      security:
      - api_key: []
      - session_token: []
      summary: Export entities from a table in your dataset as CSV.
      tags:
      - dataset
  /dataset/export_to_excel:
    get:
      description: Each table and relationship type will be in its own sheet
      operationId: dataset_export_excel
      parameters:
      - in: query
        name: dataset
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Excel file containing all tables and relationships
      security:
      - api_key: []
      - session_token: []
      summary: Export all tables and relationships from your dataset as an Excel file.
      tags:
      - dataset
  /dataset/info:
    get:
      operationId: dataset_info
      parameters:
      - description: Information about the dataset
        in: query
        name: name
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatasetReturn'
          description: Dataset retrieved successfully or not found.
      security:
      - api_key: []
      summary: Grab a dataset by its name.
      tags:
      - dataset
  /dataset/job_ws:
    get:
      operationId: dataset_job_ws
      parameters:
      - description: The name of the dataset to monitor
        in: query
        name: name
        required: true
        schema:
          type: string
      - description: API key for authentication
        in: query
        name: api_key
        required: false
        schema:
          nullable: true
          type: string
      - description: Session token for authentication
        in: query
        name: session_token
        required: false
        schema:
          nullable: true
          type: string
      responses:
        '101':
          description: WebSocket connection established
      security:
      - api_key: []
      - session_token: []
      summary: WebSocket endpoint for job updates
      tags:
      - dataset
  /dataset/list:
    get:
      description: Gets all datasets owned by the current user
      operationId: dataset_list
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/Dataset'
                type: array
          description: ''
      security:
      - api_key: []
      - session_token: []
      summary: List datasets
      tags:
      - dataset
  /dataset/match:
    post:
      description: 'Returns: The matched subgraph and a score for the match.'
      operationId: dataset_match
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubgraphQuery'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties:
                  $ref: '#/components/schemas/MatchResponse'
                type: object
          description: Match correspondences
      summary: Given a query subgraph, find the most similar subgraph in the existing dataset.
      tags:
      - dataset
  /dataset/remove_property:
    post:
      operationId: dataset_remove_property
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RemovePropertyRequest'
        required: true
      responses:
        '200':
          description: Property removed successfully
      security:
      - api_key: []
      - session_token: []
      summary: Remove a property descriptor from a table in the dataset schema
      tags:
      - dataset
  /dataset/reorder_properties:
    post:
      operationId: dataset_reorder_properties
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReorderPropertiesRequest'
        required: true
      responses:
        '200':
          description: Properties reordered successfully
      security:
      - api_key: []
      - session_token: []
      tags:
      - dataset
  /dataset/set_primary_column:
    post:
      operationId: dataset_set_primary_column
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetPrimaryColumnRequest'
        required: true
      responses:
        '200':
          description: Primary column set successfully
      security:
      - api_key: []
      - session_token: []
      tags:
      - dataset
  /dataset/update_property:
    post:
      operationId: dataset_update_property
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdatePropertyRequest'
        required: true
      responses:
        '200':
          description: Property updated successfully
      security:
      - api_key: []
      - session_token: []
      summary: Update a property descriptor in a table in the dataset schema
      tags:
      - dataset
  /dataset/update_relationship:
    post:
      operationId: dataset_update_relationship
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRelationshipRequest'
        required: true
      responses:
        '200':
          description: Relationship updated successfully
      security:
      - api_key: []
      - session_token: []
      summary: Update a relationship descriptor in the dataset schema
      tags:
      - dataset
  /dataset/view_relationships:
    get:
      description: You need to specify a dataset and the name of the relationship
      operationId: dataset_view_relationships
      parameters:
      - in: query
        name: offset
        required: false
        schema:
          minimum: 0
          type: integer
      - in: query
        name: limit
        required: false
        schema:
          minimum: 0
          type: integer
      - in: query
        name: dataset
        required: true
        schema:
          type: string
      - in: query
        name: name
        required: true
        schema:
          type: string
      - in: query
        name: job_id
        required: false
        schema:
          allOf:
          - $ref: '#/components/schemas/JobId'
          nullable: true
      - in: query
        name: last_updated
        required: false
        schema:
          format: date-time
          nullable: true
          type: string
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/SortBy'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/KgRelationship'
                type: array
          description: ''
      security:
      - api_key: []
      - session_token: []
      summary: View relationships in your dataset.
      tags:
      - dataset
  /dataset/view_table:
    get:
      description: You need to specify a dataset and a table_name
      operationId: dataset_view
      parameters:
      - in: query
        name: offset
        required: false
        schema:
          minimum: 0
          type: integer
      - in: query
        name: limit
        required: false
        schema:
          minimum: 0
          type: integer
      - in: query
        name: dataset
        required: true
        schema:
          type: string
      - in: query
        name: name
        required: true
        schema:
          type: string
      - in: query
        name: job_id
        required: false
        schema:
          allOf:
          - $ref: '#/components/schemas/JobId'
          nullable: true
      - in: query
        name: last_updated
        required: false
        schema:
          format: date-time
          nullable: true
          type: string
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/SortBy'
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/KgEntity'
                type: array
          description: ''
      security:
      - api_key: []
      - session_token: []
      summary: View entities from a table in your dataset.
      tags:
      - dataset
  /dataset/view_tables_with_relationships:
    get:
      description: the relationships for each entity and the targets for each relationship.
      operationId: dataset_view_tables_with_relationships
      parameters:
      - in: query
        name: offset
        required: false
        schema:
          minimum: 0
          type: integer
      - in: query
        name: limit
        required: false
        schema:
          minimum: 0
          type: integer
      - in: query
        name: dataset
        required: true
        schema:
          type: string
      - in: query
        name: name
        required: true
        schema:
          type: string
      - in: query
        name: job_id
        required: false
        schema:
          allOf:
          - $ref: '#/components/schemas/JobId'
          nullable: true
      - in: query
        name: last_updated
        required: false
        schema:
          format: date-time
          nullable: true
          type: string
      - in: query
        name: sort_by
        required: false
        schema:
          $ref: '#/components/schemas/SortBy'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedJointResponse'
          description: ''
      security:
      - api_key: []
      - session_token: []
      summary: Paginates through the entities. As its paginating through the entities, it gets
      tags:
      - dataset
components:
  schemas:
    RelationshipMatches:
      properties:
        relationship_matches:
          items:
            $ref: '#/components/schemas/RelationshipMatch'
          type: array
        unmatched_a:
          items:
            $ref: '#/components/schemas/KgRelationship'
          type: array
        unmatched_b:
          items:
            $ref: '#/components/schemas/KgRelationship'
          type: array
      required:
      - relationship_matches
      - unmatched_a
      - unmatched_b
      type: object
    PaginatedJointResponse:
      properties:
        connected_entities:
          items:
            $ref: '#/components/schemas/KgEntity'
          type: array
        entities:
          items:
            $ref: '#/components/schemas/KgEntity'
          type: array
        relationships:
          items:
            $ref: '#/components/schemas/KgRelationship'
          type: array
      required:
      - entities
      - relationships
      - connected_entities
      type: object
    Address:
      oneOf:
      - properties:
          components:
            additionalProperties:
              type: string
            type: object
          original_address:
            type: string
        required:
        - original_address
        - components
        title: AddressObject
        type: object
      - description: 'Address string in formats: ''123 Main St, Springfield, IL 62701, USA'', ''1600 Amphitheatre Parkway, Mountain View, California 94043'', ''1600 Pennsylvania Ave NW, Washington, DC 20500'', ''NYC, NY'', ''Oahu, Hawaii'''
        title: AddressString
        type: string
      title: AddressProperty
    LLMEntity:
      additionalProperties: false
      properties:
        id:
          minimum: 0
          type: integer
        properties:
          additionalProperties:
            $ref: '#/components/schemas/BasicPropValue'
          type: object
        type:
          type: string
      required:
      - id
      - type
      - properties
      type: object
    DatasetStats:
      properties:
        per_relationship:
          additionalProperties:
            $ref: '#/components/schemas/RelationshipStats'
          type: object
        per_table:
          additionalProperties:
            $ref: '#/components/schemas/TableStats'
          type: object
      required:
      - per_table
      - per_relationship
      type: object
    TableDescriptor:
      additionalProperties: false
      description: The full definition of what a schema is - without duplicate information.
      properties:
        description:
          type: string
        expected_cardinality:
          description: 'Expected number of unique values in the complete dataset.


            This is used for our probabilistic merge strategy.'
          format: int64
          minimum: 0
          nullable: true
          type: integer
        name:
          description: Organized in a name, description format.
          type: string
        primary_column:
          nullable: true
          type: string
        properties:
          description: Organized in a name, description format.
          items:
            $ref: '#/components/schemas/PropertyDescriptor'
          type: array
      required:
      - name
      - description
      - properties
      type: object
    MissingEmbeddingsCount:
      properties:
        count:
          format: int64
          type: integer
      required:
      - count
      type: object
    SortableTableColumn:
      oneOf:
      - properties:
          user_defined_column:
            type: string
        required:
        - user_defined_column
        type: object
      - enum:
        - creation_time
        type: string
    PartialDate:
      oneOf:
      - properties:
          day:
            nullable: true
            type: integer
          month:
            nullable: true
            type: integer
          original_string:
            type: string
          year:
            type: integer
        required:
        - year
        - original_string
        title: PartialDateObject
        type: object
      - description: 'Date string in formats: ''YYYY'', ''YYYY-MM'', ''YYYY-MM-DD'', ''DD-MM-YYYY'', ''MM-DD-YYYY'', ''Jan 3, 2023'', ''3 Jan 2023'', ''2023 Apr 3'', etc.'
        title: PartialDateString
        type: string
      title: PartialDateProperty
    EntityId:
      format: uuid
      type: string
    SetPrimaryColumnRequest:
      properties:
        dataset_name:
          type: string
        property_name:
          type: string
        table_name:
          type: string
      required:
      - dataset_name
      - table_name
      - property_name
      type: object
    StatusResponse:
      properties:
        status:
          $ref: '#/components/schemas/EvaluationStatus'
      required:
      - status
      type: object
    MergeStrategy:
      oneOf:
      - description: 'Property with unique 1:1 correspondence to its parent.


          Merge based on this property 100% of the time'
        enum:
        - Unique
        type: string
      - properties:
          Probabilistic:
            $ref: '#/components/schemas/MergeConfig'
        required:
        - Probabilistic
        type: object
      - enum:
        - NoSignal
        type: string
    ComparisonStrategy:
      enum:
      - Default
      - EnforceUniqueness
      type: string
    PropertyType:
      oneOf:
      - enum:
        - String
        type: string
      - enum:
        - Boolean
        type: string
      - properties:
          Enum:
            items:
              type: string
            type: array
        required:
        - Enum
        type: object
      - enum:
        - Integer
        type: string
      - enum:
        - Float
        type: string
      - enum:
        - Date
        type: string
      - enum:
        - URL
        type: string
      - enum:
        - Money
        type: string
      - enum:
        - Image
        type: string
      - enum:
        - PersonName
        type: string
      - enum:
        - Address
        type: string
    Money:
      oneOf:
      - description: 'Money string that includes currency and amount: $10k, £100.00, 1 million CAD, ¥1e8 etc.'
        title: MoneyString
        type: string
      - properties:
          amount:
            type: number
          currency_code:
            enum:
            - USD
            - EUR
            - GBP
            - JPY
            - CNY
            - INR
            - RUB
            - CAD
            - AUD
            - CHF
            - ILS
            - NZD
            - SGD
            - HKD
            - NOK
            - SEK
            - PLN
            - TRY
            - DKK
            - MXN
            - ZAR
            - PHP
            - VND
            - THB
            - BRL
            - KRW
            type: string
          original_string:
            type: string
        required:
        - currency_code
        - amount
        - original_string
        title: MoneyObject
        type: object
      title: MoneyProperty
    KgRelationship:
      properties:
        created_at:
          format: date-time
          type: string
        dataset_id:
          $ref: '#/components/schemas/DatasetId'
        from_id:
          $ref: '#/components/schemas/EntityId'
        id:
          $ref: '#/components/schemas/RelationshipId'
        label:
          type: string
        properties:
          additionalProperties:
            $ref: '#/components/schemas/ComplexPropValue'
          type: object
        to_id:
          $ref: '#/components/schemas/EntityId'
        updated_at:
          format: date-time
          type: string
      required:
      - id
      - from_id
      - to_id
      - label
      - properties
      - created_at
      - updated_at
      - dataset_id
      title: Relationship
      type: object
    RemovePropertyRequest:
      properties:
        dataset_name:
          type: string
        property_name:
          type: string
        table_name:
          type: string
      required:
      - dataset_name
      - table_name
      - property_name
      type: object
    RelationshipMergeProbability:
      properties:
        source_cardinality_given_target_match:
          description: 'Describes the expected cardinality of the source table when a match is found in the target table


            For example, if we have a source company and a target funding round, we expect the source company

            to appear in multiple funding rounds, but not *too* many.

            So if we have a funding round match, the expected number of unique companies is relatively small.

            This is an estimate of that number.'
          format: int64
          minimum: 0
          nullable: true
          type: integer
        target_cardinality_given_source_match:
          description: 'Describes the expected cardinality of the target table when a match is found in the source table


            For example, if we have a source company and a target funding round, we usually expect

            some number of funding rounds to be associated with a single company but not *too* many.

            So if we have a company match, the expected number of unique funding rounds is relatively small.

            This is an estimate of that number.'
          format: int64
          minimum: 0
          nullable: true
          type: integer
      type: object
    PropertyMatch:
      properties:
        match_prob:
          format: double
          type: number
        match_transfer_prob:
          format: double
          type: number
        name:
          type: string
        property_cardinality:
          format: int64
          minimum: 0
          type: integer
        unique:
          type: boolean
      required:
      - name
      - match_prob
      - property_cardinality
      - match_transfer_prob
      - unique
      type: object
    EntityMatch:
      properties:
        baseline_cardinality:
          format: int64
          minimum: 0
          type: integer
        cardinality_override:
          allOf:
          - $ref: '#/components/schemas/CardinalityOverride'
          nullable: true
        entity_a:
          $ref: '#/components/schemas/KgEntity'
        entity_b:
          $ref: '#/components/schemas/KgEntity'
        matched_properties:
          items:
            $ref: '#/components/schemas/PropertyMatch'
          type: array
        p_match:
          format: double
          type: number
        p_match_threshold:
          format: double
          type: number
      required:
      - baseline_cardinality
      - p_match
      - p_match_threshold
      - matched_properties
      - entity_a
      - entity_b
      type: object
    LLMRelationship:
      additionalProperties: false
      properties:
        properties:
          additionalProperties:
            $ref: '#/components/schemas/BasicPropValue'
          type: object
        source:
          minimum: 0
          type: integer
        target:
          minimum: 0
          type: integer
        type:
          type: string
      required:
      - type
      - source
      - target
      type: object
    EvaluationStatus:
      enum:
      - Running
      - Completed
      - Failed
      type: string
    CardinalityOverride:
      properties:
        cardinality:
          format: int64
          minimum: 0
          type: integer
        entity_id:
          $ref: '#/components/schemas/EntityId'
        relationship_name:
          type: string
      required:
      - entity_id
      - cardinality
      - relationship_name
      type: object
    JobId:
      format: uuid
      type: string
    KgEntity:
      properties:
        created_at:
          format: date-time
          type: string
        dataset_id:
          $ref: '#/components/schemas/DatasetId'
        id:
          $ref: '#/components/schemas/EntityId'
        job_id:
          allOf:
          - $ref: '#/components/schemas/JobId'
          nullable: true
        label:
          type: string
        properties:
          additionalProperties:
            $ref: '#/components/schemas/ComplexPropValue'
          type: object
        updated_at:
          format: date-time
          type: string
      required:
      - id
      - label
      - created_at
      - updated_at
      - dataset_id
      - properties
      type: object
    RelationshipStats:
      properties:
        per_property:
          additionalProperties:
            $ref: '#/components/schemas/ConfusionMatrix'
          type: object
        prop_granularity:
          $ref: '#/components/schemas/ConfusionMatrix'
        relationship_granularity:
          $ref: '#/components/schemas/ConfusionMatrix'
      required:
      - relationship_granularity
      - prop_granularity
      - per_property
      type: object
    RelationshipMergeStrategy:
      oneOf:
      - $ref: '#/components/schemas/RelationshipMergeProbability'
    SortBy:
      properties:
        col_id:
          $ref: '#/components/schemas/SortableTableColumn'
        sort:
          $ref: '#/components/schemas/SortDirection'
      required:
      - col_id
      - sort
      type: ob

# --- truncated at 32 KB (44 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/structify/refs/heads/main/openapi/structify-dataset-api-openapi.yml