Create services based on existing ones
You can create a new service using the configuration of one that already exists—making it easier and faster to promote services across environments, with fewer chances for mistakes.
This feature does not support imported services, such as monitoring tools (e.g., New Relic), AI services (e.g., OpenAI), or other third-party integrations.
How it works
You can create a service right from the UI:
- Head to your application’s Development dashboard and open the Services view.
- Find the service you want to reuse and click Manage > New service like this.
- A editable form will open with the original service’s details already filled in.
- Make any changes you need—like updating the target dimensions or environment.
- Click Create service to finish up.
The new service will then appear in your service list.
Common use cases
Creating services based on existing ones can help at multiple stages of your development and operations workflow—not just when you're setting things up for the first time.
Here are some common scenarios where this feature is useful:
-
Promoting services across environments. Let’s say you've finished configuring a service in your Development environment. You can use that same setup to create a new service in Staging, and then do the same for Production—saving time and reducing manual work.
-
Working across countries or dimensions. Teams often need the same service, such as an "API Gateway", in different regions—for example,
dev-us
,dev-uk
, anddev-eu
. Previously, each one had to be created manually. Now, you can use one as a base and modify only what's necessary.
By reducing the amount of data you need to input manually—and preloading as much as possible—this feature helps teams avoid mistakes and move faster.
Specifying what fields cannot be copied
When creating a new service based on an existing one, the form is pre-filled with values from the original. But some fields—like environment-specific settings, account IDs, or custom domains—shouldn't carry over. This helps avoid reusing data that’s tied to a specific environment.
To prevent this, you can set "comparable": false
in the service specification. Fields marked this way are cleared
from the new form, and the UI will display a message explaining which values couldn’t be copied.
How to mark a field as non-copyable
Add "comparable": false
to any field under attributes.schema.properties
in the service spec.
To update a service specification:
- Go to Platform settings > Services > Specifications.
- Search for the service spec you want to edit.
- In the Schema tab, find the relevant field and add the
"comparable": false
keyword to the property you want cleared from the form. - Save your changes.
In this example, scope
is marked as non-comparable:
"properties": {
"scope": {
"type": "string",
"title": "Scope",
"comparable": false,
"description": "The slug of the scope"
}
}
When a user creates a new service based on one that includes this field, its value will be cleared in the form.
Schema compatibility requirements
When you click New service like this, nullplatform opens a new form with many of the original service’s values already filled in. This only works if two schemas are compatible:
- Service spec attributes schema – defines the data structure stored in the service.
- Action spec parameters schema – defines the data required to create the service.
To populate the form correctly, the create
action’s parameter schema must match—or be compatible with— the
service’s attribute schema.
Here’s what that looks like in practice:
-
If you're using default actions (
use_default_actions: true
) Compatibility is taken care of automatically. You don’t need to worry about the schemas matching—nullplatform ensures they align. See Service actions for more onuse_default_actions
. -
If you're not using default actions You must ensure that the parameter inputs expected by your
create
action match the structure of your service’s attributes. For example, if the service includesendpoint_type
,endpoints
, andmtls_enabled
, then the create action must also include these parameter inputs with the same types and structure.
// Example service attribute schema (subset)
"attributes": {
"schema": {
"type": "object",
"required": ["endpoint_type"],
"properties": {
"endpoint_type": {
"type": "string",
"enum": ["PRIVATE", "PUBLIC"]
},
"endpoints": {
"type": "array",
"items": {
"type": "object",
"required": ["method", "path", "scope"],
"properties": {
"method": { "type": "string" },
"path": { "type": "string" },
"scope": { "type": "string" }
}
}
},
"mtls_enabled": {
"type": "boolean"
}
}
}
}
// Example create action parameter-input schema (subset)
"parameters": {
"schema": {
"type": "object",
"required": ["endpoint_type"],
"properties": {
"endpoint_type": {
"type": "string",
"enum": ["PRIVATE", "PUBLIC"]
},
"endpoints": {
"type": "array",
"items": {
"type": "object",
"required": ["method", "path", "scope"],
"properties": {
"method": { "type": "string" },
"path": { "type": "string" },
"scope": { "type": "string" }
}
}
},
"mtls_enabled": {
"type": "boolean"
}
}
}
}
If the schemas don’t align, the form may not render correctly or the service creation may fail.
If you're encountering unexpected behavior when creating a new service based on another, double-check that the schemas are compatible—especially if you’re using custom definitions.
Set up an action create spec for your service spec
You won’t be able to create a service based on an existing one if that service doesn’t have a create
action
specification associated with its service spec.
To enable this feature, you’ll need to create an action specification first:
- Go to Platform settings > Services > Specifications and search for the service spec you want to reuse.
- Click Action specifications, then click + New action specification to open the
Create action specification form.
ℹ️ Important: The create action’s
parameters
schema must match—or be compatible with— the service’sattributes
schema. - Fill in the required details: specification data, schema, and UI schema (if needed). Then click Create to save it.
- Return to Development > Services and try creating a service again using Manage > New service like this.
For more details on creating action specifications, see our action specification docs.