---
title: "Store the wrapped contact key for the current user"
method: PUT
path: "/users/me/contact-key"
tags: ["contacts"]
---

# Store the wrapped contact key for the current user

`PUT /users/me/contact-key`

## Request

- Base URL: `https://api.dre.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.dre.app/users/me/contact-key`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/dre/apis/dre-api/docs/users/me/contact-key/put.ts> (a function with typed inputs; its response is checked against the schema)

Create-only, and it returns the key that is actually stored — which is not necessarily the one sent. A second caller gets the first one back rather than replacing it, because two clients minting different keys and overwriting each other leaves every contact sealed under the loser permanently unopenable. Rotation needs its own route: it means re-sealing every row, not swapping a value the server cannot read.

## Request body

- SetContactKeyDto
  - `wrappedKey` string, required: The data key, wrapped under a key the client derives from a wallet signature

## Response `200`

The stored key — the one sent, or the one already there

- ContactKeyResponseDto
  - `wrappedKey` object, nullable, required: The wrapped data key, exactly as the client stored it

## Other responses

- `400`: Validation error
- `401`: Unauthorized
- `403`: Forbidden

## Changes

- **2026-09-08** `1ee8fdf15424`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/dre/apis/dre-api/changes/users/me/contact-key/put.md)

---

[API](https://skmtc.dev/dre/apis/dre-api.md) - [All operations](https://skmtc.dev/dre/apis/dre-api/llms.txt) - [OpenAPI document](https://skmtc.dev/dre/apis/dre-api/revisions/af4c974abc44?raw)
