diff --git a/88.md b/88.md
new file mode 100644
index 00000000..08f5c41d
--- /dev/null
+++ b/88.md
@@ -0,0 +1,130 @@
+# NIP-88
+
+## Polls
+
+`draft` `optional`
+
+This NIP defines the event scheme that describe Polls on nostr.
+
+## Events
+
+### Poll Event
+
+The poll event is defined as a `kind:1068` event.
+
+- **content** key holds the label for the poll.
+
+Major tags in the poll event are:
+
+- **option**: The option tags contain an OptionId(any alphanumeric) field, followed by an option label field.
+- **relay**: One or multiple tags that the poll is expecting respondents to respond on.
+- **polltype**: can be "singlechoice" or "multiplechoice". Polls that do not have a polltype should be considered a "singlechoice" poll.
+- **endsAt**: signifying at which unix timestamp the poll is meant to end.
+
+Example Event
+
+```json
+{
+  "content": "Pineapple on pizza",
+  "created_at": 1719888496,
+  "id": "9d1b6b9562e66f2ecf35eb0a3c2decc736c47fddb13d6fb8f87185a153ea3634",
+  "kind": 1068,
+  "pubkey": "dee45a23c4f1d93f3a2043650c5081e4ac14a778e0acbef03de3768e4f81ac7b",
+  "sig": "7fa93bf3c430eaef784b0dacc217d3cd5eff1c520e7ef5d961381bc0f014dde6286618048d924808e54d1be03f2f2c2f0f8b5c9c2082a4480caf45a565ca9797",
+  "tags": [
+    ["option", "qj518h583", "Yay"],
+    ["option", "gga6cdnqj", "Nay"],
+    ["relay", "<relay url1>"],
+    ["relay", "<relay url2>"],
+    ["polltype", "singlechoice"],
+    ["endsAt", "<unix timestamp in seconds>"]
+  ]
+}
+```
+
+### Responses
+
+The response event is a `kind:1018` event. It contains an e tag with the poll event it is referencing, followed by one or more response tags.
+
+- **response** : The tag contains "response" as it's first positional argument followed by the option Id selected.
+
+The responses are meant to be published to the relays specified in the poll event.
+
+Example Response Event
+
+```json
+{
+  "content": "",
+  "created_at": 1720097117,
+  "id": "60a005e32e9596c3f544a841a9bc4e46d3020ca3650d6a739c95c1568e33f6d8",
+  "kind": 1018,
+  "pubkey": "1bc70a0148b3f316da33fe7e89f23e3e71ac4ff998027ec712b905cd24f6a411",
+  "sig": "30071a633c65db8f3a075c7a8de757fbd8ce65e3607f4ba287fe6d7fbf839a380f94ff4e826fbba593f6faaa13683b7ea9114ade140720ecf4927010ebf3e44f",
+  "tags": [
+    ["e", "1fc80cf813f1af33d5a435862b7ef7fb96b47e68a48f1abcadf8081f5a545550"],
+    ["response", "gga6cdnqj"],
+    ["response", "m3agjsdq1"]
+  ]
+}
+```
+
+### Poll Types
+
+The polltype setting dictates how multiple response tags are handled in the `kind:1018` event.
+
+- **polltype: singlechoice**: The first response tag is to be considered the actual response.
+- **polltype: multiplechoice**: The first response tag pointing to each id is considered the actual response, without considering the order of the response tags.
+
+### Counting Results
+
+Results can be queried by fetching `kind:1018` events from the relays specified in the poll.
+The results displayed should only be 1 vote event per pubkey.
+In case of multiple events for a pubkey, the event with the largest timestamp within the poll limits should be considered.
+
+Example for querying polls.
+
+```ts
+const fetchVoteEvents = (filterPubkeys: string[]) => {
+  let resultFilter: Filter = {
+    "#e": [pollEvent.id],
+    kinds: [1018],
+  };
+  if (filterPubkeys?.length) {
+    resultFilter.authors = filterPubkeys;
+  }
+  if (pollExpiration) {
+    resultFilter.until = Number(pollExpiration);
+  }
+  pool.subscribeMany(relays, [resultFilter], {
+    onevent: handleResultEvent,
+  });
+};
+```
+
+Example for maintaining OneVotePerPubkey
+
+```ts
+const oneVotePerPubkey = (events: Event[]) => {
+  const eventMap = new Map<string, Event>();
+
+  events.forEach((event) => {
+    if (
+      !eventMap.has(event.pubkey) ||
+      event.created_at > eventMap.get(event.pubkey)!.created_at
+    ) {
+      eventMap.set(event.pubkey, event);
+    }
+  });
+
+  return Array.from(eventMap.values());
+};
+```
+
+### Relays
+
+It is advisable for poll authors to use relays that do not allow backdated events and do not honor kind:5 (delete) requests for vote events in order to maintain the integrity of poll results after the poll has ended.
+
+### Curation
+
+The clients may configure fetching results by specific people. This can be achieved by creating `kind:30000` follow sets, and fetching results only from the follow set.
+Clients can also employ other curation algorithms, like Proof Of Work and Web of Trust scores for result curations.
diff --git a/README.md b/README.md
index ed8336cb..91d3c67f 100644
--- a/README.md
+++ b/README.md
@@ -89,6 +89,7 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
 - [NIP-78: Application-specific data](78.md)
 - [NIP-84: Highlights](84.md)
 - [NIP-86: Relay Management API](86.md)
+- [NIP-88: Polls](88.md)
 - [NIP-89: Recommended Application Handlers](89.md)
 - [NIP-90: Data Vending Machines](90.md)
 - [NIP-92: Media Attachments](92.md)
@@ -128,11 +129,13 @@ They exist to document what may be implemented by [Nostr](https://github.com/nos
 | `44`          | Channel Mute User               | [28](28.md)                            |
 | `64`          | Chess (PGN)                     | [64](64.md)                            |
 | `818`         | Merge Requests                  | [54](54.md)                            |
+| `1018`        | Poll Response                   | [88](88.md)                            |
 | `1021`        | Bid                             | [15](15.md)                            |
 | `1022`        | Bid confirmation                | [15](15.md)                            |
 | `1040`        | OpenTimestamps                  | [03](03.md)                            |
 | `1059`        | Gift Wrap                       | [59](59.md)                            |
 | `1063`        | File Metadata                   | [94](94.md)                            |
+| `1068`        | Poll                            | [88](88.md)                            |
 | `1111`        | Comment                         | [22](22.md)                            |
 | `1311`        | Live Chat Message               | [53](53.md)                            |
 | `1617`        | Patches                         | [34](34.md)                            |