Loading HstockPlus
Select an action, fill in parameters, and send a request. When logged in, your API key is loaded automatically.
Updates automatically when you change action or parameters.
curl -X POST "https://hstockplus.net/api/v2" \
--data-urlencode "key=YOUR_API_KEY" \
--data-urlencode "action=categories"https://hstockplus.net/api/v2All API requests should be sent via HTTP POST to this endpoint.
IMPORTANT — Product image URLs (imageUrl)
When Media CDN is enabled, imageUrl fields in Services List, Products List, and Subcategory Info responses use the CDN domain (https://cdn.hstockplus.org/...). Use these absolute URLs directly in your app — do not substitute hstockplus.com or hstockplus.net.
https://cdn.hstockplus.org/uploads/products/gmail.webpOptional. Target language code. Use one of the supported codes listed below. When set and not en, translatable fields are returned in that language. If a translation is not available yet, the API returns English.
Supported language codes
en(default — omit lang or use en)zhdejapt-BRurbn-BDUse these exact values for the lang parameter. Alias: jp is accepted as ja.
Supported on read actions: categories, subcategory_info, services, products, inventory ((subproduct names)), sms_projects, and sms_countries. Omit lang or use en for English.
category and subcategory filter parameters on services/products always use canonical English names, even when lang is set.
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=services" \
-d "lang=zh"Get all categories and each category's subcategories. Use these values to filter the Services List by category or subcategory.
| Parameter | Description | Required |
|---|---|---|
| key | Your API key | Yes |
| action | categories | Yes |
| lang | Optional language code. See supported codes in Optional language (lang) above. | No |
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=categories" \
-d "lang=zh"{
"categories": [
{
"category": "Instagram",
"subcategories": ["Followers", "Comments", "Likes"]
},
{
"category": "Email Accounts",
"subcategories": ["Gmail", "Outlook"]
}
]
}Get subcategory details by subcategoryId, including the parent category. Use subcategoryId from Products List rows.
| Parameter | Description | Required |
|---|---|---|
| key | Your API key | Yes |
| action | subcategory_info | Yes |
| subcategoryId | Subcategory ID from Products List | Yes |
| lang | Optional language code. See supported codes in Optional language (lang) above. | No |
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=subcategory_info" \
-d "subcategoryId=674a1f77bcf86cd799439099" \
-d "lang=zh"{
"subcategoryId": "674a1f77bcf86cd799439099",
"name": "Gmail",
"slug": "gmail",
"imageUrl": "https://cdn.hstockplus.org/uploads/subcategories/gmail.webp",
"description": "Verified Gmail accounts",
"category": {
"categoryId": "674a1f77bcf86cd799439088",
"name": "Email Accounts",
"slug": "email-accounts"
}
}List active shops with basic info, product count, and review ratings. Shop names are masked for privacy.
| Parameter | Description | Required |
|---|---|---|
| key | Your API key | Yes |
| action | shops | Yes |
| page | Page number (default 1). | No |
| limit | Items per page (default 20). | No |
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=shops"With pagination:
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=shops" \
-d "page=1" \
-d "limit=20"List marketplace products only (no SMM services). Same fields as product rows in Services List, including id (product entity id), service (friendly service number), description and imageUrl. Optional productIds returns only those products (friendly service numbers from the list and/or product entity ids, comma-separated or JSON array, max 100). Optional sort=sold orders results by paid order units descending (best sellers first).
| Parameter | Description | Required |
|---|---|---|
| key | Your API key | Yes |
| action | products | Yes |
| page | Page number (default 1). Used when limit > 0. | No |
| limit | Items per page (default 0 = return all). | No |
| category | Filter by category name (from Get Categories). Returns only products in this category. | No |
| subcategory | Filter by subcategory name (from Get Categories). Returns only products in this subcategory. | No |
| shopId | Filter by shop ID (from Shops List). Returns only that shop's products. | No |
| productIds | Optional list of product IDs (service numbers and/or entity ids). Comma-separated, JSON array, or repeated fields. Returns only those products (max 100). | No |
| isRecommended | Optional. Set true to return only products with isRecommended === true. | No |
| sort | Optional. sold = sort by paid order units descending (best sellers first). Omit to keep default cache order. | No |
| lang | Optional language code. See supported codes in Optional language (lang) above. | No |
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=products"Filter by product IDs:
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=products" \
-d "productIds=2,5,9"With pagination:
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=products" \
-d "page=1" \
-d "limit=50"Filter by category or subcategory:
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=products" \
-d "category=Accounts-Email"
# Or filter by subcategory:
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=products" \
-d "subcategory=Gmail"Best sellers in a subcategory:
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=products" \
-d "subcategory=Twitter/X" \
-d "sort=sold" \
-d "page=1" \
-d "limit=10"Recommended products only:
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=products" \
-d "isRecommended=true"Get all available services with optional pagination. Each row includes id (entity id), service (friendly service number), stock, and entityType (smm or product). Optional entityType returns only product or only smm rows. Optional category and subcategory parameters return only services in that category or subcategory (values from the Get Categories API). Optional shopId returns only products and services for that shop (use shopId from Shops List). Optional productIds returns only matching rows (friendly service numbers and/or entity ids; matches product or smm rows). Use action=products to filter products only.
| Parameter | Description | Required |
|---|---|---|
| key | Your API key | Yes |
| action | services | Yes |
| page | Page number (default 1). Used when limit > 0. | No |
| limit | Items per page (default 0 = return all). | No |
| category | Filter by category name (from Get Categories). Returns only services in this category. | No |
| subcategory | Filter by subcategory name (from Get Categories). Returns only services in this subcategory. | No |
| shopId | Filter by shop ID (from Shops List). Returns only that shop's products and SMM services. | No |
| entityType | Optional filter: product or smm. Returns only marketplace products or only SMM services. | No |
| productIds | Optional list of IDs (friendly service numbers and/or entity ids). Comma-separated, JSON array, or repeated fields. Returns matching product or smm rows. Use action=products for products only. | No |
| lang | Optional language code. See supported codes in Optional language (lang) above. | No |
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=services" \
-d "lang=zh"With pagination:
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=services" \
-d "page=1" \
-d "limit=50"Filter by category or subcategory:
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=services" \
-d "category=Instagram"
# Or filter by subcategory:
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=services" \
-d "subcategory=Followers"Filter by entity type:
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=services" \
-d "entityType=product"{
"services": [
{
"id": "507f1f77bcf86cd799439011",
"service": 1,
"name": "Instagram Followers",
"type": "Default",
"category": "Instagram",
"rate": "0.50",
"min": 100,
"max": 10000,
"refill": true,
"cancel": false,
"stock": 10000,
"entityType": "smm",
"autoDelivery": true
},
{
"id": "507f1f77bcf86cd799439012",
"service": 2,
"name": "Gmail Account - USA",
"type": "Default",
"category": "Accounts-Email",
"rate": "25.00",
"min": 1,
"max": 50,
"refill": false,
"cancel": false,
"stock": 50,
"entityType": "product",
"autoDelivery": true,
"description": "Verified Gmail account with recovery email",
"imageUrl": "https://cdn.hstockplus.org/uploads/products/gmail.webp",
"isRecommended": true,
"subcategoryId": "674a1f77bcf86cd799439099"
}
],
"total": 150,
"page": 1,
"limit": 50,
"total_pages": 3
}Each row includes id (entity id) and service (friendly service number for orders), stock, entityType (smm or product), and autoDelivery. Product rows also include description, imageUrl, isRecommended, and subcategoryId. When limit is 0 or omitted, all services are returned and page/limit equal total.
Get current stock and availability for a service by its ID (same ID as in the services list). For marketplace products, the JSON includes subproducts: an array of active variants, each with subproductId, name, and stock (display stock for that variant).
| Parameter | Description | Required |
|---|---|---|
| key | Your API key | Yes |
| action | inventory | Yes |
| service | Service ID (from services list) | Yes |
| lang | Optional language code. See supported codes in Optional language (lang) above. | No |
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=inventory" \
-d "service=23501"{
"service": 1,
"stock": 10000,
"available": true,
"rate": "0.5000",
"entityType": "smm",
"autoDelivery": true
}{
"service": 23501,
"stock": 42,
"available": true,
"rate": "25.0000",
"min": 1,
"max": 42,
"entityType": "product",
"autoDelivery": true,
"subproducts": [
{ "subproductId": "674a1f77bcf86cd799439011", "name": "1 Month", "stock": 42 },
{ "subproductId": "674a1f77bcf86cd799439012", "name": "3 Months", "stock": 0 }
]
}Response includes rate (per unit, same string format as the services list), entityType (smm or product), and autoDelivery (true = auto-delivery, false = supplier fulfills manually). For product services, min and max match the primary subproduct row in the services list; if that subproduct cannot fulfill your add order, the platform may select another subproduct and charge its unit price. The subproducts array lists every active variant with display stock; SMM inventory responses omit subproducts.
Place a standard order with link and quantity. Link: for SMM services (e.g. followers, likes) — required, use the URL to the content (e.g. Instagram post); for product orders (e.g. accounts) — optional, if empty the system uses your account email for delivery. For products with multiple options (Select Option on the website), pass subproductId (from action=inventory) to choose which option to order — otherwise the default option is used.
| Parameter | Description | Required |
|---|---|---|
| key | Your API key | Yes |
| action | add | Yes |
| service | Service ID | Yes |
| link | Link: For SMM orders (e.g. followers, likes, comments): required — URL or link to the content (e.g. Instagram post URL). For product orders (e.g. accounts): optional — delivery email or reference; if empty, the system uses your account email. | No |
| quantity | Quantity to order | Yes |
| subproductId | Products only: pick a specific option (Select Option variant) instead of the default one — use the subproductId value returned by action=inventory for this service. Optional; not used for growth/SMM services. | No |
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=add" \
-d "service=1" \
-d "link=https://instagram.com/username" \
-d "quantity=1000"
# Product with multiple options: pick the subproductId from action=inventory
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=add" \
-d "service=110469" \
-d "quantity=1" \
-d "subproductId=674a1f77bcf86cd799439012"{
"order": 23501
}Get the status of an order.
| Parameter | Description |
|---|---|
| key | Your API key |
| action | status |
| order | Order ID |
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=status" \
-d "order=23501"{
"status": "In progress",
"charge": "5.00",
"start_count": 1000,
"remains": 500,
"currency": "USD",
"autoDelivery": true
}For product orders (e.g. accounts), when the order is fully or partially delivered, the response includes an "accounts" array with the delivered account credentials (one string per account). For partial delivery, only the accounts delivered so far are returned.
autoDelivery: true if the order is fulfilled automatically (e.g. SMM, auto/inventory products); false if the supplier must fulfill manually (may take some time).
{
"status": "Completed",
"charge": "10.00",
"start_count": 5,
"remains": 0,
"currency": "USD",
"entityType": "product",
"autoDelivery": true,
"accounts": [
"user1:pass1",
"user2:pass2"
]
}Some products (for example Telegram accounts with session archives) are delivered as ZIP files instead of, or in addition to, text credentials. The response then includes a "files" array. Each file is one delivered item. Download a file with action=order_file.
{
"status": "Completed",
"charge": "12.00",
"start_count": 0,
"remains": 0,
"currency": "USD",
"entityType": "product",
"autoDelivery": false,
"files": [
{
"id": "66e6b2f0c3a1d2e4f5a6b7c8",
"name": "sessions-001.zip",
"size": 482113,
"uploaded_at": "2026-09-15T08:30:00.000Z"
}
]
}Download one delivery file (ZIP) of your order. On success the response body is the file itself (Content-Type: application/zip); on failure it is JSON with an "error" field.
| Parameter | Description |
|---|---|
| key | Your API key |
| action | order_file |
| order | Order ID |
| file | File id from the "files" array of action=status |
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=order_file" \
-d "order=23501" \
-d "file=66e6b2f0c3a1d2e4f5a6b7c8" \
-o sessions-001.zip{
"error": "File not found"
}Check the Content-Type header before saving: application/zip means the file, application/json means an error.
Cancel one or more orders (PerfectPanel-compatible batch format). Each eligible order is refunded to your balance.
All of the following must be true. Use allowcancel to check eligibility without processing a refund.
Partial delivery yields a proportional partial refund; delivered accounts are kept.
| Parameter | Description |
|---|---|
| key | Your API key |
| action | cancel |
| orders | Order IDs (separated by a comma, up to 100 IDs) |
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=cancel" \
-d "orders=23501,23502"[
{
"order": 23501,
"cancel": 1
},
{
"order": 23502,
"cancel": {
"error": "Incorrect order ID"
}
}
]Check whether one or more orders can be cancelled right now (same eligibility rules as cancel, but no refund is processed). Use before calling cancel to avoid failed requests. Supports batch order IDs (comma-separated, up to 100).
All of the following must be true. Use allowcancel to check eligibility without processing a refund.
When allowcancel is 1, the response includes refundAmount (the amount cancel would refund).
| Parameter | Description |
|---|---|
| key | Your API key |
| action | allowcancel |
| orders | Order IDs (separated by a comma, up to 100 IDs) |
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=allowcancel" \
-d "orders=23501,23502"[
{
"order": 23501,
"allowcancel": 1,
"refundAmount": 5.00
},
{
"order": 23502,
"allowcancel": 0,
"error": "Early auto refund is not available for this order",
"reason": "BEFORE_MIN_WAIT",
"eligibleAfter": "2026-06-23T12:30:00.000Z"
}
]Get your current balance.
| Parameter | Description |
|---|---|
| key | Your API key |
| action | balance |
curl -X POST https://hstockplus.net/api/v2 \
-d "key=YOUR_API_KEY" \
-d "action=balance"{
"balance": "100.00",
"currency": "USD"
}Dedicated endpoints for SMS verification services.
SMS orders have their own order IDs. Use sms_code, sms_status and sms_cancel with them; status, cancel and allowcancel are for product and SMM orders only.
Action: sms_projects
| Parameter | Description |
|---|---|
| key | Your API key |
| action | sms_projects |
| country | Optional. Filter by country ID (e.g. 'us', 'gb') |
| lang | Optional language code. See supported codes in Optional language (lang) above. |
[
{
"project_id": "65f...",
"name": "OpenAI / ChatGPT",
"price": "0.5000",
"country_id": "us",
"country_title": "United States"
}
]Action: sms_countries
| Parameter | Description |
|---|---|
| key | Your API key |
| action | sms_countries |
| lang | Optional language code. See supported codes in Optional language (lang) above. |
[
{
"country_code": "+1",
"country_name": "United States"
},
{
"country_code": "+44",
"country_name": "United Kingdom"
}
]Action: add_sms
| Parameter | Description | Required |
|---|---|---|
| key | Your API key | |
| action | add_sms | |
| project_id | Project ID from sms_projects | Yes |
| quantity | Number of numbers (1-10) | No (Default 1) |
| country | Country: ISO code (e.g. 'us') or dial code from sms_countries (e.g. '+1') | No |
| phone | Phone number to reuse | No |
{
"orders": [
{
"order": 12345,
"phone": "4055123415",
"dial_code": "+1",
"phone_full": "+14055123415",
"country": "US",
"expires_at": "2026-01-01T12:15:00.000Z",
"status": "active"
}
]
}Action: sms_code
| Parameter | Description |
|---|---|
| key | Your API key |
| action | sms_code |
| order | Order ID |
{
"status": "completed",
"code": "123456",
"sms_content": "Your verification code is 123456"
}
// OR
{
"status": "waiting",
"message": "Waiting for code"
}
// OR, once expires_at has passed without a code (call sms_cancel for a refund)
{
"status": "expired",
"message": "No code arrived before the number expired. Call action=sms_cancel for a refund."
}Action: sms_status
| Parameter | Description |
|---|---|
| key | Your API key |
| action | sms_status |
| order | Order ID |
{
"status": "code_received",
"phone": "4055123415",
"dial_code": "+1",
"phone_full": "+14055123415",
"code": "123456",
"charge": "0.5000",
"currency": "USD",
"refunded": false,
"expires_at": "2026-01-01T12:15:00.000Z"
}
// status: phone_acquired | code_received | expired | releasedAction: sms_cancel
Releases the number. If no code was received, the full charge is refunded to your balance, including after the number has expired. Orders that already received a code cannot be cancelled.
| Parameter | Description |
|---|---|
| key | Your API key |
| action | sms_cancel |
| order | Order ID from add_sms |
{
"order": 12345,
"status": "cancelled",
"refunded": true,
"refund_amount": "0.5000",
"currency": "USD"
}
// OR
{
"error": "Verification code already received, cannot release"
}Common error responses you may encounter.
{"error": "Invalid API key"}{"error": "Invalid action"}{"error": "Service ID is required"}{"error": "Insufficient balance"}{"error": "Order not found"}{"error": "Service not found"}Need help? Contact us at support@hstockplus.com
