diff --git a/src/models/drugSchema.ts b/src/models/drugSchema.ts
new file mode 100644
index 0000000000000000000000000000000000000000..346dfa963dbb25a44781528dcb1a87a603587246
--- /dev/null
+++ b/src/models/drugSchema.ts
@@ -0,0 +1,19 @@
+import { z } from 'zod';
+import { referenceSchema } from './referenceSchema';
+import { targetSchema } from './targetSchema';
+
+export const drugSchema = z.object({
+  /** identifier of the chemical */
+  id: z.string(),
+  name: z.string(),
+  description: z.string(),
+  /** list of synonyms  */
+  synonyms: z.array(z.string()),
+  brandNames: z.array(z.string()),
+  /** does drug cross blood brain barrier */
+  bloodBrainBarrier: z.string(),
+  /** list of references */
+  references: z.array(referenceSchema),
+  /** list of targets */
+  targets: z.array(targetSchema),
+});
diff --git a/src/models/referenceSchema.ts b/src/models/referenceSchema.ts
new file mode 100644
index 0000000000000000000000000000000000000000..029c6ecb95672442da710d71a3c00d51be4bcb6b
--- /dev/null
+++ b/src/models/referenceSchema.ts
@@ -0,0 +1,18 @@
+import { z } from 'zod';
+
+export const referenceSchema = z.object({
+  link: z.string(),
+  article: z.object({
+    title: z.string(),
+    authors: z.array(z.string()),
+    journal: z.string(),
+    year: z.number(),
+    link: z.string(),
+    pubmedId: z.string(),
+    citationCount: z.number(),
+  }),
+  type: z.string(),
+  resource: z.string(),
+  id: z.number(),
+  annotatorClassName: z.string(),
+});
diff --git a/src/models/targetElementSchema.ts b/src/models/targetElementSchema.ts
new file mode 100644
index 0000000000000000000000000000000000000000..090be95c57164b2a51795042fed777896f9135d5
--- /dev/null
+++ b/src/models/targetElementSchema.ts
@@ -0,0 +1,7 @@
+import { z } from 'zod';
+
+export const targetElementSchema = z.object({
+  id: z.number(),
+  modelId: z.number(),
+  type: z.string(),
+});
diff --git a/src/models/targetParticipantSchema.ts b/src/models/targetParticipantSchema.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fbf821471b0d1272660a51743fe05801eea43ca3
--- /dev/null
+++ b/src/models/targetParticipantSchema.ts
@@ -0,0 +1,9 @@
+import { z } from 'zod';
+
+export const targetParticipantSchema = z.object({
+  link: z.string(),
+  type: z.string(),
+  resource: z.string(),
+  id: z.number(),
+  annotatorClassName: z.string(),
+});
diff --git a/src/models/targetSchema.ts b/src/models/targetSchema.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bda0bfcaac652d98c5086c59a11687f4e792e1d8
--- /dev/null
+++ b/src/models/targetSchema.ts
@@ -0,0 +1,15 @@
+import { z } from 'zod';
+import { referenceSchema } from './referenceSchema';
+import { targetElementSchema } from './targetElementSchema';
+import { targetParticipantSchema } from './targetParticipantSchema';
+
+export const targetSchema = z.object({
+  /** target name */
+  name: z.string(),
+  /** list of target references */
+  references: z.array(referenceSchema),
+  /**  list of elements on the map associated with this target */
+  targetElements: z.array(targetElementSchema),
+  /** list of identifiers associated with this target */
+  targetParticipants: z.array(targetParticipantSchema),
+});