# Nextdoor API

> Every Nextdoor endpoint on Cotlet: inputs, JSON Schema, cURL, Python and Node.js examples and an example response for each call.

Source: https://cotlet.dev/docs/api/nextdoor

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

13 endpoints for Nextdoor. Each one is a POST with a JSON body, called with your API key.

- Base URL: `https://cotlet.dev/api/v1/nextdoor`
- Connects with: Your own Nextdoor account with a claimed Business Page (owner, employee or authorized representative)
- Integration page: https://cotlet.dev/integrations/nextdoor-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `get_business_page` | read | Your page: name, category, contact details, neighborhoods, recommendation and Fave counts. |
| `list_posts` | read | Business posts from your Business Page, newest first. |
| `get_post` | read | One post: title, text, audience, reactions and comment count. |
| `list_comments` | read | Comments on one of your posts, with author, neighborhood, text and whether you replied. |
| `list_recommendations` | read | Recommendations from the What neighbors say section, with author, neighborhood, text, date and your reply. |
| `get_page_share_link` | read | The link to your Business Page from the Share menu, to send to customers who should leave a recommendation. |
| `list_conversations` | read | Messages neighbors sent to your Business Page, with the last message and who wrote it. |
| `get_conversation` | read | Full message thread with one neighbor. |
| `create_post` | write | Publish a business post to the neighborhoods you choose. |
| `reply_to_comment` | write | Reply as your business under a comment on one of your posts. |
| `reply_to_recommendation` | write | Public reply from your business to a neighbor's recommendation. |
| `send_message` | write | Reply to a neighbor inside an existing Business Page conversation. |
| `delete_post` | write | Remove one of your business posts from Nextdoor. |

## Get Business Page

`POST https://cotlet.dev/api/v1/nextdoor/get_business_page`

Access: read.

Returns the page the signed-in account manages. Use the neighborhoods it lists as the audience for create_post. The call fails if the account has no claimed Business Page.

### Parameters

No parameters.

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/get_business_page \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("nextdoor", "get_business_page")
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'get_business_page');
```

**CLI**

```bash
cotlet call nextdoor get_business_page
```

### Example response

```json
{
  "page_id": "pg_2204",
  "name": "Clearwater Gutter Care",
  "category": "Gutter cleaning",
  "phone": "+1 555 0142",
  "neighborhoods": [
    "Maple Hill",
    "Oak Park",
    "Riverside"
  ],
  "recommendations": 41,
  "faves": 118
}
```

## List posts

`POST https://cotlet.dev/api/v1/nextdoor/list_posts`

Access: read.

Returns each post with title, text, audience, reactions and comment count. Nextdoor's Post Insights are not available for business posts, so there are no view counts. Use the cursor to read older posts.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `limit` | integer | no | Number of posts per call. Default: 20. |
| `cursor` | string | no | Next page cursor from the previous call. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/list_posts \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("nextdoor", "list_posts")
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'list_posts');
```

**CLI**

```bash
cotlet call nextdoor list_posts
```

### Example response

```json
{
  "posts": [
    {
      "post_id": "bp_8812046",
      "title": "Open house this Saturday",
      "reactions": 12,
      "comments": 3,
      "created_at": "2026-10-08T09:30:00Z"
    },
    {
      "post_id": "bp_8790311",
      "title": "Fall gutter checks",
      "reactions": 7,
      "comments": 1,
      "created_at": "2026-10-01T08:00:00Z"
    }
  ],
  "next_cursor": null
}
```

## Get post

`POST https://cotlet.dev/api/v1/nextdoor/get_post`

Access: read.

Returns the full text and the audience (distance or neighborhoods) the post was published to. Comments are read with list_comments.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `post_id` | string | yes | Post ID from list_posts. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/get_post \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"post_id":"post_8c41d2"}'
```

**Python**

```python
result = client.call("nextdoor", "get_post", {"post_id":"post_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'get_post', {"post_id":"post_8c41d2"});
```

**CLI**

```bash
cotlet call nextdoor get_post --data '{"post_id":"post_8c41d2"}'
```

### Example response

```json
{
  "post_id": "bp_8812046",
  "title": "Open house this Saturday",
  "body": "Drop by 10:00 to 14:00 for free coffee and a look at the new workshop.",
  "neighborhoods": [
    "Maple Hill",
    "Oak Park"
  ],
  "reactions": 12,
  "comments": 3
}
```

## List comments

`POST https://cotlet.dev/api/v1/nextdoor/list_comments`

Access: read.

Returns comments oldest first, so your agent reads the discussion in order. Each comment has the ID that reply_to_comment needs.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `post_id` | string | yes | Post ID from list_posts. |
| `unanswered_only` | boolean | no | Skip comments you already replied to. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/list_comments \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"post_id":"post_8c41d2"}'
```

**Python**

```python
result = client.call("nextdoor", "list_comments", {"post_id":"post_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'list_comments', {"post_id":"post_8c41d2"});
```

**CLI**

```bash
cotlet call nextdoor list_comments --data '{"post_id":"post_8c41d2"}'
```

### Example response

```json
{
  "comments": [
    {
      "comment_id": "cm_77120",
      "author": "Priya S.",
      "neighborhood": "Maple Hill",
      "body": "Do you service Maple Hill?",
      "replied": false
    }
  ]
}
```

## List recommendations

`POST https://cotlet.dev/api/v1/nextdoor/list_recommendations`

Access: read.

Returns newest first. Each recommendation has the ID that reply_to_recommendation needs, and your existing reply if you wrote one.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `since` | date | no | Only recommendations on or after this date. |
| `unanswered_only` | boolean | no | Skip recommendations you already replied to. |
| `limit` | integer | no | Number of recommendations per call. Default: 50. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/list_recommendations \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("nextdoor", "list_recommendations")
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'list_recommendations');
```

**CLI**

```bash
cotlet call nextdoor list_recommendations
```

### Example response

```json
{
  "recommendations": [
    {
      "recommendation_id": "rec_30418",
      "author": "Dana K.",
      "neighborhood": "Oak Park",
      "body": "Cleaned our gutters in one morning and left the yard spotless.",
      "date": "2026-10-06",
      "reply": null
    }
  ]
}
```

## Get page share link

`POST https://cotlet.dev/api/v1/nextdoor/get_page_share_link`

Access: read.

Returns the page link. A neighbor who opens it can recommend your business on the page; Nextdoor asks them to sign in or create a free account first.

### Parameters

No parameters.

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/get_page_share_link \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("nextdoor", "get_page_share_link")
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'get_page_share_link');
```

**CLI**

```bash
cotlet call nextdoor get_page_share_link
```

### Example response

```json
{
  "url": "https://nextdoor.com/pages/clearwater-gutter-care"
}
```

## List conversations

`POST https://cotlet.dev/api/v1/nextdoor/list_conversations`

Access: read.

Returns the most recent threads first. Neighbors start these conversations; a business cannot start one.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `unanswered_only` | boolean | no | Only threads where the last message is not yours. |
| `limit` | integer | no | Number of threads per call. Default: 20. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/list_conversations \
  -H "Authorization: Bearer $COTLET_API_KEY"
```

**Python**

```python
result = client.call("nextdoor", "list_conversations")
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'list_conversations');
```

**CLI**

```bash
cotlet call nextdoor list_conversations
```

### Example response

```json
{
  "conversations": [
    {
      "conversation_id": "conv_5530",
      "neighbor": "Priya S.",
      "last_message": "Can you come Thursday morning?",
      "last_from": "neighbor",
      "updated_at": "2026-10-10T16:12:00Z"
    }
  ]
}
```

## Get conversation

`POST https://cotlet.dev/api/v1/nextdoor/get_conversation`

Access: read.

Returns the messages oldest first. Reading a thread does not send anything.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `conversation_id` | string | yes | Conversation ID from list_conversations. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/get_conversation \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"conversation_id":"conversation_8c41d2"}'
```

**Python**

```python
result = client.call("nextdoor", "get_conversation", {"conversation_id":"conversation_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'get_conversation', {"conversation_id":"conversation_8c41d2"});
```

**CLI**

```bash
cotlet call nextdoor get_conversation --data '{"conversation_id":"conversation_8c41d2"}'
```

### Example response

```json
{
  "conversation_id": "conv_5530",
  "neighbor": "Priya S.",
  "messages": [
    {
      "from": "neighbor",
      "body": "Hi, do you do gutter guards?",
      "sent_at": "2026-10-10T15:58:00Z"
    },
    {
      "from": "business",
      "body": "Yes, we do. What is the address?",
      "sent_at": "2026-10-10T16:05:00Z"
    },
    {
      "from": "neighbor",
      "body": "Can you come Thursday morning?",
      "sent_at": "2026-10-10T16:12:00Z"
    }
  ]
}
```

## Create post

`POST https://cotlet.dev/api/v1/nextdoor/create_post`

Access: write. Confirm: waits for the user's OK before it runs.

Publishes a post with a title and a description. Nextdoor's help center says business posts have no fixed radius and reach neighbors through engagement and Faves; radius and neighborhoods apply only where the post form still offers audience settings. The call fails for accounts Nextdoor still asks to verify business documents. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `title` | string | yes | Post title. |
| `body` | string | yes | Post description. |
| `radius` | integer | no | Reach neighborhoods within this distance of your business, as in the post audience settings. |
| `neighborhoods` | string[] | no | Neighborhood names to add or remove, from get_business_page. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/create_post \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"title":"Open house this Saturday","body":"Drop by 10:00 to 14:00 for free coffee and a look at the new workshop.","radius":3}'
```

**Python**

```python
result = client.call("nextdoor", "create_post", {"title":"Open house this Saturday","body":"Drop by 10:00 to 14:00 for free coffee and a look at the new workshop.","radius":3})
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'create_post', {"title":"Open house this Saturday","body":"Drop by 10:00 to 14:00 for free coffee and a look at the new workshop.","radius":3});
```

**CLI**

```bash
cotlet call nextdoor create_post --data '{"title":"Open house this Saturday","body":"Drop by 10:00 to 14:00 for free coffee and a look at the new workshop.","radius":3}'
```

### Example response

```json
{
  "post_id": "bp_8812046",
  "status": "published",
  "neighborhoods": 14,
  "url": "https://nextdoor.com/p/yourname-open-house"
}
```

## Reply to comment

`POST https://cotlet.dev/api/v1/nextdoor/reply_to_comment`

Access: write. Confirm: waits for the user's OK before it runs.

The reply is public and appears under your business name. Only the author or the page administrator can edit or delete it later. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `comment_id` | string | yes | Comment ID from list_comments. |
| `body` | string | yes | Reply text. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/reply_to_comment \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"comment_id":"cm_77120","body":"Yes, we cover Maple Hill. Message the page with your street and we will suggest a time."}'
```

**Python**

```python
result = client.call("nextdoor", "reply_to_comment", {"comment_id":"cm_77120","body":"Yes, we cover Maple Hill. Message the page with your street and we will suggest a time."})
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'reply_to_comment', {"comment_id":"cm_77120","body":"Yes, we cover Maple Hill. Message the page with your street and we will suggest a time."});
```

**CLI**

```bash
cotlet call nextdoor reply_to_comment --data '{"comment_id":"cm_77120","body":"Yes, we cover Maple Hill. Message the page with your street and we will suggest a time."}'
```

### Example response

```json
{
  "reply_id": "cm_77135",
  "comment_id": "cm_77120",
  "status": "published"
}
```

## Reply to recommendation

`POST https://cotlet.dev/api/v1/nextdoor/reply_to_recommendation`

Access: write. Confirm: waits for the user's OK before it runs.

The reply is public and appears under the recommendation as your business, not your personal profile. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `recommendation_id` | string | yes | Recommendation ID from list_recommendations. |
| `body` | string | yes | Reply text. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/reply_to_recommendation \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"recommendation_id":"rec_30418","body":"Thank you, Dana! Glad the gutters are running clear again."}'
```

**Python**

```python
result = client.call("nextdoor", "reply_to_recommendation", {"recommendation_id":"rec_30418","body":"Thank you, Dana! Glad the gutters are running clear again."})
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'reply_to_recommendation', {"recommendation_id":"rec_30418","body":"Thank you, Dana! Glad the gutters are running clear again."});
```

**CLI**

```bash
cotlet call nextdoor reply_to_recommendation --data '{"recommendation_id":"rec_30418","body":"Thank you, Dana! Glad the gutters are running clear again."}'
```

### Example response

```json
{
  "reply_id": "rr_9120",
  "recommendation_id": "rec_30418",
  "status": "published"
}
```

## Send message

`POST https://cotlet.dev/api/v1/nextdoor/send_message`

Access: write. Confirm: waits for the user's OK before it runs.

Works only in a conversation the neighbor started. A business cannot message a neighbor first, and Nextdoor bans unsolicited promotional messages. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `conversation_id` | string | yes | Conversation ID from list_conversations. |
| `body` | string | yes | Message text. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/send_message \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"conversation_id":"conversation_8c41d2","body":"body"}'
```

**Python**

```python
result = client.call("nextdoor", "send_message", {"conversation_id":"conversation_8c41d2","body":"body"})
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'send_message', {"conversation_id":"conversation_8c41d2","body":"body"});
```

**CLI**

```bash
cotlet call nextdoor send_message --data '{"conversation_id":"conversation_8c41d2","body":"body"}'
```

### Example response

```json
{
  "message_id": "msg_88410",
  "conversation_id": "conv_5530",
  "status": "sent"
}
```

## Delete post

`POST https://cotlet.dev/api/v1/nextdoor/delete_post`

Access: write. Confirm: waits for the user's OK before it runs.

Removes the post from the newsfeed. Only the author or the page administrator can delete a post. A deleted post cannot be restored with one call. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `post_id` | string | yes | Post ID from list_posts. |

### Request

**cURL**

```bash
curl -X POST https://cotlet.dev/api/v1/nextdoor/delete_post \
  -H "Authorization: Bearer $COTLET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"post_id":"post_8c41d2"}'
```

**Python**

```python
result = client.call("nextdoor", "delete_post", {"post_id":"post_8c41d2"})
```

**Node.js**

```js
const result = await cotlet.call('nextdoor', 'delete_post', {"post_id":"post_8c41d2"});
```

**CLI**

```bash
cotlet call nextdoor delete_post --data '{"post_id":"post_8c41d2"}'
```

### Example response

```json
{
  "post_id": "bp_8790311",
  "status": "deleted"
}
```
