Skip to main content

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.

info

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:

  1. Head to your application’s Development dashboard and open the Services view.
  2. Find the service you want to reuse and click Manage > New service like this.
  3. A editable form will open with the original service’s details already filled in.
  4. Make any changes you need—like updating the target dimensions or environment.
  5. 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, and dev-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:

  1. Go to Platform settings > Services > Specifications.
  2. Search for the service spec you want to edit.
  3. In the Schema tab, find the relevant field and add the "comparable": false keyword to the property you want cleared from the form.
  4. 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:

  1. Service spec attributes schema – defines the data structure stored in the service.
  2. Action spec parameters schema – defines the data required to create the service.
important

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 on use_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 includes endpoint_type, endpoints, and mtls_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:

  1. Go to Platform settings > Services > Specifications and search for the service spec you want to reuse.
  2. 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’s attributes schema.

  3. Fill in the required details: specification data, schema, and UI schema (if needed). Then click Create to save it.
  4. Return to Development > Services and try creating a service again using Manage > New service like this.
info

For more details on creating action specifications, see our action specification docs.