# iou.unlock() [[Source]](https://github.com/ripple/simpleXRPL/blob/95b977b15f8950c5bc076b25165217869c0b06d3/src/verticals/iou.ts#L242) Restore a holder's ability to send and receive this IOU: clears the deep freeze, then the individual freeze. ## Signature ```ts iou.unlock( params: IOULockParams, options?: IOUWriteOptions, ): Promise> ``` ## Parameters | Parameter | Type | Required | Description | | --- | --- | --- | --- | | `ticker` | `string` | Yes | The currency code (3-character ISO-4217-style or 40-character hex; other codes are auto-encoded to hex). | | `holder` | `string` | Yes | The holder's r-address whose trust line is unlocked. | ## Options `options` is an optional second argument that sets the source account and overrides the fee. | Option | Type | Required | Description | | --- | --- | --- | --- | | `from` | `AccountSelector` | No | The account to act as — an r-address string, or an object `{ address }` or `{ signer, account? }`. Defaults to the primary signer's primary account. (For IOU operations, this is the issuer.) | | `fee` | `FeeIntent` | No | Fee override — a priority tier and/or a `maxFeeDrops` cap. | | `idempotencyKey` | `string` | No | A prior submission's `idempotencyKey`, to retry to the same intent instead of creating a duplicate. Auto-generated when omitted. | ## Returns Resolves to a `SubmissionResult` (from the final step). Every simpleXRPL write resolves to a `SubmissionResult` — a union tagged by `source`, with the backend's raw response preserved verbatim. Its common fields are: | Field | Type | Description | | --- | --- | --- | | `intent` | `T` | The operation-specific output — see the operation's own return fields. | | `source` | `'xrpld' | 'custody' | 'palisade'` | Which backend produced the result; discriminates `response`. | | `response` | `TxResponse` | custody record | Palisade record | The backend's raw response, preserved verbatim. | | `txHash` | `string` *(optional)* | The XRPL transaction hash, once the transaction is on-ledger. | | `intentId` | `string` *(optional)* | The custodian intent id, when the path produced one. Hold onto this to resume via `client.intent`. | | `idempotencyKey` | `string` *(optional)* | The UUIDv7 this submission carried. Pass it back as a later call's `idempotencyKey` to retry to the same intent rather than creating a duplicate. | ### Return fields For `IOU.unlock`, the `intent` (`IOULockIntent`) echoes: | Field | Type | Description | | --- | --- | --- | | `holder` | `string` | The holder's r-address whose trust line was unlocked. | ## Underlying XRPL transactors Runs as an ordered, multi-step sequence (no rollback on partial failure): 1. [TrustSet](https://xrpl.org/docs/references/protocol/transactions/types/trustset) — clears the deep freeze. 2. [TrustSet](https://xrpl.org/docs/references/protocol/transactions/types/trustset) — clears the individual freeze. Throws a `MultiStepFailureError` if either step fails. ## Example ```ts await client.iou.unlock({ ticker: 'USD', holder: 'rHolder...', }) ```