{
  "openapi": "3.2.0",
  "info": {
    "description": "Entity Matching Pipelines API, used to trigger and monitor pipeline runs.",
    "license": {
      "name": "Apache 2.0",
      "url": "https://www.apache.org/licenses/LICENSE-2.0"
    },
    "title": "Entity Matching Pipeline REST API",
    "version": "1"
  },
  "servers": [
    {
      "url": "https://eu.api.indykite.com/entity-matching/v1"
    },
    {
      "url": "https://us.api.indykite.com/entity-matching/v1"
    }
  ],
  "security": [
    {
      "APIKey": []
    }
  ],
  "tags": [
    {
      "description": "EntityMatchingAPI represents the service interface for the EntityMatching API.",
      "name": "EntityMatching"
    }
  ],
  "paths": {
    "/pipelines/{id}/property-mappings": {
      "get": {
        "description": "Retrieves a list of system-suggested property mappings to use when running the pipeline",
        "operationId": "ReadSuggestedPropertyMapping",
        "parameters": [
          {
            "description": "Entity Matching Pipeline ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.ReadSuggestedPropertyMappingResponse"
                }
              }
            },
            "description": "OK"
          },
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "details": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Accepted"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "errors": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Bad request"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "errors": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "errors": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "errors": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Unprocessable entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Internal error"
          }
        },
        "summary": "EntityMatching read suggested property mapping endpoint",
        "tags": [
          "EntityMatching"
        ]
      }
    },
    "/pipelines/{id}/runs": {
      "post": {
        "description": "Creates a new entity matching pipeline execution and returns confirmation",
        "operationId": "RunEntityMatchingPipeline",
        "parameters": [
          {
            "description": "Entity Matching Pipeline ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/api.RunEntityMatchingRequest"
              }
            }
          },
          "description": "Run Entity Matching Pipeline request",
          "required": true
        },
        "responses": {
          "202": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.RunEntityMatchingPipelineResponse"
                }
              }
            },
            "description": "Accepted"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "errors": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Bad request"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "errors": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Not found"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "errors": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Unprocessable entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Internal error"
          }
        },
        "summary": "EntityMatching run endpoint",
        "tags": [
          "EntityMatching"
        ]
      }
    },
    "/pipelines/{id}/status": {
      "get": {
        "description": "Retrieves the entity matching pipeline status (PENDING,IN_PROGRESS,SUCCESS or ERROR)",
        "operationId": "ReadEntityMatchingPipelineStatus",
        "parameters": [
          {
            "description": "Entity Matching Pipeline ID",
            "in": "path",
            "name": "id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/api.ReadEntityMatchingPipelineStatusResponse"
                }
              }
            },
            "description": "OK"
          },
          "400": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "errors": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Bad request"
          },
          "404": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "errors": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Not found"
          },
          "409": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "errors": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Conflict"
          },
          "422": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "errors": {
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    },
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Unprocessable entity"
          },
          "500": {
            "content": {
              "application/json": {
                "schema": {
                  "properties": {
                    "message": {
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              }
            },
            "description": "Internal error"
          }
        },
        "summary": "EntityMatching read pipeline status endpoint",
        "tags": [
          "EntityMatching"
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "api.CustomPropertyMapping": {
        "properties": {
          "source_node_property": {
            "description": "SourceNodeProperty is a property of the source node that will be compared to TargetNodeProperty.",
            "type": "string"
          },
          "target_node_property": {
            "description": "TargetNodeProperty is a property of the target node that will be compared to SourceNodeProperty.",
            "type": "string"
          }
        },
        "required": [
          "source_node_property",
          "target_node_property"
        ],
        "type": "object"
      },
      "api.ReadEntityMatchingPipelineStatusResponse": {
        "properties": {
          "entity_matching_status": {
            "description": "EntityMatchingStatus is the status assigned to the pipeline's step that matches node entities.",
            "type": "string"
          },
          "id": {
            "description": "ID is the Entity Matching Pipeline globally unique identifier.",
            "type": "string"
          },
          "property_mapping_status": {
            "description": "PropertyMappingStatus is the status assigned to the pipeline's step that maps node types' properties.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "api.ReadSuggestedPropertyMappingResponse": {
        "properties": {
          "id": {
            "description": "ID is the Entity Matching Pipeline globally unique identifier.",
            "type": "string"
          },
          "suggested_property_mappings": {
            "description": "SuggestedPropertyMappings contains the rules the pipeline will use to match source nodes with target nodes\nThese values can be used when running a pipeline (after adjusting the payload).",
            "items": {
              "$ref": "#/components/schemas/api.SuggestedPropertyMapping"
            },
            "type": "array"
          }
        },
        "type": "object"
      },
      "api.RunEntityMatchingPipelineResponse": {
        "properties": {
          "etag": {
            "description": "Etag is the multiversion concurrency control version.",
            "type": "string"
          },
          "id": {
            "description": "ID is the Entity Matching Pipeline globally unique identifier.",
            "type": "string"
          },
          "last_run_time": {
            "description": "LastRunTime indicates the last time the pipeline was started.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "api.RunEntityMatchingRequest": {
        "properties": {
          "custom_property_mappings": {
            "description": "CustomPropertyMappings contains the rules to match nodes properties.\nIf empty, the default rules will be used (stored as part of the pipeline configuration).\nIf present, it will overwrite the stored configuration.",
            "items": {
              "$ref": "#/components/schemas/api.CustomPropertyMapping"
            },
            "type": "array"
          },
          "similarity_score_cutoff": {
            "description": "SimilarityScoreCutoff defines the required threshold (in range [0,1]),\nabove which entities will be automatically matched.",
            "format": "float",
            "maximum": 1,
            "minimum": 0,
            "type": "number"
          }
        },
        "required": [
          "similarity_score_cutoff"
        ],
        "type": "object"
      },
      "api.SuggestedPropertyMapping": {
        "properties": {
          "similarity_score_cutoff": {
            "description": "SimilarityScoreCutoff defines the percentage (in range [0,1])\nof how similar SourceNodeProperty and TargetNodeProperty are.\nMeaning, any property that has a similarity score above this percentage will be automatically matched.\nTherefore, this value can (and should) be taken into consideration when\nsetting a cutoff threshold for running a pipeline.",
            "format": "float",
            "type": "number"
          },
          "source_node_property": {
            "description": "SourceNodeProperty is a property of the source node that has been compared to TargetNodeProperty.",
            "type": "string"
          },
          "source_node_type": {
            "description": "SourceNodeType is the type of the node that will be compared to nodes of TargetNodeType.",
            "type": "string"
          },
          "target_node_property": {
            "description": "TargetNodeProperty is a property of the target node that  has been compared to SourceNodeProperty.",
            "type": "string"
          },
          "target_node_type": {
            "description": "TargetNodeType is the type of the node that  has been compared to nodes of SourceNodeType.",
            "type": "string"
          }
        },
        "type": "object"
      },
      "restapi.DetailedError": {
        "properties": {
          "errors": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "message": {
            "type": "string"
          }
        },
        "type": "object"
      },
      "restapi.DetailedMessageResponse": {
        "properties": {
          "details": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "message": {
            "examples": [
              "Accepted"
            ],
            "type": "string"
          }
        },
        "type": "object"
      },
      "restapi.ErrorResponse": {
        "properties": {
          "message": {
            "examples": [
              "Internal Server Error"
            ],
            "type": "string"
          }
        },
        "type": "object"
      }
    },
    "securitySchemes": {
      "APIKey": {
        "description": "The value of the App Agent credential header must be passed as is, without any prefix.",
        "in": "header",
        "name": "X-IK-ClientKey",
        "type": "apiKey"
      }
    }
  }
}