# Save listing

Save listing is part of the create listing process. create-listing end point returns a psbt which is signed by the client wallet, once signed the signed psbt needs to be saved in the listing database by calling /save-listing end point.

Here's an example of how you can sign a listing transaction with the Xverse wallet and then save it by calling /save-listing:<br>

```javascript
      
      // XVerse Wallet example of creating a signing request 
      // when listing an Ordinal for sale
      const sellerInput = {
        address: ordinalsAddress, // Seller's ordinal wallet address
        signingIndexes: [0], // always [0] when listing
        // Specify sigHash type as SIGHASH_SINGLE | SIGHASH_ANYONECANPAY
        sigHash: bitcoin.Transaction.SIGHASH_SINGLE | bitcoin.Transaction.SIGHASH_ANYONECANPAY,
      };

      // Create the listing PSBT by calling /marketplace/create-listing API
      // This returns a base64 PSBT in string format which needs to be signed
      const { data } = await axios({
        method: 'post'
        url: 'https://api.ordinalsbot.com/marketplace/create-listing',
        data: {
          sellerOrdinals
          sellerPaymentAddress,
          sellerOrdinalPublicKey
        },
        headers: {
        'x-api-key': API_KEY,
      });

      // When using XVerse Wallet
      // Create the payload for signing the seller transaction
      const payload = {
        network: { type: "Mainnet" },
        message: "Sign Seller Transaction",
        psbtBase64: data.psbt, // PSBT returned by the clear-listing API
        broadcast: false,
        inputsToSign: [sellerInput],
      };

      // Make signing request
      await signTransaction({
        payload,
        onFinish: async (response) => {
          try {
            // signed succesffully

            // Save the listing with the signed PSBT
            const updateListingData = {
              signedListingPSBT: response.psbtBase64,
            };

            // Save the listing PSBT by calling /marketplace/save-listing API
            // This returns a base64 PSBT in string format which needs to be signed
            const saveResponse= await axios({
              method: 'patch'
              url: 'https://api.ordinalsbot.com/marketplace/save-listing' + sellerOrdinals[0].id,
              data: {
                sellerOrdinals: [sellerOrdinals[0].id],
                updateListingData
              },
              headers: {
              'x-api-key': API_KEY,
              }
            });
      
          } catch (Error) {
            // error handling
          }
        },
        onCancel: () => { // User cancelled signing request }
      });

```

### `POST` Save listing data for ordinal

## Save listing details

<mark style="color:green;">`POST`</mark> `https://api.ordinalsbot.com/marketplace/save-listing/`

API Key is required in the header:

`headers: { 'x-api-key': '<YOUR_API_KEY>', ...otherHeaders }`

#### Request Body

| Name                                                | Type   | Description                                                                                                                                                                                                                                                     |
| --------------------------------------------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| updateListingData<mark style="color:red;">\*</mark> | Object | <p>json object with a string signedListingPSBT.<br>Ex:<br></p><p>{ <br>     sellerOrdinals: \["0c9...ai0"],</p><p>     updateListingData: {</p><p>           signedListingPSBT:</p><p>                        "cHNidP8...AAA"</p><p>      } </p><p>}</p><p></p> |
| sellerOrdinals<mark style="color:red;">\*</mark>    | Array  | Array of ordinal Ids. The ids should be the same as ordinals ids used with /create-listing endpoint                                                                                                                                                             |

{% tabs %}
{% tab title="200: OK " %}

```json

{
    "_id": "7354826c46a5856b972795d7",
    "ordinalId": "8dc4e.....6ce70260i0",
    "price": 12345,
    "sellerPaymentAddress": "3Ny......yc4q",
    "sellerOrdinalPublicKey": "4fa4.....118fad4e476541",
    "status": "Active",
    "sellerOutputValue": 21111,
    "ordinalUtxoTxId": "3362....61449ef",
    "ordinalUtxoVout": 0,
    "marketPlaceMakerFee": 0,
    "marketPlaceTakerFee": 0,
    "platformMakerFee": 1000,
    "platformTakerFee": 1000,
    "signedListingPSBT": "cHNid......1rARj61OR2VBAAA="
}

```

{% endtab %}

{% tab title="500: Internal Server Error " %}

```json
{
    status: 'error',
    error: 'error reason'
}
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ordinalsbot.com/marketplace-1/save-listing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
