diff --git a/examples/ibm-partner-center-sell/README.md b/examples/ibm-partner-center-sell/README.md
index cb93a89cb5a..c016ed6a437 100644
--- a/examples/ibm-partner-center-sell/README.md
+++ b/examples/ibm-partner-center-sell/README.md
@@ -120,6 +120,7 @@ resource "ibm_onboarding_catalog_deployment" "onboarding_catalog_deployment_inst
 
 | Name | Description |
 |------|-------------|
+| geo_tags |  |
 | url | The global catalog URL of your product. |
 | catalog_deployment_id | The ID of a global catalog object. |
 
@@ -164,6 +165,7 @@ resource "ibm_onboarding_catalog_plan" "onboarding_catalog_plan_instance" {
 
 | Name | Description |
 |------|-------------|
+| geo_tags |  |
 | url | The global catalog URL of your product. |
 | catalog_plan_id | The ID of a global catalog object. |
 
@@ -208,6 +210,7 @@ resource "ibm_onboarding_catalog_product" "onboarding_catalog_product_instance"
 
 | Name | Description |
 |------|-------------|
+| geo_tags |  |
 | url | The global catalog URL of your product. |
 | catalog_product_id | The ID of a global catalog object. |
 
diff --git a/examples/ibm-partner-center-sell/main.tf b/examples/ibm-partner-center-sell/main.tf
index 9bc4fc99239..bbe0d47d398 100644
--- a/examples/ibm-partner-center-sell/main.tf
+++ b/examples/ibm-partner-center-sell/main.tf
@@ -80,6 +80,111 @@ resource "ibm_onboarding_catalog_deployment" "onboarding_catalog_deployment_inst
       bindable = true
       plan_updateable = true
       service_key_supported = true
+      parameters {
+        displayname = "displayname"
+        name = "name"
+        type = "text"
+        options {
+          displayname = "displayname"
+          value = "value"
+          i18n {
+            en {
+              displayname = "displayname"
+              description = "description"
+            }
+            de {
+              displayname = "displayname"
+              description = "description"
+            }
+            es {
+              displayname = "displayname"
+              description = "description"
+            }
+            fr {
+              displayname = "displayname"
+              description = "description"
+            }
+            it {
+              displayname = "displayname"
+              description = "description"
+            }
+            ja {
+              displayname = "displayname"
+              description = "description"
+            }
+            ko {
+              displayname = "displayname"
+              description = "description"
+            }
+            pt_br {
+              displayname = "displayname"
+              description = "description"
+            }
+            zh_tw {
+              displayname = "displayname"
+              description = "description"
+            }
+            zh_cn {
+              displayname = "displayname"
+              description = "description"
+            }
+          }
+        }
+        value = [ "value" ]
+        layout = "layout"
+        associations = { "key" = "anything as a string" }
+        validation_url = "validation_url"
+        options_url = "options_url"
+        invalidmessage = "invalidmessage"
+        description = "description"
+        required = true
+        pattern = "pattern"
+        placeholder = "placeholder"
+        readonly = true
+        hidden = true
+        i18n {
+          en {
+            displayname = "displayname"
+            description = "description"
+          }
+          de {
+            displayname = "displayname"
+            description = "description"
+          }
+          es {
+            displayname = "displayname"
+            description = "description"
+          }
+          fr {
+            displayname = "displayname"
+            description = "description"
+          }
+          it {
+            displayname = "displayname"
+            description = "description"
+          }
+          ja {
+            displayname = "displayname"
+            description = "description"
+          }
+          ko {
+            displayname = "displayname"
+            description = "description"
+          }
+          pt_br {
+            displayname = "displayname"
+            description = "description"
+          }
+          zh_tw {
+            displayname = "displayname"
+            description = "description"
+          }
+          zh_cn {
+            displayname = "displayname"
+            description = "description"
+          }
+        }
+      }
     }
     deployment {
       broker {
@@ -229,6 +334,112 @@ resource "ibm_onboarding_catalog_product" "onboarding_catalog_product_instance"
       bindable = true
       plan_updateable = true
       service_key_supported = true
+      unique_api_key = true
+      parameters {
+        displayname = "displayname"
+        name = "name"
+        type = "text"
+        options {
+          displayname = "displayname"
+          value = "value"
+          i18n {
+            en {
+              displayname = "displayname"
+              description = "description"
+            }
+            de {
+              displayname = "displayname"
+              description = "description"
+            }
+            es {
+              displayname = "displayname"
+              description = "description"
+            }
+            fr {
+              displayname = "displayname"
+              description = "description"
+            }
+            it {
+              displayname = "displayname"
+              description = "description"
+            }
+            ja {
+              displayname = "displayname"
+              description = "description"
+            }
+            ko {
+              displayname = "displayname"
+              description = "description"
+            }
+            pt_br {
+              displayname = "displayname"
+              description = "description"
+            }
+            zh_tw {
+              displayname = "displayname"
+              description = "description"
+            }
+            zh_cn {
+              displayname = "displayname"
+              description = "description"
+            }
+          }
+        }
+        value = [ "value" ]
+        layout = "layout"
+        associations = { "key" = "anything as a string" }
+        validation_url = "validation_url"
+        options_url = "options_url"
+        invalidmessage = "invalidmessage"
+        description = "description"
+        required = true
+        pattern = "pattern"
+        placeholder = "placeholder"
+        readonly = true
+        hidden = true
+        i18n {
+          en {
+            displayname = "displayname"
+            description = "description"
+          }
+          de {
+            displayname = "displayname"
+            description = "description"
+          }
+          es {
+            displayname = "displayname"
+            description = "description"
+          }
+          fr {
+            displayname = "displayname"
+            description = "description"
+          }
+          it {
+            displayname = "displayname"
+            description = "description"
+          }
+          ja {
+            displayname = "displayname"
+            description = "description"
+          }
+          ko {
+            displayname = "displayname"
+            description = "description"
+          }
+          pt_br {
+            displayname = "displayname"
+            description = "description"
+          }
+          zh_tw {
+            displayname = "displayname"
+            description = "description"
+          }
+          zh_cn {
+            displayname = "displayname"
+            description = "description"
+          }
+        }
+      }
     }
     other {
       pc {
diff --git a/go.mod b/go.mod
index 06272d4e462..8cb87062ad3 100644
--- a/go.mod
+++ b/go.mod
@@ -33,7 +33,7 @@ require (
 	github.com/IBM/logs-router-go-sdk v1.0.5
 	github.com/IBM/mqcloud-go-sdk v0.2.0
 	github.com/IBM/networking-go-sdk v0.51.1
-	github.com/IBM/platform-services-go-sdk v0.72.0
+	github.com/IBM/platform-services-go-sdk v0.73.0
 	github.com/IBM/project-go-sdk v0.3.5
 	github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5
 	github.com/IBM/sarama v1.41.2
diff --git a/go.sum b/go.sum
index 71f092c16cb..90f669e72b9 100644
--- a/go.sum
+++ b/go.sum
@@ -156,8 +156,8 @@ github.com/IBM/mqcloud-go-sdk v0.2.0 h1:QOWk8ZGk0QfIL0MOGTKzNdM3Qe0Hk+ifAFtNSFQo
 github.com/IBM/mqcloud-go-sdk v0.2.0/go.mod h1:VZQKMtqmcdXKhmLhLiPuS/UHMs/5yo2tA/nD83cQt9E=
 github.com/IBM/networking-go-sdk v0.51.1 h1:xRlDFxSMejMmJ7JPFZ9cflL86uJpbqUzuL/1D/pP7/g=
 github.com/IBM/networking-go-sdk v0.51.1/go.mod h1:5aBaPKkm47LHECEOOZ4ltbwypOhapVo5aSCP3MTxmgQ=
-github.com/IBM/platform-services-go-sdk v0.72.0 h1:AfJe6bgqmTQU4ff/2URu3wkRLZD0XIzojn7SLf2yIns=
-github.com/IBM/platform-services-go-sdk v0.72.0/go.mod h1:ApFkvqw7NaluWJ5Uq+afdM/2jQqo5ILc0SzKSVobYNw=
+github.com/IBM/platform-services-go-sdk v0.73.0 h1:CKs6qCM2U549gMn4ULfJB76DaDQpit/+0VmbKDqSpFU=
+github.com/IBM/platform-services-go-sdk v0.73.0/go.mod h1:LSaXGGJUGGPMCCtG1/24r9LJEbF0hmpXtQOhABRk0PY=
 github.com/IBM/project-go-sdk v0.3.5 h1:L+YClFUa14foS0B/hOOY9n7sIdsT5/XQicnXOyJSpyM=
 github.com/IBM/project-go-sdk v0.3.5/go.mod h1:FOJM9ihQV3EEAY6YigcWiTNfVCThtdY8bLC/nhQHFvo=
 github.com/IBM/push-notifications-go-sdk v0.0.0-20210310100607-5790b96c47f5 h1:NPUhkoOCRuv3OFWt19PmwjXGGTKlvmbuPg9fUrBUNe4=
diff --git a/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_deployment.go b/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_deployment.go
index 00486adbed2..034b8274853 100644
--- a/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_deployment.go
+++ b/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_deployment.go
@@ -347,6 +347,528 @@ func ResourceIbmOnboardingCatalogDeployment() *schema.Resource {
 										Optional:    true,
 										Description: "Indicates service credentials support and controls the Service Credential tab on Resource Details page.",
 									},
+									"parameters": &schema.Schema{
+										Type:     schema.TypeList,
+										Optional: true,
+										Elem: &schema.Resource{
+											Schema: map[string]*schema.Schema{
+												"displayname": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The display name for custom service parameters.",
+												},
+												"name": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The key of the parameter.",
+												},
+												"type": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The type of custom service parameters.",
+												},
+												"options": &schema.Schema{
+													Type:     schema.TypeList,
+													Optional: true,
+													Elem: &schema.Resource{
+														Schema: map[string]*schema.Schema{
+															"displayname": &schema.Schema{
+																Type:        schema.TypeString,
+																Optional:    true,
+																Description: "The display name for custom service parameters.",
+															},
+															"value": &schema.Schema{
+																Type:        schema.TypeString,
+																Optional:    true,
+																Description: "The value for custom service parameters.",
+															},
+															"i18n": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The description for the object.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"en": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"de": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"es": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"fr": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"it": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"ja": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"ko": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"pt_br": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"zh_tw": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"zh_cn": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																	},
+																},
+															},
+														},
+													},
+												},
+												"value": &schema.Schema{
+													Type:     schema.TypeList,
+													Optional: true,
+													Elem:     &schema.Schema{Type: schema.TypeString},
+												},
+												"layout": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "Specifies the layout of check box or radio input types. When unspecified, the default layout is horizontal.",
+												},
+												"associations": &schema.Schema{
+													Type:        schema.TypeMap,
+													Optional:    true,
+													Description: "A JSON structure to describe the interactions with pricing plans and/or other custom parameters.",
+													Elem:        &schema.Schema{Type: schema.TypeString},
+												},
+												"validation_url": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The validation URL for custom service parameters.",
+												},
+												"options_url": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The options URL for custom service parameters.",
+												},
+												"invalidmessage": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The message that appears when the content of the text box is invalid.",
+												},
+												"description": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The description of the parameter that is displayed to help users with the value of the parameter.",
+												},
+												"required": &schema.Schema{
+													Type:        schema.TypeBool,
+													Optional:    true,
+													Description: "A boolean value that indicates whether the parameter must be entered in the IBM Cloud user interface.",
+												},
+												"pattern": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "A regular expression that the value is checked against.",
+												},
+												"placeholder": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The placeholder text for custom parameters.",
+												},
+												"readonly": &schema.Schema{
+													Type:        schema.TypeBool,
+													Optional:    true,
+													Description: "A boolean value that indicates whether the value of the parameter is displayed only and cannot be changed by users. The default value is false.",
+												},
+												"hidden": &schema.Schema{
+													Type:        schema.TypeBool,
+													Optional:    true,
+													Description: "Indicates whether the custom parameters is hidden required or not.",
+												},
+												"i18n": &schema.Schema{
+													Type:        schema.TypeList,
+													MaxItems:    1,
+													Optional:    true,
+													Description: "The description for the object.",
+													Elem: &schema.Resource{
+														Schema: map[string]*schema.Schema{
+															"en": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"de": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"es": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"fr": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"it": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"ja": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"ko": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"pt_br": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"zh_tw": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"zh_cn": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+														},
+													},
+												},
+											},
+										},
+									},
 								},
 							},
 						},
@@ -398,6 +920,11 @@ func ResourceIbmOnboardingCatalogDeployment() *schema.Resource {
 					},
 				},
 			},
+			"geo_tags": &schema.Schema{
+				Type:     schema.TypeList,
+				Computed: true,
+				Elem:     &schema.Schema{Type: schema.TypeString},
+			},
 			"url": &schema.Schema{
 				Type:        schema.TypeString,
 				Computed:    true,
@@ -623,6 +1150,12 @@ func resourceIbmOnboardingCatalogDeploymentRead(context context.Context, d *sche
 			return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_onboarding_catalog_deployment", "read", "set-metadata").GetDiag()
 		}
 	}
+	if !core.IsNil(globalCatalogDeployment.GeoTags) {
+		if err = d.Set("geo_tags", globalCatalogDeployment.GeoTags); err != nil {
+			err = fmt.Errorf("Error setting geo_tags: %s", err)
+			return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_onboarding_catalog_deployment", "read", "set-geo_tags").GetDiag()
+		}
+	}
 	if !core.IsNil(globalCatalogDeployment.URL) {
 		if err = d.Set("url", globalCatalogDeployment.URL); err != nil {
 			err = fmt.Errorf("Error setting url: %s", err)
@@ -844,7 +1377,7 @@ func ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogDeploymentMetadata(
 		model.Ui = UiModel
 	}
 	if modelMap["service"] != nil && len(modelMap["service"].([]interface{})) > 0 && modelMap["service"].([]interface{})[0] != nil {
-		ServiceModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataService(modelMap["service"].([]interface{})[0].(map[string]interface{}))
+		ServiceModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogDeploymentMetadataService(modelMap["service"].([]interface{})[0].(map[string]interface{}))
 		if err != nil {
 			return model, err
 		}
@@ -999,8 +1532,8 @@ func ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataUIUrls(mode
 	return model, nil
 }
 
-func ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataService(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataService, error) {
-	model := &partnercentersellv1.GlobalCatalogMetadataService{}
+func ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogDeploymentMetadataService(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogDeploymentMetadataService, error) {
+	model := &partnercentersellv1.GlobalCatalogDeploymentMetadataService{}
 	if modelMap["rc_provisionable"] != nil {
 		model.RcProvisionable = core.BoolPtr(modelMap["rc_provisionable"].(bool))
 	}
@@ -1016,26 +1549,213 @@ func ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataService(mod
 	if modelMap["service_key_supported"] != nil {
 		model.ServiceKeySupported = core.BoolPtr(modelMap["service_key_supported"].(bool))
 	}
+	if modelMap["parameters"] != nil {
+		parameters := []partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters{}
+		for _, parametersItem := range modelMap["parameters"].([]interface{}) {
+			parametersItemModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParameters(parametersItem.(map[string]interface{}))
+			if err != nil {
+				return model, err
+			}
+			parameters = append(parameters, *parametersItemModel)
+		}
+		model.Parameters = parameters
+	}
 	return model, nil
 }
 
-func ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataDeployment(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataDeployment, error) {
-	model := &partnercentersellv1.GlobalCatalogMetadataDeployment{}
-	if modelMap["broker"] != nil && len(modelMap["broker"].([]interface{})) > 0 && modelMap["broker"].([]interface{})[0] != nil {
-		BrokerModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataDeploymentBroker(modelMap["broker"].([]interface{})[0].(map[string]interface{}))
-		if err != nil {
-			return model, err
-		}
-		model.Broker = BrokerModel
-	}
-	if modelMap["location"] != nil && modelMap["location"].(string) != "" {
-		model.Location = core.StringPtr(modelMap["location"].(string))
+func ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParameters(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters, error) {
+	model := &partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters{}
+	if modelMap["displayname"] != nil && modelMap["displayname"].(string) != "" {
+		model.Displayname = core.StringPtr(modelMap["displayname"].(string))
 	}
-	if modelMap["location_url"] != nil && modelMap["location_url"].(string) != "" {
-		model.LocationURL = core.StringPtr(modelMap["location_url"].(string))
+	if modelMap["name"] != nil && modelMap["name"].(string) != "" {
+		model.Name = core.StringPtr(modelMap["name"].(string))
 	}
-	if modelMap["target_crn"] != nil && modelMap["target_crn"].(string) != "" {
-		model.TargetCrn = core.StringPtr(modelMap["target_crn"].(string))
+	if modelMap["type"] != nil && modelMap["type"].(string) != "" {
+		model.Type = core.StringPtr(modelMap["type"].(string))
+	}
+	if modelMap["options"] != nil {
+		options := []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{}
+		for _, optionsItem := range modelMap["options"].([]interface{}) {
+			optionsItemModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersOptions(optionsItem.(map[string]interface{}))
+			if err != nil {
+				return model, err
+			}
+			options = append(options, *optionsItemModel)
+		}
+		model.Options = options
+	}
+	if modelMap["value"] != nil {
+		value := []string{}
+		for _, valueItem := range modelMap["value"].([]interface{}) {
+			value = append(value, valueItem.(string))
+		}
+		model.Value = value
+	}
+	if modelMap["layout"] != nil && modelMap["layout"].(string) != "" {
+		model.Layout = core.StringPtr(modelMap["layout"].(string))
+	}
+	if modelMap["associations"] != nil {
+		model.Associations = modelMap["associations"].(map[string]interface{})
+	}
+	if modelMap["validation_url"] != nil && modelMap["validation_url"].(string) != "" {
+		model.ValidationURL = core.StringPtr(modelMap["validation_url"].(string))
+	}
+	if modelMap["options_url"] != nil && modelMap["options_url"].(string) != "" {
+		model.OptionsURL = core.StringPtr(modelMap["options_url"].(string))
+	}
+	if modelMap["invalidmessage"] != nil && modelMap["invalidmessage"].(string) != "" {
+		model.Invalidmessage = core.StringPtr(modelMap["invalidmessage"].(string))
+	}
+	if modelMap["description"] != nil && modelMap["description"].(string) != "" {
+		model.Description = core.StringPtr(modelMap["description"].(string))
+	}
+	if modelMap["required"] != nil {
+		model.Required = core.BoolPtr(modelMap["required"].(bool))
+	}
+	if modelMap["pattern"] != nil && modelMap["pattern"].(string) != "" {
+		model.Pattern = core.StringPtr(modelMap["pattern"].(string))
+	}
+	if modelMap["placeholder"] != nil && modelMap["placeholder"].(string) != "" {
+		model.Placeholder = core.StringPtr(modelMap["placeholder"].(string))
+	}
+	if modelMap["readonly"] != nil {
+		model.Readonly = core.BoolPtr(modelMap["readonly"].(bool))
+	}
+	if modelMap["hidden"] != nil {
+		model.Hidden = core.BoolPtr(modelMap["hidden"].(bool))
+	}
+	if modelMap["i18n"] != nil && len(modelMap["i18n"].([]interface{})) > 0 {
+		I18nModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18n(modelMap["i18n"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.I18n = I18nModel
+	}
+	return model, nil
+}
+
+func ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersOptions(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions, error) {
+	model := &partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{}
+	if modelMap["displayname"] != nil && modelMap["displayname"].(string) != "" {
+		model.Displayname = core.StringPtr(modelMap["displayname"].(string))
+	}
+	if modelMap["value"] != nil && modelMap["value"].(string) != "" {
+		model.Value = core.StringPtr(modelMap["value"].(string))
+	}
+	if modelMap["i18n"] != nil && len(modelMap["i18n"].([]interface{})) > 0 {
+		I18nModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18n(modelMap["i18n"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.I18n = I18nModel
+	}
+	return model, nil
+}
+
+func ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18n(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n, error) {
+	model := &partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n{}
+	if modelMap["en"] != nil && len(modelMap["en"].([]interface{})) > 0 {
+		EnModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["en"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.En = EnModel
+	}
+	if modelMap["de"] != nil && len(modelMap["de"].([]interface{})) > 0 {
+		DeModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["de"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.De = DeModel
+	}
+	if modelMap["es"] != nil && len(modelMap["es"].([]interface{})) > 0 {
+		EsModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["es"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.Es = EsModel
+	}
+	if modelMap["fr"] != nil && len(modelMap["fr"].([]interface{})) > 0 {
+		FrModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["fr"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.Fr = FrModel
+	}
+	if modelMap["it"] != nil && len(modelMap["it"].([]interface{})) > 0 {
+		ItModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["it"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.It = ItModel
+	}
+	if modelMap["ja"] != nil && len(modelMap["ja"].([]interface{})) > 0 {
+		JaModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["ja"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.Ja = JaModel
+	}
+	if modelMap["ko"] != nil && len(modelMap["ko"].([]interface{})) > 0 {
+		KoModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["ko"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.Ko = KoModel
+	}
+	if modelMap["pt_br"] != nil && len(modelMap["pt_br"].([]interface{})) > 0 {
+		PtBrModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["pt_br"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.PtBr = PtBrModel
+	}
+	if modelMap["zh_tw"] != nil && len(modelMap["zh_tw"].([]interface{})) > 0 {
+		ZhTwModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["zh_tw"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.ZhTw = ZhTwModel
+	}
+	if modelMap["zh_cn"] != nil && len(modelMap["zh_cn"].([]interface{})) > 0 {
+		ZhCnModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["zh_cn"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.ZhCn = ZhCnModel
+	}
+	return model, nil
+}
+
+func ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields, error) {
+	model := &partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields{}
+	if modelMap["displayname"] != nil && modelMap["displayname"].(string) != "" {
+		model.Displayname = core.StringPtr(modelMap["displayname"].(string))
+	}
+	if modelMap["description"] != nil && modelMap["description"].(string) != "" {
+		model.Description = core.StringPtr(modelMap["description"].(string))
+	}
+	return model, nil
+}
+
+func ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataDeployment(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataDeployment, error) {
+	model := &partnercentersellv1.GlobalCatalogMetadataDeployment{}
+	if modelMap["broker"] != nil && len(modelMap["broker"].([]interface{})) > 0 && modelMap["broker"].([]interface{})[0] != nil {
+		BrokerModel, err := ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataDeploymentBroker(modelMap["broker"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.Broker = BrokerModel
+	}
+	if modelMap["location"] != nil && modelMap["location"].(string) != "" {
+		model.Location = core.StringPtr(modelMap["location"].(string))
+	}
+	if modelMap["location_url"] != nil && modelMap["location_url"].(string) != "" {
+		model.LocationURL = core.StringPtr(modelMap["location_url"].(string))
+	}
+	if modelMap["target_crn"] != nil && modelMap["target_crn"].(string) != "" {
+		model.TargetCrn = core.StringPtr(modelMap["target_crn"].(string))
 	}
 	return model, nil
 }
@@ -1101,7 +1821,7 @@ func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataToMap(
 		modelMap["ui"] = []map[string]interface{}{uiMap}
 	}
 	if model.Service != nil {
-		serviceMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceToMap(model.Service)
+		serviceMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataServiceToMap(model.Service)
 		if err != nil {
 			return modelMap, err
 		}
@@ -1253,7 +1973,7 @@ func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIUrlsToMap(mode
 	return modelMap, nil
 }
 
-func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceToMap(model *partnercentersellv1.GlobalCatalogMetadataService) (map[string]interface{}, error) {
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataServiceToMap(model *partnercentersellv1.GlobalCatalogDeploymentMetadataService) (map[string]interface{}, error) {
 	modelMap := make(map[string]interface{})
 	if model.RcProvisionable != nil {
 		modelMap["rc_provisionable"] = *model.RcProvisionable
@@ -1270,6 +1990,193 @@ func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceToMap(mod
 	if model.ServiceKeySupported != nil {
 		modelMap["service_key_supported"] = *model.ServiceKeySupported
 	}
+	if model.Parameters != nil {
+		parameters := []map[string]interface{}{}
+		for _, parametersItem := range model.Parameters {
+			parametersItemMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersToMap(&parametersItem) // #nosec G601
+			if err != nil {
+				return modelMap, err
+			}
+			parameters = append(parameters, parametersItemMap)
+		}
+		modelMap["parameters"] = parameters
+	}
+	return modelMap, nil
+}
+
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersToMap(model *partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters) (map[string]interface{}, error) {
+	modelMap := make(map[string]interface{})
+	if model.Displayname != nil {
+		modelMap["displayname"] = *model.Displayname
+	}
+	if model.Name != nil {
+		modelMap["name"] = *model.Name
+	}
+	if model.Type != nil {
+		modelMap["type"] = *model.Type
+	}
+	if model.Options != nil {
+		options := []map[string]interface{}{}
+		for _, optionsItem := range model.Options {
+			optionsItemMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersOptionsToMap(&optionsItem) // #nosec G601
+			if err != nil {
+				return modelMap, err
+			}
+			options = append(options, optionsItemMap)
+		}
+		modelMap["options"] = options
+	}
+	if model.Value != nil {
+		modelMap["value"] = model.Value
+	}
+	if model.Layout != nil {
+		modelMap["layout"] = *model.Layout
+	}
+	if model.Associations != nil {
+		associations := make(map[string]interface{})
+		for k, v := range model.Associations {
+			associations[k] = flex.Stringify(v)
+		}
+		modelMap["associations"] = associations
+	}
+	if model.ValidationURL != nil {
+		modelMap["validation_url"] = *model.ValidationURL
+	}
+	if model.OptionsURL != nil {
+		modelMap["options_url"] = *model.OptionsURL
+	}
+	if model.Invalidmessage != nil {
+		modelMap["invalidmessage"] = *model.Invalidmessage
+	}
+	if model.Description != nil {
+		modelMap["description"] = *model.Description
+	}
+	if model.Required != nil {
+		modelMap["required"] = *model.Required
+	}
+	if model.Pattern != nil {
+		modelMap["pattern"] = *model.Pattern
+	}
+	if model.Placeholder != nil {
+		modelMap["placeholder"] = *model.Placeholder
+	}
+	if model.Readonly != nil {
+		modelMap["readonly"] = *model.Readonly
+	}
+	if model.Hidden != nil {
+		modelMap["hidden"] = *model.Hidden
+	}
+	if model.I18n != nil {
+		i18nMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nToMap(model.I18n)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["i18n"] = []map[string]interface{}{i18nMap}
+	}
+	return modelMap, nil
+}
+
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersOptionsToMap(model *partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions) (map[string]interface{}, error) {
+	modelMap := make(map[string]interface{})
+	if model.Displayname != nil {
+		modelMap["displayname"] = *model.Displayname
+	}
+	if model.Value != nil {
+		modelMap["value"] = *model.Value
+	}
+	if model.I18n != nil {
+		i18nMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nToMap(model.I18n)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["i18n"] = []map[string]interface{}{i18nMap}
+	}
+	return modelMap, nil
+}
+
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nToMap(model *partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n) (map[string]interface{}, error) {
+	modelMap := make(map[string]interface{})
+	if model.En != nil {
+		enMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.En)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["en"] = []map[string]interface{}{enMap}
+	}
+	if model.De != nil {
+		deMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.De)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["de"] = []map[string]interface{}{deMap}
+	}
+	if model.Es != nil {
+		esMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.Es)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["es"] = []map[string]interface{}{esMap}
+	}
+	if model.Fr != nil {
+		frMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.Fr)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["fr"] = []map[string]interface{}{frMap}
+	}
+	if model.It != nil {
+		itMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.It)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["it"] = []map[string]interface{}{itMap}
+	}
+	if model.Ja != nil {
+		jaMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.Ja)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["ja"] = []map[string]interface{}{jaMap}
+	}
+	if model.Ko != nil {
+		koMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.Ko)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["ko"] = []map[string]interface{}{koMap}
+	}
+	if model.PtBr != nil {
+		ptBrMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.PtBr)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["pt_br"] = []map[string]interface{}{ptBrMap}
+	}
+	if model.ZhTw != nil {
+		zhTwMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.ZhTw)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["zh_tw"] = []map[string]interface{}{zhTwMap}
+	}
+	if model.ZhCn != nil {
+		zhCnMap, err := ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.ZhCn)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["zh_cn"] = []map[string]interface{}{zhCnMap}
+	}
+	return modelMap, nil
+}
+
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model *partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields) (map[string]interface{}, error) {
+	modelMap := make(map[string]interface{})
+	if model.Displayname != nil {
+		modelMap["displayname"] = *model.Displayname
+	}
+	if model.Description != nil {
+		modelMap["description"] = *model.Description
+	}
 	return modelMap, nil
 }
 
@@ -1312,286 +2219,620 @@ func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentPatchAsPatch(p
 	path = "active"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["active"] = nil
+	} else if !exists {
+		delete(patch, "active")
 	}
 	path = "disabled"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["disabled"] = nil
+	} else if !exists {
+		delete(patch, "disabled")
 	}
 	path = "overview_ui"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["overview_ui"] = nil
 	} else if exists && patch["overview_ui"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogOverviewUIAsPatch(patch["overview_ui"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogOverviewUIAsPatch(patch["overview_ui"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "overview_ui")
 	}
 	path = "tags"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["tags"] = nil
+	} else if !exists {
+		delete(patch, "tags")
 	}
 	path = "object_provider"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["object_provider"] = nil
 	} else if exists && patch["object_provider"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentCatalogProductProviderAsPatch(patch["object_provider"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogDeploymentCatalogProductProviderAsPatch(patch["object_provider"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "object_provider")
 	}
 	path = "metadata"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["metadata"] = nil
 	} else if exists && patch["metadata"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataAsPatch(patch["metadata"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataAsPatch(patch["metadata"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "metadata")
 	}
 
 	return patch
 }
 
-func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.rc_compatible"
+	path = rootPath + ".rc_compatible"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["rc_compatible"] = nil
+	} else if !exists {
+		delete(patch, "rc_compatible")
 	}
-	path = "metadata.0.ui"
+	path = rootPath + ".ui"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["ui"] = nil
 	} else if exists && patch["ui"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIAsPatch(patch["ui"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIAsPatch(patch["ui"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "ui")
 	}
-	path = "metadata.0.service"
+	path = rootPath + ".service"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["service"] = nil
 	} else if exists && patch["service"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceAsPatch(patch["service"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataServiceAsPatch(patch["service"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "service")
 	}
-	path = "metadata.0.deployment"
+	path = rootPath + ".deployment"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["deployment"] = nil
 	} else if exists && patch["deployment"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataDeploymentAsPatch(patch["deployment"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataDeploymentAsPatch(patch["deployment"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "deployment")
 	}
 }
 
-func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataDeploymentAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataDeploymentAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.deployment.0.broker"
+	path = rootPath + ".broker"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["broker"] = nil
 	} else if exists && patch["broker"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataDeploymentBrokerAsPatch(patch["broker"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataDeploymentBrokerAsPatch(patch["broker"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "broker")
 	}
-	path = "metadata.0.deployment.0.location"
+	path = rootPath + ".location"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["location"] = nil
+	} else if !exists {
+		delete(patch, "location")
 	}
-	path = "metadata.0.deployment.0.location_url"
+	path = rootPath + ".location_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["location_url"] = nil
+	} else if !exists {
+		delete(patch, "location_url")
 	}
-	path = "metadata.0.deployment.0.target_crn"
+	path = rootPath + ".target_crn"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["target_crn"] = nil
+	} else if !exists {
+		delete(patch, "target_crn")
 	}
 }
 
-func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataDeploymentBrokerAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataDeploymentBrokerAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.deployment.0.broker.0.name"
+	path = rootPath + ".name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["name"] = nil
+	} else if !exists {
+		delete(patch, "name")
 	}
-	path = "metadata.0.deployment.0.broker.0.guid"
+	path = rootPath + ".guid"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["guid"] = nil
+	} else if !exists {
+		delete(patch, "guid")
 	}
 }
 
-func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataServiceAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.service.0.rc_provisionable"
+	path = rootPath + ".rc_provisionable"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["rc_provisionable"] = nil
+	} else if !exists {
+		delete(patch, "rc_provisionable")
 	}
-	path = "metadata.0.service.0.iam_compatible"
+	path = rootPath + ".iam_compatible"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["iam_compatible"] = nil
+	} else if !exists {
+		delete(patch, "iam_compatible")
 	}
-	path = "metadata.0.service.0.bindable"
+	path = rootPath + ".bindable"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["bindable"] = nil
+	} else if !exists {
+		delete(patch, "bindable")
 	}
-	path = "metadata.0.service.0.plan_updateable"
+	path = rootPath + ".plan_updateable"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["plan_updateable"] = nil
+	} else if !exists {
+		delete(patch, "plan_updateable")
 	}
-	path = "metadata.0.service.0.service_key_supported"
+	path = rootPath + ".service_key_supported"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["service_key_supported"] = nil
+	} else if !exists {
+		delete(patch, "service_key_supported")
+	}
+	path = rootPath + ".parameters"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["parameters"] = nil
+	} else if exists && patch["parameters"] != nil {
+		parametersList := patch["parameters"].([]map[string]interface{})
+		for i, parametersItem := range parametersList {
+			ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersAsPatch(parametersItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "parameters")
 	}
 }
 
-func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings"
+	path = rootPath + ".displayname"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["displayname"] = nil
+	} else if !exists {
+		delete(patch, "displayname")
+	}
+	path = rootPath + ".name"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["name"] = nil
+	} else if !exists {
+		delete(patch, "name")
+	}
+	path = rootPath + ".type"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["type"] = nil
+	} else if !exists {
+		delete(patch, "type")
+	}
+	path = rootPath + ".options"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["options"] = nil
+	} else if exists && patch["options"] != nil {
+		optionsList := patch["options"].([]map[string]interface{})
+		for i, optionsItem := range optionsList {
+			ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersOptionsAsPatch(optionsItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "options")
+	}
+	path = rootPath + ".value"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["value"] = nil
+	} else if !exists {
+		delete(patch, "value")
+	}
+	path = rootPath + ".layout"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["layout"] = nil
+	} else if !exists {
+		delete(patch, "layout")
+	}
+	path = rootPath + ".associations"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["associations"] = nil
+	} else if !exists {
+		delete(patch, "associations")
+	}
+	path = rootPath + ".validation_url"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["validation_url"] = nil
+	} else if !exists {
+		delete(patch, "validation_url")
+	}
+	path = rootPath + ".options_url"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["options_url"] = nil
+	} else if !exists {
+		delete(patch, "options_url")
+	}
+	path = rootPath + ".invalidmessage"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["invalidmessage"] = nil
+	} else if !exists {
+		delete(patch, "invalidmessage")
+	}
+	path = rootPath + ".description"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["description"] = nil
+	} else if !exists {
+		delete(patch, "description")
+	}
+	path = rootPath + ".required"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["required"] = nil
+	} else if !exists {
+		delete(patch, "required")
+	}
+	path = rootPath + ".pattern"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["pattern"] = nil
+	} else if !exists {
+		delete(patch, "pattern")
+	}
+	path = rootPath + ".placeholder"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["placeholder"] = nil
+	} else if !exists {
+		delete(patch, "placeholder")
+	}
+	path = rootPath + ".readonly"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["readonly"] = nil
+	} else if !exists {
+		delete(patch, "readonly")
+	}
+	path = rootPath + ".hidden"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["hidden"] = nil
+	} else if !exists {
+		delete(patch, "hidden")
+	}
+	path = rootPath + ".i18n"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["i18n"] = nil
+	} else if !exists {
+		delete(patch, "i18n")
+	}
+}
+
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersOptionsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
+	var path string
+
+	path = rootPath + ".displayname"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["displayname"] = nil
+	} else if !exists {
+		delete(patch, "displayname")
+	}
+	path = rootPath + ".value"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["value"] = nil
+	} else if !exists {
+		delete(patch, "value")
+	}
+	path = rootPath + ".i18n"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["i18n"] = nil
+	} else if exists && patch["i18n"] != nil {
+		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nAsPatch(patch["i18n"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "i18n")
+	}
+}
+
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
+	var path string
+
+	path = rootPath + ".en"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["en"] = nil
+	} else if exists && patch["en"] != nil {
+		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsAsPatch(patch["en"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "en")
+	}
+	path = rootPath + ".de"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["de"] = nil
+	} else if !exists {
+		delete(patch, "de")
+	}
+	path = rootPath + ".es"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["es"] = nil
+	} else if !exists {
+		delete(patch, "es")
+	}
+	path = rootPath + ".fr"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["fr"] = nil
+	} else if !exists {
+		delete(patch, "fr")
+	}
+	path = rootPath + ".it"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["it"] = nil
+	} else if !exists {
+		delete(patch, "it")
+	}
+	path = rootPath + ".ja"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["ja"] = nil
+	} else if !exists {
+		delete(patch, "ja")
+	}
+	path = rootPath + ".ko"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["ko"] = nil
+	} else if !exists {
+		delete(patch, "ko")
+	}
+	path = rootPath + ".pt_br"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["pt_br"] = nil
+	} else if !exists {
+		delete(patch, "pt_br")
+	}
+	path = rootPath + ".zh_tw"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["zh_tw"] = nil
+	} else if !exists {
+		delete(patch, "zh_tw")
+	}
+	path = rootPath + ".zh_cn"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["zh_cn"] = nil
+	} else if !exists {
+		delete(patch, "zh_cn")
+	}
+}
+
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
+	var path string
+
+	path = rootPath + ".displayname"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["displayname"] = nil
+	} else if !exists {
+		delete(patch, "displayname")
+	}
+	path = rootPath + ".description"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["description"] = nil
+	} else if !exists {
+		delete(patch, "description")
+	}
+}
+
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
+	var path string
+
+	path = rootPath + ".strings"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["strings"] = nil
 	} else if exists && patch["strings"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIStringsAsPatch(patch["strings"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIStringsAsPatch(patch["strings"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "strings")
 	}
-	path = "metadata.0.ui.0.urls"
+	path = rootPath + ".urls"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["urls"] = nil
 	} else if exists && patch["urls"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIUrlsAsPatch(patch["urls"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIUrlsAsPatch(patch["urls"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "urls")
 	}
-	path = "metadata.0.ui.0.hidden"
+	path = rootPath + ".hidden"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["hidden"] = nil
+	} else if !exists {
+		delete(patch, "hidden")
 	}
-	path = "metadata.0.ui.0.side_by_side_index"
+	path = rootPath + ".side_by_side_index"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["side_by_side_index"] = nil
+	} else if !exists {
+		delete(patch, "side_by_side_index")
 	}
 }
 
-func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIUrlsAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIUrlsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.urls.0.doc_url"
+	path = rootPath + ".doc_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["doc_url"] = nil
+	} else if !exists {
+		delete(patch, "doc_url")
 	}
-	path = "metadata.0.ui.0.urls.0.apidocs_url"
+	path = rootPath + ".apidocs_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["apidocs_url"] = nil
+	} else if !exists {
+		delete(patch, "apidocs_url")
 	}
-	path = "metadata.0.ui.0.urls.0.terms_url"
+	path = rootPath + ".terms_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["terms_url"] = nil
+	} else if !exists {
+		delete(patch, "terms_url")
 	}
-	path = "metadata.0.ui.0.urls.0.instructions_url"
+	path = rootPath + ".instructions_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["instructions_url"] = nil
+	} else if !exists {
+		delete(patch, "instructions_url")
 	}
-	path = "metadata.0.ui.0.urls.0.catalog_details_url"
+	path = rootPath + ".catalog_details_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["catalog_details_url"] = nil
+	} else if !exists {
+		delete(patch, "catalog_details_url")
 	}
-	path = "metadata.0.ui.0.urls.0.custom_create_page_url"
+	path = rootPath + ".custom_create_page_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["custom_create_page_url"] = nil
+	} else if !exists {
+		delete(patch, "custom_create_page_url")
 	}
-	path = "metadata.0.ui.0.urls.0.dashboard"
+	path = rootPath + ".dashboard"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["dashboard"] = nil
+	} else if !exists {
+		delete(patch, "dashboard")
 	}
 }
 
-func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIStringsAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIStringsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings.0.en"
+	path = rootPath + ".en"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["en"] = nil
 	} else if exists && patch["en"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIStringsContentAsPatch(patch["en"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIStringsContentAsPatch(patch["en"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "en")
 	}
 }
 
-func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIStringsContentAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIStringsContentAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings.0.en.0.bullets"
+	path = rootPath + ".bullets"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["bullets"] = nil
 	} else if exists && patch["bullets"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentCatalogHighlightItemAsPatch(patch["bullets"].([]map[string]interface{})[0], d)
+		bulletsList := patch["bullets"].([]map[string]interface{})
+		for i, bulletsItem := range bulletsList {
+			ResourceIbmOnboardingCatalogDeploymentCatalogHighlightItemAsPatch(bulletsItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "bullets")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.media"
+	path = rootPath + ".media"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["media"] = nil
 	} else if exists && patch["media"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentCatalogProductMediaItemAsPatch(patch["media"].([]map[string]interface{})[0], d)
+		mediaList := patch["media"].([]map[string]interface{})
+		for i, mediaItem := range mediaList {
+			ResourceIbmOnboardingCatalogDeploymentCatalogProductMediaItemAsPatch(mediaItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "media")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.embeddable_dashboard"
+	path = rootPath + ".embeddable_dashboard"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["embeddable_dashboard"] = nil
+	} else if !exists {
+		delete(patch, "embeddable_dashboard")
 	}
 }
 
-func ResourceIbmOnboardingCatalogDeploymentCatalogProductMediaItemAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentCatalogProductMediaItemAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings.0.en.0.media.0.caption_i18n"
+	path = rootPath + ".caption_i18n"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["caption_i18n"] = nil
+	} else if !exists {
+		delete(patch, "caption_i18n")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.media.0.thumbnail"
+	path = rootPath + ".thumbnail"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["thumbnail"] = nil
+	} else if !exists {
+		delete(patch, "thumbnail")
 	}
 }
 
-func ResourceIbmOnboardingCatalogDeploymentCatalogHighlightItemAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentCatalogHighlightItemAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings.0.en.0.bullets.0.description"
+	path = rootPath + ".description"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["description"] = nil
+	} else if !exists {
+		delete(patch, "description")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.bullets.0.description_i18n"
+	path = rootPath + ".description_i18n"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["description_i18n"] = nil
+	} else if !exists {
+		delete(patch, "description_i18n")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.bullets.0.title"
+	path = rootPath + ".title"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["title"] = nil
+	} else if !exists {
+		delete(patch, "title")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.bullets.0.title_i18n"
+	path = rootPath + ".title_i18n"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["title_i18n"] = nil
+	} else if !exists {
+		delete(patch, "title_i18n")
 	}
 }
 
-func ResourceIbmOnboardingCatalogDeploymentCatalogProductProviderAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentCatalogProductProviderAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "object_provider.0.name"
+	path = rootPath + ".name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["name"] = nil
+	} else if !exists {
+		delete(patch, "name")
 	}
-	path = "object_provider.0.email"
+	path = rootPath + ".email"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["email"] = nil
+	} else if !exists {
+		delete(patch, "email")
 	}
 }
 
-func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogOverviewUIAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogOverviewUIAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "overview_ui.0.en"
+	path = rootPath + ".en"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["en"] = nil
 	} else if exists && patch["en"] != nil {
-		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogOverviewUITranslatedContentAsPatch(patch["en"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogDeploymentGlobalCatalogOverviewUITranslatedContentAsPatch(patch["en"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "en")
 	}
 }
 
-func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogOverviewUITranslatedContentAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogDeploymentGlobalCatalogOverviewUITranslatedContentAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "overview_ui.0.en.0.display_name"
+	path = rootPath + ".display_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["display_name"] = nil
+	} else if !exists {
+		delete(patch, "display_name")
 	}
-	path = "overview_ui.0.en.0.description"
+	path = rootPath + ".description"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["description"] = nil
+	} else if !exists {
+		delete(patch, "description")
 	}
-	path = "overview_ui.0.en.0.long_description"
+	path = rootPath + ".long_description"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["long_description"] = nil
+	} else if !exists {
+		delete(patch, "long_description")
 	}
 }
diff --git a/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_deployment_test.go b/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_deployment_test.go
index 4c533f287c8..164ef3f7d38 100644
--- a/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_deployment_test.go
+++ b/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_deployment_test.go
@@ -115,8 +115,6 @@ func TestAccIbmOnboardingCatalogDeploymentAllArgs(t *testing.T) {
 					resource.TestCheckResourceAttr("ibm_onboarding_catalog_deployment.onboarding_catalog_deployment_instance", "active", active),
 					resource.TestCheckResourceAttr("ibm_onboarding_catalog_deployment.onboarding_catalog_deployment_instance", "disabled", disabled),
 					resource.TestCheckResourceAttr("ibm_onboarding_catalog_deployment.onboarding_catalog_deployment_instance", "kind", kind),
-					resource.TestCheckResourceAttr("ibm_onboarding_catalog_deployment.onboarding_catalog_deployment_instance", "overview_ui.en.display_name", overviewUiEn),
-					resource.TestCheckResourceAttr("ibm_onboarding_catalog_deployment.onboarding_catalog_deployment_instance", "metadata.rc_compatible", rcCompatible),
 				),
 			},
 			resource.TestStep{
@@ -130,16 +128,14 @@ func TestAccIbmOnboardingCatalogDeploymentAllArgs(t *testing.T) {
 					resource.TestCheckResourceAttr("ibm_onboarding_catalog_deployment.onboarding_catalog_deployment_instance", "active", activeUpdate),
 					resource.TestCheckResourceAttr("ibm_onboarding_catalog_deployment.onboarding_catalog_deployment_instance", "disabled", disabledUpdate),
 					resource.TestCheckResourceAttr("ibm_onboarding_catalog_deployment.onboarding_catalog_deployment_instance", "kind", kindUpdate),
-					resource.TestCheckResourceAttr("ibm_onboarding_catalog_deployment.onboarding_catalog_deployment_instance", "overview_ui.en.display_name", overviewUiEnUpdate),
-					resource.TestCheckResourceAttr("ibm_onboarding_catalog_deployment.onboarding_catalog_deployment_instance", "metadata.rc_compatible", rcCompatibleUpdate),
 				),
 			},
 			resource.TestStep{
 				ResourceName:      "ibm_onboarding_catalog_deployment.onboarding_catalog_deployment_instance",
 				ImportState:       true,
-				ImportStateVerify: true,
+				ImportStateVerify: false,
 				ImportStateVerifyIgnore: []string{
-					"env", "product_id", "catalog_product_id", "catalog_plan_id",
+					"env", "product_id", "catalog_product_id", "catalog_plan_id", "geo_tags",
 				},
 			},
 		},
@@ -214,12 +210,12 @@ func testAccCheckIbmOnboardingCatalogDeploymentConfig(productID string, catalogP
 					target_crn = "crn:v1:staging:public::ams03:::environment:staging-ams03"
 				}
 				ui {
-            		strings {
-                		en {
-                    		bullets {
+					strings {
+						en {
+							bullets {
                         		title = "%s"
                         		description = "some1"
-                    		}
+							}
 							media {
                         		type = "youtube"
                         		url = "https://www.youtube.com/embed/HtkpMgNFYtE"
@@ -248,15 +244,15 @@ func testAccCheckIbmOnboardingCatalogDeploymentUpdateConfig(productID string, ca
 			overview_ui {
 				en {
 					display_name = "%s"
-					description = "description"
+									description = "description"
 					long_description = "long_description"
-				}
+								}
 			}
-			tags = ["sample", "moreSample"]
+			tags = ["sample", "moresample"]
 			object_provider {
 				name = "name"
 				email = "email@email.com"
-			}
+								}
 			metadata {
 				rc_compatible = "%s"
 				service {
@@ -267,32 +263,32 @@ func testAccCheckIbmOnboardingCatalogDeploymentUpdateConfig(productID string, ca
 					broker {
 						name = "%s"
 						guid = "guid"
-					}
+								}
 					location = "ams03"
 					location_url = "https://globalcatalog.test.cloud.ibm.com/api/v1/ams03"
 					target_crn = "crn:v1:staging:public::ams03:::environment:staging-ams03"
 				}
 				ui {
             		strings {
-                		en {
+							en {
                     		bullets {
                         		title = "%s"
                         		description = "some1"
-                    		}
+							}
 							bullets {
                         		title = "newBullet"
                         		description = "some1"
-                    		}
+							}
 							media {
                         		type = "youtube"
                         		url = "https://www.youtube.com/embed/HtkpMgNFYtE"
                         		caption = "%s"
-                    		}
+							}
 							media {
                         		type = "youtube"
                         		url = "https://www.youtube.com/embed/HtkpMgNFYtE"
                         		caption = "newMedia"
-                    		}
+							}
                 		}
             		}
         		}
@@ -473,12 +469,53 @@ func TestResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataTo
 		globalCatalogMetadataUiModel["hidden"] = true
 		globalCatalogMetadataUiModel["side_by_side_index"] = float64(72.5)
 
-		globalCatalogMetadataServiceModel := make(map[string]interface{})
-		globalCatalogMetadataServiceModel["rc_provisionable"] = true
-		globalCatalogMetadataServiceModel["iam_compatible"] = true
-		globalCatalogMetadataServiceModel["bindable"] = true
-		globalCatalogMetadataServiceModel["plan_updateable"] = true
-		globalCatalogMetadataServiceModel["service_key_supported"] = true
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+		globalCatalogMetadataServiceCustomParametersOptionsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersOptionsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersOptionsModel["value"] = "testString"
+		globalCatalogMetadataServiceCustomParametersOptionsModel["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+		globalCatalogMetadataServiceCustomParametersModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["name"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["type"] = "text"
+		globalCatalogMetadataServiceCustomParametersModel["options"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersOptionsModel}
+		globalCatalogMetadataServiceCustomParametersModel["value"] = []string{"testString"}
+		globalCatalogMetadataServiceCustomParametersModel["layout"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["associations"] = map[string]interface{}{"anyKey": "anyValue"}
+		globalCatalogMetadataServiceCustomParametersModel["validation_url"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["options_url"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["invalidmessage"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["description"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["required"] = true
+		globalCatalogMetadataServiceCustomParametersModel["pattern"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["placeholder"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["readonly"] = true
+		globalCatalogMetadataServiceCustomParametersModel["hidden"] = true
+		globalCatalogMetadataServiceCustomParametersModel["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+		globalCatalogDeploymentMetadataServiceModel := make(map[string]interface{})
+		globalCatalogDeploymentMetadataServiceModel["rc_provisionable"] = true
+		globalCatalogDeploymentMetadataServiceModel["iam_compatible"] = true
+		globalCatalogDeploymentMetadataServiceModel["bindable"] = true
+		globalCatalogDeploymentMetadataServiceModel["plan_updateable"] = true
+		globalCatalogDeploymentMetadataServiceModel["service_key_supported"] = true
+		globalCatalogDeploymentMetadataServiceModel["parameters"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersModel}
 
 		globalCatalogMetadataDeploymentBrokerModel := make(map[string]interface{})
 		globalCatalogMetadataDeploymentBrokerModel["name"] = "testString"
@@ -493,7 +530,7 @@ func TestResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataTo
 		model := make(map[string]interface{})
 		model["rc_compatible"] = true
 		model["ui"] = []map[string]interface{}{globalCatalogMetadataUiModel}
-		model["service"] = []map[string]interface{}{globalCatalogMetadataServiceModel}
+		model["service"] = []map[string]interface{}{globalCatalogDeploymentMetadataServiceModel}
 		model["deployment"] = []map[string]interface{}{globalCatalogMetadataDeploymentModel}
 
 		assert.Equal(t, result, model)
@@ -535,12 +572,53 @@ func TestResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataTo
 	globalCatalogMetadataUiModel.Hidden = core.BoolPtr(true)
 	globalCatalogMetadataUiModel.SideBySideIndex = core.Float64Ptr(float64(72.5))
 
-	globalCatalogMetadataServiceModel := new(partnercentersellv1.GlobalCatalogMetadataService)
-	globalCatalogMetadataServiceModel.RcProvisionable = core.BoolPtr(true)
-	globalCatalogMetadataServiceModel.IamCompatible = core.BoolPtr(true)
-	globalCatalogMetadataServiceModel.Bindable = core.BoolPtr(true)
-	globalCatalogMetadataServiceModel.PlanUpdateable = core.BoolPtr(true)
-	globalCatalogMetadataServiceModel.ServiceKeySupported = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+	globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+	globalCatalogMetadataServiceCustomParametersOptionsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+	globalCatalogMetadataServiceCustomParametersOptionsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersOptionsModel.Value = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersOptionsModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	globalCatalogMetadataServiceCustomParametersModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters)
+	globalCatalogMetadataServiceCustomParametersModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Name = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Type = core.StringPtr("text")
+	globalCatalogMetadataServiceCustomParametersModel.Options = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{*globalCatalogMetadataServiceCustomParametersOptionsModel}
+	globalCatalogMetadataServiceCustomParametersModel.Value = []string{"testString"}
+	globalCatalogMetadataServiceCustomParametersModel.Layout = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Associations = map[string]interface{}{"anyKey": "anyValue"}
+	globalCatalogMetadataServiceCustomParametersModel.ValidationURL = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.OptionsURL = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Invalidmessage = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Description = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Required = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersModel.Pattern = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Placeholder = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Readonly = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersModel.Hidden = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	globalCatalogDeploymentMetadataServiceModel := new(partnercentersellv1.GlobalCatalogDeploymentMetadataService)
+	globalCatalogDeploymentMetadataServiceModel.RcProvisionable = core.BoolPtr(true)
+	globalCatalogDeploymentMetadataServiceModel.IamCompatible = core.BoolPtr(true)
+	globalCatalogDeploymentMetadataServiceModel.Bindable = core.BoolPtr(true)
+	globalCatalogDeploymentMetadataServiceModel.PlanUpdateable = core.BoolPtr(true)
+	globalCatalogDeploymentMetadataServiceModel.ServiceKeySupported = core.BoolPtr(true)
+	globalCatalogDeploymentMetadataServiceModel.Parameters = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters{*globalCatalogMetadataServiceCustomParametersModel}
 
 	globalCatalogMetadataDeploymentBrokerModel := new(partnercentersellv1.GlobalCatalogMetadataDeploymentBroker)
 	globalCatalogMetadataDeploymentBrokerModel.Name = core.StringPtr("testString")
@@ -555,7 +633,7 @@ func TestResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataTo
 	model := new(partnercentersellv1.GlobalCatalogDeploymentMetadata)
 	model.RcCompatible = core.BoolPtr(true)
 	model.Ui = globalCatalogMetadataUiModel
-	model.Service = globalCatalogMetadataServiceModel
+	model.Service = globalCatalogDeploymentMetadataServiceModel
 	model.Deployment = globalCatalogMetadataDeploymentModel
 
 	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataToMap(model)
@@ -817,26 +895,310 @@ func TestResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataUIUrlsToMap(
 	checkResult(result)
 }
 
-func TestResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceToMap(t *testing.T) {
+func TestResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataServiceToMap(t *testing.T) {
 	checkResult := func(result map[string]interface{}) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+		globalCatalogMetadataServiceCustomParametersOptionsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersOptionsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersOptionsModel["value"] = "testString"
+		globalCatalogMetadataServiceCustomParametersOptionsModel["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+		globalCatalogMetadataServiceCustomParametersModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["name"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["type"] = "text"
+		globalCatalogMetadataServiceCustomParametersModel["options"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersOptionsModel}
+		globalCatalogMetadataServiceCustomParametersModel["value"] = []string{"testString"}
+		globalCatalogMetadataServiceCustomParametersModel["layout"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["associations"] = map[string]interface{}{"anyKey": "anyValue"}
+		globalCatalogMetadataServiceCustomParametersModel["validation_url"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["options_url"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["invalidmessage"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["description"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["required"] = true
+		globalCatalogMetadataServiceCustomParametersModel["pattern"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["placeholder"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["readonly"] = true
+		globalCatalogMetadataServiceCustomParametersModel["hidden"] = true
+		globalCatalogMetadataServiceCustomParametersModel["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
 		model := make(map[string]interface{})
 		model["rc_provisionable"] = true
 		model["iam_compatible"] = true
 		model["bindable"] = true
 		model["plan_updateable"] = true
 		model["service_key_supported"] = true
+		model["parameters"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersModel}
 
 		assert.Equal(t, result, model)
 	}
 
-	model := new(partnercentersellv1.GlobalCatalogMetadataService)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+	globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+	globalCatalogMetadataServiceCustomParametersOptionsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+	globalCatalogMetadataServiceCustomParametersOptionsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersOptionsModel.Value = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersOptionsModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	globalCatalogMetadataServiceCustomParametersModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters)
+	globalCatalogMetadataServiceCustomParametersModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Name = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Type = core.StringPtr("text")
+	globalCatalogMetadataServiceCustomParametersModel.Options = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{*globalCatalogMetadataServiceCustomParametersOptionsModel}
+	globalCatalogMetadataServiceCustomParametersModel.Value = []string{"testString"}
+	globalCatalogMetadataServiceCustomParametersModel.Layout = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Associations = map[string]interface{}{"anyKey": "anyValue"}
+	globalCatalogMetadataServiceCustomParametersModel.ValidationURL = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.OptionsURL = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Invalidmessage = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Description = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Required = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersModel.Pattern = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Placeholder = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Readonly = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersModel.Hidden = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	model := new(partnercentersellv1.GlobalCatalogDeploymentMetadataService)
 	model.RcProvisionable = core.BoolPtr(true)
 	model.IamCompatible = core.BoolPtr(true)
 	model.Bindable = core.BoolPtr(true)
 	model.PlanUpdateable = core.BoolPtr(true)
 	model.ServiceKeySupported = core.BoolPtr(true)
+	model.Parameters = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters{*globalCatalogMetadataServiceCustomParametersModel}
 
-	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceToMap(model)
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentGlobalCatalogDeploymentMetadataServiceToMap(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersToMap(t *testing.T) {
+	checkResult := func(result map[string]interface{}) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+		globalCatalogMetadataServiceCustomParametersOptionsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersOptionsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersOptionsModel["value"] = "testString"
+		globalCatalogMetadataServiceCustomParametersOptionsModel["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+		model := make(map[string]interface{})
+		model["displayname"] = "testString"
+		model["name"] = "testString"
+		model["type"] = "text"
+		model["options"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersOptionsModel}
+		model["value"] = []string{"testString"}
+		model["layout"] = "testString"
+		model["associations"] = map[string]interface{}{"anyKey": "anyValue"}
+		model["validation_url"] = "testString"
+		model["options_url"] = "testString"
+		model["invalidmessage"] = "testString"
+		model["description"] = "testString"
+		model["required"] = true
+		model["pattern"] = "testString"
+		model["placeholder"] = "testString"
+		model["readonly"] = true
+		model["hidden"] = true
+		model["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+		assert.Equal(t, result, model)
+	}
+
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+	globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+	globalCatalogMetadataServiceCustomParametersOptionsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+	globalCatalogMetadataServiceCustomParametersOptionsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersOptionsModel.Value = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersOptionsModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters)
+	model.Displayname = core.StringPtr("testString")
+	model.Name = core.StringPtr("testString")
+	model.Type = core.StringPtr("text")
+	model.Options = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{*globalCatalogMetadataServiceCustomParametersOptionsModel}
+	model.Value = []string{"testString"}
+	model.Layout = core.StringPtr("testString")
+	model.Associations = map[string]interface{}{"anyKey": "anyValue"}
+	model.ValidationURL = core.StringPtr("testString")
+	model.OptionsURL = core.StringPtr("testString")
+	model.Invalidmessage = core.StringPtr("testString")
+	model.Description = core.StringPtr("testString")
+	model.Required = core.BoolPtr(true)
+	model.Pattern = core.StringPtr("testString")
+	model.Placeholder = core.StringPtr("testString")
+	model.Readonly = core.BoolPtr(true)
+	model.Hidden = core.BoolPtr(true)
+	model.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersToMap(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersOptionsToMap(t *testing.T) {
+	checkResult := func(result map[string]interface{}) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+		model := make(map[string]interface{})
+		model["displayname"] = "testString"
+		model["value"] = "testString"
+		model["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+		assert.Equal(t, result, model)
+	}
+
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+	globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+	model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+	model.Displayname = core.StringPtr("testString")
+	model.Value = core.StringPtr("testString")
+	model.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersOptionsToMap(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nToMap(t *testing.T) {
+	checkResult := func(result map[string]interface{}) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+		model := make(map[string]interface{})
+		model["en"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["de"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["es"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["fr"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["it"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["ja"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["ko"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["pt_br"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["zh_tw"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["zh_cn"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+		assert.Equal(t, result, model)
+	}
+
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+	model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+	model.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nToMap(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(t *testing.T) {
+	checkResult := func(result map[string]interface{}) {
+		model := make(map[string]interface{})
+		model["displayname"] = "testString"
+		model["description"] = "testString"
+
+		assert.Equal(t, result, model)
+	}
+
+	model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+	model.Displayname = core.StringPtr("testString")
+	model.Description = core.StringPtr("testString")
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model)
 	assert.Nil(t, err)
 	checkResult(result)
 }
@@ -991,12 +1353,53 @@ func TestResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogDeploymentMetad
 		globalCatalogMetadataUiModel.Hidden = core.BoolPtr(true)
 		globalCatalogMetadataUiModel.SideBySideIndex = core.Float64Ptr(float64(72.5))
 
-		globalCatalogMetadataServiceModel := new(partnercentersellv1.GlobalCatalogMetadataService)
-		globalCatalogMetadataServiceModel.RcProvisionable = core.BoolPtr(true)
-		globalCatalogMetadataServiceModel.IamCompatible = core.BoolPtr(true)
-		globalCatalogMetadataServiceModel.Bindable = core.BoolPtr(true)
-		globalCatalogMetadataServiceModel.PlanUpdateable = core.BoolPtr(true)
-		globalCatalogMetadataServiceModel.ServiceKeySupported = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+		globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+		globalCatalogMetadataServiceCustomParametersOptionsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+		globalCatalogMetadataServiceCustomParametersOptionsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersOptionsModel.Value = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersOptionsModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		globalCatalogMetadataServiceCustomParametersModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters)
+		globalCatalogMetadataServiceCustomParametersModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Name = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Type = core.StringPtr("text")
+		globalCatalogMetadataServiceCustomParametersModel.Options = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{*globalCatalogMetadataServiceCustomParametersOptionsModel}
+		globalCatalogMetadataServiceCustomParametersModel.Value = []string{"testString"}
+		globalCatalogMetadataServiceCustomParametersModel.Layout = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Associations = map[string]interface{}{"anyKey": "anyValue"}
+		globalCatalogMetadataServiceCustomParametersModel.ValidationURL = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.OptionsURL = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Invalidmessage = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Description = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Required = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersModel.Pattern = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Placeholder = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Readonly = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersModel.Hidden = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		globalCatalogDeploymentMetadataServiceModel := new(partnercentersellv1.GlobalCatalogDeploymentMetadataService)
+		globalCatalogDeploymentMetadataServiceModel.RcProvisionable = core.BoolPtr(true)
+		globalCatalogDeploymentMetadataServiceModel.IamCompatible = core.BoolPtr(true)
+		globalCatalogDeploymentMetadataServiceModel.Bindable = core.BoolPtr(true)
+		globalCatalogDeploymentMetadataServiceModel.PlanUpdateable = core.BoolPtr(true)
+		globalCatalogDeploymentMetadataServiceModel.ServiceKeySupported = core.BoolPtr(true)
+		globalCatalogDeploymentMetadataServiceModel.Parameters = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters{*globalCatalogMetadataServiceCustomParametersModel}
 
 		globalCatalogMetadataDeploymentBrokerModel := new(partnercentersellv1.GlobalCatalogMetadataDeploymentBroker)
 		globalCatalogMetadataDeploymentBrokerModel.Name = core.StringPtr("testString")
@@ -1011,7 +1414,7 @@ func TestResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogDeploymentMetad
 		model := new(partnercentersellv1.GlobalCatalogDeploymentMetadata)
 		model.RcCompatible = core.BoolPtr(true)
 		model.Ui = globalCatalogMetadataUiModel
-		model.Service = globalCatalogMetadataServiceModel
+		model.Service = globalCatalogDeploymentMetadataServiceModel
 		model.Deployment = globalCatalogMetadataDeploymentModel
 
 		assert.Equal(t, result, model)
@@ -1053,12 +1456,53 @@ func TestResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogDeploymentMetad
 	globalCatalogMetadataUiModel["hidden"] = true
 	globalCatalogMetadataUiModel["side_by_side_index"] = float64(72.5)
 
-	globalCatalogMetadataServiceModel := make(map[string]interface{})
-	globalCatalogMetadataServiceModel["rc_provisionable"] = true
-	globalCatalogMetadataServiceModel["iam_compatible"] = true
-	globalCatalogMetadataServiceModel["bindable"] = true
-	globalCatalogMetadataServiceModel["plan_updateable"] = true
-	globalCatalogMetadataServiceModel["service_key_supported"] = true
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+	globalCatalogMetadataServiceCustomParametersOptionsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersOptionsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersOptionsModel["value"] = "testString"
+	globalCatalogMetadataServiceCustomParametersOptionsModel["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+	globalCatalogMetadataServiceCustomParametersModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["name"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["type"] = "text"
+	globalCatalogMetadataServiceCustomParametersModel["options"] = []interface{}{globalCatalogMetadataServiceCustomParametersOptionsModel}
+	globalCatalogMetadataServiceCustomParametersModel["value"] = []interface{}{"testString"}
+	globalCatalogMetadataServiceCustomParametersModel["layout"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["associations"] = map[string]interface{}{"anyKey": "anyValue"}
+	globalCatalogMetadataServiceCustomParametersModel["validation_url"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["options_url"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["invalidmessage"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["description"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["required"] = true
+	globalCatalogMetadataServiceCustomParametersModel["pattern"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["placeholder"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["readonly"] = true
+	globalCatalogMetadataServiceCustomParametersModel["hidden"] = true
+	globalCatalogMetadataServiceCustomParametersModel["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+	globalCatalogDeploymentMetadataServiceModel := make(map[string]interface{})
+	globalCatalogDeploymentMetadataServiceModel["rc_provisionable"] = true
+	globalCatalogDeploymentMetadataServiceModel["iam_compatible"] = true
+	globalCatalogDeploymentMetadataServiceModel["bindable"] = true
+	globalCatalogDeploymentMetadataServiceModel["plan_updateable"] = true
+	globalCatalogDeploymentMetadataServiceModel["service_key_supported"] = true
+	globalCatalogDeploymentMetadataServiceModel["parameters"] = []interface{}{globalCatalogMetadataServiceCustomParametersModel}
 
 	globalCatalogMetadataDeploymentBrokerModel := make(map[string]interface{})
 	globalCatalogMetadataDeploymentBrokerModel["name"] = "testString"
@@ -1073,7 +1517,7 @@ func TestResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogDeploymentMetad
 	model := make(map[string]interface{})
 	model["rc_compatible"] = true
 	model["ui"] = []interface{}{globalCatalogMetadataUiModel}
-	model["service"] = []interface{}{globalCatalogMetadataServiceModel}
+	model["service"] = []interface{}{globalCatalogDeploymentMetadataServiceModel}
 	model["deployment"] = []interface{}{globalCatalogMetadataDeploymentModel}
 
 	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogDeploymentMetadata(model)
@@ -1335,26 +1779,310 @@ func TestResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataUIUrls(
 	checkResult(result)
 }
 
-func TestResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataService(t *testing.T) {
-	checkResult := func(result *partnercentersellv1.GlobalCatalogMetadataService) {
-		model := new(partnercentersellv1.GlobalCatalogMetadataService)
+func TestResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogDeploymentMetadataService(t *testing.T) {
+	checkResult := func(result *partnercentersellv1.GlobalCatalogDeploymentMetadataService) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+		globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+		globalCatalogMetadataServiceCustomParametersOptionsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+		globalCatalogMetadataServiceCustomParametersOptionsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersOptionsModel.Value = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersOptionsModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		globalCatalogMetadataServiceCustomParametersModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters)
+		globalCatalogMetadataServiceCustomParametersModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Name = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Type = core.StringPtr("text")
+		globalCatalogMetadataServiceCustomParametersModel.Options = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{*globalCatalogMetadataServiceCustomParametersOptionsModel}
+		globalCatalogMetadataServiceCustomParametersModel.Value = []string{"testString"}
+		globalCatalogMetadataServiceCustomParametersModel.Layout = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Associations = map[string]interface{}{"anyKey": "anyValue"}
+		globalCatalogMetadataServiceCustomParametersModel.ValidationURL = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.OptionsURL = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Invalidmessage = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Description = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Required = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersModel.Pattern = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Placeholder = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Readonly = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersModel.Hidden = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		model := new(partnercentersellv1.GlobalCatalogDeploymentMetadataService)
 		model.RcProvisionable = core.BoolPtr(true)
 		model.IamCompatible = core.BoolPtr(true)
 		model.Bindable = core.BoolPtr(true)
 		model.PlanUpdateable = core.BoolPtr(true)
 		model.ServiceKeySupported = core.BoolPtr(true)
+		model.Parameters = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters{*globalCatalogMetadataServiceCustomParametersModel}
 
 		assert.Equal(t, result, model)
 	}
 
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+	globalCatalogMetadataServiceCustomParametersOptionsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersOptionsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersOptionsModel["value"] = "testString"
+	globalCatalogMetadataServiceCustomParametersOptionsModel["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+	globalCatalogMetadataServiceCustomParametersModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["name"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["type"] = "text"
+	globalCatalogMetadataServiceCustomParametersModel["options"] = []interface{}{globalCatalogMetadataServiceCustomParametersOptionsModel}
+	globalCatalogMetadataServiceCustomParametersModel["value"] = []interface{}{"testString"}
+	globalCatalogMetadataServiceCustomParametersModel["layout"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["associations"] = map[string]interface{}{"anyKey": "anyValue"}
+	globalCatalogMetadataServiceCustomParametersModel["validation_url"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["options_url"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["invalidmessage"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["description"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["required"] = true
+	globalCatalogMetadataServiceCustomParametersModel["pattern"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["placeholder"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["readonly"] = true
+	globalCatalogMetadataServiceCustomParametersModel["hidden"] = true
+	globalCatalogMetadataServiceCustomParametersModel["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
 	model := make(map[string]interface{})
 	model["rc_provisionable"] = true
 	model["iam_compatible"] = true
 	model["bindable"] = true
 	model["plan_updateable"] = true
 	model["service_key_supported"] = true
+	model["parameters"] = []interface{}{globalCatalogMetadataServiceCustomParametersModel}
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogDeploymentMetadataService(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParameters(t *testing.T) {
+	checkResult := func(result *partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+		globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+		globalCatalogMetadataServiceCustomParametersOptionsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+		globalCatalogMetadataServiceCustomParametersOptionsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersOptionsModel.Value = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersOptionsModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters)
+		model.Displayname = core.StringPtr("testString")
+		model.Name = core.StringPtr("testString")
+		model.Type = core.StringPtr("text")
+		model.Options = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{*globalCatalogMetadataServiceCustomParametersOptionsModel}
+		model.Value = []string{"testString"}
+		model.Layout = core.StringPtr("testString")
+		model.Associations = map[string]interface{}{"anyKey": "anyValue"}
+		model.ValidationURL = core.StringPtr("testString")
+		model.OptionsURL = core.StringPtr("testString")
+		model.Invalidmessage = core.StringPtr("testString")
+		model.Description = core.StringPtr("testString")
+		model.Required = core.BoolPtr(true)
+		model.Pattern = core.StringPtr("testString")
+		model.Placeholder = core.StringPtr("testString")
+		model.Readonly = core.BoolPtr(true)
+		model.Hidden = core.BoolPtr(true)
+		model.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		assert.Equal(t, result, model)
+	}
+
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+	globalCatalogMetadataServiceCustomParametersOptionsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersOptionsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersOptionsModel["value"] = "testString"
+	globalCatalogMetadataServiceCustomParametersOptionsModel["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+	model := make(map[string]interface{})
+	model["displayname"] = "testString"
+	model["name"] = "testString"
+	model["type"] = "text"
+	model["options"] = []interface{}{globalCatalogMetadataServiceCustomParametersOptionsModel}
+	model["value"] = []interface{}{"testString"}
+	model["layout"] = "testString"
+	model["associations"] = map[string]interface{}{"anyKey": "anyValue"}
+	model["validation_url"] = "testString"
+	model["options_url"] = "testString"
+	model["invalidmessage"] = "testString"
+	model["description"] = "testString"
+	model["required"] = true
+	model["pattern"] = "testString"
+	model["placeholder"] = "testString"
+	model["readonly"] = true
+	model["hidden"] = true
+	model["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParameters(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersOptions(t *testing.T) {
+	checkResult := func(result *partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+		globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+		model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+		model.Displayname = core.StringPtr("testString")
+		model.Value = core.StringPtr("testString")
+		model.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		assert.Equal(t, result, model)
+	}
+
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+	model := make(map[string]interface{})
+	model["displayname"] = "testString"
+	model["value"] = "testString"
+	model["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersOptions(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18n(t *testing.T) {
+	checkResult := func(result *partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+		model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+		model.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+		assert.Equal(t, result, model)
+	}
+
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+	model := make(map[string]interface{})
+	model["en"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["de"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["es"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["fr"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["it"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["ja"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["ko"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["pt_br"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["zh_tw"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["zh_cn"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18n(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(t *testing.T) {
+	checkResult := func(result *partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields) {
+		model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+		model.Displayname = core.StringPtr("testString")
+		model.Description = core.StringPtr("testString")
+
+		assert.Equal(t, result, model)
+	}
+
+	model := make(map[string]interface{})
+	model["displayname"] = "testString"
+	model["description"] = "testString"
 
-	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataService(model)
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogDeploymentMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(model)
 	assert.Nil(t, err)
 	checkResult(result)
 }
diff --git a/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_plan.go b/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_plan.go
index 8b291a74052..2de16d95ab9 100644
--- a/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_plan.go
+++ b/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_plan.go
@@ -386,6 +386,11 @@ func ResourceIbmOnboardingCatalogPlan() *schema.Resource {
 					},
 				},
 			},
+			"geo_tags": &schema.Schema{
+				Type:     schema.TypeList,
+				Computed: true,
+				Elem:     &schema.Schema{Type: schema.TypeString},
+			},
 			"url": &schema.Schema{
 				Type:        schema.TypeString,
 				Computed:    true,
@@ -597,6 +602,12 @@ func resourceIbmOnboardingCatalogPlanRead(context context.Context, d *schema.Res
 			return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_onboarding_catalog_plan", "read", "set-metadata").GetDiag()
 		}
 	}
+	if !core.IsNil(globalCatalogPlan.GeoTags) {
+		if err = d.Set("geo_tags", globalCatalogPlan.GeoTags); err != nil {
+			err = fmt.Errorf("Error setting geo_tags: %s", err)
+			return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_onboarding_catalog_plan", "read", "set-geo_tags").GetDiag()
+		}
+	}
 	if !core.IsNil(globalCatalogPlan.URL) {
 		if err = d.Set("url", globalCatalogPlan.URL); err != nil {
 			err = fmt.Errorf("Error setting url: %s", err)
@@ -805,7 +816,7 @@ func ResourceIbmOnboardingCatalogPlanMapToGlobalCatalogPlanMetadata(modelMap map
 		model.Ui = UiModel
 	}
 	if modelMap["service"] != nil && len(modelMap["service"].([]interface{})) > 0 && modelMap["service"].([]interface{})[0] != nil {
-		ServiceModel, err := ResourceIbmOnboardingCatalogPlanMapToGlobalCatalogMetadataService(modelMap["service"].([]interface{})[0].(map[string]interface{}))
+		ServiceModel, err := ResourceIbmOnboardingCatalogPlanMapToGlobalCatalogPlanMetadataService(modelMap["service"].([]interface{})[0].(map[string]interface{}))
 		if err != nil {
 			return model, err
 		}
@@ -967,8 +978,8 @@ func ResourceIbmOnboardingCatalogPlanMapToGlobalCatalogMetadataUIUrls(modelMap m
 	return model, nil
 }
 
-func ResourceIbmOnboardingCatalogPlanMapToGlobalCatalogMetadataService(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataService, error) {
-	model := &partnercentersellv1.GlobalCatalogMetadataService{}
+func ResourceIbmOnboardingCatalogPlanMapToGlobalCatalogPlanMetadataService(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogPlanMetadataService, error) {
+	model := &partnercentersellv1.GlobalCatalogPlanMetadataService{}
 	if modelMap["rc_provisionable"] != nil {
 		model.RcProvisionable = core.BoolPtr(modelMap["rc_provisionable"].(bool))
 	}
@@ -1059,7 +1070,7 @@ func ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataToMap(model *partn
 		modelMap["ui"] = []map[string]interface{}{uiMap}
 	}
 	if model.Service != nil {
-		serviceMap, err := ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataServiceToMap(model.Service)
+		serviceMap, err := ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataServiceToMap(model.Service)
 		if err != nil {
 			return modelMap, err
 		}
@@ -1218,7 +1229,7 @@ func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIUrlsToMap(model *par
 	return modelMap, nil
 }
 
-func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataServiceToMap(model *partnercentersellv1.GlobalCatalogMetadataService) (map[string]interface{}, error) {
+func ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataServiceToMap(model *partnercentersellv1.GlobalCatalogPlanMetadataService) (map[string]interface{}, error) {
 	modelMap := make(map[string]interface{})
 	if model.RcProvisionable != nil {
 		modelMap["rc_provisionable"] = *model.RcProvisionable
@@ -1267,282 +1278,382 @@ func ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanPatchAsPatch(patchVals *pa
 	path = "active"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["active"] = nil
+	} else if !exists {
+		delete(patch, "active")
 	}
 	path = "disabled"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["disabled"] = nil
+	} else if !exists {
+		delete(patch, "disabled")
 	}
 	path = "overview_ui"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["overview_ui"] = nil
 	} else if exists && patch["overview_ui"] != nil {
-		ResourceIbmOnboardingCatalogPlanGlobalCatalogOverviewUIAsPatch(patch["overview_ui"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogPlanGlobalCatalogOverviewUIAsPatch(patch["overview_ui"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "overview_ui")
 	}
 	path = "tags"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["tags"] = nil
+	} else if !exists {
+		delete(patch, "tags")
 	}
 	path = "object_provider"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["object_provider"] = nil
 	} else if exists && patch["object_provider"] != nil {
-		ResourceIbmOnboardingCatalogPlanCatalogProductProviderAsPatch(patch["object_provider"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogPlanCatalogProductProviderAsPatch(patch["object_provider"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "object_provider")
 	}
 	path = "metadata"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["metadata"] = nil
 	} else if exists && patch["metadata"] != nil {
-		ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataAsPatch(patch["metadata"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataAsPatch(patch["metadata"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "metadata")
 	}
 
 	return patch
 }
 
-func ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.rc_compatible"
+	path = rootPath + ".rc_compatible"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["rc_compatible"] = nil
+	} else if !exists {
+		delete(patch, "rc_compatible")
 	}
-	path = "metadata.0.ui"
+	path = rootPath + ".ui"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["ui"] = nil
 	} else if exists && patch["ui"] != nil {
-		ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIAsPatch(patch["ui"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIAsPatch(patch["ui"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "ui")
 	}
-	path = "metadata.0.service"
+	path = rootPath + ".service"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["service"] = nil
 	} else if exists && patch["service"] != nil {
-		ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataServiceAsPatch(patch["service"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataServiceAsPatch(patch["service"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "service")
 	}
-	path = "metadata.0.pricing"
+	path = rootPath + ".pricing"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["pricing"] = nil
 	} else if exists && patch["pricing"] != nil {
-		ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataPricingAsPatch(patch["pricing"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataPricingAsPatch(patch["pricing"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "pricing")
 	}
-	path = "metadata.0.plan"
+	path = rootPath + ".plan"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["plan"] = nil
 	} else if exists && patch["plan"] != nil {
-		ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataPlanAsPatch(patch["plan"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataPlanAsPatch(patch["plan"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "plan")
 	}
 }
 
-func ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataPlanAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataPlanAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.plan.0.allow_internal_users"
+	path = rootPath + ".allow_internal_users"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["allow_internal_users"] = nil
+	} else if !exists {
+		delete(patch, "allow_internal_users")
 	}
-	path = "metadata.0.plan.0.bindable"
+	path = rootPath + ".bindable"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["bindable"] = nil
+	} else if !exists {
+		delete(patch, "bindable")
 	}
 }
 
-func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataPricingAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataPricingAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.pricing.0.type"
+	path = rootPath + ".type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["type"] = nil
+	} else if !exists {
+		delete(patch, "type")
 	}
-	path = "metadata.0.pricing.0.origin"
+	path = rootPath + ".origin"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["origin"] = nil
+	} else if !exists {
+		delete(patch, "origin")
 	}
 }
 
-func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataServiceAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataServiceAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.service.0.rc_provisionable"
+	path = rootPath + ".rc_provisionable"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["rc_provisionable"] = nil
+	} else if !exists {
+		delete(patch, "rc_provisionable")
 	}
-	path = "metadata.0.service.0.iam_compatible"
+	path = rootPath + ".iam_compatible"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["iam_compatible"] = nil
+	} else if !exists {
+		delete(patch, "iam_compatible")
 	}
-	path = "metadata.0.service.0.bindable"
+	path = rootPath + ".bindable"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["bindable"] = nil
+	} else if !exists {
+		delete(patch, "bindable")
 	}
-	path = "metadata.0.service.0.plan_updateable"
+	path = rootPath + ".plan_updateable"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["plan_updateable"] = nil
+	} else if !exists {
+		delete(patch, "plan_updateable")
 	}
-	path = "metadata.0.service.0.service_key_supported"
+	path = rootPath + ".service_key_supported"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["service_key_supported"] = nil
+	} else if !exists {
+		delete(patch, "service_key_supported")
 	}
 }
 
-func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings"
+	path = rootPath + ".strings"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["strings"] = nil
 	} else if exists && patch["strings"] != nil {
-		ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIStringsAsPatch(patch["strings"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIStringsAsPatch(patch["strings"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "strings")
 	}
-	path = "metadata.0.ui.0.urls"
+	path = rootPath + ".urls"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["urls"] = nil
 	} else if exists && patch["urls"] != nil {
-		ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIUrlsAsPatch(patch["urls"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIUrlsAsPatch(patch["urls"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "urls")
 	}
-	path = "metadata.0.ui.0.hidden"
+	path = rootPath + ".hidden"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["hidden"] = nil
+	} else if !exists {
+		delete(patch, "hidden")
 	}
-	path = "metadata.0.ui.0.side_by_side_index"
+	path = rootPath + ".side_by_side_index"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["side_by_side_index"] = nil
+	} else if !exists {
+		delete(patch, "side_by_side_index")
 	}
 }
 
-func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIUrlsAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIUrlsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.urls.0.doc_url"
+	path = rootPath + ".doc_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["doc_url"] = nil
+	} else if !exists {
+		delete(patch, "doc_url")
 	}
-	path = "metadata.0.ui.0.urls.0.apidocs_url"
+	path = rootPath + ".apidocs_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["apidocs_url"] = nil
+	} else if !exists {
+		delete(patch, "apidocs_url")
 	}
-	path = "metadata.0.ui.0.urls.0.terms_url"
+	path = rootPath + ".terms_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["terms_url"] = nil
+	} else if !exists {
+		delete(patch, "terms_url")
 	}
-	path = "metadata.0.ui.0.urls.0.instructions_url"
+	path = rootPath + ".instructions_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["instructions_url"] = nil
+	} else if !exists {
+		delete(patch, "instructions_url")
 	}
-	path = "metadata.0.ui.0.urls.0.catalog_details_url"
+	path = rootPath + ".catalog_details_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["catalog_details_url"] = nil
+	} else if !exists {
+		delete(patch, "catalog_details_url")
 	}
-	path = "metadata.0.ui.0.urls.0.custom_create_page_url"
+	path = rootPath + ".custom_create_page_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["custom_create_page_url"] = nil
+	} else if !exists {
+		delete(patch, "custom_create_page_url")
 	}
-	path = "metadata.0.ui.0.urls.0.dashboard"
+	path = rootPath + ".dashboard"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["dashboard"] = nil
+	} else if !exists {
+		delete(patch, "dashboard")
 	}
 }
 
-func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIStringsAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIStringsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings.0.en"
+	path = rootPath + ".en"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["en"] = nil
 	} else if exists && patch["en"] != nil {
-		ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIStringsContentAsPatch(patch["en"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIStringsContentAsPatch(patch["en"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "en")
 	}
 }
 
-func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIStringsContentAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIStringsContentAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings.0.en.0.bullets"
+	path = rootPath + ".bullets"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["bullets"] = nil
 	} else if exists && patch["bullets"] != nil {
-		ResourceIbmOnboardingCatalogPlanCatalogHighlightItemAsPatch(patch["bullets"].([]map[string]interface{})[0], d)
+		bulletsList := patch["bullets"].([]map[string]interface{})
+		for i, bulletsItem := range bulletsList {
+			ResourceIbmOnboardingCatalogPlanCatalogHighlightItemAsPatch(bulletsItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "bullets")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.media"
+	path = rootPath + ".media"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["media"] = nil
 	} else if exists && patch["media"] != nil {
-		ResourceIbmOnboardingCatalogPlanCatalogProductMediaItemAsPatch(patch["media"].([]map[string]interface{})[0], d)
+		mediaList := patch["media"].([]map[string]interface{})
+		for i, mediaItem := range mediaList {
+			ResourceIbmOnboardingCatalogPlanCatalogProductMediaItemAsPatch(mediaItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "media")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.embeddable_dashboard"
+	path = rootPath + ".embeddable_dashboard"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["embeddable_dashboard"] = nil
+	} else if !exists {
+		delete(patch, "embeddable_dashboard")
 	}
 }
 
-func ResourceIbmOnboardingCatalogPlanCatalogProductMediaItemAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanCatalogProductMediaItemAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings.0.en.0.media.0.caption_i18n"
+	path = rootPath + ".caption_i18n"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["caption_i18n"] = nil
+	} else if !exists {
+		delete(patch, "caption_i18n")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.media.0.thumbnail"
+	path = rootPath + ".thumbnail"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["thumbnail"] = nil
+	} else if !exists {
+		delete(patch, "thumbnail")
 	}
 }
 
-func ResourceIbmOnboardingCatalogPlanCatalogHighlightItemAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanCatalogHighlightItemAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings.0.en.0.bullets.0.description"
+	path = rootPath + ".description"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["description"] = nil
+	} else if !exists {
+		delete(patch, "description")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.bullets.0.description_i18n"
+	path = rootPath + ".description_i18n"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["description_i18n"] = nil
+	} else if !exists {
+		delete(patch, "description_i18n")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.bullets.0.title"
+	path = rootPath + ".title"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["title"] = nil
+	} else if !exists {
+		delete(patch, "title")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.bullets.0.title_i18n"
+	path = rootPath + ".title_i18n"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["title_i18n"] = nil
+	} else if !exists {
+		delete(patch, "title_i18n")
 	}
 }
 
-func ResourceIbmOnboardingCatalogPlanCatalogProductProviderAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanCatalogProductProviderAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "object_provider.0.name"
+	path = rootPath + ".name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["name"] = nil
+	} else if !exists {
+		delete(patch, "name")
 	}
-	path = "object_provider.0.email"
+	path = rootPath + ".email"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["email"] = nil
+	} else if !exists {
+		delete(patch, "email")
 	}
 }
 
-func ResourceIbmOnboardingCatalogPlanGlobalCatalogOverviewUIAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanGlobalCatalogOverviewUIAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "overview_ui.0.en"
+	path = rootPath + ".en"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["en"] = nil
 	} else if exists && patch["en"] != nil {
-		ResourceIbmOnboardingCatalogPlanGlobalCatalogOverviewUITranslatedContentAsPatch(patch["en"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogPlanGlobalCatalogOverviewUITranslatedContentAsPatch(patch["en"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "en")
 	}
 }
 
-func ResourceIbmOnboardingCatalogPlanGlobalCatalogOverviewUITranslatedContentAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogPlanGlobalCatalogOverviewUITranslatedContentAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "overview_ui.0.en.0.display_name"
+	path = rootPath + ".display_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["display_name"] = nil
+	} else if !exists {
+		delete(patch, "display_name")
 	}
-	path = "overview_ui.0.en.0.description"
+	path = rootPath + ".description"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["description"] = nil
+	} else if !exists {
+		delete(patch, "description")
 	}
-	path = "overview_ui.0.en.0.long_description"
+	path = rootPath + ".long_description"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["long_description"] = nil
+	} else if !exists {
+		delete(patch, "long_description")
 	}
 }
diff --git a/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_plan_test.go b/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_plan_test.go
index 5ddd617c115..1400f72fc27 100644
--- a/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_plan_test.go
+++ b/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_plan_test.go
@@ -83,7 +83,7 @@ func TestAccIbmOnboardingCatalogPlanAllArgs(t *testing.T) {
 	kindUpdate := "plan"
 	overviewUiEn := "display_name"
 	overviewUiEnUpdate := "display_name_2"
-	rcCompatible := "true"
+	rcCompatible := "false"
 	rcCompatibleUpdate := "false"
 	allowInternalUsers := "true"
 	allowInternalUsersUpdate := "false"
@@ -129,7 +129,7 @@ func TestAccIbmOnboardingCatalogPlanAllArgs(t *testing.T) {
 				ImportState:       true,
 				ImportStateVerify: true,
 				ImportStateVerifyIgnore: []string{
-					"env", "product_id", "catalog_product_id",
+					"env", "product_id", "catalog_product_id", "geo_tags", "object_id",
 				},
 			},
 		},
@@ -161,7 +161,7 @@ func testAccCheckIbmOnboardingCatalogPlanConfigBasic(productID string, catalogPr
 					allow_internal_users = true
 					bindable = false
 				}
-            }
+			}
 		}
 	`, productID, catalogProductID, name, active, disabled, kind, objectId)
 }
@@ -201,12 +201,12 @@ func testAccCheckIbmOnboardingCatalogPlanConfig(productID string, catalogProduct
 					bindable = false
 				}
 				ui {
-            		strings {
-                		en {
-                    		bullets {
+					strings {
+						en {
+							bullets {
                         		title = "%s"
                         		description = "some1"
-                    		}
+							}
 							media {
                         		type = "youtube"
                         		url = "https://www.youtube.com/embed/HtkpMgNFYtE"
@@ -277,7 +277,7 @@ func testAccCheckIbmOnboardingCatalogPlanUpdateConfig(productID string, catalogP
                     		}
                 		}
             		}
-        		}
+				}
 			}
 		}
 	`, productID, catalogProductID, env, name, active, disabled, kind, objectId, overviewUiEn, rcCompatible, pricingType, allowInternalUsers, bulletTitleName, mediaCaption)
@@ -453,12 +453,12 @@ func TestResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataToMap(t *testi
 		globalCatalogMetadataUiModel["hidden"] = true
 		globalCatalogMetadataUiModel["side_by_side_index"] = float64(72.5)
 
-		globalCatalogMetadataServiceModel := make(map[string]interface{})
-		globalCatalogMetadataServiceModel["rc_provisionable"] = true
-		globalCatalogMetadataServiceModel["iam_compatible"] = true
-		globalCatalogMetadataServiceModel["bindable"] = true
-		globalCatalogMetadataServiceModel["plan_updateable"] = true
-		globalCatalogMetadataServiceModel["service_key_supported"] = true
+		globalCatalogPlanMetadataServiceModel := make(map[string]interface{})
+		globalCatalogPlanMetadataServiceModel["rc_provisionable"] = true
+		globalCatalogPlanMetadataServiceModel["iam_compatible"] = true
+		globalCatalogPlanMetadataServiceModel["bindable"] = true
+		globalCatalogPlanMetadataServiceModel["plan_updateable"] = true
+		globalCatalogPlanMetadataServiceModel["service_key_supported"] = true
 
 		globalCatalogMetadataPricingModel := make(map[string]interface{})
 		globalCatalogMetadataPricingModel["type"] = "free"
@@ -471,7 +471,7 @@ func TestResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataToMap(t *testi
 		model := make(map[string]interface{})
 		model["rc_compatible"] = true
 		model["ui"] = []map[string]interface{}{globalCatalogMetadataUiModel}
-		model["service"] = []map[string]interface{}{globalCatalogMetadataServiceModel}
+		model["service"] = []map[string]interface{}{globalCatalogPlanMetadataServiceModel}
 		model["pricing"] = []map[string]interface{}{globalCatalogMetadataPricingModel}
 		model["plan"] = []map[string]interface{}{globalCatalogPlanMetadataPlanModel}
 
@@ -514,12 +514,12 @@ func TestResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataToMap(t *testi
 	globalCatalogMetadataUiModel.Hidden = core.BoolPtr(true)
 	globalCatalogMetadataUiModel.SideBySideIndex = core.Float64Ptr(float64(72.5))
 
-	globalCatalogMetadataServiceModel := new(partnercentersellv1.GlobalCatalogMetadataService)
-	globalCatalogMetadataServiceModel.RcProvisionable = core.BoolPtr(true)
-	globalCatalogMetadataServiceModel.IamCompatible = core.BoolPtr(true)
-	globalCatalogMetadataServiceModel.Bindable = core.BoolPtr(true)
-	globalCatalogMetadataServiceModel.PlanUpdateable = core.BoolPtr(true)
-	globalCatalogMetadataServiceModel.ServiceKeySupported = core.BoolPtr(true)
+	globalCatalogPlanMetadataServiceModel := new(partnercentersellv1.GlobalCatalogPlanMetadataService)
+	globalCatalogPlanMetadataServiceModel.RcProvisionable = core.BoolPtr(true)
+	globalCatalogPlanMetadataServiceModel.IamCompatible = core.BoolPtr(true)
+	globalCatalogPlanMetadataServiceModel.Bindable = core.BoolPtr(true)
+	globalCatalogPlanMetadataServiceModel.PlanUpdateable = core.BoolPtr(true)
+	globalCatalogPlanMetadataServiceModel.ServiceKeySupported = core.BoolPtr(true)
 
 	globalCatalogMetadataPricingModel := new(partnercentersellv1.GlobalCatalogMetadataPricing)
 	globalCatalogMetadataPricingModel.Type = core.StringPtr("free")
@@ -532,7 +532,7 @@ func TestResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataToMap(t *testi
 	model := new(partnercentersellv1.GlobalCatalogPlanMetadata)
 	model.RcCompatible = core.BoolPtr(true)
 	model.Ui = globalCatalogMetadataUiModel
-	model.Service = globalCatalogMetadataServiceModel
+	model.Service = globalCatalogPlanMetadataServiceModel
 	model.Pricing = globalCatalogMetadataPricingModel
 	model.Plan = globalCatalogPlanMetadataPlanModel
 
@@ -795,7 +795,7 @@ func TestResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataUIUrlsToMap(t *tes
 	checkResult(result)
 }
 
-func TestResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataServiceToMap(t *testing.T) {
+func TestResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataServiceToMap(t *testing.T) {
 	checkResult := func(result map[string]interface{}) {
 		model := make(map[string]interface{})
 		model["rc_provisionable"] = true
@@ -807,14 +807,14 @@ func TestResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataServiceToMap(t *te
 		assert.Equal(t, result, model)
 	}
 
-	model := new(partnercentersellv1.GlobalCatalogMetadataService)
+	model := new(partnercentersellv1.GlobalCatalogPlanMetadataService)
 	model.RcProvisionable = core.BoolPtr(true)
 	model.IamCompatible = core.BoolPtr(true)
 	model.Bindable = core.BoolPtr(true)
 	model.PlanUpdateable = core.BoolPtr(true)
 	model.ServiceKeySupported = core.BoolPtr(true)
 
-	result, err := partnercentersell.ResourceIbmOnboardingCatalogPlanGlobalCatalogMetadataServiceToMap(model)
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogPlanGlobalCatalogPlanMetadataServiceToMap(model)
 	assert.Nil(t, err)
 	checkResult(result)
 }
@@ -957,12 +957,12 @@ func TestResourceIbmOnboardingCatalogPlanMapToGlobalCatalogPlanMetadata(t *testi
 		globalCatalogMetadataUiModel.Hidden = core.BoolPtr(true)
 		globalCatalogMetadataUiModel.SideBySideIndex = core.Float64Ptr(float64(72.5))
 
-		globalCatalogMetadataServiceModel := new(partnercentersellv1.GlobalCatalogMetadataService)
-		globalCatalogMetadataServiceModel.RcProvisionable = core.BoolPtr(true)
-		globalCatalogMetadataServiceModel.IamCompatible = core.BoolPtr(true)
-		globalCatalogMetadataServiceModel.Bindable = core.BoolPtr(true)
-		globalCatalogMetadataServiceModel.PlanUpdateable = core.BoolPtr(true)
-		globalCatalogMetadataServiceModel.ServiceKeySupported = core.BoolPtr(true)
+		globalCatalogPlanMetadataServiceModel := new(partnercentersellv1.GlobalCatalogPlanMetadataService)
+		globalCatalogPlanMetadataServiceModel.RcProvisionable = core.BoolPtr(true)
+		globalCatalogPlanMetadataServiceModel.IamCompatible = core.BoolPtr(true)
+		globalCatalogPlanMetadataServiceModel.Bindable = core.BoolPtr(true)
+		globalCatalogPlanMetadataServiceModel.PlanUpdateable = core.BoolPtr(true)
+		globalCatalogPlanMetadataServiceModel.ServiceKeySupported = core.BoolPtr(true)
 
 		globalCatalogMetadataPricingModel := new(partnercentersellv1.GlobalCatalogMetadataPricing)
 		globalCatalogMetadataPricingModel.Type = core.StringPtr("free")
@@ -975,7 +975,7 @@ func TestResourceIbmOnboardingCatalogPlanMapToGlobalCatalogPlanMetadata(t *testi
 		model := new(partnercentersellv1.GlobalCatalogPlanMetadata)
 		model.RcCompatible = core.BoolPtr(true)
 		model.Ui = globalCatalogMetadataUiModel
-		model.Service = globalCatalogMetadataServiceModel
+		model.Service = globalCatalogPlanMetadataServiceModel
 		model.Pricing = globalCatalogMetadataPricingModel
 		model.Plan = globalCatalogPlanMetadataPlanModel
 
@@ -1018,12 +1018,12 @@ func TestResourceIbmOnboardingCatalogPlanMapToGlobalCatalogPlanMetadata(t *testi
 	globalCatalogMetadataUiModel["hidden"] = true
 	globalCatalogMetadataUiModel["side_by_side_index"] = float64(72.5)
 
-	globalCatalogMetadataServiceModel := make(map[string]interface{})
-	globalCatalogMetadataServiceModel["rc_provisionable"] = true
-	globalCatalogMetadataServiceModel["iam_compatible"] = true
-	globalCatalogMetadataServiceModel["bindable"] = true
-	globalCatalogMetadataServiceModel["plan_updateable"] = true
-	globalCatalogMetadataServiceModel["service_key_supported"] = true
+	globalCatalogPlanMetadataServiceModel := make(map[string]interface{})
+	globalCatalogPlanMetadataServiceModel["rc_provisionable"] = true
+	globalCatalogPlanMetadataServiceModel["iam_compatible"] = true
+	globalCatalogPlanMetadataServiceModel["bindable"] = true
+	globalCatalogPlanMetadataServiceModel["plan_updateable"] = true
+	globalCatalogPlanMetadataServiceModel["service_key_supported"] = true
 
 	globalCatalogMetadataPricingModel := make(map[string]interface{})
 	globalCatalogMetadataPricingModel["type"] = "free"
@@ -1036,7 +1036,7 @@ func TestResourceIbmOnboardingCatalogPlanMapToGlobalCatalogPlanMetadata(t *testi
 	model := make(map[string]interface{})
 	model["rc_compatible"] = true
 	model["ui"] = []interface{}{globalCatalogMetadataUiModel}
-	model["service"] = []interface{}{globalCatalogMetadataServiceModel}
+	model["service"] = []interface{}{globalCatalogPlanMetadataServiceModel}
 	model["pricing"] = []interface{}{globalCatalogMetadataPricingModel}
 	model["plan"] = []interface{}{globalCatalogPlanMetadataPlanModel}
 
@@ -1299,9 +1299,9 @@ func TestResourceIbmOnboardingCatalogPlanMapToGlobalCatalogMetadataUIUrls(t *tes
 	checkResult(result)
 }
 
-func TestResourceIbmOnboardingCatalogPlanMapToGlobalCatalogMetadataService(t *testing.T) {
-	checkResult := func(result *partnercentersellv1.GlobalCatalogMetadataService) {
-		model := new(partnercentersellv1.GlobalCatalogMetadataService)
+func TestResourceIbmOnboardingCatalogPlanMapToGlobalCatalogPlanMetadataService(t *testing.T) {
+	checkResult := func(result *partnercentersellv1.GlobalCatalogPlanMetadataService) {
+		model := new(partnercentersellv1.GlobalCatalogPlanMetadataService)
 		model.RcProvisionable = core.BoolPtr(true)
 		model.IamCompatible = core.BoolPtr(true)
 		model.Bindable = core.BoolPtr(true)
@@ -1318,7 +1318,7 @@ func TestResourceIbmOnboardingCatalogPlanMapToGlobalCatalogMetadataService(t *te
 	model["plan_updateable"] = true
 	model["service_key_supported"] = true
 
-	result, err := partnercentersell.ResourceIbmOnboardingCatalogPlanMapToGlobalCatalogMetadataService(model)
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogPlanMapToGlobalCatalogPlanMetadataService(model)
 	assert.Nil(t, err)
 	checkResult(result)
 }
diff --git a/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_product.go b/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_product.go
index 839bcb89de1..54281c54aed 100644
--- a/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_product.go
+++ b/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_product.go
@@ -348,6 +348,533 @@ func ResourceIbmOnboardingCatalogProduct() *schema.Resource {
 										Optional:    true,
 										Description: "Indicates service credentials support and controls the Service Credential tab on Resource Details page.",
 									},
+									"unique_api_key": &schema.Schema{
+										Type:        schema.TypeBool,
+										Optional:    true,
+										Description: "Indicates that the deployment uses an unique api key or not.",
+									},
+									"parameters": &schema.Schema{
+										Type:     schema.TypeList,
+										Optional: true,
+										Elem: &schema.Resource{
+											Schema: map[string]*schema.Schema{
+												"displayname": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The display name for custom service parameters.",
+												},
+												"name": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The key of the parameter.",
+												},
+												"type": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The type of custom service parameters.",
+												},
+												"options": &schema.Schema{
+													Type:     schema.TypeList,
+													Optional: true,
+													Elem: &schema.Resource{
+														Schema: map[string]*schema.Schema{
+															"displayname": &schema.Schema{
+																Type:        schema.TypeString,
+																Optional:    true,
+																Description: "The display name for custom service parameters.",
+															},
+															"value": &schema.Schema{
+																Type:        schema.TypeString,
+																Optional:    true,
+																Description: "The value for custom service parameters.",
+															},
+															"i18n": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The description for the object.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"en": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"de": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"es": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"fr": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"it": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"ja": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"ko": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"pt_br": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"zh_tw": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																		"zh_cn": &schema.Schema{
+																			Type:        schema.TypeList,
+																			MaxItems:    1,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name and description.",
+																			Elem: &schema.Resource{
+																				Schema: map[string]*schema.Schema{
+																					"displayname": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter display name.",
+																					},
+																					"description": &schema.Schema{
+																						Type:        schema.TypeString,
+																						Optional:    true,
+																						Description: "The translations for custom service parameter description.",
+																					},
+																				},
+																			},
+																		},
+																	},
+																},
+															},
+														},
+													},
+												},
+												"value": &schema.Schema{
+													Type:     schema.TypeList,
+													Optional: true,
+													Elem:     &schema.Schema{Type: schema.TypeString},
+												},
+												"layout": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "Specifies the layout of check box or radio input types. When unspecified, the default layout is horizontal.",
+												},
+												"associations": &schema.Schema{
+													Type:        schema.TypeMap,
+													Optional:    true,
+													Description: "A JSON structure to describe the interactions with pricing plans and/or other custom parameters.",
+													Elem:        &schema.Schema{Type: schema.TypeString},
+												},
+												"validation_url": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The validation URL for custom service parameters.",
+												},
+												"options_url": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The options URL for custom service parameters.",
+												},
+												"invalidmessage": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The message that appears when the content of the text box is invalid.",
+												},
+												"description": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The description of the parameter that is displayed to help users with the value of the parameter.",
+												},
+												"required": &schema.Schema{
+													Type:        schema.TypeBool,
+													Optional:    true,
+													Description: "A boolean value that indicates whether the parameter must be entered in the IBM Cloud user interface.",
+												},
+												"pattern": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "A regular expression that the value is checked against.",
+												},
+												"placeholder": &schema.Schema{
+													Type:        schema.TypeString,
+													Optional:    true,
+													Description: "The placeholder text for custom parameters.",
+												},
+												"readonly": &schema.Schema{
+													Type:        schema.TypeBool,
+													Optional:    true,
+													Description: "A boolean value that indicates whether the value of the parameter is displayed only and cannot be changed by users. The default value is false.",
+												},
+												"hidden": &schema.Schema{
+													Type:        schema.TypeBool,
+													Optional:    true,
+													Description: "Indicates whether the custom parameters is hidden required or not.",
+												},
+												"i18n": &schema.Schema{
+													Type:        schema.TypeList,
+													MaxItems:    1,
+													Optional:    true,
+													Description: "The description for the object.",
+													Elem: &schema.Resource{
+														Schema: map[string]*schema.Schema{
+															"en": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"de": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"es": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"fr": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"it": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"ja": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"ko": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"pt_br": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"zh_tw": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+															"zh_cn": &schema.Schema{
+																Type:        schema.TypeList,
+																MaxItems:    1,
+																Optional:    true,
+																Description: "The translations for custom service parameter display name and description.",
+																Elem: &schema.Resource{
+																	Schema: map[string]*schema.Schema{
+																		"displayname": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter display name.",
+																		},
+																		"description": &schema.Schema{
+																			Type:        schema.TypeString,
+																			Optional:    true,
+																			Description: "The translations for custom service parameter description.",
+																		},
+																	},
+																},
+															},
+														},
+													},
+												},
+											},
+										},
+									},
 								},
 							},
 						},
@@ -598,6 +1125,11 @@ func ResourceIbmOnboardingCatalogProduct() *schema.Resource {
 					},
 				},
 			},
+			"geo_tags": &schema.Schema{
+				Type:     schema.TypeList,
+				Computed: true,
+				Elem:     &schema.Schema{Type: schema.TypeString},
+			},
 			"url": &schema.Schema{
 				Type:        schema.TypeString,
 				Computed:    true,
@@ -815,6 +1347,12 @@ func resourceIbmOnboardingCatalogProductRead(context context.Context, d *schema.
 			return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_onboarding_catalog_product", "read", "set-metadata").GetDiag()
 		}
 	}
+	if !core.IsNil(globalCatalogProduct.GeoTags) {
+		if err = d.Set("geo_tags", globalCatalogProduct.GeoTags); err != nil {
+			err = fmt.Errorf("Error setting geo_tags: %s", err)
+			return flex.DiscriminatedTerraformErrorf(err, err.Error(), "ibm_onboarding_catalog_product", "read", "set-geo_tags").GetDiag()
+		}
+	}
 	if !core.IsNil(globalCatalogProduct.URL) {
 		if err = d.Set("url", globalCatalogProduct.URL); err != nil {
 			err = fmt.Errorf("Error setting url: %s", err)
@@ -1026,7 +1564,7 @@ func ResourceIbmOnboardingCatalogProductMapToGlobalCatalogProductMetadata(modelM
 		model.Ui = UiModel
 	}
 	if modelMap["service"] != nil && len(modelMap["service"].([]interface{})) > 0 && modelMap["service"].([]interface{})[0] != nil {
-		ServiceModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataService(modelMap["service"].([]interface{})[0].(map[string]interface{}))
+		ServiceModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogProductMetadataService(modelMap["service"].([]interface{})[0].(map[string]interface{}))
 		if err != nil {
 			return model, err
 		}
@@ -1160,43 +1698,233 @@ func ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataUIUrls(modelMa
 	if modelMap["doc_url"] != nil && modelMap["doc_url"].(string) != "" {
 		model.DocURL = core.StringPtr(modelMap["doc_url"].(string))
 	}
-	if modelMap["apidocs_url"] != nil && modelMap["apidocs_url"].(string) != "" {
-		model.ApidocsURL = core.StringPtr(modelMap["apidocs_url"].(string))
+	if modelMap["apidocs_url"] != nil && modelMap["apidocs_url"].(string) != "" {
+		model.ApidocsURL = core.StringPtr(modelMap["apidocs_url"].(string))
+	}
+	if modelMap["terms_url"] != nil && modelMap["terms_url"].(string) != "" {
+		model.TermsURL = core.StringPtr(modelMap["terms_url"].(string))
+	}
+	if modelMap["instructions_url"] != nil && modelMap["instructions_url"].(string) != "" {
+		model.InstructionsURL = core.StringPtr(modelMap["instructions_url"].(string))
+	}
+	if modelMap["catalog_details_url"] != nil && modelMap["catalog_details_url"].(string) != "" {
+		model.CatalogDetailsURL = core.StringPtr(modelMap["catalog_details_url"].(string))
+	}
+	if modelMap["custom_create_page_url"] != nil && modelMap["custom_create_page_url"].(string) != "" {
+		model.CustomCreatePageURL = core.StringPtr(modelMap["custom_create_page_url"].(string))
+	}
+	if modelMap["dashboard"] != nil && modelMap["dashboard"].(string) != "" {
+		model.Dashboard = core.StringPtr(modelMap["dashboard"].(string))
+	}
+	return model, nil
+}
+
+func ResourceIbmOnboardingCatalogProductMapToGlobalCatalogProductMetadataService(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogProductMetadataService, error) {
+	model := &partnercentersellv1.GlobalCatalogProductMetadataService{}
+	if modelMap["rc_provisionable"] != nil {
+		model.RcProvisionable = core.BoolPtr(modelMap["rc_provisionable"].(bool))
+	}
+	if modelMap["iam_compatible"] != nil {
+		model.IamCompatible = core.BoolPtr(modelMap["iam_compatible"].(bool))
+	}
+	if modelMap["bindable"] != nil {
+		model.Bindable = core.BoolPtr(modelMap["bindable"].(bool))
+	}
+	if modelMap["plan_updateable"] != nil {
+		model.PlanUpdateable = core.BoolPtr(modelMap["plan_updateable"].(bool))
+	}
+	if modelMap["service_key_supported"] != nil {
+		model.ServiceKeySupported = core.BoolPtr(modelMap["service_key_supported"].(bool))
+	}
+	if modelMap["unique_api_key"] != nil {
+		model.UniqueApiKey = core.BoolPtr(modelMap["unique_api_key"].(bool))
+	}
+	if modelMap["parameters"] != nil {
+		parameters := []partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters{}
+		for _, parametersItem := range modelMap["parameters"].([]interface{}) {
+			parametersItemModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParameters(parametersItem.(map[string]interface{}))
+			if err != nil {
+				return model, err
+			}
+			parameters = append(parameters, *parametersItemModel)
+		}
+		model.Parameters = parameters
+	}
+	return model, nil
+}
+
+func ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParameters(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters, error) {
+	model := &partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters{}
+	if modelMap["displayname"] != nil && modelMap["displayname"].(string) != "" {
+		model.Displayname = core.StringPtr(modelMap["displayname"].(string))
+	}
+	if modelMap["name"] != nil && modelMap["name"].(string) != "" {
+		model.Name = core.StringPtr(modelMap["name"].(string))
+	}
+	if modelMap["type"] != nil && modelMap["type"].(string) != "" {
+		model.Type = core.StringPtr(modelMap["type"].(string))
+	}
+	if modelMap["options"] != nil {
+		options := []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{}
+		for _, optionsItem := range modelMap["options"].([]interface{}) {
+			optionsItemModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersOptions(optionsItem.(map[string]interface{}))
+			if err != nil {
+				return model, err
+			}
+			options = append(options, *optionsItemModel)
+		}
+		model.Options = options
+	}
+	if modelMap["value"] != nil {
+		value := []string{}
+		for _, valueItem := range modelMap["value"].([]interface{}) {
+			value = append(value, valueItem.(string))
+		}
+		model.Value = value
+	}
+	if modelMap["layout"] != nil && modelMap["layout"].(string) != "" {
+		model.Layout = core.StringPtr(modelMap["layout"].(string))
+	}
+	if modelMap["associations"] != nil {
+		model.Associations = modelMap["associations"].(map[string]interface{})
+	}
+	if modelMap["validation_url"] != nil && modelMap["validation_url"].(string) != "" {
+		model.ValidationURL = core.StringPtr(modelMap["validation_url"].(string))
+	}
+	if modelMap["options_url"] != nil && modelMap["options_url"].(string) != "" {
+		model.OptionsURL = core.StringPtr(modelMap["options_url"].(string))
+	}
+	if modelMap["invalidmessage"] != nil && modelMap["invalidmessage"].(string) != "" {
+		model.Invalidmessage = core.StringPtr(modelMap["invalidmessage"].(string))
+	}
+	if modelMap["description"] != nil && modelMap["description"].(string) != "" {
+		model.Description = core.StringPtr(modelMap["description"].(string))
+	}
+	if modelMap["required"] != nil {
+		model.Required = core.BoolPtr(modelMap["required"].(bool))
+	}
+	if modelMap["pattern"] != nil && modelMap["pattern"].(string) != "" {
+		model.Pattern = core.StringPtr(modelMap["pattern"].(string))
+	}
+	if modelMap["placeholder"] != nil && modelMap["placeholder"].(string) != "" {
+		model.Placeholder = core.StringPtr(modelMap["placeholder"].(string))
+	}
+	if modelMap["readonly"] != nil {
+		model.Readonly = core.BoolPtr(modelMap["readonly"].(bool))
+	}
+	if modelMap["hidden"] != nil {
+		model.Hidden = core.BoolPtr(modelMap["hidden"].(bool))
+	}
+	if modelMap["i18n"] != nil && len(modelMap["i18n"].([]interface{})) > 0 {
+		I18nModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18n(modelMap["i18n"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.I18n = I18nModel
+	}
+	return model, nil
+}
+
+func ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersOptions(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions, error) {
+	model := &partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{}
+	if modelMap["displayname"] != nil && modelMap["displayname"].(string) != "" {
+		model.Displayname = core.StringPtr(modelMap["displayname"].(string))
+	}
+	if modelMap["value"] != nil && modelMap["value"].(string) != "" {
+		model.Value = core.StringPtr(modelMap["value"].(string))
+	}
+	if modelMap["i18n"] != nil && len(modelMap["i18n"].([]interface{})) > 0 {
+		I18nModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18n(modelMap["i18n"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.I18n = I18nModel
+	}
+	return model, nil
+}
+
+func ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18n(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n, error) {
+	model := &partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n{}
+	if modelMap["en"] != nil && len(modelMap["en"].([]interface{})) > 0 {
+		EnModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["en"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.En = EnModel
+	}
+	if modelMap["de"] != nil && len(modelMap["de"].([]interface{})) > 0 {
+		DeModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["de"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.De = DeModel
+	}
+	if modelMap["es"] != nil && len(modelMap["es"].([]interface{})) > 0 {
+		EsModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["es"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.Es = EsModel
+	}
+	if modelMap["fr"] != nil && len(modelMap["fr"].([]interface{})) > 0 {
+		FrModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["fr"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.Fr = FrModel
+	}
+	if modelMap["it"] != nil && len(modelMap["it"].([]interface{})) > 0 {
+		ItModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["it"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.It = ItModel
 	}
-	if modelMap["terms_url"] != nil && modelMap["terms_url"].(string) != "" {
-		model.TermsURL = core.StringPtr(modelMap["terms_url"].(string))
+	if modelMap["ja"] != nil && len(modelMap["ja"].([]interface{})) > 0 {
+		JaModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["ja"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.Ja = JaModel
 	}
-	if modelMap["instructions_url"] != nil && modelMap["instructions_url"].(string) != "" {
-		model.InstructionsURL = core.StringPtr(modelMap["instructions_url"].(string))
+	if modelMap["ko"] != nil && len(modelMap["ko"].([]interface{})) > 0 {
+		KoModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["ko"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.Ko = KoModel
 	}
-	if modelMap["catalog_details_url"] != nil && modelMap["catalog_details_url"].(string) != "" {
-		model.CatalogDetailsURL = core.StringPtr(modelMap["catalog_details_url"].(string))
+	if modelMap["pt_br"] != nil && len(modelMap["pt_br"].([]interface{})) > 0 {
+		PtBrModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["pt_br"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.PtBr = PtBrModel
 	}
-	if modelMap["custom_create_page_url"] != nil && modelMap["custom_create_page_url"].(string) != "" {
-		model.CustomCreatePageURL = core.StringPtr(modelMap["custom_create_page_url"].(string))
+	if modelMap["zh_tw"] != nil && len(modelMap["zh_tw"].([]interface{})) > 0 {
+		ZhTwModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["zh_tw"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.ZhTw = ZhTwModel
 	}
-	if modelMap["dashboard"] != nil && modelMap["dashboard"].(string) != "" {
-		model.Dashboard = core.StringPtr(modelMap["dashboard"].(string))
+	if modelMap["zh_cn"] != nil && len(modelMap["zh_cn"].([]interface{})) > 0 {
+		ZhCnModel, err := ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap["zh_cn"].([]interface{})[0].(map[string]interface{}))
+		if err != nil {
+			return model, err
+		}
+		model.ZhCn = ZhCnModel
 	}
 	return model, nil
 }
 
-func ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataService(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataService, error) {
-	model := &partnercentersellv1.GlobalCatalogMetadataService{}
-	if modelMap["rc_provisionable"] != nil {
-		model.RcProvisionable = core.BoolPtr(modelMap["rc_provisionable"].(bool))
-	}
-	if modelMap["iam_compatible"] != nil {
-		model.IamCompatible = core.BoolPtr(modelMap["iam_compatible"].(bool))
-	}
-	if modelMap["bindable"] != nil {
-		model.Bindable = core.BoolPtr(modelMap["bindable"].(bool))
-	}
-	if modelMap["plan_updateable"] != nil {
-		model.PlanUpdateable = core.BoolPtr(modelMap["plan_updateable"].(bool))
+func ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(modelMap map[string]interface{}) (*partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields, error) {
+	model := &partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields{}
+	if modelMap["displayname"] != nil && modelMap["displayname"].(string) != "" {
+		model.Displayname = core.StringPtr(modelMap["displayname"].(string))
 	}
-	if modelMap["service_key_supported"] != nil {
-		model.ServiceKeySupported = core.BoolPtr(modelMap["service_key_supported"].(bool))
+	if modelMap["description"] != nil && modelMap["description"].(string) != "" {
+		model.Description = core.StringPtr(modelMap["description"].(string))
 	}
 	return model, nil
 }
@@ -1474,7 +2202,7 @@ func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataToMap(model
 		modelMap["ui"] = []map[string]interface{}{uiMap}
 	}
 	if model.Service != nil {
-		serviceMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceToMap(model.Service)
+		serviceMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataServiceToMap(model.Service)
 		if err != nil {
 			return modelMap, err
 		}
@@ -1626,7 +2354,7 @@ func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIUrlsToMap(model *
 	return modelMap, nil
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceToMap(model *partnercentersellv1.GlobalCatalogMetadataService) (map[string]interface{}, error) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataServiceToMap(model *partnercentersellv1.GlobalCatalogProductMetadataService) (map[string]interface{}, error) {
 	modelMap := make(map[string]interface{})
 	if model.RcProvisionable != nil {
 		modelMap["rc_provisionable"] = *model.RcProvisionable
@@ -1643,6 +2371,196 @@ func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceToMap(model
 	if model.ServiceKeySupported != nil {
 		modelMap["service_key_supported"] = *model.ServiceKeySupported
 	}
+	if model.UniqueApiKey != nil {
+		modelMap["unique_api_key"] = *model.UniqueApiKey
+	}
+	if model.Parameters != nil {
+		parameters := []map[string]interface{}{}
+		for _, parametersItem := range model.Parameters {
+			parametersItemMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersToMap(&parametersItem) // #nosec G601
+			if err != nil {
+				return modelMap, err
+			}
+			parameters = append(parameters, parametersItemMap)
+		}
+		modelMap["parameters"] = parameters
+	}
+	return modelMap, nil
+}
+
+func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersToMap(model *partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters) (map[string]interface{}, error) {
+	modelMap := make(map[string]interface{})
+	if model.Displayname != nil {
+		modelMap["displayname"] = *model.Displayname
+	}
+	if model.Name != nil {
+		modelMap["name"] = *model.Name
+	}
+	if model.Type != nil {
+		modelMap["type"] = *model.Type
+	}
+	if model.Options != nil {
+		options := []map[string]interface{}{}
+		for _, optionsItem := range model.Options {
+			optionsItemMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersOptionsToMap(&optionsItem) // #nosec G601
+			if err != nil {
+				return modelMap, err
+			}
+			options = append(options, optionsItemMap)
+		}
+		modelMap["options"] = options
+	}
+	if model.Value != nil {
+		modelMap["value"] = model.Value
+	}
+	if model.Layout != nil {
+		modelMap["layout"] = *model.Layout
+	}
+	if model.Associations != nil {
+		associations := make(map[string]interface{})
+		for k, v := range model.Associations {
+			associations[k] = flex.Stringify(v)
+		}
+		modelMap["associations"] = associations
+	}
+	if model.ValidationURL != nil {
+		modelMap["validation_url"] = *model.ValidationURL
+	}
+	if model.OptionsURL != nil {
+		modelMap["options_url"] = *model.OptionsURL
+	}
+	if model.Invalidmessage != nil {
+		modelMap["invalidmessage"] = *model.Invalidmessage
+	}
+	if model.Description != nil {
+		modelMap["description"] = *model.Description
+	}
+	if model.Required != nil {
+		modelMap["required"] = *model.Required
+	}
+	if model.Pattern != nil {
+		modelMap["pattern"] = *model.Pattern
+	}
+	if model.Placeholder != nil {
+		modelMap["placeholder"] = *model.Placeholder
+	}
+	if model.Readonly != nil {
+		modelMap["readonly"] = *model.Readonly
+	}
+	if model.Hidden != nil {
+		modelMap["hidden"] = *model.Hidden
+	}
+	if model.I18n != nil {
+		i18nMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nToMap(model.I18n)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["i18n"] = []map[string]interface{}{i18nMap}
+	}
+	return modelMap, nil
+}
+
+func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersOptionsToMap(model *partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions) (map[string]interface{}, error) {
+	modelMap := make(map[string]interface{})
+	if model.Displayname != nil {
+		modelMap["displayname"] = *model.Displayname
+	}
+	if model.Value != nil {
+		modelMap["value"] = *model.Value
+	}
+	if model.I18n != nil {
+		i18nMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nToMap(model.I18n)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["i18n"] = []map[string]interface{}{i18nMap}
+	}
+	return modelMap, nil
+}
+
+func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nToMap(model *partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n) (map[string]interface{}, error) {
+	modelMap := make(map[string]interface{})
+	if model.En != nil {
+		enMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.En)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["en"] = []map[string]interface{}{enMap}
+	}
+	if model.De != nil {
+		deMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.De)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["de"] = []map[string]interface{}{deMap}
+	}
+	if model.Es != nil {
+		esMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.Es)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["es"] = []map[string]interface{}{esMap}
+	}
+	if model.Fr != nil {
+		frMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.Fr)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["fr"] = []map[string]interface{}{frMap}
+	}
+	if model.It != nil {
+		itMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.It)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["it"] = []map[string]interface{}{itMap}
+	}
+	if model.Ja != nil {
+		jaMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.Ja)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["ja"] = []map[string]interface{}{jaMap}
+	}
+	if model.Ko != nil {
+		koMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.Ko)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["ko"] = []map[string]interface{}{koMap}
+	}
+	if model.PtBr != nil {
+		ptBrMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.PtBr)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["pt_br"] = []map[string]interface{}{ptBrMap}
+	}
+	if model.ZhTw != nil {
+		zhTwMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.ZhTw)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["zh_tw"] = []map[string]interface{}{zhTwMap}
+	}
+	if model.ZhCn != nil {
+		zhCnMap, err := ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model.ZhCn)
+		if err != nil {
+			return modelMap, err
+		}
+		modelMap["zh_cn"] = []map[string]interface{}{zhCnMap}
+	}
+	return modelMap, nil
+}
+
+func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model *partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields) (map[string]interface{}, error) {
+	modelMap := make(map[string]interface{})
+	if model.Displayname != nil {
+		modelMap["displayname"] = *model.Displayname
+	}
+	if model.Description != nil {
+		modelMap["description"] = *model.Description
+	}
 	return modelMap, nil
 }
 
@@ -1859,463 +2777,868 @@ func ResourceIbmOnboardingCatalogProductGlobalCatalogProductPatchAsPatch(patchVa
 	path = "active"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["active"] = nil
+	} else if !exists {
+		delete(patch, "active")
 	}
 	path = "disabled"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["disabled"] = nil
+	} else if !exists {
+		delete(patch, "disabled")
 	}
 	path = "overview_ui"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["overview_ui"] = nil
 	} else if exists && patch["overview_ui"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogOverviewUIAsPatch(patch["overview_ui"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogOverviewUIAsPatch(patch["overview_ui"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "overview_ui")
 	}
 	path = "tags"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["tags"] = nil
+	} else if !exists {
+		delete(patch, "tags")
 	}
 	path = "images"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["images"] = nil
 	} else if exists && patch["images"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogProductImagesAsPatch(patch["images"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogProductImagesAsPatch(patch["images"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "images")
 	}
 	path = "object_provider"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["object_provider"] = nil
 	} else if exists && patch["object_provider"] != nil {
-		ResourceIbmOnboardingCatalogProductCatalogProductProviderAsPatch(patch["object_provider"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductCatalogProductProviderAsPatch(patch["object_provider"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "object_provider")
 	}
 	path = "metadata"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["metadata"] = nil
 	} else if exists && patch["metadata"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataAsPatch(patch["metadata"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataAsPatch(patch["metadata"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "metadata")
 	}
 
 	return patch
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.rc_compatible"
+	path = rootPath + ".rc_compatible"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["rc_compatible"] = nil
+	} else if !exists {
+		delete(patch, "rc_compatible")
 	}
-	path = "metadata.0.ui"
+	path = rootPath + ".ui"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["ui"] = nil
 	} else if exists && patch["ui"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIAsPatch(patch["ui"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIAsPatch(patch["ui"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "ui")
 	}
-	path = "metadata.0.service"
+	path = rootPath + ".service"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["service"] = nil
 	} else if exists && patch["service"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceAsPatch(patch["service"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataServiceAsPatch(patch["service"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "service")
 	}
-	path = "metadata.0.other"
+	path = rootPath + ".other"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["other"] = nil
 	} else if exists && patch["other"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherAsPatch(patch["other"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherAsPatch(patch["other"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "other")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.other.0.pc"
+	path = rootPath + ".pc"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["pc"] = nil
 	} else if exists && patch["pc"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherPCAsPatch(patch["pc"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherPCAsPatch(patch["pc"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "pc")
 	}
-	path = "metadata.0.other.0.composite"
+	path = rootPath + ".composite"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["composite"] = nil
 	} else if exists && patch["composite"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherCompositeAsPatch(patch["composite"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherCompositeAsPatch(patch["composite"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "composite")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherCompositeAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherCompositeAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.other.0.composite.0.composite_kind"
+	path = rootPath + ".composite_kind"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["composite_kind"] = nil
+	} else if !exists {
+		delete(patch, "composite_kind")
 	}
-	path = "metadata.0.other.0.composite.0.composite_tag"
+	path = rootPath + ".composite_tag"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["composite_tag"] = nil
+	} else if !exists {
+		delete(patch, "composite_tag")
 	}
-	path = "metadata.0.other.0.composite.0.children"
+	path = rootPath + ".children"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["children"] = nil
 	} else if exists && patch["children"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherCompositeChildAsPatch(patch["children"].([]map[string]interface{})[0], d)
+		childrenList := patch["children"].([]map[string]interface{})
+		for i, childrenItem := range childrenList {
+			ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherCompositeChildAsPatch(childrenItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "children")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherCompositeChildAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherCompositeChildAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.other.0.composite.0.children.0.kind"
+	path = rootPath + ".kind"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["kind"] = nil
+	} else if !exists {
+		delete(patch, "kind")
 	}
-	path = "metadata.0.other.0.composite.0.children.0.name"
+	path = rootPath + ".name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["name"] = nil
+	} else if !exists {
+		delete(patch, "name")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherPCAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherPCAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.other.0.pc.0.support"
+	path = rootPath + ".support"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["support"] = nil
 	} else if exists && patch["support"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherPCSupportAsPatch(patch["support"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherPCSupportAsPatch(patch["support"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "support")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherPCSupportAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataOtherPCSupportAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.other.0.pc.0.support.0.url"
+	path = rootPath + ".url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["url"] = nil
+	} else if !exists {
+		delete(patch, "url")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.status_url"
+	path = rootPath + ".status_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["status_url"] = nil
+	} else if !exists {
+		delete(patch, "status_url")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.locations"
+	path = rootPath + ".locations"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["locations"] = nil
+	} else if !exists {
+		delete(patch, "locations")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.languages"
+	path = rootPath + ".languages"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["languages"] = nil
+	} else if !exists {
+		delete(patch, "languages")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.process"
+	path = rootPath + ".process"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["process"] = nil
+	} else if !exists {
+		delete(patch, "process")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.process_i18n"
+	path = rootPath + ".process_i18n"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["process_i18n"] = nil
+	} else if !exists {
+		delete(patch, "process_i18n")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_type"
+	path = rootPath + ".support_type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["support_type"] = nil
+	} else if !exists {
+		delete(patch, "support_type")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_escalation"
+	path = rootPath + ".support_escalation"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["support_escalation"] = nil
 	} else if exists && patch["support_escalation"] != nil {
-		ResourceIbmOnboardingCatalogProductSupportEscalationAsPatch(patch["support_escalation"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductSupportEscalationAsPatch(patch["support_escalation"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "support_escalation")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_details"
+	path = rootPath + ".support_details"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["support_details"] = nil
 	} else if exists && patch["support_details"] != nil {
-		ResourceIbmOnboardingCatalogProductSupportDetailsItemAsPatch(patch["support_details"].([]map[string]interface{})[0], d)
+		support_detailsList := patch["support_details"].([]map[string]interface{})
+		for i, support_detailsItem := range support_detailsList {
+			ResourceIbmOnboardingCatalogProductSupportDetailsItemAsPatch(support_detailsItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "support_details")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductSupportDetailsItemAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductSupportDetailsItemAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.other.0.pc.0.support.0.support_details.0.type"
+	path = rootPath + ".type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["type"] = nil
+	} else if !exists {
+		delete(patch, "type")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_details.0.contact"
+	path = rootPath + ".contact"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["contact"] = nil
+	} else if !exists {
+		delete(patch, "contact")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_details.0.response_wait_time"
+	path = rootPath + ".response_wait_time"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["response_wait_time"] = nil
 	} else if exists && patch["response_wait_time"] != nil {
-		ResourceIbmOnboardingCatalogProductSupportTimeIntervalAsPatch(patch["response_wait_time"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductSupportTimeIntervalAsPatch(patch["response_wait_time"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "response_wait_time")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_details.0.availability"
+	path = rootPath + ".availability"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["availability"] = nil
 	} else if exists && patch["availability"] != nil {
-		ResourceIbmOnboardingCatalogProductSupportDetailsItemAvailabilityAsPatch(patch["availability"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductSupportDetailsItemAvailabilityAsPatch(patch["availability"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "availability")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductSupportDetailsItemAvailabilityAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductSupportDetailsItemAvailabilityAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.other.0.pc.0.support.0.support_details.0.availability.0.times"
+	path = rootPath + ".times"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["times"] = nil
 	} else if exists && patch["times"] != nil {
-		ResourceIbmOnboardingCatalogProductSupportDetailsItemAvailabilityTimeAsPatch(patch["times"].([]map[string]interface{})[0], d)
+		timesList := patch["times"].([]map[string]interface{})
+		for i, timesItem := range timesList {
+			ResourceIbmOnboardingCatalogProductSupportDetailsItemAvailabilityTimeAsPatch(timesItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "times")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_details.0.availability.0.timezone"
+	path = rootPath + ".timezone"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["timezone"] = nil
+	} else if !exists {
+		delete(patch, "timezone")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_details.0.availability.0.always_available"
+	path = rootPath + ".always_available"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["always_available"] = nil
+	} else if !exists {
+		delete(patch, "always_available")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductSupportDetailsItemAvailabilityTimeAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductSupportDetailsItemAvailabilityTimeAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.other.0.pc.0.support.0.support_details.0.availability.0.times.0.day"
+	path = rootPath + ".day"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["day"] = nil
+	} else if !exists {
+		delete(patch, "day")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_details.0.availability.0.times.0.start_time"
+	path = rootPath + ".start_time"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["start_time"] = nil
+	} else if !exists {
+		delete(patch, "start_time")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_details.0.availability.0.times.0.end_time"
+	path = rootPath + ".end_time"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["end_time"] = nil
+	} else if !exists {
+		delete(patch, "end_time")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductSupportEscalationAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductSupportEscalationAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.other.0.pc.0.support.0.support_escalation.0.contact"
+	path = rootPath + ".contact"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["contact"] = nil
+	} else if !exists {
+		delete(patch, "contact")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_escalation.0.escalation_wait_time"
+	path = rootPath + ".escalation_wait_time"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["escalation_wait_time"] = nil
 	} else if exists && patch["escalation_wait_time"] != nil {
-		ResourceIbmOnboardingCatalogProductSupportTimeIntervalAsPatch(patch["escalation_wait_time"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductSupportTimeIntervalAsPatch(patch["escalation_wait_time"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "escalation_wait_time")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_escalation.0.response_wait_time"
+	path = rootPath + ".response_wait_time"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["response_wait_time"] = nil
+	} else if !exists {
+		delete(patch, "response_wait_time")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductSupportTimeIntervalAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductSupportTimeIntervalAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.other.0.pc.0.support.0.support_details.0.response_wait_time.0.value"
+	path = rootPath + ".value"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["value"] = nil
+	} else if !exists {
+		delete(patch, "value")
 	}
-	path = "metadata.0.other.0.pc.0.support.0.support_details.0.response_wait_time.0.type"
+	path = rootPath + ".type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["type"] = nil
+	} else if !exists {
+		delete(patch, "type")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataServiceAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.service.0.rc_provisionable"
+	path = rootPath + ".rc_provisionable"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["rc_provisionable"] = nil
+	} else if !exists {
+		delete(patch, "rc_provisionable")
 	}
-	path = "metadata.0.service.0.iam_compatible"
+	path = rootPath + ".iam_compatible"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["iam_compatible"] = nil
+	} else if !exists {
+		delete(patch, "iam_compatible")
 	}
-	path = "metadata.0.service.0.bindable"
+	path = rootPath + ".bindable"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["bindable"] = nil
+	} else if !exists {
+		delete(patch, "bindable")
 	}
-	path = "metadata.0.service.0.plan_updateable"
+	path = rootPath + ".plan_updateable"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["plan_updateable"] = nil
+	} else if !exists {
+		delete(patch, "plan_updateable")
 	}
-	path = "metadata.0.service.0.service_key_supported"
+	path = rootPath + ".service_key_supported"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["service_key_supported"] = nil
+	} else if !exists {
+		delete(patch, "service_key_supported")
+	}
+	path = rootPath + ".unique_api_key"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["unique_api_key"] = nil
+	} else if !exists {
+		delete(patch, "unique_api_key")
+	}
+	path = rootPath + ".parameters"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["parameters"] = nil
+	} else if exists && patch["parameters"] != nil {
+		parametersList := patch["parameters"].([]map[string]interface{})
+		for i, parametersItem := range parametersList {
+			ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersAsPatch(parametersItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "parameters")
+	}
+}
+
+func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
+	var path string
+
+	path = rootPath + ".displayname"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["displayname"] = nil
+	} else if !exists {
+		delete(patch, "displayname")
+	}
+	path = rootPath + ".name"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["name"] = nil
+	} else if !exists {
+		delete(patch, "name")
+	}
+	path = rootPath + ".type"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["type"] = nil
+	} else if !exists {
+		delete(patch, "type")
+	}
+	path = rootPath + ".options"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["options"] = nil
+	} else if exists && patch["options"] != nil {
+		optionsList := patch["options"].([]map[string]interface{})
+		for i, optionsItem := range optionsList {
+			ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersOptionsAsPatch(optionsItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "options")
+	}
+	path = rootPath + ".value"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["value"] = nil
+	} else if !exists {
+		delete(patch, "value")
+	}
+	path = rootPath + ".layout"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["layout"] = nil
+	} else if !exists {
+		delete(patch, "layout")
+	}
+	path = rootPath + ".associations"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["associations"] = nil
+	} else if !exists {
+		delete(patch, "associations")
+	}
+	path = rootPath + ".validation_url"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["validation_url"] = nil
+	} else if !exists {
+		delete(patch, "validation_url")
+	}
+	path = rootPath + ".options_url"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["options_url"] = nil
+	} else if !exists {
+		delete(patch, "options_url")
+	}
+	path = rootPath + ".invalidmessage"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["invalidmessage"] = nil
+	} else if !exists {
+		delete(patch, "invalidmessage")
+	}
+	path = rootPath + ".description"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["description"] = nil
+	} else if !exists {
+		delete(patch, "description")
+	}
+	path = rootPath + ".required"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["required"] = nil
+	} else if !exists {
+		delete(patch, "required")
+	}
+	path = rootPath + ".pattern"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["pattern"] = nil
+	} else if !exists {
+		delete(patch, "pattern")
+	}
+	path = rootPath + ".placeholder"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["placeholder"] = nil
+	} else if !exists {
+		delete(patch, "placeholder")
+	}
+	path = rootPath + ".readonly"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["readonly"] = nil
+	} else if !exists {
+		delete(patch, "readonly")
+	}
+	path = rootPath + ".hidden"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["hidden"] = nil
+	} else if !exists {
+		delete(patch, "hidden")
+	}
+	path = rootPath + ".i18n"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["i18n"] = nil
+	} else if !exists {
+		delete(patch, "i18n")
+	}
+}
+
+func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersOptionsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
+	var path string
+
+	path = rootPath + ".displayname"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["displayname"] = nil
+	} else if !exists {
+		delete(patch, "displayname")
+	}
+	path = rootPath + ".value"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["value"] = nil
+	} else if !exists {
+		delete(patch, "value")
+	}
+	path = rootPath + ".i18n"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["i18n"] = nil
+	} else if exists && patch["i18n"] != nil {
+		ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nAsPatch(patch["i18n"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "i18n")
+	}
+}
+
+func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
+	var path string
+
+	path = rootPath + ".en"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["en"] = nil
+	} else if exists && patch["en"] != nil {
+		ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsAsPatch(patch["en"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "en")
+	}
+	path = rootPath + ".de"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["de"] = nil
+	} else if !exists {
+		delete(patch, "de")
+	}
+	path = rootPath + ".es"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["es"] = nil
+	} else if !exists {
+		delete(patch, "es")
+	}
+	path = rootPath + ".fr"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["fr"] = nil
+	} else if !exists {
+		delete(patch, "fr")
+	}
+	path = rootPath + ".it"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["it"] = nil
+	} else if !exists {
+		delete(patch, "it")
+	}
+	path = rootPath + ".ja"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["ja"] = nil
+	} else if !exists {
+		delete(patch, "ja")
+	}
+	path = rootPath + ".ko"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["ko"] = nil
+	} else if !exists {
+		delete(patch, "ko")
+	}
+	path = rootPath + ".pt_br"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["pt_br"] = nil
+	} else if !exists {
+		delete(patch, "pt_br")
+	}
+	path = rootPath + ".zh_tw"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["zh_tw"] = nil
+	} else if !exists {
+		delete(patch, "zh_tw")
+	}
+	path = rootPath + ".zh_cn"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["zh_cn"] = nil
+	} else if !exists {
+		delete(patch, "zh_cn")
+	}
+}
+
+func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
+	var path string
+
+	path = rootPath + ".displayname"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["displayname"] = nil
+	} else if !exists {
+		delete(patch, "displayname")
+	}
+	path = rootPath + ".description"
+	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
+		patch["description"] = nil
+	} else if !exists {
+		delete(patch, "description")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings"
+	path = rootPath + ".strings"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["strings"] = nil
 	} else if exists && patch["strings"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIStringsAsPatch(patch["strings"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIStringsAsPatch(patch["strings"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "strings")
 	}
-	path = "metadata.0.ui.0.urls"
+	path = rootPath + ".urls"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["urls"] = nil
 	} else if exists && patch["urls"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIUrlsAsPatch(patch["urls"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIUrlsAsPatch(patch["urls"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "urls")
 	}
-	path = "metadata.0.ui.0.hidden"
+	path = rootPath + ".hidden"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["hidden"] = nil
+	} else if !exists {
+		delete(patch, "hidden")
 	}
-	path = "metadata.0.ui.0.side_by_side_index"
+	path = rootPath + ".side_by_side_index"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["side_by_side_index"] = nil
+	} else if !exists {
+		delete(patch, "side_by_side_index")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIUrlsAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIUrlsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.urls.0.doc_url"
+	path = rootPath + ".doc_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["doc_url"] = nil
+	} else if !exists {
+		delete(patch, "doc_url")
 	}
-	path = "metadata.0.ui.0.urls.0.apidocs_url"
+	path = rootPath + ".apidocs_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["apidocs_url"] = nil
+	} else if !exists {
+		delete(patch, "apidocs_url")
 	}
-	path = "metadata.0.ui.0.urls.0.terms_url"
+	path = rootPath + ".terms_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["terms_url"] = nil
+	} else if !exists {
+		delete(patch, "terms_url")
 	}
-	path = "metadata.0.ui.0.urls.0.instructions_url"
+	path = rootPath + ".instructions_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["instructions_url"] = nil
+	} else if !exists {
+		delete(patch, "instructions_url")
 	}
-	path = "metadata.0.ui.0.urls.0.catalog_details_url"
+	path = rootPath + ".catalog_details_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["catalog_details_url"] = nil
+	} else if !exists {
+		delete(patch, "catalog_details_url")
 	}
-	path = "metadata.0.ui.0.urls.0.custom_create_page_url"
+	path = rootPath + ".custom_create_page_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["custom_create_page_url"] = nil
+	} else if !exists {
+		delete(patch, "custom_create_page_url")
 	}
-	path = "metadata.0.ui.0.urls.0.dashboard"
+	path = rootPath + ".dashboard"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["dashboard"] = nil
+	} else if !exists {
+		delete(patch, "dashboard")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIStringsAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIStringsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings.0.en"
+	path = rootPath + ".en"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["en"] = nil
 	} else if exists && patch["en"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIStringsContentAsPatch(patch["en"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIStringsContentAsPatch(patch["en"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "en")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIStringsContentAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIStringsContentAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings.0.en.0.bullets"
+	path = rootPath + ".bullets"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["bullets"] = nil
 	} else if exists && patch["bullets"] != nil {
-		ResourceIbmOnboardingCatalogProductCatalogHighlightItemAsPatch(patch["bullets"].([]map[string]interface{})[0], d)
+		bulletsList := patch["bullets"].([]map[string]interface{})
+		for i, bulletsItem := range bulletsList {
+			ResourceIbmOnboardingCatalogProductCatalogHighlightItemAsPatch(bulletsItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "bullets")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.media"
+	path = rootPath + ".media"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["media"] = nil
 	} else if exists && patch["media"] != nil {
-		ResourceIbmOnboardingCatalogProductCatalogProductMediaItemAsPatch(patch["media"].([]map[string]interface{})[0], d)
+		mediaList := patch["media"].([]map[string]interface{})
+		for i, mediaItem := range mediaList {
+			ResourceIbmOnboardingCatalogProductCatalogProductMediaItemAsPatch(mediaItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "media")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.embeddable_dashboard"
+	path = rootPath + ".embeddable_dashboard"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["embeddable_dashboard"] = nil
+	} else if !exists {
+		delete(patch, "embeddable_dashboard")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductCatalogProductMediaItemAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductCatalogProductMediaItemAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings.0.en.0.media.0.caption_i18n"
+	path = rootPath + ".caption_i18n"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["caption_i18n"] = nil
+	} else if !exists {
+		delete(patch, "caption_i18n")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.media.0.thumbnail"
+	path = rootPath + ".thumbnail"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["thumbnail"] = nil
+	} else if !exists {
+		delete(patch, "thumbnail")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductCatalogHighlightItemAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductCatalogHighlightItemAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "metadata.0.ui.0.strings.0.en.0.bullets.0.description"
+	path = rootPath + ".description"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["description"] = nil
+	} else if !exists {
+		delete(patch, "description")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.bullets.0.description_i18n"
+	path = rootPath + ".description_i18n"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["description_i18n"] = nil
+	} else if !exists {
+		delete(patch, "description_i18n")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.bullets.0.title"
+	path = rootPath + ".title"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["title"] = nil
+	} else if !exists {
+		delete(patch, "title")
 	}
-	path = "metadata.0.ui.0.strings.0.en.0.bullets.0.title_i18n"
+	path = rootPath + ".title_i18n"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["title_i18n"] = nil
+	} else if !exists {
+		delete(patch, "title_i18n")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductCatalogProductProviderAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductCatalogProductProviderAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "object_provider.0.name"
+	path = rootPath + ".name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["name"] = nil
+	} else if !exists {
+		delete(patch, "name")
 	}
-	path = "object_provider.0.email"
+	path = rootPath + ".email"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["email"] = nil
+	} else if !exists {
+		delete(patch, "email")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogProductImagesAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogProductImagesAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "images.0.image"
+	path = rootPath + ".image"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["image"] = nil
+	} else if !exists {
+		delete(patch, "image")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogOverviewUIAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogOverviewUIAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "overview_ui.0.en"
+	path = rootPath + ".en"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["en"] = nil
 	} else if exists && patch["en"] != nil {
-		ResourceIbmOnboardingCatalogProductGlobalCatalogOverviewUITranslatedContentAsPatch(patch["en"].(map[string]interface{}), d)
+		ResourceIbmOnboardingCatalogProductGlobalCatalogOverviewUITranslatedContentAsPatch(patch["en"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "en")
 	}
 }
 
-func ResourceIbmOnboardingCatalogProductGlobalCatalogOverviewUITranslatedContentAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingCatalogProductGlobalCatalogOverviewUITranslatedContentAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "overview_ui.0.en.0.display_name"
+	path = rootPath + ".display_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["display_name"] = nil
+	} else if !exists {
+		delete(patch, "display_name")
 	}
-	path = "overview_ui.0.en.0.description"
+	path = rootPath + ".description"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["description"] = nil
+	} else if !exists {
+		delete(patch, "description")
 	}
-	path = "overview_ui.0.en.0.long_description"
+	path = rootPath + ".long_description"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["long_description"] = nil
+	} else if !exists {
+		delete(patch, "long_description")
 	}
 }
diff --git a/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_product_test.go b/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_product_test.go
index f789698d188..0675230564a 100644
--- a/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_product_test.go
+++ b/ibm/service/partnercentersell/resource_ibm_onboarding_catalog_product_test.go
@@ -180,7 +180,7 @@ func testAccCheckIbmOnboardingCatalogProductConfigBasic(productID string, name s
 			}
 			metadata {
 				rc_compatible = false
-			}
+		}
 		}
 	`, productID, name, active, disabled, kind, objectId)
 }
@@ -195,7 +195,6 @@ func testAccCheckIbmOnboardingCatalogProductConfig(productID string, env string,
 			active = %s
 			disabled = %s
 			kind = "%s"
-			object_id = "%s"
 			overview_ui {
 				en {
 					display_name = "%s"
@@ -209,27 +208,31 @@ func testAccCheckIbmOnboardingCatalogProductConfig(productID string, env string,
 			}
 			object_provider {
 				name = "name"
-				email = "email@email.com"
+				email = "email"
 			}
 			metadata {
 				rc_compatible = "%s"
 				ui {
-				    strings {
-                		en {
-                    		bullets {
+					strings {
+						en {
+							bullets {
                         		title = "%s"
                         		description = "some1"
-                    		}
+							}
 							media {
                         		type = "youtube"
                         		url = "https://www.youtube.com/embed/HtkpMgNFYtE"
                         		caption = "%s"
                     		}
-                		}
-            		}
+						}
+					}
 					urls {
 						doc_url = "doc_url"
 						terms_url = "terms_url"
+						instructions_url = "instructions_url"
+						catalog_details_url = "catalog_details_url"
+						custom_create_page_url = "custom_create_page_url"
+						dashboard = "dashboard"
 					}
 					hidden = true
 					side_by_side_index = 1.0
@@ -237,6 +240,13 @@ func testAccCheckIbmOnboardingCatalogProductConfig(productID string, env string,
 				service {
 					rc_provisionable = true
 					iam_compatible = false
+					parameters {
+                		displayname = "test"
+                		name = "test"
+                		type = "text"
+                		value = ["test"]
+                		description = "test"
+            		}
 				}
 				other {
 				    composite {
@@ -282,7 +292,7 @@ func testAccCheckIbmOnboardingCatalogProductConfig(productID string, env string,
 										day = "%s"
 										start_time = "start_time"
 										end_time = "end_time"
-									}
+								}
 									times {
 										day = "2.0"
 										start_time = "start_time"
@@ -301,7 +311,7 @@ func testAccCheckIbmOnboardingCatalogProductConfig(productID string, env string,
 								}
 								availability {
 									times {
-										day = "1.0"
+										day = "%s"
 										start_time = "start_time"
 										end_time = "end_time"
 									}
@@ -329,9 +339,9 @@ func testAccCheckIbmOnboardingCatalogProductUpdateConfig(productID string, env s
 			kind = "%s"
 			object_id = "%s"
 			overview_ui {
-				en {
+							en {
 					display_name = "%s"
-					description = "description"
+								description = "description"
 					long_description = "long_description"
 				}
 			}
@@ -342,7 +352,7 @@ func testAccCheckIbmOnboardingCatalogProductUpdateConfig(productID string, env s
 			object_provider {
 				name = "name"
 				email = "email@email.com"
-			}
+							}
 			metadata {
 				rc_compatible = "%s"
 				ui {
@@ -351,30 +361,30 @@ func testAccCheckIbmOnboardingCatalogProductUpdateConfig(productID string, env s
                     		bullets {
                         		title = "%s"
                         		description = "some1"
-                    		}
+							}
 							bullets {
                         		title = "newBullet"
                         		description = "some1"
-                    		}
+							}
 							media {
                         		type = "youtube"
                         		url = "https://www.youtube.com/embed/HtkpMgNFYtE"
                         		caption = "%s"
-                    		}
+							}
 							media {
                         		type = "youtube"
                         		url = "https://www.youtube.com/embed/HtkpMgNFYtE"
                         		caption = "newMedia"
-                    		}
-                		}
-            		}
+							}
+							}
+							}
 					urls {
 						doc_url = "doc_url"
 						terms_url = "terms_url"
-					}
+						}
 					hidden = true
 					side_by_side_index = 1.0
-				}
+					}
 				service {
 					rc_provisionable = true
 					iam_compatible = false
@@ -616,12 +626,54 @@ func TestResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataToMap(t
 		globalCatalogMetadataUiModel["hidden"] = true
 		globalCatalogMetadataUiModel["side_by_side_index"] = float64(72.5)
 
-		globalCatalogMetadataServiceModel := make(map[string]interface{})
-		globalCatalogMetadataServiceModel["rc_provisionable"] = true
-		globalCatalogMetadataServiceModel["iam_compatible"] = true
-		globalCatalogMetadataServiceModel["bindable"] = true
-		globalCatalogMetadataServiceModel["plan_updateable"] = true
-		globalCatalogMetadataServiceModel["service_key_supported"] = true
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+		globalCatalogMetadataServiceCustomParametersOptionsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersOptionsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersOptionsModel["value"] = "testString"
+		globalCatalogMetadataServiceCustomParametersOptionsModel["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+		globalCatalogMetadataServiceCustomParametersModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["name"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["type"] = "text"
+		globalCatalogMetadataServiceCustomParametersModel["options"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersOptionsModel}
+		globalCatalogMetadataServiceCustomParametersModel["value"] = []string{"testString"}
+		globalCatalogMetadataServiceCustomParametersModel["layout"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["associations"] = map[string]interface{}{"anyKey": "anyValue"}
+		globalCatalogMetadataServiceCustomParametersModel["validation_url"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["options_url"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["invalidmessage"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["description"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["required"] = true
+		globalCatalogMetadataServiceCustomParametersModel["pattern"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["placeholder"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["readonly"] = true
+		globalCatalogMetadataServiceCustomParametersModel["hidden"] = true
+		globalCatalogMetadataServiceCustomParametersModel["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+		globalCatalogProductMetadataServiceModel := make(map[string]interface{})
+		globalCatalogProductMetadataServiceModel["rc_provisionable"] = true
+		globalCatalogProductMetadataServiceModel["iam_compatible"] = true
+		globalCatalogProductMetadataServiceModel["bindable"] = true
+		globalCatalogProductMetadataServiceModel["plan_updateable"] = true
+		globalCatalogProductMetadataServiceModel["service_key_supported"] = true
+		globalCatalogProductMetadataServiceModel["unique_api_key"] = true
+		globalCatalogProductMetadataServiceModel["parameters"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersModel}
 
 		supportTimeIntervalModel := make(map[string]interface{})
 		supportTimeIntervalModel["value"] = float64(72.5)
@@ -678,7 +730,7 @@ func TestResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataToMap(t
 		model := make(map[string]interface{})
 		model["rc_compatible"] = true
 		model["ui"] = []map[string]interface{}{globalCatalogMetadataUiModel}
-		model["service"] = []map[string]interface{}{globalCatalogMetadataServiceModel}
+		model["service"] = []map[string]interface{}{globalCatalogProductMetadataServiceModel}
 		model["other"] = []map[string]interface{}{globalCatalogProductMetadataOtherModel}
 
 		assert.Equal(t, result, model)
@@ -720,12 +772,54 @@ func TestResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataToMap(t
 	globalCatalogMetadataUiModel.Hidden = core.BoolPtr(true)
 	globalCatalogMetadataUiModel.SideBySideIndex = core.Float64Ptr(float64(72.5))
 
-	globalCatalogMetadataServiceModel := new(partnercentersellv1.GlobalCatalogMetadataService)
-	globalCatalogMetadataServiceModel.RcProvisionable = core.BoolPtr(true)
-	globalCatalogMetadataServiceModel.IamCompatible = core.BoolPtr(true)
-	globalCatalogMetadataServiceModel.Bindable = core.BoolPtr(true)
-	globalCatalogMetadataServiceModel.PlanUpdateable = core.BoolPtr(true)
-	globalCatalogMetadataServiceModel.ServiceKeySupported = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+	globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+	globalCatalogMetadataServiceCustomParametersOptionsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+	globalCatalogMetadataServiceCustomParametersOptionsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersOptionsModel.Value = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersOptionsModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	globalCatalogMetadataServiceCustomParametersModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters)
+	globalCatalogMetadataServiceCustomParametersModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Name = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Type = core.StringPtr("text")
+	globalCatalogMetadataServiceCustomParametersModel.Options = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{*globalCatalogMetadataServiceCustomParametersOptionsModel}
+	globalCatalogMetadataServiceCustomParametersModel.Value = []string{"testString"}
+	globalCatalogMetadataServiceCustomParametersModel.Layout = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Associations = map[string]interface{}{"anyKey": "anyValue"}
+	globalCatalogMetadataServiceCustomParametersModel.ValidationURL = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.OptionsURL = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Invalidmessage = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Description = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Required = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersModel.Pattern = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Placeholder = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Readonly = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersModel.Hidden = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	globalCatalogProductMetadataServiceModel := new(partnercentersellv1.GlobalCatalogProductMetadataService)
+	globalCatalogProductMetadataServiceModel.RcProvisionable = core.BoolPtr(true)
+	globalCatalogProductMetadataServiceModel.IamCompatible = core.BoolPtr(true)
+	globalCatalogProductMetadataServiceModel.Bindable = core.BoolPtr(true)
+	globalCatalogProductMetadataServiceModel.PlanUpdateable = core.BoolPtr(true)
+	globalCatalogProductMetadataServiceModel.ServiceKeySupported = core.BoolPtr(true)
+	globalCatalogProductMetadataServiceModel.UniqueApiKey = core.BoolPtr(true)
+	globalCatalogProductMetadataServiceModel.Parameters = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters{*globalCatalogMetadataServiceCustomParametersModel}
 
 	supportTimeIntervalModel := new(partnercentersellv1.SupportTimeInterval)
 	supportTimeIntervalModel.Value = core.Float64Ptr(float64(72.5))
@@ -782,7 +876,7 @@ func TestResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataToMap(t
 	model := new(partnercentersellv1.GlobalCatalogProductMetadata)
 	model.RcCompatible = core.BoolPtr(true)
 	model.Ui = globalCatalogMetadataUiModel
-	model.Service = globalCatalogMetadataServiceModel
+	model.Service = globalCatalogProductMetadataServiceModel
 	model.Other = globalCatalogProductMetadataOtherModel
 
 	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataToMap(model)
@@ -1044,26 +1138,312 @@ func TestResourceIbmOnboardingCatalogProductGlobalCatalogMetadataUIUrlsToMap(t *
 	checkResult(result)
 }
 
-func TestResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceToMap(t *testing.T) {
+func TestResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataServiceToMap(t *testing.T) {
 	checkResult := func(result map[string]interface{}) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+		globalCatalogMetadataServiceCustomParametersOptionsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersOptionsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersOptionsModel["value"] = "testString"
+		globalCatalogMetadataServiceCustomParametersOptionsModel["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+		globalCatalogMetadataServiceCustomParametersModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["name"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["type"] = "text"
+		globalCatalogMetadataServiceCustomParametersModel["options"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersOptionsModel}
+		globalCatalogMetadataServiceCustomParametersModel["value"] = []string{"testString"}
+		globalCatalogMetadataServiceCustomParametersModel["layout"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["associations"] = map[string]interface{}{"anyKey": "anyValue"}
+		globalCatalogMetadataServiceCustomParametersModel["validation_url"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["options_url"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["invalidmessage"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["description"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["required"] = true
+		globalCatalogMetadataServiceCustomParametersModel["pattern"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["placeholder"] = "testString"
+		globalCatalogMetadataServiceCustomParametersModel["readonly"] = true
+		globalCatalogMetadataServiceCustomParametersModel["hidden"] = true
+		globalCatalogMetadataServiceCustomParametersModel["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
 		model := make(map[string]interface{})
 		model["rc_provisionable"] = true
 		model["iam_compatible"] = true
 		model["bindable"] = true
 		model["plan_updateable"] = true
 		model["service_key_supported"] = true
+		model["unique_api_key"] = true
+		model["parameters"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersModel}
 
 		assert.Equal(t, result, model)
 	}
 
-	model := new(partnercentersellv1.GlobalCatalogMetadataService)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+	globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+	globalCatalogMetadataServiceCustomParametersOptionsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+	globalCatalogMetadataServiceCustomParametersOptionsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersOptionsModel.Value = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersOptionsModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	globalCatalogMetadataServiceCustomParametersModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters)
+	globalCatalogMetadataServiceCustomParametersModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Name = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Type = core.StringPtr("text")
+	globalCatalogMetadataServiceCustomParametersModel.Options = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{*globalCatalogMetadataServiceCustomParametersOptionsModel}
+	globalCatalogMetadataServiceCustomParametersModel.Value = []string{"testString"}
+	globalCatalogMetadataServiceCustomParametersModel.Layout = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Associations = map[string]interface{}{"anyKey": "anyValue"}
+	globalCatalogMetadataServiceCustomParametersModel.ValidationURL = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.OptionsURL = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Invalidmessage = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Description = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Required = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersModel.Pattern = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Placeholder = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersModel.Readonly = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersModel.Hidden = core.BoolPtr(true)
+	globalCatalogMetadataServiceCustomParametersModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	model := new(partnercentersellv1.GlobalCatalogProductMetadataService)
 	model.RcProvisionable = core.BoolPtr(true)
 	model.IamCompatible = core.BoolPtr(true)
 	model.Bindable = core.BoolPtr(true)
 	model.PlanUpdateable = core.BoolPtr(true)
 	model.ServiceKeySupported = core.BoolPtr(true)
+	model.UniqueApiKey = core.BoolPtr(true)
+	model.Parameters = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters{*globalCatalogMetadataServiceCustomParametersModel}
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductGlobalCatalogProductMetadataServiceToMap(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersToMap(t *testing.T) {
+	checkResult := func(result map[string]interface{}) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+		globalCatalogMetadataServiceCustomParametersOptionsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersOptionsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersOptionsModel["value"] = "testString"
+		globalCatalogMetadataServiceCustomParametersOptionsModel["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+		model := make(map[string]interface{})
+		model["displayname"] = "testString"
+		model["name"] = "testString"
+		model["type"] = "text"
+		model["options"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersOptionsModel}
+		model["value"] = []string{"testString"}
+		model["layout"] = "testString"
+		model["associations"] = map[string]interface{}{"anyKey": "anyValue"}
+		model["validation_url"] = "testString"
+		model["options_url"] = "testString"
+		model["invalidmessage"] = "testString"
+		model["description"] = "testString"
+		model["required"] = true
+		model["pattern"] = "testString"
+		model["placeholder"] = "testString"
+		model["readonly"] = true
+		model["hidden"] = true
+		model["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+		assert.Equal(t, result, model)
+	}
+
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+	globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+	globalCatalogMetadataServiceCustomParametersOptionsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+	globalCatalogMetadataServiceCustomParametersOptionsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersOptionsModel.Value = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersOptionsModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters)
+	model.Displayname = core.StringPtr("testString")
+	model.Name = core.StringPtr("testString")
+	model.Type = core.StringPtr("text")
+	model.Options = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{*globalCatalogMetadataServiceCustomParametersOptionsModel}
+	model.Value = []string{"testString"}
+	model.Layout = core.StringPtr("testString")
+	model.Associations = map[string]interface{}{"anyKey": "anyValue"}
+	model.ValidationURL = core.StringPtr("testString")
+	model.OptionsURL = core.StringPtr("testString")
+	model.Invalidmessage = core.StringPtr("testString")
+	model.Description = core.StringPtr("testString")
+	model.Required = core.BoolPtr(true)
+	model.Pattern = core.StringPtr("testString")
+	model.Placeholder = core.StringPtr("testString")
+	model.Readonly = core.BoolPtr(true)
+	model.Hidden = core.BoolPtr(true)
+	model.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersToMap(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersOptionsToMap(t *testing.T) {
+	checkResult := func(result map[string]interface{}) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
 
-	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceToMap(model)
+		model := make(map[string]interface{})
+		model["displayname"] = "testString"
+		model["value"] = "testString"
+		model["i18n"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+		assert.Equal(t, result, model)
+	}
+
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+	globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+	model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+	model.Displayname = core.StringPtr("testString")
+	model.Value = core.StringPtr("testString")
+	model.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersOptionsToMap(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nToMap(t *testing.T) {
+	checkResult := func(result map[string]interface{}) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+		model := make(map[string]interface{})
+		model["en"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["de"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["es"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["fr"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["it"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["ja"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["ko"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["pt_br"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["zh_tw"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+		model["zh_cn"] = []map[string]interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+		assert.Equal(t, result, model)
+	}
+
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+	model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+	model.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+	model.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nToMap(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(t *testing.T) {
+	checkResult := func(result map[string]interface{}) {
+		model := make(map[string]interface{})
+		model["displayname"] = "testString"
+		model["description"] = "testString"
+
+		assert.Equal(t, result, model)
+	}
+
+	model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+	model.Displayname = core.StringPtr("testString")
+	model.Description = core.StringPtr("testString")
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductGlobalCatalogMetadataServiceCustomParametersI18nFieldsToMap(model)
 	assert.Nil(t, err)
 	checkResult(result)
 }
@@ -1662,12 +2042,54 @@ func TestResourceIbmOnboardingCatalogProductMapToGlobalCatalogProductMetadata(t
 		globalCatalogMetadataUiModel.Hidden = core.BoolPtr(true)
 		globalCatalogMetadataUiModel.SideBySideIndex = core.Float64Ptr(float64(72.5))
 
-		globalCatalogMetadataServiceModel := new(partnercentersellv1.GlobalCatalogMetadataService)
-		globalCatalogMetadataServiceModel.RcProvisionable = core.BoolPtr(true)
-		globalCatalogMetadataServiceModel.IamCompatible = core.BoolPtr(true)
-		globalCatalogMetadataServiceModel.Bindable = core.BoolPtr(true)
-		globalCatalogMetadataServiceModel.PlanUpdateable = core.BoolPtr(true)
-		globalCatalogMetadataServiceModel.ServiceKeySupported = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+		globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+		globalCatalogMetadataServiceCustomParametersOptionsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+		globalCatalogMetadataServiceCustomParametersOptionsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersOptionsModel.Value = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersOptionsModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		globalCatalogMetadataServiceCustomParametersModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters)
+		globalCatalogMetadataServiceCustomParametersModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Name = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Type = core.StringPtr("text")
+		globalCatalogMetadataServiceCustomParametersModel.Options = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{*globalCatalogMetadataServiceCustomParametersOptionsModel}
+		globalCatalogMetadataServiceCustomParametersModel.Value = []string{"testString"}
+		globalCatalogMetadataServiceCustomParametersModel.Layout = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Associations = map[string]interface{}{"anyKey": "anyValue"}
+		globalCatalogMetadataServiceCustomParametersModel.ValidationURL = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.OptionsURL = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Invalidmessage = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Description = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Required = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersModel.Pattern = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Placeholder = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Readonly = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersModel.Hidden = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		globalCatalogProductMetadataServiceModel := new(partnercentersellv1.GlobalCatalogProductMetadataService)
+		globalCatalogProductMetadataServiceModel.RcProvisionable = core.BoolPtr(true)
+		globalCatalogProductMetadataServiceModel.IamCompatible = core.BoolPtr(true)
+		globalCatalogProductMetadataServiceModel.Bindable = core.BoolPtr(true)
+		globalCatalogProductMetadataServiceModel.PlanUpdateable = core.BoolPtr(true)
+		globalCatalogProductMetadataServiceModel.ServiceKeySupported = core.BoolPtr(true)
+		globalCatalogProductMetadataServiceModel.UniqueApiKey = core.BoolPtr(true)
+		globalCatalogProductMetadataServiceModel.Parameters = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters{*globalCatalogMetadataServiceCustomParametersModel}
 
 		supportTimeIntervalModel := new(partnercentersellv1.SupportTimeInterval)
 		supportTimeIntervalModel.Value = core.Float64Ptr(float64(72.5))
@@ -1724,7 +2146,7 @@ func TestResourceIbmOnboardingCatalogProductMapToGlobalCatalogProductMetadata(t
 		model := new(partnercentersellv1.GlobalCatalogProductMetadata)
 		model.RcCompatible = core.BoolPtr(true)
 		model.Ui = globalCatalogMetadataUiModel
-		model.Service = globalCatalogMetadataServiceModel
+		model.Service = globalCatalogProductMetadataServiceModel
 		model.Other = globalCatalogProductMetadataOtherModel
 
 		assert.Equal(t, result, model)
@@ -1766,12 +2188,54 @@ func TestResourceIbmOnboardingCatalogProductMapToGlobalCatalogProductMetadata(t
 	globalCatalogMetadataUiModel["hidden"] = true
 	globalCatalogMetadataUiModel["side_by_side_index"] = float64(72.5)
 
-	globalCatalogMetadataServiceModel := make(map[string]interface{})
-	globalCatalogMetadataServiceModel["rc_provisionable"] = true
-	globalCatalogMetadataServiceModel["iam_compatible"] = true
-	globalCatalogMetadataServiceModel["bindable"] = true
-	globalCatalogMetadataServiceModel["plan_updateable"] = true
-	globalCatalogMetadataServiceModel["service_key_supported"] = true
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+	globalCatalogMetadataServiceCustomParametersOptionsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersOptionsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersOptionsModel["value"] = "testString"
+	globalCatalogMetadataServiceCustomParametersOptionsModel["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+	globalCatalogMetadataServiceCustomParametersModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["name"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["type"] = "text"
+	globalCatalogMetadataServiceCustomParametersModel["options"] = []interface{}{globalCatalogMetadataServiceCustomParametersOptionsModel}
+	globalCatalogMetadataServiceCustomParametersModel["value"] = []interface{}{"testString"}
+	globalCatalogMetadataServiceCustomParametersModel["layout"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["associations"] = map[string]interface{}{"anyKey": "anyValue"}
+	globalCatalogMetadataServiceCustomParametersModel["validation_url"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["options_url"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["invalidmessage"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["description"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["required"] = true
+	globalCatalogMetadataServiceCustomParametersModel["pattern"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["placeholder"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["readonly"] = true
+	globalCatalogMetadataServiceCustomParametersModel["hidden"] = true
+	globalCatalogMetadataServiceCustomParametersModel["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+	globalCatalogProductMetadataServiceModel := make(map[string]interface{})
+	globalCatalogProductMetadataServiceModel["rc_provisionable"] = true
+	globalCatalogProductMetadataServiceModel["iam_compatible"] = true
+	globalCatalogProductMetadataServiceModel["bindable"] = true
+	globalCatalogProductMetadataServiceModel["plan_updateable"] = true
+	globalCatalogProductMetadataServiceModel["service_key_supported"] = true
+	globalCatalogProductMetadataServiceModel["unique_api_key"] = true
+	globalCatalogProductMetadataServiceModel["parameters"] = []interface{}{globalCatalogMetadataServiceCustomParametersModel}
 
 	supportTimeIntervalModel := make(map[string]interface{})
 	supportTimeIntervalModel["value"] = float64(72.5)
@@ -1828,7 +2292,7 @@ func TestResourceIbmOnboardingCatalogProductMapToGlobalCatalogProductMetadata(t
 	model := make(map[string]interface{})
 	model["rc_compatible"] = true
 	model["ui"] = []interface{}{globalCatalogMetadataUiModel}
-	model["service"] = []interface{}{globalCatalogMetadataServiceModel}
+	model["service"] = []interface{}{globalCatalogProductMetadataServiceModel}
 	model["other"] = []interface{}{globalCatalogProductMetadataOtherModel}
 
 	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductMapToGlobalCatalogProductMetadata(model)
@@ -2090,26 +2554,312 @@ func TestResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataUIUrls(t *
 	checkResult(result)
 }
 
-func TestResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataService(t *testing.T) {
-	checkResult := func(result *partnercentersellv1.GlobalCatalogMetadataService) {
-		model := new(partnercentersellv1.GlobalCatalogMetadataService)
+func TestResourceIbmOnboardingCatalogProductMapToGlobalCatalogProductMetadataService(t *testing.T) {
+	checkResult := func(result *partnercentersellv1.GlobalCatalogProductMetadataService) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+		globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+		globalCatalogMetadataServiceCustomParametersOptionsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+		globalCatalogMetadataServiceCustomParametersOptionsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersOptionsModel.Value = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersOptionsModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		globalCatalogMetadataServiceCustomParametersModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters)
+		globalCatalogMetadataServiceCustomParametersModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Name = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Type = core.StringPtr("text")
+		globalCatalogMetadataServiceCustomParametersModel.Options = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{*globalCatalogMetadataServiceCustomParametersOptionsModel}
+		globalCatalogMetadataServiceCustomParametersModel.Value = []string{"testString"}
+		globalCatalogMetadataServiceCustomParametersModel.Layout = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Associations = map[string]interface{}{"anyKey": "anyValue"}
+		globalCatalogMetadataServiceCustomParametersModel.ValidationURL = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.OptionsURL = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Invalidmessage = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Description = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Required = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersModel.Pattern = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Placeholder = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersModel.Readonly = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersModel.Hidden = core.BoolPtr(true)
+		globalCatalogMetadataServiceCustomParametersModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		model := new(partnercentersellv1.GlobalCatalogProductMetadataService)
 		model.RcProvisionable = core.BoolPtr(true)
 		model.IamCompatible = core.BoolPtr(true)
 		model.Bindable = core.BoolPtr(true)
 		model.PlanUpdateable = core.BoolPtr(true)
 		model.ServiceKeySupported = core.BoolPtr(true)
+		model.UniqueApiKey = core.BoolPtr(true)
+		model.Parameters = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters{*globalCatalogMetadataServiceCustomParametersModel}
 
 		assert.Equal(t, result, model)
 	}
 
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+	globalCatalogMetadataServiceCustomParametersOptionsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersOptionsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersOptionsModel["value"] = "testString"
+	globalCatalogMetadataServiceCustomParametersOptionsModel["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+	globalCatalogMetadataServiceCustomParametersModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["name"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["type"] = "text"
+	globalCatalogMetadataServiceCustomParametersModel["options"] = []interface{}{globalCatalogMetadataServiceCustomParametersOptionsModel}
+	globalCatalogMetadataServiceCustomParametersModel["value"] = []interface{}{"testString"}
+	globalCatalogMetadataServiceCustomParametersModel["layout"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["associations"] = map[string]interface{}{"anyKey": "anyValue"}
+	globalCatalogMetadataServiceCustomParametersModel["validation_url"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["options_url"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["invalidmessage"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["description"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["required"] = true
+	globalCatalogMetadataServiceCustomParametersModel["pattern"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["placeholder"] = "testString"
+	globalCatalogMetadataServiceCustomParametersModel["readonly"] = true
+	globalCatalogMetadataServiceCustomParametersModel["hidden"] = true
+	globalCatalogMetadataServiceCustomParametersModel["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
 	model := make(map[string]interface{})
 	model["rc_provisionable"] = true
 	model["iam_compatible"] = true
 	model["bindable"] = true
 	model["plan_updateable"] = true
 	model["service_key_supported"] = true
+	model["unique_api_key"] = true
+	model["parameters"] = []interface{}{globalCatalogMetadataServiceCustomParametersModel}
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductMapToGlobalCatalogProductMetadataService(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParameters(t *testing.T) {
+	checkResult := func(result *partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+		globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+		globalCatalogMetadataServiceCustomParametersOptionsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+		globalCatalogMetadataServiceCustomParametersOptionsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersOptionsModel.Value = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersOptionsModel.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParameters)
+		model.Displayname = core.StringPtr("testString")
+		model.Name = core.StringPtr("testString")
+		model.Type = core.StringPtr("text")
+		model.Options = []partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions{*globalCatalogMetadataServiceCustomParametersOptionsModel}
+		model.Value = []string{"testString"}
+		model.Layout = core.StringPtr("testString")
+		model.Associations = map[string]interface{}{"anyKey": "anyValue"}
+		model.ValidationURL = core.StringPtr("testString")
+		model.OptionsURL = core.StringPtr("testString")
+		model.Invalidmessage = core.StringPtr("testString")
+		model.Description = core.StringPtr("testString")
+		model.Required = core.BoolPtr(true)
+		model.Pattern = core.StringPtr("testString")
+		model.Placeholder = core.StringPtr("testString")
+		model.Readonly = core.BoolPtr(true)
+		model.Hidden = core.BoolPtr(true)
+		model.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		assert.Equal(t, result, model)
+	}
+
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+	globalCatalogMetadataServiceCustomParametersOptionsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersOptionsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersOptionsModel["value"] = "testString"
+	globalCatalogMetadataServiceCustomParametersOptionsModel["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+	model := make(map[string]interface{})
+	model["displayname"] = "testString"
+	model["name"] = "testString"
+	model["type"] = "text"
+	model["options"] = []interface{}{globalCatalogMetadataServiceCustomParametersOptionsModel}
+	model["value"] = []interface{}{"testString"}
+	model["layout"] = "testString"
+	model["associations"] = map[string]interface{}{"anyKey": "anyValue"}
+	model["validation_url"] = "testString"
+	model["options_url"] = "testString"
+	model["invalidmessage"] = "testString"
+	model["description"] = "testString"
+	model["required"] = true
+	model["pattern"] = "testString"
+	model["placeholder"] = "testString"
+	model["readonly"] = true
+	model["hidden"] = true
+	model["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParameters(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersOptions(t *testing.T) {
+	checkResult := func(result *partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+		globalCatalogMetadataServiceCustomParametersI18nModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+		globalCatalogMetadataServiceCustomParametersI18nModel.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		globalCatalogMetadataServiceCustomParametersI18nModel.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+		model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersOptions)
+		model.Displayname = core.StringPtr("testString")
+		model.Value = core.StringPtr("testString")
+		model.I18n = globalCatalogMetadataServiceCustomParametersI18nModel
+
+		assert.Equal(t, result, model)
+	}
+
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+	globalCatalogMetadataServiceCustomParametersI18nModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nModel["en"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["de"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["es"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["fr"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["it"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ja"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["ko"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["pt_br"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_tw"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	globalCatalogMetadataServiceCustomParametersI18nModel["zh_cn"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+	model := make(map[string]interface{})
+	model["displayname"] = "testString"
+	model["value"] = "testString"
+	model["i18n"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nModel}
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersOptions(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18n(t *testing.T) {
+	checkResult := func(result *partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n) {
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Displayname = core.StringPtr("testString")
+		globalCatalogMetadataServiceCustomParametersI18nFieldsModel.Description = core.StringPtr("testString")
+
+		model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18n)
+		model.En = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.De = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.Es = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.Fr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.It = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.Ja = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.Ko = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.PtBr = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.ZhTw = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+		model.ZhCn = globalCatalogMetadataServiceCustomParametersI18nFieldsModel
+
+		assert.Equal(t, result, model)
+	}
+
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel := make(map[string]interface{})
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["displayname"] = "testString"
+	globalCatalogMetadataServiceCustomParametersI18nFieldsModel["description"] = "testString"
+
+	model := make(map[string]interface{})
+	model["en"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["de"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["es"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["fr"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["it"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["ja"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["ko"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["pt_br"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["zh_tw"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+	model["zh_cn"] = []interface{}{globalCatalogMetadataServiceCustomParametersI18nFieldsModel}
+
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18n(model)
+	assert.Nil(t, err)
+	checkResult(result)
+}
+
+func TestResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(t *testing.T) {
+	checkResult := func(result *partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields) {
+		model := new(partnercentersellv1.GlobalCatalogMetadataServiceCustomParametersI18nFields)
+		model.Displayname = core.StringPtr("testString")
+		model.Description = core.StringPtr("testString")
+
+		assert.Equal(t, result, model)
+	}
+
+	model := make(map[string]interface{})
+	model["displayname"] = "testString"
+	model["description"] = "testString"
 
-	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataService(model)
+	result, err := partnercentersell.ResourceIbmOnboardingCatalogProductMapToGlobalCatalogMetadataServiceCustomParametersI18nFields(model)
 	assert.Nil(t, err)
 	checkResult(result)
 }
diff --git a/ibm/service/partnercentersell/resource_ibm_onboarding_iam_registration.go b/ibm/service/partnercentersell/resource_ibm_onboarding_iam_registration.go
index df11aba1676..c9a5e1e8c07 100644
--- a/ibm/service/partnercentersell/resource_ibm_onboarding_iam_registration.go
+++ b/ibm/service/partnercentersell/resource_ibm_onboarding_iam_registration.go
@@ -2518,538 +2518,741 @@ func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationPatchAsPatch(patc
 	path = "enabled"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["enabled"] = nil
+	} else if !exists {
+		delete(patch, "enabled")
 	}
 	path = "service_type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["service_type"] = nil
+	} else if !exists {
+		delete(patch, "service_type")
 	}
 	path = "actions"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["actions"] = nil
 	} else if exists && patch["actions"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationActionAsPatch(patch["actions"].([]map[string]interface{})[0], d)
+		actionsList := patch["actions"].([]map[string]interface{})
+		for i, actionsItem := range actionsList {
+			ResourceIbmOnboardingIamRegistrationIamServiceRegistrationActionAsPatch(actionsItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "actions")
 	}
 	path = "additional_policy_scopes"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["additional_policy_scopes"] = nil
+	} else if !exists {
+		delete(patch, "additional_policy_scopes")
 	}
 	path = "display_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["display_name"] = nil
+	} else if !exists {
+		delete(patch, "display_name")
 	}
 	path = "parent_ids"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["parent_ids"] = nil
+	} else if !exists {
+		delete(patch, "parent_ids")
 	}
 	path = "resource_hierarchy_attribute"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["resource_hierarchy_attribute"] = nil
 	} else if exists && patch["resource_hierarchy_attribute"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationResourceHierarchyAttributeAsPatch(patch["resource_hierarchy_attribute"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationResourceHierarchyAttributeAsPatch(patch["resource_hierarchy_attribute"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "resource_hierarchy_attribute")
 	}
 	path = "supported_anonymous_accesses"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["supported_anonymous_accesses"] = nil
 	} else if exists && patch["supported_anonymous_accesses"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAnonymousAccessAsPatch(patch["supported_anonymous_accesses"].([]map[string]interface{})[0], d)
+		supported_anonymous_accessesList := patch["supported_anonymous_accesses"].([]map[string]interface{})
+		for i, supported_anonymous_accessesItem := range supported_anonymous_accessesList {
+			ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAnonymousAccessAsPatch(supported_anonymous_accessesItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "supported_anonymous_accesses")
 	}
 	path = "supported_attributes"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["supported_attributes"] = nil
 	} else if exists && patch["supported_attributes"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAttributeAsPatch(patch["supported_attributes"].([]map[string]interface{})[0], d)
+		supported_attributesList := patch["supported_attributes"].([]map[string]interface{})
+		for i, supported_attributesItem := range supported_attributesList {
+			ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAttributeAsPatch(supported_attributesItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "supported_attributes")
 	}
 	path = "supported_authorization_subjects"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["supported_authorization_subjects"] = nil
 	} else if exists && patch["supported_authorization_subjects"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAuthorizationSubjectAsPatch(patch["supported_authorization_subjects"].([]map[string]interface{})[0], d)
+		supported_authorization_subjectsList := patch["supported_authorization_subjects"].([]map[string]interface{})
+		for i, supported_authorization_subjectsItem := range supported_authorization_subjectsList {
+			ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAuthorizationSubjectAsPatch(supported_authorization_subjectsItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "supported_authorization_subjects")
 	}
 	path = "supported_roles"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["supported_roles"] = nil
 	} else if exists && patch["supported_roles"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedRoleAsPatch(patch["supported_roles"].([]map[string]interface{})[0], d)
+		supported_rolesList := patch["supported_roles"].([]map[string]interface{})
+		for i, supported_rolesItem := range supported_rolesList {
+			ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedRoleAsPatch(supported_rolesItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "supported_roles")
 	}
 	path = "supported_network"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["supported_network"] = nil
 	} else if exists && patch["supported_network"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedNetworkAsPatch(patch["supported_network"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedNetworkAsPatch(patch["supported_network"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "supported_network")
 	}
 
 	return patch
 }
 
-func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedNetworkAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedNetworkAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_network.0.environment_attributes"
+	path = rootPath + ".environment_attributes"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["environment_attributes"] = nil
 	} else if exists && patch["environment_attributes"] != nil {
-		ResourceIbmOnboardingIamRegistrationEnvironmentAttributeAsPatch(patch["environment_attributes"].([]map[string]interface{})[0], d)
+		environment_attributesList := patch["environment_attributes"].([]map[string]interface{})
+		for i, environment_attributesItem := range environment_attributesList {
+			ResourceIbmOnboardingIamRegistrationEnvironmentAttributeAsPatch(environment_attributesItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "environment_attributes")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationEnvironmentAttributeAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationEnvironmentAttributeAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_network.0.environment_attributes.0.key"
+	path = rootPath + ".key"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["key"] = nil
+	} else if !exists {
+		delete(patch, "key")
 	}
-	path = "supported_network.0.environment_attributes.0.values"
+	path = rootPath + ".values"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["values"] = nil
+	} else if !exists {
+		delete(patch, "values")
 	}
-	path = "supported_network.0.environment_attributes.0.options"
+	path = rootPath + ".options"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["options"] = nil
 	} else if exists && patch["options"] != nil {
-		ResourceIbmOnboardingIamRegistrationEnvironmentAttributeOptionsAsPatch(patch["options"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationEnvironmentAttributeOptionsAsPatch(patch["options"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "options")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationEnvironmentAttributeOptionsAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationEnvironmentAttributeOptionsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_network.0.environment_attributes.0.options.0.hidden"
+	path = rootPath + ".hidden"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["hidden"] = nil
+	} else if !exists {
+		delete(patch, "hidden")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedRoleAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedRoleAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_roles.0.id"
+	path = rootPath + ".id"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["id"] = nil
+	} else if !exists {
+		delete(patch, "id")
 	}
-	path = "supported_roles.0.description"
+	path = rootPath + ".description"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["description"] = nil
 	} else if exists && patch["description"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDescriptionObjectAsPatch(patch["description"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDescriptionObjectAsPatch(patch["description"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "description")
 	}
-	path = "supported_roles.0.display_name"
+	path = rootPath + ".display_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["display_name"] = nil
 	} else if exists && patch["display_name"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDisplayNameObjectAsPatch(patch["display_name"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDisplayNameObjectAsPatch(patch["display_name"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "display_name")
 	}
-	path = "supported_roles.0.options"
+	path = rootPath + ".options"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["options"] = nil
 	} else if exists && patch["options"] != nil {
-		ResourceIbmOnboardingIamRegistrationSupportedRoleOptionsAsPatch(patch["options"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationSupportedRoleOptionsAsPatch(patch["options"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "options")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationSupportedRoleOptionsAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationSupportedRoleOptionsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_roles.0.options.0.policy_type"
+	path = rootPath + ".policy_type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["policy_type"] = nil
+	} else if !exists {
+		delete(patch, "policy_type")
 	}
-	path = "supported_roles.0.options.0.account_type"
+	path = rootPath + ".account_type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["account_type"] = nil
+	} else if !exists {
+		delete(patch, "account_type")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAuthorizationSubjectAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAuthorizationSubjectAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_authorization_subjects.0.attributes"
+	path = rootPath + ".attributes"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["attributes"] = nil
 	} else if exists && patch["attributes"] != nil {
-		ResourceIbmOnboardingIamRegistrationSupportAuthorizationSubjectAttributeAsPatch(patch["attributes"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationSupportAuthorizationSubjectAttributeAsPatch(patch["attributes"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "attributes")
 	}
-	path = "supported_authorization_subjects.0.roles"
+	path = rootPath + ".roles"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["roles"] = nil
+	} else if !exists {
+		delete(patch, "roles")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationSupportAuthorizationSubjectAttributeAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationSupportAuthorizationSubjectAttributeAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_authorization_subjects.0.attributes.0.service_name"
+	path = rootPath + ".service_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["service_name"] = nil
+	} else if !exists {
+		delete(patch, "service_name")
 	}
-	path = "supported_authorization_subjects.0.attributes.0.resource_type"
+	path = rootPath + ".resource_type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["resource_type"] = nil
+	} else if !exists {
+		delete(patch, "resource_type")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAttributeAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAttributeAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_attributes.0.key"
+	path = rootPath + ".key"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["key"] = nil
+	} else if !exists {
+		delete(patch, "key")
 	}
-	path = "supported_attributes.0.options"
+	path = rootPath + ".options"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["options"] = nil
 	} else if exists && patch["options"] != nil {
-		ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsAsPatch(patch["options"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsAsPatch(patch["options"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "options")
 	}
-	path = "supported_attributes.0.display_name"
+	path = rootPath + ".display_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["display_name"] = nil
 	} else if exists && patch["display_name"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDisplayNameObjectAsPatch(patch["display_name"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDisplayNameObjectAsPatch(patch["display_name"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "display_name")
 	}
-	path = "supported_attributes.0.description"
+	path = rootPath + ".description"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["description"] = nil
 	} else if exists && patch["description"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDescriptionObjectAsPatch(patch["description"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDescriptionObjectAsPatch(patch["description"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "description")
 	}
-	path = "supported_attributes.0.ui"
+	path = rootPath + ".ui"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["ui"] = nil
 	} else if exists && patch["ui"] != nil {
-		ResourceIbmOnboardingIamRegistrationSupportedAttributeUiAsPatch(patch["ui"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationSupportedAttributeUiAsPatch(patch["ui"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "ui")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationSupportedAttributeUiAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationSupportedAttributeUiAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_attributes.0.ui.0.input_type"
+	path = rootPath + ".input_type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["input_type"] = nil
+	} else if !exists {
+		delete(patch, "input_type")
 	}
-	path = "supported_attributes.0.ui.0.input_details"
+	path = rootPath + ".input_details"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["input_details"] = nil
 	} else if exists && patch["input_details"] != nil {
-		ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputDetailsAsPatch(patch["input_details"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputDetailsAsPatch(patch["input_details"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "input_details")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputDetailsAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputDetailsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_attributes.0.ui.0.input_details.0.type"
+	path = rootPath + ".type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["type"] = nil
+	} else if !exists {
+		delete(patch, "type")
 	}
-	path = "supported_attributes.0.ui.0.input_details.0.values"
+	path = rootPath + ".values"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["values"] = nil
 	} else if exists && patch["values"] != nil {
-		ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputValueAsPatch(patch["values"].([]map[string]interface{})[0], d)
+		valuesList := patch["values"].([]map[string]interface{})
+		for i, valuesItem := range valuesList {
+			ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputValueAsPatch(valuesItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "values")
 	}
-	path = "supported_attributes.0.ui.0.input_details.0.gst"
+	path = rootPath + ".gst"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["gst"] = nil
 	} else if exists && patch["gst"] != nil {
-		ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputGstAsPatch(patch["gst"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputGstAsPatch(patch["gst"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "gst")
 	}
-	path = "supported_attributes.0.ui.0.input_details.0.url"
+	path = rootPath + ".url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["url"] = nil
 	} else if exists && patch["url"] != nil {
-		ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputURLAsPatch(patch["url"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputURLAsPatch(patch["url"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "url")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputURLAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputURLAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_attributes.0.ui.0.input_details.0.url.0.url_endpoint"
+	path = rootPath + ".url_endpoint"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["url_endpoint"] = nil
+	} else if !exists {
+		delete(patch, "url_endpoint")
 	}
-	path = "supported_attributes.0.ui.0.input_details.0.url.0.input_option_label"
+	path = rootPath + ".input_option_label"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["input_option_label"] = nil
+	} else if !exists {
+		delete(patch, "input_option_label")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputGstAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputGstAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_attributes.0.ui.0.input_details.0.gst.0.query"
+	path = rootPath + ".query"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["query"] = nil
+	} else if !exists {
+		delete(patch, "query")
 	}
-	path = "supported_attributes.0.ui.0.input_details.0.gst.0.value_property_name"
+	path = rootPath + ".value_property_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["value_property_name"] = nil
+	} else if !exists {
+		delete(patch, "value_property_name")
 	}
-	path = "supported_attributes.0.ui.0.input_details.0.gst.0.label_property_name"
+	path = rootPath + ".label_property_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["label_property_name"] = nil
+	} else if !exists {
+		delete(patch, "label_property_name")
 	}
-	path = "supported_attributes.0.ui.0.input_details.0.gst.0.input_option_label"
+	path = rootPath + ".input_option_label"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["input_option_label"] = nil
+	} else if !exists {
+		delete(patch, "input_option_label")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputValueAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationSupportedAttributeUiInputValueAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_attributes.0.ui.0.input_details.0.values.0.value"
+	path = rootPath + ".value"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["value"] = nil
+	} else if !exists {
+		delete(patch, "value")
 	}
-	path = "supported_attributes.0.ui.0.input_details.0.values.0.display_name"
+	path = rootPath + ".display_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["display_name"] = nil
 	} else if exists && patch["display_name"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDisplayNameObjectAsPatch(patch["display_name"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDisplayNameObjectAsPatch(patch["display_name"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "display_name")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_attributes.0.options.0.operators"
+	path = rootPath + ".operators"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["operators"] = nil
+	} else if !exists {
+		delete(patch, "operators")
 	}
-	path = "supported_attributes.0.options.0.hidden"
+	path = rootPath + ".hidden"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["hidden"] = nil
+	} else if !exists {
+		delete(patch, "hidden")
 	}
-	path = "supported_attributes.0.options.0.supported_patterns"
+	path = rootPath + ".supported_patterns"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["supported_patterns"] = nil
+	} else if !exists {
+		delete(patch, "supported_patterns")
 	}
-	path = "supported_attributes.0.options.0.policy_types"
+	path = rootPath + ".policy_types"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["policy_types"] = nil
+	} else if !exists {
+		delete(patch, "policy_types")
 	}
-	path = "supported_attributes.0.options.0.is_empty_value_supported"
+	path = rootPath + ".is_empty_value_supported"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["is_empty_value_supported"] = nil
+	} else if !exists {
+		delete(patch, "is_empty_value_supported")
 	}
-	path = "supported_attributes.0.options.0.is_string_exists_false_value_supported"
+	path = rootPath + ".is_string_exists_false_value_supported"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["is_string_exists_false_value_supported"] = nil
+	} else if !exists {
+		delete(patch, "is_string_exists_false_value_supported")
 	}
-	path = "supported_attributes.0.options.0.key"
+	path = rootPath + ".key"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["key"] = nil
+	} else if !exists {
+		delete(patch, "key")
 	}
-	path = "supported_attributes.0.options.0.resource_hierarchy"
+	path = rootPath + ".resource_hierarchy"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["resource_hierarchy"] = nil
 	} else if exists && patch["resource_hierarchy"] != nil {
-		ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsResourceHierarchyAsPatch(patch["resource_hierarchy"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsResourceHierarchyAsPatch(patch["resource_hierarchy"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "resource_hierarchy")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsResourceHierarchyAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsResourceHierarchyAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_attributes.0.options.0.resource_hierarchy.0.key"
+	path = rootPath + ".key"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["key"] = nil
 	} else if exists && patch["key"] != nil {
-		ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsResourceHierarchyKeyAsPatch(patch["key"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsResourceHierarchyKeyAsPatch(patch["key"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "key")
 	}
-	path = "supported_attributes.0.options.0.resource_hierarchy.0.value"
+	path = rootPath + ".value"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["value"] = nil
 	} else if exists && patch["value"] != nil {
-		ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsResourceHierarchyValueAsPatch(patch["value"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsResourceHierarchyValueAsPatch(patch["value"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "value")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsResourceHierarchyValueAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsResourceHierarchyValueAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_attributes.0.options.0.resource_hierarchy.0.value.0.key"
+	path = rootPath + ".key"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["key"] = nil
+	} else if !exists {
+		delete(patch, "key")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsResourceHierarchyKeyAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsResourceHierarchyKeyAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_attributes.0.options.0.resource_hierarchy.0.key.0.key"
+	path = rootPath + ".key"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["key"] = nil
+	} else if !exists {
+		delete(patch, "key")
 	}
-	path = "supported_attributes.0.options.0.resource_hierarchy.0.key.0.value"
+	path = rootPath + ".value"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["value"] = nil
+	} else if !exists {
+		delete(patch, "value")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAnonymousAccessAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAnonymousAccessAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_anonymous_accesses.0.attributes"
+	path = rootPath + ".attributes"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["attributes"] = nil
+	} else if !exists {
+		delete(patch, "attributes")
 	}
-	path = "supported_anonymous_accesses.0.roles"
+	path = rootPath + ".roles"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["roles"] = nil
+	} else if !exists {
+		delete(patch, "roles")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationResourceHierarchyAttributeAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationResourceHierarchyAttributeAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "resource_hierarchy_attribute.0.key"
+	path = rootPath + ".key"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["key"] = nil
+	} else if !exists {
+		delete(patch, "key")
 	}
-	path = "resource_hierarchy_attribute.0.value"
+	path = rootPath + ".value"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["value"] = nil
+	} else if !exists {
+		delete(patch, "value")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationActionAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationActionAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "actions.0.id"
+	path = rootPath + ".id"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["id"] = nil
+	} else if !exists {
+		delete(patch, "id")
 	}
-	path = "actions.0.roles"
+	path = rootPath + ".roles"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["roles"] = nil
+	} else if !exists {
+		delete(patch, "roles")
 	}
-	path = "actions.0.description"
+	path = rootPath + ".description"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["description"] = nil
 	} else if exists && patch["description"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDescriptionObjectAsPatch(patch["description"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDescriptionObjectAsPatch(patch["description"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "description")
 	}
-	path = "actions.0.display_name"
+	path = rootPath + ".display_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["display_name"] = nil
 	} else if exists && patch["display_name"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDisplayNameObjectAsPatch(patch["display_name"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDisplayNameObjectAsPatch(patch["display_name"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "display_name")
 	}
-	path = "actions.0.options"
+	path = rootPath + ".options"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["options"] = nil
 	} else if exists && patch["options"] != nil {
-		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationActionOptionsAsPatch(patch["options"].(map[string]interface{}), d)
+		ResourceIbmOnboardingIamRegistrationIamServiceRegistrationActionOptionsAsPatch(patch["options"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "options")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationActionOptionsAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationActionOptionsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "actions.0.options.0.hidden"
+	path = rootPath + ".hidden"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["hidden"] = nil
+	} else if !exists {
+		delete(patch, "hidden")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDisplayNameObjectAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDisplayNameObjectAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_roles.0.display_name.0.default"
+	path = rootPath + ".default"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["default"] = nil
+	} else if !exists {
+		delete(patch, "default")
 	}
-	path = "supported_roles.0.display_name.0.en"
+	path = rootPath + ".en"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["en"] = nil
+	} else if !exists {
+		delete(patch, "en")
 	}
-	path = "supported_roles.0.display_name.0.de"
+	path = rootPath + ".de"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["de"] = nil
+	} else if !exists {
+		delete(patch, "de")
 	}
-	path = "supported_roles.0.display_name.0.es"
+	path = rootPath + ".es"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["es"] = nil
+	} else if !exists {
+		delete(patch, "es")
 	}
-	path = "supported_roles.0.display_name.0.fr"
+	path = rootPath + ".fr"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["fr"] = nil
+	} else if !exists {
+		delete(patch, "fr")
 	}
-	path = "supported_roles.0.display_name.0.it"
+	path = rootPath + ".it"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["it"] = nil
+	} else if !exists {
+		delete(patch, "it")
 	}
-	path = "supported_roles.0.display_name.0.ja"
+	path = rootPath + ".ja"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["ja"] = nil
+	} else if !exists {
+		delete(patch, "ja")
 	}
-	path = "supported_roles.0.display_name.0.ko"
+	path = rootPath + ".ko"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["ko"] = nil
+	} else if !exists {
+		delete(patch, "ko")
 	}
-	path = "supported_roles.0.display_name.0.pt_br"
+	path = rootPath + ".pt_br"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["pt_br"] = nil
+	} else if !exists {
+		delete(patch, "pt_br")
 	}
-	path = "supported_roles.0.display_name.0.zh_tw"
+	path = rootPath + ".zh_tw"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["zh_tw"] = nil
+	} else if !exists {
+		delete(patch, "zh_tw")
 	}
-	path = "supported_roles.0.display_name.0.zh_cn"
+	path = rootPath + ".zh_cn"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["zh_cn"] = nil
+	} else if !exists {
+		delete(patch, "zh_cn")
 	}
 }
 
-func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDescriptionObjectAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingIamRegistrationIamServiceRegistrationDescriptionObjectAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "supported_roles.0.description.0.default"
+	path = rootPath + ".default"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["default"] = nil
+	} else if !exists {
+		delete(patch, "default")
 	}
-	path = "supported_roles.0.description.0.en"
+	path = rootPath + ".en"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["en"] = nil
+	} else if !exists {
+		delete(patch, "en")
 	}
-	path = "supported_roles.0.description.0.de"
+	path = rootPath + ".de"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["de"] = nil
+	} else if !exists {
+		delete(patch, "de")
 	}
-	path = "supported_roles.0.description.0.es"
+	path = rootPath + ".es"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["es"] = nil
+	} else if !exists {
+		delete(patch, "es")
 	}
-	path = "supported_roles.0.description.0.fr"
+	path = rootPath + ".fr"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["fr"] = nil
+	} else if !exists {
+		delete(patch, "fr")
 	}
-	path = "supported_roles.0.description.0.it"
+	path = rootPath + ".it"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["it"] = nil
+	} else if !exists {
+		delete(patch, "it")
 	}
-	path = "supported_roles.0.description.0.ja"
+	path = rootPath + ".ja"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["ja"] = nil
+	} else if !exists {
+		delete(patch, "ja")
 	}
-	path = "supported_roles.0.description.0.ko"
+	path = rootPath + ".ko"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["ko"] = nil
+	} else if !exists {
+		delete(patch, "ko")
 	}
-	path = "supported_roles.0.description.0.pt_br"
+	path = rootPath + ".pt_br"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["pt_br"] = nil
+	} else if !exists {
+		delete(patch, "pt_br")
 	}
-	path = "supported_roles.0.description.0.zh_tw"
+	path = rootPath + ".zh_tw"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["zh_tw"] = nil
+	} else if !exists {
+		delete(patch, "zh_tw")
 	}
-	path = "supported_roles.0.description.0.zh_cn"
+	path = rootPath + ".zh_cn"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["zh_cn"] = nil
+	} else if !exists {
+		delete(patch, "zh_cn")
 	}
 }
diff --git a/ibm/service/partnercentersell/resource_ibm_onboarding_iam_registration_test.go b/ibm/service/partnercentersell/resource_ibm_onboarding_iam_registration_test.go
index bd3847afe0f..ec221145082 100644
--- a/ibm/service/partnercentersell/resource_ibm_onboarding_iam_registration_test.go
+++ b/ibm/service/partnercentersell/resource_ibm_onboarding_iam_registration_test.go
@@ -367,19 +367,19 @@ func testAccCheckIbmOnboardingIamRegistrationUpdateConfig(
 					zh_tw = "zh_tw"
 					zh_cn = "zh_cn"
 				}
-				display_name {
-					default = "default"
-					en = "en"
-					de = "de"
-					es = "es"
-					fr = "fr"
-					it = "it"
-					ja = "ja"
-					ko = "ko"
-					pt_br = "pt_br"
-					zh_tw = "zh_tw"
-					zh_cn = "zh_cn"
-				}
+							display_name {
+								default = "default"
+								en = "en"
+								de = "de"
+								es = "es"
+								fr = "fr"
+								it = "it"
+								ja = "ja"
+								ko = "ko"
+								pt_br = "pt_br"
+								zh_tw = "zh_tw"
+								zh_cn = "zh_cn"
+							}
 				options {
 					hidden = true
 				}
@@ -430,7 +430,7 @@ func testAccCheckIbmOnboardingIamRegistrationUpdateConfig(
 				pt_br = "pt_br"
 				zh_tw = "zh_tw"
 				zh_cn = "zh_cn"
-			}
+						}
 			parent_ids = ["05ca8653-de25-49fa-a14d-aaa5d373bc22"]	
 			supported_attributes {
 				key = "testString"
@@ -887,7 +887,7 @@ func TestResourceIbmOnboardingIamRegistrationIamServiceRegistrationSupportedAttr
 		supportedAttributesOptionsModel := make(map[string]interface{})
 		supportedAttributesOptionsModel["operators"] = []string{"stringEquals"}
 		supportedAttributesOptionsModel["hidden"] = true
-		supportedAttributesOptionsModel["supported_attributes"] = []string{"testString"}
+		supportedAttributesOptionsModel["supported_patterns"] = []string{"testString"}
 		supportedAttributesOptionsModel["policy_types"] = []string{"access"}
 		supportedAttributesOptionsModel["is_empty_value_supported"] = true
 		supportedAttributesOptionsModel["is_string_exists_false_value_supported"] = true
@@ -1053,7 +1053,7 @@ func TestResourceIbmOnboardingIamRegistrationSupportedAttributesOptionsToMap(t *
 		model := make(map[string]interface{})
 		model["operators"] = []string{"stringEquals"}
 		model["hidden"] = true
-		model["supported_attributes"] = []string{"testString"}
+		model["supported_patterns"] = []string{"testString"}
 		model["policy_types"] = []string{"access"}
 		model["is_empty_value_supported"] = true
 		model["is_string_exists_false_value_supported"] = true
@@ -1814,6 +1814,7 @@ func TestResourceIbmOnboardingIamRegistrationMapToIamServiceRegistrationSupporte
 		iamServiceRegistrationSupportedAnonymousAccessAttributesModel := new(partnercentersellv1.IamServiceRegistrationSupportedAnonymousAccessAttributes)
 		iamServiceRegistrationSupportedAnonymousAccessAttributesModel.AccountID = core.StringPtr("testString")
 		iamServiceRegistrationSupportedAnonymousAccessAttributesModel.ServiceName = core.StringPtr("testString")
+		iamServiceRegistrationSupportedAnonymousAccessAttributesModel.AdditionalProperties = map[string]string{"key1": "testString"}
 
 		model := new(partnercentersellv1.IamServiceRegistrationSupportedAnonymousAccess)
 		model.Attributes = iamServiceRegistrationSupportedAnonymousAccessAttributesModel
@@ -1825,6 +1826,7 @@ func TestResourceIbmOnboardingIamRegistrationMapToIamServiceRegistrationSupporte
 	iamServiceRegistrationSupportedAnonymousAccessAttributesModel := make(map[string]interface{})
 	iamServiceRegistrationSupportedAnonymousAccessAttributesModel["account_id"] = "testString"
 	iamServiceRegistrationSupportedAnonymousAccessAttributesModel["service_name"] = "testString"
+	iamServiceRegistrationSupportedAnonymousAccessAttributesModel["additional_properties"] = map[string]interface{}{"key1": "testString"}
 
 	model := make(map[string]interface{})
 	model["attributes"] = []interface{}{iamServiceRegistrationSupportedAnonymousAccessAttributesModel}
@@ -1840,6 +1842,7 @@ func TestResourceIbmOnboardingIamRegistrationMapToIamServiceRegistrationSupporte
 		model := new(partnercentersellv1.IamServiceRegistrationSupportedAnonymousAccessAttributes)
 		model.AccountID = core.StringPtr("testString")
 		model.ServiceName = core.StringPtr("testString")
+		model.AdditionalProperties = map[string]string{"key1": "testString"}
 
 		assert.Equal(t, result, model)
 	}
@@ -1847,6 +1850,7 @@ func TestResourceIbmOnboardingIamRegistrationMapToIamServiceRegistrationSupporte
 	model := make(map[string]interface{})
 	model["account_id"] = "testString"
 	model["service_name"] = "testString"
+	model["additional_properties"] = map[string]interface{}{"key1": "testString"}
 
 	result, err := partnercentersell.ResourceIbmOnboardingIamRegistrationMapToIamServiceRegistrationSupportedAnonymousAccessAttributes(model)
 	assert.Nil(t, err)
@@ -1950,7 +1954,7 @@ func TestResourceIbmOnboardingIamRegistrationMapToIamServiceRegistrationSupporte
 	supportedAttributesOptionsModel := make(map[string]interface{})
 	supportedAttributesOptionsModel["operators"] = []interface{}{"stringEquals"}
 	supportedAttributesOptionsModel["hidden"] = true
-	supportedAttributesOptionsModel["supported_attributes"] = []interface{}{"testString"}
+	supportedAttributesOptionsModel["supported_patterns"] = []interface{}{"testString"}
 	supportedAttributesOptionsModel["policy_types"] = []interface{}{"access"}
 	supportedAttributesOptionsModel["is_empty_value_supported"] = true
 	supportedAttributesOptionsModel["is_string_exists_false_value_supported"] = true
@@ -2059,7 +2063,7 @@ func TestResourceIbmOnboardingIamRegistrationMapToSupportedAttributesOptions(t *
 	model := make(map[string]interface{})
 	model["operators"] = []interface{}{"stringEquals"}
 	model["hidden"] = true
-	model["supported_attributes"] = []interface{}{"testString"}
+	model["supported_patterns"] = []interface{}{"testString"}
 	model["policy_types"] = []interface{}{"access"}
 	model["is_empty_value_supported"] = true
 	model["is_string_exists_false_value_supported"] = true
diff --git a/ibm/service/partnercentersell/resource_ibm_onboarding_product.go b/ibm/service/partnercentersell/resource_ibm_onboarding_product.go
index 05ee3cf898a..5076455abd7 100644
--- a/ibm/service/partnercentersell/resource_ibm_onboarding_product.go
+++ b/ibm/service/partnercentersell/resource_ibm_onboarding_product.go
@@ -504,57 +504,80 @@ func ResourceIbmOnboardingProductOnboardingProductPatchAsPatch(patchVals *partne
 	path = "primary_contact"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["primary_contact"] = nil
+	} else if !exists {
+		delete(patch, "primary_contact")
 	}
 	path = "eccn_number"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["eccn_number"] = nil
+	} else if !exists {
+		delete(patch, "eccn_number")
 	}
 	path = "ero_class"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["ero_class"] = nil
+	} else if !exists {
+		delete(patch, "ero_class")
 	}
 	path = "unspsc"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["unspsc"] = nil
+	} else if !exists {
+		delete(patch, "unspsc")
 	}
 	path = "tax_assessment"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["tax_assessment"] = nil
+	} else if !exists {
+		delete(patch, "tax_assessment")
 	}
 	path = "support"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["support"] = nil
 	} else if exists && patch["support"] != nil {
-		ResourceIbmOnboardingProductOnboardingProductSupportAsPatch(patch["support"].(map[string]interface{}), d)
+		ResourceIbmOnboardingProductOnboardingProductSupportAsPatch(patch["support"].(map[string]interface{}), d, fmt.Sprintf("%s.0", path))
+	} else if !exists {
+		delete(patch, "support")
 	}
 
 	return patch
 }
 
-func ResourceIbmOnboardingProductOnboardingProductSupportAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingProductOnboardingProductSupportAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "support.0.escalation_contacts"
+	path = rootPath + ".escalation_contacts"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["escalation_contacts"] = nil
 	} else if exists && patch["escalation_contacts"] != nil {
-		ResourceIbmOnboardingProductOnboardingProductSupportEscalationContactItemsAsPatch(patch["escalation_contacts"].([]map[string]interface{})[0], d)
+		escalation_contactsList := patch["escalation_contacts"].([]map[string]interface{})
+		for i, escalation_contactsItem := range escalation_contactsList {
+			ResourceIbmOnboardingProductOnboardingProductSupportEscalationContactItemsAsPatch(escalation_contactsItem, d, fmt.Sprintf("%s.%d", path, i))
+		}
+	} else if !exists {
+		delete(patch, "escalation_contacts")
 	}
 }
 
-func ResourceIbmOnboardingProductOnboardingProductSupportEscalationContactItemsAsPatch(patch map[string]interface{}, d *schema.ResourceData) {
+func ResourceIbmOnboardingProductOnboardingProductSupportEscalationContactItemsAsPatch(patch map[string]interface{}, d *schema.ResourceData, rootPath string) {
 	var path string
 
-	path = "support.0.escalation_contacts.0.name"
+	path = rootPath + ".name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["name"] = nil
+	} else if !exists {
+		delete(patch, "name")
 	}
-	path = "support.0.escalation_contacts.0.email"
+	path = rootPath + ".email"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["email"] = nil
+	} else if !exists {
+		delete(patch, "email")
 	}
-	path = "support.0.escalation_contacts.0.role"
+	path = rootPath + ".role"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["role"] = nil
+	} else if !exists {
+		delete(patch, "role")
 	}
 }
diff --git a/ibm/service/partnercentersell/resource_ibm_onboarding_product_test.go b/ibm/service/partnercentersell/resource_ibm_onboarding_product_test.go
index 86662649012..b76af810d5d 100644
--- a/ibm/service/partnercentersell/resource_ibm_onboarding_product_test.go
+++ b/ibm/service/partnercentersell/resource_ibm_onboarding_product_test.go
@@ -50,10 +50,12 @@ func TestAccIbmOnboardingProductAllArgs(t *testing.T) {
 	typeVar := "service"
 	eccnNumber := "5D002.C.1"
 	eroClass := "A6VR"
+	unspsc := "25191503"
 	taxAssessment := "PAAS"
 	typeVarUpdate := "service"
 	eccnNumberUpdate := "5D002.C.1"
 	eroClassUpdate := "A6VR"
+	unspscUpdate := "43232300"
 	taxAssessmentUpdate := "PAAS"
 
 	resource.Test(t, resource.TestCase{
@@ -62,7 +64,7 @@ func TestAccIbmOnboardingProductAllArgs(t *testing.T) {
 		CheckDestroy: testAccCheckIbmOnboardingProductDestroy,
 		Steps: []resource.TestStep{
 			resource.TestStep{
-				Config: testAccCheckIbmOnboardingProductConfig(typeVar, eccnNumber, eroClass, taxAssessment),
+				Config: testAccCheckIbmOnboardingProductConfig(typeVar, eccnNumber, eroClass, unspsc, taxAssessment),
 				Check: resource.ComposeAggregateTestCheckFunc(
 					testAccCheckIbmOnboardingProductExists("ibm_onboarding_product.onboarding_product_instance", conf),
 					resource.TestCheckResourceAttr("ibm_onboarding_product.onboarding_product_instance", "type", typeVar),
@@ -72,7 +74,7 @@ func TestAccIbmOnboardingProductAllArgs(t *testing.T) {
 				),
 			},
 			resource.TestStep{
-				Config: testAccCheckIbmOnboardingProductConfig(typeVarUpdate, eccnNumberUpdate, eroClassUpdate, taxAssessmentUpdate),
+				Config: testAccCheckIbmOnboardingProductConfig(typeVarUpdate, eccnNumberUpdate, eroClassUpdate, unspscUpdate, taxAssessmentUpdate),
 				Check: resource.ComposeAggregateTestCheckFunc(
 					resource.TestCheckResourceAttr("ibm_onboarding_product.onboarding_product_instance", "type", typeVarUpdate),
 					resource.TestCheckResourceAttr("ibm_onboarding_product.onboarding_product_instance", "eccn_number", eccnNumberUpdate),
@@ -81,7 +83,7 @@ func TestAccIbmOnboardingProductAllArgs(t *testing.T) {
 				),
 			},
 			resource.TestStep{
-				ResourceName:      "ibm_onboarding_product.onboarding_product",
+				ResourceName:      "ibm_onboarding_product.onboarding_product_instance",
 				ImportState:       true,
 				ImportStateVerify: true,
 			},
@@ -95,34 +97,27 @@ func testAccCheckIbmOnboardingProductConfigBasic(typeVar string) string {
 			type = "%s"
 			primary_contact {
 				name = "name"
-				email = "email"
+				email = "email@email.com"
 			}
 		}
 	`, typeVar)
 }
 
-func testAccCheckIbmOnboardingProductConfig(typeVar string, eccnNumber string, eroClass string, taxAssessment string) string {
+func testAccCheckIbmOnboardingProductConfig(typeVar string, eccnNumber string, eroClass string, unspsc string, taxAssessment string) string {
 	return fmt.Sprintf(`
 
 		resource "ibm_onboarding_product" "onboarding_product_instance" {
 			type = "%s"
 			primary_contact {
 				name = "name"
-				email = "email"
+				email = "email@email.com"
 			}
 			eccn_number = "%s"
 			ero_class = "%s"
-			unspsc = "FIXME"
+			unspsc = "%s"
 			tax_assessment = "%s"
-			support {
-				escalation_contacts {
-					name = "name"
-					email = "email"
-					role = "role"
-				}
-			}
 		}
-	`, typeVar, eccnNumber, eroClass, taxAssessment)
+	`, typeVar, eccnNumber, eroClass, unspsc, taxAssessment)
 }
 
 func testAccCheckIbmOnboardingProductExists(n string, obj partnercentersellv1.OnboardingProduct) resource.TestCheckFunc {
diff --git a/ibm/service/partnercentersell/resource_ibm_onboarding_registration.go b/ibm/service/partnercentersell/resource_ibm_onboarding_registration.go
index 6a181f5f2f5..89cf480b205 100644
--- a/ibm/service/partnercentersell/resource_ibm_onboarding_registration.go
+++ b/ibm/service/partnercentersell/resource_ibm_onboarding_registration.go
@@ -336,18 +336,26 @@ func ResourceIbmOnboardingRegistrationRegistrationPatchAsPatch(patchVals *partne
 	path = "company_name"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["company_name"] = nil
+	} else if !exists {
+		delete(patch, "company_name")
 	}
 	path = "primary_contact"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["primary_contact"] = nil
+	} else if !exists {
+		delete(patch, "primary_contact")
 	}
 	path = "default_private_catalog_id"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["default_private_catalog_id"] = nil
+	} else if !exists {
+		delete(patch, "default_private_catalog_id")
 	}
 	path = "provider_access_group"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["provider_access_group"] = nil
+	} else if !exists {
+		delete(patch, "provider_access_group")
 	}
 
 	return patch
diff --git a/ibm/service/partnercentersell/resource_ibm_onboarding_resource_broker.go b/ibm/service/partnercentersell/resource_ibm_onboarding_resource_broker.go
index 044c9ae42b2..794a081eb08 100644
--- a/ibm/service/partnercentersell/resource_ibm_onboarding_resource_broker.go
+++ b/ibm/service/partnercentersell/resource_ibm_onboarding_resource_broker.go
@@ -612,42 +612,62 @@ func ResourceIbmOnboardingResourceBrokerBrokerPatchAsPatch(patchVals *partnercen
 	path = "auth_username"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["auth_username"] = nil
+	} else if !exists {
+		delete(patch, "auth_username")
 	}
 	path = "auth_password"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["auth_password"] = nil
+	} else if !exists {
+		delete(patch, "auth_password")
 	}
 	path = "auth_scheme"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["auth_scheme"] = nil
+	} else if !exists {
+		delete(patch, "auth_scheme")
 	}
 	path = "resource_group_crn"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["resource_group_crn"] = nil
+	} else if !exists {
+		delete(patch, "resource_group_crn")
 	}
 	path = "state"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["state"] = nil
+	} else if !exists {
+		delete(patch, "state")
 	}
 	path = "broker_url"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["broker_url"] = nil
+	} else if !exists {
+		delete(patch, "broker_url")
 	}
 	path = "allow_context_updates"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["allow_context_updates"] = nil
+	} else if !exists {
+		delete(patch, "allow_context_updates")
 	}
 	path = "catalog_type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["catalog_type"] = nil
+	} else if !exists {
+		delete(patch, "catalog_type")
 	}
 	path = "type"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["type"] = nil
+	} else if !exists {
+		delete(patch, "type")
 	}
 	path = "region"
 	if _, exists := d.GetOk(path); d.HasChange(path) && !exists {
 		patch["region"] = nil
+	} else if !exists {
+		delete(patch, "region")
 	}
 
 	return patch
diff --git a/website/docs/r/onboarding_catalog_deployment.html.markdown b/website/docs/r/onboarding_catalog_deployment.html.markdown
index 76ed56416c4..98f63b5ddff 100644
--- a/website/docs/r/onboarding_catalog_deployment.html.markdown
+++ b/website/docs/r/onboarding_catalog_deployment.html.markdown
@@ -60,6 +60,111 @@ resource "ibm_onboarding_catalog_deployment" "onboarding_catalog_deployment_inst
 			bindable = true
 			plan_updateable = true
 			service_key_supported = true
+			parameters {
+				displayname = "displayname"
+				name = "name"
+				type = "text"
+				options {
+					displayname = "displayname"
+					value = "value"
+					i18n {
+						en {
+							displayname = "displayname"
+							description = "description"
+						}
+						de {
+							displayname = "displayname"
+							description = "description"
+						}
+						es {
+							displayname = "displayname"
+							description = "description"
+						}
+						fr {
+							displayname = "displayname"
+							description = "description"
+						}
+						it {
+							displayname = "displayname"
+							description = "description"
+						}
+						ja {
+							displayname = "displayname"
+							description = "description"
+						}
+						ko {
+							displayname = "displayname"
+							description = "description"
+						}
+						pt_br {
+							displayname = "displayname"
+							description = "description"
+						}
+						zh_tw {
+							displayname = "displayname"
+							description = "description"
+						}
+						zh_cn {
+							displayname = "displayname"
+							description = "description"
+						}
+					}
+				}
+				value = [ "value" ]
+				layout = "layout"
+				associations = { "key" = "anything as a string" }
+				validation_url = "validation_url"
+				options_url = "options_url"
+				invalidmessage = "invalidmessage"
+				description = "description"
+				required = true
+				pattern = "pattern"
+				placeholder = "placeholder"
+				readonly = true
+				hidden = true
+				i18n {
+					en {
+						displayname = "displayname"
+						description = "description"
+					}
+					de {
+						displayname = "displayname"
+						description = "description"
+					}
+					es {
+						displayname = "displayname"
+						description = "description"
+					}
+					fr {
+						displayname = "displayname"
+						description = "description"
+					}
+					it {
+						displayname = "displayname"
+						description = "description"
+					}
+					ja {
+						displayname = "displayname"
+						description = "description"
+					}
+					ko {
+						displayname = "displayname"
+						description = "description"
+					}
+					pt_br {
+						displayname = "displayname"
+						description = "description"
+					}
+					zh_tw {
+						displayname = "displayname"
+						description = "description"
+					}
+					zh_cn {
+						displayname = "displayname"
+						description = "description"
+					}
+				}
+			}
 		}
 		deployment {
 			broker {
@@ -122,6 +227,166 @@ Nested schema for **metadata**:
 	Nested schema for **service**:
 		* `bindable` - (Optional, Boolean) Deprecated. Controls the Connections tab on the Resource Details page.
 		* `iam_compatible` - (Optional, Boolean) Whether the service is compatible with the IAM service.
+		* `parameters` - (Optional, List)
+		  * Constraints: The maximum length is `1000` items. The minimum length is `0` items.
+		Nested schema for **parameters**:
+			* `associations` - (Optional, Map) A JSON structure to describe the interactions with pricing plans and/or other custom parameters.
+			* `description` - (Optional, String) The description of the parameter that is displayed to help users with the value of the parameter.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+			* `displayname` - (Optional, String) The display name for custom service parameters.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+			* `hidden` - (Optional, Boolean) Indicates whether the custom parameters is hidden required or not.
+			* `i18n` - (Optional, List) The description for the object.
+			Nested schema for **i18n**:
+				* `de` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **de**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `en` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **en**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `es` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **es**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `fr` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **fr**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `it` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **it**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `ja` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **ja**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `ko` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **ko**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `pt_br` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **pt_br**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `zh_cn` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **zh_cn**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `zh_tw` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **zh_tw**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+			* `invalidmessage` - (Optional, String) The message that appears when the content of the text box is invalid.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+			* `layout` - (Optional, String) Specifies the layout of check box or radio input types. When unspecified, the default layout is horizontal.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+			* `name` - (Optional, String) The key of the parameter.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+			* `options` - (Optional, List)
+			  * Constraints: The maximum length is `1000` items. The minimum length is `0` items.
+			Nested schema for **options**:
+				* `displayname` - (Optional, String) The display name for custom service parameters.
+				  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+				* `i18n` - (Optional, List) The description for the object.
+				Nested schema for **i18n**:
+					* `de` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **de**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `en` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **en**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `es` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **es**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `fr` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **fr**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `it` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **it**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `ja` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **ja**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `ko` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **ko**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `pt_br` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **pt_br**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `zh_cn` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **zh_cn**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `zh_tw` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **zh_tw**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `value` - (Optional, String) The value for custom service parameters.
+				  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/./`.
+			* `options_url` - (Optional, String) The options URL for custom service parameters.
+			  * Constraints: The maximum length is `2083` characters. The minimum length is `1` character. The value must match regular expression `/^(?!mailto:)(?:(?:http|https|ftp):\/\/)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(\/|\\?|#)[^\\s]*)?$/`.
+			* `pattern` - (Optional, String) A regular expression that the value is checked against.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/./`.
+			* `placeholder` - (Optional, String) The placeholder text for custom parameters.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+			* `readonly` - (Optional, Boolean) A boolean value that indicates whether the value of the parameter is displayed only and cannot be changed by users. The default value is false.
+			* `required` - (Optional, Boolean) A boolean value that indicates whether the parameter must be entered in the IBM Cloud user interface.
+			* `type` - (Optional, String) The type of custom service parameters.
+			  * Constraints: Allowable values are: `text`, `textarea`, `dropdown`, `number`, `password`, `combo`, `checkbox`, `radio`, `multiselect`, `resource_group`, `vcenter_datastore`, `region`, `secret`, `cluster_namespace`.
+			* `validation_url` - (Optional, String) The validation URL for custom service parameters.
+			  * Constraints: The maximum length is `2083` characters. The minimum length is `1` character. The value must match regular expression `/^(?!mailto:)(?:(?:http|https|ftp):\/\/)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(\/|\\?|#)[^\\s]*)?$/`.
+			* `value` - (Optional, List)
+			  * Constraints: The list items must match regular expression `/^[ -~\\s]*$/`. The maximum length is `1000` items. The minimum length is `0` items.
 		* `plan_updateable` - (Optional, Boolean) Indicates plan update support and controls the Plan tab on the Resource Details page.
 		* `rc_provisionable` - (Optional, Boolean) Whether the service is provisionable by the resource controller service.
 		* `service_key_supported` - (Optional, Boolean) Indicates service credentials support and controls the Service Credential tab on Resource Details page.
@@ -197,6 +462,8 @@ After your resource is created, you can read values from the listed arguments an
 
 * `id` - The unique identifier of the onboarding_catalog_deployment.
 * `catalog_deployment_id` - (String) The ID of a global catalog object.
+* `geo_tags` - (List) 
+  * Constraints: The list items must match regular expression `/./`. The maximum length is `1000` items. The minimum length is `0` items.
 * `url` - (String) The global catalog URL of your product.
 
 
diff --git a/website/docs/r/onboarding_catalog_plan.html.markdown b/website/docs/r/onboarding_catalog_plan.html.markdown
index 2949b46dbf7..4e20431469b 100644
--- a/website/docs/r/onboarding_catalog_plan.html.markdown
+++ b/website/docs/r/onboarding_catalog_plan.html.markdown
@@ -189,6 +189,8 @@ After your resource is created, you can read values from the listed arguments an
 
 * `id` - The unique identifier of the onboarding_catalog_plan.
 * `catalog_plan_id` - (String) The ID of a global catalog object.
+* `geo_tags` - (List) 
+  * Constraints: The list items must match regular expression `/./`. The maximum length is `1000` items. The minimum length is `0` items.
 * `url` - (String) The global catalog URL of your product.
 
 
diff --git a/website/docs/r/onboarding_catalog_product.html.markdown b/website/docs/r/onboarding_catalog_product.html.markdown
index ba3b6f750c0..abe8f246d94 100644
--- a/website/docs/r/onboarding_catalog_product.html.markdown
+++ b/website/docs/r/onboarding_catalog_product.html.markdown
@@ -61,6 +61,112 @@ resource "ibm_onboarding_catalog_product" "onboarding_catalog_product_instance"
 			bindable = true
 			plan_updateable = true
 			service_key_supported = true
+			unique_api_key = true
+			parameters {
+				displayname = "displayname"
+				name = "name"
+				type = "text"
+				options {
+					displayname = "displayname"
+					value = "value"
+					i18n {
+						en {
+							displayname = "displayname"
+							description = "description"
+						}
+						de {
+							displayname = "displayname"
+							description = "description"
+						}
+						es {
+							displayname = "displayname"
+							description = "description"
+						}
+						fr {
+							displayname = "displayname"
+							description = "description"
+						}
+						it {
+							displayname = "displayname"
+							description = "description"
+						}
+						ja {
+							displayname = "displayname"
+							description = "description"
+						}
+						ko {
+							displayname = "displayname"
+							description = "description"
+						}
+						pt_br {
+							displayname = "displayname"
+							description = "description"
+						}
+						zh_tw {
+							displayname = "displayname"
+							description = "description"
+						}
+						zh_cn {
+							displayname = "displayname"
+							description = "description"
+						}
+					}
+				}
+				value = [ "value" ]
+				layout = "layout"
+				associations = { "key" = "anything as a string" }
+				validation_url = "validation_url"
+				options_url = "options_url"
+				invalidmessage = "invalidmessage"
+				description = "description"
+				required = true
+				pattern = "pattern"
+				placeholder = "placeholder"
+				readonly = true
+				hidden = true
+				i18n {
+					en {
+						displayname = "displayname"
+						description = "description"
+					}
+					de {
+						displayname = "displayname"
+						description = "description"
+					}
+					es {
+						displayname = "displayname"
+						description = "description"
+					}
+					fr {
+						displayname = "displayname"
+						description = "description"
+					}
+					it {
+						displayname = "displayname"
+						description = "description"
+					}
+					ja {
+						displayname = "displayname"
+						description = "description"
+					}
+					ko {
+						displayname = "displayname"
+						description = "description"
+					}
+					pt_br {
+						displayname = "displayname"
+						description = "description"
+					}
+					zh_tw {
+						displayname = "displayname"
+						description = "description"
+					}
+					zh_cn {
+						displayname = "displayname"
+						description = "description"
+					}
+				}
+			}
 		}
 		other {
 			pc {
@@ -210,9 +316,170 @@ Nested schema for **metadata**:
 	Nested schema for **service**:
 		* `bindable` - (Optional, Boolean) Deprecated. Controls the Connections tab on the Resource Details page.
 		* `iam_compatible` - (Optional, Boolean) Whether the service is compatible with the IAM service.
+		* `parameters` - (Optional, List)
+		  * Constraints: The maximum length is `1000` items. The minimum length is `0` items.
+		Nested schema for **parameters**:
+			* `associations` - (Optional, Map) A JSON structure to describe the interactions with pricing plans and/or other custom parameters.
+			* `description` - (Optional, String) The description of the parameter that is displayed to help users with the value of the parameter.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+			* `displayname` - (Optional, String) The display name for custom service parameters.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+			* `hidden` - (Optional, Boolean) Indicates whether the custom parameters is hidden required or not.
+			* `i18n` - (Optional, List) The description for the object.
+			Nested schema for **i18n**:
+				* `de` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **de**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `en` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **en**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `es` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **es**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `fr` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **fr**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `it` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **it**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `ja` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **ja**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `ko` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **ko**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `pt_br` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **pt_br**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `zh_cn` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **zh_cn**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `zh_tw` - (Optional, List) The translations for custom service parameter display name and description.
+				Nested schema for **zh_tw**:
+					* `description` - (Optional, String) The translations for custom service parameter description.
+					  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `displayname` - (Optional, String) The translations for custom service parameter display name.
+					  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+			* `invalidmessage` - (Optional, String) The message that appears when the content of the text box is invalid.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+			* `layout` - (Optional, String) Specifies the layout of check box or radio input types. When unspecified, the default layout is horizontal.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+			* `name` - (Optional, String) The key of the parameter.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+			* `options` - (Optional, List)
+			  * Constraints: The maximum length is `1000` items. The minimum length is `0` items.
+			Nested schema for **options**:
+				* `displayname` - (Optional, String) The display name for custom service parameters.
+				  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+				* `i18n` - (Optional, List) The description for the object.
+				Nested schema for **i18n**:
+					* `de` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **de**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `en` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **en**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `es` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **es**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `fr` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **fr**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `it` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **it**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `ja` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **ja**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `ko` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **ko**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `pt_br` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **pt_br**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `zh_cn` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **zh_cn**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+					* `zh_tw` - (Optional, List) The translations for custom service parameter display name and description.
+					Nested schema for **zh_tw**:
+						* `description` - (Optional, String) The translations for custom service parameter description.
+						  * Constraints: The maximum length is `20000` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+						* `displayname` - (Optional, String) The translations for custom service parameter display name.
+						  * Constraints: The maximum length is `256` characters. The minimum length is `0` characters. The value must match regular expression `/./`.
+				* `value` - (Optional, String) The value for custom service parameters.
+				  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/./`.
+			* `options_url` - (Optional, String) The options URL for custom service parameters.
+			  * Constraints: The maximum length is `2083` characters. The minimum length is `1` character. The value must match regular expression `/^(?!mailto:)(?:(?:http|https|ftp):\/\/)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(\/|\\?|#)[^\\s]*)?$/`.
+			* `pattern` - (Optional, String) A regular expression that the value is checked against.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/./`.
+			* `placeholder` - (Optional, String) The placeholder text for custom parameters.
+			  * Constraints: The maximum length is `2000` characters. The minimum length is `1` character. The value must match regular expression `/^[ -~\\s]*$/`.
+			* `readonly` - (Optional, Boolean) A boolean value that indicates whether the value of the parameter is displayed only and cannot be changed by users. The default value is false.
+			* `required` - (Optional, Boolean) A boolean value that indicates whether the parameter must be entered in the IBM Cloud user interface.
+			* `type` - (Optional, String) The type of custom service parameters.
+			  * Constraints: Allowable values are: `text`, `textarea`, `dropdown`, `number`, `password`, `combo`, `checkbox`, `radio`, `multiselect`, `resource_group`, `vcenter_datastore`, `region`, `secret`, `cluster_namespace`.
+			* `validation_url` - (Optional, String) The validation URL for custom service parameters.
+			  * Constraints: The maximum length is `2083` characters. The minimum length is `1` character. The value must match regular expression `/^(?!mailto:)(?:(?:http|https|ftp):\/\/)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-?)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(\/|\\?|#)[^\\s]*)?$/`.
+			* `value` - (Optional, List)
+			  * Constraints: The list items must match regular expression `/^[ -~\\s]*$/`. The maximum length is `1000` items. The minimum length is `0` items.
 		* `plan_updateable` - (Optional, Boolean) Indicates plan update support and controls the Plan tab on the Resource Details page.
 		* `rc_provisionable` - (Optional, Boolean) Whether the service is provisionable by the resource controller service.
 		* `service_key_supported` - (Optional, Boolean) Indicates service credentials support and controls the Service Credential tab on Resource Details page.
+		* `unique_api_key` - (Optional, Boolean) Indicates that the deployment uses an unique api key or not.
 	* `ui` - (Optional, List) The UI metadata of this service.
 	Nested schema for **ui**:
 		* `hidden` - (Optional, Boolean) Whether the object is hidden from the consumption catalog.
@@ -285,6 +552,8 @@ After your resource is created, you can read values from the listed arguments an
 
 * `id` - The unique identifier of the onboarding_catalog_product.
 * `catalog_product_id` - (String) The ID of a global catalog object.
+* `geo_tags` - (List) 
+  * Constraints: The list items must match regular expression `/./`. The maximum length is `1000` items. The minimum length is `0` items.
 * `url` - (String) The global catalog URL of your product.
 
 
@@ -294,12 +563,12 @@ You can import the `ibm_onboarding_catalog_product` resource by using `id`.
 The `id` property can be formed from `product_id`, and `catalog_product_id` in the following format:
 
 <pre>
-&lt;product_id&gt;/&lt;catalog_product_id&gt;
+	product_id/catalog_product_id;
 </pre>
 * `product_id`: A string. The unique ID of the product.
 * `catalog_product_id`: A string. The ID of a global catalog object.
 
 # Syntax
 <pre>
-$ terraform import ibm_onboarding_catalog_product.onboarding_catalog_product &lt;product_id&gt;/&lt;catalog_product_id&gt;
+$ terraform import ibm_onboarding_catalog_product.onboarding_catalog_product product_id/catalog_product_id;
 </pre>
diff --git a/website/docs/r/onboarding_iam_registration.html.markdown b/website/docs/r/onboarding_iam_registration.html.markdown
index 9e81090c0e6..9251f511050 100644
--- a/website/docs/r/onboarding_iam_registration.html.markdown
+++ b/website/docs/r/onboarding_iam_registration.html.markdown
@@ -545,7 +545,7 @@ You can import the `ibm_onboarding_iam_registration` resource by using `name`.
 The `name` property can be formed from `product_id`, and `name` in the following format:
 
 <pre>
-&lt;product_id&gt;/&lt;name&gt;
+&lt;product_id/name
 </pre>
 * `product_id`: A string. The unique ID of the product.
 * `name`: A string in the format `pet-store`. The IAM registration name, which must be the programmatic name of the product.