Connect apps service (gRPC)#
Service for creating and managing Connect Apps
Endpoints#
Archive connect apps#
gRPC /nominal.connect.v1.ConnectAppsService/ArchiveConnectApps
Archive Connect Apps
Request: ArchiveConnectAppsRequest
ridsarray of string
Response: ArchiveConnectAppsResponse
ridsarray of string
Request
import grpc
from nominal.protos.connect.v1 import connect_apps_pb2, connect_apps_pb2_grpc
channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
connect_apps_service = connect_apps_pb2_grpc.ConnectAppsServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]
request = connect_apps_pb2.ArchiveConnectAppsRequest(rids=["<rids>"])
response = connect_apps_service.ArchiveConnectApps(request, metadata=auth)
print(response)
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
connectv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/connect/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
)
func main() {
conn, err := grpc.NewClient("api.gov.nominal.io:443",
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
connectAppsService := connectv1.NewConnectAppsServiceClient(conn)
ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")
request := &connectv1.ArchiveConnectAppsRequest{
Rids: []string{
"<rids>",
},
}
response, err := connectAppsService.ArchiveConnectApps(ctx, request)
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Response
{
"rids": [
"<rids>"
]
}
Commit#
gRPC /nominal.connect.v1.ConnectAppsService/Commit
Commit a bundle to the main branch
Request: CommitRequest
ridstring
bundleConnectAppBundle
Fields of
ConnectAppBundles3_pathHandle
Fields of
Handles3string
metadataConnectAppBundleMetadata
Fields of
ConnectAppBundleMetadatatitlestring
contains_experimental_featuresboolean
sha256_checksumstring
connect_file_pathstringname of the .connect file inside the bundle. Will default to app.connect
messagestring
Response: CommitResponse
appConnectApp
Fields of
ConnectAppridstring
commitstring
metadataConnectAppMetadata
Fields of
ConnectAppMetadataridstring
display_namestring
descriptionstring
labelsarray of string
propertiesmap of string to string
is_archivedboolean
is_publishedboolean
created_atstring (date-time)
created_bystring
updated_atstring (date-time)
workspacestring
bundleConnectAppBundle
Fields of
ConnectAppBundles3_pathHandle
Fields of
Handles3string
metadataConnectAppBundleMetadata
Fields of
ConnectAppBundleMetadatatitlestring
contains_experimental_featuresboolean
sha256_checksumstring
connect_file_pathstringname of the .connect file inside the bundle. Will default to app.connect
version_numberinteger (uint64)
Request
import grpc
from nominal.protos.connect.v1 import connect_apps_pb2, connect_apps_pb2_grpc
channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
connect_apps_service = connect_apps_pb2_grpc.ConnectAppsServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]
request = connect_apps_pb2.CommitRequest(
rid="<rid>",
bundle={
"s3_path": {"s3": "<s3>"},
"metadata": {
"title": "<title>",
"contains_experimental_features": True,
"sha256_checksum": "<sha256 checksum>",
"connect_file_path": "<connect file path>",
},
},
message="<message>",
)
response = connect_apps_service.Commit(request, metadata=auth)
print(response)
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
connectv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/connect/v1"
"github.com/nominal-io/nominal-api-protos-go/nominal/protos/types"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
"google.golang.org/protobuf/proto"
)
func main() {
conn, err := grpc.NewClient("api.gov.nominal.io:443",
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
connectAppsService := connectv1.NewConnectAppsServiceClient(conn)
ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")
request := &connectv1.CommitRequest{
Rid: "<rid>",
Bundle: &connectv1.ConnectAppBundle{
S3Path: &types.Handle{
Handle: &types.Handle_S3{S3: "<s3>"},
},
Metadata: &connectv1.ConnectAppBundleMetadata{
Title: "<title>",
ContainsExperimentalFeatures: true,
Sha256Checksum: "<sha256 checksum>",
ConnectFilePath: proto.String("<connect file path>"),
},
},
Message: "<message>",
}
response, err := connectAppsService.Commit(ctx, request)
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Response
{
"app": {
"rid": "<rid>",
"commit": "<commit>",
"metadata": {
"rid": "<rid>",
"display_name": "<display name>",
"description": "<description>",
"labels": [
"<labels>"
],
"properties": {
"<key>": "<value>"
},
"is_archived": true,
"is_published": true,
"created_at": "2026-01-01T00:00:00Z",
"created_by": "<created by>",
"updated_at": "2026-01-01T00:00:00Z",
"workspace": "<workspace>"
},
"bundle": {
"s3_path": {
"s3": "<s3>"
},
"metadata": {
"title": "<title>",
"contains_experimental_features": true,
"sha256_checksum": "<sha256 checksum>",
"connect_file_path": "<connect file path>"
}
},
"version_number": 1
}
}
Create connect app#
gRPC /nominal.connect.v1.ConnectAppsService/CreateConnectApp
Create a new Connect App, either with a bundle file or as an empty app
Request: CreateConnectAppRequest
display_namestringseparate from the bundle title to allow for creating empty apps At least 1 character.
descriptionstring
labelsarray of string
propertiesmap of string to string
is_publishedboolean
workspacestring
bundleConnectAppBundleoptional to allow for creating “empty” in-progress connect apps
Fields of
ConnectAppBundles3_pathHandle
Fields of
Handles3string
metadataConnectAppBundleMetadata
Fields of
ConnectAppBundleMetadatatitlestring
contains_experimental_featuresboolean
sha256_checksumstring
connect_file_pathstringname of the .connect file inside the bundle. Will default to app.connect
commit_messagestring
Response: CreateConnectAppResponse
appConnectApp
Fields of
ConnectAppridstring
commitstring
metadataConnectAppMetadata
Fields of
ConnectAppMetadataridstring
display_namestring
descriptionstring
labelsarray of string
propertiesmap of string to string
is_archivedboolean
is_publishedboolean
created_atstring (date-time)
created_bystring
updated_atstring (date-time)
workspacestring
bundleConnectAppBundle
Fields of
ConnectAppBundles3_pathHandle
Fields of
Handles3string
metadataConnectAppBundleMetadata
Fields of
ConnectAppBundleMetadatatitlestring
contains_experimental_featuresboolean
sha256_checksumstring
connect_file_pathstringname of the .connect file inside the bundle. Will default to app.connect
version_numberinteger (uint64)
Request
import grpc
from nominal.protos.connect.v1 import connect_apps_pb2, connect_apps_pb2_grpc
channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
connect_apps_service = connect_apps_pb2_grpc.ConnectAppsServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]
request = connect_apps_pb2.CreateConnectAppRequest(
display_name="<display name>",
description="<description>",
labels=["<labels>"],
properties={"<key>": "<value>"},
is_published=True,
workspace="<workspace>",
bundle={
"s3_path": {"s3": "<s3>"},
"metadata": {
"title": "<title>",
"contains_experimental_features": True,
"sha256_checksum": "<sha256 checksum>",
"connect_file_path": "<connect file path>",
},
},
commit_message="<commit message>",
)
response = connect_apps_service.CreateConnectApp(request, metadata=auth)
print(response)
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
connectv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/connect/v1"
"github.com/nominal-io/nominal-api-protos-go/nominal/protos/types"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
"google.golang.org/protobuf/proto"
)
func main() {
conn, err := grpc.NewClient("api.gov.nominal.io:443",
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
connectAppsService := connectv1.NewConnectAppsServiceClient(conn)
ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")
request := &connectv1.CreateConnectAppRequest{
DisplayName: "<display name>",
Description: proto.String("<description>"),
Labels: []string{
"<labels>",
},
Properties: map[string]string{
"<key>": "<value>",
},
IsPublished: proto.Bool(true),
Workspace: "<workspace>",
Bundle: &connectv1.ConnectAppBundle{
S3Path: &types.Handle{
Handle: &types.Handle_S3{S3: "<s3>"},
},
Metadata: &connectv1.ConnectAppBundleMetadata{
Title: "<title>",
ContainsExperimentalFeatures: true,
Sha256Checksum: "<sha256 checksum>",
ConnectFilePath: proto.String("<connect file path>"),
},
},
CommitMessage: "<commit message>",
}
response, err := connectAppsService.CreateConnectApp(ctx, request)
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Response
{
"app": {
"rid": "<rid>",
"commit": "<commit>",
"metadata": {
"rid": "<rid>",
"display_name": "<display name>",
"description": "<description>",
"labels": [
"<labels>"
],
"properties": {
"<key>": "<value>"
},
"is_archived": true,
"is_published": true,
"created_at": "2026-01-01T00:00:00Z",
"created_by": "<created by>",
"updated_at": "2026-01-01T00:00:00Z",
"workspace": "<workspace>"
},
"bundle": {
"s3_path": {
"s3": "<s3>"
},
"metadata": {
"title": "<title>",
"contains_experimental_features": true,
"sha256_checksum": "<sha256 checksum>",
"connect_file_path": "<connect file path>"
}
},
"version_number": 1
}
}
Get connect app#
gRPC /nominal.connect.v1.ConnectAppsService/GetConnectApp
Get a Connect App by its RID
Request: GetConnectAppRequest
ridstring
branch_or_commitBranchOrCommit
Fields of
BranchOrCommit- one of
branch,commitrequired
branchstring
commitstring
- one of
Response: GetConnectAppResponse
appConnectApp
Fields of
ConnectAppridstring
commitstring
metadataConnectAppMetadata
Fields of
ConnectAppMetadataridstring
display_namestring
descriptionstring
labelsarray of string
propertiesmap of string to string
is_archivedboolean
is_publishedboolean
created_atstring (date-time)
created_bystring
updated_atstring (date-time)
workspacestring
bundleConnectAppBundle
Fields of
ConnectAppBundles3_pathHandle
Fields of
Handles3string
metadataConnectAppBundleMetadata
Fields of
ConnectAppBundleMetadatatitlestring
contains_experimental_featuresboolean
sha256_checksumstring
connect_file_pathstringname of the .connect file inside the bundle. Will default to app.connect
version_numberinteger (uint64)
Request
import grpc
from nominal.protos.connect.v1 import connect_apps_pb2, connect_apps_pb2_grpc
channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
connect_apps_service = connect_apps_pb2_grpc.ConnectAppsServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]
request = connect_apps_pb2.GetConnectAppRequest(
rid="<rid>",
branch_or_commit={"branch": "<branch>"},
)
response = connect_apps_service.GetConnectApp(request, metadata=auth)
print(response)
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
connectv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/connect/v1"
versioningv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/versioning/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
)
func main() {
conn, err := grpc.NewClient("api.gov.nominal.io:443",
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
connectAppsService := connectv1.NewConnectAppsServiceClient(conn)
ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")
request := &connectv1.GetConnectAppRequest{
Rid: "<rid>",
BranchOrCommit: &versioningv1.BranchOrCommit{
BranchOrCommit: &versioningv1.BranchOrCommit_Branch{Branch: "<branch>"},
},
}
response, err := connectAppsService.GetConnectApp(ctx, request)
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Response
{
"app": {
"rid": "<rid>",
"commit": "<commit>",
"metadata": {
"rid": "<rid>",
"display_name": "<display name>",
"description": "<description>",
"labels": [
"<labels>"
],
"properties": {
"<key>": "<value>"
},
"is_archived": true,
"is_published": true,
"created_at": "2026-01-01T00:00:00Z",
"created_by": "<created by>",
"updated_at": "2026-01-01T00:00:00Z",
"workspace": "<workspace>"
},
"bundle": {
"s3_path": {
"s3": "<s3>"
},
"metadata": {
"title": "<title>",
"contains_experimental_features": true,
"sha256_checksum": "<sha256 checksum>",
"connect_file_path": "<connect file path>"
}
},
"version_number": 1
}
}
Get connect app bundle download URL#
gRPC /nominal.connect.v1.ConnectAppsService/GetConnectAppBundleDownloadUrl
Get a pre-signed URL for downloading the bundle of a Connect App at a specific commit or the latest commit on the main branch
Request: GetConnectAppBundleDownloadUrlRequest
ridstring
branch_or_commitBranchOrCommit
Fields of
BranchOrCommit- one of
branch,commitrequired
branchstring
commitstring
- one of
Response: GetConnectAppBundleDownloadUrlResponse
urlstring
Request
import grpc
from nominal.protos.connect.v1 import connect_apps_pb2, connect_apps_pb2_grpc
channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
connect_apps_service = connect_apps_pb2_grpc.ConnectAppsServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]
request = connect_apps_pb2.GetConnectAppBundleDownloadUrlRequest(
rid="<rid>",
branch_or_commit={"branch": "<branch>"},
)
response = connect_apps_service.GetConnectAppBundleDownloadUrl(request, metadata=auth)
print(response)
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
connectv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/connect/v1"
versioningv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/versioning/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
)
func main() {
conn, err := grpc.NewClient("api.gov.nominal.io:443",
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
connectAppsService := connectv1.NewConnectAppsServiceClient(conn)
ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")
request := &connectv1.GetConnectAppBundleDownloadUrlRequest{
Rid: "<rid>",
BranchOrCommit: &versioningv1.BranchOrCommit{
BranchOrCommit: &versioningv1.BranchOrCommit_Branch{Branch: "<branch>"},
},
}
response, err := connectAppsService.GetConnectAppBundleDownloadUrl(ctx, request)
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Response
{
"url": "<url>"
}
Search connect apps#
gRPC /nominal.connect.v1.ConnectAppsService/SearchConnectApps
Searches for Connect Apps, returning paged results. Workspaces the caller lacks workspace:view on are filtered out rather than failing the call.
Request: SearchConnectAppsRequest
queryConnectAppSearchQuery
Fields of
ConnectAppSearchQuery- one of 7 fields required
search_textstring
labelstring
propertyProperty
Fields of
Propertynamestring
valuestring
andConnectAppSearchAndQuery
Fields of
ConnectAppSearchAndQueryqueriesarray ofConnectAppSearchQuery
orConnectAppSearchOrQuery
Fields of
ConnectAppSearchOrQueryqueriesarray ofConnectAppSearchQuery
workspacestring
is_archivedboolean
optionsSearchConnectAppsOptions
Fields of
SearchConnectAppsOptionsis_descendingbooleandefault is true
sort_fieldSearchConnectAppsSortFielddefault is title
Values of
SearchConnectAppsSortFieldSEARCH_CONNECT_APPS_SORT_FIELD_UNSPECIFIED
SEARCH_CONNECT_APPS_SORT_FIELD_TITLE
SEARCH_CONNECT_APPS_SORT_FIELD_CREATED_AT
SEARCH_CONNECT_APPS_SORT_FIELD_DISPLAY_NAME
page_sizeintegerFrom 1 to 1,000.
next_page_tokenstring
Response: SearchConnectAppsResponse
app_metadataarray ofConnectAppMetadata
Fields of
ConnectAppMetadataridstring
display_namestring
descriptionstring
labelsarray of string
propertiesmap of string to string
is_archivedboolean
is_publishedboolean
created_atstring (date-time)
created_bystring
updated_atstring (date-time)
workspacestring
next_page_tokenstring
Request
import grpc
from nominal.protos.connect.v1 import connect_apps_pb2, connect_apps_pb2_grpc
channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
connect_apps_service = connect_apps_pb2_grpc.ConnectAppsServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]
request = connect_apps_pb2.SearchConnectAppsRequest(
query={"search_text": "<search text>"},
options={
"is_descending": True,
"sort_field": "SEARCH_CONNECT_APPS_SORT_FIELD_TITLE",
},
page_size=1,
next_page_token="<next page token>",
)
response = connect_apps_service.SearchConnectApps(request, metadata=auth)
print(response)
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
connectv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/connect/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
"google.golang.org/protobuf/proto"
)
func main() {
conn, err := grpc.NewClient("api.gov.nominal.io:443",
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
connectAppsService := connectv1.NewConnectAppsServiceClient(conn)
ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")
request := &connectv1.SearchConnectAppsRequest{
Query: &connectv1.ConnectAppSearchQuery{
Query: &connectv1.ConnectAppSearchQuery_SearchText{SearchText: "<search text>"},
},
Options: &connectv1.SearchConnectAppsOptions{
IsDescending: proto.Bool(true),
SortField: connectv1.SearchConnectAppsSortField_SEARCH_CONNECT_APPS_SORT_FIELD_TITLE.Enum(),
},
PageSize: proto.Int32(1),
NextPageToken: proto.String("<next page token>"),
}
response, err := connectAppsService.SearchConnectApps(ctx, request)
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Response
{
"app_metadata": [
{
"rid": "<rid>",
"display_name": "<display name>",
"description": "<description>",
"labels": [
"<labels>"
],
"properties": {
"<key>": "<value>"
},
"is_archived": true,
"is_published": true,
"created_at": "2026-01-01T00:00:00Z",
"created_by": "<created by>",
"updated_at": "2026-01-01T00:00:00Z",
"workspace": "<workspace>"
}
],
"next_page_token": "<next page token>"
}
Unarchive connect apps#
gRPC /nominal.connect.v1.ConnectAppsService/UnarchiveConnectApps
Unarchive Connect Apps
Request: UnarchiveConnectAppsRequest
ridsarray of string
Response: UnarchiveConnectAppsResponse
ridsarray of string
Request
import grpc
from nominal.protos.connect.v1 import connect_apps_pb2, connect_apps_pb2_grpc
channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
connect_apps_service = connect_apps_pb2_grpc.ConnectAppsServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]
request = connect_apps_pb2.UnarchiveConnectAppsRequest(rids=["<rids>"])
response = connect_apps_service.UnarchiveConnectApps(request, metadata=auth)
print(response)
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
connectv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/connect/v1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
)
func main() {
conn, err := grpc.NewClient("api.gov.nominal.io:443",
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
connectAppsService := connectv1.NewConnectAppsServiceClient(conn)
ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")
request := &connectv1.UnarchiveConnectAppsRequest{
Rids: []string{
"<rids>",
},
}
response, err := connectAppsService.UnarchiveConnectApps(ctx, request)
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Response
{
"rids": [
"<rids>"
]
}
Update connect app metadata#
gRPC /nominal.connect.v1.ConnectAppsService/UpdateConnectAppMetadata
Update metadata fields of a Connect App
Request: UpdateConnectAppMetadataRequest
ridstring
display_namestring
descriptionstring
labelsLabelUpdateWrapper
Fields of
LabelUpdateWrapperlabelsarray of string
propertiesPropertyUpdateWrapper
Fields of
PropertyUpdateWrapperpropertiesmap of string to string
is_archivedboolean
is_publishedboolean
Response: UpdateConnectAppMetadataResponse
app_metadataConnectAppMetadata
Fields of
ConnectAppMetadataridstring
display_namestring
descriptionstring
labelsarray of string
propertiesmap of string to string
is_archivedboolean
is_publishedboolean
created_atstring (date-time)
created_bystring
updated_atstring (date-time)
workspacestring
Request
import grpc
from nominal.protos.connect.v1 import connect_apps_pb2, connect_apps_pb2_grpc
channel = grpc.secure_channel("api.gov.nominal.io:443", grpc.ssl_channel_credentials())
connect_apps_service = connect_apps_pb2_grpc.ConnectAppsServiceStub(channel)
auth = [("authorization", "Bearer <api key>")]
request = connect_apps_pb2.UpdateConnectAppMetadataRequest(
rid="<rid>",
display_name="<display name>",
description="<description>",
labels={"labels": ["<labels>"]},
properties={"properties": {"<key>": "<value>"}},
is_archived=True,
is_published=True,
)
response = connect_apps_service.UpdateConnectAppMetadata(request, metadata=auth)
print(response)
package main
import (
"context"
"crypto/tls"
"fmt"
"log"
connectv1 "github.com/nominal-io/nominal-api-protos-go/nominal/protos/connect/v1"
"github.com/nominal-io/nominal-api-protos-go/nominal/protos/types"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
"google.golang.org/grpc/metadata"
"google.golang.org/protobuf/proto"
)
func main() {
conn, err := grpc.NewClient("api.gov.nominal.io:443",
grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{})))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
connectAppsService := connectv1.NewConnectAppsServiceClient(conn)
ctx := metadata.AppendToOutgoingContext(context.Background(), "authorization", "Bearer <api key>")
request := &connectv1.UpdateConnectAppMetadataRequest{
Rid: "<rid>",
DisplayName: proto.String("<display name>"),
Description: proto.String("<description>"),
Labels: &types.LabelUpdateWrapper{
Labels: []string{
"<labels>",
},
},
Properties: &types.PropertyUpdateWrapper{
Properties: map[string]string{
"<key>": "<value>",
},
},
IsArchived: proto.Bool(true),
IsPublished: proto.Bool(true),
}
response, err := connectAppsService.UpdateConnectAppMetadata(ctx, request)
if err != nil {
log.Fatal(err)
}
fmt.Println(response)
}
Response
{
"app_metadata": {
"rid": "<rid>",
"display_name": "<display name>",
"description": "<description>",
"labels": [
"<labels>"
],
"properties": {
"<key>": "<value>"
},
"is_archived": true,
"is_published": true,
"created_at": "2026-01-01T00:00:00Z",
"created_by": "<created by>",
"updated_at": "2026-01-01T00:00:00Z",
"workspace": "<workspace>"
}
}
Errors#
Errors shows how these errors are sent.
Code |
Reason |
Message |
|---|---|---|
|
|
Cannot commit to an archived connect app |
|
|
Invalid search token |
|
|
Connect app not found |
|
|
Connect app commit not found |
|
|
Connect app bundle is missing in this commit |
Types#
BranchOrCommit#
Set exactly one of the fields below.
- one of
branch,commitrequired
branchstring
commitstring
ConnectApp#
ridstring
commitstring
metadataConnectAppMetadata
bundleConnectAppBundle
version_numberinteger (uint64)
ConnectAppBundle#
s3_pathHandle
metadataConnectAppBundleMetadata
ConnectAppBundleMetadata#
wrapper message for metadata that will probably be extended in the future
titlestring
contains_experimental_featuresboolean
sha256_checksumstring
connect_file_pathstringname of the .connect file inside the bundle. Will default to app.connect
ConnectAppMetadata#
ridstring
display_namestring
descriptionstring
labelsarray of string
propertiesmap of string to string
is_archivedboolean
is_publishedboolean
created_atstring (date-time)
created_bystring
updated_atstring (date-time)
workspacestring
ConnectAppSearchAndQuery#
queriesarray ofConnectAppSearchQuery
ConnectAppSearchOrQuery#
queriesarray ofConnectAppSearchQuery
ConnectAppSearchQuery#
Set exactly one of the fields below.
- one of 7 fields required
Handle#
s3string
LabelUpdateWrapper#
Wrapper classes to allow for optional fields on update requests
labelsarray of string
Property#
namestring
valuestring
PropertyUpdateWrapper#
propertiesmap of string to string
SearchConnectAppsOptions#
is_descendingbooleandefault is true
sort_fieldSearchConnectAppsSortFielddefault is title
SearchConnectAppsSortField#
SEARCH_CONNECT_APPS_SORT_FIELD_UNSPECIFIED
SEARCH_CONNECT_APPS_SORT_FIELD_TITLE
SEARCH_CONNECT_APPS_SORT_FIELD_CREATED_AT
SEARCH_CONNECT_APPS_SORT_FIELD_DISPLAY_NAME
Page design based on Scalar, MIT License.