diff --git a/api/src/engine/connectors/datashield/main.connector.ts b/api/src/engine/connectors/datashield/main.connector.ts
index c5784b7914d89e62ac7feaab3635692166976889..34cc6ae3b4a5f09c44cd9b032ba30a6544db28f4 100644
--- a/api/src/engine/connectors/datashield/main.connector.ts
+++ b/api/src/engine/connectors/datashield/main.connector.ts
@@ -1,7 +1,7 @@
 import { Observable } from 'rxjs';
 import { IEngineService } from 'src/engine/engine.interfaces';
 import { Domain } from 'src/engine/models/domain.model';
-import { ExperimentCreateInput } from 'src/engine/models/experiment/experiment-create.input';
+import { ExperimentCreateInput } from 'src/engine/models/experiment/input/experiment-create.input';
 import { Experiment } from 'src/engine/models/experiment/experiment.model';
 
 export default class DataShieldService implements IEngineService {
diff --git a/api/src/engine/connectors/exareme/converters.ts b/api/src/engine/connectors/exareme/converters.ts
index cb1c884c6101bec8de814accda529690cb92896f..8520cdebb43b3e909b4f4bd9776860b70c510d79 100644
--- a/api/src/engine/connectors/exareme/converters.ts
+++ b/api/src/engine/connectors/exareme/converters.ts
@@ -1,6 +1,7 @@
 import { Category } from 'src/engine/models/category.model';
-import { ExperimentCreateInput } from 'src/engine/models/experiment/experiment-create.input';
 import { Experiment } from 'src/engine/models/experiment/experiment.model';
+import { AlgorithmParamInput } from 'src/engine/models/experiment/input/algorithm-parameter.input';
+import { ExperimentCreateInput } from 'src/engine/models/experiment/input/experiment-create.input';
 import { Group } from 'src/engine/models/group.model';
 import { TableResult } from 'src/engine/models/result/table-result.model';
 import { Variable } from 'src/engine/models/variable.model';
@@ -39,6 +40,13 @@ export const dataToVariable = (data: VariableEntity): Variable => {
   };
 };
 
+const algoParamInputToData = (param: AlgorithmParamInput) => {
+  return {
+    name: param.name,
+    value: param.value.join(','),
+  };
+};
+
 export const experimentInputToData = (data: ExperimentCreateInput) => {
   return {
     algorithm: {
@@ -47,10 +55,6 @@ export const experimentInputToData = (data: ExperimentCreateInput) => {
           name: 'dataset',
           value: data.datasets.join(','),
         },
-        {
-          name: 'y',
-          value: data.variables.join(','),
-        },
         {
           name: 'filter',
           value: data.filter,
@@ -59,9 +63,9 @@ export const experimentInputToData = (data: ExperimentCreateInput) => {
           name: 'pathology',
           value: data.domain,
         },
-      ],
-      type: 'string',
-      name: data.algorithm,
+      ].concat(data.algorithm.parameters.map(algoParamInputToData)),
+      type: data.algorithm.type ?? 'string',
+      name: data.algorithm.name,
     },
     name: data.name,
   };
diff --git a/api/src/engine/connectors/exareme/main.connector.ts b/api/src/engine/connectors/exareme/main.connector.ts
index c3dea2df35773cafe6341fa1b79b201657903d09..8e549b464180d1d2f56525971369fa697021d8f4 100644
--- a/api/src/engine/connectors/exareme/main.connector.ts
+++ b/api/src/engine/connectors/exareme/main.connector.ts
@@ -4,8 +4,8 @@ import { Request } from 'express';
 import { firstValueFrom, map, Observable } from 'rxjs';
 import { IEngineOptions, IEngineService } from 'src/engine/engine.interfaces';
 import { Domain } from 'src/engine/models/domain.model';
-import { ExperimentCreateInput } from 'src/engine/models/experiment/experiment-create.input';
 import { Experiment } from 'src/engine/models/experiment/experiment.model';
+import { ExperimentCreateInput } from 'src/engine/models/experiment/input/experiment-create.input';
 import { Group } from 'src/engine/models/group.model';
 import { Variable } from 'src/engine/models/variable.model';
 import {
@@ -24,10 +24,16 @@ export default class ExaremeService implements IEngineService {
     private readonly options: IEngineOptions,
     private readonly httpService: HttpService,
   ) {}
-  createExperiment(
-    data: ExperimentCreateInput,
-  ): Experiment | Promise<Experiment> {
-    throw new Error('Method not implemented.');
+  async createExperiment(data: ExperimentCreateInput): Promise<Experiment> {
+    const form = experimentInputToData(data);
+
+    const path = this.options.baseurl + 'experiments';
+
+    const resultAPI = await firstValueFrom(
+      this.httpService.post<TransientDataResult>(path, form),
+    );
+
+    return dataToTransient(resultAPI.data);
   }
 
   async createTransient(data: ExperimentCreateInput): Promise<Experiment> {
diff --git a/api/src/engine/engine.interfaces.ts b/api/src/engine/engine.interfaces.ts
index 5289075ea86bbcae6d7fd333b5bcf76985598dc0..753902446cf3731575018b49e919807626aef2f5 100644
--- a/api/src/engine/engine.interfaces.ts
+++ b/api/src/engine/engine.interfaces.ts
@@ -1,7 +1,7 @@
 import { Request } from 'express';
 import { Observable } from 'rxjs';
 import { Domain } from './models/domain.model';
-import { ExperimentCreateInput } from './models/experiment/experiment-create.input';
+import { ExperimentCreateInput } from './models/experiment/input/experiment-create.input';
 import { Experiment } from './models/experiment/experiment.model';
 
 export interface IEngineOptions {
diff --git a/api/src/engine/engine.resolver.ts b/api/src/engine/engine.resolver.ts
index c75c68e9c5d4a482a13dbef9878d3e211d978b13..6432cd16f26c341aad44afd90f993a2bf649880e 100644
--- a/api/src/engine/engine.resolver.ts
+++ b/api/src/engine/engine.resolver.ts
@@ -3,7 +3,7 @@ import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
 import { ENGINE_SERVICE } from './engine.constants';
 import { IEngineService } from './engine.interfaces';
 import { Domain } from './models/domain.model';
-import { ExperimentCreateInput } from './models/experiment/experiment-create.input';
+import { ExperimentCreateInput } from './models/experiment/input/experiment-create.input';
 import { Experiment } from './models/experiment/experiment.model';
 
 @Resolver()
diff --git a/api/src/engine/models/experiment/algorithm.input.ts b/api/src/engine/models/experiment/algorithm.input.ts
deleted file mode 100644
index 473782c5b6cc0a43091b654bcdbeda9b7685536a..0000000000000000000000000000000000000000
--- a/api/src/engine/models/experiment/algorithm.input.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { Field, InputType } from '@nestjs/graphql';
-
-@InputType()
-export class AlgorithmInput {
-  @Field(() => [String])
-  datasets: string[];
-
-  @Field(() => [String])
-  variables: string[];
-
-  @Field(() => String, { nullable: true })
-  filter: string;
-
-  @Field()
-  domain: string;
-
-  @Field()
-  algorithm: string;
-
-  @Field()
-  name: string;
-}
diff --git a/api/src/engine/models/experiment/input/algorithm-parameter.input.ts b/api/src/engine/models/experiment/input/algorithm-parameter.input.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8eb4cb26b5dade932440b6fef169275988d33b03
--- /dev/null
+++ b/api/src/engine/models/experiment/input/algorithm-parameter.input.ts
@@ -0,0 +1,10 @@
+import { Field, InputType } from '@nestjs/graphql';
+
+@InputType()
+export class AlgorithmParamInput {
+  @Field()
+  name: string;
+
+  @Field(() => [String])
+  value: string[];
+}
diff --git a/api/src/engine/models/experiment/input/algorithm.input.ts b/api/src/engine/models/experiment/input/algorithm.input.ts
new file mode 100644
index 0000000000000000000000000000000000000000..d435595b03a92692d84811fa4f7400b03127f603
--- /dev/null
+++ b/api/src/engine/models/experiment/input/algorithm.input.ts
@@ -0,0 +1,14 @@
+import { Field, InputType } from '@nestjs/graphql';
+import { AlgorithmParamInput } from './algorithm-parameter.input';
+
+@InputType()
+export class AlgorithmInput {
+  @Field()
+  name: string;
+
+  @Field(() => [AlgorithmParamInput])
+  parameters: AlgorithmParamInput[];
+
+  @Field()
+  type: string;
+}
diff --git a/api/src/engine/models/experiment/experiment-create.input.ts b/api/src/engine/models/experiment/input/experiment-create.input.ts
similarity index 77%
rename from api/src/engine/models/experiment/experiment-create.input.ts
rename to api/src/engine/models/experiment/input/experiment-create.input.ts
index d871eead0d40690fda47ec6b8ee5ff76bd173e6d..746e0f5c6645b2715c74ac98108afd6d3ae97c36 100644
--- a/api/src/engine/models/experiment/experiment-create.input.ts
+++ b/api/src/engine/models/experiment/input/experiment-create.input.ts
@@ -1,13 +1,11 @@
 import { Field, InputType } from '@nestjs/graphql';
+import { AlgorithmInput } from './algorithm.input';
 
 @InputType()
 export class ExperimentCreateInput {
   @Field(() => [String])
   datasets: string[];
 
-  @Field(() => [String])
-  variables: string[];
-
   @Field(() => String, { nullable: true })
   filter: string;
 
@@ -15,7 +13,7 @@ export class ExperimentCreateInput {
   domain: string;
 
   @Field()
-  algorithm: string;
+  algorithm: AlgorithmInput;
 
   @Field()
   name: string;
diff --git a/api/src/schema.gql b/api/src/schema.gql
index 39dd34e76af27f6833af38d7a3f53aacf41be2f1..bb7d32c0cc9d125f610017d8eedd3f1f24f5de70 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -79,9 +79,19 @@ type Mutation {
 
 input ExperimentCreateInput {
   datasets: [String!]!
-  variables: [String!]!
   filter: String
   domain: String!
-  algorithm: String!
+  algorithm: AlgorithmInput!
   name: String!
 }
+
+input AlgorithmInput {
+  name: String!
+  parameters: [AlgorithmParamInput!]!
+  type: String!
+}
+
+input AlgorithmParamInput {
+  name: String!
+  value: [String!]!
+}