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

# Create a Persona transfer DNS challenge

> Begin an authenticated transfer to a new operator DID

Create a short-lived DNS challenge before transferring an active Persona to a different operator DID. `current_operator_did` must match the Persona's finalized operator, and `new_operator_did` must exist and be active in finalized chain state.

Transfer requires three independent proofs: fresh DNS control, acceptance by a signing key of the new operator, and authorization by a current Persona controller. This endpoint only creates the DNS challenge.

## Request

<ParamField path="persona" type="string" required>
  Active canonical Persona to transfer.
</ParamField>

<ParamField body="current_operator_did" type="string" required>
  Operator DID currently registered for the Persona.
</ParamField>

<ParamField body="new_operator_did" type="string" required>
  Different, active DID that will receive control of the Persona.
</ParamField>

<RequestExample>
  ```bash Request theme={null}
  curl --request POST \
    --url "https://directory.example.com/personas/example.com/transfer/dns-challenges" \
    --header "Content-Type: application/json" \
    --data '{
      "current_operator_did": "did:openpayload:1111111111111111111111",
      "new_operator_did": "did:openpayload:2222222222222222222222"
    }'
  ```
</RequestExample>

## Response

```json 201 Response theme={null}
{
  "challenge_id": "<challenge-id>",
  "persona": "example.com",
  "action": "transfer_persona",
  "challenge_nonce": "3",
  "operator_nonce": "7",
  "record_name": "_openpayload-persona.example.com",
  "record_type": "TXT",
  "record_value": "openpayload-persona-v1=<challenge>",
  "expires_at": "2026-09-17T18:00:00Z",
  "current_operator_did": "did:openpayload:1111111111111111111111",
  "new_operator_did": "did:openpayload:2222222222222222222222"
}
```

Publish `record_value` exactly at `record_name`, then continue with [Verify a Persona transfer challenge](/api-reference/directory/personas/verify-transfer-challenge).

## Straight to the point

```http theme={null}
POST /personas/{persona}/transfer/dns-challenges
```

* Requires an active Persona, its matching current operator, and a different active new operator DID
* Challenge is bound to the Persona, both operators, current nonces, and `transfer_persona`
* Challenge is single-use and expires at `expires_at`
* Does not transfer the Persona


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.