Skip to main content
A bucket is the credential container an SDK, MCP server, or service points at. Services declare what is enabled; buckets hold what a running app actually uses. Secrets are resolved server-side by Fused at dispatch time. They never appear in a config file, a plan receipt, or a generated package.

Use managed auth or your own credentials

For a supported OAuth service, you can use a Managed service instead of creating and storing a provider client pair. Fused holds the application’s client secret; your selected bucket still owns the encrypted user connections. Use the steps below for your own provider application or other authentication schemes.

One app, different buckets per service

An SDK or MCP server declares one default bucket: at the top level. Any service may override it with its own bucket:, so a single app can route different services’ credentials through different buckets:
A service without its own bucket: resolves through the app’s top-level default. A local ${bucket.auth...} reference joins services in the same bucket. A managed ${fused.bucket.auth...} reference selects Fused’s broker application. Webhook signing-secret references explicitly name their bucket independently of the app.

Pick a bucket before you write to one

A listed bucket is one you can see, not necessarily one you may use. Choose a visible candidate, run the action you intended, and let the permission check decide. If it is denied, stop and report it — do not create a fallback bucket. Create one only when you actually need isolation:
A buckets: block in workspace.yaml configures an existing bucket. It cannot create one. If no bucket of that name exists, apply fails with “bucket not found” rather than creating it. bucket create is the only way.

Set up or edit provider credentials

Run connect with the service name. --bucket defaults to default; pass another bucket name or UUID when needed.
The picker shows each authentication method and its stored status: The picker also appears when only one method matches or when you supply values. It uses metadata only: existing secrets are never displayed or prefilled. Secret entry is masked, and cancelling leaves credentials unchanged.

Supply values for automation

Pass one quoted "name=value, name=value" argument and --no-input. Your shell can expand environment variables inside the argument. A single-value method uses its exact authentication scheme name, which you can inspect with fused-cli service show --registry stripe --json:
Paired methods use their field names in the same argument:
Commas separate fields, and spaces before field names are optional. Values retain embedded = and ; characters. Use interactive setup when a value contains a literal comma. Supply both members of a credential pair together; Basic methods that allow an empty password accept password=. With --no-input, CI, or --json, a sole matching method is selected automatically. If several methods match, narrow the selection with --type or --auth-name. Supplied field names do not infer an authentication type. Without those non-interactive modes, the picker remains available even when you pass values.
Saving through connect takes effect immediately, with no plan or apply step. Selecting a configured method or supplying new values replaces its credentials. In non-interactive mode, omitting values reports an already configured method’s status; missing credentials require explicit input.

connect flags

When a stored secret’s expiry has passed, Engine blocks requests that require it before contacting the provider. Expiry does not rotate credentials automatically. The picker marks expired credentials so you can replace them with fused-cli connect <service> --bucket <bucket>.

Store named secrets, environment values, and certificates

Use bucket secret, bucket env, or bucket cert for named entries that belong to the bucket rather than a provider authentication scheme. Each supports set, get, and remove; --bucket defaults to default.
set splits each assignment at its first = and preserves the rest of the value. Environment values can be explicitly empty (NAME=). Certificates accept public X.509 PEM certificates or chains; private keys belong to a provider’s mTLS credential pair through connect. Environment entries are non-secret bucket-wide values. A service-specific value with the same key takes precedence. A shell variable such as $API_URL supplies its current local value at command invocation; the saved bucket entry is a value, not a reference to that shell variable.

Inspect or retrieve secrets

list returns metadata only. Generic secret get uses the audited retrieval endpoint and requires both export opt-in and credentials.reveal. It never enables retrieval automatically. Generic secret writes also support --expires-at. For an API key stored by connect, use its opaque metadata ID to opt into retrieval:
OAuth/OIDC pairs, bearer tokens, Basic pairs, and mTLS credentials cannot opt into plaintext retrieval. Replacing an API key through connect resets its export policy to disabled.

Store a non-secret value

Some providers need a non-secret piece of configuration, like a tenant ID that appears in the host name. bucket value set takes five positional arguments, and only the third comes from a fixed set:
The env namespace here is the bucket’s own value store — it does not read an operating-system environment variable.

Inject a bucket value into a request

An SDK or MCP service can pull those values into the outgoing request at dispatch time, so a tenant ID or account prefix never has to be hardcoded per environment. Usually you will not write these by hand — fused-cli init generates them for whichever server-template variables your selected operations declare, leaving you to supply the value.
References always resolve against the bucket the referencing service uses — that service’s own bucket: override when one is set, otherwise the app’s top-level bucket:. There is no way to name an arbitrary third bucket in a reference, unlike a kind: webhook secret. An ordinary injection value may also mix a tag with surrounding text, such as "Bearer ${bucket.secrets.API_KEY}". location: server_variable is stricter than the rest. Its value must be a complete ${bucket.env.KEY} or ${bucket.values.KEY} reference — never a literal, never interpolated, never a secret — because host routing has to stay non-secret and reviewable. Plan checks name against the service and operation server templates and rejects an undeclared one.

Which value wins

An omitted mode canonicalizes to force.
A host template must keep a fixed registrable anchor such as .sendbird.com. Whole-host or public-suffix-only forms like https://{host} or https://{tenant}.com fail closed — Fused validates the resolved value and the final HTTPS URL before dispatch.

Inspect a bucket

Permissions

Connect a user's account

Static credentials cover one identity. OAuth covers one per end user.