# Reddit Search API. Posts matching your search.

Posts by keyword, with Reddit's search operators. We handle the proxies, blocks and platform changes.

[Get API key](https://socialtap.dev/signup/?next=%2Fplayground%2F%3Fendpoint%3Dreddit.search_posts)

## Reddit Search API at a glance

Searches public Reddit posts by keyword, across Reddit or in one subreddit, sorted by best match, newest, top or most comments. Each has its link, title, time, exact score and comment count, author, subreddit, NSFW and spoiler marks, preview image and every image of a gallery. Set media to get only image, video or gallery posts, and include_body for each post's text. Reddit's operators work as on Reddit: exact phrases, subreddit:, author:, site: and title:.

GET `/v1/reddit/search_posts`

[Read the API reference](https://socialtap.dev/docs/reference/reddit/search_posts/index.md)

- **1 credit** per page, $0.75–$1.97 per 1,000 pages
- **22 typed fields** null when unknown
- **7** posts per page, Reddit's relevance order (its search ranking)
- **`query`** is all it needs, e.g. `golang generics`

## Send one request. Get up to 7 posts back.

Copy the request in your language, or hand it to your agent. Sign up for an API key and your first 100 credits are free.

`$ npm install socialtap`

`query = golang generics`

[Open in playground](https://socialtap.dev/playground/?endpoint=reddit.search_posts)

cURL:

```shell
curl 'https://socialtap.dev/v1/reddit/search_posts?query=golang&since=2026-01-01&sort=popular' \
  -H "x-api-key: $SOCIALTAP_API_KEY"
```

TypeScript SDK:

```typescript
import { SocialTap } from "socialtap";

const client = new SocialTap(); // apiKey defaults to process.env.SOCIALTAP_API_KEY

const res = await client.reddit.searchPosts.list({ query: "golang", sort: "popular", since: "2026-01-01" });
console.log(res.data);
console.log(res.credits.charged, res.meta.request_id);
```

Node.js (fetch):

```javascript
const params = new URLSearchParams({
  query: "golang",
  since: "2026-01-01",
  sort: "popular",
});
const res = await fetch(`https://socialtap.dev/v1/reddit/search_posts?${params}`, {
  headers: { "x-api-key": process.env.SOCIALTAP_API_KEY ?? "" },
});
const body = await res.json();
if (!res.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
const { data, page, meta } = body;
console.log(data, meta.credits_charged);
```

Python (requests):

```python
import os

import requests

res = requests.get(
    "https://socialtap.dev/v1/reddit/search_posts",
    params={"query": "golang", "since": "2026-01-01", "sort": "popular"},
    headers={"x-api-key": os.environ["SOCIALTAP_API_KEY"]},
)
body = res.json()
if not res.ok:
    raise RuntimeError(f"{body['error']['code']}: {body['error']['message']}")
data, page, meta = body["data"], body["page"], body["meta"]
print(data, meta["credits_charged"])
```

Go (net/http):

```go
package main

import (
	"encoding/json"
	"fmt"
	"log"
	"net/http"
	"net/url"
	"os"
)

func main() {
	q := url.Values{}
	q.Set("query", "golang")
	q.Set("since", "2026-01-01")
	q.Set("sort", "popular")
	req, err := http.NewRequest("GET", "https://socialtap.dev/v1/reddit/search_posts?"+q.Encode(), nil)
	if err != nil {
		log.Fatal(err)
	}
	req.Header.Set("x-api-key", os.Getenv("SOCIALTAP_API_KEY"))
	res, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer res.Body.Close()
	var body struct {
		Data  json.RawMessage `json:"data"`
		Page  json.RawMessage `json:"page"`
		Meta  map[string]any  `json:"meta"`
		Error *struct {
			Code    string `json:"code"`
			Message string `json:"message"`
		} `json:"error"`
	}
	if err := json.NewDecoder(res.Body).Decode(&body); err != nil {
		log.Fatal(err)
	}
	if body.Error != nil {
		log.Fatalf("%s: %s", body.Error.Code, body.Error.Message)
	}
	fmt.Println(string(body.Data), body.Meta["credits_charged"])
}
```

200 OK:

```json
{
  "data": [
    {
      "approximate_fields": [
        "type"
      ],
      "author": {
        "avatar_url": null,
        "display_name": null,
        "id": "t2_xdr3c",
        "is_verified": null,
        "url": "https://www.reddit.com/user/PremiumMeats/",
        "username": "PremiumMeats"
      },
      "coauthors": [],
      "duration_ms": null,
      "hashtags": [],
      "id": "t3_1qspau9",
      "is_nsfw": false,
      "is_pinned": null,
      "is_sponsored": null,
      "language": null,
      "media": [],
      "mentions": [],
      "metrics": {
        "comment_count": 100,
        "like_count": 8656,
        "quote_count": null,
        "repost_count": null,
        "save_count": null,
        "share_count": null,
        "view_count": null
      },
      "platform": "reddit",
      "platform_specific": {
        "reddit": {
          "award_count": null,
          "crosspost_of": null,
          "domain": null,
          "flair": null,
          "is_archived": null,
          "is_locked": null,
          "is_spoiler": false,
          "link_url": null,
          "score": 8656,
          "subreddit": {
            "id": "t5_2sg5b",
            "name": "Terraria",
            "url": "https://www.reddit.com/r/Terraria/"
          },
          "upvote_ratio": null
        }
      },
      "platform_type": null,
      "published_at": "2026-02-01T05:07:18Z",
      "text": null,
      "thumbnail_url": "https://a.thumbs.redditmedia.com/9uF17zO2j_PCGq9IlJvjb2cmICxdG7y-6W2oc7z_ei0.jpg",
      "title": "welcome back, 100% pickaxe power reaver shark",
      "type": "link",
      "unknown_fields": [
        "mentions",
        "media"
      ],
      "url": "https://www.reddit.com/r/Terraria/comments/1qspau9/welcome_back_100_pickaxe_power_reaver_shark/"
    },
    {
      "approximate_fields": [],
      "author": {
        "avatar_url": null,
        "display_name": null,
        "id": "t2_242ljnbakp",
        "is_verified": null,
        "url": "https://www.reddit.com/user/rpakyas/",
        "username": "rpakyas"
      },
      "coauthors": [],
      "duration_ms": null,
      "hashtags": [],
      "id": "t3_1ubtk8w",
      "is_nsfw": false,
      "is_pinned": null,
      "is_sponsored": null,
      "language": null,
      "media": [
        {
          "alt_text": null,
          "duration_ms": null,
          "expires_at": null,
          "height": null,
          "thumbnail_url": "https://preview.redd.it/xedwoinqpn8h1.jpeg?width=140&height=140&crop=1%3A1%2Csmart&auto=webp&s=b85a467bdce6a4eb57e7c24bca3db7d7b4c17e2d",
          "type": "image",
          "url": "https://i.redd.it/xedwoinqpn8h1.jpeg",
          "width": null
        }
      ],
      "mentions": [],
      "metrics": {
        "comment_count": 345,
        "like_count": 2559,
        "quote_count": null,
        "repost_count": null,
        "save_count": null,
        "share_count": null,
        "view_count": null
      },
      "platform": "reddit",
      "platform_specific": {
        "reddit": {
          "award_count": null,
          "crosspost_of": null,
          "domain": null,
          "flair": null,
          "is_archived": null,
          "is_locked": null,
          "is_spoiler": false,
          "link_url": null,
          "score": 2559,
          "subreddit": {
            "id": "t5_40th7s",
            "name": "buhaydigital",
            "url": "https://www.reddit.com/r/buhaydigital/"
          },
          "upvote_ratio": null
        }
      },
      "platform_type": null,
      "published_at": "2026-06-21T15:55:36Z",
      "text": null,
      "thumbnail_url": "https://preview.redd.it/xedwoinqpn8h1.jpeg?width=140&height=140&crop=1%3A1%2Csmart&auto=webp&s=b85a467bdce6a4eb57e7c24bca3db7d7b4c17e2d",
      "title": "from $4/hr to $10k/month after 13 years of WFH, my journey",
      "type": "image",
      "unknown_fields": [
        "mentions"
      ],
      "url": "https://www.reddit.com/r/buhaydigital/comments/1ubtk8w/from_4hr_to_10kmonth_after_13_years_of_wfh_my/"
    },
    {
      "approximate_fields": [],
      "author": {
        "avatar_url": null,
        "display_name": null,
        "id": "t2_w6crhcklm",
        "is_verified": null,
        "url": "https://www.reddit.com/user/ZookeepergameMost817/",
        "username": "ZookeepergameMost817"
      },
      "coauthors": [],
      "duration_ms": null,
      "hashtags": [],
      "id": "t3_1wgu40p",
      "is_nsfw": false,
      "is_pinned": null,
      "is_sponsored": null,
      "language": null,
      "media": [
        {
          "alt_text": null,
          "duration_ms": null,
          "expires_at": null,
          "height": null,
          "thumbnail_url": "https://preview.redd.it/tp97rbcz5nph1.jpeg?width=140&height=140&crop=1%3A1%2Csmart&auto=webp&s=1a0b1993df7ce5a9bab03dbd1ae823904ee5a406",
          "type": "image",
          "url": "https://i.redd.it/tp97rbcz5nph1.jpeg",
          "width": null
        }
      ],
      "mentions": [],
      "metrics": {
        "comment_count": 101,
        "like_count": 2372,
        "quote_count": null,
        "repost_count": null,
        "save_count": null,
        "share_count": null,
        "view_count": null
      },
      "platform": "reddit",
      "platform_specific": {
        "reddit": {
          "award_count": null,
          "crosspost_of": null,
          "domain": null,
          "flair": null,
          "is_archived": null,
          "is_locked": null,
          "is_spoiler": false,
          "link_url": null,
          "score": 2372,
          "subreddit": {
            "id": "t5_fvy1km",
            "name": "SATNA_PROJECT",
            "url": "https://www.reddit.com/r/SATNA_PROJECT/"
          },
          "upvote_ratio": null
        }
      },
      "platform_type": null,
      "published_at": "2026-09-15T08:06:21Z",
      "text": null,
      "thumbnail_url": "https://preview.redd.it/tp97rbcz5nph1.jpeg?width=140&height=140&crop=1%3A1%2Csmart&auto=webp&s=1a0b1993df7ce5a9bab03dbd1ae823904ee5a406",
      "title": "Anthropic hackathon winner just open-sourced his entire Claude Code setup 🔥",
      "type": "image",
      "unknown_fields": [
        "mentions"
      ],
      "url": "https://www.reddit.com/r/SATNA_PROJECT/comments/1wgu40p/anthropic_hackathon_winner_just_opensourced_his/"
    }
  ],
  "page": {
    "has_more": true,
    "next_cursor": "c1.EXAMPLE_CURSOR",
    "next_cursor_expires_at": "2026-10-26T12:00:00Z",
    "end_reason": null
  },
  "meta": {
    "request_id": "req_3f9c2a7d1e8b4c6a9f0e2d4b6a8c0e1f",
    "platform": "reddit",
    "source": "page",
    "is_cached": false,
    "credits_charged": 1,
    "latency_ms": 603,
    "fetched_at": "2026-10-25T12:00:00Z",
    "input": null,
    "credits_remaining": 9999,
    "client_request_id": null,
    "warnings": []
  }
}
```

Long arrays and strings are shortened here. Real responses are complete.

## One schema on 21 platforms.

The [response reference](https://socialtap.dev/docs/reference/reddit/search_posts/index.md#response) lists every field, its type and when it is `null`. [See the full schema](https://socialtap.dev/resources/post/index.md).

- ### Null means unknown

  A field Reddit doesn't show is null, never zero or an empty string, so a real zero always means zero.
- ### What it accepts

  Words or a phrase, matched by Reddit's search against post titles and text.
- ### Write one parser

  Reddit, TikTok, Instagram and 18 more platforms answer in these fields, so the code that reads one reads them all.

- **`platform`string**: Platform ID (tiktok, youtube, …).
- **`id`string**: Platform-native post ID (string; Instagram shortcode, Reddit with its t3_ prefix).
- **`url`string**: Canonical post URL.
- **`type`string**: Normalized content shape. New values may be added; treat unknown values as other.
- **`platform_type`string**: The platform's own product label, lowercase (reel, short, story, live, tweet, …).
- **`title`string**: Headline (YouTube title, Reddit title); null on caption-only platforms.
- **`text`string**: Caption, description or body as plain text.
- **`language`string**: BCP-47 language of text, when the platform states it.

Live data from 33 platforms.

[TikTok](https://socialtap.dev/apis/tiktok/index.md) · [Instagram](https://socialtap.dev/apis/instagram/index.md) · [Facebook](https://socialtap.dev/apis/facebook/index.md) · [YouTube](https://socialtap.dev/apis/youtube/index.md) · [Reddit](https://socialtap.dev/apis/reddit/index.md) · [Threads](https://socialtap.dev/apis/threads/index.md) · [Spotify](https://socialtap.dev/apis/spotify/index.md) · [Amazon](https://socialtap.dev/apis/amazon/index.md) · [Apple Music](https://socialtap.dev/apis/applemusic/index.md) · [Pinterest](https://socialtap.dev/apis/pinterest/index.md) · [Rumble](https://socialtap.dev/apis/rumble/index.md) · [X](https://socialtap.dev/apis/x/index.md) · [Bluesky](https://socialtap.dev/apis/bluesky/index.md) · [Twitch](https://socialtap.dev/apis/twitch/index.md) · [LinkedIn](https://socialtap.dev/apis/linkedin/index.md) · [Telegram](https://socialtap.dev/apis/telegram/index.md) · [TikTok Shop](https://socialtap.dev/apis/tiktokshop/index.md) · [Kwai](https://socialtap.dev/apis/kwai/index.md) · [Snapchat](https://socialtap.dev/apis/snapchat/index.md) · [SoundCloud](https://socialtap.dev/apis/soundcloud/index.md) · [Truth Social](https://socialtap.dev/apis/truthsocial/index.md) · [Kick](https://socialtap.dev/apis/kick/index.md) · [Komi](https://socialtap.dev/apis/komi/index.md) · [Lnk.Bio](https://socialtap.dev/apis/linkbio/index.md) · [Linkme](https://socialtap.dev/apis/linkme/index.md) · [Linktree](https://socialtap.dev/apis/linktree/index.md) · [Pillar](https://socialtap.dev/apis/pillar/index.md) · [TikTok Ad Library](https://socialtap.dev/apis/tiktok-ad-library/index.md) · [Facebook Ad Library](https://socialtap.dev/apis/facebook-ad-library/index.md) · [Facebook Events](https://socialtap.dev/apis/facebook-events/index.md) · [Facebook Marketplace](https://socialtap.dev/apis/facebook-marketplace/index.md) · [Google Ads Transparency Center](https://socialtap.dev/apis/google-ads-transparency/index.md) · [LinkedIn Ad Library](https://socialtap.dev/apis/linkedin-ad-library/index.md)

## What teams build with the Reddit Search API.

- ### Monitor new posts about a product
- ### Find the most discussed posts on a topic
- ### Watch a keyword in one subreddit
- ### Find image and video posts about a topic
- ### Gather discussions for market research

## Good to know before you build.

- Reddit's search results show no post body, so text is null and mentions is listed in unknown_fields. include_body reads the bodies from Reddit's feed of the page's posts with a second upstream request per page, on every sort. A post the feed doesn't list keeps a null text, and the Reddit Post API returns the full post.
- type is read from the result's preview: carousel for a gallery, video for a Reddit video's poster, image for an uploaded image and link for an external page's preview. A result without a preview reads as text and an old post's legacy thumbnail as link, both listed in approximate_fields. With include_body, type is exact.
- media finds posts whose image, video or gallery was uploaded to Reddit, and with image or video the type is exact. A post that links to media on another site, such as YouTube or Imgur, is not included: search those with site: in query instead.
- With media=carousel, a result that shows its gallery is an exact carousel with every image in media. One that shows none is carousel in approximate_fields, with media in unknown_fields.
- With media, most results on popular and most_comments show only a small thumbnail: the post's media item then has a null url, and with any its type is image, listed in approximate_fields with media. A video's url is always null in search results. The Reddit Post API returns the media file.
- Scores are exact, but Reddit shows a score at or below zero as 0, so a 0 score is null.
- Logged out, Reddit's search leaves out NSFW posts and posts of quarantined subreddits.
- A subreddit that doesn't exist, or that Reddit hides (banned, private), returns an empty page.

## 1 credit per page. Failed requests are free.

Buy credits once and spend them on any endpoint, on any platform.

[Plans and packs](https://socialtap.dev/pricing/index.md) · [How this endpoint is priced](https://socialtap.dev/docs/reference/reddit/search_posts/index.md#pricing) · [How credits work](https://socialtap.dev/docs/credits/index.md)

| Source | Price per successful page | Per 1,000 pages |
| --- | --- | --- |
| Public page `page` | 1 credit | $0.75–$1.97 |

- Cache hits are free.
- Credits from packs and top-ups never expire.
- A monthly plan's credits are spent first, and what is left of them ends at each renewal.
- Prices exclude tax: sales tax is added at checkout where it applies.
- Outside the US, plans and packs are sold to businesses: checkout asks for your VAT, GST or other business tax ID.

## Questions about the Reddit Search API.

More in the [API reference](https://socialtap.dev/docs/reference/reddit/search_posts/index.md).

**How much does the Reddit Search API cost?**

A page of up to 7 posts costs 1 credit. Every successful page is charged, empty pages included. SocialTap credits cost $0.75–$1.97 per 1,000, depending on the plan or pack.

**How do I get the next page?**

Repeat the same request with cursor set to page.next_cursor from the previous response, keeping the other parameters. When page.has_more is false there are no more pages. Cursors expire after 1 hour.

Other platforms

## Posts on 20 more platforms.

- [TikTok Search API](https://socialtap.dev/apis/tiktok/search_posts/index.md) (1 credit / page · `GET /v1/tiktok/search_posts`)
- [Instagram Search API](https://socialtap.dev/apis/instagram/search_posts/index.md) (1 credit / page · `GET /v1/instagram/search_posts`)
- [Facebook Post API](https://socialtap.dev/apis/facebook/post/index.md) (1 credit · `GET /v1/facebook/post`)
- [YouTube Video API](https://socialtap.dev/apis/youtube/post/index.md) (1 credit · `GET /v1/youtube/post`)
- [Threads Search API](https://socialtap.dev/apis/threads/search_posts/index.md) (1 credit / page · `GET /v1/threads/search_posts`)
- [Spotify Track API](https://socialtap.dev/apis/spotify/track/index.md) (1 credit · `GET /v1/spotify/track`)
- [Amazon Shop Posts API](https://socialtap.dev/apis/amazon/shop_posts/index.md) (1 credit / page · `GET /v1/amazon/shop_posts`)
- [Apple Music Track API](https://socialtap.dev/apis/applemusic/track/index.md) (1 credit · `GET /v1/applemusic/track`)
- [Pinterest Pin API](https://socialtap.dev/apis/pinterest/pin/index.md) (1 credit · `GET /v1/pinterest/pin`)
- [Rumble Search API](https://socialtap.dev/apis/rumble/search_posts/index.md) (1 credit / page · `GET /v1/rumble/search_posts`)
- [X (Twitter) Post API](https://socialtap.dev/apis/x/post/index.md) (1 credit · `GET /v1/x/post`)
- [Bluesky Post Search API](https://socialtap.dev/apis/bluesky/search_posts/index.md) (1 credit / page · `GET /v1/bluesky/search_posts`)
- [Twitch Video and Clip API](https://socialtap.dev/apis/twitch/video/index.md) (1 credit · `GET /v1/twitch/video`)
- [LinkedIn Post API](https://socialtap.dev/apis/linkedin/post/index.md) (1 credit · `GET /v1/linkedin/post`)
- [Telegram Post API](https://socialtap.dev/apis/telegram/post/index.md) (1 credit · `GET /v1/telegram/post`)
- [Kwai Post API](https://socialtap.dev/apis/kwai/post/index.md) (1 credit · `GET /v1/kwai/post`)
- [Snapchat Spotlight API](https://socialtap.dev/apis/snapchat/spotlight/index.md) (1 credit · `GET /v1/snapchat/spotlight`)
- [SoundCloud Track API](https://socialtap.dev/apis/soundcloud/track/index.md) (1 credit · `GET /v1/soundcloud/track`)
- [Truth Social Post API](https://socialtap.dev/apis/truthsocial/post/index.md) (1 credit · `GET /v1/truthsocial/post`)
- [Kick Clip API](https://socialtap.dev/apis/kick/post/index.md) (1 credit · `GET /v1/kick/post`)

More Reddit

## Reddit API. 13 endpoints, one key.

- [Reddit Post API](https://socialtap.dev/apis/reddit/post/index.md) (1 credit · `GET /v1/reddit/post`)
- [Reddit User Posts API](https://socialtap.dev/apis/reddit/posts/index.md) (1 credit / page · `GET /v1/reddit/posts`)
- [Reddit Subreddit Posts API](https://socialtap.dev/apis/reddit/subreddit_posts/index.md) (1 credit / page · `GET /v1/reddit/subreddit_posts`)
- [Reddit Profile API](https://socialtap.dev/apis/reddit/profile/index.md) (1 credit · `GET /v1/reddit/profile`)
- [Reddit User Search API](https://socialtap.dev/apis/reddit/search_profiles/index.md) (1 credit / page · `GET /v1/reddit/search_profiles`)
- [Reddit Comments API](https://socialtap.dev/apis/reddit/comments/index.md) (1 credit / page · `GET /v1/reddit/comments`)
- [Reddit User Comments API](https://socialtap.dev/apis/reddit/profile_comments/index.md) (1 credit / page · `GET /v1/reddit/profile_comments`)
- [Reddit Comment Search API](https://socialtap.dev/apis/reddit/search_comments/index.md) (1 credit / page · `GET /v1/reddit/search_comments`)
- [Reddit Video Transcript API](https://socialtap.dev/apis/reddit/transcript/index.md) (From 1 credit · `GET /v1/reddit/transcript`)
- [Reddit Engagement API](https://socialtap.dev/apis/reddit/engagement/index.md) (1 credit · `GET /v1/reddit/engagement`)
- [Reddit Subreddit API](https://socialtap.dev/apis/reddit/subreddit/index.md) (1 credit · `GET /v1/reddit/subreddit`)
- [Reddit Subreddit Search API](https://socialtap.dev/apis/reddit/search_subreddits/index.md) (1 credit / page · `GET /v1/reddit/search_subreddits`)

## Try it with your own search.

Type it in the playground, or copy the request into your code.

100free credits

- No credit card
- Failed requests are free
- Works on all 218 endpoints

[Start for free](https://socialtap.dev/signup/) [Read the docs](https://socialtap.dev/docs/index.md)

---

[HTML version](https://socialtap.dev/apis/reddit/search_posts/) · [Docs index for AI agents](https://socialtap.dev/llms.txt) · [All docs in one file](https://socialtap.dev/llms-full.txt)
