Skip to main content
POST
https://sandbox.getcollate.io/api
/
v1
/
mlmodels
POST /v1/mlmodels
from metadata.sdk import configure
from metadata.sdk.entities import MLModels
from metadata.generated.schema.api.data.createMlModel import CreateMlModelRequest

configure(
    host="https://your-company.getcollate.io/api",
    jwt_token="your-jwt-token"
)

request = CreateMlModelRequest(
    name="customer_segmentation",
    displayName="Customer Segmentation Model",
    service="mlflow_svc",
    algorithm="KMeans",
    description="Segments customers into groups based on purchasing behavior",
    mlFeatures=[
        {
            "name": "total_spend",
            "dataType": "numerical"
        },
        {
            "name": "purchase_frequency",
            "dataType": "numerical"
        }
    ],
    mlHyperParameters=[
        {"name": "n_clusters", "value": "5"},
        {"name": "max_iter", "value": "300"}
    ],
    target="customer_segment"
)

model = MLModels.create(request)
print(f"Created: {model.fullyQualifiedName}")
{
  "id": "6b04e1d8-b66d-4f78-ab21-beb5be2cf4f2",
  "name": "customer_segmentation",
  "fullyQualifiedName": "mlflow_svc.customer_segmentation",
  "displayName": "Customer Segmentation Model",
  "description": "Segments customers into groups based on purchasing behavior",
  "algorithm": "KMeans",
  "mlFeatures": [
    {
      "name": "total_spend",
      "dataType": "numerical"
    },
    {
      "name": "purchase_frequency",
      "dataType": "numerical"
    }
  ],
  "mlHyperParameters": [
    {"name": "n_clusters", "value": "5"},
    {"name": "max_iter", "value": "300"}
  ],
  "target": "customer_segment",
  "version": 0.1,
  "updatedAt": 1769982669247,
  "updatedBy": "admin",
  "service": {
    "id": "ca22d46e-81b9-4e48-85b5-0adc44980da9",
    "type": "mlmodelService",
    "name": "mlflow_svc",
    "fullyQualifiedName": "mlflow_svc",
    "deleted": false
  },
  "serviceType": "Mlflow",
  "href": "http://localhost:8585/api/v1/mlmodels/6b04e1d8-b66d-4f78-ab21-beb5be2cf4f2",
  "deleted": false,
  "owners": [],
  "tags": [],
  "followers": [],
  "votes": {
    "upVotes": 0,
    "downVotes": 0
  },
  "domains": []
}

Create an ML Model

Create a new ML model within an ML model service.

Body Parameters

name
string
required
Name of the ML model. Must be unique within the parent ML model service.
service
string
required
Fully qualified name of the parent MlModelService (e.g., mlflow_svc).
algorithm
string
Algorithm used by the ML model (e.g., KMeans, RandomForest, XGBoost, Neural Network).
displayName
string
Human-readable display name for the ML model.
description
string
Description of the ML model in Markdown format.
mlFeatures
array
Array of ML features used by the model.
mlHyperParameters
array
Array of hyperparameters used by the model.
target
string
Target variable or objective of the ML model.
server
string
Endpoint URL for the model serving server.
dashboard
object
Reference to an associated dashboard entity.
owners
array
Array of owner references (users or teams) to assign to the ML model.
domain
string
Fully qualified name of the domain to assign for governance purposes.
tags
array
Array of classification tags to apply to the ML model.
extension
object
Custom property values defined by your organization’s metadata schema.
POST /v1/mlmodels
from metadata.sdk import configure
from metadata.sdk.entities import MLModels
from metadata.generated.schema.api.data.createMlModel import CreateMlModelRequest

configure(
    host="https://your-company.getcollate.io/api",
    jwt_token="your-jwt-token"
)

request = CreateMlModelRequest(
    name="customer_segmentation",
    displayName="Customer Segmentation Model",
    service="mlflow_svc",
    algorithm="KMeans",
    description="Segments customers into groups based on purchasing behavior",
    mlFeatures=[
        {
            "name": "total_spend",
            "dataType": "numerical"
        },
        {
            "name": "purchase_frequency",
            "dataType": "numerical"
        }
    ],
    mlHyperParameters=[
        {"name": "n_clusters", "value": "5"},
        {"name": "max_iter", "value": "300"}
    ],
    target="customer_segment"
)

model = MLModels.create(request)
print(f"Created: {model.fullyQualifiedName}")
{
  "id": "6b04e1d8-b66d-4f78-ab21-beb5be2cf4f2",
  "name": "customer_segmentation",
  "fullyQualifiedName": "mlflow_svc.customer_segmentation",
  "displayName": "Customer Segmentation Model",
  "description": "Segments customers into groups based on purchasing behavior",
  "algorithm": "KMeans",
  "mlFeatures": [
    {
      "name": "total_spend",
      "dataType": "numerical"
    },
    {
      "name": "purchase_frequency",
      "dataType": "numerical"
    }
  ],
  "mlHyperParameters": [
    {"name": "n_clusters", "value": "5"},
    {"name": "max_iter", "value": "300"}
  ],
  "target": "customer_segment",
  "version": 0.1,
  "updatedAt": 1769982669247,
  "updatedBy": "admin",
  "service": {
    "id": "ca22d46e-81b9-4e48-85b5-0adc44980da9",
    "type": "mlmodelService",
    "name": "mlflow_svc",
    "fullyQualifiedName": "mlflow_svc",
    "deleted": false
  },
  "serviceType": "Mlflow",
  "href": "http://localhost:8585/api/v1/mlmodels/6b04e1d8-b66d-4f78-ab21-beb5be2cf4f2",
  "deleted": false,
  "owners": [],
  "tags": [],
  "followers": [],
  "votes": {
    "upVotes": 0,
    "downVotes": 0
  },
  "domains": []
}

Returns

Returns the created ML model object with all specified properties and system-generated fields.

Response

id
string
Unique identifier for the ML model (UUID format).
name
string
ML model name.
fullyQualifiedName
string
Fully qualified name in format service.modelName.
displayName
string
Human-readable display name.
description
string
Description of the ML model in Markdown format.
algorithm
string
Algorithm used by the ML model.
mlFeatures
array
Features used by the ML model.
mlHyperParameters
array
Hyperparameters used by the ML model.
target
string
Target variable or objective of the ML model.
service
object
Reference to the parent ML model service.
serviceType
string
Type of ML model service (e.g., Mlflow, Sklearn, SageMaker).
owners
array
List of owners assigned to the ML model.
domains
array
Domain assignments for governance.
tags
array
Classification tags applied to the ML model.
extension
object
Custom property values defined by your organization’s metadata schema.
version
number
Version number for the entity (starts at 0.1).

Create or Update (PUT)

Use PUT /v1/mlmodels instead of POST to perform an upsert. If an ML model with the same fullyQualifiedName already exists, it will be updated; otherwise, a new ML model is created. The request body is the same as POST.
curl -X PUT "{base_url}/api/v1/mlmodels" \
  -H "Authorization: Bearer {access_token}" \
  -H "Content-Type: application/json" \
  -d '{ ... same body as POST ... }'
PUT will not return a 409 conflict error if the entity already exists — it will update the existing entity instead.

Bulk Create or Update (PUT)

Use PUT /v1/mlmodels/bulk to create or update multiple ML models in a single request. The request body is an array of create request objects.
curl -X PUT "{base_url}/api/v1/mlmodels/bulk" \
  -H "Authorization: Bearer {access_token}" \
  -H "Content-Type: application/json" \
  -d '[
    { "name": "model_one", "service": "mlflow_svc", "algorithm": "KMeans" },
    { "name": "model_two", "service": "mlflow_svc", "algorithm": "RandomForest" }
  ]'

Error Handling

CodeError TypeDescription
400BAD_REQUESTInvalid request body or missing required fields
401UNAUTHORIZEDInvalid or missing authentication token
403FORBIDDENUser lacks permission to create ML models
409ENTITY_ALREADY_EXISTSML model with same name already exists in service (POST only)