> ## Documentation Index
> Fetch the complete documentation index at: https://docs.alumio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Storage: Remove keys from item

> Removes partial data from an item in a storage.

export const FormField = ({property, label, required = false, diType, uiPatterns, children}) => {
  const patterns = Array.isArray(uiPatterns) ? uiPatterns : uiPatterns ? [uiPatterns] : [];
  return <div style={{
    margin: '1.5rem 0'
  }}>
      <div style={{
    display: 'flex',
    alignItems: 'baseline',
    flexWrap: 'wrap',
    gap: '0.5rem',
    marginBottom: '0.25rem'
  }}>
        <strong>{label}</strong>
        <span style={{
    fontSize: '0.7rem',
    fontWeight: 600,
    textTransform: 'uppercase',
    letterSpacing: '0.04em',
    color: required ? '#6241f5' : '#6b7280'
  }}>
          {required ? 'Required' : 'Optional'}
        </span>
      </div>

      <div>{children}</div>

      {diType || patterns.length > 0 ? <p style={{
    fontSize: '0.85rem',
    color: '#6b7280',
    marginBottom: 0
  }}>
          {diType ? <>
              See the <a href={`/references/${diType}`}>{diType}</a> reference.{' '}
            </> : null}
          {patterns.length > 0 ? <>
              Accepts a <a href={`/documentation/placeholders-and-patterns/patterns#${patterns[0]}`}>pattern</a>.
            </> : null}
        </p> : null}
    </div>;
};

Removes one or more pieces of data from an item that is already saved in a storage, leaving the rest of the item intact. Use it to clean up parts you no longer need, for example dropping a temporary flag or a stale timestamp from a stored record. The item is looked up by its identifier, the paths you list are stripped out, and the trimmed item is saved back under the same identifier. The removal is permanent and is not undone if the run later fails, so check the paths before you run it. If no item with that identifier exists, nothing is removed and the run continues without an error. The data flowing through your transformation is passed along unchanged.

This documentation describes: [Schema](/schemas/transformer/storage-remove-entity-from-storage)

## Fields

<FormField property="storage" label="Storage" required diType="storage">
  The storage that holds the item. See [Storage](/references/storage) for how to set one up.
</FormField>

<FormField property="storageKey" label="Storage item identifier" required>
  The identifier of the item to update. Supports [placeholders](/references/placeholders), so you can build it from your data, for example `&{sku}`.
</FormField>

<FormField property="removals" label="Data to remove" required>
  One or more paths inside the stored item to delete. Add a row per path, for example `discount` to drop a top-level field, or `pricing.discount` for a nested one. Each path supports [placeholders](/references/placeholders). At least one path is required.
</FormField>

## Sample data

This transformer trims a stored item as a side effect and does not alter the data passing through it, so there is no before/after to show. With the configuration below, the item stored under `SHOE-42` is loaded, its `discount` and `internal_note` paths are removed, and the trimmed item is saved back under the same identifier.

| Field                   | Value                       |
| ----------------------- | --------------------------- |
| Storage                 | A configured storage        |
| Storage item identifier | `SHOE-42`                   |
| Data to remove          | `discount`, `internal_note` |

```json Configuration theme={null}
{
  "prototype": "storage-remove-entity-from-storage",
  "parameters": {
    "storage": { "prototype": "storage", "parameters": {} },
    "storageKey": "SHOE-42",
    "removals": ["discount", "internal_note"]
  }
}
```
