> ## Documentation Index
> Fetch the complete documentation index at: https://docs.seminode.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quote

> A Quote is a bid or ask on a published material listing, sent privately to the listing author.

A Quote is a response to a Listing — it represents a pricing offer from a trading partner. Unlike listings, quote content is **end-to-end encrypted** ([NIP-44](https://github.com/nostr-protocol/nips/blob/master/44.md)) so only the two parties in the conversation can read it. The encryption key is derived from the sender's private key and the recipient's public key, meaning no node or third party can decrypt the content.

**Kind:** `2014`

<Note>
  When publishing a quote, clients **MUST** republish the original Listing to the node URL specified in the listing's `"r"` tag. Because listings are replaceable events (kind `31001`), the node may no longer have the original version. Republishing it preserves the thread's reference to the root listing.
</Note>

**Content:**

```yaml theme={null}
{
  "company": "<string - Company name (set by app layer)>",
  "contact": "<string - Contact information>",
  "message": "<string - Quote message or note>",
  "qty": "<int - Quantity being quoted>",
  "unit_price": "<float64 - Unit price for the quoted item>",
  "timing": {
    "lead_time": <string - Lead Time (Optional), supply listings>,
    "required_date": <int64 - Required Date as Unix timestamp (Optional), demand listings>,
    "expiry": <int64 - Listing expiry as Unix timestamp (Optional)>
  },
  "terms": {
    "shipping": {
      "incoterm": "<string - Incoterm (e.g. FOB, CIF)>",
      "place": "<string - Place of delivery or shipment>"
    },
    "payment_term": {
      "code": "<string - Payment term code (e.g. NET30)>",
      "currency": "<string - Currency code (e.g. USD)>"
    }
  },
  "meta": "<object - Arbitrary metadata JSON object (type: object, Optional)>",
  "schema_version": "<string - quote schema version>"
}
```

This object is encrypted and placed in the `content` field of the event. Upon retrieval it is decrypted by the recipient.

**Quote Tags**

```json theme={null}
[
  ["h", "thread_id"],
  ["n", "material_no"],
  ["m", "manufacturer name"],
  ["y", "supply or demand"],
  ["c", "poster_name"],
  ["b", "any"],
  ["t", "any"],
  ["i", "internal_no"],
  ["c", "any"],

  ["r", "inbox_node_url"],
  ["p", "recipient_pubkey"],
  ["e", "event_id", "", "root"],
  ["u", "user_pubkey1", "user_pubkey2"]
]
```

* Quotes **SHOULD** copy the listing tags over.
* Quotes **MUST** generate a thread\_id `"h"` if not present — see [Threads](/oma/threads).
* Quotes **MUST** set the recipient `"p"` tag to the listing event's Author pubkey.
* Quotes **MUST** be published to the listing's `"r"` tag inbox node URL, as well as the sender's inbox node.
