---
canonical: "https://agi-labo.com/en/tools/wings/docs/secrets"
title: "Secrets"
description: "Pass private values to one Handler without placing them in source."
section: "Core features"
order: 12
pageType: "how-to"
lastVerifiedVersion: "1.4.16"
lastVerifiedAt: "2026-10-15"
draft: false
surfaces: ["cli", "console", "api"]
plans: ["free", "member"]
---

A Secret holds a private value for one Handler.
Use it for values such as a webhook verification secret.
Store credentials for external APIs in a [Connection](/en/tools/wings/docs/connections).

## Save a value

Copy the value to your clipboard, then run:

```sh
wings handler secret set <handler-id> WEBHOOK_SECRET
```

Use `--stdin` to read from standard input instead.
Do not put the value in command arguments, source code, logs, or chat.

## Read it from a Handler

The Handler can read the value as `env.WEBHOOK_SECRET`.
Secrets are encrypted when stored.
That does not hide a value your code writes into results or logs.

## List or remove Secrets

```sh
wings handler secret list <handler-id>
wings handler secret rm <handler-id> WEBHOOK_SECRET
```

The list does not display Secret values.
Removing a Handler or the account also deletes its Secrets.

Names starting with `WINGS_` are reserved.
Trying to create or update one returns `invalid_secret_name`.
