API

REST API v1

API Documentation

Integrate Reddit upvotes, downvotes, and comments into your application with a simple, authenticated REST API.

Base URL https://buyredditupvotes.io/api/public/v1
Authentication

Every request requires an API key passed in the x-api-key header. Generate and manage your keys from your account Settings page.

Required Header
x-api-key: YOUR_API_KEY

IP Whitelisting Required for Production. Your server IP must be whitelisted before live orders will process. Contact us on Telegram @buyredditupvotes with your IP to get approved. Test orders from non-whitelisted IPs will return a 403 error.

Available Services

Tip: You can use either the serviceKey (e.g. "post_upvote") or the numeric serviceId (e.g. "2") when creating orders — both are accepted.

post_upvote
ID: 2
Post Upvote
$1.00 / 100
Min: 5  •  Max: 1,000
post_downvote
ID: 1
Post Downvote
$1.00 / 100
Min: 5  •  Max: 1,000
comment_upvote
ID: 4
Comment Upvote
$2.00 / 100
Min: 5  •  Max: 1,000
comment_downvote
ID: 8
Comment Downvote
$2.00 / 100
Min: 5  •  Max: 1,000
custom_comments
ID: 5
Custom Comments
$0.10 / comment
Min: 1  •  Max: 100
Rate Limits & Restrictions
3
Concurrent Orders
Maximum 3 pending or running orders per link + service combination at one time.
100
Batch Status Check
Maximum 100 order IDs per /status request.
100
Pagination Limit
Maximum 100 results per page when listing orders with the limit parameter.
10–5k
Speed Range / hr
Delivery speed in upvotes/downvotes per hour. Applies to vote services only, not custom_comments.
Order Status Values

Real-time refresh: Status is automatically synced from our delivery network each time you fetch an order via the GET endpoints. You always receive the latest state — no caching delays.

pending
Order received and queued for processing. Delivery has not started yet.
running
Order is actively being processed — upvotes, downvotes, or comments are being delivered.
completed
Order has been fully delivered. All requested upvotes have been applied to the target post or comment.
failed
Order failed or was cancelled. Balance may be automatically refunded depending on the failure reason.
Quick Start
1
Create Order — Upvotes / Downvotes 201 Created

Parameters: service, link, quantity, speed (optional)

Request — cURL
curl -X POST https://buyredditupvotes.io/api/public/v1/orders \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "service": "post_upvote",
    "link": "https://www.reddit.com/r/example/comments/abc123/...",
    "quantity": 50,
    "speed": 100
  }'
Response
{
  "status": "success",
  "orderId": 4292567,
  "cost": 0.5,
  "balanceAfter": 24.50
}
2
Create Order — Custom Comments 201 Created

Separate each comment with \n. Use delay1 and delay2 to control posting timing in minutes.

Request — cURL
curl -X POST https://buyredditupvotes.io/api/public/v1/orders \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "service": "custom_comments",
    "link": "https://www.reddit.com/r/example/comments/abc123/...",
    "comments": "Great post!\nThanks for sharing\nVery helpful",
    "delay1": 2,
    "delay2": 5
  }'
Response
{
  "status": "success",
  "orderId": 4293000,
  "cost": 0.30,
  "balanceAfter": 24.20
}
3
Check Order Status (Batch) 200 OK

Check up to 100 orders in a single request. Pass all order IDs as a JSON array.

Request — cURL
curl -X POST https://buyredditupvotes.io/api/public/v1/status \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{"orders": ["4292567", "4293000"]}'
Response
{
  "results": [
    { "orderId": 4292567, "status": "running" },
    { "orderId": 4293000, "status": "completed" }
  ]
}
All Endpoints
POST /api/public/v1/orders Create a new order 201 Created
Body Parameters
ParameterTypeDescription
servicestringService key from available services (e.g. post_upvote) required
serviceIdstringNumeric service ID — alternative to service key optional
linkstringFull Reddit post or comment URL required
quantitynumberNumber of upvotes/downvotes (5–1,000). Not used for custom_comments required*
speednumberDelivery rate per hour (10–5,000). Vote services only. Defaults to auto optional
commentsstringComment text separated by \n. Required for custom_comments optional
delay1numberMinutes before first comment is posted optional
delay2numberMinutes between each subsequent comment optional
GET /api/public/v1/orders?id=ORDER_ID Get a single order (status refreshed live) 200 OK
Request — cURL
curl -X GET "https://buyredditupvotes.io/api/public/v1/orders?id=4292567" \
  -H "x-api-key: YOUR_API_KEY"
Response
{
  "order": {
    "id": 4292567,
    "created_at": "2025-11-02T19:06:23Z",
    "service": "Post Upvote",
    "reddit_link": "https://www.reddit.com/r/example/comments/abc123/...",
    "quantity": 50,
    "cost": 0.5,
    "status": "completed"
  }
}
GET /api/public/v1/orders?page=1&limit=20 List all orders (paginated) 200 OK
Query Parameters
ParameterTypeDescription
pagenumberPage number. Default: 1 optional
limitnumberResults per page. Default: 20, max: 100 optional
statusstringFilter: pending | running | completed | failed optional
servicestringFilter by service name optional
linkstringSearch by Reddit link (partial match supported) optional
POST /api/public/v1/status Batch status check (max 100) 200 OK
Body Parameters
ParameterTypeDescription
ordersarrayArray of order IDs as strings or numbers. Max 100 per request required
GET /api/public/v1/services List all services with pricing 200 OK
Example Response
{
  "services": [
    {
      "serviceId": "2",
      "serviceKey": "post_upvote",
      "name": "Post Upvote",
      "min": 5,
      "max": 1000,
      "ratePerHundred": 1.0,
      "category": "Reddit"
    }
  ]
}
GET /api/public/v1/balance Get current account balance 200 OK
Example Response
{ "balance": 25.50 }
Reddit Posting Service
$15 per post
1
Submit via API
Send subreddit, title & body (markdown)
2
Charged $15
Balance debited immediately on submission
3
Team Review
Reviewed within 24 hours for approval
4
Published
Live URL returned in API response

If a post is rejected, a full $15 refund is issued automatically. Post status values: pending_approval approved published rejected

POST /api/public/v1/posts Submit a Reddit post ($15) 201 Created
Body Parameters
ParameterTypeDescription
subredditstringSubreddit name without r/ prefix. 2–21 characters required
titlestringPost title. 3–300 characters required
bodystringPost body in markdown format. 10–40,000 characters required
Request — cURL
curl -X POST https://buyredditupvotes.io/api/public/v1/posts \
  -H "Content-Type: application/json" \
  -H "x-api-key: YOUR_API_KEY" \
  -d '{
    "subreddit": "technology",
    "title": "The Future of AI in 2025",
    "body": "# Introduction\n\nArtificial Intelligence...\n\n## Key Points\n\n- Point 1\n- Point 2"
  }'
Response
{
  "status": "success",
  "post": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "created_at": "2025-12-13T10:00:00Z",
    "subreddit": "technology",
    "title": "The Future of AI in 2025",
    "status": "pending_approval",
    "cost": 15.0,
    "reddit_url": null,
    "published_at": null
  },
  "cost": 15.0,
  "balanceAfter": 35.0,
  "message": "Post submitted. Review within 24 hours."
}
GET /api/public/v1/posts?id=POST_ID Get post status and details 200 OK
Response — Published
{
  "post": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "subreddit": "technology",
    "title": "The Future of AI in 2025",
    "status": "published",
    "cost": 15.0,
    "reddit_url": "https://www.reddit.com/r/technology/comments/abc123/...",
    "published_at": "2025-12-13T14:30:00Z"
  }
}
GET /api/public/v1/posts?page=1&limit=20 List all posts with pagination 200 OK
Query Parameters
ParameterTypeDescription
pagenumberPage number. Default: 1 optional
limitnumberResults per page. Default: 20, max: 100 optional
statusstringFilter by status value optional
SDK Examples
Python — requests library
import requests

API_KEY = "YOUR_API_KEY"
BASE_URL = "https://buyredditupvotes.io/api/public/v1"

headers = {
    "Content-Type": "application/json",
    "x-api-key": API_KEY
}

def create_upvote_order(link: str, quantity: int, speed: int = None):
    payload = {"service": "post_upvote", "link": link, "quantity": quantity}
    if speed: payload["speed"] = speed
    return requests.post(f"{BASE_URL}/orders", json=payload, headers=headers).json()

def check_status(order_ids: list):
    return requests.post(
        f"{BASE_URL}/status",
        json={"orders": order_ids},
        headers=headers
    ).json()

def get_balance():
    return requests.get(f"{BASE_URL}/balance", headers=headers).json()

# Example usage
result = create_upvote_order(
    "https://reddit.com/r/example/comments/abc123/...",
    quantity=50,
    speed=100
)
print(f"Order ID: {result['orderId']} | Cost: ${result['cost']}")
JavaScript — fetch API (Node.js / Browser)
const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://buyredditupvotes.io/api/public/v1';

const headers = {
  'Content-Type': 'application/json',
  'x-api-key': API_KEY
};

async function createUpvoteOrder(link, quantity, speed = null) {
  const payload = { service: 'post_upvote', link, quantity };
  if (speed) payload.speed = speed;
  const res = await fetch(`${BASE_URL}/orders`, {
    method: 'POST', headers,
    body: JSON.stringify(payload)
  });
  return res.json();
}

async function checkStatus(orderIds) {
  const res = await fetch(`${BASE_URL}/status`, {
    method: 'POST', headers,
    body: JSON.stringify({ orders: orderIds })
  });
  return res.json();
}

async function getBalance() {
  const res = await fetch(`${BASE_URL}/balance`, { headers });
  return res.json();
}

// Example usage
const result = await createUpvoteOrder(
  'https://reddit.com/r/example/comments/abc123/...', 50, 100
);
console.log('Order ID:', result.orderId);
PHP — cURL
<?php
$API_KEY = 'YOUR_API_KEY';
$BASE_URL = 'https://buyredditupvotes.io/api/public/v1';

function createOrder($service, $link, $quantity, $speed = null) {
    global $API_KEY, $BASE_URL;
    $payload = ['service' => $service, 'link' => $link, 'quantity' => $quantity];
    if ($speed) $payload['speed'] = $speed;

    $ch = curl_init("$BASE_URL/orders");
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => [
            'Content-Type: application/json',
            "x-api-key: $API_KEY"
        ],
        CURLOPT_POSTFIELDS     => json_encode($payload)
    ]);
    $response = curl_exec($ch);
    curl_close($ch);
    return json_decode($response, true);
}

// Example usage
$result = createOrder(
    'post_upvote',
    'https://reddit.com/r/example/comments/abc123/...',
    50, 100
);
echo "Order ID: " . $result['orderId'];
?>
Error Handling
200
OKRequest successful.
201
CreatedOrder or post created successfully.
400
Bad RequestInvalid parameters or failed validation. Check the error field for details.
401
UnauthorizedInvalid or missing x-api-key header.
402
Payment RequiredInsufficient account balance to place the order.
403
ForbiddenYour server IP is not whitelisted. Contact us on Telegram to get approved.
404
Not FoundThe requested order or resource does not exist.
429
Too Many RequestsConcurrent order limit reached. Wait for existing orders to complete before placing new ones.
500
Server ErrorInternal error. Retry after a short delay or contact support if it persists.

All error responses follow the same JSON structure:

401 — Invalid API Key
{ "error": "Invalid or missing API key" }
402 — Insufficient Balance
{ "error": "Insufficient balance" }
400 — Validation Error
{ "error": "Quantity must be between 5 and 1000" }
429 — Concurrent Order Limit
{ "error": "You already have 3 pending/running orders for this link and service." }

For any issues, contact us on Telegram @buyredditupvotes. For IP whitelisting requests, include your server IP in your first message.