diff --git a/migrations/mysql/2023-06-28-133700_add_collection_external_id/down.sql b/migrations/mysql/2023-06-28-133700_add_collection_external_id/down.sql
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/migrations/mysql/2023-06-28-133700_add_collection_external_id/up.sql b/migrations/mysql/2023-06-28-133700_add_collection_external_id/up.sql
new file mode 100644
index 0000000000000000000000000000000000000000..7f44709ba6d199b2d4dc18759510cec70bef8aa6
--- /dev/null
+++ b/migrations/mysql/2023-06-28-133700_add_collection_external_id/up.sql
@@ -0,0 +1 @@
+ALTER TABLE collections ADD COLUMN external_id TEXT;
diff --git a/migrations/postgresql/2023-06-28-133700_add_collection_external_id/down.sql b/migrations/postgresql/2023-06-28-133700_add_collection_external_id/down.sql
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/migrations/postgresql/2023-06-28-133700_add_collection_external_id/up.sql b/migrations/postgresql/2023-06-28-133700_add_collection_external_id/up.sql
new file mode 100644
index 0000000000000000000000000000000000000000..7f44709ba6d199b2d4dc18759510cec70bef8aa6
--- /dev/null
+++ b/migrations/postgresql/2023-06-28-133700_add_collection_external_id/up.sql
@@ -0,0 +1 @@
+ALTER TABLE collections ADD COLUMN external_id TEXT;
diff --git a/migrations/sqlite/2023-06-28-133700_add_collection_external_id/down.sql b/migrations/sqlite/2023-06-28-133700_add_collection_external_id/down.sql
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/migrations/sqlite/2023-06-28-133700_add_collection_external_id/up.sql b/migrations/sqlite/2023-06-28-133700_add_collection_external_id/up.sql
new file mode 100644
index 0000000000000000000000000000000000000000..7f44709ba6d199b2d4dc18759510cec70bef8aa6
--- /dev/null
+++ b/migrations/sqlite/2023-06-28-133700_add_collection_external_id/up.sql
@@ -0,0 +1 @@
+ALTER TABLE collections ADD COLUMN external_id TEXT;
diff --git a/src/api/core/organizations.rs b/src/api/core/organizations.rs
index 40901d31fb04a28e0754cbd8ca9b2595f71b71b1..bd08080c6ec23e2c7e19ce2a6463252681caa0b6 100644
--- a/src/api/core/organizations.rs
+++ b/src/api/core/organizations.rs
@@ -106,6 +106,7 @@ struct OrgData {
     CollectionName: String,
     Key: String,
     Name: String,
+    ExternalId: String,
     Keys: Option<OrgKeyData>,
     #[serde(rename = "PlanType")]
     _PlanType: NumberOrString, // Ignored, always use the same plan
@@ -124,6 +125,7 @@ struct NewCollectionData {
     Name: String,
     Groups: Vec<NewCollectionObjectData>,
     Users: Vec<NewCollectionObjectData>,
+    ExternalId: Option<String>,
 }
 
 #[derive(Deserialize)]
@@ -168,7 +170,7 @@ async fn create_organization(headers: Headers, data: JsonUpcase<OrgData>, mut co
 
     let org = Organization::new(data.Name, data.BillingEmail, private_key, public_key);
     let mut user_org = UserOrganization::new(headers.user.uuid, org.uuid.clone());
-    let collection = Collection::new(org.uuid.clone(), data.CollectionName);
+    let collection = Collection::new(org.uuid.clone(), data.CollectionName, Some(data.ExternalId));
 
     user_org.akey = data.Key;
     user_org.access_all = true;
@@ -390,7 +392,7 @@ async fn post_organization_collections(
         None => err!("Can't find organization details"),
     };
 
-    let collection = Collection::new(org.uuid, data.Name);
+    let collection = Collection::new(org.uuid, data.Name, data.ExternalId);
     collection.save(&mut conn).await?;
 
     log_event(
@@ -467,6 +469,7 @@ async fn post_organization_collection_update(
     }
 
     collection.name = data.Name;
+    collection.external_id = data.ExternalId;
     collection.save(&mut conn).await?;
 
     log_event(
@@ -1580,7 +1583,7 @@ async fn post_org_import(
 
     let mut collections = Vec::new();
     for coll in data.Collections {
-        let collection = Collection::new(org_id.clone(), coll.Name);
+        let collection = Collection::new(org_id.clone(), coll.Name, coll.ExternalId);
         if collection.save(&mut conn).await.is_err() {
             collections.push(Err(Error::new("Failed to create Collection", "Failed to create Collection")));
         } else {
diff --git a/src/db/models/collection.rs b/src/db/models/collection.rs
index 6a9acab84b3378a97662eb494459f073a0b8b557..f2b04ce5375d080bcacde0a40ab585e40fb1f985 100644
--- a/src/db/models/collection.rs
+++ b/src/db/models/collection.rs
@@ -10,6 +10,7 @@ db_object! {
         pub uuid: String,
         pub org_uuid: String,
         pub name: String,
+        pub external_id: Option<String>,
     }
 
     #[derive(Identifiable, Queryable, Insertable)]
@@ -33,18 +34,21 @@ db_object! {
 
 /// Local methods
 impl Collection {
-    pub fn new(org_uuid: String, name: String) -> Self {
-        Self {
+    pub fn new(org_uuid: String, name: String, external_id: Option<String>) -> Self {
+        let mut new_model = Self {
             uuid: crate::util::get_uuid(),
-
             org_uuid,
             name,
-        }
+            external_id: None,
+        };
+
+        new_model.set_external_id(external_id);
+        new_model
     }
 
     pub fn to_json(&self) -> Value {
         json!({
-            "ExternalId": null, // Not support by us
+            "ExternalId": self.external_id,
             "Id": self.uuid,
             "OrganizationId": self.org_uuid,
             "Name": self.name,
@@ -52,6 +56,21 @@ impl Collection {
         })
     }
 
+    pub fn set_external_id(&mut self, external_id: Option<String>) {
+        //Check if external id is empty. We don't want to have
+        //empty strings in the database
+        match external_id {
+            Some(external_id) => {
+                if external_id.is_empty() {
+                    self.external_id = None;
+                } else {
+                    self.external_id = Some(external_id)
+                }
+            }
+            None => self.external_id = None,
+        }
+    }
+
     pub async fn to_json_details(
         &self,
         user_uuid: &str,
diff --git a/src/db/schemas/mysql/schema.rs b/src/db/schemas/mysql/schema.rs
index 378032750856c078482c13d87691015544eeafbc..695d5bd77b8d43ea7ec34a16f78dcb5e6784b38e 100644
--- a/src/db/schemas/mysql/schema.rs
+++ b/src/db/schemas/mysql/schema.rs
@@ -38,6 +38,7 @@ table! {
         uuid -> Text,
         org_uuid -> Text,
         name -> Text,
+        external_id -> Nullable<Text>,
     }
 }
 
diff --git a/src/db/schemas/postgresql/schema.rs b/src/db/schemas/postgresql/schema.rs
index 0b69bbc47b5924ee82564909a4e68e46d1db0fa6..766c03e7baedcd400871712ca5c87c28af695239 100644
--- a/src/db/schemas/postgresql/schema.rs
+++ b/src/db/schemas/postgresql/schema.rs
@@ -38,6 +38,7 @@ table! {
         uuid -> Text,
         org_uuid -> Text,
         name -> Text,
+        external_id -> Nullable<Text>,
     }
 }
 
diff --git a/src/db/schemas/sqlite/schema.rs b/src/db/schemas/sqlite/schema.rs
index 10dd3fe8daf17113d2eb8b7cb3c20dbc46ac791b..031ec7aa8bf290dbbb253fb6cc17b7e9c7fabcfc 100644
--- a/src/db/schemas/sqlite/schema.rs
+++ b/src/db/schemas/sqlite/schema.rs
@@ -38,6 +38,7 @@ table! {
         uuid -> Text,
         org_uuid -> Text,
         name -> Text,
+        external_id -> Nullable<Text>,
     }
 }