reddit_search 6 credits

Search all of Reddit by keywords. type picks the target: posts (default), comments (what people actually say about a product, problem, or brand -- unique to Reddit search), subreddits (find communities), users. Pass query as free text up to 256 characters; decompose broad topics into several narrower queries, since result depth per query is capped upstream around a few hundred results. sort applies to posts (relevance|top|new|hot|comment_count) and comments (relevance|top|new); range (past_hour..all_time) applies to posts only; both are rejected with INVALID_INPUT elsewhere. Costs 6 credits per page; a cursor page is a NEW call priced the same way. Returns one page of summaries (author, title or comment text, upvotes, comment_count, created_at, permalink, id) with a cursor; there is no server-side time window on comment search, so for monitoring filter on created_at yourself and poll with sort=new. Fetch full post bodies and discussion threads with reddit_get_post; read one community's feed with reddit_get_subreddit_posts. For high-volume recency sweeps across X instead, use x_search.

Parameters

ParamRequiredTypeDescription
queryyesstringFree-text keywords, e.g. 'self hosted photo backup'. Not a URL; use reddit_resolve_url for URLs.
typenostringWhat to search. 'comments' finds mentions inside discussions; 'subreddits' finds communities.
sortnostringposts: any value; comments: relevance|top|new; invalid for subreddits and users.
rangenostringTime window. posts only.
cursornostringCursor from a previous page.
freshnessnostringrecent (default) serves cached data from the last few hours when available; realtime forces a live fetch for +2 credits (refunded if we fall back to cached data).
max_creditsnointegerSpend ceiling for this one call. The call is rejected (nothing charged) if its quote exceeds this. Only the quote is ever reserved, never this ceiling.

REST

GET /v1/reddit/search · auth: required · metered: true

curl "https://api.veezee.io/v1/reddit/search?query=notion+alternative&type=comments" \
  -H "Authorization: Bearer $VEEZEE_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)"

MCP

{
  "method": "tools/call",
  "params": {
    "name": "reddit_search",
    "arguments": {
      "query": "notion alternative",
      "type": "comments"
    }
  }
}

Input examples

What do people say about a product

{
  "query": "notion alternative",
  "type": "comments"
}

Fresh posts about a topic this week

{
  "query": "local llm inference",
  "type": "posts",
  "sort": "new",
  "range": "past_week"
}

Next page of a sweep

{
  "query": "notion alternative",
  "type": "comments",
  "cursor": "eyJwYWdlIjoyfQ"
}

Output

Returns a reddit_search envelope. Full field list: /docs/fields#reddit_search.

Errors

REST returns application/problem+json; MCP returns the same content as an error result. message is written as the next-turn instruction.

CodeHTTP statusRetriableMeaning
INVALID_INPUT400noA parameter failed validation. Check param and message for what to fix.
NOT_FOUND404noNothing matches the given identifier or URL.
UNAUTHORIZED401noMissing, invalid, or revoked API key.
NOT_ENTITLED403noThis account is not enabled for the platform you called.
INSUFFICIENT_CREDITS402noYour balance can't cover this call's quote. Check get_usage or add credits.
QUOTE_EXCEEDS_MAX_CREDITS402noThe call's quote is higher than the max_credits you set. Nothing was charged.
IDEMPOTENCY_KEY_REQUIRED400noThis is a metered call; send an Idempotency-Key header.
IDEMPOTENCY_KEY_REUSED409noThat Idempotency-Key was already used with different arguments. Use a new key for a new call.
CONCURRENCY_LIMIT429yesToo many calls in flight for this key's plan. Wait for one to finish.
RATE_LIMITED429yesToo many calls per minute for this key's plan. Back off and retry.
TRIAL_CAP_EXCEEDED403noA trial-only limit was hit (concurrency, rate, search size, or realtime fetches).
BUDGET_EXHAUSTED503noA configured spend budget has been used up.
UPSTREAM_UNAVAILABLE502yesLinkedIn data wasn't reachable. Safe to retry.
PAYLOAD_TOO_LARGE413noThe request or response exceeded the size limit.
INTERNAL500yesSomething failed on our side. Safe to retry.

Errors a payment can fix add fields to this shape. INSUFFICIENT_CREDITS, TRIAL_CAP_EXCEEDED, and BUDGET_EXHAUSTED carry upgrade_url (give it to your human) and offer, its machine-readable twin; RATE_LIMITED and CONCURRENCY_LIMIT carry both on trial accounts only, where a paid plan raises the limit. offer holds offer_version (1), reason (the error code), currency ("usd"), recommended (which pack to lead with, currently flex), packs (pack, mode, price_usd_cents, credits or credits_per_month, and when, a short label for when that pack fits), rails (currently stripe_checkout), checkout_url (the same account-bound link as upgrade_url), resume, and refund_policy. Follow offer.resume after payment: INSUFFICIENT_CREDITS retries the same call with the SAME Idempotency-Key; TRIAL_CAP_EXCEEDED and BUDGET_EXHAUSTED retry with a fresh key; the two limit codes clear on their own with back-off, payment only raises the limit. INSUFFICIENT_CREDITS also sets credits_required: the credits the failed call needed. The failed attempt charged nothing.