Want to order faster and more easily through our Telegram bot?Telegram

SDSHOP / DEVELOPERS

Reseller API documentation

The SDShop integration reference for product catalog, stock, orders and wallet operations.

REST / JSONBearer authenticationUSDT walletSource reviewed: 19 October 2026
BASE URL · TARGET ADDRESShttps://sdshopmarket.com/api/public/v1

All IDs, prices, payment information and delivery contents are illustrative. No real API keys or customer data are included.

Quick start

01 / ACCESS

Get a key in the Telegram bot: Profile → My API Key.

02 / CATALOG

List products; check price, stock and minimum quantity.

03 / WALLET

Check your USDT balance; create a top-up if needed.

04 / ORDER

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.

HTTP headers
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 / topicContract
price / list_priceprice is the effective discounted unit price; list_price is the original unit price. Currency is TRY or USDT.
stock0 = out of stock; positive = reported quantity; null = unknown, untracked or unlimited. null is not a guarantee of unlimited availability.
in_stockShared sale-eligibility result. The last single unit can be purchased. Stock is rechecked at checkout; listing is not a reservation.
min_quantity / quantitymin_quantity=1 when the optional minimum is disabled. Order quantity is an integer from 1 to 99 and must meet the product minimum.
delivery / presaledelivery is manual or auto. presale is a presale flag, not a delivery-time or inventory guarantee.
total / total_walletCreation uses total; read responses use total_wallet. Wallet currency is USDT; TRY prices are converted using the server exchange rate.
delivered_contentA string or null. Do not interpret newlines as separate inventory units or orders; preserve the content verbatim.
IDs & timestampsIDs 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.

GET

API descriptor

JSON service descriptor. On sdshopmarket.com, send your reseller key as with all other endpoints.

No body or query parameters.

Request
curl --request GET \
  --url "https://sdshopmarket.com/api/public/v1" \
  --header "Authorization: Bearer $SDS_API_KEY"
Example response · 200
{
  "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"
  }
}
GET/products

List 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.

Request
curl --request GET \
  --url "https://sdshopmarket.com/api/public/v1/products" \
  --header "Authorization: Bearer $SDS_API_KEY"
Example response · 200
{
  "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"
    }
  ]
}
GET/products/{id}

Get a product

Returns pricing and stock for one published active product.

FieldType / requirementDescription
idUUID · pathProduct ID.
Request
curl --request GET \
  --url "https://sdshopmarket.com/api/public/v1/products/11111111-1111-4111-8111-111111111111" \
  --header "Authorization: Bearer $SDS_API_KEY"
Example response · 200
{
  "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"
  }
}
GET/balance

Wallet balance

Returns the key owner’s USDT wallet balance.

No body or query parameters.

Request
curl --request GET \
  --url "https://sdshopmarket.com/api/public/v1/balance" \
  --header "Authorization: Bearer $SDS_API_KEY"
Example response · 200
{
  "balance": 125.5,
  "currency": "USDT"
}
POST/orders

Create an order

Charges the user’s USDT wallet and attempts automatic delivery. Poll the order detail if delivery is not complete.

FieldType / requirementDescription
product_idUUID · requiredPublished product eligible for sale.
quantityinteger · optional1–99; default 1. Must meet the product minimum.
external_refstring · optional1–128 characters. Use a stable, unique reference per operation for the same user.
Request
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"}'
Example response · 201
{
  "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"
}
GET/orders

List orders

Returns the key owner’s latest 50 orders, newest first. No pagination.

No body or query parameters.

Request
curl --request GET \
  --url "https://sdshopmarket.com/api/public/v1/orders" \
  --header "Authorization: Bearer $SDS_API_KEY"
Example response · 200
{
  "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"
    }
  ]
}
GET/orders/{id}

Get an order

Returns only orders owned by the key owner. Another user’s order also returns 404.

FieldType / requirementDescription
idUUID · pathorder_id from order creation.
Request
curl --request GET \
  --url "https://sdshopmarket.com/api/public/v1/orders/22222222-2222-4222-8222-222222222222" \
  --header "Authorization: Bearer $SDS_API_KEY"
Example response · 200
{
  "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"
  }
}
GET/payment-methods

Payment methods

Returns active payment methods ordered by sort_order.

No body or query parameters.

Request
curl --request GET \
  --url "https://sdshopmarket.com/api/public/v1/payment-methods" \
  --header "Authorization: Bearer $SDS_API_KEY"
Example response · 200
{
  "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
    }
  ]
}
POST/topups

Create a top-up

Creates a payment request; it does not credit the wallet yet. Amount is expressed in USDT.

FieldType / requirementDescription
amountnumber · required1–100000 USDT; rounded to two decimals.
payment_method_idUUID · requiredAn active payment method ID.
Request
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"}'
Example response · 201
{
  "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."
}
GET/topups

List top-ups

Lists the key owner’s latest 50 top-up requests, newest first.

No body or query parameters.

Request
curl --request GET \
  --url "https://sdshopmarket.com/api/public/v1/topups" \
  --header "Authorization: Bearer $SDS_API_KEY"
Example response · 200
{
  "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
    }
  ]
}
GET/topups/{id}

Get a top-up

Returns the payment request status as a direct object, without a topup wrapper.

FieldType / requirementDescription
idUUID · pathtopup_id from creation.
Request
curl --request GET \
  --url "https://sdshopmarket.com/api/public/v1/topups/33333333-3333-4333-8333-333333333333" \
  --header "Authorization: Bearer $SDS_API_KEY"
Example response · 200
{
  "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
}
POST/topups/{id}

Report payment

Submits a payment reference and moves the request to payment_review. Credit is applied after admin approval.

FieldType / requirementDescription
idUUID · pathTop-up ID.
payment_referencestring · required3–500 characters. For bank transfer use the sender’s full name. Leading/trailing whitespace is trimmed.
Request
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ı"}'
Example response · 200
{
  "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

  1. Read product detail and balance. Persist your own reference for each purchase.
  2. Send POST /orders. Persist order_id from 201; for a 200 duplicate continue with its existing order_id.
  3. Creation reports delivered or delivery_pending. Read GET /orders/{id} for the current authoritative state.
  4. 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.
  5. 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.

402 · application/json
{
  "error": {
    "code": "insufficient_balance",
    "message": "Yetersiz bakiye.",
    "balance": 5,
    "required": 10,
    "currency": "USDT"
  }
}
HTTPcodeMeaning
400invalid_json / invalid_inputInvalid JSON or fields.
400below_min_quantityQuantity is below product minimum; see error.min_quantity.
400invalid_amountTop-up amount is outside the allowed range.
401invalid_api_keyMissing, invalid or revoked key.
402insufficient_balanceInsufficient USDT balance; balance, required, currency are in error.
402order_failedOrder creation failed or balance is insufficient.
404product_not_found / order_not_foundProduct/order does not exist or is inaccessible.
404topup_not_found / payment_method_not_foundTop-up/method does not exist or is inaccessible.
409out_of_stock / insufficient_stockOut of stock or not enough stock.
409topup_closedThe top-up no longer accepts payment reports.
429rate_limitedPer-key, per-process limit of 60 requests/minute.
500topup_failedTop-up could not be created.
503stock_unavailable / fx_unavailableStock 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.

Can I help? 🐾