API Documentation
Integrate Upvote's Reddit marketing services directly into your platform. Automate upvotes, comments, posts, and more.
Authentication
All API requests require authentication via an API key. Include your key in the x-api-key header with every request.
How to get your API key
Contact our team at api@upvote.net to request API access. Keys are issued within 24 hours for approved accounts.
curl -H "x-api-key: YOUR_API_KEY" \
https://api.upvote.net/v1/servicesAvailable Services
Our API supports the following Reddit marketing services. Each service has configurable quantities and options.
Reddit Upvotes
$0.10/eachBoost post visibility with organic-looking upvotes from aged accounts.
Reddit Downvotes
$0.12/eachSuppress competitor content with targeted downvotes.
Reddit Comments
$2.50/eachCustom-written comments from real-looking accounts.
Reddit Posts
$15.00/eachFull posts to any subreddit from established accounts.
Rate Limits & Restrictions
| Tier | Rate Limit | Daily Orders | Concurrent Orders |
|---|---|---|---|
| Standard | 60 requests/min | 100 | 10 |
| Pro | 300 requests/min | 500 | 50 |
| Enterprise | Unlimited | Unlimited | Unlimited |
Rate limit headers are included in every response: X-RateLimit-Remaining and X-RateLimit-Reset.
Order Status Values
Orders progress through the following statuses:
Quick Start
Get started in under a minute. Here's how to place your first order:
curl -X POST https://api.upvote.net/v1/orders \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"service": "upvotes",
"url": "https://reddit.com/r/example/comments/abc123/my_post",
"quantity": 100
}'{
"success": true,
"data": {
"order_id": "ord_a1b2c3d4e5",
"service": "upvotes",
"quantity": 100,
"amount": 10.00,
"status": "pending",
"created_at": "2026-01-15T10:30:00Z"
}
}All Endpoints
| Method | Endpoint | Description |
|---|---|---|
| POST | /orders | Create a new order |
| GET | /orders/:id | Get order status |
| GET | /services | List available services |
| GET | /balance | Check account balance |
| POST | /orders/reddit-post | Create a Reddit post order |
Create Order
https://api.upvote.net/v1/ordersCreate a new service order. Funds are deducted from your balance immediately.
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| service | string | Yes | Service type: "upvotes", "downvotes", "comments", "posts" |
| url | string | Yes | Target Reddit URL (post or comment permalink) |
| quantity | integer | Yes | Number of units to order |
| content | string | No | Comment text (required for comments service) |
| drip_feed | boolean | No | Spread delivery over time (default: true) |
| drip_hours | integer | No | Hours to spread delivery over (default: 24) |
curl -X POST https://api.upvote.net/v1/orders \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"service": "upvotes",
"url": "https://reddit.com/r/startups/comments/xyz/my_post",
"quantity": 250,
"drip_feed": true,
"drip_hours": 48
}'{
"success": true,
"data": {
"order_id": "ord_f6g7h8i9j0",
"service": "upvotes",
"url": "https://reddit.com/r/startups/comments/xyz/my_post",
"quantity": 250,
"amount": 25.00,
"status": "pending",
"drip_feed": true,
"drip_hours": 48,
"estimated_completion": "2026-01-17T10:30:00Z",
"created_at": "2026-01-15T10:30:00Z"
}
}Get Order Status
https://api.upvote.net/v1/orders/:idCheck the current status and progress of an order.
curl https://api.upvote.net/v1/orders/ord_f6g7h8i9j0 \
-H "x-api-key: YOUR_API_KEY"{
"success": true,
"data": {
"order_id": "ord_f6g7h8i9j0",
"service": "upvotes",
"quantity": 250,
"delivered": 142,
"amount": 25.00,
"status": "processing",
"drip_feed": true,
"created_at": "2026-01-15T10:30:00Z",
"updated_at": "2026-01-16T03:15:00Z"
}
}List Services
https://api.upvote.net/v1/servicesReturns all available services with current pricing and limits.
{
"success": true,
"data": [
{
"id": "upvotes",
"name": "Reddit Upvotes",
"price_per_unit": 0.10,
"min_quantity": 10,
"max_quantity": 5000,
"currency": "USD"
},
{
"id": "downvotes",
"name": "Reddit Downvotes",
"price_per_unit": 0.12,
"min_quantity": 10,
"max_quantity": 2000,
"currency": "USD"
},
{
"id": "comments",
"name": "Reddit Comments",
"price_per_unit": 2.50,
"min_quantity": 1,
"max_quantity": 100,
"currency": "USD"
},
{
"id": "posts",
"name": "Reddit Posts",
"price_per_unit": 15.00,
"min_quantity": 1,
"max_quantity": 50,
"currency": "USD"
}
]
}Check Balance
https://api.upvote.net/v1/balanceReturns your current account balance and spending summary.
{
"success": true,
"data": {
"balance": 487.50,
"currency": "USD",
"total_spent": 1512.50,
"total_orders": 89,
"tier": "pro"
}
}Reddit Posting Service
Our premium posting service creates full Reddit posts from established accounts. Posts are crafted to match subreddit culture and rules. $15 per post.
https://api.upvote.net/v1/orders/reddit-post| Parameter | Type | Required | Description |
|---|---|---|---|
| subreddit | string | Yes | Target subreddit (without r/ prefix) |
| title | string | Yes | Post title (max 300 characters) |
| body | string | No | Post body text (for text posts) |
| link_url | string | No | URL to submit (for link posts) |
| flair | string | No | Post flair text if subreddit requires it |
| schedule_at | ISO 8601 | No | Schedule post for optimal timing |
curl -X POST https://api.upvote.net/v1/orders/reddit-post \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"subreddit": "SaaS",
"title": "We built an internal tool that cut our support tickets by 60%",
"body": "Hey everyone, wanted to share what we learned...",
"flair": "Case Study",
"schedule_at": "2026-01-16T14:00:00Z"
}'{
"success": true,
"data": {
"order_id": "ord_post_k1l2m3n4",
"service": "reddit-post",
"subreddit": "SaaS",
"amount": 15.00,
"status": "pending",
"scheduled_at": "2026-01-16T14:00:00Z",
"created_at": "2026-01-15T10:30:00Z"
}
}SDK Examples
Use these code snippets to integrate Upvote into your application. Official SDKs coming soon.
Python
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.upvote.net/v1"
def create_order(service, url, quantity, **kwargs):
response = requests.post(
f"{BASE_URL}/orders",
headers={
"x-api-key": API_KEY,
"Content-Type": "application/json"
},
json={
"service": service,
"url": url,
"quantity": quantity,
**kwargs
}
)
return response.json()
# Example: Order 100 upvotes with drip feed
result = create_order(
service="upvotes",
url="https://reddit.com/r/example/comments/abc123/post",
quantity=100,
drip_feed=True,
drip_hours=24
)
print(result)JavaScript / Node.js
const API_KEY = "YOUR_API_KEY";
const BASE_URL = "https://api.upvote.net/v1";
async function createOrder(service, url, quantity, options = {}) {
const response = await fetch(`${BASE_URL}/orders`, {
method: "POST",
headers: {
"x-api-key": API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ service, url, quantity, ...options }),
});
return response.json();
}
// Example: Order 50 comments
const result = await createOrder(
"comments",
"https://reddit.com/r/example/comments/abc123/post",
50,
{ content: "Great post, really insightful!" }
);
console.log(result);PHP
<?php
$apiKey = "YOUR_API_KEY";
$baseUrl = "https://api.upvote.net/v1";
function createOrder($service, $url, $quantity, $options = []) {
global $apiKey, $baseUrl;
$data = array_merge([
"service" => $service,
"url" => $url,
"quantity" => $quantity,
], $options);
$ch = curl_init("$baseUrl/orders");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => [
"x-api-key: $apiKey",
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode($data),
CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// Example: Order 200 upvotes
$result = createOrder("upvotes",
"https://reddit.com/r/example/comments/abc123/post",
200,
["drip_feed" => true]
);
print_r($result);Error Handling
The API uses standard HTTP status codes. Errors return a consistent JSON structure.
| Status Code | Meaning | Common Cause |
|---|---|---|
| 200 | Success | Request completed successfully |
| 400 | Bad Request | Missing or invalid parameters |
| 401 | Unauthorized | Invalid or missing API key |
| 402 | Payment Required | Insufficient account balance |
| 404 | Not Found | Resource does not exist |
| 429 | Too Many Requests | Rate limit exceeded |
| 500 | Server Error | Internal error — contact support |
{
"success": false,
"error": {
"code": "INSUFFICIENT_BALANCE",
"message": "Your account balance ($4.50) is insufficient for this order ($25.00). Please add funds.",
"status": 402
}
}{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Try again in 45 seconds.",
"status": 429,
"retry_after": 45
}
}Ready to get started?
Contact our team to get your API key and start automating your Reddit marketing.
Request API Access