diff --git a/libs/erp/index.ts b/libs/erp/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..268af9d107a50592b3c19ec0e238fb21fdb0751d
--- /dev/null
+++ b/libs/erp/index.ts
@@ -0,0 +1 @@
+export * as rtgmService from './rtgm';
diff --git a/libs/erp/rtgm/index.ts b/libs/erp/rtgm/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..db48eb4edcca16ef277964c11af2efd53274b969
--- /dev/null
+++ b/libs/erp/rtgm/index.ts
@@ -0,0 +1,2 @@
+export * from './rtgm-response.model';
+export * from './rtgm-usage.model';
diff --git a/libs/erp/rtgm/rtgm-response.model.ts b/libs/erp/rtgm/rtgm-response.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..489cf33c16e98bfe175501ddb38eb0394084a769
--- /dev/null
+++ b/libs/erp/rtgm/rtgm-response.model.ts
@@ -0,0 +1,78 @@
+import {Response} from '../../nshmp-ws-utils';
+
+/**
+ * RTGM calculation response.
+ */
+export type RtgmCalcResponse = Response<RtgmRequestData, RtgmResponseData>;
+
+export interface RtgmRequestData {
+  hazard_curves: RtgmHazardCurveRequest[];
+  building_code: string;
+}
+
+export interface RtgmHazardCurveRequest {
+  label: string;
+  iml: number[];
+  afe: number[];
+}
+
+export interface RtgmResponseData {
+  riskTargets: RiskTargets;
+  summary: Record<string, RtgmSummary>;
+  RTGM: Record<string, Rtgm>;
+}
+
+export interface RiskTargets {
+  UH_retPeriod: number;
+  condCollapseProb: number;
+  beta: number;
+  tgtCollapseRisk_T: number;
+  timeHorizon_Yr: number;
+  riskTgt_Annual: number;
+  BldgCode: string;
+}
+
+export interface RtgmSummary {
+  uhgm: number;
+  rtgm: number;
+  riskCoeff: number;
+  colRisk_annual: number;
+  timePeriod: number;
+  colRisk_T: number;
+}
+
+export interface Rtgm {
+  riskTargets: RiskTargets;
+  rawHaz: RtgmRawHaz;
+  rtgmCalc: RtgmCalc;
+}
+
+export interface RtgmRawHaz {
+  iml: number[];
+  afe: number[];
+}
+
+export interface RtgmCalc {
+  uhgm: number;
+  rtgm: number;
+  riskCoeff: number;
+  upsampledHazCurve: RtgmUpsampledHaz;
+  iterations: RtgmIteration[];
+}
+
+export interface RtgmUpsampledHaz {
+  imlUP: number[];
+  afeUP: number[];
+}
+
+export interface RtgmIteration {
+  iter: number;
+  rtgmGuess: number;
+  frCDF: number[];
+  frPDF: number[];
+  hazXpdf: number[];
+  colCDF: number[];
+  colCDF_Yr: number[];
+  colRisk_Annual: number;
+  colRisk_Yr: number;
+}
diff --git a/libs/erp/rtgm/rtgm-usage.model.ts b/libs/erp/rtgm/rtgm-usage.model.ts
new file mode 100644
index 0000000000000000000000000000000000000000..58c5e139d02a8005e7e93eed250fbf9da8435998
--- /dev/null
+++ b/libs/erp/rtgm/rtgm-usage.model.ts
@@ -0,0 +1,43 @@
+import {Response} from '../../nshmp-ws-utils';
+
+/**
+ * RTGM service usage response.
+ */
+export type RtgmUsageResponse = Response<string, RtgmRequestMetdata>;
+
+/**
+ * RTGM service usage request metadata.
+ */
+export interface RtgmRequestMetdata {
+  description: string;
+  syntax: string[];
+  parameters: RtgmUsageParameters;
+}
+
+/**
+ * RTGM usage parameters.
+ */
+export interface RtgmUsageParameters {
+  building_code: UsageParameterValues;
+  label: UsageParameter;
+  iml: UsageParameter;
+  afe: UsageParameter;
+}
+
+/**
+ * RTGM usage parameter
+ */
+export interface UsageParameter {
+  label: string;
+  info: string;
+  units: string;
+}
+
+/**
+ * RTGM usage paramter with values.
+ */
+export interface UsageParameterValues {
+  label: string;
+  info: string;
+  values: string[];
+}