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.
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/structify-dataset-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
OpenAPI Specification
openapi: 3.2.0
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:
type:
- string
- 'null'
- description: Session token for authentication
in: query
name: session_token
required: false
schema:
type:
- string
- 'null'
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
type:
- number
- 'null'
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:
type:
- string
- 'null'
- description: Session token for authentication
in: query
name: session_token
required: false
schema:
type:
- string
- 'null'
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'
- in: query
name: last_updated
required: false
schema:
format: date-time
type:
- string
- 'null'
- 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'
- in: query
name: last_updated
required: false
schema:
format: date-time
type:
- string
- 'null'
- 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'
- in: query
name: last_updated
required: false
schema:
format: date-time
type:
- string
- 'null'
- 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:
ReorderPropertiesRequest:
properties:
dataset_name:
type: string
property_names:
items:
type: string
type: array
table_name:
type: string
required:
- dataset_name
- table_name
- property_names
type: object
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
EvaluateListItem:
properties:
dataset_1:
type: string
dataset_2:
type: string
id:
type: string
iou:
format: float
type: number
matched:
format: int32
type: integer
run_message:
type:
- string
- 'null'
started_at:
format: date-time
type: string
status:
$ref: '#/components/schemas/EvaluationStatus'
unmatched:
format: int32
type: integer
required:
- id
- dataset_1
- dataset_2
- started_at
- status
- iou
- matched
- unmatched
type: object
DatasetDescriptor:
additionalProperties: false
description: 'A dataset is where you put multiple referential schemas.
A dataset is a complete namespace where all references between schemas
are held within the dataset.'
properties:
description:
type: string
llm_override_field:
type:
- string
- 'null'
name:
type: string
relationships:
items:
$ref: '#/components/schemas/RelationshipDescriptor'
type: array
tables:
items:
$ref: '#/components/schemas/TableDescriptor'
type: array
required:
- name
- description
- tables
- relationships
type: object
EntityWithBestMatch:
properties:
best_match:
allOf:
- $ref: '#/components/schemas/EntityMatch'
entity:
$ref: '#/components/schemas/KgEntity'
required:
- entity
type: object
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
TableMatches:
properties:
entity_matches:
items:
$ref: '#/components/schemas/EntityMatch'
type: array
unmatched_a:
items:
$ref: '#/components/schemas/EntityWithBestMatch'
type: array
unmatched_b:
items:
$ref: '#/components/schemas/EntityWithBestMatch'
type: array
required:
- entity_matches
- unmatched_a
- unmatched_b
type: object
PartialDate:
oneOf:
- properties:
day:
type:
- integer
- 'null'
month:
type:
- integer
- 'null'
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
RemovePropertyRequest:
properties:
dataset_name:
type: string
property_name:
type: string
table_name:
type: string
required:
- dataset_name
- table_name
- property_name
type: object
ConfusionMatrix:
properties:
false_negatives:
format: float
type: number
false_positives:
format: float
type: number
true_positives:
format: float
type: number
required:
- true_positives
- false_positives
- false_negatives
type: object
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
SetPrimaryColumnRequest:
properties:
dataset_name:
type: string
property_name:
type: string
table_name:
type: string
required:
- dataset_name
- table_name
- property_name
type: object
DatasetReturn:
allOf:
- $ref: '#/components/schemas/DatasetDescriptor'
- properties:
created_timestamp:
format: date-time
type: string
id:
$ref: '#/components/schemas/DatasetId'
required:
- id
- created_timestamp
type: object
EntityMatch:
properties:
baseline_cardinality:
format: int64
minimum: 0
type: integer
cardinality_override:
allOf:
- $ref: '#/components/schemas/CardinalityOverride'
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
DatasetDescWithFlags:
allOf:
- $ref: '#/components/schemas/DatasetDescriptor'
- properties:
ephemeral:
type: boolean
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
type:
- integer
- 'null'
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
type:
- integer
- 'null'
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
type:
- integer
- 'null'
name:
description: Organized in a name, description format.
type: string
primary_column:
type:
- string
- 'null'
properties:
description: Organized in a name, description format.
items:
$ref: '#/components/schemas/PropertyDescriptor'
type: array
required:
- name
- description
- properties
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
DatasetMatches:
properties:
relationship_matches:
additionalProperties:
$ref: '#/components/schemas/RelationshipMatches'
type: object
table_matches:
additionalProperties:
$ref: '#/components/schemas/TableMatches'
type: object
required:
- table_matches
- relationship_matches
type: object
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
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
ComparisonNodeId:
format: uuid
type: string
RelationshipMatch:
properties:
matched_properties:
items:
$ref: '#/components/schemas/PropertyMatch'
type: array
relationship_a:
$ref: '#/components/schemas/KgRelationship'
relationship_b:
$ref: '#/components/schemas/KgRelationship'
required:
- matched_properties
- relationship_a
- relationship_b
type: object
SortableTableColumn:
oneOf:
- properties:
user_defined_column:
type: string
required:
- user_defined_column
type: object
- enum:
- creation_time
type: string
UpdatePropertyRequest:
properties:
dataset_name:
type: string
new_property_description:
type:
- string
- 'null'
new_property_merge_strategy:
# --- 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