diff --git a/api/src/engine/models/result/common/result-union.model.ts b/api/src/engine/models/result/common/result-union.model.ts
index 9957a6068e693c7c99cc9ffd59ebec2ddc61a635..2f56bb4d1f6ef577e9e836972f45dd59ede7fc28 100644
--- a/api/src/engine/models/result/common/result-union.model.ts
+++ b/api/src/engine/models/result/common/result-union.model.ts
@@ -1,11 +1,19 @@
 import { createUnionType } from '@nestjs/graphql';
 import { GroupsResult } from '../groups-result.model';
+import { HeatMapResult } from '../heat-map-result.model';
+import { LineChartResult } from '../line-chart-result.model';
 import { RawResult } from '../raw-result.model';
 import { TableResult } from '../table-result.model';
 
 export const ResultUnion = createUnionType({
   name: 'ResultUnion',
-  types: () => [TableResult, RawResult, GroupsResult],
+  types: () => [
+    TableResult,
+    RawResult,
+    GroupsResult,
+    HeatMapResult,
+    LineChartResult,
+  ],
   resolveType(value) {
     if (value.headers) {
       return TableResult;
@@ -19,6 +27,14 @@ export const ResultUnion = createUnionType({
       return GroupsResult;
     }
 
+    if (value.matrix) {
+      return HeatMapResult;
+    }
+
+    if (value.x) {
+      return LineChartResult;
+    }
+
     return null;
   },
 });
diff --git a/api/src/engine/models/result/line-chart-result.model.ts b/api/src/engine/models/result/line-chart-result.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..594f564d3ad6ec0b9cfb99b01ecab7c479e21018
--- /dev/null
+++ b/api/src/engine/models/result/line-chart-result.model.ts
@@ -0,0 +1,54 @@
+import { Field, ObjectType, registerEnumType } from '@nestjs/graphql';
+import { ChartAxis } from './common/chart-axis.model';
+import { Result } from './common/result.model';
+
+export enum LineType {
+  NORMAL,
+  DASHED,
+}
+
+registerEnumType(LineType, {
+  name: 'LineType',
+});
+
+@ObjectType()
+export class ExtraLineInfo {
+  @Field()
+  label: string;
+
+  @Field(() => [String])
+  values: string[];
+}
+
+@ObjectType()
+export class LineResult {
+  @Field()
+  label: string;
+
+  @Field(() => Number)
+  x: number[];
+
+  @Field(() => [Number])
+  y: number[];
+
+  @Field(() => [ExtraLineInfo], { nullable: true, defaultValue: [] })
+  extraLineInfos?: ExtraLineInfo[];
+
+  @Field(() => LineType, { nullable: true, defaultValue: LineType.NORMAL })
+  type?: LineType;
+}
+
+@ObjectType()
+export class LineChartResult extends Result {
+  @Field()
+  name: string;
+
+  @Field(() => ChartAxis)
+  xAxis?: ChartAxis;
+
+  @Field(() => ChartAxis)
+  yAxis?: ChartAxis;
+
+  @Field(() => [LineResult])
+  lines: LineResult[];
+}
diff --git a/api/src/schema.gql b/api/src/schema.gql
index 86b31a4d2dcb38a15ab00200462ce2c5bd220d97..41bcc26a44002b9a834896cb435e7d1eeeeba58e 100644
--- a/api/src/schema.gql
+++ b/api/src/schema.gql
@@ -63,7 +63,7 @@ type GroupResult {
   results: [ResultUnion!]!
 }
 
-union ResultUnion = TableResult | RawResult | GroupsResult
+union ResultUnion = TableResult | RawResult | GroupsResult | HeatMapResult | LineChartResult
 
 type TableResult {
   name: String!
@@ -84,6 +84,43 @@ type GroupsResult {
   groups: [GroupResult!]!
 }
 
+type HeatMapResult {
+  name: String!
+  matrix: [[Float!]!]!
+  xAxis: ChartAxis!
+  yAxis: ChartAxis!
+}
+
+type LineChartResult {
+  name: String!
+  xAxis: ChartAxis!
+  yAxis: ChartAxis!
+  lines: [LineResult!]!
+}
+
+type ChartAxis {
+  label: String
+  categories: [String!]
+}
+
+type ExtraLineInfo {
+  label: String!
+  values: [String!]!
+}
+
+type LineResult {
+  label: String!
+  x: Float!
+  y: [Float!]!
+  extraLineInfos: [ExtraLineInfo!]
+  type: LineType
+}
+
+enum LineType {
+  NORMAL
+  DASHED
+}
+
 type Header {
   name: String!
   type: String!