OpenAPI Specification
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