---
description: This script fulfills request links and completes them.
---

# Pay a Request Link

When receiving a link (after [creation](create-request-link)) it can be fulfilled with the same pair of token chain (or [cross-chain](pay-a-request-link-x-chain)), you will need your peanut api key ([get one here!](api-keys)) and the following:

* The request link you intend to pay
* A way of doing transactions (in this simple example we use a private key wallet)

Simple example:

```typescript
import peanut from '@squirrel-labs/peanut-sdk';
import { BigNumber, ethers } from 'ethers';

const userPrivateKey = 'SENDER-PRIVATE-KEY';
const APIKey = 'YOUR-API-KEY-HERE';
const link = 'PREVIOUSLY-CREATED-LINK'
//const apiUrl = 'OPTIONAL-DIFFERENT-API-URL';

// Initialize provider and wallet
function getWallet(chainId: number, privateKey: string): ethers.Wallet  {
    return new ethers.Wallet(privateKey, ethers.getDefaultProvider(chainId)); // Connect wallet to the provider
}

// Function to fulfill a request link
async function fulfillRequestLink(link: string) {
    try {
        // Get the details of the request link
        const linkDetails = await peanut.getRequestLinkDetails({
            link,
            APIKey,
            //apiUrl, //optional different apiUrl
        });
        console.log('Got the link details!', linkDetails);

        // Prepare the unsigned transaction for fulfilling the request link
        const { unsignedTx } = peanut.prepareRequestLinkFulfillmentTransaction({
            recipientAddress: linkDetails.recipientAddress!,
            tokenAddress: linkDetails.tokenAddress,
            tokenAmount: linkDetails.tokenAmount,
            tokenDecimals: linkDetails.tokenDecimals,
            tokenType: peanut.interfaces.EPeanutLinkType.erc20,
        });
        console.log('Prepared unsigned transaction', unsignedTx);

        // Sign and submit the transaction
        const signer = getWallet(Number(linkDetails.chainId), userPrivateKey)
        const { tx, txHash } = await peanut.signAndSubmitTx({
            unsignedTx,
            structSigner: {
                signer,
                gasLimit: BigNumber.from(2_000_000),
            },
        });
        console.log('Submitted transaction with tx hash', txHash);
        await tx.wait();
        console.log('Request link fulfillment completed!');

        await peanut.submitRequestLinkFulfillment({
          chainId: linkDetails.chainId,
          hash: txHash,
          payerAddress: signer.address,
	        link,
          amountUsd: '',
          //apiUrl, // optional differnt apiUrl
        })

    } catch (error) {
        console.error('Error fulfilling request link:', error);
    }
}

(async () => {
    // Fulfill the request link
    await fulfillRequestLink(link);
})();
```
