---
title: "openemail signatures"
description: "Every command in this namespace, with its arguments, flags and examples."
url: "https://openemail.uk/docs/cli/reference/signatures"
area: "CLI"
category: "Reference"
---

# openemail signatures

Every command in this namespace, with its arguments, flags and examples.

## Commands

### `openemail signatures list`

List the signatures of the workspace or of one address, a page at a time

```bash
openemail signatures list [flags]
```

Resolves one page of signatures, sorted by address and then oldest first. An address keeps a list of named signatures, as its Signature tab in the app shows. At most one of them is the default for new mail (`isDefault`) and at most one the default for replies and forwards (`isReplyDefault`), and one signature can be both.

Give `address` to read the signatures of one address, or of a catch-all with `*@example.com`. Without it the list holds every address. An address that only ever had the single signature of earlier versions shows it here as one signature called `Signature`, default for both.

`emails.send` adds the default of the address it sends from, and takes `signatureId` to add any other signature of that address instead.

Add `--all` to walk every page: a table on a terminal, one JSON object per line when piped or with `--ndjson`, and one `{ items, hasMore, nextCursor }` document with `--json`. `--max <n>` stops after that many items.

- Scopes: `settings:read`.
- Needs a sign-in.
- Aliases: `ls`.

**Flags**

- `--address <value>`: One address, such as `hello@example.com`, or `*@example.com` for the catch-all of a domain. Left out, every address is listed.
- `--limit <n>` (default `25`): Page size, from 1 to 100. The server defaults to 25.
- `--cursor <value>`: The `nextCursor` of the previous page, passed back as it came. Leave it out for the first page.
- `--all`: Fetch every page and stream the items as they arrive.
- `--max <n>`: Stop after this many items. Implies `--all`.
- `--ndjson`: Print every item as one JSON object per line. Implies `--all`

**Examples**

```bash
openemail signatures list
```

With optional flags

```bash
openemail signatures list --address hello@example.com
```

Walk every page and stop after 100 items

```bash
openemail signatures list --all --max 100
```

One JSON object per line when piped

```bash
openemail signatures list --all > signatures.ndjson
```

Also available in: API [`GET /signatures`](https://openemail.uk/docs/api/reference/settings#get-signatures); TypeScript [`signatures.list()`](https://openemail.uk/docs/sdk/reference/signatures#list); Python [`signatures.list()`](https://openemail.uk/docs/python/reference/signatures#list); Ruby [`signatures.list`](https://openemail.uk/docs/ruby/reference/signatures#list); PHP [`signatures->list`](https://openemail.uk/docs/php/reference/signatures#list); Go [`Signatures.List`](https://openemail.uk/docs/go/reference/signatures#list); Java [`signatures().list`](https://openemail.uk/docs/java/reference/signatures#list); C# [`Signatures.ListAsync`](https://openemail.uk/docs/csharp/reference/signatures#list).

### `openemail signatures get`

Read one signature by id

```bash
openemail signatures get <id> [flags]
```

Looks up a single signature and returns it in the same shape as a row of `list`: the address it belongs to, its name, its HTML and whether it is the default for new mail, for replies and forwards, for both or for neither.

- Scopes: `settings:read`.
- Needs a sign-in.
- Aliases: `show`, `view`.

**Arguments**

- `<id>` (required): Signature id, which starts with `sig_`.

**Examples**

```bash
openemail signatures get sig_8f2c1a9b7d3e4f60a1b2c3d4
```

Print the raw JSON

```bash
openemail signatures get sig_8f2c1a9b7d3e4f60a1b2c3d4 --json
```

Also available in: API [`GET /signatures/{id}`](https://openemail.uk/docs/api/reference/settings#get-signatures-id); TypeScript [`signatures.get()`](https://openemail.uk/docs/sdk/reference/signatures#get); Python [`signatures.get()`](https://openemail.uk/docs/python/reference/signatures#get); Ruby [`signatures.get`](https://openemail.uk/docs/ruby/reference/signatures#get); PHP [`signatures->get`](https://openemail.uk/docs/php/reference/signatures#get); Go [`Signatures.Get`](https://openemail.uk/docs/go/reference/signatures#get); Java [`signatures().get`](https://openemail.uk/docs/java/reference/signatures#get); C# [`Signatures.GetAsync`](https://openemail.uk/docs/csharp/reference/signatures#get).

### `openemail signatures create`

Add a signature to an address

```bash
openemail signatures create --address <value> --name <value> --html <value> [flags]
openemail signatures create --data <json|@file|-> [flags]
```

Adds a signature to one address, or to a catch-all with `*@example.com`, and resolves with it as it is stored. `name` is what the app calls it and is unique on its address, whatever the case, so a second `Work` on the same address is a 409 `signature_name_taken`. `html` is sanitised the way outgoing mail is and has to keep some text or an image, so the stored HTML can differ from what you sent.

The first signature of an address becomes its default for new mail and for replies and forwards, unless `--is-default` or `--is-reply-default` says `false`. A later signature becomes a default only when you ask, and then takes that place from the signature that held it. An address holds at most 50 signatures, and the call past that is a 422 `signature_limit_reached`.

The address has to be one of the workspace, or a catch-all on a verified domain here with its catch-all on.

- Scopes: `settings:write`.
- Needs a sign-in.
- Aliases: `new`, `add`.

**Flags**

- `--address <value>`: The address the signature is for, such as `hello@example.com`, or `*@example.com` for the catch-all of a domain. Required, here or in `--data`.
- `--name <value>`: What the signature is called, trimmed, 1 to 80 characters. Unique on its address, whatever the case. Required, here or in `--data`.
- `--html <value>`: The signature as HTML, at most 150,000 characters before and after sanitising. It has to keep some text or an image. Required, here or in `--data`.
- `--is-default`: `true` makes it the signature of new mail from the address. Left out, only the first signature of an address becomes that.
- `--is-reply-default`: `true` makes it the signature of replies and forwards from the address. Left out, only the first signature of an address becomes that.
- `--data <json|@file|->`: The whole `body` as JSON, inline, from a file with @path, or - for standard input. Flags override its keys.

**Examples**

The required values only

```bash
openemail signatures create --address hello@example.com --name Short --html '<p>Ada<br>Acme Ltd</p>'
```

With optional flags

```bash
openemail signatures create --address hello@example.com --name Short --html '<p>Ada<br>Acme Ltd</p>' --is-reply-default
```

Read the whole body from a JSON file

```bash
openemail signatures create --data @signatures.json
```

Also available in: API [`POST /signatures`](https://openemail.uk/docs/api/reference/settings#post-signatures); TypeScript [`signatures.create()`](https://openemail.uk/docs/sdk/reference/signatures#create); Python [`signatures.create()`](https://openemail.uk/docs/python/reference/signatures#create); Ruby [`signatures.create`](https://openemail.uk/docs/ruby/reference/signatures#create); PHP [`signatures->create`](https://openemail.uk/docs/php/reference/signatures#create); Go [`Signatures.Create`](https://openemail.uk/docs/go/reference/signatures#create); Java [`signatures().create`](https://openemail.uk/docs/java/reference/signatures#create); C# [`Signatures.CreateAsync`](https://openemail.uk/docs/csharp/reference/signatures#create).

### `openemail signatures update`

Rename a signature, rewrite it or change what it is the default for

```bash
openemail signatures update <id> [flags]
```

Changes a signature and resolves with it as it is stored. Send any of `name`, `html`, `--is-default` and `--is-reply-default`: a field left out stays as it is, and a patch with none of them is a 422.

`isDefault: true` makes it the signature of new mail from its address in place of the one that was. `isDefault: false` takes that away when this signature held it, so new mail from the address goes out with no signature until another one is chosen. `--is-reply-default` does the same for replies and forwards. The two are independent, so one signature can sign new mail and another, shorter one the replies.

A new name another signature of the address already has, compared without case, is a 409 `signature_name_taken`. The HTML is sanitised again and has to keep some text or an image. A message that is already scheduled picks up the new HTML when it goes out.

- Scopes: `settings:write`.
- Needs a sign-in.
- Aliases: `edit`.

**Arguments**

- `<id>` (required): Signature id, which starts with `sig_`.

**Flags**

- `--name <value>`: New name, trimmed, 1 to 80 characters. Left out, the name stays.
- `--html <value>`: New HTML, at most 150,000 characters before and after sanitising. Left out, the HTML stays.
- `--is-default`: `true` makes it the default for new mail, `false` takes that away when it held it. Left out, nothing changes.
- `--is-reply-default`: `true` makes it the default for replies and forwards, `false` takes that away when it held it. Left out, nothing changes.
- `--data <json|@file|->`: The whole `patch` as JSON, inline, from a file with @path, or - for standard input. Flags override its keys.

**Examples**

With optional flags

```bash
openemail signatures update sig_8f2c1a9b7d3e4f60a1b2c3d4 --is-default
```

Print the raw JSON

```bash
openemail signatures update sig_8f2c1a9b7d3e4f60a1b2c3d4 --is-default --json
```

Also available in: API [`PATCH /signatures/{id}`](https://openemail.uk/docs/api/reference/settings#patch-signatures-id); TypeScript [`signatures.update()`](https://openemail.uk/docs/sdk/reference/signatures#update); Python [`signatures.update()`](https://openemail.uk/docs/python/reference/signatures#update); Ruby [`signatures.update`](https://openemail.uk/docs/ruby/reference/signatures#update); PHP [`signatures->update`](https://openemail.uk/docs/php/reference/signatures#update); Go [`Signatures.Update`](https://openemail.uk/docs/go/reference/signatures#update); Java [`signatures().update`](https://openemail.uk/docs/java/reference/signatures#update); C# [`Signatures.UpdateAsync`](https://openemail.uk/docs/csharp/reference/signatures#update).

### `openemail signatures delete`

Delete a signature

```bash
openemail signatures delete <id> [flags]
```

Deletes a signature for good. When it was a default, that default is left empty, so mail it would have signed goes out with no signature until another one is chosen with `update`. A scheduled message that named it with `signatureId` carries the default of its address instead. There is no undo.

- Scopes: `settings:write`.
- Needs a sign-in.
- Asks you to confirm.
- Aliases: `rm`, `del`, `remove`.

**Arguments**

- `<id>` (required): Signature id, which starts with `sig_`.

**Examples**

```bash
openemail signatures delete sig_8f2c1a9b7d3e4f60a1b2c3d4
```

Skip the confirmation, for scripts

```bash
openemail signatures delete sig_8f2c1a9b7d3e4f60a1b2c3d4 --yes
```

Also available in: API [`DELETE /signatures/{id}`](https://openemail.uk/docs/api/reference/settings#delete-signatures-id); TypeScript [`signatures.delete()`](https://openemail.uk/docs/sdk/reference/signatures#delete); Python [`signatures.delete()`](https://openemail.uk/docs/python/reference/signatures#delete); Ruby [`signatures.delete`](https://openemail.uk/docs/ruby/reference/signatures#delete); PHP [`signatures->delete`](https://openemail.uk/docs/php/reference/signatures#delete); Go [`Signatures.Delete`](https://openemail.uk/docs/go/reference/signatures#delete); Java [`signatures().delete`](https://openemail.uk/docs/java/reference/signatures#delete); C# [`Signatures.DeleteAsync`](https://openemail.uk/docs/csharp/reference/signatures#delete).

### `openemail signatures copy`

Copy a signature to other addresses

```bash
openemail signatures copy <id> --addresses <a,b> [flags]
openemail signatures copy <id> --data <json|@file|-> [flags]
```

Puts a copy of a signature on up to 500 other addresses or catch-alls, as Copy to other addresses does in the app, and resolves with the copies. An address that already has a signature with the same name, whatever the case, gets its HTML replaced, so copying again after an edit brings every copy up to date. Any other address gets a new signature with that name.

A copy becomes the default for new mail where `--is-default` is `true` and the default for replies and forwards where `--is-reply-default` is `true`. On an address that had no signature at all it becomes both unless you say `false`. Left out, the defaults of the other addresses stay as they are.

The address the signature is already on is skipped. Each copy is its own signature from then on, with its own id: editing the original later changes no copy until you copy again.

- Scopes: `settings:write`.
- Needs a sign-in.

**Arguments**

- `<id>` (required): The signature to copy.

**Flags**

- `--addresses <a,b>` (repeatable): 1 to 500 addresses to copy it to. Each is one address or `*@example.com` for a catch-all. Required, here or in `--data`.
- `--is-default`: `true` makes each copy the default for new mail on its address.
- `--is-reply-default`: `true` makes each copy the default for replies and forwards on its address.
- `--data <json|@file|->`: The whole `body` as JSON, inline, from a file with @path, or - for standard input. Flags override its keys.

**Examples**

The required values only

```bash
openemail signatures copy sig_8f2c1a9b7d3e4f60a1b2c3d4 --addresses sales@example.com,support@example.com
```

With optional flags

```bash
openemail signatures copy sig_8f2c1a9b7d3e4f60a1b2c3d4 --addresses sales@example.com,support@example.com --is-default
```

Read the whole body from a JSON file

```bash
openemail signatures copy sig_8f2c1a9b7d3e4f60a1b2c3d4 --data @signatures.json
```

Also available in: API [`POST /signatures/{id}/copy`](https://openemail.uk/docs/api/reference/settings#post-signatures-id-copy); TypeScript [`signatures.copy()`](https://openemail.uk/docs/sdk/reference/signatures#copy); Python [`signatures.copy()`](https://openemail.uk/docs/python/reference/signatures#copy); Ruby [`signatures.copy`](https://openemail.uk/docs/ruby/reference/signatures#copy); PHP [`signatures->copy`](https://openemail.uk/docs/php/reference/signatures#copy); Go [`Signatures.Copy`](https://openemail.uk/docs/go/reference/signatures#copy); Java [`signatures().copy`](https://openemail.uk/docs/java/reference/signatures#copy); C# [`Signatures.CopyAsync`](https://openemail.uk/docs/csharp/reference/signatures#copy).
