SDSHOP / DEVELOPERS
Reseller API documentation
The SDShop integration reference for product catalog, stock, orders and wallet operations.
https://sdshopmarket.com/api/public/v1All IDs, prices, payment information and delivery contents are illustrative. No real API keys or customer data are included.
Quick start
Get a key in the Telegram bot: Profile → My API Key.
List products; check price, stock and minimum quantity.
Check your USDT balance; create a top-up if needed.
Create an order with a stable external_ref and track delivery.
Authentication & security
Requests to sdshopmarket.com require Authorization: Bearer sds_…. Keys identify their owner’s Telegram wallet and orders; they do not grant admin access.
Authorization: Bearer <YOUR_API_KEY>
Content-Type: application/json- Generated keys have sds_ followed by 48 hex characters; only a SHA-256 hash is stored. Obtain the full key at creation time.
- Store the key in a server environment variable. Never put it in a browser, HTML, query string or public repository.
- Revoked keys return 401. Update your integration after key rotation.
- Current rate limiting is 60 requests / 60 seconds per key in process memory, not a durable distributed quota. No Retry-After or X-RateLimit headers are sent. Wait at least 60 seconds after 429.
- Keep your API key on your server. Although this domain accepts cross-origin requests, never expose a private key in browser code.
Data models & sale rules
| Field / topic | Contract |
|---|---|
price / list_price | price is the effective discounted unit price; list_price is the original unit price. Currency is TRY or USDT. |
stock | 0 = out of stock; positive = reported quantity; null = unknown, untracked or unlimited. null is not a guarantee of unlimited availability. |
in_stock | Shared sale-eligibility result. The last single unit can be purchased. Stock is rechecked at checkout; listing is not a reservation. |
min_quantity / quantity | min_quantity=1 when the optional minimum is disabled. Order quantity is an integer from 1 to 99 and must meet the product minimum. |
delivery / presale | delivery is manual or auto. presale is a presale flag, not a delivery-time or inventory guarantee. |
total / total_wallet | Creation uses total; read responses use total_wallet. Wallet currency is USDT; TRY prices are converted using the server exchange rate. |
delivered_content | A string or null. Do not interpret newlines as separate inventory units or orders; preserve the content verbatim. |
| IDs & timestamps | IDs are UUIDs; examples show UTC ISO 8601 timestamps. Optional values can be null; tolerate future additional fields. |
Catalog fields are not translated per key owner language; the API returns stored name/description directly. Categories, admin notes, supplier keys and internal links are not exposed.
API descriptor
JSON service descriptor. On sdshopmarket.com, send your reseller key as with all other endpoints.
No body or query parameters.
curl --request GET \
--url "https://sdshopmarket.com/api/public/v1" \
--header "Authorization: Bearer $SDS_API_KEY"{
"name": "SDShop Bayi API",
"version": "1.1.0",
"auth": "Authorization: Bearer sds_...",
"endpoints": {
"GET /api/public/v1/products": "Satıştaki ürünler"
},
"topup_flow": [
"Ödeme yöntemini seçin, talep oluşturun, ödeme bildirin, onayı izleyin."
],
"errors": {
"401": "invalid_api_key"
}
}/productsList products
Returns up to 200 published products with active status. Ordered by sort_order ascending, then creation time descending. No pagination or category filter.
No body or query parameters.
curl --request GET \
--url "https://sdshopmarket.com/api/public/v1/products" \
--header "Authorization: Bearer $SDS_API_KEY"{
"products": [
{
"id": "11111111-1111-4111-8111-111111111111",
"name": "Örnek dijital ürün",
"short_description": "Örnek kısa açıklama",
"description": "Örnek ürün açıklaması",
"price": 10,
"list_price": 12,
"currency": "USDT",
"stock": 8,
"in_stock": true,
"min_quantity": 1,
"delivery": "auto",
"presale": false,
"image_url": null,
"updated_at": "2026-10-19T12:00:00Z"
}
]
}/products/{id}Get a product
Returns pricing and stock for one published active product.
| Field | Type / requirement | Description |
|---|---|---|
id | UUID · path | Product ID. |
curl --request GET \
--url "https://sdshopmarket.com/api/public/v1/products/11111111-1111-4111-8111-111111111111" \
--header "Authorization: Bearer $SDS_API_KEY"{
"product": {
"id": "11111111-1111-4111-8111-111111111111",
"name": "Örnek dijital ürün",
"short_description": "Örnek kısa açıklama",
"description": "Örnek ürün açıklaması",
"price": 10,
"list_price": 12,
"currency": "USDT",
"stock": 8,
"in_stock": true,
"min_quantity": 1,
"delivery": "auto",
"presale": false,
"image_url": null,
"updated_at": "2026-10-19T12:00:00Z"
}
}/balanceWallet balance
Returns the key owner’s USDT wallet balance.
No body or query parameters.
curl --request GET \
--url "https://sdshopmarket.com/api/public/v1/balance" \
--header "Authorization: Bearer $SDS_API_KEY"{
"balance": 125.5,
"currency": "USDT"
}/ordersCreate an order
Charges the user’s USDT wallet and attempts automatic delivery. Poll the order detail if delivery is not complete.
| Field | Type / requirement | Description |
|---|---|---|
product_id | UUID · required | Published product eligible for sale. |
quantity | integer · optional | 1–99; default 1. Must meet the product minimum. |
external_ref | string · optional | 1–128 characters. Use a stable, unique reference per operation for the same user. |
curl --request POST \
--url "https://sdshopmarket.com/api/public/v1/orders" \
--header "Authorization: Bearer $SDS_API_KEY" \
--header "Content-Type: application/json" \
--data '{"product_id": "11111111-1111-4111-8111-111111111111", "quantity": 1, "external_ref": "website-order-1001"}'{
"order_id": "22222222-2222-4222-8222-222222222222",
"order_number": "SD-2026-000001",
"status": "delivered",
"quantity": 1,
"total": 10,
"currency": "USDT",
"product_price": 10,
"product_currency": "USDT",
"delivered_content": "ÖRNEK TESLİMAT — gerçek müşteri verisi değildir"
}/ordersList orders
Returns the key owner’s latest 50 orders, newest first. No pagination.
No body or query parameters.
curl --request GET \
--url "https://sdshopmarket.com/api/public/v1/orders" \
--header "Authorization: Bearer $SDS_API_KEY"{
"orders": [
{
"order_id": "22222222-2222-4222-8222-222222222222",
"order_number": "SD-2026-000001",
"status": "delivered",
"product_id": "11111111-1111-4111-8111-111111111111",
"product_name": "Örnek dijital ürün",
"quantity": 1,
"total_wallet": 10,
"currency": "USDT",
"created_at": "2026-10-19T12:00:00Z",
"delivered_at": "2026-10-19T12:00:02Z",
"delivered_content": "ÖRNEK TESLİMAT — gerçek müşteri verisi değildir"
}
]
}/orders/{id}Get an order
Returns only orders owned by the key owner. Another user’s order also returns 404.
| Field | Type / requirement | Description |
|---|---|---|
id | UUID · path | order_id from order creation. |
curl --request GET \
--url "https://sdshopmarket.com/api/public/v1/orders/22222222-2222-4222-8222-222222222222" \
--header "Authorization: Bearer $SDS_API_KEY"{
"order": {
"order_id": "22222222-2222-4222-8222-222222222222",
"order_number": "SD-2026-000001",
"status": "delivered",
"product_id": "11111111-1111-4111-8111-111111111111",
"product_name": "Örnek dijital ürün",
"quantity": 1,
"total_wallet": 10,
"currency": "USDT",
"created_at": "2026-10-19T12:00:00Z",
"delivered_at": "2026-10-19T12:00:02Z",
"delivered_content": "ÖRNEK TESLİMAT — gerçek müşteri verisi değildir"
}
}/payment-methodsPayment methods
Returns active payment methods ordered by sort_order.
No body or query parameters.
curl --request GET \
--url "https://sdshopmarket.com/api/public/v1/payment-methods" \
--header "Authorization: Bearer $SDS_API_KEY"{
"payment_methods": [
{
"id": "44444444-4444-4444-8444-444444444444",
"label": "Banka Havalesi",
"kind": "iban",
"network": null,
"iban_name": "Örnek hesap sahibi",
"wallet_address": null,
"details": "Gerçek ödeme bilgisi /payment-methods yanıtından alınır.",
"qr_url": null
}
]
}/topupsCreate a top-up
Creates a payment request; it does not credit the wallet yet. Amount is expressed in USDT.
| Field | Type / requirement | Description |
|---|---|---|
amount | number · required | 1–100000 USDT; rounded to two decimals. |
payment_method_id | UUID · required | An active payment method ID. |
curl --request POST \
--url "https://sdshopmarket.com/api/public/v1/topups" \
--header "Authorization: Bearer $SDS_API_KEY" \
--header "Content-Type: application/json" \
--data '{"amount": 50, "payment_method_id": "44444444-4444-4444-8444-444444444444"}'{
"topup_id": "33333333-3333-4333-8333-333333333333",
"amount": 50,
"currency": "USDT",
"status": "pending_payment",
"payment_method": {
"id": "44444444-4444-4444-8444-444444444444",
"label": "Banka Havalesi",
"kind": "iban",
"network": null,
"iban_name": "Örnek hesap sahibi",
"wallet_address": null,
"details": "Gerçek ödeme bilgisi /payment-methods yanıtından alınır.",
"qr_url": null
},
"next_step": "Ödeme sonrası POST /topups/{id} ile referans bildirin."
}/topupsList top-ups
Lists the key owner’s latest 50 top-up requests, newest first.
No body or query parameters.
curl --request GET \
--url "https://sdshopmarket.com/api/public/v1/topups" \
--header "Authorization: Bearer $SDS_API_KEY"{
"topups": [
{
"topup_id": "33333333-3333-4333-8333-333333333333",
"amount": 50,
"currency": "USDT",
"status": "pending_payment",
"payment_method": {
"id": "44444444-4444-4444-8444-444444444444",
"label": "Banka Havalesi",
"kind": "iban",
"network": null,
"iban_name": "Örnek hesap sahibi",
"wallet_address": null,
"details": "Gerçek ödeme bilgisi /payment-methods yanıtından alınır.",
"qr_url": null
},
"payment_reference": null,
"created_at": "2026-10-19T12:00:00Z",
"approved_at": null
}
]
}/topups/{id}Get a top-up
Returns the payment request status as a direct object, without a topup wrapper.
| Field | Type / requirement | Description |
|---|---|---|
id | UUID · path | topup_id from creation. |
curl --request GET \
--url "https://sdshopmarket.com/api/public/v1/topups/33333333-3333-4333-8333-333333333333" \
--header "Authorization: Bearer $SDS_API_KEY"{
"topup_id": "33333333-3333-4333-8333-333333333333",
"amount": 50,
"currency": "USDT",
"status": "pending_payment",
"payment_method": {
"id": "44444444-4444-4444-8444-444444444444",
"label": "Banka Havalesi",
"kind": "iban",
"network": null,
"iban_name": "Örnek hesap sahibi",
"wallet_address": null,
"details": "Gerçek ödeme bilgisi /payment-methods yanıtından alınır.",
"qr_url": null
},
"payment_reference": null,
"created_at": "2026-10-19T12:00:00Z",
"approved_at": null
}/topups/{id}Report payment
Submits a payment reference and moves the request to payment_review. Credit is applied after admin approval.
| Field | Type / requirement | Description |
|---|---|---|
id | UUID · path | Top-up ID. |
payment_reference | string · required | 3–500 characters. For bank transfer use the sender’s full name. Leading/trailing whitespace is trimmed. |
curl --request POST \
--url "https://sdshopmarket.com/api/public/v1/topups/33333333-3333-4333-8333-333333333333" \
--header "Authorization: Bearer $SDS_API_KEY" \
--header "Content-Type: application/json" \
--data '{"payment_reference": "Örnek Gönderen Adı"}'{
"topup_id": "33333333-3333-4333-8333-333333333333",
"status": "payment_review",
"message": "Ödeme bildiriminiz alındı. Onaylandığında bakiye otomatik yüklenecek."
}Flows & retries
Orders & delivery
- Read product detail and balance. Persist your own reference for each purchase.
- Send POST /orders. Persist order_id from 201; for a 200 duplicate continue with its existing order_id.
- Creation reports delivered or delivery_pending. Read GET /orders/{id} for the current authoritative state.
- Poll at bounded intervals (for example 15–30 seconds) while paid, delivering or delivery_pending; deliver contents once after delivered. cancelled/refunded can be treated as terminal unsuccessful states; preserve other statuses.
- If the connection fails, retry carefully with the same external_ref. This documentation does not independently guarantee exactly-once handling for concurrent calls; use application-level locking and records.
Wallet top-up
GET /payment-methods → POST /topups → POST /topups/{id} → GET /topups/{id} → GET /balance
Statuses: pending_payment → payment_review → approved. Requests may close as rejected or cancelled. Reporting payment is not approval; wait for approved and read the balance before using the credit.
Error reference
Expected business errors use the JSON format below. Unhandled infrastructure failures can return a different body; handle HTTP status and non-JSON responses too.
{
"error": {
"code": "insufficient_balance",
"message": "Yetersiz bakiye.",
"balance": 5,
"required": 10,
"currency": "USDT"
}
}| HTTP | code | Meaning |
|---|---|---|
| 400 | invalid_json / invalid_input | Invalid JSON or fields. |
| 400 | below_min_quantity | Quantity is below product minimum; see error.min_quantity. |
| 400 | invalid_amount | Top-up amount is outside the allowed range. |
| 401 | invalid_api_key | Missing, invalid or revoked key. |
| 402 | insufficient_balance | Insufficient USDT balance; balance, required, currency are in error. |
| 402 | order_failed | Order creation failed or balance is insufficient. |
| 404 | product_not_found / order_not_found | Product/order does not exist or is inaccessible. |
| 404 | topup_not_found / payment_method_not_found | Top-up/method does not exist or is inaccessible. |
| 409 | out_of_stock / insufficient_stock | Out of stock or not enough stock. |
| 409 | topup_closed | The top-up no longer accepts payment reports. |
| 429 | rate_limited | Per-key, per-process limit of 60 requests/minute. |
| 500 | topup_failed | Top-up could not be created. |
| 503 | stock_unavailable / fx_unavailable | Stock check or exchange rate is temporarily unavailable. |
Do not automatically retry 400/401/402/404/409 with unchanged input. Apply delayed backoff for 429/503; preserve external_ref for order POST retries. After a 500 top-up failure check the request list before retrying.
