{
"binary": "sylphx",
"generated": "@generated by sylphx-gen 0.1.0 from contracts@347fa9e40a69b6cbf82eb17c6bcef92ab0766ef0cb3eb28aa7a62d21e0733f6b. Do not edit.",
"global_flags": [
{
"default": "table",
"flag": "--output",
"summary": "Output format; tables show name, Ready, and age.",
"values": [
"table",
"json",
"yaml",
"name"
]
},
{
"flag": "--from-file",
"summary": "Read the whole request body from a YAML or JSON file.",
"type": "path"
}
],
"services": [
{
"collections": [
{
"collection": "orgs",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*}",
"method": "access.orgs.get",
"permission": "access:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}"
},
"summary": "Gets an org.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable spec fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/orgs",
"method": "access.orgs.list",
"paginates": true,
"permission": "access:read",
"positional": null,
"summary": "Lists orgs the caller can see.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"field": "org.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "org.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "org.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "org.spec.slug",
"flag": "--spec.slug",
"required": true,
"summary": "Globally unique handle, resolved to the id by clients, never the server.",
"type": "string"
},
{
"field": "org.spec.api_version",
"flag": "--spec.api-version",
"summary": "The API version (`YYYY-MM-DD`) requests are served at when neither the request nor the key pins one (§5).",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/orgs",
"method": "access.orgs.create",
"permission": "access:admin",
"positional": null,
"resource_field": "org",
"summary": "Creates an org. Access assigns the id.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "org.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "org.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "org.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "org.spec.slug",
"flag": "--spec.slug",
"required": true,
"summary": "Globally unique handle, resolved to the id by clients, never the server.",
"type": "string"
},
{
"field": "org.spec.api_version",
"flag": "--spec.api-version",
"summary": "The API version (`YYYY-MM-DD`) requests are served at when neither the request nor the key pins one (§5).",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{org.name=orgs/*}",
"method": "access.orgs.update",
"permission": "access:admin",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "org.name",
"pattern": "orgs/{org}"
},
"resource_field": "org",
"sends_etag": true,
"summary": "Updates an org.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also delete every child Resource; without it a parent with children fails with FAILED_PRECONDITION.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*}",
"method": "access.orgs.delete",
"permission": "access:admin",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}"
},
"summary": "Deletes an org and everything in it. Deletion cascades through every service, so it returns an Operation.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "orgs",
"resource_type": "access.sylphx.com/Org"
},
{
"collection": "projects",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*}",
"method": "access.projects.get",
"permission": "access:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}"
},
"summary": "Gets a project.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable spec fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*}/projects",
"method": "access.projects.list",
"paginates": true,
"permission": "access:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}"
},
"summary": "Lists projects in an org.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "project.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "project.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "project.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "project.spec.slug",
"flag": "--spec.slug",
"required": true,
"summary": "Unique within the org.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*}/projects",
"method": "access.projects.create",
"permission": "access:admin",
"positional": null,
"resource_field": "project",
"summary": "Creates a project. Access assigns the id.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "project.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "project.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "project.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "project.spec.slug",
"flag": "--spec.slug",
"required": true,
"summary": "Unique within the org.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{project.name=orgs/*/projects/*}",
"method": "access.projects.update",
"permission": "access:admin",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "project.name",
"pattern": "orgs/{org}/projects/{project}"
},
"resource_field": "project",
"sends_etag": true,
"summary": "Updates a project.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also delete every child Resource; without it a parent with children fails with FAILED_PRECONDITION.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*}",
"method": "access.projects.delete",
"permission": "access:admin",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}"
},
"summary": "Deletes a project.",
"verb": "delete"
}
],
"noun": "projects",
"resource_type": "access.sylphx.com/Project"
},
{
"collection": "envs",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*}",
"method": "access.envs.get",
"permission": "access:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Gets an environment.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable spec fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*}/envs",
"method": "access.envs.list",
"paginates": true,
"permission": "access:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}"
},
"summary": "Lists environments in a project.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "environment.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "environment.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "environment.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "environment.spec.slug",
"flag": "--spec.slug",
"required": true,
"summary": "Unique within the project, for example `production`.",
"type": "string"
},
{
"field": "environment.spec.mode",
"flag": "--spec.mode",
"required": true,
"summary": "Live or test; a test key never touches a live environment.",
"type": "enum",
"values": [
"live",
"test"
]
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*}/envs",
"method": "access.envs.create",
"permission": "access:admin",
"positional": null,
"resource_field": "environment",
"summary": "Creates an environment. Access assigns the id.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "environment.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "environment.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "environment.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "environment.spec.slug",
"flag": "--spec.slug",
"required": true,
"summary": "Unique within the project, for example `production`.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{environment.name=orgs/*/projects/*/envs/*}",
"method": "access.envs.update",
"permission": "access:admin",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "environment.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"resource_field": "environment",
"sends_etag": true,
"summary": "Updates an environment.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also delete every child Resource; without it a parent with children fails with FAILED_PRECONDITION.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*}",
"method": "access.envs.delete",
"permission": "access:admin",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Deletes an environment.",
"verb": "delete"
}
],
"noun": "envs",
"resource_type": "access.sylphx.com/Environment"
},
{
"collection": "api_keys",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/api_keys/*}",
"method": "access.api_keys.get",
"permission": "access:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/api_keys/{api_key}"
},
"summary": "Gets an API key.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable spec fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/api_keys",
"method": "access.api_keys.list",
"paginates": true,
"permission": "access:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists API keys in an environment, or the org-wide keys of an org.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "api_key.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "api_key.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "api_key.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "api_key.spec.kind",
"flag": "--spec.kind",
"required": true,
"summary": "Secret (server-side) or publishable (browser, `publishable_ok` methods only).",
"type": "enum",
"values": [
"secret",
"publishable"
]
},
{
"field": "api_key.spec.scopes",
"flag": "--spec.scopes",
"repeated": true,
"required": true,
"summary": "Scopes `<service>:<action>` (access-and-keys.md §5.1), a subset of the creator's effective scopes.",
"type": "string"
},
{
"field": "api_key.spec.label",
"flag": "--spec.label",
"summary": "A free-form label, for example the talent id a key was minted for.",
"type": "string"
},
{
"field": "api_key.spec.expire_time",
"flag": "--spec.expire-time",
"summary": "When the key stops verifying; required in unclaimed projects.",
"type": "timestamp"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/api_keys",
"method": "access.api_keys.create",
"permission": "access:keys:write",
"positional": null,
"resource_field": "api_key",
"summary": "Creates an API key. Access assigns the id.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "api_key.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "api_key.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "api_key.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "api_key.spec.label",
"flag": "--spec.label",
"summary": "A free-form label, for example the talent id a key was minted for.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{api_key.name=orgs/*/projects/*/envs/*/api_keys/*}",
"method": "access.api_keys.update",
"permission": "access:keys:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "api_key.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/api_keys/{api_key}"
},
"resource_field": "api_key",
"sends_etag": true,
"summary": "Updates an API key.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/api_keys/*}",
"method": "access.api_keys.delete",
"permission": "access:keys:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/api_keys/{api_key}"
},
"summary": "Deletes an API key.",
"verb": "delete"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Revoke only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/api_keys/*}:revoke",
"method": "access.api_keys.revoke",
"permission": "access:keys:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/api_keys/{api_key}"
},
"summary": "Revokes an API key immediately; revocation rides the priority chunk.",
"verb": "revoke"
},
{
"effect": "write",
"flags": [
{
"field": "grace_period",
"flag": "--grace-period",
"summary": "How long the old key keeps verifying; default 24h.",
"type": "duration"
},
{
"field": "etag",
"flag": "--etag",
"summary": "Roll only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/api_keys/*}:roll",
"method": "access.api_keys.roll",
"permission": "access:keys:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/api_keys/{api_key}"
},
"summary": "Rolls an API key: returns a new key with the same spec and revokes the old one after the grace period.",
"verb": "roll"
}
],
"noun": "api-keys",
"resource_type": "access.sylphx.com/ApiKey"
}
],
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/whoami",
"method": "access.whoami",
"permission": "access:whoami",
"positional": null,
"summary": "Returns the caller: the principal and the scope of the key or token that authenticated this request. Clients fill their org, project, and env defaults from it (resource-api-and-clients.md §3.2); every valid key may call it, whatever its scopes.",
"verb": "whoami"
}
],
"display_name": "Sylphx Access",
"noun": "access",
"stage": "preview"
},
{
"collections": [
{
"collection": "ai_models",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=ai_models/*}",
"method": "ai.ai_models.get",
"permission": "ai:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "ai_models/{ai_model}"
},
"summary": "Gets an AI model.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/ai_models",
"method": "ai.ai_models.list",
"paginates": true,
"permission": "ai:read",
"positional": null,
"summary": "Lists the admitted catalog; filter by `brand`, `modality`, or `model`.",
"verb": "list"
}
],
"noun": "ai-models",
"resource_type": "ai.sylphx.com/AiModel"
}
],
"commands": [],
"display_name": "Sylphx AI",
"noun": "ai",
"stage": "preview"
},
{
"collections": [
{
"collection": "artifacts",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/artifacts/*}",
"method": "artifacts.artifacts.get",
"permission": "artifacts:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/artifacts/{artifact}"
},
"summary": "Gets an artifact.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*}/artifacts",
"method": "artifacts.artifacts.list",
"paginates": true,
"permission": "artifacts:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}"
},
"summary": "Lists a project's artifacts; filter by `digest`, `kind`, or `subject`.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "artifact.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "artifact.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "artifact.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "artifact.digest",
"flag": "--digest",
"required": true,
"summary": "The algorithm-qualified digest of the stored bytes, for example `sha256:4f1c…`.",
"type": "string"
},
{
"field": "artifact.kind",
"flag": "--kind",
"required": true,
"summary": "What the Artifact is.",
"type": "enum",
"values": [
"image",
"sbom",
"provenance",
"signature",
"bundle"
]
},
{
"field": "artifact.media_type",
"flag": "--media-type",
"required": true,
"summary": "The media type, for example `application/vnd.oci.image.manifest.v1+json`.",
"type": "string"
},
{
"field": "artifact.size_bytes",
"flag": "--size-bytes",
"required": true,
"summary": "The size of the stored bytes.",
"type": "int"
},
{
"field": "artifact.subject",
"flag": "--subject",
"summary": "The Artifact this one describes, for an SBOM, provenance, or signature.",
"type": "string"
},
{
"field": "artifact.source_digests",
"flag": "--source-digests",
"repeated": true,
"summary": "Digests of the sources and inputs that produced it.",
"type": "string"
},
{
"field": "artifact.retention",
"flag": "--retention",
"summary": "How long the Artifact is kept.",
"type": "enum",
"values": [
"standard",
"referenced"
]
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*}/artifacts",
"method": "artifacts.artifacts.create",
"permission": "artifacts:write",
"positional": {
"arg": "ID",
"field": "artifact_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "artifact",
"summary": "Registers an artifact whose bytes were pushed by digest; verification runs after.",
"verb": "create"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/artifacts/*}",
"method": "artifacts.artifacts.delete",
"permission": "artifacts:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/artifacts/{artifact}"
},
"summary": "Deletes an artifact; fails while a Release references it or a legal hold is active.",
"verb": "delete"
}
],
"noun": "artifacts",
"resource_type": "artifacts.sylphx.com/Artifact"
}
],
"commands": [],
"display_name": "Sylphx Artifacts",
"noun": "artifacts",
"stage": "preview"
},
{
"collections": [
{
"collection": "auth_configs",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/auth_configs/*}",
"method": "auth.auth_configs.get",
"permission": "auth:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/auth_configs/{auth_config}"
},
"summary": "Gets an auth config.",
"verb": "get"
},
{
"effect": "write",
"flags": [
{
"field": "auth_config.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "auth_config.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "auth_config.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "auth_config.spec.auth_methods",
"flag": "--spec.auth-methods",
"repeated": true,
"summary": "Sign-in methods offered to end users.",
"type": "enum",
"values": [
"password",
"magic_link",
"email_otp",
"passkey",
"totp",
"oidc",
"saml"
]
},
{
"field": "auth_config.spec.mfa_required",
"flag": "--spec.mfa-required",
"summary": "Require a second factor for every end user.",
"type": "bool"
},
{
"field": "auth_config.spec.passkey_policy.required",
"flag": "--spec.passkey-policy.required",
"summary": "Require a passkey for every end user.",
"type": "bool"
},
{
"field": "auth_config.spec.passkey_policy.device_bound",
"flag": "--spec.passkey-policy.device-bound",
"summary": "Refuse synced (multi-device) passkeys.",
"type": "bool"
},
{
"field": "auth_config.spec.passkey_policy.aaguid_allowlist",
"flag": "--spec.passkey-policy.aaguid-allowlist",
"repeated": true,
"summary": "Allowed authenticator AAGUIDs; empty allows any.",
"type": "string"
},
{
"field": "auth_config.spec.lockout_enabled",
"flag": "--spec.lockout-enabled",
"summary": "Progressive lockout by user and IP.",
"type": "bool"
},
{
"field": "auth_config.spec.session_policy.max_concurrent_sessions",
"flag": "--spec.session-policy.max-concurrent-sessions",
"summary": "Concurrent sessions per end user; excess sessions are revoked, oldest first. 0 is unlimited.",
"type": "int"
},
{
"field": "auth_config.spec.session_policy.idle_timeout",
"flag": "--spec.session-policy.idle-timeout",
"summary": "Revoke after this long without use; default 30d.",
"type": "duration"
},
{
"field": "auth_config.spec.session_policy.absolute_timeout",
"flag": "--spec.session-policy.absolute-timeout",
"summary": "Revoke this long after sign-in regardless of use; default 90d.",
"type": "duration"
},
{
"field": "auth_config.spec.session_policy.fingerprint_binding",
"flag": "--spec.session-policy.fingerprint-binding",
"summary": "Bind sessions to network and agent; a mismatch demands step-up.",
"type": "bool"
},
{
"field": "auth_config.spec.captcha_secret",
"flag": "--spec.captcha-secret",
"summary": "A Kernel Secrets Secret holding the CAPTCHA verifier secret; unset disables CAPTCHA.",
"type": "string"
},
{
"field": "auth_config.spec.portal.custom_domain",
"flag": "--spec.portal.custom-domain",
"summary": "A verified Network Domain serving the portal; unset uses the default origin.",
"type": "string"
},
{
"field": "auth_config.spec.portal.product_title",
"flag": "--spec.portal.product-title",
"summary": "The product name shown to end users.",
"type": "string"
},
{
"field": "auth_config.spec.portal.logo_uri",
"flag": "--spec.portal.logo-uri",
"summary": "An HTTPS logo URI.",
"type": "string"
},
{
"field": "auth_config.spec.portal.primary_color",
"flag": "--spec.portal.primary-color",
"summary": "The primary color, `#rrggbb`.",
"type": "string"
},
{
"field": "auth_config.spec.portal.sylphx_branding",
"flag": "--spec.portal.sylphx-branding",
"summary": "Show Sylphx branding.",
"type": "bool"
},
{
"field": "auth_config.spec.mail_sending_domain",
"flag": "--spec.mail-sending-domain",
"summary": "The Notify Sending Domain Auth mail is sent from; unset uses the Sylphx default.",
"type": "string"
},
{
"field": "auth_config.spec.user_sync_database",
"flag": "--spec.user-sync-database",
"summary": "A Sylphx Data database end users are synced into; unset disables sync.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the auth config when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{auth_config.name=orgs/*/projects/*/envs/*/auth_configs/*}",
"method": "auth.auth_configs.update",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "auth_config.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/auth_configs/{auth_config}"
},
"resource_field": "auth_config",
"sends_etag": true,
"summary": "Updates an auth config.",
"update_mask": "from-flags",
"verb": "update"
}
],
"noun": "auth-configs",
"resource_type": "auth.sylphx.com/AuthConfig"
},
{
"collection": "end_users",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/end_users/*}",
"method": "auth.end_users.get",
"permission": "auth:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/end_users/{end_user}"
},
"summary": "Gets an end user.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/end_users",
"method": "auth.end_users.list",
"paginates": true,
"permission": "auth:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists end users.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "end_user.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "end_user.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "end_user.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "end_user.email",
"flag": "--email",
"summary": "The primary email address.",
"type": "string"
},
{
"field": "end_user.password",
"flag": "--password",
"sensitive": true,
"summary": "An initial password; write-only, checked against breached passwords.",
"type": "string"
},
{
"field": "end_user.public_metadata",
"flag": "--public-metadata",
"summary": "App data readable by the end user's own tokens.",
"type": "json"
},
{
"field": "end_user.private_metadata",
"flag": "--private-metadata",
"summary": "App data readable only with an Access key.",
"type": "json"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/end_users",
"method": "auth.end_users.create",
"permission": "auth:write",
"positional": {
"arg": "ID",
"field": "end_user_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "end_user",
"summary": "Creates an end user.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "end_user.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "end_user.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "end_user.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "end_user.email",
"flag": "--email",
"summary": "The primary email address.",
"type": "string"
},
{
"field": "end_user.password",
"flag": "--password",
"sensitive": true,
"summary": "An initial password; write-only, checked against breached passwords.",
"type": "string"
},
{
"field": "end_user.public_metadata",
"flag": "--public-metadata",
"summary": "App data readable by the end user's own tokens.",
"type": "json"
},
{
"field": "end_user.private_metadata",
"flag": "--private-metadata",
"summary": "App data readable only with an Access key.",
"type": "json"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{end_user.name=orgs/*/projects/*/envs/*/end_users/*}",
"method": "auth.end_users.update",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "end_user.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/end_users/{end_user}"
},
"resource_field": "end_user",
"sends_etag": true,
"summary": "Updates an end user.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the end user does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also delete the end user's memberships; sessions are always revoked.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/end_users/*}",
"method": "auth.end_users.delete",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/end_users/{end_user}"
},
"summary": "Deletes an end user.",
"verb": "delete"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "reason",
"flag": "--reason",
"summary": "Why; shown to administrators only.",
"type": "string"
},
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/end_users/*}:suspend",
"method": "auth.end_users.suspend",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/end_users/{end_user}"
},
"summary": "Suspends an end user: sessions are revoked and sign-in is refused.",
"verb": "suspend"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/end_users/*}:reactivate",
"method": "auth.end_users.reactivate",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/end_users/{end_user}"
},
"summary": "Reactivates a suspended end user.",
"verb": "reactivate"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/end_users/*}:revokeSessions",
"method": "auth.end_users.revoke_sessions",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/end_users/{end_user}"
},
"summary": "Revokes every session of an end user.",
"verb": "revoke-sessions"
}
],
"noun": "end-users",
"resource_type": "auth.sylphx.com/EndUser"
},
{
"collection": "sessions",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/end_users/*/sessions/*}",
"method": "auth.sessions.get",
"permission": "auth:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/end_users/{end_user}/sessions/{session}"
},
"summary": "Gets a session.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*/end_users/*}/sessions",
"method": "auth.sessions.list",
"paginates": true,
"permission": "auth:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}/end_users/{end_user}"
},
"summary": "Lists sessions.",
"verb": "list"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/end_users/*/sessions/*}:revoke",
"method": "auth.sessions.revoke",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/end_users/{end_user}/sessions/{session}"
},
"summary": "Revokes a session.",
"verb": "revoke"
}
],
"noun": "sessions",
"resource_type": "auth.sylphx.com/Session"
},
{
"collection": "customer_organizations",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/customer_organizations/*}",
"method": "auth.customer_organizations.get",
"permission": "auth:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/customer_organizations/{customer_organization}"
},
"summary": "Gets a customer organization.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/customer_organizations",
"method": "auth.customer_organizations.list",
"paginates": true,
"permission": "auth:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists customer organizations.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "customer_organization.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "customer_organization.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "customer_organization.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "customer_organization.slug",
"flag": "--slug",
"summary": "Unique within the environment.",
"type": "string"
},
{
"field": "customer_organization.public_metadata",
"flag": "--public-metadata",
"summary": "App data.",
"type": "json"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/customer_organizations",
"method": "auth.customer_organizations.create",
"permission": "auth:write",
"positional": {
"arg": "ID",
"field": "customer_organization_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "customer_organization",
"summary": "Creates a customer organization.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "customer_organization.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "customer_organization.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "customer_organization.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "customer_organization.slug",
"flag": "--slug",
"summary": "Unique within the environment.",
"type": "string"
},
{
"field": "customer_organization.public_metadata",
"flag": "--public-metadata",
"summary": "App data.",
"type": "json"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the customer organization when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{customer_organization.name=orgs/*/projects/*/envs/*/customer_organizations/*}",
"method": "auth.customer_organizations.update",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "customer_organization.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/customer_organizations/{customer_organization}"
},
"resource_field": "customer_organization",
"sends_etag": true,
"summary": "Updates a customer organization.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the customer organization does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also close every membership.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/customer_organizations/*}",
"method": "auth.customer_organizations.delete",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/customer_organizations/{customer_organization}"
},
"summary": "Deletes a customer organization.",
"verb": "delete"
}
],
"noun": "customer-organizations",
"resource_type": "auth.sylphx.com/CustomerOrganization"
},
{
"collection": "memberships",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/customer_organizations/*/memberships/*}",
"method": "auth.memberships.get",
"permission": "auth:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/customer_organizations/{customer_organization}/memberships/{membership}"
},
"summary": "Gets a membership.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*/customer_organizations/*}/memberships",
"method": "auth.memberships.list",
"paginates": true,
"permission": "auth:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}/customer_organizations/{customer_organization}"
},
"summary": "Lists memberships.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/customer_organizations/{customer_organization}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "membership.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "membership.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "membership.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "membership.end_user",
"flag": "--end-user",
"required": true,
"summary": "The member.",
"type": "string"
},
{
"field": "membership.roles",
"flag": "--roles",
"repeated": true,
"summary": "App-defined roles, for example `admin`.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*/customer_organizations/*}/memberships",
"method": "auth.memberships.create",
"permission": "auth:write",
"positional": {
"arg": "ID",
"field": "membership_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "membership",
"summary": "Creates a membership.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "membership.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "membership.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "membership.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "membership.roles",
"flag": "--roles",
"repeated": true,
"summary": "App-defined roles, for example `admin`.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{membership.name=orgs/*/projects/*/envs/*/customer_organizations/*/memberships/*}",
"method": "auth.memberships.update",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "membership.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/customer_organizations/{customer_organization}/memberships/{membership}"
},
"resource_field": "membership",
"sends_etag": true,
"summary": "Updates a membership.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the membership does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/customer_organizations/*/memberships/*}",
"method": "auth.memberships.delete",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/customer_organizations/{customer_organization}/memberships/{membership}"
},
"summary": "Deletes a membership.",
"verb": "delete"
}
],
"noun": "memberships",
"resource_type": "auth.sylphx.com/Membership"
},
{
"collection": "oauth_clients",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/oauth_clients/*}",
"method": "auth.oauth_clients.get",
"permission": "auth:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/oauth_clients/{oauth_client}"
},
"summary": "Gets an OAuth client.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/oauth_clients",
"method": "auth.oauth_clients.list",
"paginates": true,
"permission": "auth:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists OAuth clients.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "oauth_client.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "oauth_client.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "oauth_client.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "oauth_client.spec.client_type",
"flag": "--spec.client-type",
"required": true,
"summary": "Confidential or public.",
"type": "enum",
"values": [
"confidential",
"public"
]
},
{
"field": "oauth_client.spec.token_endpoint_auth_method",
"flag": "--spec.token-endpoint-auth-method",
"required": true,
"summary": "How the client authenticates at the token endpoint.",
"type": "enum",
"values": [
"none",
"client_secret_basic",
"private_key_jwt"
]
},
{
"field": "oauth_client.spec.redirect_uris",
"flag": "--spec.redirect-uris",
"repeated": true,
"summary": "Exact redirect URIs.",
"type": "string"
},
{
"field": "oauth_client.spec.grant_types",
"flag": "--spec.grant-types",
"repeated": true,
"required": true,
"summary": "Allowed grants.",
"type": "enum",
"values": [
"authorization_code",
"refresh_token",
"device_code",
"client_credentials"
]
},
{
"field": "oauth_client.spec.scopes",
"flag": "--spec.scopes",
"repeated": true,
"summary": "Scopes the client may request.",
"type": "string"
},
{
"field": "oauth_client.spec.jwks_uri",
"flag": "--spec.jwks-uri",
"summary": "The client's JWKS URI, for `private_key_jwt`.",
"type": "string"
},
{
"field": "oauth_client.spec.dpop_required",
"flag": "--spec.dpop-required",
"summary": "Require DPoP-bound tokens (RFC 9449).",
"type": "bool"
},
{
"field": "oauth_client.spec.access_token_ttl",
"flag": "--spec.access-token-ttl",
"summary": "Access token lifetime; default 1h.",
"type": "duration"
},
{
"field": "oauth_client.spec.refresh_token_ttl",
"flag": "--spec.refresh-token-ttl",
"summary": "Refresh token lifetime; default 30d.",
"type": "duration"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/oauth_clients",
"method": "auth.oauth_clients.create",
"permission": "auth:write",
"positional": {
"arg": "ID",
"field": "oauth_client_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "oauth_client",
"summary": "Creates an OAuth client.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "oauth_client.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "oauth_client.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "oauth_client.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "oauth_client.spec.token_endpoint_auth_method",
"flag": "--spec.token-endpoint-auth-method",
"required": true,
"summary": "How the client authenticates at the token endpoint.",
"type": "enum",
"values": [
"none",
"client_secret_basic",
"private_key_jwt"
]
},
{
"field": "oauth_client.spec.redirect_uris",
"flag": "--spec.redirect-uris",
"repeated": true,
"summary": "Exact redirect URIs.",
"type": "string"
},
{
"field": "oauth_client.spec.grant_types",
"flag": "--spec.grant-types",
"repeated": true,
"required": true,
"summary": "Allowed grants.",
"type": "enum",
"values": [
"authorization_code",
"refresh_token",
"device_code",
"client_credentials"
]
},
{
"field": "oauth_client.spec.scopes",
"flag": "--spec.scopes",
"repeated": true,
"summary": "Scopes the client may request.",
"type": "string"
},
{
"field": "oauth_client.spec.jwks_uri",
"flag": "--spec.jwks-uri",
"summary": "The client's JWKS URI, for `private_key_jwt`.",
"type": "string"
},
{
"field": "oauth_client.spec.dpop_required",
"flag": "--spec.dpop-required",
"summary": "Require DPoP-bound tokens (RFC 9449).",
"type": "bool"
},
{
"field": "oauth_client.spec.access_token_ttl",
"flag": "--spec.access-token-ttl",
"summary": "Access token lifetime; default 1h.",
"type": "duration"
},
{
"field": "oauth_client.spec.refresh_token_ttl",
"flag": "--spec.refresh-token-ttl",
"summary": "Refresh token lifetime; default 30d.",
"type": "duration"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the OAuth client when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{oauth_client.name=orgs/*/projects/*/envs/*/oauth_clients/*}",
"method": "auth.oauth_clients.update",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "oauth_client.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/oauth_clients/{oauth_client}"
},
"resource_field": "oauth_client",
"sends_etag": true,
"summary": "Updates an OAuth client.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the OAuth client does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/oauth_clients/*}",
"method": "auth.oauth_clients.delete",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/oauth_clients/{oauth_client}"
},
"summary": "Deletes an OAuth client.",
"verb": "delete"
},
{
"effect": "write",
"flags": [
{
"field": "grace_period",
"flag": "--grace-period",
"summary": "How long the old secret keeps verifying; default 24h.",
"type": "duration"
},
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/oauth_clients/*}:rollSecret",
"method": "auth.oauth_clients.roll_secret",
"permission": "auth:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/oauth_clients/{oauth_client}"
},
"summary": "Issues a new client secret, returned once; the old one verifies until `grace_period` ends.",
"verb": "roll-secret"
}
],
"noun": "oauth-clients",
"resource_type": "auth.sylphx.com/OauthClient"
}
],
"commands": [],
"display_name": "Sylphx Auth",
"noun": "auth",
"stage": "preview"
},
{
"collections": [
{
"collection": "meters",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=meters/*}",
"method": "billing.meters.get",
"permission": "billing:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "meters/{meter}"
},
"summary": "Gets a meter.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/meters",
"method": "billing.meters.list",
"paginates": true,
"permission": "billing:read",
"positional": null,
"summary": "Lists meters. Anonymous-readable: the pricing page renders from it.",
"verb": "list"
}
],
"noun": "meters",
"resource_type": "billing.sylphx.com/Meter"
},
{
"collection": "plans",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=plans/*}",
"method": "billing.plans.get",
"permission": "billing:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "plans/{plan}"
},
"summary": "Gets a plan.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/plans",
"method": "billing.plans.list",
"paginates": true,
"permission": "billing:read",
"positional": null,
"summary": "Lists the plans the caller can see. Anonymous-readable: the pricing page renders from it.",
"verb": "list"
}
],
"noun": "plans",
"resource_type": "billing.sylphx.com/Plan"
},
{
"collection": "billing_accounts",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/billing_accounts/*}",
"method": "billing.billing_accounts.get",
"permission": "billing:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/billing_accounts/{billing_account}"
},
"summary": "Gets a billing account.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*}/billing_accounts",
"method": "billing.billing_accounts.list",
"paginates": true,
"permission": "billing:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}"
},
"summary": "Lists an org's billing accounts: exactly one, `default`.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"field": "billing_account.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "billing_account.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "billing_account.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "billing_account.spec.plan",
"flag": "--spec.plan",
"required": true,
"summary": "The plan to be on, for example `plans/pro`. A change takes effect at once; an upgrade to Pro is prorated by day and requires a payment method.",
"type": "string"
},
{
"field": "billing_account.spec.spend_limit.currency_code",
"flag": "--spec.spend-limit.currency-code",
"required": true,
"summary": "ISO 4217 currency, for example `USD`.",
"type": "string"
},
{
"field": "billing_account.spec.spend_limit.units_minor",
"flag": "--spec.spend-limit.units-minor",
"required": true,
"summary": "The amount in the currency's minor unit (cents for USD).",
"type": "int"
},
{
"field": "billing_account.spec.unlimited_spend",
"flag": "--spec.unlimited-spend",
"summary": "No spend limit; requires a verified payment method.",
"type": "bool"
},
{
"field": "billing_account.spec.billing_email",
"flag": "--spec.billing-email",
"summary": "Where invoices and payment notices are sent.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{billing_account.name=orgs/*/billing_accounts/*}",
"method": "billing.billing_accounts.update",
"permission": "billing:admin",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "billing_account.name",
"pattern": "orgs/{org}/billing_accounts/{billing_account}"
},
"resource_field": "billing_account",
"sends_etag": true,
"summary": "Updates a billing account: changes plan, spend limit, or billing email.",
"update_mask": "from-flags",
"verb": "update"
}
],
"noun": "billing-accounts",
"resource_type": "billing.sylphx.com/BillingAccount"
},
{
"collection": "invoices",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/invoices/*}",
"method": "billing.invoices.get",
"permission": "billing:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/invoices/{invoice}"
},
"summary": "Gets an invoice.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*}/invoices",
"method": "billing.invoices.list",
"paginates": true,
"permission": "billing:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}"
},
"summary": "Lists an org's invoices.",
"verb": "list"
}
],
"noun": "invoices",
"resource_type": "billing.sylphx.com/Invoice"
},
{
"collection": "usage_reports",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/usage_reports/*}",
"method": "billing.usage_reports.get",
"permission": "billing:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/usage_reports/{usage_report}"
},
"summary": "Gets an usage report.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*}/usage_reports",
"method": "billing.usage_reports.list",
"paginates": true,
"permission": "billing:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}"
},
"summary": "Lists an org's usage reports, one per billing period.",
"verb": "list"
},
{
"effect": "read",
"flags": [
{
"field": "start_time",
"flag": "--start-time",
"required": true,
"summary": "The start of the range, inclusive.",
"type": "timestamp"
},
{
"field": "end_time",
"flag": "--end-time",
"required": true,
"summary": "The end of the range, exclusive; at most 400 days after `start_time`.",
"type": "timestamp"
},
{
"field": "granularity",
"flag": "--granularity",
"required": true,
"summary": "The bucket width.",
"type": "enum",
"values": [
"hour",
"day",
"period"
]
},
{
"field": "projects",
"flag": "--projects",
"repeated": true,
"summary": "Only these projects; empty means every project.",
"type": "string"
},
{
"field": "meters",
"flag": "--meters",
"repeated": true,
"summary": "Only these meter ids; empty means every meter.",
"type": "string"
},
{
"field": "group_projects",
"flag": "--group-projects",
"summary": "Group by project in addition to meter.",
"type": "bool"
},
{
"field": "group_dimensions",
"flag": "--group-dimensions",
"repeated": true,
"summary": "Dimension keys to group by, for example `model`.",
"type": "string"
}
],
"http": "POST /v1/{parent=orgs/*}/usage_reports:query",
"method": "billing.usage_reports.query",
"permission": "billing:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "parent",
"pattern": "orgs/{org}"
},
"summary": "Queries usage over any time range, bucketed and grouped: the usage summary the console charts. Reads rollups; never raw events.",
"verb": "query"
}
],
"noun": "usage-reports",
"resource_type": "billing.sylphx.com/UsageReport"
},
{
"collection": "budget_leases",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/budget_leases/*}",
"method": "billing.budget_leases.get",
"permission": "billing:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/budget_leases/{budget_lease}"
},
"summary": "Gets a budget lease.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*}/budget_leases",
"method": "billing.budget_leases.list",
"paginates": true,
"permission": "billing:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}"
},
"summary": "Lists an org's budget leases.",
"verb": "list"
}
],
"noun": "budget-leases",
"resource_type": "billing.sylphx.com/BudgetLease"
}
],
"commands": [],
"display_name": "Sylphx Billing",
"noun": "billing",
"stage": "preview"
},
{
"collections": [
{
"collection": "trust_policies",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/trust_policies/*}",
"method": "broker.trust_policies.get",
"permission": "broker:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/trust_policies/{trust_policy}"
},
"summary": "Gets a trust policy.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*}/trust_policies",
"method": "broker.trust_policies.list",
"paginates": true,
"permission": "broker:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}"
},
"summary": "Lists an org's trust policies.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "trust_policy.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "trust_policy.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "trust_policy.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "trust_policy.spec.connection",
"flag": "--spec.connection",
"required": true,
"summary": "The Connection credentials are issued on.",
"type": "string"
},
{
"field": "trust_policy.spec.subjects",
"flag": "--spec.subjects",
"repeated": true,
"required": true,
"summary": "The identities allowed to exchange: SPIFFE ids (`spiffe://<trust-domain>/cell/<cell>/role/<role>`, `*` matching one segment) or Access principal names. The Cell segment is never stripped.",
"type": "string"
},
{
"field": "trust_policy.spec.permissions",
"flag": "--spec.permissions",
"repeated": true,
"required": true,
"summary": "The most a credential may carry, in the provider's permission names, for example `{\"contents\": \"read\", \"checks\": \"write\"}`.",
"type": "key=value"
},
{
"field": "trust_policy.spec.repositories",
"flag": "--spec.repositories",
"repeated": true,
"summary": "The most repositories a credential may cover; empty means every repository the Connection covers.",
"type": "string"
},
{
"field": "trust_policy.spec.credential_kind",
"flag": "--spec.credential-kind",
"required": true,
"summary": "What the Broker issues.",
"type": "enum",
"values": [
"access_token",
"runner_registration"
]
},
{
"field": "trust_policy.spec.max_ttl",
"flag": "--spec.max-ttl",
"summary": "The longest a credential lives; default and maximum 1 hour.",
"type": "duration"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*}/trust_policies",
"method": "broker.trust_policies.create",
"permission": "broker:admin",
"positional": {
"arg": "ID",
"field": "trust_policy_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "trust_policy",
"summary": "Creates a trust policy.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "trust_policy.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "trust_policy.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "trust_policy.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "trust_policy.spec.connection",
"flag": "--spec.connection",
"required": true,
"summary": "The Connection credentials are issued on.",
"type": "string"
},
{
"field": "trust_policy.spec.subjects",
"flag": "--spec.subjects",
"repeated": true,
"required": true,
"summary": "The identities allowed to exchange: SPIFFE ids (`spiffe://<trust-domain>/cell/<cell>/role/<role>`, `*` matching one segment) or Access principal names. The Cell segment is never stripped.",
"type": "string"
},
{
"field": "trust_policy.spec.permissions",
"flag": "--spec.permissions",
"repeated": true,
"required": true,
"summary": "The most a credential may carry, in the provider's permission names, for example `{\"contents\": \"read\", \"checks\": \"write\"}`.",
"type": "key=value"
},
{
"field": "trust_policy.spec.repositories",
"flag": "--spec.repositories",
"repeated": true,
"summary": "The most repositories a credential may cover; empty means every repository the Connection covers.",
"type": "string"
},
{
"field": "trust_policy.spec.credential_kind",
"flag": "--spec.credential-kind",
"required": true,
"summary": "What the Broker issues.",
"type": "enum",
"values": [
"access_token",
"runner_registration"
]
},
{
"field": "trust_policy.spec.max_ttl",
"flag": "--spec.max-ttl",
"summary": "The longest a credential lives; default and maximum 1 hour.",
"type": "duration"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{trust_policy.name=orgs/*/trust_policies/*}",
"method": "broker.trust_policies.update",
"permission": "broker:admin",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "trust_policy.name",
"pattern": "orgs/{org}/trust_policies/{trust_policy}"
},
"resource_field": "trust_policy",
"sends_etag": true,
"summary": "Updates a trust policy.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/trust_policies/*}",
"method": "broker.trust_policies.delete",
"permission": "broker:admin",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/trust_policies/{trust_policy}"
},
"summary": "Deletes a trust policy.",
"verb": "delete"
},
{
"effect": "write",
"flags": [
{
"field": "subject_token",
"flag": "--subject-token",
"required": true,
"sensitive": true,
"summary": "The caller's identity: a SPIFFE JWT-SVID or an Access-issued workload OIDC token, with audience `broker.sylphx.com`.",
"type": "string"
},
{
"field": "permissions",
"flag": "--permissions",
"repeated": true,
"summary": "The permissions this call needs, at most the policy's; empty means the policy's.",
"type": "key=value"
},
{
"field": "repositories",
"flag": "--repositories",
"repeated": true,
"summary": "The repositories this call needs, at most the policy's; empty means the policy's.",
"type": "string"
},
{
"field": "ttl",
"flag": "--ttl",
"summary": "How long the credential should live, at most the policy's `max_ttl`.",
"type": "duration"
}
],
"http": "POST /v1/{name=orgs/*/trust_policies/*}:exchangeToken",
"method": "broker.trust_policies.exchange_token",
"permission": "broker:exchange",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/trust_policies/{trust_policy}"
},
"summary": "Exchanges the caller's workload identity for a short-lived provider credential under a trust policy (RFC 8693 token exchange). The credential is narrowed to the request and cached per installation and permission set; a permission the Connection lacks is PERMISSION_DENIED with reason `CapabilityMissing`, never an outage.",
"verb": "exchange-token"
}
],
"noun": "trust-policies",
"resource_type": "broker.sylphx.com/TrustPolicy"
}
],
"commands": [],
"display_name": "Sylphx Broker",
"noun": "broker",
"stage": "preview"
},
{
"collections": [
{
"collection": "builds",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/builds/*}",
"method": "build.builds.get",
"permission": "build:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/builds/{build}"
},
"summary": "Gets a build.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*}/builds",
"method": "build.builds.list",
"paginates": true,
"permission": "build:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}"
},
"summary": "Lists builds in a project.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "build.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "build.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "build.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "build.spec.source.source_link",
"flag": "--spec.source.source-link",
"required": true,
"summary": "The Hosting SourceLink naming the repository and its Connection.",
"type": "string"
},
{
"field": "build.spec.source.commit",
"flag": "--spec.source.commit",
"required": true,
"summary": "The full commit SHA to build.",
"type": "string"
},
{
"field": "build.spec.source.root_directory",
"flag": "--spec.source.root-directory",
"summary": "The directory inside the repository to build; default the root.",
"type": "string"
},
{
"field": "build.spec.dockerfile",
"flag": "--spec.dockerfile",
"summary": "A Dockerfile path relative to the root directory; unset lets the zero- config frontend detect the stack.",
"type": "string"
},
{
"field": "build.spec.target",
"flag": "--spec.target",
"summary": "The Dockerfile stage to build.",
"type": "string"
},
{
"field": "build.spec.build_class",
"flag": "--spec.build-class",
"summary": "The class, `sylphx-<os>-<size>`; default `sylphx-linux-standard`.",
"type": "string"
},
{
"field": "build.spec.build_args",
"flag": "--spec.build-args",
"repeated": true,
"summary": "Build arguments. Secret values bind through Kernel Secrets, never here.",
"type": "key=value"
},
{
"field": "build.spec.cache",
"flag": "--spec.cache",
"summary": "The BuildCache to read and write; default the project's `default` cache.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*}/builds",
"method": "build.builds.create",
"permission": "build:write",
"positional": {
"arg": "ID",
"field": "build_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "build",
"summary": "Creates a build. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/builds/*}:cancel",
"method": "build.builds.cancel",
"permission": "build:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/builds/{build}"
},
"summary": "Cancels a queued or running Build; its lease is released and nothing is published.",
"verb": "cancel",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "builds",
"resource_type": "build.sylphx.com/Build"
},
{
"collection": "build_caches",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/build_caches/*}",
"method": "build.build_caches.get",
"permission": "build:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/build_caches/{build_cache}"
},
"summary": "Gets a build cache.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*}/build_caches",
"method": "build.build_caches.list",
"paginates": true,
"permission": "build:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}"
},
"summary": "Lists build caches in a project.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"field": "build_cache.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "build_cache.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "build_cache.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "build_cache.spec.retention",
"flag": "--spec.retention",
"summary": "Entries unused this long are evicted; default 7 days.",
"type": "duration"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{build_cache.name=orgs/*/projects/*/build_caches/*}",
"method": "build.build_caches.update",
"permission": "build:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "build_cache.name",
"pattern": "orgs/{org}/projects/{project}/build_caches/{build_cache}"
},
"resource_field": "build_cache",
"sends_etag": true,
"summary": "Updates a build cache.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/build_caches/*}",
"method": "build.build_caches.delete",
"permission": "build:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/build_caches/{build_cache}"
},
"summary": "Deletes a build cache.",
"verb": "delete"
}
],
"noun": "build-caches",
"resource_type": "build.sylphx.com/BuildCache"
}
],
"commands": [],
"display_name": "Sylphx Build",
"noun": "build",
"stage": "preview"
},
{
"collections": [
{
"collection": "config_flags",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/config_flags/*}",
"method": "config.config_flags.get",
"permission": "config:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/config_flags/{config_flag}"
},
"summary": "Gets a config flag.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/config_flags",
"method": "config.config_flags.list",
"paginates": true,
"permission": "config:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists config flags in an environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "config_flag.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "config_flag.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "config_flag.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "config_flag.spec.value_type",
"flag": "--spec.value-type",
"required": true,
"summary": "The type every value of the flag has.",
"type": "enum",
"values": [
"bool",
"string",
"int64",
"double",
"json"
]
},
{
"field": "config_flag.spec.default_value",
"flag": "--spec.default-value",
"required": true,
"summary": "The value when no rule matches, or when the flag is disabled.",
"type": "json"
},
{
"field": "config_flag.spec.enabled",
"flag": "--spec.enabled",
"summary": "When false, every evaluation returns `default_value` and the rules are skipped: a kill switch. Default true.",
"type": "bool"
},
{
"field": "config_flag.spec.rules",
"flag": "--spec.rules",
"repeated": true,
"summary": "Targeting rules, first match wins.",
"type": "json"
},
{
"field": "config_flag.spec.description",
"flag": "--spec.description",
"summary": "What the flag is for.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/config_flags",
"method": "config.config_flags.create",
"permission": "config:write",
"positional": {
"arg": "ID",
"field": "config_flag_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "config_flag",
"summary": "Creates a config flag; the Operation is done when every Cell serves it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "config_flag.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "config_flag.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "config_flag.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "config_flag.spec.default_value",
"flag": "--spec.default-value",
"required": true,
"summary": "The value when no rule matches, or when the flag is disabled.",
"type": "json"
},
{
"field": "config_flag.spec.enabled",
"flag": "--spec.enabled",
"summary": "When false, every evaluation returns `default_value` and the rules are skipped: a kill switch. Default true.",
"type": "bool"
},
{
"field": "config_flag.spec.rules",
"flag": "--spec.rules",
"repeated": true,
"summary": "Targeting rules, first match wins.",
"type": "json"
},
{
"field": "config_flag.spec.description",
"flag": "--spec.description",
"summary": "What the flag is for.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{config_flag.name=orgs/*/projects/*/envs/*/config_flags/*}",
"method": "config.config_flags.update",
"permission": "config:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "config_flag.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/config_flags/{config_flag}"
},
"resource_field": "config_flag",
"sends_etag": true,
"summary": "Updates a config flag; the change rolls out in waves and the Operation is done when every Cell serves it.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/config_flags/*}",
"method": "config.config_flags.delete",
"permission": "config:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/config_flags/{config_flag}"
},
"summary": "Deletes a config flag; evaluators then get their compiled-in fallback.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "config-flags",
"resource_type": "config.sylphx.com/ConfigFlag"
}
],
"commands": [],
"display_name": "Sylphx Config",
"noun": "config",
"stage": "preview"
},
{
"collections": [
{
"collection": "connection_providers",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/connection_providers/*}",
"method": "connections.connection_providers.get",
"permission": "connections:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/connection_providers/{connection_provider}"
},
"summary": "Gets a connection provider.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*}/connection_providers",
"method": "connections.connection_providers.list",
"paginates": true,
"permission": "connections:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}"
},
"summary": "Lists an org's connection providers.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "connection_provider.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "connection_provider.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "connection_provider.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "connection_provider.spec.github_app.app_id",
"flag": "--spec.github-app.app-id",
"required": true,
"summary": "The App's numeric id.",
"type": "int"
},
{
"field": "connection_provider.spec.github_app.slug",
"flag": "--spec.github-app.slug",
"required": true,
"summary": "The App's slug, for example `sylphx`.",
"type": "string"
},
{
"field": "connection_provider.spec.github_app.client_id",
"flag": "--spec.github-app.client-id",
"summary": "The App's OAuth client id.",
"type": "string"
},
{
"field": "connection_provider.spec.github_app.signing_key",
"flag": "--spec.github-app.signing-key",
"required": true,
"summary": "The imported, non-exportable SIGN Key (RS256) that signs App assertions; only the Broker may use it.",
"type": "string"
},
{
"field": "connection_provider.spec.github_app.webhook_secret",
"flag": "--spec.github-app.webhook-secret",
"summary": "The Secret holding the webhook secret that verifies deliveries.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*}/connection_providers",
"method": "connections.connection_providers.create",
"permission": "connections:admin",
"positional": {
"arg": "ID",
"field": "connection_provider_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "connection_provider",
"summary": "Creates a connection provider.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "connection_provider.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "connection_provider.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "connection_provider.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "connection_provider.spec.github_app.slug",
"flag": "--spec.github-app.slug",
"required": true,
"summary": "The App's slug, for example `sylphx`.",
"type": "string"
},
{
"field": "connection_provider.spec.github_app.client_id",
"flag": "--spec.github-app.client-id",
"summary": "The App's OAuth client id.",
"type": "string"
},
{
"field": "connection_provider.spec.github_app.signing_key",
"flag": "--spec.github-app.signing-key",
"required": true,
"summary": "The imported, non-exportable SIGN Key (RS256) that signs App assertions; only the Broker may use it.",
"type": "string"
},
{
"field": "connection_provider.spec.github_app.webhook_secret",
"flag": "--spec.github-app.webhook-secret",
"summary": "The Secret holding the webhook secret that verifies deliveries.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{connection_provider.name=orgs/*/connection_providers/*}",
"method": "connections.connection_providers.update",
"permission": "connections:admin",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "connection_provider.name",
"pattern": "orgs/{org}/connection_providers/{connection_provider}"
},
"resource_field": "connection_provider",
"sends_etag": true,
"summary": "Updates a connection provider.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also delete every child Resource; without it a parent with children fails with FAILED_PRECONDITION.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/connection_providers/*}",
"method": "connections.connection_providers.delete",
"permission": "connections:admin",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/connection_providers/{connection_provider}"
},
"summary": "Deletes a connection provider; it must have no connections.",
"verb": "delete"
}
],
"noun": "connection-providers",
"resource_type": "connections.sylphx.com/ConnectionProvider"
},
{
"collection": "connections",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/connections/*}",
"method": "connections.connections.get",
"permission": "connections:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/connections/{connection}"
},
"summary": "Gets a connection.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*}/connections",
"method": "connections.connections.list",
"paginates": true,
"permission": "connections:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}"
},
"summary": "Lists an org's connections.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "connection.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "connection.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "connection.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "connection.spec.provider",
"flag": "--spec.provider",
"required": true,
"summary": "The provider this is an installation of.",
"type": "string"
},
{
"field": "connection.spec.external_id",
"flag": "--spec.external-id",
"required": true,
"summary": "The provider's id of the installation, for example a GitHub App installation id.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*}/connections",
"method": "connections.connections.create",
"permission": "connections:write",
"positional": {
"arg": "ID",
"field": "connection_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "connection",
"summary": "Records an installation; the controller confirms it with the provider.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "connection.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "connection.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "connection.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{connection.name=orgs/*/connections/*}",
"method": "connections.connections.update",
"permission": "connections:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "connection.name",
"pattern": "orgs/{org}/connections/{connection}"
},
"resource_field": "connection",
"sends_etag": true,
"summary": "Updates a connection's metadata.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/connections/*}",
"method": "connections.connections.delete",
"permission": "connections:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/connections/{connection}"
},
"summary": "Forgets a connection. The installation itself is removed at the provider.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "connections",
"resource_type": "connections.sylphx.com/Connection"
}
],
"commands": [],
"display_name": "Sylphx Connections",
"noun": "connections",
"stage": "preview"
},
{
"collections": [
{
"collection": "databases",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/databases/*}",
"method": "data.databases.get",
"permission": "data:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/databases/{database}"
},
"summary": "Gets a database.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/databases",
"method": "data.databases.list",
"paginates": true,
"permission": "data:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists databases in a environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "database.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "database.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "database.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "database.spec.postgres_version",
"flag": "--spec.postgres-version",
"summary": "The Postgres major version, for example `17`; default the newest supported.",
"type": "string"
},
{
"field": "database.spec.compute_units",
"flag": "--spec.compute-units",
"summary": "Compute size in units; default the plan's. `max_connections` derives from it.",
"type": "number"
},
{
"field": "database.spec.region",
"flag": "--spec.region",
"summary": "The region; default the project's home region. Changing it moves the data by signed export and import.",
"type": "string"
},
{
"field": "database.spec.deletion_protection",
"flag": "--spec.deletion-protection",
"summary": "While set, Delete fails with DELETION_PROTECTED.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/databases",
"method": "data.databases.create",
"permission": "data:write",
"positional": {
"arg": "ID",
"field": "database_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "database",
"summary": "Creates a database. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "database.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "database.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "database.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "database.spec.compute_units",
"flag": "--spec.compute-units",
"summary": "Compute size in units; default the plan's. `max_connections` derives from it.",
"type": "number"
},
{
"field": "database.spec.region",
"flag": "--spec.region",
"summary": "The region; default the project's home region. Changing it moves the data by signed export and import.",
"type": "string"
},
{
"field": "database.spec.deletion_protection",
"flag": "--spec.deletion-protection",
"summary": "While set, Delete fails with DELETION_PROTECTED.",
"type": "bool"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{database.name=orgs/*/projects/*/envs/*/databases/*}",
"method": "data.databases.update",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "database.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/databases/{database}"
},
"resource_field": "database",
"sends_etag": true,
"summary": "Updates a database.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/databases/*}",
"method": "data.databases.delete",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/databases/{database}"
},
"summary": "Deletes a database. Fails while `spec.deletion_protection` is set.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "read",
"flags": [
{
"field": "profile",
"flag": "--profile",
"summary": "POOLED (default) or DIRECT.",
"type": "enum",
"values": [
"pooled",
"direct"
]
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/databases/*}:connect",
"method": "data.databases.connect",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/databases/{database}"
},
"summary": "Returns how to connect to the database: its endpoint and its own engine credentials. The credentials are not API keys and are returned only here.",
"verb": "connect"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/databases/*}:rotateCredentials",
"method": "data.databases.rotate_credentials",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/databases/{database}"
},
"summary": "Replaces the database's engine credentials; the old ones stop working once the new ones are served.",
"verb": "rotate-credentials",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "restore_time",
"flag": "--restore-time",
"required": true,
"summary": "The point in time to restore to.",
"type": "timestamp"
},
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/databases/*}:restore",
"method": "data.databases.restore",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/databases/{database}"
},
"summary": "Restores the database in place to a point in time inside its retention window; the database is unavailable while it restores.",
"verb": "restore",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "databases",
"resource_type": "data.sylphx.com/Database"
},
{
"collection": "kv_namespaces",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/kv_namespaces/*}",
"method": "data.kv_namespaces.get",
"permission": "data:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/kv_namespaces/{kv_namespace}"
},
"summary": "Gets a kv namespace.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/kv_namespaces",
"method": "data.kv_namespaces.list",
"paginates": true,
"permission": "data:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists kv namespaces in a environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "kv_namespace.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "kv_namespace.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "kv_namespace.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "kv_namespace.spec.default_ttl",
"flag": "--spec.default-ttl",
"summary": "The TTL of a value written without one; unset keeps values until deleted.",
"type": "duration"
},
{
"field": "kv_namespace.spec.region",
"flag": "--spec.region",
"summary": "The region; default the project's home region. Changing it moves the data by signed export and import.",
"type": "string"
},
{
"field": "kv_namespace.spec.deletion_protection",
"flag": "--spec.deletion-protection",
"summary": "While set, Delete fails with DELETION_PROTECTED.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/kv_namespaces",
"method": "data.kv_namespaces.create",
"permission": "data:write",
"positional": {
"arg": "ID",
"field": "kv_namespace_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "kv_namespace",
"summary": "Creates a kv namespace. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "kv_namespace.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "kv_namespace.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "kv_namespace.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "kv_namespace.spec.default_ttl",
"flag": "--spec.default-ttl",
"summary": "The TTL of a value written without one; unset keeps values until deleted.",
"type": "duration"
},
{
"field": "kv_namespace.spec.region",
"flag": "--spec.region",
"summary": "The region; default the project's home region. Changing it moves the data by signed export and import.",
"type": "string"
},
{
"field": "kv_namespace.spec.deletion_protection",
"flag": "--spec.deletion-protection",
"summary": "While set, Delete fails with DELETION_PROTECTED.",
"type": "bool"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{kv_namespace.name=orgs/*/projects/*/envs/*/kv_namespaces/*}",
"method": "data.kv_namespaces.update",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "kv_namespace.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/kv_namespaces/{kv_namespace}"
},
"resource_field": "kv_namespace",
"sends_etag": true,
"summary": "Updates a kv namespace.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/kv_namespaces/*}",
"method": "data.kv_namespaces.delete",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/kv_namespaces/{kv_namespace}"
},
"summary": "Deletes a kv namespace. Fails while `spec.deletion_protection` is set.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "read",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/kv_namespaces/*}:connect",
"method": "data.kv_namespaces.connect",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/kv_namespaces/{kv_namespace}"
},
"summary": "Returns how to connect to the KV namespace: its endpoint and its own engine credentials. The credentials are not API keys and are returned only here.",
"verb": "connect"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/kv_namespaces/*}:rotateCredentials",
"method": "data.kv_namespaces.rotate_credentials",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/kv_namespaces/{kv_namespace}"
},
"summary": "Replaces the KV namespace's engine credentials; the old ones stop working once the new ones are served.",
"verb": "rotate-credentials",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "kv-namespaces",
"resource_type": "data.sylphx.com/KvNamespace"
},
{
"collection": "buckets",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/buckets/*}",
"method": "data.buckets.get",
"permission": "data:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/buckets/{bucket}"
},
"summary": "Gets a bucket.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/buckets",
"method": "data.buckets.list",
"paginates": true,
"permission": "data:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists buckets in a environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "bucket.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "bucket.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "bucket.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "bucket.spec.versioning_enabled",
"flag": "--spec.versioning-enabled",
"summary": "Keep every version and write delete markers.",
"type": "bool"
},
{
"field": "bucket.spec.retention",
"flag": "--spec.retention",
"summary": "Versions are kept at least this long; unset keeps no minimum.",
"type": "duration"
},
{
"field": "bucket.spec.region",
"flag": "--spec.region",
"summary": "The region; default the project's home region. Changing it moves the data by signed export and import.",
"type": "string"
},
{
"field": "bucket.spec.deletion_protection",
"flag": "--spec.deletion-protection",
"summary": "While set, Delete fails with DELETION_PROTECTED.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/buckets",
"method": "data.buckets.create",
"permission": "data:write",
"positional": {
"arg": "ID",
"field": "bucket_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "bucket",
"summary": "Creates a bucket. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "bucket.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "bucket.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "bucket.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "bucket.spec.versioning_enabled",
"flag": "--spec.versioning-enabled",
"summary": "Keep every version and write delete markers.",
"type": "bool"
},
{
"field": "bucket.spec.retention",
"flag": "--spec.retention",
"summary": "Versions are kept at least this long; unset keeps no minimum.",
"type": "duration"
},
{
"field": "bucket.spec.region",
"flag": "--spec.region",
"summary": "The region; default the project's home region. Changing it moves the data by signed export and import.",
"type": "string"
},
{
"field": "bucket.spec.deletion_protection",
"flag": "--spec.deletion-protection",
"summary": "While set, Delete fails with DELETION_PROTECTED.",
"type": "bool"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{bucket.name=orgs/*/projects/*/envs/*/buckets/*}",
"method": "data.buckets.update",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "bucket.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/buckets/{bucket}"
},
"resource_field": "bucket",
"sends_etag": true,
"summary": "Updates a bucket.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/buckets/*}",
"method": "data.buckets.delete",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/buckets/{bucket}"
},
"summary": "Deletes a bucket. Fails while `spec.deletion_protection` is set.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "read",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/buckets/*}:connect",
"method": "data.buckets.connect",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/buckets/{bucket}"
},
"summary": "Returns how to connect to the bucket: its endpoint and its own engine credentials. The credentials are not API keys and are returned only here.",
"verb": "connect"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/buckets/*}:rotateCredentials",
"method": "data.buckets.rotate_credentials",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/buckets/{bucket}"
},
"summary": "Replaces the bucket's engine credentials; the old ones stop working once the new ones are served.",
"verb": "rotate-credentials",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "buckets",
"resource_type": "data.sylphx.com/Bucket"
},
{
"collection": "search_indexes",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/search_indexes/*}",
"method": "data.search_indexes.get",
"permission": "data:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/search_indexes/{search_index}"
},
"summary": "Gets a search index.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/search_indexes",
"method": "data.search_indexes.list",
"paginates": true,
"permission": "data:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists search indexs in a environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "search_index.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "search_index.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "search_index.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "search_index.spec.vector_dimensions",
"flag": "--spec.vector-dimensions",
"summary": "The vector dimension; 0 for lexical only.",
"type": "int"
},
{
"field": "search_index.spec.region",
"flag": "--spec.region",
"summary": "The region; default the project's home region. Changing it moves the data by signed export and import.",
"type": "string"
},
{
"field": "search_index.spec.deletion_protection",
"flag": "--spec.deletion-protection",
"summary": "While set, Delete fails with DELETION_PROTECTED.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/search_indexes",
"method": "data.search_indexes.create",
"permission": "data:write",
"positional": {
"arg": "ID",
"field": "search_index_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "search_index",
"summary": "Creates a search index. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "search_index.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "search_index.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "search_index.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "search_index.spec.region",
"flag": "--spec.region",
"summary": "The region; default the project's home region. Changing it moves the data by signed export and import.",
"type": "string"
},
{
"field": "search_index.spec.deletion_protection",
"flag": "--spec.deletion-protection",
"summary": "While set, Delete fails with DELETION_PROTECTED.",
"type": "bool"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{search_index.name=orgs/*/projects/*/envs/*/search_indexes/*}",
"method": "data.search_indexes.update",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "search_index.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/search_indexes/{search_index}"
},
"resource_field": "search_index",
"sends_etag": true,
"summary": "Updates a search index.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/search_indexes/*}",
"method": "data.search_indexes.delete",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/search_indexes/{search_index}"
},
"summary": "Deletes a search index. Fails while `spec.deletion_protection` is set.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "read",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/search_indexes/*}:connect",
"method": "data.search_indexes.connect",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/search_indexes/{search_index}"
},
"summary": "Returns how to connect to the search index: its endpoint and its own engine credentials. The credentials are not API keys and are returned only here.",
"verb": "connect"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/search_indexes/*}:rotateCredentials",
"method": "data.search_indexes.rotate_credentials",
"permission": "data:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/search_indexes/{search_index}"
},
"summary": "Replaces the search index's engine credentials; the old ones stop working once the new ones are served.",
"verb": "rotate-credentials",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "search-indexes",
"resource_type": "data.sylphx.com/SearchIndex"
}
],
"commands": [],
"display_name": "Sylphx Data",
"noun": "data",
"stage": "preview"
},
{
"collections": [
{
"collection": "entitlements",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/entitlements/*}",
"method": "entitlement.entitlements.get",
"permission": "entitlement:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/entitlements/{entitlement}"
},
"summary": "Gets an org's entitlement.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable spec fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*}/entitlements",
"method": "entitlement.entitlements.list",
"paginates": true,
"permission": "entitlement:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}"
},
"summary": "Lists an org's entitlements: exactly one, `default`.",
"verb": "list"
}
],
"noun": "entitlements",
"resource_type": "entitlement.sylphx.com/Entitlement"
}
],
"commands": [],
"display_name": "Sylphx Entitlement",
"noun": "entitlement",
"stage": "preview"
},
{
"collections": [
{
"collection": "topics",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/topics/*}",
"method": "events.topics.get",
"permission": "events:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/topics/{topic}"
},
"summary": "Gets a topic.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/topics",
"method": "events.topics.list",
"paginates": true,
"permission": "events:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists topics.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "topic.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "topic.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "topic.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "topic.spec.retention",
"flag": "--spec.retention",
"summary": "How long published events stay readable and replayable; default 7d, at most 30d.",
"type": "duration"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/topics",
"method": "events.topics.create",
"permission": "events:write",
"positional": {
"arg": "ID",
"field": "topic_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "topic",
"summary": "Creates a topic.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "topic.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "topic.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "topic.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "topic.spec.retention",
"flag": "--spec.retention",
"summary": "How long published events stay readable and replayable; default 7d, at most 30d.",
"type": "duration"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the topic when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{topic.name=orgs/*/projects/*/envs/*/topics/*}",
"method": "events.topics.update",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "topic.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/topics/{topic}"
},
"resource_field": "topic",
"sends_etag": true,
"summary": "Updates a topic.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the topic does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also delete the Topic's Subscriptions; without it a Topic with Subscriptions fails with INVALID_STATE.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/topics/*}",
"method": "events.topics.delete",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/topics/{topic}"
},
"summary": "Deletes a topic.",
"verb": "delete"
},
{
"effect": "write",
"flags": [
{
"field": "events",
"flag": "--events",
"repeated": true,
"required": true,
"summary": "The events, at most 100.",
"type": "json"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/topics/*}:publish",
"method": "events.topics.publish",
"permission": "events:publish",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/topics/{topic}"
},
"summary": "Publishes CloudEvents into a Topic, atomically. Replaying the same `source` + `id` with the same payload returns the stored event; a different payload fails with RESOURCE_ALREADY_EXISTS.",
"verb": "publish"
}
],
"noun": "topics",
"resource_type": "events.sylphx.com/Topic"
},
{
"collection": "events",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/events/*}",
"method": "events.events.get",
"permission": "events:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/events/{event}"
},
"summary": "Gets an event.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/events",
"method": "events.events.list",
"paginates": true,
"permission": "events:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists events.",
"verb": "list"
}
],
"noun": "events",
"resource_type": "events.sylphx.com/Event"
},
{
"collection": "subscriptions",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/subscriptions/*}",
"method": "events.subscriptions.get",
"permission": "events:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/subscriptions/{subscription}"
},
"summary": "Gets a subscription.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/subscriptions",
"method": "events.subscriptions.list",
"paginates": true,
"permission": "events:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists subscriptions.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "subscription.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "subscription.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "subscription.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "subscription.spec.topic",
"flag": "--spec.topic",
"required": true,
"summary": "The Topic to read.",
"type": "string"
},
{
"field": "subscription.spec.types",
"flag": "--spec.types",
"repeated": true,
"summary": "Match these CloudEvents types; empty matches all. A trailing `*` matches a prefix.",
"type": "string"
},
{
"field": "subscription.spec.sources",
"flag": "--spec.sources",
"repeated": true,
"summary": "Match these sources; empty matches all.",
"type": "string"
},
{
"field": "subscription.spec.queue",
"flag": "--spec.queue",
"summary": "A Queue.",
"type": "string"
},
{
"field": "subscription.spec.webhook_endpoint",
"flag": "--spec.webhook-endpoint",
"summary": "A Webhook Endpoint.",
"type": "string"
},
{
"field": "subscription.spec.realtime_channel",
"flag": "--spec.realtime-channel",
"summary": "A Realtime Channel.",
"type": "string"
},
{
"field": "subscription.spec.paused",
"flag": "--spec.paused",
"summary": "Whether matching is paused; events published while paused are not delivered.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/subscriptions",
"method": "events.subscriptions.create",
"permission": "events:write",
"positional": {
"arg": "ID",
"field": "subscription_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "subscription",
"summary": "Creates a subscription.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "subscription.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "subscription.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "subscription.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "subscription.spec.types",
"flag": "--spec.types",
"repeated": true,
"summary": "Match these CloudEvents types; empty matches all. A trailing `*` matches a prefix.",
"type": "string"
},
{
"field": "subscription.spec.sources",
"flag": "--spec.sources",
"repeated": true,
"summary": "Match these sources; empty matches all.",
"type": "string"
},
{
"field": "subscription.spec.queue",
"flag": "--spec.queue",
"summary": "A Queue.",
"type": "string"
},
{
"field": "subscription.spec.webhook_endpoint",
"flag": "--spec.webhook-endpoint",
"summary": "A Webhook Endpoint.",
"type": "string"
},
{
"field": "subscription.spec.realtime_channel",
"flag": "--spec.realtime-channel",
"summary": "A Realtime Channel.",
"type": "string"
},
{
"field": "subscription.spec.paused",
"flag": "--spec.paused",
"summary": "Whether matching is paused; events published while paused are not delivered.",
"type": "bool"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the subscription when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{subscription.name=orgs/*/projects/*/envs/*/subscriptions/*}",
"method": "events.subscriptions.update",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "subscription.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/subscriptions/{subscription}"
},
"resource_field": "subscription",
"sends_etag": true,
"summary": "Updates a subscription.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the subscription does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/subscriptions/*}",
"method": "events.subscriptions.delete",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/subscriptions/{subscription}"
},
"summary": "Deletes a subscription.",
"verb": "delete"
}
],
"noun": "subscriptions",
"resource_type": "events.sylphx.com/Subscription"
},
{
"collection": "queues",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/queues/*}",
"method": "events.queues.get",
"permission": "events:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/queues/{queue}"
},
"summary": "Gets a queue.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/queues",
"method": "events.queues.list",
"paginates": true,
"permission": "events:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists queues.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "queue.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "queue.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "queue.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "queue.spec.visibility_timeout",
"flag": "--spec.visibility-timeout",
"summary": "How long a lease hides a message; default 30s, 1s to 12h.",
"type": "duration"
},
{
"field": "queue.spec.max_deliveries",
"flag": "--spec.max-deliveries",
"summary": "Deliveries before a message dead-letters; default 5, 1 to 100.",
"type": "int"
},
{
"field": "queue.spec.dead_letter_queue",
"flag": "--spec.dead-letter-queue",
"summary": "The dead-letter Queue; unset keeps exhausted messages in this Queue's own dead-letter set.",
"type": "string"
},
{
"field": "queue.spec.retention",
"flag": "--spec.retention",
"summary": "How long an unacked message is kept; default 4d, at most 14d.",
"type": "duration"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/queues",
"method": "events.queues.create",
"permission": "events:write",
"positional": {
"arg": "ID",
"field": "queue_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "queue",
"summary": "Creates a queue.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "queue.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "queue.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "queue.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "queue.spec.visibility_timeout",
"flag": "--spec.visibility-timeout",
"summary": "How long a lease hides a message; default 30s, 1s to 12h.",
"type": "duration"
},
{
"field": "queue.spec.max_deliveries",
"flag": "--spec.max-deliveries",
"summary": "Deliveries before a message dead-letters; default 5, 1 to 100.",
"type": "int"
},
{
"field": "queue.spec.dead_letter_queue",
"flag": "--spec.dead-letter-queue",
"summary": "The dead-letter Queue; unset keeps exhausted messages in this Queue's own dead-letter set.",
"type": "string"
},
{
"field": "queue.spec.retention",
"flag": "--spec.retention",
"summary": "How long an unacked message is kept; default 4d, at most 14d.",
"type": "duration"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the queue when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{queue.name=orgs/*/projects/*/envs/*/queues/*}",
"method": "events.queues.update",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "queue.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/queues/{queue}"
},
"resource_field": "queue",
"sends_etag": true,
"summary": "Updates a queue.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the queue does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/queues/*}",
"method": "events.queues.delete",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/queues/{queue}"
},
"summary": "Deletes a queue.",
"verb": "delete"
},
{
"effect": "write",
"flags": [
{
"field": "events",
"flag": "--events",
"repeated": true,
"required": true,
"summary": "The messages, at most 100.",
"type": "json"
},
{
"field": "delay",
"flag": "--delay",
"summary": "Hide the messages this long before their first lease.",
"type": "duration"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/queues/*}:send",
"method": "events.queues.send",
"permission": "events:publish",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/queues/{queue}"
},
"summary": "Enqueues messages directly, without a Subscription.",
"verb": "send"
},
{
"effect": "write",
"flags": [
{
"field": "max_messages",
"flag": "--max-messages",
"summary": "At most this many; default 1, at most 100.",
"type": "int"
},
{
"field": "visibility_timeout",
"flag": "--visibility-timeout",
"summary": "Override the Queue's visibility timeout for this lease.",
"type": "duration"
},
{
"field": "wait",
"flag": "--wait",
"summary": "Wait up to this long (at most 20s) for a message when none is ready.",
"type": "duration"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/queues/*}:lease",
"method": "events.queues.lease",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/queues/{queue}"
},
"summary": "Leases up to `max_messages` ready messages for the visibility timeout.",
"verb": "lease"
},
{
"effect": "write",
"flags": [
{
"field": "leases",
"flag": "--leases",
"repeated": true,
"required": true,
"summary": "The leases to ack, at most 100.",
"type": "json"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/queues/*}:ack",
"method": "events.queues.ack",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/queues/{queue}"
},
"summary": "Acknowledges leased messages; each is removed. A lease that is stale (expired or superseded) is reported, not applied.",
"verb": "ack"
},
{
"effect": "write",
"flags": [
{
"field": "leases",
"flag": "--leases",
"repeated": true,
"required": true,
"summary": "The leases to nack, at most 100.",
"type": "json"
},
{
"field": "delay",
"flag": "--delay",
"summary": "Hide the messages this long before the next lease.",
"type": "duration"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/queues/*}:nack",
"method": "events.queues.nack",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/queues/{queue}"
},
"summary": "Returns leased messages to the Queue after `delay`; each nack counts as a delivery.",
"verb": "nack"
},
{
"effect": "write",
"flags": [
{
"field": "start_time",
"flag": "--start-time",
"summary": "Replay messages dead-lettered at or after this time.",
"type": "timestamp"
},
{
"field": "end_time",
"flag": "--end-time",
"summary": "Replay messages dead-lettered before this time.",
"type": "timestamp"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/queues/*}:replay",
"method": "events.queues.replay",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/queues/{queue}"
},
"summary": "Moves dead-lettered messages, optionally bounded by dead-letter time, back to ready.",
"verb": "replay"
}
],
"noun": "queues",
"resource_type": "events.sylphx.com/Queue"
},
{
"collection": "webhook_endpoints",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/webhook_endpoints/*}",
"method": "events.webhook_endpoints.get",
"permission": "events:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/webhook_endpoints/{webhook_endpoint}"
},
"summary": "Gets a webhook endpoint.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/webhook_endpoints",
"method": "events.webhook_endpoints.list",
"paginates": true,
"permission": "events:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists webhook endpoints.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "webhook_endpoint.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "webhook_endpoint.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "webhook_endpoint.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "webhook_endpoint.spec.uri",
"flag": "--spec.uri",
"required": true,
"summary": "The HTTPS URI deliveries are POSTed to; its host resolves to a public address.",
"type": "string"
},
{
"field": "webhook_endpoint.spec.signing_key",
"flag": "--spec.signing-key",
"summary": "A Kernel Keys Key (sign-only, asymmetric) that signs deliveries.",
"type": "string"
},
{
"field": "webhook_endpoint.spec.signing_secret",
"flag": "--spec.signing-secret",
"summary": "A Kernel Secrets Secret (write-only) for symmetric Standard Webhooks signing.",
"type": "string"
},
{
"field": "webhook_endpoint.spec.disabled",
"flag": "--spec.disabled",
"summary": "Stop delivering; deliveries queue until enabled.",
"type": "bool"
},
{
"field": "webhook_endpoint.spec.max_concurrent_deliveries",
"flag": "--spec.max-concurrent-deliveries",
"summary": "At most this many deliveries in flight; default 10.",
"type": "int"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/webhook_endpoints",
"method": "events.webhook_endpoints.create",
"permission": "events:write",
"positional": {
"arg": "ID",
"field": "webhook_endpoint_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "webhook_endpoint",
"summary": "Creates a webhook endpoint.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "webhook_endpoint.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "webhook_endpoint.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "webhook_endpoint.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "webhook_endpoint.spec.uri",
"flag": "--spec.uri",
"required": true,
"summary": "The HTTPS URI deliveries are POSTed to; its host resolves to a public address.",
"type": "string"
},
{
"field": "webhook_endpoint.spec.signing_key",
"flag": "--spec.signing-key",
"summary": "A Kernel Keys Key (sign-only, asymmetric) that signs deliveries.",
"type": "string"
},
{
"field": "webhook_endpoint.spec.signing_secret",
"flag": "--spec.signing-secret",
"summary": "A Kernel Secrets Secret (write-only) for symmetric Standard Webhooks signing.",
"type": "string"
},
{
"field": "webhook_endpoint.spec.disabled",
"flag": "--spec.disabled",
"summary": "Stop delivering; deliveries queue until enabled.",
"type": "bool"
},
{
"field": "webhook_endpoint.spec.max_concurrent_deliveries",
"flag": "--spec.max-concurrent-deliveries",
"summary": "At most this many deliveries in flight; default 10.",
"type": "int"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the webhook endpoint when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{webhook_endpoint.name=orgs/*/projects/*/envs/*/webhook_endpoints/*}",
"method": "events.webhook_endpoints.update",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "webhook_endpoint.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/webhook_endpoints/{webhook_endpoint}"
},
"resource_field": "webhook_endpoint",
"sends_etag": true,
"summary": "Updates a webhook endpoint.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the webhook endpoint does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also delete the endpoint's delivery records and the Subscriptions that target it.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/webhook_endpoints/*}",
"method": "events.webhook_endpoints.delete",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/webhook_endpoints/{webhook_endpoint}"
},
"summary": "Deletes a webhook endpoint.",
"verb": "delete"
},
{
"effect": "write",
"flags": [
{
"field": "start_time",
"flag": "--start-time",
"required": true,
"summary": "Replay deliveries created at or after this time.",
"type": "timestamp"
},
{
"field": "end_time",
"flag": "--end-time",
"summary": "Replay deliveries created before this time; default now.",
"type": "timestamp"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/webhook_endpoints/*}:replay",
"method": "events.webhook_endpoints.replay",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/webhook_endpoints/{webhook_endpoint}"
},
"summary": "Redelivers every delivery to the endpoint in a time range, dead-lettered ones included.",
"verb": "replay"
}
],
"noun": "webhook-endpoints",
"resource_type": "events.sylphx.com/WebhookEndpoint"
},
{
"collection": "webhook_deliveries",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/webhook_endpoints/*/webhook_deliveries/*}",
"method": "events.webhook_deliveries.get",
"permission": "events:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/webhook_endpoints/{webhook_endpoint}/webhook_deliveries/{webhook_delivery}"
},
"summary": "Gets a webhook delivery.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*/webhook_endpoints/*}/webhook_deliveries",
"method": "events.webhook_deliveries.list",
"paginates": true,
"permission": "events:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}/webhook_endpoints/{webhook_endpoint}"
},
"summary": "Lists webhook deliveries.",
"verb": "list"
},
{
"effect": "write",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/webhook_endpoints/*/webhook_deliveries/*}:replay",
"method": "events.webhook_deliveries.replay",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/webhook_endpoints/{webhook_endpoint}/webhook_deliveries/{webhook_delivery}"
},
"summary": "Redelivers one delivery now, as a new attempt.",
"verb": "replay"
}
],
"noun": "webhook-deliveries",
"resource_type": "events.sylphx.com/WebhookDelivery"
},
{
"collection": "inbound_endpoints",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/inbound_endpoints/*}",
"method": "events.inbound_endpoints.get",
"permission": "events:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/inbound_endpoints/{inbound_endpoint}"
},
"summary": "Gets an inbound endpoint.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/inbound_endpoints",
"method": "events.inbound_endpoints.list",
"paginates": true,
"permission": "events:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists inbound endpoints.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "inbound_endpoint.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "inbound_endpoint.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "inbound_endpoint.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "inbound_endpoint.spec.signature_scheme",
"flag": "--spec.signature-scheme",
"required": true,
"summary": "The sender's signature scheme.",
"type": "enum",
"values": [
"standard_webhooks",
"stripe",
"shopify",
"github"
]
},
{
"field": "inbound_endpoint.spec.verification_secret",
"flag": "--spec.verification-secret",
"required": true,
"summary": "A Kernel Secrets Secret holding the provider's verification secret.",
"type": "string"
},
{
"field": "inbound_endpoint.spec.topic",
"flag": "--spec.topic",
"required": true,
"summary": "The Topic verified requests are published to.",
"type": "string"
},
{
"field": "inbound_endpoint.spec.source",
"flag": "--spec.source",
"summary": "The CloudEvents `source` of published events; default the endpoint name.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/inbound_endpoints",
"method": "events.inbound_endpoints.create",
"permission": "events:write",
"positional": {
"arg": "ID",
"field": "inbound_endpoint_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "inbound_endpoint",
"summary": "Creates an inbound endpoint.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "inbound_endpoint.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "inbound_endpoint.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "inbound_endpoint.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "inbound_endpoint.spec.signature_scheme",
"flag": "--spec.signature-scheme",
"required": true,
"summary": "The sender's signature scheme.",
"type": "enum",
"values": [
"standard_webhooks",
"stripe",
"shopify",
"github"
]
},
{
"field": "inbound_endpoint.spec.verification_secret",
"flag": "--spec.verification-secret",
"required": true,
"summary": "A Kernel Secrets Secret holding the provider's verification secret.",
"type": "string"
},
{
"field": "inbound_endpoint.spec.topic",
"flag": "--spec.topic",
"required": true,
"summary": "The Topic verified requests are published to.",
"type": "string"
},
{
"field": "inbound_endpoint.spec.source",
"flag": "--spec.source",
"summary": "The CloudEvents `source` of published events; default the endpoint name.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the inbound endpoint when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{inbound_endpoint.name=orgs/*/projects/*/envs/*/inbound_endpoints/*}",
"method": "events.inbound_endpoints.update",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "inbound_endpoint.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/inbound_endpoints/{inbound_endpoint}"
},
"resource_field": "inbound_endpoint",
"sends_etag": true,
"summary": "Updates an inbound endpoint.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the inbound endpoint does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/inbound_endpoints/*}",
"method": "events.inbound_endpoints.delete",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/inbound_endpoints/{inbound_endpoint}"
},
"summary": "Deletes an inbound endpoint.",
"verb": "delete"
}
],
"noun": "inbound-endpoints",
"resource_type": "events.sylphx.com/InboundEndpoint"
},
{
"collection": "realtime_channels",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/realtime_channels/*}",
"method": "events.realtime_channels.get",
"permission": "events:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/realtime_channels/{realtime_channel}"
},
"summary": "Gets a realtime channel.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/realtime_channels",
"method": "events.realtime_channels.list",
"paginates": true,
"permission": "events:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists realtime channels.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "realtime_channel.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "realtime_channel.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "realtime_channel.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "realtime_channel.spec.publishable_ok",
"flag": "--spec.publishable-ok",
"summary": "Allow clients holding a publishable key (`events:realtime:subscribe`) to connect.",
"type": "bool"
},
{
"field": "realtime_channel.spec.history_retention",
"flag": "--spec.history-retention",
"summary": "How far back a cursor may resume; default 24h, at most 7d.",
"type": "duration"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/realtime_channels",
"method": "events.realtime_channels.create",
"permission": "events:write",
"positional": {
"arg": "ID",
"field": "realtime_channel_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "realtime_channel",
"summary": "Creates a realtime channel.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "realtime_channel.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "realtime_channel.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "realtime_channel.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "realtime_channel.spec.publishable_ok",
"flag": "--spec.publishable-ok",
"summary": "Allow clients holding a publishable key (`events:realtime:subscribe`) to connect.",
"type": "bool"
},
{
"field": "realtime_channel.spec.history_retention",
"flag": "--spec.history-retention",
"summary": "How far back a cursor may resume; default 24h, at most 7d.",
"type": "duration"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the realtime channel when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{realtime_channel.name=orgs/*/projects/*/envs/*/realtime_channels/*}",
"method": "events.realtime_channels.update",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "realtime_channel.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/realtime_channels/{realtime_channel}"
},
"resource_field": "realtime_channel",
"sends_etag": true,
"summary": "Updates a realtime channel.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the realtime channel does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/realtime_channels/*}",
"method": "events.realtime_channels.delete",
"permission": "events:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/realtime_channels/{realtime_channel}"
},
"summary": "Deletes a realtime channel.",
"verb": "delete"
}
],
"noun": "realtime-channels",
"resource_type": "events.sylphx.com/RealtimeChannel"
}
],
"commands": [],
"display_name": "Sylphx Events",
"noun": "events",
"stage": "preview"
},
{
"collections": [
{
"collection": "services",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/services/*}",
"method": "hosting.services.get",
"permission": "hosting:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/services/{service}"
},
"summary": "Gets a service.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/services",
"method": "hosting.services.list",
"paginates": true,
"permission": "hosting:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists services in a environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "service.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "service.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "service.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "service.spec.source.source_link",
"flag": "--spec.source.source-link",
"summary": "Build from this SourceLink's repository on every push to `branch`.",
"type": "string"
},
{
"field": "service.spec.source.image",
"flag": "--spec.source.image",
"summary": "Run this Artifact, by digest: `registry.sylphx.net/<path>@sha256:<hex>`.",
"type": "string"
},
{
"field": "service.spec.source.branch",
"flag": "--spec.source.branch",
"summary": "The branch that ships to this Service; default the SourceLink's production branch. Ignored for `image`.",
"type": "string"
},
{
"field": "service.spec.source.build.root_directory",
"flag": "--spec.source.build.root-directory",
"summary": "The directory inside the repository to build; default the root.",
"type": "string"
},
{
"field": "service.spec.source.build.dockerfile",
"flag": "--spec.source.build.dockerfile",
"summary": "A Dockerfile path relative to `root_directory`; unset lets the zero-config frontend detect the stack.",
"type": "string"
},
{
"field": "service.spec.source.build.build_class",
"flag": "--spec.source.build.build-class",
"summary": "The Build class, `sylphx-<os>-<size>`; default `sylphx-linux-standard`.",
"type": "string"
},
{
"field": "service.spec.command",
"flag": "--spec.command",
"summary": "Overrides the image's command.",
"type": "string"
},
{
"field": "service.spec.port",
"flag": "--spec.port",
"summary": "The port the application listens on; the public edge stays 443.",
"type": "int"
},
{
"field": "service.spec.exposure",
"flag": "--spec.exposure",
"summary": "Who can reach the Service; default PUBLIC.",
"type": "enum",
"values": [
"public",
"internal"
]
},
{
"field": "service.spec.size",
"flag": "--spec.size",
"summary": "The size of each instance; default the plan's.",
"type": "enum",
"values": [
"nano",
"micro",
"small",
"standard",
"large",
"xlarge",
"xxlarge"
]
},
{
"field": "service.spec.scaling.min_instances",
"flag": "--spec.scaling.min-instances",
"summary": "Instances kept running with no traffic; 0 idles to zero and wakes on request.",
"type": "int"
},
{
"field": "service.spec.scaling.max_instances",
"flag": "--spec.scaling.max-instances",
"summary": "Instances at most; 0 means the plan's limit.",
"type": "int"
},
{
"field": "service.spec.health.protocol",
"flag": "--spec.health.protocol",
"required": true,
"summary": "How to probe.",
"type": "enum",
"values": [
"http",
"tcp"
]
},
{
"field": "service.spec.health.path",
"flag": "--spec.health.path",
"summary": "The HTTP path to probe when `protocol` is HTTP.",
"type": "string"
},
{
"field": "service.spec.health.startup_timeout",
"flag": "--spec.health.startup-timeout",
"summary": "How long a new instance may take to pass its first probe.",
"type": "duration"
},
{
"field": "service.spec.env",
"flag": "--spec.env",
"repeated": true,
"summary": "Plain environment variables. Secret values bind through `secret_env`, never here.",
"type": "key=value"
},
{
"field": "service.spec.secret_env",
"flag": "--spec.secret-env",
"repeated": true,
"summary": "Environment variables bound to Kernel Secrets: variable name to Secret name. The value never enters the spec.",
"type": "key=value"
},
{
"field": "service.spec.regions",
"flag": "--spec.regions",
"repeated": true,
"summary": "Regions to run in; default the project's home region.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/services",
"method": "hosting.services.create",
"permission": "hosting:write",
"positional": {
"arg": "ID",
"field": "service_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "service",
"summary": "Creates a service. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "service.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "service.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "service.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "service.spec.source.source_link",
"flag": "--spec.source.source-link",
"summary": "Build from this SourceLink's repository on every push to `branch`.",
"type": "string"
},
{
"field": "service.spec.source.image",
"flag": "--spec.source.image",
"summary": "Run this Artifact, by digest: `registry.sylphx.net/<path>@sha256:<hex>`.",
"type": "string"
},
{
"field": "service.spec.source.branch",
"flag": "--spec.source.branch",
"summary": "The branch that ships to this Service; default the SourceLink's production branch. Ignored for `image`.",
"type": "string"
},
{
"field": "service.spec.source.build.root_directory",
"flag": "--spec.source.build.root-directory",
"summary": "The directory inside the repository to build; default the root.",
"type": "string"
},
{
"field": "service.spec.source.build.dockerfile",
"flag": "--spec.source.build.dockerfile",
"summary": "A Dockerfile path relative to `root_directory`; unset lets the zero-config frontend detect the stack.",
"type": "string"
},
{
"field": "service.spec.source.build.build_class",
"flag": "--spec.source.build.build-class",
"summary": "The Build class, `sylphx-<os>-<size>`; default `sylphx-linux-standard`.",
"type": "string"
},
{
"field": "service.spec.command",
"flag": "--spec.command",
"summary": "Overrides the image's command.",
"type": "string"
},
{
"field": "service.spec.port",
"flag": "--spec.port",
"summary": "The port the application listens on; the public edge stays 443.",
"type": "int"
},
{
"field": "service.spec.exposure",
"flag": "--spec.exposure",
"summary": "Who can reach the Service; default PUBLIC.",
"type": "enum",
"values": [
"public",
"internal"
]
},
{
"field": "service.spec.size",
"flag": "--spec.size",
"summary": "The size of each instance; default the plan's.",
"type": "enum",
"values": [
"nano",
"micro",
"small",
"standard",
"large",
"xlarge",
"xxlarge"
]
},
{
"field": "service.spec.scaling.min_instances",
"flag": "--spec.scaling.min-instances",
"summary": "Instances kept running with no traffic; 0 idles to zero and wakes on request.",
"type": "int"
},
{
"field": "service.spec.scaling.max_instances",
"flag": "--spec.scaling.max-instances",
"summary": "Instances at most; 0 means the plan's limit.",
"type": "int"
},
{
"field": "service.spec.health.protocol",
"flag": "--spec.health.protocol",
"required": true,
"summary": "How to probe.",
"type": "enum",
"values": [
"http",
"tcp"
]
},
{
"field": "service.spec.health.path",
"flag": "--spec.health.path",
"summary": "The HTTP path to probe when `protocol` is HTTP.",
"type": "string"
},
{
"field": "service.spec.health.startup_timeout",
"flag": "--spec.health.startup-timeout",
"summary": "How long a new instance may take to pass its first probe.",
"type": "duration"
},
{
"field": "service.spec.env",
"flag": "--spec.env",
"repeated": true,
"summary": "Plain environment variables. Secret values bind through `secret_env`, never here.",
"type": "key=value"
},
{
"field": "service.spec.secret_env",
"flag": "--spec.secret-env",
"repeated": true,
"summary": "Environment variables bound to Kernel Secrets: variable name to Secret name. The value never enters the spec.",
"type": "key=value"
},
{
"field": "service.spec.regions",
"flag": "--spec.regions",
"repeated": true,
"summary": "Regions to run in; default the project's home region.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{service.name=orgs/*/projects/*/envs/*/services/*}",
"method": "hosting.services.update",
"permission": "hosting:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "service.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/services/{service}"
},
"resource_field": "service",
"sends_etag": true,
"summary": "Updates a service.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also delete every child Resource; without it a parent with children fails with FAILED_PRECONDITION.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/services/*}",
"method": "hosting.services.delete",
"permission": "hosting:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/services/{service}"
},
"summary": "Deletes a service.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "services",
"resource_type": "hosting.sylphx.com/Service"
},
{
"collection": "service_rollouts",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/services/*/service_rollouts/*}",
"method": "hosting.service_rollouts.get",
"permission": "hosting:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/services/{service}/service_rollouts/{rollout}"
},
"summary": "Gets a rollout.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*/services/*}/service_rollouts",
"method": "hosting.service_rollouts.list",
"paginates": true,
"permission": "hosting:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}/services/{service}"
},
"summary": "Lists rollouts in a service.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/services/{service}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "rollout.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "rollout.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "rollout.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "rollout.spec.release",
"flag": "--spec.release",
"summary": "The Release to roll out. Unset rolls out the Service's current generation; a previous Release rolls back.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*/services/*}/service_rollouts",
"method": "hosting.service_rollouts.create",
"permission": "hosting:write",
"positional": {
"arg": "ID",
"field": "rollout_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "rollout",
"summary": "Creates a rollout.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/services/*/service_rollouts/*}:pause",
"method": "hosting.service_rollouts.pause",
"permission": "hosting:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/services/{service}/service_rollouts/{rollout}"
},
"summary": "Holds a Rollout at its current wave.",
"verb": "pause"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/services/*/service_rollouts/*}:resume",
"method": "hosting.service_rollouts.resume",
"permission": "hosting:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/services/{service}/service_rollouts/{rollout}"
},
"summary": "Resumes a paused Rollout.",
"verb": "resume"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/services/*/service_rollouts/*}:abort",
"method": "hosting.service_rollouts.abort",
"permission": "hosting:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/services/{service}/service_rollouts/{rollout}"
},
"summary": "Stops a Rollout; Cells it reached return to the previous Release.",
"verb": "abort"
}
],
"noun": "service-rollouts",
"resource_type": "hosting.sylphx.com/Rollout"
},
{
"collection": "previews",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/previews/*}",
"method": "hosting.previews.get",
"permission": "hosting:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/previews/{preview}"
},
"summary": "Gets a preview.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/previews",
"method": "hosting.previews.list",
"paginates": true,
"permission": "hosting:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists previews in a environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "preview.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "preview.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "preview.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "preview.spec.service",
"flag": "--spec.service",
"required": true,
"summary": "The Service previewed.",
"type": "string"
},
{
"field": "preview.spec.pull_request",
"flag": "--spec.pull-request",
"required": true,
"summary": "The pull request number in the Service's SourceLink repository.",
"type": "int"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/previews",
"method": "hosting.previews.create",
"permission": "hosting:write",
"positional": {
"arg": "ID",
"field": "preview_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "preview",
"summary": "Creates a preview. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/previews/*}",
"method": "hosting.previews.delete",
"permission": "hosting:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/previews/{preview}"
},
"summary": "Deletes a preview.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "previews",
"resource_type": "hosting.sylphx.com/Preview"
},
{
"collection": "source_links",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/source_links/*}",
"method": "hosting.source_links.get",
"permission": "hosting:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/source_links/{source_link}"
},
"summary": "Gets a source link.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*}/source_links",
"method": "hosting.source_links.list",
"paginates": true,
"permission": "hosting:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}"
},
"summary": "Lists source links in a project.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "source_link.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "source_link.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "source_link.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "source_link.spec.connection",
"flag": "--spec.connection",
"required": true,
"summary": "The forge Connection (the Sylphx App installation).",
"type": "string"
},
{
"field": "source_link.spec.repository",
"flag": "--spec.repository",
"required": true,
"summary": "The repository, `<owner>/<name>`.",
"type": "string"
},
{
"field": "source_link.spec.production_branch",
"flag": "--spec.production-branch",
"summary": "The branch production Services ship from; default the repository's default branch.",
"type": "string"
},
{
"field": "source_link.spec.previews_enabled",
"flag": "--spec.previews-enabled",
"summary": "Build a Preview for every pull request.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*}/source_links",
"method": "hosting.source_links.create",
"permission": "hosting:write",
"positional": {
"arg": "ID",
"field": "source_link_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "source_link",
"summary": "Creates a source link. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "source_link.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "source_link.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "source_link.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "source_link.spec.production_branch",
"flag": "--spec.production-branch",
"summary": "The branch production Services ship from; default the repository's default branch.",
"type": "string"
},
{
"field": "source_link.spec.previews_enabled",
"flag": "--spec.previews-enabled",
"summary": "Build a Preview for every pull request.",
"type": "bool"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{source_link.name=orgs/*/projects/*/source_links/*}",
"method": "hosting.source_links.update",
"permission": "hosting:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "source_link.name",
"pattern": "orgs/{org}/projects/{project}/source_links/{source_link}"
},
"resource_field": "source_link",
"sends_etag": true,
"summary": "Updates a source link.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/source_links/*}",
"method": "hosting.source_links.delete",
"permission": "hosting:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/source_links/{source_link}"
},
"summary": "Deletes a source link.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "source-links",
"resource_type": "hosting.sylphx.com/SourceLink"
}
],
"commands": [],
"display_name": "Sylphx Hosting",
"noun": "hosting",
"stage": "preview"
},
{
"collections": [
{
"collection": "keys",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/keys/*}",
"method": "keys.keys.get",
"permission": "keys:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}"
},
"summary": "Gets a key.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/keys",
"method": "keys.keys.list",
"paginates": true,
"permission": "keys:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists keys in an environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "key.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "key.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "key.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "key.spec.purpose",
"flag": "--spec.purpose",
"required": true,
"summary": "What the key does.",
"type": "enum",
"values": [
"sign",
"encrypt",
"mac"
]
},
{
"field": "key.spec.algorithm",
"flag": "--spec.algorithm",
"required": true,
"summary": "The algorithm; it must suit the purpose.",
"type": "enum",
"values": [
"ed25519",
"ec_p256_sha256",
"rsa_pkcs1_2048_sha256",
"rsa_pss_3072_sha256",
"aes_256_gcm",
"hmac_sha256"
]
},
{
"field": "key.spec.rotation_period",
"flag": "--spec.rotation-period",
"summary": "Rotate automatically this often; unset means rotate only on request.",
"type": "duration"
},
{
"field": "key.spec.deletion_protection",
"flag": "--spec.deletion-protection",
"summary": "While true, Delete fails with DELETION_PROTECTED. Default true.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/keys",
"method": "keys.keys.create",
"permission": "keys:write",
"positional": {
"arg": "ID",
"field": "key_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "key",
"summary": "Creates a key; the signer generates its first version.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "key.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "key.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "key.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "key.spec.rotation_period",
"flag": "--spec.rotation-period",
"summary": "Rotate automatically this often; unset means rotate only on request.",
"type": "duration"
},
{
"field": "key.spec.deletion_protection",
"flag": "--spec.deletion-protection",
"summary": "While true, Delete fails with DELETION_PROTECTED. Default true.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{key.name=orgs/*/projects/*/envs/*/keys/*}",
"method": "keys.keys.update",
"permission": "keys:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "key.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}"
},
"resource_field": "key",
"sends_etag": true,
"summary": "Updates a key's rotation period, deletion protection, or metadata.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also delete every child Resource; without it a parent with children fails with FAILED_PRECONDITION.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/keys/*}",
"method": "keys.keys.delete",
"permission": "keys:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}"
},
"summary": "Deletes a key and schedules every version's destruction.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Rotate only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/keys/*}:rotate",
"method": "keys.keys.rotate",
"permission": "keys:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}"
},
"summary": "Rotates a key: adds a version and makes it primary. Older versions keep verifying and decrypting until destroyed.",
"verb": "rotate",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "read",
"flags": [
{
"field": "key_version",
"flag": "--key-version",
"summary": "The version to use; default the primary version.",
"type": "string"
},
{
"field": "data",
"flag": "--data",
"summary": "The message to sign, at most 64 KiB. Set exactly one of `data` and `digest`.",
"type": "string"
},
{
"field": "digest",
"flag": "--digest",
"summary": "The digest of the message under the algorithm's hash.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/keys/*}:sign",
"method": "keys.keys.sign",
"permission": "keys:sign",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}"
},
"summary": "Signs data or a digest with a SIGN key. Every use is audited.",
"verb": "sign"
},
{
"effect": "read",
"flags": [
{
"field": "key_version",
"flag": "--key-version",
"summary": "The version to use; default the primary version; the signature names none.",
"type": "string"
},
{
"field": "data",
"flag": "--data",
"summary": "The signed message. Set exactly one of `data` and `digest`.",
"type": "string"
},
{
"field": "digest",
"flag": "--digest",
"summary": "The digest of the signed message.",
"type": "string"
},
{
"field": "signature",
"flag": "--signature",
"required": true,
"summary": "The signature to check.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/keys/*}:verify",
"method": "keys.keys.verify",
"permission": "keys:verify",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}"
},
"summary": "Verifies a signature made by a SIGN key.",
"verb": "verify"
},
{
"effect": "read",
"flags": [
{
"field": "plaintext",
"flag": "--plaintext",
"required": true,
"sensitive": true,
"summary": "The plaintext, at most 64 KiB.",
"type": "string"
},
{
"field": "additional_authenticated_data",
"flag": "--additional-authenticated-data",
"summary": "Data bound to the ciphertext and required again to decrypt it.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/keys/*}:encrypt",
"method": "keys.keys.encrypt",
"permission": "keys:encrypt",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}"
},
"summary": "Encrypts data with an ENCRYPT key.",
"verb": "encrypt"
},
{
"effect": "read",
"flags": [
{
"field": "ciphertext",
"flag": "--ciphertext",
"required": true,
"summary": "The ciphertext from Encrypt.",
"type": "string"
},
{
"field": "additional_authenticated_data",
"flag": "--additional-authenticated-data",
"summary": "The additional authenticated data given to Encrypt.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/keys/*}:decrypt",
"method": "keys.keys.decrypt",
"permission": "keys:decrypt",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}"
},
"summary": "Decrypts a ciphertext made by Encrypt with this key.",
"verb": "decrypt"
},
{
"effect": "read",
"flags": [
{
"field": "key_version",
"flag": "--key-version",
"summary": "The version to use; default the primary version.",
"type": "string"
},
{
"field": "data",
"flag": "--data",
"required": true,
"summary": "The message, at most 64 KiB.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/keys/*}:macSign",
"method": "keys.keys.mac_sign",
"permission": "keys:sign",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}"
},
"summary": "Computes a MAC of data with a MAC key.",
"verb": "mac-sign"
},
{
"effect": "read",
"flags": [
{
"field": "key_version",
"flag": "--key-version",
"summary": "The version to use; default the primary version.",
"type": "string"
},
{
"field": "data",
"flag": "--data",
"required": true,
"summary": "The message.",
"type": "string"
},
{
"field": "mac",
"flag": "--mac",
"required": true,
"summary": "The MAC to check.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/keys/*}:macVerify",
"method": "keys.keys.mac_verify",
"permission": "keys:verify",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}"
},
"summary": "Verifies a MAC made by a MAC key, in constant time.",
"verb": "mac-verify"
}
],
"noun": "keys",
"resource_type": "keys.sylphx.com/Key"
},
{
"collection": "key_versions",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/keys/*/key_versions/*}",
"method": "keys.key_versions.get",
"permission": "keys:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}/key_versions/{key_version}"
},
"summary": "Gets a key version.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*/keys/*}/key_versions",
"method": "keys.key_versions.list",
"paginates": true,
"permission": "keys:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}"
},
"summary": "Lists a key's versions.",
"verb": "list"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Destroy only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/keys/*/key_versions/*}:destroy",
"method": "keys.key_versions.destroy",
"permission": "keys:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/keys/{key}/key_versions/{key_version}"
},
"summary": "Schedules a key version's destruction after a 24-hour grace; the primary version cannot be destroyed.",
"verb": "destroy"
}
],
"noun": "key-versions",
"resource_type": "keys.sylphx.com/KeyVersion"
}
],
"commands": [],
"display_name": "Sylphx Keys",
"noun": "keys",
"stage": "preview"
},
{
"collections": [
{
"collection": "domains",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/domains/*}",
"method": "network.domains.get",
"permission": "network:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/domains/{domain}"
},
"summary": "Gets a domain.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*}/domains",
"method": "network.domains.list",
"paginates": true,
"permission": "network:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}"
},
"summary": "Lists domains in a project.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "domain.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "domain.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "domain.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "domain.spec.domain_name",
"flag": "--spec.domain-name",
"required": true,
"summary": "The fully qualified name, for example `example.com`. Wildcards are refused.",
"type": "string"
},
{
"field": "domain.spec.verification_method",
"flag": "--spec.verification-method",
"summary": "How control is proven; default TXT.",
"type": "enum",
"values": [
"txt",
"cname"
]
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*}/domains",
"method": "network.domains.create",
"permission": "network:write",
"positional": {
"arg": "ID",
"field": "domain_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "domain",
"summary": "Creates a domain. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "domain.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "domain.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "domain.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "domain.spec.verification_method",
"flag": "--spec.verification-method",
"summary": "How control is proven; default TXT.",
"type": "enum",
"values": [
"txt",
"cname"
]
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{domain.name=orgs/*/projects/*/domains/*}",
"method": "network.domains.update",
"permission": "network:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "domain.name",
"pattern": "orgs/{org}/projects/{project}/domains/{domain}"
},
"resource_field": "domain",
"sends_etag": true,
"summary": "Updates a domain.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/domains/*}",
"method": "network.domains.delete",
"permission": "network:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/domains/{domain}"
},
"summary": "Deletes a domain.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/domains/*}:verify",
"method": "network.domains.verify",
"permission": "network:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/domains/{domain}"
},
"summary": "Checks the verification record now instead of at the next sweep.",
"verb": "verify",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "domains",
"resource_type": "network.sylphx.com/Domain"
},
{
"collection": "certificates",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/certificates/*}",
"method": "network.certificates.get",
"permission": "network:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/certificates/{certificate}"
},
"summary": "Gets a certificate.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*}/certificates",
"method": "network.certificates.list",
"paginates": true,
"permission": "network:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}"
},
"summary": "Lists certificates in a project.",
"verb": "list"
}
],
"noun": "certificates",
"resource_type": "network.sylphx.com/Certificate"
},
{
"collection": "routes",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/routes/*}",
"method": "network.routes.get",
"permission": "network:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/routes/{route}"
},
"summary": "Gets a route.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/routes",
"method": "network.routes.list",
"paginates": true,
"permission": "network:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists routes in a environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "route.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "route.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "route.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "route.spec.host",
"flag": "--spec.host",
"required": true,
"summary": "The exact host: a verified Domain or a subdomain of one.",
"type": "string"
},
{
"field": "route.spec.path_prefix",
"flag": "--spec.path-prefix",
"summary": "The path prefix; default `/`.",
"type": "string"
},
{
"field": "route.spec.service",
"flag": "--spec.service",
"summary": "A Hosting Service.",
"type": "string"
},
{
"field": "route.spec.redirect.target_uri",
"flag": "--spec.redirect.target-uri",
"required": true,
"summary": "The absolute URL to redirect to.",
"type": "string"
},
{
"field": "route.spec.redirect.status_code",
"flag": "--spec.redirect.status-code",
"summary": "301, 302, 307, or 308; default 308.",
"type": "int"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/routes",
"method": "network.routes.create",
"permission": "network:write",
"positional": {
"arg": "ID",
"field": "route_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "route",
"summary": "Creates a route. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "route.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "route.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "route.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "route.spec.host",
"flag": "--spec.host",
"required": true,
"summary": "The exact host: a verified Domain or a subdomain of one.",
"type": "string"
},
{
"field": "route.spec.path_prefix",
"flag": "--spec.path-prefix",
"summary": "The path prefix; default `/`.",
"type": "string"
},
{
"field": "route.spec.service",
"flag": "--spec.service",
"summary": "A Hosting Service.",
"type": "string"
},
{
"field": "route.spec.redirect.target_uri",
"flag": "--spec.redirect.target-uri",
"required": true,
"summary": "The absolute URL to redirect to.",
"type": "string"
},
{
"field": "route.spec.redirect.status_code",
"flag": "--spec.redirect.status-code",
"summary": "301, 302, 307, or 308; default 308.",
"type": "int"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{route.name=orgs/*/projects/*/envs/*/routes/*}",
"method": "network.routes.update",
"permission": "network:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "route.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/routes/{route}"
},
"resource_field": "route",
"sends_etag": true,
"summary": "Updates a route.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/routes/*}",
"method": "network.routes.delete",
"permission": "network:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/routes/{route}"
},
"summary": "Deletes a route.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "routes",
"resource_type": "network.sylphx.com/Route"
},
{
"collection": "egress_identities",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/egress_identities/*}",
"method": "network.egress_identities.get",
"permission": "network:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/egress_identities/{egress_identity}"
},
"summary": "Gets an egress identity.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*}/egress_identities",
"method": "network.egress_identities.list",
"paginates": true,
"permission": "network:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}"
},
"summary": "Lists egress identitys in a project.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "egress_identity.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "egress_identity.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "egress_identity.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "egress_identity.spec.region",
"flag": "--spec.region",
"required": true,
"summary": "The region the addresses live in.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*}/egress_identities",
"method": "network.egress_identities.create",
"permission": "network:write",
"positional": {
"arg": "ID",
"field": "egress_identity_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "egress_identity",
"summary": "Creates an egress identity. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "egress_identity.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "egress_identity.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "egress_identity.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{egress_identity.name=orgs/*/projects/*/egress_identities/*}",
"method": "network.egress_identities.update",
"permission": "network:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "egress_identity.name",
"pattern": "orgs/{org}/projects/{project}/egress_identities/{egress_identity}"
},
"resource_field": "egress_identity",
"sends_etag": true,
"summary": "Updates an egress identity.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/egress_identities/*}",
"method": "network.egress_identities.delete",
"permission": "network:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/egress_identities/{egress_identity}"
},
"summary": "Deletes an egress identity.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "egress-identities",
"resource_type": "network.sylphx.com/EgressIdentity"
},
{
"collection": "private_links",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/private_links/*}",
"method": "network.private_links.get",
"permission": "network:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/private_links/{private_link}"
},
"summary": "Gets a private link.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/private_links",
"method": "network.private_links.list",
"paginates": true,
"permission": "network:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists private links in a environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "private_link.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "private_link.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "private_link.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "private_link.spec.service",
"flag": "--spec.service",
"required": true,
"summary": "The Hosting Service exposed.",
"type": "string"
},
{
"field": "private_link.spec.region",
"flag": "--spec.region",
"required": true,
"summary": "The region of the link.",
"type": "string"
},
{
"field": "private_link.spec.allowed_consumers",
"flag": "--spec.allowed-consumers",
"repeated": true,
"required": true,
"summary": "The customer network accounts allowed to connect.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/private_links",
"method": "network.private_links.create",
"permission": "network:write",
"positional": {
"arg": "ID",
"field": "private_link_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "private_link",
"summary": "Creates a private link. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "private_link.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "private_link.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "private_link.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "private_link.spec.allowed_consumers",
"flag": "--spec.allowed-consumers",
"repeated": true,
"required": true,
"summary": "The customer network accounts allowed to connect.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{private_link.name=orgs/*/projects/*/envs/*/private_links/*}",
"method": "network.private_links.update",
"permission": "network:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "private_link.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/private_links/{private_link}"
},
"resource_field": "private_link",
"sends_etag": true,
"summary": "Updates a private link.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/private_links/*}",
"method": "network.private_links.delete",
"permission": "network:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/private_links/{private_link}"
},
"summary": "Deletes a private link.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "private-links",
"resource_type": "network.sylphx.com/PrivateLink"
}
],
"commands": [],
"display_name": "Sylphx Network",
"noun": "network",
"stage": "preview"
},
{
"collections": [
{
"collection": "sending_domains",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/sending_domains/*}",
"method": "notify.sending_domains.get",
"permission": "notify:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/sending_domains/{sending_domain}"
},
"summary": "Gets a sending domain.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/sending_domains",
"method": "notify.sending_domains.list",
"paginates": true,
"permission": "notify:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists sending domains.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "sending_domain.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "sending_domain.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "sending_domain.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "sending_domain.spec.domain",
"flag": "--spec.domain",
"required": true,
"summary": "The domain, for example `mail.example.com`.",
"type": "string"
},
{
"field": "sending_domain.spec.return_path_label",
"flag": "--spec.return-path-label",
"summary": "The return-path (bounce) subdomain label; default `bounces`.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/sending_domains",
"method": "notify.sending_domains.create",
"permission": "notify:write",
"positional": {
"arg": "ID",
"field": "sending_domain_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "sending_domain",
"summary": "Creates a sending domain.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "sending_domain.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "sending_domain.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "sending_domain.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "sending_domain.spec.return_path_label",
"flag": "--spec.return-path-label",
"summary": "The return-path (bounce) subdomain label; default `bounces`.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the sending domain when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{sending_domain.name=orgs/*/projects/*/envs/*/sending_domains/*}",
"method": "notify.sending_domains.update",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "sending_domain.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/sending_domains/{sending_domain}"
},
"resource_field": "sending_domain",
"sends_etag": true,
"summary": "Updates a sending domain.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the sending domain does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/sending_domains/*}",
"method": "notify.sending_domains.delete",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/sending_domains/{sending_domain}"
},
"summary": "Deletes a sending domain.",
"verb": "delete"
},
{
"effect": "write",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/sending_domains/*}:verify",
"method": "notify.sending_domains.verify",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/sending_domains/{sending_domain}"
},
"summary": "Checks the domain's DNS records now instead of on the next sweep.",
"verb": "verify"
}
],
"noun": "sending-domains",
"resource_type": "notify.sylphx.com/SendingDomain"
},
{
"collection": "senders",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/senders/*}",
"method": "notify.senders.get",
"permission": "notify:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/senders/{sender}"
},
"summary": "Gets a sender.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/senders",
"method": "notify.senders.list",
"paginates": true,
"permission": "notify:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists senders.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "sender.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "sender.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "sender.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "sender.spec.sms.phone_number",
"flag": "--spec.sms.phone-number",
"summary": "An E.164 number.",
"type": "string"
},
{
"field": "sender.spec.sms.sender_key",
"flag": "--spec.sms.sender-key",
"summary": "An alphanumeric sender id, where the region allows one.",
"type": "string"
},
{
"field": "sender.spec.sms.region_codes",
"flag": "--spec.sms.region-codes",
"repeated": true,
"summary": "CLDR region codes the origin is registered for.",
"type": "string"
},
{
"field": "sender.spec.push.platform",
"flag": "--spec.push.platform",
"required": true,
"summary": "The push platform.",
"type": "enum",
"values": [
"apns",
"fcm",
"web_push"
]
},
{
"field": "sender.spec.push.connection",
"flag": "--spec.push.connection",
"required": true,
"summary": "The Kernel Connection holding the APNs, FCM, or VAPID credentials.",
"type": "string"
},
{
"field": "sender.spec.push.app_key",
"flag": "--spec.push.app-key",
"required": true,
"summary": "The bundle id, package name, or web origin.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/senders",
"method": "notify.senders.create",
"permission": "notify:write",
"positional": {
"arg": "ID",
"field": "sender_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "sender",
"summary": "Creates a sender.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "sender.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "sender.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "sender.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "sender.spec.sms.phone_number",
"flag": "--spec.sms.phone-number",
"summary": "An E.164 number.",
"type": "string"
},
{
"field": "sender.spec.sms.sender_key",
"flag": "--spec.sms.sender-key",
"summary": "An alphanumeric sender id, where the region allows one.",
"type": "string"
},
{
"field": "sender.spec.sms.region_codes",
"flag": "--spec.sms.region-codes",
"repeated": true,
"summary": "CLDR region codes the origin is registered for.",
"type": "string"
},
{
"field": "sender.spec.push.platform",
"flag": "--spec.push.platform",
"required": true,
"summary": "The push platform.",
"type": "enum",
"values": [
"apns",
"fcm",
"web_push"
]
},
{
"field": "sender.spec.push.connection",
"flag": "--spec.push.connection",
"required": true,
"summary": "The Kernel Connection holding the APNs, FCM, or VAPID credentials.",
"type": "string"
},
{
"field": "sender.spec.push.app_key",
"flag": "--spec.push.app-key",
"required": true,
"summary": "The bundle id, package name, or web origin.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the sender when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{sender.name=orgs/*/projects/*/envs/*/senders/*}",
"method": "notify.senders.update",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "sender.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/senders/{sender}"
},
"resource_field": "sender",
"sends_etag": true,
"summary": "Updates a sender.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the sender does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/senders/*}",
"method": "notify.senders.delete",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/senders/{sender}"
},
"summary": "Deletes a sender.",
"verb": "delete"
},
{
"effect": "write",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/senders/*}:verify",
"method": "notify.senders.verify",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/senders/{sender}"
},
"summary": "Re-checks the sender's registration or credentials now.",
"verb": "verify"
}
],
"noun": "senders",
"resource_type": "notify.sylphx.com/Sender"
},
{
"collection": "recipients",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/recipients/*}",
"method": "notify.recipients.get",
"permission": "notify:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/recipients/{recipient}"
},
"summary": "Gets a recipient.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/recipients",
"method": "notify.recipients.list",
"paginates": true,
"permission": "notify:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists recipients.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "recipient.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "recipient.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "recipient.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "recipient.external_key",
"flag": "--external-key",
"summary": "The customer's own id for this user, for example an Auth end user name.",
"type": "string"
},
{
"field": "recipient.email_addresses",
"flag": "--email-addresses",
"repeated": true,
"summary": "Email addresses, first is preferred.",
"type": "string"
},
{
"field": "recipient.phone_numbers",
"flag": "--phone-numbers",
"repeated": true,
"summary": "E.164 phone numbers, first is preferred.",
"type": "string"
},
{
"field": "recipient.devices",
"flag": "--devices",
"repeated": true,
"summary": "Push devices.",
"type": "json"
},
{
"field": "recipient.language_code",
"flag": "--language-code",
"summary": "BCP 47 language for templates; default the environment's.",
"type": "string"
},
{
"field": "recipient.time_zone",
"flag": "--time-zone",
"summary": "IANA time zone for quiet hours and digests.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/recipients",
"method": "notify.recipients.create",
"permission": "notify:write",
"positional": {
"arg": "ID",
"field": "recipient_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "recipient",
"summary": "Creates a recipient.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "recipient.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "recipient.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "recipient.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "recipient.external_key",
"flag": "--external-key",
"summary": "The customer's own id for this user, for example an Auth end user name.",
"type": "string"
},
{
"field": "recipient.email_addresses",
"flag": "--email-addresses",
"repeated": true,
"summary": "Email addresses, first is preferred.",
"type": "string"
},
{
"field": "recipient.phone_numbers",
"flag": "--phone-numbers",
"repeated": true,
"summary": "E.164 phone numbers, first is preferred.",
"type": "string"
},
{
"field": "recipient.devices",
"flag": "--devices",
"repeated": true,
"summary": "Push devices.",
"type": "json"
},
{
"field": "recipient.language_code",
"flag": "--language-code",
"summary": "BCP 47 language for templates; default the environment's.",
"type": "string"
},
{
"field": "recipient.time_zone",
"flag": "--time-zone",
"summary": "IANA time zone for quiet hours and digests.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the recipient when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{recipient.name=orgs/*/projects/*/envs/*/recipients/*}",
"method": "notify.recipients.update",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "recipient.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/recipients/{recipient}"
},
"resource_field": "recipient",
"sends_etag": true,
"summary": "Updates a recipient.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the recipient does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also delete the recipient's preferences and inbox items.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/recipients/*}",
"method": "notify.recipients.delete",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/recipients/{recipient}"
},
"summary": "Deletes a recipient.",
"verb": "delete"
}
],
"noun": "recipients",
"resource_type": "notify.sylphx.com/Recipient"
},
{
"collection": "preferences",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/recipients/*/preferences/*}",
"method": "notify.preferences.get",
"permission": "notify:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/recipients/{recipient}/preferences/{preference}"
},
"summary": "Gets a preference.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*/recipients/*}/preferences",
"method": "notify.preferences.list",
"paginates": true,
"permission": "notify:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}/recipients/{recipient}"
},
"summary": "Lists preferences.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"field": "preference.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "preference.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "preference.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "preference.channels",
"flag": "--channels",
"repeated": true,
"summary": "Channels the topic may use; empty mutes the topic.",
"type": "enum",
"values": [
"email",
"sms",
"push",
"inbox"
]
},
{
"field": "preference.digest_interval",
"flag": "--digest-interval",
"summary": "Batch this topic into a digest at most this often; unset sends each message.",
"type": "duration"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the preference when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{preference.name=orgs/*/projects/*/envs/*/recipients/*/preferences/*}",
"method": "notify.preferences.update",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "preference.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/recipients/{recipient}/preferences/{preference}"
},
"resource_field": "preference",
"sends_etag": true,
"summary": "Updates a preference.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the preference does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/recipients/*/preferences/*}",
"method": "notify.preferences.delete",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/recipients/{recipient}/preferences/{preference}"
},
"summary": "Deletes a preference.",
"verb": "delete"
}
],
"noun": "preferences",
"resource_type": "notify.sylphx.com/Preference"
},
{
"collection": "suppressions",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/suppressions/*}",
"method": "notify.suppressions.get",
"permission": "notify:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/suppressions/{suppression}"
},
"summary": "Gets a suppression.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/suppressions",
"method": "notify.suppressions.list",
"paginates": true,
"permission": "notify:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists suppressions.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "suppression.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "suppression.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "suppression.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "suppression.channel",
"flag": "--channel",
"required": true,
"summary": "The channel.",
"type": "enum",
"values": [
"email",
"sms",
"push",
"inbox"
]
},
{
"field": "suppression.address",
"flag": "--address",
"required": true,
"summary": "The suppressed address, number, or device token.",
"type": "string"
},
{
"field": "suppression.reason",
"flag": "--reason",
"required": true,
"summary": "Why.",
"type": "enum",
"values": [
"bounce",
"complaint",
"carrier_opt_out",
"unsubscribe",
"uninstalled",
"manual"
]
},
{
"field": "suppression.topic",
"flag": "--topic",
"summary": "Limit the suppression to one topic; unset suppresses every topic.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/suppressions",
"method": "notify.suppressions.create",
"permission": "notify:write",
"positional": {
"arg": "ID",
"field": "suppression_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "suppression",
"summary": "Creates a suppression.",
"verb": "create"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the suppression does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/suppressions/*}",
"method": "notify.suppressions.delete",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/suppressions/{suppression}"
},
"summary": "Deletes a suppression.",
"verb": "delete"
}
],
"noun": "suppressions",
"resource_type": "notify.sylphx.com/Suppression"
},
{
"collection": "templates",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/templates/*}",
"method": "notify.templates.get",
"permission": "notify:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/templates/{template}"
},
"summary": "Gets a template.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/templates",
"method": "notify.templates.list",
"paginates": true,
"permission": "notify:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists templates.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "template.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "template.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "template.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "template.spec.email.sender_address",
"flag": "--spec.email.sender-address",
"required": true,
"summary": "The From address; its domain is a verified Sending Domain.",
"type": "string"
},
{
"field": "template.spec.email.subject",
"flag": "--spec.email.subject",
"required": true,
"summary": "The subject.",
"type": "string"
},
{
"field": "template.spec.email.html_body",
"flag": "--spec.email.html-body",
"summary": "The HTML body.",
"type": "string"
},
{
"field": "template.spec.email.text_body",
"flag": "--spec.email.text-body",
"summary": "The plain-text body.",
"type": "string"
},
{
"field": "template.spec.sms.sender",
"flag": "--spec.sms.sender",
"required": true,
"summary": "The SMS Sender.",
"type": "string"
},
{
"field": "template.spec.sms.body",
"flag": "--spec.sms.body",
"required": true,
"summary": "The body.",
"type": "string"
},
{
"field": "template.spec.push.title",
"flag": "--spec.push.title",
"required": true,
"summary": "The title.",
"type": "string"
},
{
"field": "template.spec.push.body",
"flag": "--spec.push.body",
"summary": "The body.",
"type": "string"
},
{
"field": "template.spec.push.data",
"flag": "--spec.push.data",
"summary": "Data delivered with the notification.",
"type": "json"
},
{
"field": "template.spec.inbox.title",
"flag": "--spec.inbox.title",
"required": true,
"summary": "The title.",
"type": "string"
},
{
"field": "template.spec.inbox.body",
"flag": "--spec.inbox.body",
"summary": "The body.",
"type": "string"
},
{
"field": "template.spec.inbox.action_uri",
"flag": "--spec.inbox.action-uri",
"summary": "Where the item links.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/templates",
"method": "notify.templates.create",
"permission": "notify:write",
"positional": {
"arg": "ID",
"field": "template_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "template",
"summary": "Creates a template.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "template.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "template.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "template.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "template.spec.email.sender_address",
"flag": "--spec.email.sender-address",
"required": true,
"summary": "The From address; its domain is a verified Sending Domain.",
"type": "string"
},
{
"field": "template.spec.email.subject",
"flag": "--spec.email.subject",
"required": true,
"summary": "The subject.",
"type": "string"
},
{
"field": "template.spec.email.html_body",
"flag": "--spec.email.html-body",
"summary": "The HTML body.",
"type": "string"
},
{
"field": "template.spec.email.text_body",
"flag": "--spec.email.text-body",
"summary": "The plain-text body.",
"type": "string"
},
{
"field": "template.spec.sms.sender",
"flag": "--spec.sms.sender",
"required": true,
"summary": "The SMS Sender.",
"type": "string"
},
{
"field": "template.spec.sms.body",
"flag": "--spec.sms.body",
"required": true,
"summary": "The body.",
"type": "string"
},
{
"field": "template.spec.push.title",
"flag": "--spec.push.title",
"required": true,
"summary": "The title.",
"type": "string"
},
{
"field": "template.spec.push.body",
"flag": "--spec.push.body",
"summary": "The body.",
"type": "string"
},
{
"field": "template.spec.push.data",
"flag": "--spec.push.data",
"summary": "Data delivered with the notification.",
"type": "json"
},
{
"field": "template.spec.inbox.title",
"flag": "--spec.inbox.title",
"required": true,
"summary": "The title.",
"type": "string"
},
{
"field": "template.spec.inbox.body",
"flag": "--spec.inbox.body",
"summary": "The body.",
"type": "string"
},
{
"field": "template.spec.inbox.action_uri",
"flag": "--spec.inbox.action-uri",
"summary": "Where the item links.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the template when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{template.name=orgs/*/projects/*/envs/*/templates/*}",
"method": "notify.templates.update",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "template.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/templates/{template}"
},
"resource_field": "template",
"sends_etag": true,
"summary": "Updates a template.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the template does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/templates/*}",
"method": "notify.templates.delete",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/templates/{template}"
},
"summary": "Deletes a template.",
"verb": "delete"
}
],
"noun": "templates",
"resource_type": "notify.sylphx.com/Template"
},
{
"collection": "messages",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/messages/*}",
"method": "notify.messages.get",
"permission": "notify:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/messages/{message}"
},
"summary": "Gets a message.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/messages",
"method": "notify.messages.list",
"paginates": true,
"permission": "notify:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists messages.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "message.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "message.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "message.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "message.recipient",
"flag": "--recipient",
"required": true,
"summary": "The recipient.",
"type": "string"
},
{
"field": "message.topic",
"flag": "--topic",
"required": true,
"summary": "The topic preferences are checked against, for example `billing`.",
"type": "string"
},
{
"field": "message.template",
"flag": "--template",
"required": true,
"summary": "The template to render.",
"type": "string"
},
{
"field": "message.data",
"flag": "--data",
"summary": "Template variables.",
"type": "json"
},
{
"field": "message.channels",
"flag": "--channels",
"repeated": true,
"summary": "Restrict to these channels, in fallback order; empty uses the recipient's preferences.",
"type": "enum",
"values": [
"email",
"sms",
"push",
"inbox"
]
},
{
"field": "message.send_time",
"flag": "--send-time",
"summary": "Send no earlier than this.",
"type": "timestamp"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/messages",
"method": "notify.messages.create",
"permission": "notify:send",
"positional": {
"arg": "ID",
"field": "message_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "message",
"summary": "Sends a Message.",
"verb": "send"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/messages/*}:cancel",
"method": "notify.messages.cancel",
"permission": "notify:send",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/messages/{message}"
},
"summary": "Cancels a Message whose deliveries have not been handed off.",
"verb": "cancel"
}
],
"noun": "messages",
"resource_type": "notify.sylphx.com/Message"
},
{
"collection": "inbox_items",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/recipients/*/inbox_items/*}",
"method": "notify.inbox_items.get",
"permission": "notify:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/recipients/{recipient}/inbox_items/{inbox_item}"
},
"summary": "Gets an inbox item.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*/recipients/*}/inbox_items",
"method": "notify.inbox_items.list",
"paginates": true,
"permission": "notify:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}/recipients/{recipient}"
},
"summary": "Lists inbox items.",
"verb": "list"
},
{
"effect": "write",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/recipients/*/inbox_items/*}:markRead",
"method": "notify.inbox_items.mark_read",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/recipients/{recipient}/inbox_items/{inbox_item}"
},
"summary": "Marks an inbox item read.",
"verb": "mark-read"
},
{
"effect": "write",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/recipients/*/inbox_items/*}:markUnread",
"method": "notify.inbox_items.mark_unread",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/recipients/{recipient}/inbox_items/{inbox_item}"
},
"summary": "Marks an inbox item unread.",
"verb": "mark-unread"
},
{
"effect": "write",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/recipients/*/inbox_items/*}:archive",
"method": "notify.inbox_items.archive",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/recipients/{recipient}/inbox_items/{inbox_item}"
},
"summary": "Archives an inbox item.",
"verb": "archive"
}
],
"noun": "inbox-items",
"resource_type": "notify.sylphx.com/InboxItem"
},
{
"collection": "broadcasts",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/broadcasts/*}",
"method": "notify.broadcasts.get",
"permission": "notify:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/broadcasts/{broadcast}"
},
"summary": "Gets a broadcast.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/broadcasts",
"method": "notify.broadcasts.list",
"paginates": true,
"permission": "notify:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists broadcasts.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "broadcast.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "broadcast.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "broadcast.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "broadcast.spec.topic",
"flag": "--spec.topic",
"required": true,
"summary": "The topic every message carries.",
"type": "string"
},
{
"field": "broadcast.spec.template",
"flag": "--spec.template",
"required": true,
"summary": "The template to render.",
"type": "string"
},
{
"field": "broadcast.spec.segment_filter",
"flag": "--spec.segment-filter",
"required": true,
"summary": "AIP-160 filter over recipient labels and fields selecting the segment.",
"type": "string"
},
{
"field": "broadcast.spec.data",
"flag": "--spec.data",
"summary": "Template variables shared by every message.",
"type": "json"
},
{
"field": "broadcast.spec.send_time",
"flag": "--spec.send-time",
"summary": "When to send; unset sends only on `:send`.",
"type": "timestamp"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/broadcasts",
"method": "notify.broadcasts.create",
"permission": "notify:write",
"positional": {
"arg": "ID",
"field": "broadcast_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "broadcast",
"summary": "Creates a broadcast.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "broadcast.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "broadcast.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "broadcast.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "broadcast.spec.topic",
"flag": "--spec.topic",
"required": true,
"summary": "The topic every message carries.",
"type": "string"
},
{
"field": "broadcast.spec.template",
"flag": "--spec.template",
"required": true,
"summary": "The template to render.",
"type": "string"
},
{
"field": "broadcast.spec.segment_filter",
"flag": "--spec.segment-filter",
"required": true,
"summary": "AIP-160 filter over recipient labels and fields selecting the segment.",
"type": "string"
},
{
"field": "broadcast.spec.data",
"flag": "--spec.data",
"summary": "Template variables shared by every message.",
"type": "json"
},
{
"field": "broadcast.spec.send_time",
"flag": "--spec.send-time",
"summary": "When to send; unset sends only on `:send`.",
"type": "timestamp"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the broadcast when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{broadcast.name=orgs/*/projects/*/envs/*/broadcasts/*}",
"method": "notify.broadcasts.update",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "broadcast.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/broadcasts/{broadcast}"
},
"resource_field": "broadcast",
"sends_etag": true,
"summary": "Updates a broadcast.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the broadcast does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/broadcasts/*}",
"method": "notify.broadcasts.delete",
"permission": "notify:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/broadcasts/{broadcast}"
},
"summary": "Deletes a broadcast.",
"verb": "delete"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/broadcasts/*}:send",
"method": "notify.broadcasts.send",
"permission": "notify:send",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/broadcasts/{broadcast}"
},
"summary": "Sends a Broadcast now.",
"verb": "send"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/broadcasts/*}:cancel",
"method": "notify.broadcasts.cancel",
"permission": "notify:send",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/broadcasts/{broadcast}"
},
"summary": "Cancels a Broadcast; messages already admitted still deliver.",
"verb": "cancel"
}
],
"noun": "broadcasts",
"resource_type": "notify.sylphx.com/Broadcast"
}
],
"commands": [],
"display_name": "Sylphx Notify",
"noun": "notify",
"stage": "preview"
},
{
"collections": [
{
"collection": "log_entries",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/log_entries/*}",
"method": "observability.log_entries.get",
"permission": "observability:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/log_entries/{log_entry}"
},
"summary": "Gets a log entry.",
"verb": "get"
},
{
"effect": "write",
"flags": [
{
"field": "log_entries",
"flag": "--log-entries",
"repeated": true,
"required": true,
"summary": "The entries, at most 1000; only record fields are read.",
"type": "json"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/log_entries:write",
"method": "observability.log_entries.write",
"permission": "observability:ingest",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Ingests a batch of log entries atomically. The same `Idempotency-Key` and digest replays the same batch; a different digest under the key conflicts.",
"verb": "write"
},
{
"effect": "read",
"flags": [
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over the typed, allowlisted fields.",
"type": "string"
},
{
"field": "start_time",
"flag": "--start-time",
"required": true,
"summary": "The interval start; required, at most 31 days before `end_time`.",
"type": "timestamp"
},
{
"field": "end_time",
"flag": "--end-time",
"summary": "The interval end; default now.",
"type": "timestamp"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "`time desc` (default) or `time asc`.",
"type": "string"
},
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 100, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page; bound to tenant, interval, filter, and order.",
"type": "string"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/log_entries:query",
"method": "observability.log_entries.query",
"permission": "observability:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Queries the environment's log entries over a bounded interval; follow a trace with `trace_id = \"...\"`.",
"verb": "query"
}
],
"noun": "log-entries",
"resource_type": "observability.sylphx.com/LogEntry"
},
{
"collection": "traces",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/traces/*}",
"method": "observability.traces.get",
"permission": "observability:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/traces/{trace}"
},
"summary": "Gets a trace.",
"verb": "get"
},
{
"effect": "write",
"flags": [
{
"field": "spans",
"flag": "--spans",
"repeated": true,
"required": true,
"summary": "The spans, at most 1000.",
"type": "json"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/traces:writeSpans",
"method": "observability.traces.write_spans",
"permission": "observability:ingest",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Ingests a batch of spans atomically; a span's parent and time invariants are validated. Replay rules are those of WriteLogEntries.",
"verb": "write-spans"
},
{
"effect": "read",
"flags": [
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over the typed, allowlisted fields.",
"type": "string"
},
{
"field": "start_time",
"flag": "--start-time",
"required": true,
"summary": "The interval start; required, at most 31 days before `end_time`.",
"type": "timestamp"
},
{
"field": "end_time",
"flag": "--end-time",
"summary": "The interval end; default now.",
"type": "timestamp"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "`time desc` (default) or `time asc`.",
"type": "string"
},
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 100, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page; bound to tenant, interval, filter, and order.",
"type": "string"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/traces:query",
"method": "observability.traces.query",
"permission": "observability:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Queries the environment's traces over a bounded interval, returning summaries without spans.",
"verb": "query"
}
],
"noun": "traces",
"resource_type": "observability.sylphx.com/Trace"
},
{
"collection": "error_groups",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/error_groups/*}",
"method": "observability.error_groups.get",
"permission": "observability:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/error_groups/{error_group}"
},
"summary": "Gets an error group.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/error_groups",
"method": "observability.error_groups.list",
"paginates": true,
"permission": "observability:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists error groups; filter by `state`, `service_name`, and `last_seen_time`.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"field": "error_event",
"flag": "--error-event",
"required": true,
"summary": "The occurrence; only record fields are read.",
"type": "json"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/error_groups:capture",
"method": "observability.error_groups.capture",
"permission": "observability:ingest",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Captures one error occurrence; it is grouped by fingerprint. A fingerprint-equal replay bills no second new-error unit. Under quota pressure the response says what to sample.",
"verb": "capture"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/error_groups/*}:acknowledge",
"method": "observability.error_groups.acknowledge",
"permission": "observability:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/error_groups/{error_group}"
},
"summary": "Acknowledges an error group.",
"verb": "acknowledge"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/error_groups/*}:resolve",
"method": "observability.error_groups.resolve",
"permission": "observability:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/error_groups/{error_group}"
},
"summary": "Resolves an error group; a new occurrence reopens it.",
"verb": "resolve"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/error_groups/*}:reopen",
"method": "observability.error_groups.reopen",
"permission": "observability:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/error_groups/{error_group}"
},
"summary": "Reopens a resolved or acknowledged error group.",
"verb": "reopen"
}
],
"noun": "error-groups",
"resource_type": "observability.sylphx.com/ErrorGroup"
},
{
"collection": "error_events",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/error_groups/*/error_events/*}",
"method": "observability.error_events.get",
"permission": "observability:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/error_groups/{error_group}/error_events/{error_event}"
},
"summary": "Gets an error event.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*/error_groups/*}/error_events",
"method": "observability.error_events.list",
"paginates": true,
"permission": "observability:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}/error_groups/{error_group}"
},
"summary": "Lists error events.",
"verb": "list"
}
],
"noun": "error-events",
"resource_type": "observability.sylphx.com/ErrorEvent"
}
],
"commands": [],
"display_name": "Sylphx Observability",
"noun": "observability",
"stage": "preview"
},
{
"collections": [
{
"collection": "releases",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/releases/*}",
"method": "release.releases.get",
"permission": "release:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/releases/{release}"
},
"summary": "Gets a release.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/releases",
"method": "release.releases.list",
"paginates": true,
"permission": "release:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists releases in an environment, newest first by default.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "release.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "release.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "release.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "release.spec.members",
"flag": "--spec.members",
"repeated": true,
"required": true,
"summary": "The workloads, each by artifact digest. A member that names a tag or an unverified Artifact is refused.",
"type": "json"
},
{
"field": "release.spec.rollout_policy.bake_duration",
"flag": "--spec.rollout-policy.bake-duration",
"summary": "How long each wave bakes, healthy, before the next starts; default 10 minutes.",
"type": "duration"
},
{
"field": "release.spec.rollout_policy.halt_on_failure",
"flag": "--spec.rollout-policy.halt-on-failure",
"summary": "Halt the rollout when a wave's health gate fails; default true.",
"type": "bool"
},
{
"field": "release.spec.rollout_policy.skip_waves",
"flag": "--spec.rollout-policy.skip-waves",
"summary": "Skip the waves and apply to every Cell together: break-glass only, and refused for any other principal.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/releases",
"method": "release.releases.create",
"permission": "release:write",
"positional": {
"arg": "ID",
"field": "release_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "release",
"summary": "Creates a release: admits it and rolls it out in waves. The Operation is done when the release is live or halted.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "releases",
"resource_type": "release.sylphx.com/Release"
},
{
"collection": "rollouts",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/rollouts/*}",
"method": "release.rollouts.get",
"permission": "release:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/rollouts/{rollout}"
},
"summary": "Gets a rollout.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/rollouts",
"method": "release.rollouts.list",
"paginates": true,
"permission": "release:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists rollouts in an environment.",
"verb": "list"
}
],
"noun": "rollouts",
"resource_type": "release.sylphx.com/Rollout"
}
],
"commands": [],
"display_name": "Sylphx Release",
"noun": "release",
"stage": "preview"
},
{
"collections": [
{
"collection": "scale_sets",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/scale_sets/*}",
"method": "runners.scale_sets.get",
"permission": "runners:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/scale_sets/{scale_set}"
},
"summary": "Gets a scale set.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*}/scale_sets",
"method": "runners.scale_sets.list",
"paginates": true,
"permission": "runners:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}"
},
"summary": "Lists scale sets in a org.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "scale_set.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "scale_set.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "scale_set.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "scale_set.spec.connection",
"flag": "--spec.connection",
"required": true,
"summary": "The Sylphx Runners installation Connection.",
"type": "string"
},
{
"field": "scale_set.spec.runner_class",
"flag": "--spec.runner-class",
"required": true,
"summary": "The class, `sylphx-<os>-<size>`, for example `sylphx-linux-standard`. It is the label workflows ask for.",
"type": "string"
},
{
"field": "scale_set.spec.runner_group",
"flag": "--spec.runner-group",
"summary": "The forge runner group to register in; default the installation's default group.",
"type": "string"
},
{
"field": "scale_set.spec.max_runners",
"flag": "--spec.max-runners",
"summary": "Concurrent runners at most; 0 means the plan's limit.",
"type": "int"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*}/scale_sets",
"method": "runners.scale_sets.create",
"permission": "runners:write",
"positional": {
"arg": "ID",
"field": "scale_set_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "scale_set",
"summary": "Creates a scale set. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "scale_set.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "scale_set.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "scale_set.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "scale_set.spec.runner_group",
"flag": "--spec.runner-group",
"summary": "The forge runner group to register in; default the installation's default group.",
"type": "string"
},
{
"field": "scale_set.spec.max_runners",
"flag": "--spec.max-runners",
"summary": "Concurrent runners at most; 0 means the plan's limit.",
"type": "int"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{scale_set.name=orgs/*/scale_sets/*}",
"method": "runners.scale_sets.update",
"permission": "runners:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "scale_set.name",
"pattern": "orgs/{org}/scale_sets/{scale_set}"
},
"resource_field": "scale_set",
"sends_etag": true,
"summary": "Updates a scale set.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also delete every child Resource; without it a parent with children fails with FAILED_PRECONDITION.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/scale_sets/*}",
"method": "runners.scale_sets.delete",
"permission": "runners:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/scale_sets/{scale_set}"
},
"summary": "Deletes a scale set.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "scale-sets",
"resource_type": "runners.sylphx.com/ScaleSet"
},
{
"collection": "runners",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/scale_sets/*/runners/*}",
"method": "runners.runners.get",
"permission": "runners:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/scale_sets/{scale_set}/runners/{runner}"
},
"summary": "Gets a runner.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/scale_sets/*}/runners",
"method": "runners.runners.list",
"paginates": true,
"permission": "runners:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/scale_sets/{scale_set}"
},
"summary": "Lists runners in a scale set.",
"verb": "list"
}
],
"noun": "runners",
"resource_type": "runners.sylphx.com/Runner"
}
],
"commands": [],
"display_name": "Sylphx Runners",
"noun": "runners",
"stage": "preview"
},
{
"collections": [
{
"collection": "sandbox_shapes",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=sandbox_shapes/*}",
"method": "sandboxes.sandbox_shapes.get",
"permission": "sandboxes:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "sandbox_shapes/{shape}"
},
"summary": "Gets a shape.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/sandbox_shapes",
"method": "sandboxes.sandbox_shapes.list",
"paginates": true,
"permission": "sandboxes:read",
"positional": null,
"summary": "Lists shapes.",
"verb": "list"
}
],
"noun": "sandbox-shapes",
"resource_type": "sandboxes.sylphx.com/Shape"
},
{
"collection": "pools",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/pools/*}",
"method": "sandboxes.pools.get",
"permission": "sandboxes:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/pools/{pool}"
},
"summary": "Gets a pool.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/pools",
"method": "sandboxes.pools.list",
"paginates": true,
"permission": "sandboxes:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists pools in a environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "pool.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "pool.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "pool.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "pool.spec.shape",
"flag": "--spec.shape",
"required": true,
"summary": "The shape.",
"type": "string"
},
{
"field": "pool.spec.image",
"flag": "--spec.image",
"required": true,
"summary": "The image: a Kernel Artifact by digest, or `template:<name>`.",
"type": "string"
},
{
"field": "pool.spec.warm.min",
"flag": "--spec.warm.min",
"summary": "Warm machines kept booted.",
"type": "int"
},
{
"field": "pool.spec.warm.max",
"flag": "--spec.warm.max",
"summary": "Warm machines at most; at most 10 on free and 100 on Pro.",
"type": "int"
},
{
"field": "pool.spec.max_age",
"flag": "--spec.max-age",
"summary": "Warm machines older than this are recycled; 5 minutes to 2 hours.",
"type": "duration"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/pools",
"method": "sandboxes.pools.create",
"permission": "sandboxes:write",
"positional": {
"arg": "ID",
"field": "pool_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "pool",
"summary": "Creates a pool. The Operation is done when the controller settles it.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "pool.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "pool.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "pool.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "pool.spec.image",
"flag": "--spec.image",
"required": true,
"summary": "The image: a Kernel Artifact by digest, or `template:<name>`.",
"type": "string"
},
{
"field": "pool.spec.warm.min",
"flag": "--spec.warm.min",
"summary": "Warm machines kept booted.",
"type": "int"
},
{
"field": "pool.spec.warm.max",
"flag": "--spec.warm.max",
"summary": "Warm machines at most; at most 10 on free and 100 on Pro.",
"type": "int"
},
{
"field": "pool.spec.max_age",
"flag": "--spec.max-age",
"summary": "Warm machines older than this are recycled; 5 minutes to 2 hours.",
"type": "duration"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the Resource when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{pool.name=orgs/*/projects/*/envs/*/pools/*}",
"method": "sandboxes.pools.update",
"permission": "sandboxes:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "pool.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/pools/{pool}"
},
"resource_field": "pool",
"sends_etag": true,
"summary": "Updates a pool.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/pools/*}",
"method": "sandboxes.pools.delete",
"permission": "sandboxes:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/pools/{pool}"
},
"summary": "Deletes a pool.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "pools",
"resource_type": "sandboxes.sylphx.com/Pool"
},
{
"collection": "leases",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/leases/*}",
"method": "sandboxes.leases.get",
"permission": "sandboxes:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Gets a lease.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/leases",
"method": "sandboxes.leases.list",
"paginates": true,
"permission": "sandboxes:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists leases in a environment. Filter on `meta.labels` (for example `labels.agent = \"a_123\"`), `status.state`, and `spec.kind`.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "lease.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "lease.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "lease.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "lease.spec.shape",
"flag": "--spec.shape",
"required": true,
"summary": "The shape.",
"type": "string"
},
{
"field": "lease.spec.image",
"flag": "--spec.image",
"summary": "The image: a Kernel Artifact by digest, or `template:<name>` (`base`, `desktop`, `browser`, `android`). Ignored when `source_snapshot` is set.",
"type": "string"
},
{
"field": "lease.spec.kind",
"flag": "--spec.kind",
"summary": "What the machine serves; default GENERAL.",
"type": "enum",
"values": [
"general",
"browser",
"desktop",
"android"
]
},
{
"field": "lease.spec.region",
"flag": "--spec.region",
"summary": "The region; default the project's home region.",
"type": "string"
},
{
"field": "lease.spec.pool",
"flag": "--spec.pool",
"summary": "The Pool to take a warm machine from; default the platform pool for the shape and image.",
"type": "string"
},
{
"field": "lease.spec.ttl",
"flag": "--spec.ttl",
"required": true,
"summary": "The maximum wall time from grant: 1 minute to 24 hours for microVMs, 24 hours to 30 days for macOS. `:renew` extends it within the shape's bound. Reaching it ends the lease EXPIRED.",
"type": "duration"
},
{
"field": "lease.spec.idle_timeout",
"flag": "--spec.idle-timeout",
"summary": "End the lease IDLE after no data-plane call, stream input, or exec for this long; unset never idles out.",
"type": "duration"
},
{
"field": "lease.spec.network.egress",
"flag": "--spec.network.egress",
"summary": "Default ALLOW.",
"type": "enum",
"values": [
"allow",
"deny",
"allowlist"
]
},
{
"field": "lease.spec.network.allowed_domains",
"flag": "--spec.network.allowed-domains",
"repeated": true,
"summary": "Hosts reachable when `egress` is ALLOWLIST: exact names or one leading `*.` wildcard label, for example `api.openai.com`, `*.github.com`.",
"type": "string"
},
{
"field": "lease.spec.network.allowed_cidrs",
"flag": "--spec.network.allowed-cidrs",
"repeated": true,
"summary": "Public CIDRs reachable when `egress` is ALLOWLIST.",
"type": "string"
},
{
"field": "lease.spec.ports",
"flag": "--spec.ports",
"repeated": true,
"summary": "Guest ports to expose.",
"type": "json"
},
{
"field": "lease.spec.env",
"flag": "--spec.env",
"repeated": true,
"summary": "Plain environment variables. Secrets bind through Kernel Secrets, never here.",
"type": "key=value"
},
{
"field": "lease.spec.volumes",
"flag": "--spec.volumes",
"repeated": true,
"summary": "Volumes attached at grant, each by name. A volume is attached to at most one lease at a time; a volume already attached refuses the lease with RESOURCE_IN_USE.",
"type": "json"
},
{
"field": "lease.spec.budget.max_cpu_seconds",
"flag": "--spec.budget.max-cpu-seconds",
"summary": "End CPU_BUDGET after this many vCPU-seconds of guest CPU time.",
"type": "int"
},
{
"field": "lease.spec.budget.max_cost_micros",
"flag": "--spec.budget.max-cost-micros",
"summary": "End COST_BUDGET once the shape's list price times wall seconds reaches this many millionths of a US dollar.",
"type": "int"
},
{
"field": "lease.spec.display.width",
"flag": "--spec.display.width",
"summary": "Logical width in pixels; default 1280.",
"type": "int"
},
{
"field": "lease.spec.display.height",
"flag": "--spec.display.height",
"summary": "Logical height in pixels; default 800.",
"type": "int"
},
{
"field": "lease.spec.display.dpi",
"flag": "--spec.display.dpi",
"summary": "Dots per inch; default 96.",
"type": "int"
},
{
"field": "lease.spec.browser.headless",
"flag": "--spec.browser.headless",
"summary": "Run headless instead of on the display. A headless browser has no stream and no computer actions; CDP only.",
"type": "bool"
},
{
"field": "lease.spec.browser.user_data_dir",
"flag": "--spec.browser.user-data-dir",
"summary": "The profile directory; put it on a volume to keep cookies and storage across leases. Default a fresh profile.",
"type": "string"
},
{
"field": "lease.spec.browser.start_url",
"flag": "--spec.browser.start-url",
"summary": "The page opened at start; default `about:blank`.",
"type": "string"
},
{
"field": "lease.spec.source_snapshot",
"flag": "--spec.source-snapshot",
"summary": "Boot from this Snapshot's disk and image instead of `image`.",
"type": "string"
},
{
"field": "lease.spec.webhook.uri",
"flag": "--spec.webhook.uri",
"required": true,
"summary": "The HTTPS URL that receives the POSTs.",
"type": "string"
},
{
"field": "lease.spec.webhook.kinds",
"flag": "--spec.webhook.kinds",
"repeated": true,
"summary": "Deliver only these kinds; default every kind.",
"type": "enum",
"values": [
"granted",
"ready",
"refused",
"ended",
"renewed",
"network_changed",
"control_acquired",
"control_released",
"control_expired",
"budget_warning",
"paused",
"resumed"
]
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "skip_wait_ready",
"flag": "--skip-wait-ready",
"summary": "Return as soon as the machine is granted instead of when the guest is ready. Default false: wait for READY, at most 60 seconds.",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/leases",
"method": "sandboxes.leases.create",
"permission": "sandboxes:write",
"positional": {
"arg": "ID",
"field": "lease_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "lease",
"summary": "Creates a lease: granted now and returned READY (or GRANTED when `wait_ready` is false), or refused with a typed error. There is no queue.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "ttl",
"flag": "--ttl",
"required": true,
"summary": "The new time to live from now.",
"type": "duration"
},
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:renew",
"method": "sandboxes.leases.renew",
"permission": "sandboxes:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Extends `expire_time`, never past the shape's longest lease. Does not change the generation.",
"verb": "renew"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:release",
"method": "sandboxes.leases.release",
"permission": "sandboxes:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Ends a lease with END_REASON_RELEASED; the machine is destroyed and never leased again, and attached volumes are detached.",
"verb": "release"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:pause",
"method": "sandboxes.leases.pause",
"permission": "sandboxes:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Pauses a lease: its disk is kept and its machine destroyed; the generation increases. Process memory is not kept.",
"verb": "pause"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:resume",
"method": "sandboxes.leases.resume",
"permission": "sandboxes:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Resumes a paused lease on a machine granted now, or refuses it; the generation increases.",
"verb": "resume"
},
{
"effect": "write",
"flags": [
{
"field": "network",
"flag": "--network",
"required": true,
"summary": "The new outbound policy; replaces the old one whole.",
"type": "json"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:setNetwork",
"method": "sandboxes.leases.set_network",
"permission": "sandboxes:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Replaces a running lease's outbound policy. The generation does not change; the Cell applies it before the call returns.",
"verb": "set-network"
},
{
"effect": "write",
"flags": [
{
"field": "scopes",
"flag": "--scopes",
"repeated": true,
"required": true,
"summary": "What the token admits.",
"type": "enum",
"values": [
"guest",
"ports",
"cdp",
"computer"
]
},
{
"field": "ttl",
"flag": "--ttl",
"summary": "At most 1 hour and never past the lease's `expire_time`.",
"type": "duration"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:mintToken",
"method": "sandboxes.leases.mint_token",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Mints a lease token for the data plane, bound to the current generation. Hand it to a process that must not hold the Access key.",
"verb": "mint-token"
},
{
"effect": "write",
"flags": [
{
"field": "command",
"flag": "--command",
"repeated": true,
"required": true,
"summary": "The program and its arguments. Use `[\"bash\", \"-lc\", \"…\"]` for a shell.",
"type": "string"
},
{
"field": "working_directory",
"flag": "--working-directory",
"summary": "The working directory; default the user's home.",
"type": "string"
},
{
"field": "env",
"flag": "--env",
"repeated": true,
"summary": "Extra environment variables.",
"type": "key=value"
},
{
"field": "stdin",
"flag": "--stdin",
"summary": "Bytes written to standard input.",
"type": "string"
},
{
"field": "timeout",
"flag": "--timeout",
"summary": "Kill the process after this long; default 60 seconds, at most 10 minutes.",
"type": "duration"
},
{
"field": "user",
"flag": "--user",
"summary": "The guest user; default `user`. `root` is allowed: the whole machine belongs to the lessee.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:exec",
"method": "sandboxes.leases.exec",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Runs one command in the lease to completion and returns its output, capped at 1 MiB per stream. Long-running or interactive processes use the guest protocol at `status.endpoints.guest_uri`.",
"verb": "exec"
},
{
"effect": "read",
"flags": [
{
"field": "path",
"flag": "--path",
"required": true,
"summary": "The absolute path in the guest.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:readFile",
"method": "sandboxes.leases.read_file",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Reads one file from the lease, at most 16 MiB; larger files use the guest's `/files`.",
"verb": "read-file"
},
{
"effect": "write",
"flags": [
{
"field": "path",
"flag": "--path",
"required": true,
"summary": "The absolute path in the guest.",
"type": "string"
},
{
"field": "content",
"flag": "--content",
"required": true,
"summary": "The file's bytes.",
"type": "string"
},
{
"field": "mode",
"flag": "--mode",
"summary": "The file mode bits; default 0644.",
"type": "int"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:writeFile",
"method": "sandboxes.leases.write_file",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Writes one file in the lease, at most 16 MiB, creating parent directories.",
"verb": "write-file"
},
{
"effect": "read",
"flags": [
{
"field": "path",
"flag": "--path",
"required": true,
"summary": "The absolute directory path in the guest.",
"type": "string"
},
{
"field": "depth",
"flag": "--depth",
"summary": "Descend this many levels; default 1.",
"type": "int"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:listFiles",
"method": "sandboxes.leases.list_files",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Lists one directory in the lease.",
"verb": "list-files"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "path",
"flag": "--path",
"required": true,
"summary": "The absolute path in the guest.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:removeFile",
"method": "sandboxes.leases.remove_file",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Removes one file or directory tree in the lease.",
"verb": "remove-file"
},
{
"effect": "write",
"flags": [
{
"field": "port",
"flag": "--port",
"required": true,
"summary": "The port to expose.",
"type": "json"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:openPort",
"method": "sandboxes.leases.open_port",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Exposes a guest port.",
"verb": "open-port"
},
{
"effect": "write",
"flags": [
{
"field": "port",
"flag": "--port",
"required": true,
"summary": "The guest port.",
"type": "int"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:closePort",
"method": "sandboxes.leases.close_port",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Stops exposing a guest port.",
"verb": "close-port"
},
{
"effect": "write",
"flags": [
{
"field": "actions",
"flag": "--actions",
"repeated": true,
"summary": "The actions, performed in order; at most 64. An empty list with `screenshot` set only takes a screenshot.",
"type": "json"
},
{
"field": "screenshot",
"flag": "--screenshot",
"summary": "Take a screenshot after the last action and return it.",
"type": "json"
},
{
"field": "lease_generation",
"flag": "--lease-generation",
"summary": "Refuse STALE_GENERATION unless the lease is at this generation; 0 skips the check.",
"type": "int"
},
{
"field": "control_epoch",
"flag": "--control-epoch",
"summary": "Act under this AGENT control epoch; 0 acts only while nobody holds control.",
"type": "int"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:act",
"method": "sandboxes.leases.act",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Performs computer actions on a DESKTOP, BROWSER, or ANDROID lease, in order, and returns each action's result and, when `screenshot` is set, the screenshot taken after the last action. The actions are the Anthropic computer tool's and OpenAI computer use's, one-to-one (docs/services/sandboxes/computer-use.md). Refused CONTROL_HELD_BY_HUMAN while a human holds control.",
"verb": "act"
},
{
"effect": "write",
"flags": [
{
"field": "ttl",
"flag": "--ttl",
"summary": "How long the token admits a new connection; at most and default 5 minutes. A connected stream ends when the lease generation changes or the token is revoked.",
"type": "duration"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:openStream",
"method": "sandboxes.leases.open_stream",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Opens a read-only live view of a lease's display: a short-lived viewer token bound to the lease and its generation, an embeddable URL, and the WebRTC signaling endpoint with ICE servers. Input needs control (AcquireLeaseControl).",
"verb": "open-stream"
},
{
"effect": "write",
"flags": [
{
"field": "holder",
"flag": "--holder",
"required": true,
"summary": "HUMAN or AGENT.",
"type": "enum",
"values": [
"agent",
"human"
]
},
{
"field": "ttl",
"flag": "--ttl",
"summary": "How long; default 10 minutes, capped at 30 minutes in the Cell.",
"type": "duration"
},
{
"field": "holder_label",
"flag": "--holder-label",
"summary": "A label for the holder, for example the person's user id; recorded in the audit events.",
"type": "string"
},
{
"field": "preempt",
"flag": "--preempt",
"summary": "For HUMAN: take control from another human.",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:acquireControl",
"method": "sandboxes.leases.acquire_control",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Takes exclusive input control of a lease's display. A HUMAN acquire preempts an AGENT holder and returns a controller stream; an AGENT acquire is refused CONTROL_HELD_BY_HUMAN while a human holds control. Control lapses at `ttl`, which the Cell caps at 30 minutes.",
"verb": "acquire-control"
},
{
"effect": "write",
"flags": [
{
"field": "epoch",
"flag": "--epoch",
"required": true,
"summary": "The epoch AcquireLeaseControl returned.",
"type": "int"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:releaseControl",
"method": "sandboxes.leases.release_control",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Releases control held under `epoch`; its controller tokens stop working.",
"verb": "release-control"
},
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/leases/*}:getControl",
"method": "sandboxes.leases.get_control",
"permission": "sandboxes:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Gets who holds control of a lease's display.",
"verb": "get-control"
},
{
"effect": "write",
"flags": [
{
"field": "apk_path",
"flag": "--apk-path",
"required": true,
"summary": "The APK's path in the lease (write it with WriteLeaseFile first).",
"type": "string"
},
{
"field": "grant_permissions",
"flag": "--grant-permissions",
"summary": "Grant every runtime permission the app declares.",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/leases/*}:installApp",
"method": "sandboxes.leases.install_app",
"permission": "sandboxes:exec",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Installs an Android app (APK) on an ANDROID lease.",
"verb": "install-app"
}
],
"noun": "leases",
"resource_type": "sandboxes.sylphx.com/Lease"
},
{
"collection": "lease_events",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/leases/*/lease_events/*}",
"method": "sandboxes.lease_events.get",
"permission": "sandboxes:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}/lease_events/{lease_event}"
},
"summary": "Gets one lease event.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over `kind`.",
"type": "string"
},
{
"field": "wait",
"flag": "--wait",
"summary": "Block up to this long (at most 60 seconds) when there is no event after `page_token`.",
"type": "duration"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*/leases/*}/lease_events",
"method": "sandboxes.lease_events.list",
"paginates": true,
"permission": "sandboxes:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}/leases/{lease}"
},
"summary": "Lists a lease's events in order. With `wait`, blocks up to that long for an event after `page_token` (long poll).",
"verb": "list"
}
],
"noun": "lease-events",
"resource_type": "sandboxes.sylphx.com/LeaseEvent"
},
{
"collection": "volumes",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/volumes/*}",
"method": "sandboxes.volumes.get",
"permission": "sandboxes:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/volumes/{volume}"
},
"summary": "Gets a volume.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/volumes",
"method": "sandboxes.volumes.list",
"paginates": true,
"permission": "sandboxes:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists volumes in a environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "volume.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "volume.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "volume.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "volume.spec.size_gib",
"flag": "--spec.size-gib",
"required": true,
"summary": "Size in GiB, 1 to 1024; it may grow and never shrink.",
"type": "int"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/volumes",
"method": "sandboxes.volumes.create",
"permission": "sandboxes:write",
"positional": {
"arg": "ID",
"field": "volume_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "volume",
"summary": "Creates a volume.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "volume.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "volume.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "volume.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "volume.spec.size_gib",
"flag": "--spec.size-gib",
"required": true,
"summary": "Size in GiB, 1 to 1024; it may grow and never shrink.",
"type": "int"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{volume.name=orgs/*/projects/*/envs/*/volumes/*}",
"method": "sandboxes.volumes.update",
"permission": "sandboxes:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "volume.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/volumes/{volume}"
},
"resource_field": "volume",
"sends_etag": true,
"summary": "Updates a volume: grows `spec.size_gib` and edits metadata.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/volumes/*}",
"method": "sandboxes.volumes.delete",
"permission": "sandboxes:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/volumes/{volume}"
},
"summary": "Deletes a volume and destroys its data. Refused RESOURCE_IN_USE while it is attached.",
"verb": "delete"
}
],
"noun": "volumes",
"resource_type": "sandboxes.sylphx.com/Volume"
},
{
"collection": "snapshots",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/snapshots/*}",
"method": "sandboxes.snapshots.get",
"permission": "sandboxes:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/snapshots/{snapshot}"
},
"summary": "Gets a snapshot.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels, filterable fields, and Ready.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/snapshots",
"method": "sandboxes.snapshots.list",
"paginates": true,
"permission": "sandboxes:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists snapshots in a environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "snapshot.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "snapshot.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "snapshot.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "snapshot.spec.source_lease",
"flag": "--spec.source-lease",
"required": true,
"summary": "The running lease to capture.",
"type": "string"
},
{
"field": "snapshot.spec.include_memory",
"flag": "--spec.include-memory",
"summary": "Capture process memory too. Refused UNIMPLEMENTED until the microVM runtime exposes memory snapshots (sandboxes-e2b.md D1).",
"type": "bool"
},
{
"field": "snapshot.spec.retention",
"flag": "--spec.retention",
"summary": "Delete the snapshot after this long; default 7 days, at most 30 days.",
"type": "duration"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/snapshots",
"method": "sandboxes.snapshots.create",
"permission": "sandboxes:write",
"positional": {
"arg": "ID",
"field": "snapshot_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "snapshot",
"summary": "Captures a running lease's disk as a snapshot.",
"verb": "create"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the Resource does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/snapshots/*}",
"method": "sandboxes.snapshots.delete",
"permission": "sandboxes:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/snapshots/{snapshot}"
},
"summary": "Deletes a snapshot.",
"verb": "delete"
}
],
"noun": "snapshots",
"resource_type": "sandboxes.sylphx.com/Snapshot"
}
],
"commands": [],
"display_name": "Sylphx Sandboxes",
"noun": "sandboxes",
"stage": "preview"
},
{
"collections": [
{
"collection": "secrets",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/secrets/*}",
"method": "secrets.secrets.get",
"permission": "secrets:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secrets/{secret}"
},
"summary": "Gets a secret.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/secrets",
"method": "secrets.secrets.list",
"paginates": true,
"permission": "secrets:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists secrets in an environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "secret.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "secret.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "secret.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "secret.spec.encryption_key",
"flag": "--spec.encryption-key",
"summary": "The ENCRYPT Key the values are envelope-encrypted with; unset means the environment's default Key.",
"type": "string"
},
{
"field": "secret.spec.rotation_period",
"flag": "--spec.rotation-period",
"summary": "How often the value should be rotated; the Secret reports Ready=FALSE with reason `RotationDue` once the latest version is older.",
"type": "duration"
},
{
"field": "secret.spec.deletion_protection",
"flag": "--spec.deletion-protection",
"summary": "While true, Delete fails with DELETION_PROTECTED. Default true.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/secrets",
"method": "secrets.secrets.create",
"permission": "secrets:write",
"positional": {
"arg": "ID",
"field": "secret_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "secret",
"summary": "Creates a secret, without a value; add one with CreateSecretVersion.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "secret.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "secret.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "secret.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "secret.spec.rotation_period",
"flag": "--spec.rotation-period",
"summary": "How often the value should be rotated; the Secret reports Ready=FALSE with reason `RotationDue` once the latest version is older.",
"type": "duration"
},
{
"field": "secret.spec.deletion_protection",
"flag": "--spec.deletion-protection",
"summary": "While true, Delete fails with DELETION_PROTECTED. Default true.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{secret.name=orgs/*/projects/*/envs/*/secrets/*}",
"method": "secrets.secrets.update",
"permission": "secrets:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "secret.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secrets/{secret}"
},
"resource_field": "secret",
"sends_etag": true,
"summary": "Updates a secret.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also delete every child Resource; without it a parent with children fails with FAILED_PRECONDITION.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/secrets/*}",
"method": "secrets.secrets.delete",
"permission": "secrets:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secrets/{secret}"
},
"summary": "Deletes a secret and destroys every version.",
"verb": "delete"
}
],
"noun": "secrets",
"resource_type": "secrets.sylphx.com/Secret"
},
{
"collection": "secret_versions",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/secrets/*/secret_versions/*}",
"method": "secrets.secret_versions.get",
"permission": "secrets:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secrets/{secret}/secret_versions/{secret_version}"
},
"summary": "Gets a secret version.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*/secrets/*}/secret_versions",
"method": "secrets.secret_versions.list",
"paginates": true,
"permission": "secrets:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secrets/{secret}"
},
"summary": "Lists a secret's versions.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secrets/{secret}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "secret_version.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "secret_version.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "secret_version.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "secret_version.payload",
"flag": "--payload",
"required": true,
"sensitive": true,
"summary": "The value, at most 64 KiB. Write-only.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*/secrets/*}/secret_versions",
"method": "secrets.secret_versions.create",
"permission": "secrets:write",
"positional": null,
"resource_field": "secret_version",
"summary": "Adds a value to a secret as its newest version. The value is never returned.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Disable only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/secrets/*/secret_versions/*}:disable",
"method": "secrets.secret_versions.disable",
"permission": "secrets:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secrets/{secret}/secret_versions/{secret_version}"
},
"summary": "Disables a secret version: bindings stop delivering it.",
"verb": "disable"
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Enable only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/secrets/*/secret_versions/*}:enable",
"method": "secrets.secret_versions.enable",
"permission": "secrets:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secrets/{secret}/secret_versions/{secret_version}"
},
"summary": "Enables a disabled secret version.",
"verb": "enable"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Destroy only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/secrets/*/secret_versions/*}:destroy",
"method": "secrets.secret_versions.destroy",
"permission": "secrets:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secrets/{secret}/secret_versions/{secret_version}"
},
"summary": "Destroys a secret version's value irrecoverably.",
"verb": "destroy"
},
{
"effect": "read",
"flags": [],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/secrets/*/secret_versions/*}:access",
"method": "secrets.secret_versions.access",
"permission": "secrets:access",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secrets/{secret}/secret_versions/{secret_version}"
},
"summary": "Reads a secret version's value back. Break-glass: a separate permission, audited on every call, and never exposed to MCP.",
"verb": "access"
}
],
"noun": "secret-versions",
"resource_type": "secrets.sylphx.com/SecretVersion"
},
{
"collection": "secret_bindings",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/secret_bindings/*}",
"method": "secrets.secret_bindings.get",
"permission": "secrets:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secret_bindings/{secret_binding}"
},
"summary": "Gets a secret binding.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/secret_bindings",
"method": "secrets.secret_bindings.list",
"paginates": true,
"permission": "secrets:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists secret bindings in an environment.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "secret_binding.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "secret_binding.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "secret_binding.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "secret_binding.spec.secret",
"flag": "--spec.secret",
"required": true,
"summary": "The Secret to deliver, in the same environment.",
"type": "string"
},
{
"field": "secret_binding.spec.version",
"flag": "--spec.version",
"summary": "A pinned version; unset delivers the Secret's latest enabled version.",
"type": "string"
},
{
"field": "secret_binding.spec.workload",
"flag": "--spec.workload",
"required": true,
"summary": "The name of the Resource that consumes the value, for example a Hosting service.",
"type": "string"
},
{
"field": "secret_binding.spec.env_var.variable",
"flag": "--spec.env-var.variable",
"required": true,
"summary": "The variable name, for example `DATABASE_PASSWORD`.",
"type": "string"
},
{
"field": "secret_binding.spec.file.path",
"flag": "--spec.file.path",
"required": true,
"summary": "The absolute path, for example `/run/secrets/tls.key`.",
"type": "string"
},
{
"field": "secret_binding.spec.egress.hosts",
"flag": "--spec.egress.hosts",
"repeated": true,
"required": true,
"summary": "The hosts the value may be sent to, for example `api.example.com`.",
"type": "string"
},
{
"field": "secret_binding.spec.egress.header",
"flag": "--spec.egress.header",
"required": true,
"summary": "The request header to set, for example `Authorization`.",
"type": "string"
},
{
"field": "secret_binding.spec.egress.header_template",
"flag": "--spec.egress.header-template",
"summary": "The header value, with `{value}` standing for the Secret, for example `Bearer {value}`; default `{value}`.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/secret_bindings",
"method": "secrets.secret_bindings.create",
"permission": "secrets:write",
"positional": {
"arg": "ID",
"field": "secret_binding_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "secret_binding",
"summary": "Creates a secret binding.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "secret_binding.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "secret_binding.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "secret_binding.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "secret_binding.spec.secret",
"flag": "--spec.secret",
"required": true,
"summary": "The Secret to deliver, in the same environment.",
"type": "string"
},
{
"field": "secret_binding.spec.version",
"flag": "--spec.version",
"summary": "A pinned version; unset delivers the Secret's latest enabled version.",
"type": "string"
},
{
"field": "secret_binding.spec.workload",
"flag": "--spec.workload",
"required": true,
"summary": "The name of the Resource that consumes the value, for example a Hosting service.",
"type": "string"
},
{
"field": "secret_binding.spec.env_var.variable",
"flag": "--spec.env-var.variable",
"required": true,
"summary": "The variable name, for example `DATABASE_PASSWORD`.",
"type": "string"
},
{
"field": "secret_binding.spec.file.path",
"flag": "--spec.file.path",
"required": true,
"summary": "The absolute path, for example `/run/secrets/tls.key`.",
"type": "string"
},
{
"field": "secret_binding.spec.egress.hosts",
"flag": "--spec.egress.hosts",
"repeated": true,
"required": true,
"summary": "The hosts the value may be sent to, for example `api.example.com`.",
"type": "string"
},
{
"field": "secret_binding.spec.egress.header",
"flag": "--spec.egress.header",
"required": true,
"summary": "The request header to set, for example `Authorization`.",
"type": "string"
},
{
"field": "secret_binding.spec.egress.header_template",
"flag": "--spec.egress.header-template",
"summary": "The header value, with `{value}` standing for the Secret, for example `Bearer {value}`; default `{value}`.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{secret_binding.name=orgs/*/projects/*/envs/*/secret_bindings/*}",
"method": "secrets.secret_bindings.update",
"permission": "secrets:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "secret_binding.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secret_bindings/{secret_binding}"
},
"resource_field": "secret_binding",
"sends_etag": true,
"summary": "Updates a secret binding.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/secret_bindings/*}",
"method": "secrets.secret_bindings.delete",
"permission": "secrets:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/secret_bindings/{secret_binding}"
},
"summary": "Deletes a secret binding.",
"verb": "delete"
}
],
"noun": "secret-bindings",
"resource_type": "secrets.sylphx.com/SecretBinding"
}
],
"commands": [],
"display_name": "Sylphx Secrets",
"noun": "secrets",
"stage": "preview"
},
{
"collections": [
{
"collection": "workflows",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/workflows/*}",
"method": "workflows.workflows.get",
"permission": "workflows:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/workflows/{workflow}"
},
"summary": "Gets a workflow.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/workflows",
"method": "workflows.workflows.list",
"paginates": true,
"permission": "workflows:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists workflows.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "workflow.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "workflow.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "workflow.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "workflow.spec.handler_uri",
"flag": "--spec.handler-uri",
"summary": "An HTTPS URI on port 443 whose host is a verified Network Domain of this project or a Hosting route the project owns.",
"type": "string"
},
{
"field": "workflow.spec.service_handler.service",
"flag": "--spec.service-handler.service",
"required": true,
"summary": "The Hosting Service in the same environment.",
"type": "string"
},
{
"field": "workflow.spec.service_handler.path",
"flag": "--spec.service-handler.path",
"required": true,
"summary": "The request path, for example `/api/sylphx/workflows`.",
"type": "string"
},
{
"field": "workflow.spec.retry_policy.max_attempts",
"flag": "--spec.retry-policy.max-attempts",
"summary": "Attempts per step, 1 to 100; default 10.",
"type": "int"
},
{
"field": "workflow.spec.retry_policy.initial_interval",
"flag": "--spec.retry-policy.initial-interval",
"summary": "The first backoff; default 1s.",
"type": "duration"
},
{
"field": "workflow.spec.retry_policy.backoff_coefficient",
"flag": "--spec.retry-policy.backoff-coefficient",
"summary": "Backoff growth, 1.0 to 10.0; default 2.0.",
"type": "number"
},
{
"field": "workflow.spec.retry_policy.max_interval",
"flag": "--spec.retry-policy.max-interval",
"summary": "The largest backoff; default 10m.",
"type": "duration"
},
{
"field": "workflow.spec.timeouts.invocation_timeout",
"flag": "--spec.timeouts.invocation-timeout",
"summary": "One handler invocation, 1s to 900s; default 60s.",
"type": "duration"
},
{
"field": "workflow.spec.timeouts.run_timeout",
"flag": "--spec.timeouts.run-timeout",
"summary": "The whole Run, at most 365d; default 30d.",
"type": "duration"
},
{
"field": "workflow.spec.max_concurrent_runs",
"flag": "--spec.max-concurrent-runs",
"summary": "At most this many running Runs of this Workflow; 0 is unlimited within the plan.",
"type": "int"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/workflows",
"method": "workflows.workflows.create",
"permission": "workflows:write",
"positional": {
"arg": "ID",
"field": "workflow_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "workflow",
"summary": "Creates a workflow.",
"verb": "create"
},
{
"effect": "write",
"flags": [
{
"field": "workflow.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "workflow.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "workflow.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "workflow.spec.handler_uri",
"flag": "--spec.handler-uri",
"summary": "An HTTPS URI on port 443 whose host is a verified Network Domain of this project or a Hosting route the project owns.",
"type": "string"
},
{
"field": "workflow.spec.service_handler.service",
"flag": "--spec.service-handler.service",
"required": true,
"summary": "The Hosting Service in the same environment.",
"type": "string"
},
{
"field": "workflow.spec.service_handler.path",
"flag": "--spec.service-handler.path",
"required": true,
"summary": "The request path, for example `/api/sylphx/workflows`.",
"type": "string"
},
{
"field": "workflow.spec.retry_policy.max_attempts",
"flag": "--spec.retry-policy.max-attempts",
"summary": "Attempts per step, 1 to 100; default 10.",
"type": "int"
},
{
"field": "workflow.spec.retry_policy.initial_interval",
"flag": "--spec.retry-policy.initial-interval",
"summary": "The first backoff; default 1s.",
"type": "duration"
},
{
"field": "workflow.spec.retry_policy.backoff_coefficient",
"flag": "--spec.retry-policy.backoff-coefficient",
"summary": "Backoff growth, 1.0 to 10.0; default 2.0.",
"type": "number"
},
{
"field": "workflow.spec.retry_policy.max_interval",
"flag": "--spec.retry-policy.max-interval",
"summary": "The largest backoff; default 10m.",
"type": "duration"
},
{
"field": "workflow.spec.timeouts.invocation_timeout",
"flag": "--spec.timeouts.invocation-timeout",
"summary": "One handler invocation, 1s to 900s; default 60s.",
"type": "duration"
},
{
"field": "workflow.spec.timeouts.run_timeout",
"flag": "--spec.timeouts.run-timeout",
"summary": "The whole Run, at most 365d; default 30d.",
"type": "duration"
},
{
"field": "workflow.spec.max_concurrent_runs",
"flag": "--spec.max-concurrent-runs",
"summary": "At most this many running Runs of this Workflow; 0 is unlimited within the plan.",
"type": "int"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the workflow when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{workflow.name=orgs/*/projects/*/envs/*/workflows/*}",
"method": "workflows.workflows.update",
"permission": "workflows:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "workflow.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/workflows/{workflow}"
},
"resource_field": "workflow",
"sends_etag": true,
"summary": "Updates a workflow.",
"update_mask": "from-flags",
"verb": "update"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the workflow does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
},
{
"field": "force",
"flag": "--force",
"summary": "Also cancel and delete the Workflow's Runs and Schedules; without it a Workflow with open Runs or Schedules fails with INVALID_STATE.",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/workflows/*}",
"method": "workflows.workflows.delete",
"permission": "workflows:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/workflows/{workflow}"
},
"summary": "Deletes a workflow.",
"verb": "delete"
}
],
"noun": "workflows",
"resource_type": "workflows.sylphx.com/Workflow"
},
{
"collection": "schedules",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/schedules/*}",
"method": "workflows.schedules.get",
"permission": "workflows:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/schedules/{schedule}"
},
"summary": "Gets a schedule.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*}/schedules",
"method": "workflows.schedules.list",
"paginates": true,
"permission": "workflows:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}"
},
"summary": "Lists schedules.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "schedule.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "schedule.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "schedule.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "schedule.spec.workflow",
"flag": "--spec.workflow",
"required": true,
"summary": "The Workflow the Schedule starts, in the same environment.",
"type": "string"
},
{
"field": "schedule.spec.input",
"flag": "--spec.input",
"summary": "The input of every Run, at most 64 KiB of JSON.",
"type": "json"
},
{
"field": "schedule.spec.calendar.cron",
"flag": "--spec.calendar.cron",
"required": true,
"summary": "A 5-field cron expression, for example `0 3 * * *`.",
"type": "string"
},
{
"field": "schedule.spec.calendar.time_zone",
"flag": "--spec.calendar.time-zone",
"summary": "IANA time zone; default `UTC`.",
"type": "string"
},
{
"field": "schedule.spec.interval.every",
"flag": "--spec.interval.every",
"required": true,
"summary": "The period, 1s to 365d.",
"type": "duration"
},
{
"field": "schedule.spec.interval.offset",
"flag": "--spec.interval.offset",
"summary": "Phase offset within each period.",
"type": "duration"
},
{
"field": "schedule.spec.jitter",
"flag": "--spec.jitter",
"summary": "Random delay added to each fire, at most min(interval, 1h).",
"type": "duration"
},
{
"field": "schedule.spec.overlap_policy",
"flag": "--spec.overlap-policy",
"summary": "What a fire does while a previous Run is still running.",
"type": "enum",
"values": [
"skip",
"buffer_one",
"buffer_all",
"cancel_other",
"allow"
]
},
{
"field": "schedule.spec.catchup_window",
"flag": "--spec.catchup-window",
"summary": "Missed fires older than this are skipped; 10s to 365d.",
"type": "duration"
},
{
"field": "schedule.spec.paused",
"flag": "--spec.paused",
"summary": "Whether fires are paused.",
"type": "bool"
},
{
"field": "schedule.spec.pause_note",
"flag": "--spec.pause-note",
"summary": "Why the Schedule is paused; shown in status.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*}/schedules",
"method": "workflows.schedules.create",
"permission": "workflows:write",
"positional": {
"arg": "ID",
"field": "schedule_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "schedule",
"summary": "Creates a schedule.",
"verb": "create",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "schedule.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "schedule.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "schedule.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "schedule.spec.workflow",
"flag": "--spec.workflow",
"required": true,
"summary": "The Workflow the Schedule starts, in the same environment.",
"type": "string"
},
{
"field": "schedule.spec.input",
"flag": "--spec.input",
"summary": "The input of every Run, at most 64 KiB of JSON.",
"type": "json"
},
{
"field": "schedule.spec.calendar.cron",
"flag": "--spec.calendar.cron",
"required": true,
"summary": "A 5-field cron expression, for example `0 3 * * *`.",
"type": "string"
},
{
"field": "schedule.spec.calendar.time_zone",
"flag": "--spec.calendar.time-zone",
"summary": "IANA time zone; default `UTC`.",
"type": "string"
},
{
"field": "schedule.spec.interval.every",
"flag": "--spec.interval.every",
"required": true,
"summary": "The period, 1s to 365d.",
"type": "duration"
},
{
"field": "schedule.spec.interval.offset",
"flag": "--spec.interval.offset",
"summary": "Phase offset within each period.",
"type": "duration"
},
{
"field": "schedule.spec.jitter",
"flag": "--spec.jitter",
"summary": "Random delay added to each fire, at most min(interval, 1h).",
"type": "duration"
},
{
"field": "schedule.spec.overlap_policy",
"flag": "--spec.overlap-policy",
"summary": "What a fire does while a previous Run is still running.",
"type": "enum",
"values": [
"skip",
"buffer_one",
"buffer_all",
"cancel_other",
"allow"
]
},
{
"field": "schedule.spec.catchup_window",
"flag": "--spec.catchup-window",
"summary": "Missed fires older than this are skipped; 10s to 365d.",
"type": "duration"
},
{
"field": "schedule.spec.paused",
"flag": "--spec.paused",
"summary": "Whether fires are paused.",
"type": "bool"
},
{
"field": "schedule.spec.pause_note",
"flag": "--spec.pause-note",
"summary": "Why the Schedule is paused; shown in status.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Create the schedule when it does not exist (declarative upsert).",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "PATCH /v1/{schedule.name=orgs/*/projects/*/envs/*/schedules/*}",
"method": "workflows.schedules.update",
"permission": "workflows:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "schedule.name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/schedules/{schedule}"
},
"resource_field": "schedule",
"sends_etag": true,
"summary": "Updates a schedule.",
"update_mask": "from-flags",
"verb": "update",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Delete only if the current etag matches.",
"type": "string"
},
{
"field": "allow_missing",
"flag": "--allow-missing",
"summary": "Succeed when the schedule does not exist.",
"type": "bool"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "DELETE /v1/{name=orgs/*/projects/*/envs/*/schedules/*}",
"method": "workflows.schedules.delete",
"permission": "workflows:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/schedules/{schedule}"
},
"summary": "Deletes a schedule.",
"verb": "delete",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "pause_note",
"flag": "--pause-note",
"summary": "Why the Schedule is paused.",
"type": "string"
},
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/schedules/*}:pause",
"method": "workflows.schedules.pause",
"permission": "workflows:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/schedules/{schedule}"
},
"summary": "Pauses a Schedule: no fire starts a Run until it is resumed.",
"verb": "pause",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
},
{
"effect": "write",
"flags": [
{
"field": "etag",
"flag": "--etag",
"summary": "Act only if the current etag matches.",
"type": "string"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/schedules/*}:resume",
"method": "workflows.schedules.resume",
"permission": "workflows:write",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/schedules/{schedule}"
},
"summary": "Resumes a paused Schedule; missed fires follow `catchup_window`.",
"verb": "resume",
"waits": {
"default": true,
"skip_flag": "--no-wait"
}
}
],
"noun": "schedules",
"resource_type": "workflows.sylphx.com/Schedule"
},
{
"collection": "runs",
"commands": [
{
"effect": "read",
"flags": [],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/workflows/*/runs/*}",
"method": "workflows.runs.get",
"permission": "workflows:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/workflows/{workflow}/runs/{run}"
},
"summary": "Gets a run.",
"verb": "get"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 50, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
},
{
"field": "filter",
"flag": "--filter",
"summary": "AIP-160 filter over labels and filterable fields.",
"type": "string"
},
{
"field": "order_by",
"flag": "--order-by",
"summary": "AIP-132 ordering over filterable fields.",
"type": "string"
}
],
"http": "GET /v1/{parent=orgs/*/projects/*/envs/*/workflows/*}/runs",
"method": "workflows.runs.list",
"paginates": true,
"permission": "workflows:read",
"positional": {
"arg": "PARENT",
"default_from_context": true,
"field": "parent",
"optional": true,
"pattern": "orgs/{org}/projects/{project}/envs/{env}/workflows/{workflow}"
},
"summary": "Lists runs.",
"verb": "list"
},
{
"effect": "write",
"flags": [
{
"default_from_context": true,
"field": "parent",
"flag": "--parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/workflows/{workflow}",
"summary": "The parent to create in; defaults to the linked project or the key's scope.",
"type": "string"
},
{
"field": "run.meta.labels",
"flag": "--meta.labels",
"repeated": true,
"summary": "Caller-writable, indexed labels (AIP-122 label rules).",
"type": "key=value"
},
{
"field": "run.meta.annotations",
"flag": "--meta.annotations",
"repeated": true,
"summary": "Caller-writable, unindexed annotations.",
"type": "key=value"
},
{
"field": "run.meta.display_name",
"flag": "--meta.display-name",
"summary": "Caller-writable human-readable name.",
"type": "string"
},
{
"field": "run.input",
"flag": "--input",
"summary": "The Run input, at most 256 KiB of JSON.",
"type": "json"
},
{
"field": "run.start_delay",
"flag": "--start-delay",
"summary": "Delay the first invocation by this much.",
"type": "duration"
},
{
"field": "validate_only",
"flag": "--dry-run",
"summary": "Validate and print the result without writing (validate_only).",
"type": "bool"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*/workflows/*}/runs",
"method": "workflows.runs.create",
"permission": "workflows:run",
"positional": {
"arg": "ID",
"field": "run_id",
"optional": true,
"summary": "The id segment of the new Resource's name; the server assigns one when omitted."
},
"resource_field": "run",
"summary": "Starts a Run of a Workflow.",
"verb": "start"
},
{
"effect": "write",
"flags": [
{
"field": "inputs",
"flag": "--inputs",
"repeated": true,
"required": true,
"summary": "The inputs, one child Run each; at most 10 000.",
"type": "json"
},
{
"field": "max_concurrency",
"flag": "--max-concurrency",
"summary": "At most this many children run at once; 0 is the Workflow's limit.",
"type": "int"
}
],
"http": "POST /v1/{parent=orgs/*/projects/*/envs/*/workflows/*}/runs:startBatch",
"method": "workflows.runs.start_batch",
"permission": "workflows:run",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "parent",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/workflows/{workflow}"
},
"summary": "Starts a batch: a parent Run that fans out one child Run per item, each with a stable index and count.",
"verb": "start-batch"
},
{
"effect": "write",
"flags": [
{
"field": "signal",
"flag": "--signal",
"required": true,
"summary": "The signal name the handler waits on.",
"type": "string"
},
{
"field": "payload",
"flag": "--payload",
"summary": "The signal payload, at most 64 KiB of JSON.",
"type": "json"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/workflows/*/runs/*}:signal",
"method": "workflows.runs.signal",
"permission": "workflows:run",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/workflows/{workflow}/runs/{run}"
},
"summary": "Sends a named signal to a running Run; a `wait` op for that name resumes with its payload. A signal to a closed Run fails with INVALID_STATE.",
"verb": "signal"
},
{
"confirm": {
"prompt": true,
"skip_flag": "--yes"
},
"effect": "destructive",
"flags": [
{
"field": "reason",
"flag": "--reason",
"summary": "Why the Run is cancelled.",
"type": "string"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/workflows/*/runs/*}:cancel",
"method": "workflows.runs.cancel",
"permission": "workflows:run",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/workflows/{workflow}/runs/{run}"
},
"summary": "Requests cancellation. Timers and waits stop; a running invocation is not interrupted: the handler receives one final invocation with `cancel: true`, and the Run ends `cancelled` when it answers.",
"verb": "cancel"
},
{
"effect": "read",
"flags": [
{
"field": "timeout",
"flag": "--timeout",
"summary": "How long to wait; default 30s, at most 60s.",
"type": "duration"
}
],
"http": "POST /v1/{name=orgs/*/projects/*/envs/*/workflows/*/runs/*}:wait",
"method": "workflows.runs.wait",
"permission": "workflows:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/workflows/{workflow}/runs/{run}"
},
"summary": "Waits up to `timeout` (at most 60s) for the Run to close, then returns it, closed or not.",
"verb": "wait"
},
{
"effect": "read",
"flags": [
{
"field": "page_size",
"flag": "--page-size",
"summary": "At most this many; default 100, clamped to 1000.",
"type": "int"
},
{
"field": "page_token",
"flag": "--page-token",
"summary": "`next_page_token` of the previous page.",
"type": "string"
}
],
"http": "GET /v1/{name=orgs/*/projects/*/envs/*/workflows/*/runs/*}:readHistory",
"method": "workflows.runs.read_history",
"permission": "workflows:read",
"positional": {
"arg": "NAME",
"default_from_context": false,
"field": "name",
"pattern": "orgs/{org}/projects/{project}/envs/{env}/workflows/{workflow}/runs/{run}"
},
"summary": "Reads a page of the Run's immutable history, projected to Sylphx events.",
"verb": "read-history"
}
],
"noun": "runs",
"resource_type": "workflows.sylphx.com/Run"
}
],
"commands": [],
"display_name": "Sylphx Workflows",
"noun": "workflows",
"stage": "preview"
}
],
"usage": "sylphx <service> <collection> <verb> [NAME|PARENT] [--flags]"
}