# Rumble Search API

Beta

Searches Rumble's public videos and live streams, or its shorts, by keyword and returns them a page at a time: each video's link, title, thumbnail, exact upload time, real length, views, likes, dislikes and comments, its channel with the verification badge, and whether a stream is on air with its viewer count. Shorts also carry exact counts, the channel's follower count and the video file. Sort by relevance, newest or most viewed, and filter by upload date and length with Rumble's own filters.

[Get 100 free credits](https://staging.socialtap.dev/signup/?next=%2Fplayground%2F%3Fendpoint%3Drumble.search_posts) · [API reference](https://staging.socialtap.dev/docs/reference/rumble/search_posts/index.md) · [Try it](https://staging.socialtap.dev/playground/?endpoint=rumble.search_posts)

- **Price**: From **1 credit** per page$0.75–$1.45 per 1,000 pages
- **Request**: `GET /v1/rumble/search_posts`One API key, one JSON schema
- **Input**: `query`e.g. `cats`
- **Page size**: Up to 36 posts

Use cases

## What teams build with it. From one request.

- Monitor Rumble for videos about a brand, person or topic
- Find the most viewed Rumble videos on a subject
- Track new uploads and live streams for a keyword
- Collect Rumble shorts for trend research

What you get

## Posts in one schema. The same on every platform.

- **`platform`string**: Platform ID (tiktok, youtube, …).
- **`id`string**: Platform-native post ID (string; Instagram shortcode, Reddit without t3_).
- **`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.

Every field, its type and when it is `null`: [the response reference](https://staging.socialtap.dev/docs/reference/rumble/search_posts/index.md#response) and the [post schema](https://staging.socialtap.dev/resources/post/index.md).

## Example request

cURL:

```shell
curl -G 'https://staging.socialtap.dev/v1/rumble/search_posts' \
  --data-urlencode 'query=cats' \
  -H "x-api-key: $SOCIALTAP_API_KEY"
```

Node.js:

```javascript
const params = new URLSearchParams({
  query: "cats",
});
const res = await fetch(`https://staging.socialtap.dev/v1/rumble/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:

```python
import os

import requests

res = requests.get(
    "https://staging.socialtap.dev/v1/rumble/search_posts",
    params={"query": "cats"},
    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:

```go
package main

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

func main() {
	q := url.Values{}
	q.Set("query", "cats")
	req, err := http.NewRequest("GET", "https://staging.socialtap.dev/v1/rumble/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": [],
      "author": {
        "avatar_url": null,
        "display_name": "ViralHog",
        "id": "_u7bbl",
        "is_verified": false,
        "url": "https://rumble.com/user/ViralHog",
        "username": "user/ViralHog"
      },
      "coauthors": [],
      "duration_ms": 28000,
      "hashtags": [],
      "id": "v7hfhey",
      "is_nsfw": null,
      "is_pinned": null,
      "is_sponsored": null,
      "language": null,
      "media": [
        {
          "alt_text": null,
          "duration_ms": 28000,
          "expires_at": null,
          "height": null,
          "thumbnail_url": "https://hugh.cdn.rumble.cloud/video/fww1/39/s8/6/Q/l/t/-/Qlt-A.oq1b.jpg",
          "type": "video",
          "url": null,
          "width": null
        }
      ],
      "mentions": [],
      "metrics": {
        "comment_count": null,
        "like_count": 3,
        "quote_count": null,
        "repost_count": null,
        "save_count": null,
        "share_count": null,
        "view_count": 254
      },
      "platform": "rumble",
      "platform_specific": {
        "rumble": {
          "author_follower_count": null,
          "caption_tracks": [],
          "category": null,
          "concurrent_viewer_count": null,
          "dislike_count": 0,
          "embed_id": null,
          "embed_url": null,
          "files": [],
          "is_age_restricted": null,
          "is_live_now": false,
          "keywords": [],
          "live_started_at": null,
          "numeric_id": null,
          "scheduled_start_at": null,
          "secondary_category": null
        }
      },
      "platform_type": "video",
      "published_at": "2026-10-26T19:34:46Z",
      "text": null,
      "thumbnail_url": "https://hugh.cdn.rumble.cloud/video/fww1/39/s8/6/Q/l/t/-/Qlt-A.oq1b.jpg",
      "title": "Orange Cat Sits Like Human On Fuzzy Couch",
      "type": "video",
      "unknown_fields": [
        "hashtags",
        "mentions",
        "platform_specific.rumble.keywords"
      ],
      "url": "https://rumble.com/v7hfhey-orange-cat-sits-like-human-on-fuzzy-couch.html"
    },
    {
      "approximate_fields": [],
      "author": {
        "avatar_url": null,
        "display_name": "SereneChristine",
        "id": "_urv80h",
        "is_verified": false,
        "url": "https://rumble.com/user/SereneChristine",
        "username": "user/SereneChristine"
      },
      "coauthors": [],
      "duration_ms": 932000,
      "hashtags": [],
      "id": "v7hdue2",
      "is_nsfw": null,
      "is_pinned": null,
      "is_sponsored": null,
      "language": null,
      "media": [
        {
          "alt_text": null,
          "duration_ms": 932000,
          "expires_at": null,
          "height": null,
          "thumbnail_url": "https://hugh.cdn.rumble.cloud/video/fwe2/1e/s8/1/A/G/a/-/AGa-A.oq1b-small-The-Book-of-Enoch-Reveals-W..jpg",
          "type": "video",
          "url": null,
          "width": null
        }
      ],
      "mentions": [],
      "metrics": {
        "comment_count": null,
        "like_count": 4,
        "quote_count": null,
        "repost_count": null,
        "save_count": null,
        "share_count": null,
        "view_count": 400
      },
      "platform": "rumble",
      "platform_specific": {
        "rumble": {
          "author_follower_count": null,
          "caption_tracks": [],
          "category": null,
          "concurrent_viewer_count": null,
          "dislike_count": 1,
          "embed_id": null,
          "embed_url": null,
          "files": [],
          "is_age_restricted": null,
          "is_live_now": false,
          "keywords": [],
          "live_started_at": null,
          "numeric_id": null,
          "scheduled_start_at": null,
          "secondary_category": null
        }
      },
      "platform_type": "video",
      "published_at": "2026-10-25T20:04:50Z",
      "text": null,
      "thumbnail_url": "https://hugh.cdn.rumble.cloud/video/fwe2/1e/s8/1/A/G/a/-/AGa-A.oq1b-small-The-Book-of-Enoch-Reveals-W..jpg",
      "title": "The Book of Enoch Reveals Why Cats Were Sent to Earth — And Why the Church Removed That Chapter",
      "type": "video",
      "unknown_fields": [
        "hashtags",
        "mentions",
        "platform_specific.rumble.keywords"
      ],
      "url": "https://rumble.com/v7hdue2-the-book-of-enoch-reveals-why-cats-were-sent-to-earth-and-why-the-church-re.html"
    },
    {
      "approximate_fields": [],
      "author": {
        "avatar_url": null,
        "display_name": "tubewatch1",
        "id": "_utpvcv",
        "is_verified": false,
        "url": "https://rumble.com/user/tubewatch1",
        "username": "user/tubewatch1"
      },
      "coauthors": [],
      "duration_ms": 100000,
      "hashtags": [],
      "id": "v7hhiau",
      "is_nsfw": null,
      "is_pinned": null,
      "is_sponsored": null,
      "language": null,
      "media": [
        {
          "alt_text": null,
          "duration_ms": 100000,
          "expires_at": null,
          "height": null,
          "thumbnail_url": "https://hugh.cdn.rumble.cloud/video/fww1/03/s8/6/M/p/Q/-/MpQ-A.oq1b.jpg",
          "type": "video",
          "url": null,
          "width": null
        }
      ],
      "mentions": [],
      "metrics": {
        "comment_count": 1,
        "like_count": null,
        "quote_count": null,
        "repost_count": null,
        "save_count": null,
        "share_count": null,
        "view_count": 211
      },
      "platform": "rumble",
      "platform_specific": {
        "rumble": {
          "author_follower_count": null,
          "caption_tracks": [],
          "category": null,
          "concurrent_viewer_count": null,
          "dislike_count": null,
          "embed_id": null,
          "embed_url": null,
          "files": [],
          "is_age_restricted": null,
          "is_live_now": false,
          "keywords": [],
          "live_started_at": null,
          "numeric_id": null,
          "scheduled_start_at": null,
          "secondary_category": null
        }
      },
      "platform_type": "video",
      "published_at": "2026-10-27T22:19:31Z",
      "text": null,
      "thumbnail_url": "https://hugh.cdn.rumble.cloud/video/fww1/03/s8/6/M/p/Q/-/MpQ-A.oq1b.jpg",
      "title": "Pretty Peaceful Precious Piper - My Adopted Shelter Cat Vlog",
      "type": "video",
      "unknown_fields": [
        "hashtags",
        "mentions",
        "platform_specific.rumble.keywords"
      ],
      "url": "https://rumble.com/v7hhiau-pretty-peaceful-precious-piper-my-adopted-shelter-cat-vlog.html"
    }
  ],
  "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": "rumble",
    "source": "page",
    "is_cached": false,
    "credits_charged": 1,
    "latency_ms": 0,
    "fetched_at": "2026-10-25T12:00:00Z",
    "input": null,
    "credits_remaining": 9999,
    "client_request_id": null,
    "warnings": [],
    "mode": "live"
  }
}
```

Long arrays and strings are shortened for display; real responses are complete.

> [!NOTE]
>
> **Good to know**
>
> - Video results show Rumble's abbreviated counts (2.42K: cut, not rounded, to three significant digits, so a slight undercount): those values are in approximate_fields. A count a result does not show (no votes, no comments yet) is null. Shorts carry exact counts.
> - Rumble serves a limited number of result pages per search; a walk that reaches it ends with end_reason platform_limit.
> - Search results carry no description: text is null and hashtags and mentions are listed in unknown_fields. Fetch the video for those.
> - Rumble's search matches Latin-script keywords: a query in Cyrillic, Arabic, Hebrew or CJK script finds nothing. Queries its firewall reads as SQL or script injection are refused with invalid_input.

Pricing

## Pay per page. Only when it succeeds.

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

- Failed requests are free: errors cost 0 credits.
- Cache hits are free: responses served from the cache cost 0 credits.
- Credits never expire.
- One credit balance for every endpoint and platform.

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

FAQ

## Questions, answered.

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

1 credit for public page results (meta.source = page) per page of up to 36 items, charged for every successful page, empty pages included. SocialTap credits cost $0.75–$1.45 per 1,000 depending on the 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 items. Cursors expire after 1 hour.

**Am I charged for failed requests?**

No. Requests that return an error cost 0 credits. Responses served from the cache are free too.

Same schema, other platforms

## Posts everywhere. One parser.

[Instagram Post APIBetaPost`GET /v1/instagram/post`1 credit](https://staging.socialtap.dev/apis/instagram/post/index.md) · [Rumble Video APIBetaPost`GET /v1/rumble/post`1 credit](https://staging.socialtap.dev/apis/rumble/post/index.md) · [Rumble Channel Videos APIBetaPost`GET /v1/rumble/posts`1 credit / page](https://staging.socialtap.dev/apis/rumble/posts/index.md) · [TikTok Post APIBetaPost`GET /v1/tiktok/post`1 credit](https://staging.socialtap.dev/apis/tiktok/post/index.md) · [TikTok Posts APIBetaPost`GET /v1/tiktok/posts`1 credit / page](https://staging.socialtap.dev/apis/tiktok/posts/index.md) · [YouTube Video APIBetaPost`GET /v1/youtube/post`1 credit](https://staging.socialtap.dev/apis/youtube/post/index.md) · [YouTube Channel Videos APIBetaPost`GET /v1/youtube/posts`1 credit / page](https://staging.socialtap.dev/apis/youtube/posts/index.md)

More Rumble

## Rumble API. 6 endpoints, one key.

[Rumble Comments APIBetaComment`GET /v1/rumble/comments`1 credit / page](https://staging.socialtap.dev/apis/rumble/comments/index.md) · [Rumble Video APIBetaPost`GET /v1/rumble/post`1 credit](https://staging.socialtap.dev/apis/rumble/post/index.md) · [Rumble Channel Videos APIBetaPost`GET /v1/rumble/posts`1 credit / page](https://staging.socialtap.dev/apis/rumble/posts/index.md) · [Rumble Channel APIBetaProfile`GET /v1/rumble/profile`1 credit](https://staging.socialtap.dev/apis/rumble/profile/index.md) · [Rumble Transcript APIBetaTranscript`GET /v1/rumble/transcript`From 1 credit](https://staging.socialtap.dev/apis/rumble/transcript/index.md)

## Start with 100 free credits. No card required.

Test keys answer every endpoint from recorded responses, free, so you can build before you spend. Failed requests are always free.

[Get your API key](https://staging.socialtap.dev/signup/?next=%2Fplayground%2F%3Fendpoint%3Drumble.search_posts) · [Read the API reference](https://staging.socialtap.dev/docs/reference/rumble/search_posts/index.md)

---

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