---
title: "Get Duplicate Posts"
description: "Retrieves other discussions and crossposts sharing the same external URL across Reddit.\n"
---

> Documentation Index
> Fetch the complete documentation index at: https://staging.threadapi.dev/llms.txt
> Use this file to discover all available pages before exploring further.

Path: ThreadAPI API › Reddit

`GET /v1/reddit/post/duplicates`

Retrieves other discussions and crossposts sharing the same external URL across Reddit.

## Authentication

Requires one of the following:

- `bearerAuth`, http, header `Authorization`
- `apiKeyAuth`, apiKey, in header, header `x-api-key`

## Query parameters

- `id` (`getPostDuplicates.query.id`; string, optional) — Reddit post ID (e.g. `1x1ai6v` or `t3_1x1ai6v`). Required if `url` is not provided.
- `url` (`getPostDuplicates.query.url`; string, optional) — Reddit post URL. Required if `id` is not provided.
- `limit` (`getPostDuplicates.query.limit`; integer, optional) — Number of items per page.
  - min 1; max 100; default `25`
- `after` (`getPostDuplicates.query.after`; string, optional) — Pagination cursor from the previous page's `after` field.
- `nsfw` (`getPostDuplicates.query.nsfw`; boolean, optional) — Include NSFW content (filtered out by default).
  - default `false`

## Code samples

### cURL

```bash
curl --request GET \
  --url https://api.threadapi.dev/v1/reddit/post/duplicates \
  --header 'Authorization: Bearer <token>'
```

### TypeScript

```typescript
const url = 'https://api.threadapi.dev/v1/reddit/post/duplicates';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "https://api.threadapi.dev/v1/reddit/post/duplicates"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
```

## Responses

### 200

Duplicate posts.

#### Example

```json
{
  "subreddit": "string",
  "query": "string",
  "sort": "string",
  "count": 0,
  "items": [
    {
      "id": "string",
      "name": "string",
      "domain": "string",
      "is_self": true,
      "flair": "string",
      "spoiler": true,
      "stickied": true,
      "locked": true,
      "removed": true,
      "subreddit": "string",
      "title": "string",
      "author": "string",
      "score": 0,
      "upvote_ratio": 0,
      "num_comments": 0,
      "url": "string",
      "permalink": "string",
      "selftext": "string",
      "created_at": "2019-08-24T14:15:22Z",
      "is_video": true,
      "over_18": true,
      "media": [
        {
          "type": "image",
          "url": "string",
          "width": 0,
          "height": 0,
          "caption": "string"
        }
      ],
      "poll": {
        "total_votes": 0,
        "is_closed": true,
        "options": [
          {
            "id": "string",
            "text": "string",
            "vote_count": 0
          }
        ]
      },
      "crosspost_of": {
        "id": "string",
        "subreddit": "string",
        "title": "string",
        "author": "string",
        "permalink": "string"
      },
      "comments": [
        {
          "id": "string",
          "parent_id": "string",
          "author": "string",
          "score": 0,
          "body": "string",
          "created_at": "2019-08-24T14:15:22Z",
          "depth": 0,
          "is_submitter": true,
          "controversy": 0,
          "replies": [
            {
              "id": "string",
              "parent_id": "string",
              "author": "string",
              "score": 0,
              "body": "string",
              "created_at": "2019-08-24T14:15:22Z",
              "depth": 0,
              "is_submitter": true,
              "controversy": 0,
              "replies": []
            }
          ]
        }
      ]
    }
  ],
  "after": "string",
  "filtered_nsfw": 0,
  "degraded": true
}
```

- `sort` (`getPostDuplicates.response.200.sort`; string, required)
- `count` (`getPostDuplicates.response.200.count`; integer, required)
- `items` (`getPostDuplicates.response.200.items`; array<object>, required)
  - `id` (`getPostDuplicates.response.200.items.id`; string, optional)
  - `name` (`getPostDuplicates.response.200.items.name`; string, optional)
  - `domain` (`getPostDuplicates.response.200.items.domain`; string, optional)
  - `is_self` (`getPostDuplicates.response.200.items.is_self`; boolean, optional)
  - `flair` (`getPostDuplicates.response.200.items.flair`; string, optional)
  - `spoiler` (`getPostDuplicates.response.200.items.spoiler`; boolean, optional)
  - `stickied` (`getPostDuplicates.response.200.items.stickied`; boolean, optional)
  - `locked` (`getPostDuplicates.response.200.items.locked`; boolean, optional)
  - `removed` (`getPostDuplicates.response.200.items.removed`; boolean, optional)
  - `subreddit` (`getPostDuplicates.response.200.items.subreddit`; string, optional)
  - `title` (`getPostDuplicates.response.200.items.title`; string, optional)
  - `author` (`getPostDuplicates.response.200.items.author`; string, optional)
  - `score` (`getPostDuplicates.response.200.items.score`; integer, optional)
  - `upvote_ratio` (`getPostDuplicates.response.200.items.upvote_ratio`; number, optional)
  - `num_comments` (`getPostDuplicates.response.200.items.num_comments`; integer, optional)
  - `url` (`getPostDuplicates.response.200.items.url`; string, optional)
  - `permalink` (`getPostDuplicates.response.200.items.permalink`; string, optional)
  - `selftext` (`getPostDuplicates.response.200.items.selftext`; string, optional)
  - `created_at` (`getPostDuplicates.response.200.items.created_at`; string, optional)
    - format `date-time`
  - `is_video` (`getPostDuplicates.response.200.items.is_video`; boolean, optional)
  - `over_18` (`getPostDuplicates.response.200.items.over_18`; boolean, optional)
  - `media` (`getPostDuplicates.response.200.items.media`; array<object>, optional)
    - `type` (`getPostDuplicates.response.200.items.media.type`; string, optional)
      - one of `"image"`, `"video"`, `"gallery"`
    - `url` (`getPostDuplicates.response.200.items.media.url`; string, optional)
    - `width` (`getPostDuplicates.response.200.items.media.width`; integer, optional)
    - `height` (`getPostDuplicates.response.200.items.media.height`; integer, optional)
    - `caption` (`getPostDuplicates.response.200.items.media.caption`; string, optional)
  - `poll` (`getPostDuplicates.response.200.items.poll`; object, optional)
    - `total_votes` (`getPostDuplicates.response.200.items.poll.total_votes`; integer, optional)
    - `is_closed` (`getPostDuplicates.response.200.items.poll.is_closed`; boolean, optional)
    - `options` (`getPostDuplicates.response.200.items.poll.options`; array<object>, optional)
      - `id` (`getPostDuplicates.response.200.items.poll.options.id`; string, optional)
      - `text` (`getPostDuplicates.response.200.items.poll.options.text`; string, optional)
      - `vote_count` (`getPostDuplicates.response.200.items.poll.options.vote_count`; integer, optional)
  - `crosspost_of` (`getPostDuplicates.response.200.items.crosspost_of`; object, optional)
    - `id` (`getPostDuplicates.response.200.items.crosspost_of.id`; string, optional)
    - `subreddit` (`getPostDuplicates.response.200.items.crosspost_of.subreddit`; string, optional)
    - `title` (`getPostDuplicates.response.200.items.crosspost_of.title`; string, optional)
    - `author` (`getPostDuplicates.response.200.items.crosspost_of.author`; string, optional)
    - `permalink` (`getPostDuplicates.response.200.items.crosspost_of.permalink`; string, optional)
  - `comments` (`getPostDuplicates.response.200.items.comments`; array<object>, optional)
    - `id` (`getPostDuplicates.response.200.items.comments.id`; string, optional)
    - `parent_id` (`getPostDuplicates.response.200.items.comments.parent_id`; string, optional) — t3_<post id> for a top-level comment, t1_<comment id> for a reply.
    - `author` (`getPostDuplicates.response.200.items.comments.author`; string, optional)
    - `score` (`getPostDuplicates.response.200.items.comments.score`; integer, optional)
    - `body` (`getPostDuplicates.response.200.items.comments.body`; string, optional)
    - `created_at` (`getPostDuplicates.response.200.items.comments.created_at`; string, optional)
      - format `date-time`
    - `depth` (`getPostDuplicates.response.200.items.comments.depth`; integer, optional)
    - `is_submitter` (`getPostDuplicates.response.200.items.comments.is_submitter`; boolean, optional) — Written by the original poster.
    - `controversy` (`getPostDuplicates.response.200.items.comments.controversy`; integer, optional)
    - `replies` (`getPostDuplicates.response.200.items.comments.replies`; array<object>, optional)
      - `id` (`getPostDuplicates.response.200.items.comments.replies.id`; string, optional)
      - `parent_id` (`getPostDuplicates.response.200.items.comments.replies.parent_id`; string, optional) — t3_<post id> for a top-level comment, t1_<comment id> for a reply.
      - `author` (`getPostDuplicates.response.200.items.comments.replies.author`; string, optional)
      - `score` (`getPostDuplicates.response.200.items.comments.replies.score`; integer, optional)
      - `body` (`getPostDuplicates.response.200.items.comments.replies.body`; string, optional)
      - `created_at` (`getPostDuplicates.response.200.items.comments.replies.created_at`; string, optional)
        - format `date-time`
      - `depth` (`getPostDuplicates.response.200.items.comments.replies.depth`; integer, optional)
      - `is_submitter` (`getPostDuplicates.response.200.items.comments.replies.is_submitter`; boolean, optional) — Written by the original poster.
      - `controversy` (`getPostDuplicates.response.200.items.comments.replies.controversy`; integer, optional)
      - `replies` (`getPostDuplicates.response.200.items.comments.replies.replies`; array<object>, optional)
- `filtered_nsfw` (`getPostDuplicates.response.200.filtered_nsfw`; integer, required)
- `subreddit` (`getPostDuplicates.response.200.subreddit`; string | null, optional)
- `query` (`getPostDuplicates.response.200.query`; string | null, optional)
- `after` (`getPostDuplicates.response.200.after`; string | null, optional)
- `degraded` (`getPostDuplicates.response.200.degraded`; boolean, optional)

### 400

Bad request (invalid parameter or unknown action)

#### Example

```json
{
  "error": "unauthorized: missing or invalid credentials",
  "error_code": "insufficient_credits"
}
```

One of:

- `ErrorResponse`
- `Error`

### 401

Missing or invalid API key or OAuth access token

#### Example

```json
{
  "error": "unauthorized: missing or invalid credentials",
  "error_code": "insufficient_credits"
}
```

One of:

- `ErrorResponse`
- `Error`

### 402

The account has no credits left (`insufficient_credits`).

#### Example

```json
{
  "error": {
    "code": "not_found",
    "message": "string",
    "retryable": true,
    "retry_after": 0
  }
}
```

- `error` (`getPostDuplicates.response.402.error`; object, required)
  - `code` (`getPostDuplicates.response.402.error.code`; string, required)
    - example `"not_found"`
  - `message` (`getPostDuplicates.response.402.error.message`; string, required)
  - `retryable` (`getPostDuplicates.response.402.error.retryable`; boolean, required)
  - `retry_after` (`getPostDuplicates.response.402.error.retry_after`; integer, optional) — Seconds to wait before retrying.

### 403

Reddit does not show this content to logged-out readers, e.g. a private or quarantined subreddit (`reddit_refused`).

#### Example

```json
{
  "error": {
    "code": "not_found",
    "message": "string",
    "retryable": true,
    "retry_after": 0
  }
}
```

- `error` (`getPostDuplicates.response.403.error`; object, required)
  - `code` (`getPostDuplicates.response.403.error.code`; string, required)
    - example `"not_found"`
  - `message` (`getPostDuplicates.response.403.error.message`; string, required)
  - `retryable` (`getPostDuplicates.response.403.error.retryable`; boolean, required)
  - `retry_after` (`getPostDuplicates.response.403.error.retry_after`; integer, optional) — Seconds to wait before retrying.

### 404

Requested user or resource not found

#### Example

```json
{
  "error": "unauthorized: missing or invalid credentials",
  "error_code": "insufficient_credits"
}
```

One of:

- `ErrorResponse`
- `Error`

### 429

Rate limit or daily request quota exceeded

#### Example

```json
{
  "error": "unauthorized: missing or invalid credentials",
  "error_code": "insufficient_credits"
}
```

One of:

- `ErrorResponse`
- `Error`

### 503

A temporary problem reaching Reddit (`upstream_busy`, `upstream_timeout`, `upstream_error`). Retry shortly; nothing was billed.

#### Example

```json
{
  "error": {
    "code": "not_found",
    "message": "string",
    "retryable": true,
    "retry_after": 0
  }
}
```

- `error` (`getPostDuplicates.response.503.error`; object, required)
  - `code` (`getPostDuplicates.response.503.error.code`; string, required)
    - example `"not_found"`
  - `message` (`getPostDuplicates.response.503.error.message`; string, required)
  - `retryable` (`getPostDuplicates.response.503.error.retryable`; boolean, required)
  - `retry_after` (`getPostDuplicates.response.503.error.retry_after`; integer, optional) — Seconds to wait before retrying.


Source: https://staging.threadapi.dev/api/Reddit/getPostDuplicates/index.md
