Registry Preview
List Packages
/api/preview/registry/packagesRetrieves all registry packages accessible to the caller, with support for filtering, sorting, and pagination. No authentication is required, but authenticated requests may include additional usage statistics per package. Results can be filtered by package name, publisher, owning organization, sort field, and visibility level. Results are paginated with a default limit of 100 per page; use the continuationToken from the response to retrieve subsequent pages. Each entry in the response contains the full package metadata including name, publisher, source, version, title, description, repository URL, category, featured status, package types, maturity status, readme URL, schema URL, creation timestamp, and visibility.
Request Parameters
ascboolean query optionalWhen true, sort results in ascending ordercontinuationTokenstring query optionalPagination token for retrieving the next page of resultslimitinteger query optionalResults per page (default: 100)namestring query optionalFilter by specific package nameorgLoginstring query optionalFilter by owning organizationpublisherstring query optionalFilter by publisher organizationsortstring query optionalSort field for resultsvisibilitystring query optionalFilter by visibility level
Responses
- The list of packages
- ↳
namestring requiredThe name of the package. - ↳
publisherstring requiredThe publisher of the package. - ↳
publisherDisplayNamestring optionalThe display name of the publisher. - ↳
sourcestring requiredThe source of the package. - ↳
versionstring requiredThe version of the package in semver format. - ↳
titlestring optionalThe title/display name of the package. - ↳
descriptionstring optionalThe description of the package. - ↳
logoUrlstring optionalThe URL of the logo for the package. - ↳
repoUrlstring optionalThe URL of the repository the package is hosted in. - ↳
categorystring optionalThe category of the package. - ↳
isFeaturedboolean requiredWhether the package is featured. - ↳
packageTypesarray[string] optionalThe package types, e.g. “native”, “component”, “bridged” - ↳
packageStatusenum requiredThe maturity level of the package, e.g. “ga”, “public_preview”Values:ga,public_preview - ↳
readmeURLstring requiredThe URL of the readme for the package. - ↳
schemaURLstring requiredThe URL of the schema for the package. - ↳
pluginDownloadURLstring optionalThe URL to download the plugin at, as found in the schema. - ↳
createdAtstring requiredThe date and time the package version was created. - ↳
visibilityenum requiredThe visibility of the package.Values:public,private - The parameterization of the provider, if any.
- Usage statistics for this package within the requesting org. Only populated when the caller is authenticated.
continuationTokenstring optionalContinuation token for pagination
Post Publish Package Version
/api/preview/registry/packages/{source}/{publisher}/{name}/versionsInitiates the first step of a two-phase package version publish workflow. This creates a publish transaction and returns an operationID along with pre-signed upload URLs for the package artifacts (schema, index, and installationConfiguration). The caller must upload all required artifacts to the provided URLs and then call the PostPublishPackageVersionComplete endpoint with the operationID to finalize the publish. The request body must include the semantic version to publish. Returns 202 Accepted with the operation details, 404 if the source does not exist, or 409 if the specified version already exists.
Request Parameters
sourcestring path requiredThe package source: ‘pulumi’, ‘opentofu’, or ‘private’publisherstring path requiredOrganization that owns the packagenamestring path requiredThe package name
Request Body
versionstring requiredThe semantic version of the package to publish.publishedAtstring optionalOptional timestamp for when the package version was originally published. If not provided, defaults to current server time. Useful for backfilling historical versions with their original publish dates.
Responses
operationIDstring requiredThe unique identifier for the publish operation.- The URLs to upload package artifacts to.
- ↳
schemastring requiredThe pre-signed URL for uploading the package schema. - ↳
indexstring requiredThe pre-signed URL for uploading the package index. - ↳
installationConfigurationstring requiredThe pre-signed URL for uploading the package installation configuration.
Get Package Version
/api/preview/registry/packages/{source}/{publisher}/{name}/versions/{version}Retrieves metadata for a specific version of a registry package. The package is identified by its source, publisher organization, and name. The version parameter accepts either a specific semantic version string or the special value ’latest’ to retrieve the most recently published version. The response includes the package’s name, publisher, version, title, description, repository URL, category, featured status, package types, maturity status, readme URL, schema URL, plugin download URL, creation timestamp, visibility, parameterization details, and usage statistics (when the caller is authenticated). Returns 404 if the specified package version does not exist.
Request Parameters
sourcestring path requiredThe package source: ‘pulumi’, ‘opentofu’, or ‘private’publisherstring path requiredOrganization that owns the packagenamestring path requiredThe package nameversionstring path requiredSemantic version string or ’latest'
Responses
namestring requiredThe name of the package.publisherstring requiredThe publisher of the package.publisherDisplayNamestring optionalThe display name of the publisher.sourcestring requiredThe source of the package.versionstring requiredThe version of the package in semver format.titlestring optionalThe title/display name of the package.descriptionstring optionalThe description of the package.logoUrlstring optionalThe URL of the logo for the package.repoUrlstring optionalThe URL of the repository the package is hosted in.categorystring optionalThe category of the package.isFeaturedboolean requiredWhether the package is featured.packageTypesarray[string] optionalThe package types, e.g. “native”, “component”, “bridged”packageStatusenum requiredThe maturity level of the package, e.g. “ga”, “public_preview”Values:ga,public_previewreadmeURLstring requiredThe URL of the readme for the package.schemaURLstring requiredThe URL of the schema for the package.pluginDownloadURLstring optionalThe URL to download the plugin at, as found in the schema.createdAtstring requiredThe date and time the package version was created.visibilityenum requiredThe visibility of the package.Values:public,private- The parameterization of the provider, if any.
- The base provider that this package is parameterized from.
- ↳
parameterarray[string] requiredThe opaque parameterization data passed to the base provider, base64-encoded. - Usage statistics for this package within the requesting org. Only populated when the caller is authenticated.
- ↳
totalStacksinteger optionalTotal number of stacks using this package. - ↳
onLatestinteger optionalNumber of stacks on the latest version of this package. - ↳
onOlderinteger optionalNumber of stacks on an older version of this package. - ↳
versionUnresolvedinteger optionalNumber of stacks where the version could not be resolved.
Delete Publish Package Version
/api/preview/registry/packages/{source}/{publisher}/{name}/versions/{version}Removes a specific version of a package from the registry. The package is identified by its source (e.g. ‘pulumi’, ‘opentofu’, or ‘private’), publisher organization, name, and semantic version. Requires the RegistryPublish permission on the publisher organization. Returns 204 No Content on success.
Request Parameters
sourcestring path requiredThe package source: ‘pulumi’, ‘opentofu’, or ‘private’publisherstring path requiredOrganization that owns the packagenamestring path requiredThe package nameversionstring path requiredSemantic version string of the package version to delete
Responses
Post Publish Package Version Complete
/api/preview/registry/packages/{source}/{publisher}/{name}/versions/{version}/completeFinalizes the second step of the two-phase package version publish workflow. After initiating a publish with PostPublishPackageVersion and uploading all required artifacts (schema, index, installationConfiguration) to the pre-signed URLs, call this endpoint with the operationID to complete the publish. The service validates that all artifacts were uploaded successfully before making the version available in the registry. Returns 201 Created on success, 400 for a bad request (e.g. missing artifacts), 404 if the publish operation is not found, or 409 if the version already exists.
Request Parameters
sourcestring path requiredThe package source: ‘pulumi’, ‘opentofu’, or ‘private’publisherstring path requiredOrganization that owns the packagenamestring path requiredThe package nameversionstring path requiredSemantic version string of the package version to complete
Request Body
operationIDstring requiredThe identifier of the publish operation to complete.
Responses
List Templates
/api/preview/registry/templatesLists registry-backed templates with optional filtering, search, and pagination. This endpoint returns only registry-backed templates and does not include VCS-backed templates (those sourced from GitHub or GitLab repositories). No authentication is required. Results can be filtered by template name and owning organization (orgLogin). The search parameter performs case-insensitive partial matching against the template name, display name, description, metadata values, and runtime language. Results are paginated with a default limit of 100 per page; use the continuationToken from the response to retrieve subsequent pages. Each entry in the response includes the template’s name, publisher, source, display name, description, runtime, language, readme URL, download URL, visibility, and updated timestamp.
Request Parameters
continuationTokenstring query optionalPagination token for retrieving the next page of resultslimitinteger query optionalMaximum number of results to return (default: 100)namestring query optionalFilter by specific template nameorgLoginstring query optionalFilter by owning organizationsearchstring query optionalSearch query matching template name, display name, description, metadata values, or runtime language. Multiple space-separated terms require all terms to match (AND semantics).
Responses
- The list of templates
- ↳
namestring requiredThe unique identifier name of the template. - ↳
publisherstring requiredThe organization or user that published the template. - ↳
sourcestring requiredThe source identifier indicating where the template originates from. - ↳
displayNamestring requiredThe human-readable display name shown in the UI. - ↳
descriptionstring optionalA free-form text description of the template’s purpose. - The runtime that the template uses with optional configuration.
- ↳
languageenum requiredThe language that the template is in, inferred from the runtime. This may differ from the runtime (e.g., dotnet runtime with C# language, nodejs runtime with TypeScript language) or be the same (e.g., python).Values:unknown,python,go,dotnet,java,javascript,typescript,yaml - ↳
readmeURLstring optionalReadmeURL is just a pre-signed URL, derived from the artifact key. - ↳
downloadURLstring requiredAn URL, valid for at least 5 minutes that you can retrieve the full download bundle for your template.
The bundle will be a .tar.gz.
- ↳
repoSlugstring optionalA link to the hosting repository. Non-VCS backed templates do not have a repo slug as of now. - ↳
visibilityenum requiredThe visibility of the template (public or private).Values:public,private - ↳
updatedAtstring requiredThe timestamp when the template was last updated. - ↳
metadatamap[string]string optionalKey-value metadata associated with the template. - Configuration values for the template.
- ↳
urlstring requiredFor registry-backed templates, the URL will be a registry:// URL. For VCS-backed templates, this will be the VCS URL (e.g., GitHub, GitLab). continuationTokenstring optionalAn opaque token for fetching the next page of resultsdiagnosticsarray[string] optionalDiagnostic messages encountered during template listing
Post Publish Template Version
/api/preview/registry/templates/{source}/{publisher}/{name}/versionsInitiates the first step of a two-phase template version publish workflow. This creates a publish transaction and returns an operationID along with a pre-signed upload URL for the template archive. The source must be ‘private’. The caller must upload the template archive (a gzip-compressed tar file containing a root-level Pulumi.yaml with a template section, and optionally a README.md) to the provided URL, then call PostPublishTemplateVersionComplete with the operationID to finalize the publish. The request body must include the semantic version to publish. Returns 202 Accepted with the operation details, or 404 if the source does not exist.
Request Parameters
sourcestring path requiredThe template source: ‘private’, ‘github’, or ‘gitlab’publisherstring path requiredOrganization that owns the templatenamestring path requiredThe template name
Request Body
versionstring requiredThe semantic version of the template to publish.
Responses
operationIDstring requiredThe unique identifier for the publish operation.- The URLs to upload template artifacts to.
- ↳
archivestring requiredThe pre-signed URL for uploading the template archive.
Get Template Version
/api/preview/registry/templates/{source}/{publisher}/{name}/versions/{version}Retrieves metadata for a specific version of a registry template. The template is identified by its source (e.g. ‘private’, ‘github’, or ‘gitlab’), publisher organization, and name. The version parameter accepts either a specific semantic version string or the special value ’latest’ to retrieve the most recent version. The response includes the template’s name, display name, description, runtime information, language, readme URL, download URL (a pre-signed URL valid for at least 5 minutes for retrieving the .tar.gz archive), repository slug (for VCS-backed templates), visibility, updated timestamp, metadata, and configuration values. Returns 400 if a specific version is provided for VCS-backed templates (which do not support versioning), or 404 if the template version does not exist.
Request Parameters
sourcestring path requiredThe template source: ‘private’, ‘github’, or ‘gitlab’publisherstring path requiredOrganization that owns the templatenamestring path requiredThe template nameversionstring path requiredSemantic version string or ’latest'
Responses
namestring requiredThe unique identifier name of the template.publisherstring requiredThe organization or user that published the template.sourcestring requiredThe source identifier indicating where the template originates from.displayNamestring requiredThe human-readable display name shown in the UI.descriptionstring optionalA free-form text description of the template’s purpose.- The runtime that the template uses with optional configuration.
- ↳
namestring optionalThe runtime language or platform, e.g. ’nodejs’, ‘python’, ‘go’, ‘dotnet’, ‘java’, ‘yaml’. - ↳
optionsmap[string]object optionalOptional configuration options for the runtime. languageenum requiredThe language that the template is in, inferred from the runtime. This may differ from the runtime (e.g., dotnet runtime with C# language, nodejs runtime with TypeScript language) or be the same (e.g., python).Values:unknown,python,go,dotnet,java,javascript,typescript,yamlreadmeURLstring optionalReadmeURL is just a pre-signed URL, derived from the artifact key.downloadURLstring requiredAn URL, valid for at least 5 minutes that you can retrieve the full download bundle for your template.
The bundle will be a .tar.gz.
repoSlugstring optionalA link to the hosting repository. Non-VCS backed templates do not have a repo slug as of now.visibilityenum requiredThe visibility of the template (public or private).Values:public,privateupdatedAtstring requiredThe timestamp when the template was last updated.metadatamap[string]string optionalKey-value metadata associated with the template.- Configuration values for the template.
urlstring requiredFor registry-backed templates, the URL will be a registry:// URL. For VCS-backed templates, this will be the VCS URL (e.g., GitHub, GitLab).
Delete Template Version
/api/preview/registry/templates/{source}/{publisher}/{name}/versions/{version}Removes a specific version of a template from the registry. The template is identified by its source (e.g. ‘private’, ‘github’, or ‘gitlab’), publisher organization, name, and semantic version. If this is the last remaining version of the template, the ‘force’ query parameter must be set to true; doing so will also delete the template itself. Returns 204 No Content on success, or 400 if an invalid query parameter is provided.
Request Parameters
sourcestring path requiredThe template source: ‘private’, ‘github’, or ‘gitlab’publisherstring path requiredOrganization that owns the templatenamestring path requiredThe template nameversionstring path requiredSemantic version string of the template version to deleteforceboolean query optionalWhen true, allows deletion of the final remaining template version
Responses
Post Publish Template Version Complete
/api/preview/registry/templates/{source}/{publisher}/{name}/versions/{version}/completeFinalizes the second step of the two-phase template version publish workflow. After initiating a publish with PostPublishTemplateVersion and uploading the template archive (.tar.gz) to the pre-signed URL, call this endpoint with the operationID to complete the publish. The service validates that the archive was uploaded successfully before making the version available in the registry. Once complete, the template becomes available to the publisher’s organization. Returns 201 Created on success, 400 for invalid operation state, 404 if the publish operation is not found, or 409 if the version already exists.
Request Parameters
sourcestring path requiredThe template source: ‘private’, ‘github’, or ‘gitlab’publisherstring path requiredOrganization that owns the templatenamestring path requiredThe template nameversionstring path requiredSemantic version string of the template version to complete
Request Body
operationIDstring requiredThe identifier of the publish operation to complete.
Responses
Thank you for your feedback!
If you have a question about how to use Pulumi, reach out in Community Slack.
Open an issue on GitHub to report a problem or suggest an improvement.