Skip to main content

useTransferNFT

Hook for transferring ERC721 or ERC1155 NFTs to another wallet address.

Available to use on contracts that implement either the ERC721 and ERC1155 interfaces, such as the Edition or NFT Collection.

The wallet address that initiates this transaction must have transfer permissions on the contract (i.e. the tokens are not soulbound). It also must have the required amount of token(s) available to transfer.

import { useTransferNFT } from "@thirdweb-dev/react";

Usage

Provide your NFT contract instance as the argument to the hook.

import { useContract, useTransferNFT, Web3Button } from "@thirdweb-dev/react";

// Your NFT collection contract address
const contractAddress = "{{contract_address}}";
const walletAddress = "{{wallet_address}}";
const tokenId = "{{token_id}}";

function App() {
// Contract must be an ERC-721 or ERC-1155 contract
const { contract } = useContract(contractAddress);
const {
mutateAsync: transferNFT,
isLoading,
error,
} = useTransferNFT(contract);

return (
<Web3Button
contractAddress={contractAddress}
action={() =>
transferNFT({
to: walletAddress, // Address to transfer the token to
tokenId: tokenId, // Token ID to transfer
})
}
>
Transfer
</Web3Button>
);
}

Configuration

to (required)

The wallet address to transfer the token(s) to.

To use the connected wallet address, use the useAddress hook.

import {
useContract,
useTransferNFT,
Web3Button,
useAddress,
} from "@thirdweb-dev/react";

const contractAddress = "{{contract_address}}";
const tokenId = "{{token_id}}";

function App() {
// Contract must be an ERC-721 or ERC-1155 contract
const { contract } = useContract(contractAddress);
const {
mutateAsync: transferNFT,
isLoading,
error,
} = useTransferNFT(contract);
const address = useAddress();

return (
<Web3Button
contractAddress={contractAddress}
action={() =>
transferNFT({
to: address, // Address to transfer the token to
tokenId: tokenId, // Token ID to transfer
})
}
>
Transfer
</Web3Button>
);
}

tokenId (required)

The token ID of the NFT to transfer.

Can be a string or number.

import { useContract, useTransferNFT, Web3Button } from "@thirdweb-dev/react";

const contractAddress = "{{contract_address}}";
const walletAddress = "{{wallet_address}}";
const tokenId = "{{token_id}}";

function App() {
// Contract must be an ERC-721 or ERC-1155 contract
const { contract } = useContract(contractAddress);
const {
mutateAsync: transferNFT,
isLoading,
error,
} = useTransferNFT(contract);

return (
<Web3Button
contractAddress={contractAddress}
action={() =>
transferNFT({
to: walletAddress, // Address to transfer the token to
tokenId: tokenId, // Token ID to transfer
})
}
>
Transfer
</Web3Button>
);
}

amount (ERC1155 only)

If you are using an ERC1155 contract, specify the amount of tokens to transfer.

import { useContract, useTransferNFT, Web3Button } from "@thirdweb-dev/react";

const contractAddress = "{{contract_address}}";
const walletAddress = "{{wallet_address}}";
const tokenId = "{{token_id}}";
const amount = "{{amount}}"; // string or number

function App() {
// Contract must be an ERC-721 or ERC-1155 contract
const { contract } = useContract(contractAddress);
const {
mutateAsync: transferNFT,
isLoading,
error,
} = useTransferNFT(contract);

return (
<Web3Button
contractAddress={contractAddress}
action={() =>
transferNFT({
to: walletAddress, // Address to transfer the token to
tokenId: tokenId, // Token ID to transfer
amount: amount, // Amount of tokens to transfer (ERC-1155 only)
})
}
>
Transfer
</Web3Button>
);
}