Complete Guide to XCROP Boost API — Automate Your Social Growth
Overview
The XCROP Boost API lets you programmatically place and manage social media growth orders. Whether you are building a dashboard for clients, automating campaign launches, or integrating social growth into your SaaS product, the Boost API provides everything you need.
All Boost endpoints use the same authentication, credit system, and response format as the rest of the XCROP API.
Base URL
https://xcrop.io/api/v2/boostAuthentication
All requests require your API key in the Authorization header:
Authorization: Bearer xc_live_your_api_key_hereAPI Endpoints
Listing Available Services
Fetch the full service catalog to see what is available, including rates, limits, and dripfeed support.
Python
import requests import os API_KEY = os.environ["XCROP_API_KEY"] BASE_URL = "https://xcrop.io/api/v2/boost" HEADERS = { "Authorization": "Bearer " + API_KEY, "Content-Type": "application/json" } # List all services response = requests.get(BASE_URL + "/services", headers=HEADERS) services = response.json()["data"] # Filter by platform twitter_services = [s for s in services if s["platform"] == "twitter"] for svc in twitter_services: print(svc["id"] + " - " + svc["name"]) print(" Rate: $" + str(svc["rate"]) + " per 1K") print(" Min: " + str(svc["minQuantity"]) + " / Max: " + str(svc["maxQuantity"])) print(" Dripfeed: " + str(svc["dripfeed"])) print(" Refill: " + str(svc["refill"])) print()
JavaScript
const API_KEY = process.env.XCROP_API_KEY; const BASE_URL = "https://xcrop.io/api/v2/boost"; const headers = { "Authorization": "Bearer " + API_KEY, "Content-Type": "application/json" }; // List all services const response = await fetch(BASE_URL + "/services", { headers }); const { data: services } = await response.json(); // Filter by platform const twitterServices = services.filter(s => s.platform === "twitter"); for (const svc of twitterServices) { console.log(svc.id + " - " + svc.name); console.log(" Rate: $" + svc.rate + " per 1K"); console.log(" Min: " + svc.minQuantity + " / Max: " + svc.maxQuantity); console.log(" Dripfeed: " + svc.dripfeed); console.log(" Refill: " + svc.refill); }
Placing an Order
Basic Order
# Order 5,000 Twitter followers response = requests.post( BASE_URL + "/order", headers=HEADERS, json={ "service": "tw-followers-1", "link": "https://x.com/yourprofile", "quantity": 5000 } ) order = response.json()["data"] print("Order ID: " + order["order_id"]) print("Status: " + order["status"]) # "pending" or "processing" print("Credits: " + str(order["credits"])) # Credits charged print("Price: $" + str(order["price_usd"])) # USD equivalent
Order with Dripfeed
Add a dripfeed parameter to spread delivery over time:
# Order 10,000 Instagram likes with 12-hour dripfeed response = requests.post( BASE_URL + "/order", headers=HEADERS, json={ "service": "ig-likes-1", "link": "https://www.instagram.com/p/ABC123/", "quantity": 10000, "dripfeed": "12h" # Options: instant, 3h, 6h, 12h, 24h, 3d, 7d } ) order = response.json()["data"] print("Order ID: " + order["order_id"]) print("Dripfeed: " + order["dripfeed"]) print("Estimated completion: " + order["estimated_completion"])
JavaScript Order Example
// Order 1,000 TikTok likes with 6-hour dripfeed const orderResponse = await fetch(BASE_URL + "/order", { method: "POST", headers, body: JSON.stringify({ service: "tt-likes-1", link: "https://www.tiktok.com/@user/video/1234567890", quantity: 1000, dripfeed: "6h" }) }); const { data: order } = await orderResponse.json(); console.log("Order ID: " + order.order_id); console.log("Status: " + order.status); console.log("Credits charged: " + order.credits);
Order Parameters
Checking Order Status
Python
# Check order status order_id = "boost_abc123" response = requests.get( BASE_URL + "/order/" + order_id, headers=HEADERS ) order = response.json()["data"] print("Status: " + order["status"]) print("Delivered: " + str(order["delivered"]) + " / " + str(order["quantity"])) print("Remaining: " + str(order["remaining"]))
JavaScript
// Check order status const orderId = "boost_abc123"; const statusResponse = await fetch(BASE_URL + "/order/" + orderId, { headers }); const { data: status } = await statusResponse.json(); console.log("Status: " + status.status); console.log("Delivered: " + status.delivered + " / " + status.quantity); console.log("Remaining: " + status.remaining);
Order Status Values
Cancelling an Order
Cancel a pending or in-progress order. Undelivered credits are refunded automatically.
# Cancel an order response = requests.post( BASE_URL + "/order/" + order_id + "/cancel", headers=HEADERS ) result = response.json()["data"] print("Status: " + result["status"]) # "cancelled" print("Refunded credits: " + str(result["refunded_credits"]))
// Cancel an order const cancelResponse = await fetch(BASE_URL + "/order/" + orderId + "/cancel", { method: "POST", headers }); const { data: cancelResult } = await cancelResponse.json(); console.log("Refunded credits: " + cancelResult.refunded_credits);
Requesting a Refill
For services with refill guarantees, you can manually request a refill if the delivered count has dropped:
# Request a refill response = requests.post( BASE_URL + "/order/" + order_id + "/refill", headers=HEADERS ) result = response.json()["data"] print("Refill status: " + result["status"]) # "refilling" print("Refill amount: " + str(result["refill_quantity"]))
> Note: Refills are free and only available for services with a refill guarantee. The refill window is typically 30 days (365 days for YouTube views and Spotify plays).
Listing Your Orders
Fetch a paginated list of all your Boost orders:
# List recent orders response = requests.get( BASE_URL + "/orders", headers=HEADERS, params={ "limit": 20, "offset": 0, "status": "completed" # Optional filter: pending, processing, completed, cancelled } ) result = response.json() orders = result["data"] total = result["meta"]["total"] print("Total orders: " + str(total)) for o in orders: print(o["order_id"] + " | " + o["service"] + " | " + o["status"] + " | " + str(o["delivered"]) + "/" + str(o["quantity"]))
Error Handling
The Boost API returns standard HTTP status codes and error objects:
response = requests.post( BASE_URL + "/order", headers=HEADERS, json={ "service": "tw-followers-1", "link": "https://x.com/yourprofile", "quantity": 5 # Below minimum of 10 } ) if response.status_code != 200: error = response.json() print("Error: " + error["error"]["message"]) # "Quantity 5 is below minimum of 10 for service tw-followers-1"
Common Error Codes
Robust Error Handling Example
async function placeBoostOrder(service, link, quantity, dripfeed) { const response = await fetch(BASE_URL + "/order", { method: "POST", headers, body: JSON.stringify({ service, link, quantity, dripfeed }) }); const result = await response.json(); if (!response.ok) { const errorCode = result.error?.code || "unknown"; const message = result.error?.message || "Unknown error"; switch (errorCode) { case "insufficient_credits": console.error("Not enough credits. Top up at xcrop.io/dashboard/billing"); break; case "invalid_quantity": console.error("Quantity out of range: " + message); break; case "rate_limited": const retryAfter = response.headers.get("Retry-After") || 60; console.error("Rate limited. Retry after " + retryAfter + "s"); break; default: console.error("Order failed: " + message); } return null; } return result.data; } // Usage const order = await placeBoostOrder("tw-likes-1", "https://x.com/user/status/123", 500, "6h"); if (order) { console.log("Order placed: " + order.order_id); }
Full Workflow Example
Here is a complete Python script that lists services, places an order with dripfeed, and polls for completion:
import requests import time import os API_KEY = os.environ["XCROP_API_KEY"] BASE_URL = "https://xcrop.io/api/v2/boost" HEADERS = { "Authorization": "Bearer " + API_KEY, "Content-Type": "application/json" } # 1. List Twitter services response = requests.get(BASE_URL + "/services", headers=HEADERS) services = response.json()["data"] tw_services = [s for s in services if s["platform"] == "twitter"] print("Available Twitter services:") for s in tw_services: print(" " + s["id"] + ": " + s["name"] + " ($" + str(s["rate"]) + "/1K)") # 2. Place order with dripfeed response = requests.post( BASE_URL + "/order", headers=HEADERS, json={ "service": "tw-followers-1", "link": "https://x.com/yourprofile", "quantity": 1000, "dripfeed": "24h" } ) if response.status_code != 200: print("Error: " + response.json()["error"]["message"]) exit(1) order = response.json()["data"] order_id = order["order_id"] print("Order placed: " + order_id) print("Credits charged: " + str(order["credits"])) # 3. Poll for completion while True: response = requests.get(BASE_URL + "/order/" + order_id, headers=HEADERS) status = response.json()["data"] delivered = status["delivered"] total = status["quantity"] pct = int((delivered / total) * 100) print("Progress: " + str(delivered) + "/" + str(total) + " (" + str(pct) + "%) - " + status["status"]) if status["status"] in ("completed", "partial", "cancelled"): break time.sleep(300) # Check every 5 minutes print("Done! Final status: " + status["status"])
Rate Limits
Boost API shares the same rate limits as your XCROP plan:
Order placement is additionally limited to 30 orders per minute to prevent abuse.