diff --git a/api/src/engine/connectors/datashield/main.connector.ts b/api/src/engine/connectors/datashield/main.connector.ts
index 1cdbb509c93a78794235c371c6fb3a62076b4792..c5784b7914d89e62ac7feaab3635692166976889 100644
--- a/api/src/engine/connectors/datashield/main.connector.ts
+++ b/api/src/engine/connectors/datashield/main.connector.ts
@@ -5,6 +5,11 @@ import { ExperimentCreateInput } from 'src/engine/models/experiment/experiment-c
 import { Experiment } from 'src/engine/models/experiment/experiment.model';
 
 export default class DataShieldService implements IEngineService {
+  createExperiment(
+    data: ExperimentCreateInput,
+  ): Experiment | Promise<Experiment> {
+    throw new Error('Method not implemented.');
+  }
   createTransient(
     data: ExperimentCreateInput,
   ): Experiment | Promise<Experiment> {
diff --git a/api/src/engine/connectors/exareme/main.connector.ts b/api/src/engine/connectors/exareme/main.connector.ts
index aa0b30f4bb9cab2cb917062b5dcc222481bc042e..c3dea2df35773cafe6341fa1b79b201657903d09 100644
--- a/api/src/engine/connectors/exareme/main.connector.ts
+++ b/api/src/engine/connectors/exareme/main.connector.ts
@@ -24,6 +24,11 @@ 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 createTransient(data: ExperimentCreateInput): Promise<Experiment> {
     const form = experimentInputToData(data);
diff --git a/api/src/engine/engine.interfaces.ts b/api/src/engine/engine.interfaces.ts
index 0d90e92e62de3e342cc206f4579a2bf399df1f36..5289075ea86bbcae6d7fd333b5bcf76985598dc0 100644
--- a/api/src/engine/engine.interfaces.ts
+++ b/api/src/engine/engine.interfaces.ts
@@ -10,8 +10,18 @@ export interface IEngineOptions {
 }
 
 export interface IEngineService {
+  //GraphQL
   getDomains(ids: string[]): Domain[] | Promise<Domain[]>;
 
+  createTransient(
+    data: ExperimentCreateInput,
+  ): Promise<Experiment> | Experiment;
+
+  createExperiment(
+    data: ExperimentCreateInput,
+  ): Promise<Experiment> | Experiment;
+
+  // Standard REST API call
   getAlgorithms(request: Request): Observable<string>;
 
   getExperiments(request: Request): Observable<string>;
@@ -24,10 +34,6 @@ export interface IEngineService {
 
   startExperimentTransient(request: Request): Observable<string>;
 
-  createTransient(
-    data: ExperimentCreateInput,
-  ): Promise<Experiment> | Experiment;
-
   startExperiment(request: Request): Observable<string>;
 
   getActiveUser(request: Request): Observable<string>;
diff --git a/api/src/engine/engine.resolver.ts b/api/src/engine/engine.resolver.ts
index e3de433e113e0e13577372240cda4114aa02a193..c75c68e9c5d4a482a13dbef9878d3e211d978b13 100644
--- a/api/src/engine/engine.resolver.ts
+++ b/api/src/engine/engine.resolver.ts
@@ -21,9 +21,13 @@ export class EngineResolver {
   }
 
   @Mutation(() => Experiment)
-  async createTransient(
+  async createExperiment(
     @Args('data') experimentCreateInput: ExperimentCreateInput,
+    @Args('transient', { nullable: true, defaultValue: false })
+    isTransient: boolean,
   ) {
-    return this.engineService.createTransient(experimentCreateInput);
+    return isTransient
+      ? this.engineService.createTransient(experimentCreateInput)
+      : this.engineService.createExperiment(experimentCreateInput);
   }
 }
diff --git a/api/src/schema.gql b/api/src/schema.gql
index c2ebe062948d88d817911b41942288f96c926b25..39dd34e76af27f6833af38d7a3f53aacf41be2f1 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -74,7 +74,7 @@ type Query {
 }
 
 type Mutation {
-  createTransient(data: ExperimentCreateInput!): Experiment!
+  createExperiment(transient: Boolean = false, data: ExperimentCreateInput!): Experiment!
 }
 
 input ExperimentCreateInput {