Architectural Overview
Enterprise APIs evolve through major and minor versions (v1, v2) as request payloads and endpoints change. Within the Salesforce API Catalog, the CatalogedApiVersion metadata type represents a specific version of a parent CatalogedApi asset.
Architecturally, CatalogedApiVersion acts as the bridge between the high-level API catalog entry (CatalogedApi), its underlying OpenAPI or RAML specification artifact (CatalogedApiArtifactVersionInfo), and the generated Salesforce ExternalServiceRegistration that exposes invocable actions to Flow, ApexClass, and Agentforce.
Directory Location and File Suffix
In Salesforce DX source format, CatalogedApiVersion components are stored in the catalogedApiVersions directory.
| Property | Value |
|---|---|
| Directory Path (SFDX) | force-app/main/default/catalogedApiVersions/ |
| File Suffix (SFDX) | .catalogedApiVersion-meta.xml |
| Classic Metadata Suffix | .catalogedApiVersion |
| Metadata Type Name | CatalogedApiVersion |
Key Metadata Fields
The following table lists the key fields on CatalogedApiVersion as of API version 68.0 (Winter ’27):
| Field Name | Field Type | Required | Architectural Description |
|---|---|---|---|
masterLabel |
string |
Yes | The display label of the API version shown in the Salesforce API Catalog. |
catalogedApi |
string |
Yes | The developer name of the parent CatalogedApi record to which this version belongs. |
apiVersion |
string |
Yes | The semantic or major version identifier of the API (for example, v1 or 1.0.0). |
status |
string |
No | The lifecycle state of the API version in the catalog, such as Active or Deprecated. |
description |
string |
No | Release notes or architectural description of the changes introduced in this API version. |
Declarative Metadata Example
The following example defines version v1 of the ERP_Order_Status_API cataloged API:
<?xml version="1.0" encoding="UTF-8"?>
<CatalogedApiVersion xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>v1</apiVersion>
<catalogedApi>ERP_Order_Status_API</catalogedApi>
<description>Initial production version of the ERP Order Status REST API supporting order lookup by number.</description>
<masterLabel>ERP Order Status System API v1</masterLabel>
<status>Active</status>
</CatalogedApiVersion>Package Manifest (package.xml)
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>ERP_Order_Status_API</members>
<name>CatalogedApi</name>
</types>
<types>
<members>ERP_Order_Status_API_v1</members>
<name>CatalogedApiVersion</name>
</types>
<version>68.0</version>
</Package>Tooling API Queries and SFDX CLI Commands
Use the Salesforce CLI (sf) to retrieve and deploy CatalogedApiVersion metadata:
# Retrieve all CatalogedApiVersion components
sf project retrieve start --metadata CatalogedApiVersion
# Deploy a specific CatalogedApiVersion alongside its parent CatalogedApi
sf project deploy start --metadata CatalogedApi:ERP_Order_Status_API,CatalogedApiVersion:ERP_Order_Status_API_v1You can also query CatalogedApiVersion via the Tooling API (sf data query --use-tooling-api):
SELECT Id, DeveloperName, MasterLabel, ApiVersion, Status
FROM CatalogedApiVersion
ORDER BY DeveloperName ASCArchitect Best Practices and Gotchas
Tip
When introducing a breaking change to an external API, register a new CatalogedApiVersion (for example, ERP_Order_Status_API_v2) rather than overwriting v1 in-place. This allows you to migrate Flow actions incrementally without breaking active transactions.
- Parent-Child Deployment Integrity: Always include the parent
CatalogedApiand childCatalogedApiArtifactVersionInfoin the same deployment package when promoting a newCatalogedApiVersionacross sandboxes. - Lifecycle Hygiene: Mark older
CatalogedApiVersionentries as deprecated once all dependent Flows and Apex classes have been cut over to the new version, before attempting destructive removal.
Frequently asked questions
What is the relationship between CatalogedApi and CatalogedApiVersion?
CatalogedApi represents the top-level API entry in the Salesforce API Catalog, while CatalogedApiVersion represents a specific semantic version (such as v1 or v2) of that API.
Why should architects maintain multiple CatalogedApiVersion records?
Maintaining separate CatalogedApiVersion records allows existing Flows and Agentforce actions to continue calling v1 of an external API while new automations are built and tested against v2.
Where are CatalogedApiVersion files stored in an SFDX project?
They are stored in force-app/main/default/catalogedApiVersions/ with the file extension .catalogedApiVersion-meta.xml.
What happens if the parent CatalogedApi is missing during deployment?
Deploying a CatalogedApiVersion without its referenced parent CatalogedApi in the target org or deployment manifest fails with a missing dependency error.
Comments
Questions, corrections and tips are welcome. Comments are GitHub Discussions, so you sign in with GitHub.