
# Self-hosted wallets

## Self-hosted wallets

In the Travel Rule rule library, install **Unhosted wallet transfers** and turn on
**Signed-wallet authorisation** in the draft. This applies to all amounts in that
rule and requires an approved address plus a signed wallet proof from the last
24 hours. Publish the draft separately. The exact policy still needs the relevant
country reviews before execution is available.

Use the existing Address Book APIs to add the wallet, request its signed-message
challenge, verify the signature and approve the address record. Both transfer
parties must have current Myaza-verified customer records; submit their names and
customer identifiers with the transaction. Supported Ethereum-compatible personal
wallets use this path; contract wallets and other signature formats remain held.

Add `selfHostedAddressId` to both [execution requests](https://trust.myaza.co/documentation/travel-rule-execution/markdown):

```json
{
  "expectedRevision": 1,
  "recipientAddress": "0x1111111111111111111111111111111111111111",
  "selfHostedAddressId": "your-approved-address-record"
}
```

For outgoing transfers, that record identifies the recipient wallet. For incoming
transfers, it identifies the sender wallet; also include the same `incomingTxid`
in both requests. Add the issued `token` and your stable `externalExecutionId` when
consuming. Execute only on `execute_once`; reconcile the existing job on retries.
Your wallet verifies the chain transaction and finality before crediting a deposit.
No information exchange with an institution is fabricated for a self-hosted wallet.
