Skip to content
This translation is behind the English original, updated 2026-09-15. Read the English version for the current text.

GET /apiv2/pricing

เอนด์พอยต์แสดงราคาแบบครอบคลุมทั้งหมด ซึ่งจะส่งคืนราคาบริการทั้งหมดภายในการตอบกลับครั้งเดียวพร้อมช่วงเวลาแบบไดนามิก

ราคาอาจมีการเปลี่ยนแปลงระหว่างการดำเนินการคำสั่งซื้อ

ราคาที่ส่งคืนจากเอนด์พอยต์นี้อาจมีการเปลี่ยนแปลงในขณะที่คำสั่งซื้อกำลังได้รับการประมวลผล ผู้ให้บริการ Energy อาจปฏิเสธคำขอการมอบสิทธิ์ ซึ่งในกรณีดังกล่าว Netts จะเปลี่ยนเส้นทางคำสั่งซื้อไปยังผู้ให้บริการรายถัดไปที่พร้อมใช้งานโดยอัตโนมัติ Netts มุ่งมั่นไม่เพียงแค่การเสนอราคาที่คุ้มค่าที่สุดเท่านั้น แต่ยังรวมถึงการรับประกันการจัดหา Energy ที่เชื่อถือได้อีกด้วย — ดังนั้น คำสั่งซื้ออาจได้รับการดำเนินการในราคาที่สูงกว่าราคาที่เสนอไว้ เงื่อนไขนี้มีผลบังคับใช้เฉพาะกับคำสั่งซื้อตั้งแต่ 300,000 หน่วย Energy ขึ้นไปเท่านั้น

แนะนำ

นี่คือเอนด์พอยต์แสดงราคาที่แนะนำ โดยนำมาใช้แทนที่เอนด์พอยต์เดิม /apiv2/prices ซึ่งกำลังจะหยุดให้บริการ

URL ของ Endpoint

GET https://netts.io/apiv2/pricing

Headers ของคำขอ

HeaderRequiredDescriptionValues
X-API-KEYYesคีย์ API ของคุณstring
X-Real-IPYesที่อยู่ IP จากไวท์ลิสต์IP address
X-FormatNoรูปแบบการตอบกลับ (ค่าเริ่มต้น: JSON แบบเต็ม)now, compact, short, short1h, count

Query Parameters

ParameterTypeDefaultDescription
servicesstringallตัวกรองบริการที่ต้องการรวม โดยคั่นด้วยเครื่องหมายจุลภาค

บริการที่พร้อมใช้งาน

ServiceDescription
energy_1hราคาการมอบสิทธิ์ Energy แบบ 1 ชั่วโมง
energy_5mราคาการมอบสิทธิ์ Energy แบบ 5 นาที
hostอัตราการมอบสิทธิ์ Energy สำหรับ Host
amlราคาการตรวจสอบที่อยู่ AML
bandwidthราคาเช่า Bandwidth — เลือกรับเพิ่มเติม (opt-in): จะถูกส่งคืนเมื่อมีการระบุคำขออย่างชัดเจนผ่าน ?services=bandwidth เท่านั้น (ไม่ได้เป็นส่วนหนึ่งของการตอบกลับเริ่มต้น)

Examples การส่งคำขอ

cURL — การตอบกลับแบบเต็ม

bash
curl -X GET https://netts.io/apiv2/pricing \
  -H "X-API-KEY: your_api_key" \
  -H "X-Real-IP: your_whitelisted_ip"

cURL — กรองตามบริการ

bash
# ราคา Energy 1h เท่านั้น
curl -X GET "https://netts.io/apiv2/pricing?services=energy_1h" \
  -H "X-API-KEY: your_api_key" \
  -H "X-Real-IP: your_whitelisted_ip"

# Energy 1h + AML
curl -X GET "https://netts.io/apiv2/pricing?services=energy_1h,aml" \
  -H "X-API-KEY: your_api_key" \
  -H "X-Real-IP: your_whitelisted_ip"

# ราคา Host เท่านั้น
curl -X GET "https://netts.io/apiv2/pricing?services=host" \
  -H "X-API-KEY: your_api_key" \
  -H "X-Real-IP: your_whitelisted_ip"

# ราคาเช่า Bandwidth (ต้องเลือกรับเพิ่มเติม — จำเป็นต้องส่งคำขออย่างชัดเจน)
curl -X GET "https://netts.io/apiv2/pricing?services=bandwidth" \
  -H "X-API-KEY: your_api_key" \
  -H "X-Real-IP: your_whitelisted_ip"

Python

python
import requests

url = "https://netts.io/apiv2/pricing"
headers = {
    "X-API-KEY": "your_api_key",
    "X-Real-IP": "your_whitelisted_ip"
}

response = requests.get(url, headers=headers)
data = response.json()

if data.get("success"):
    print(f"API version: {data['version']}")
    print(f"TRX/USD rate: {data['data']['trx_rate_usd']}")

    services = data["data"]["services"]

    for svc_name, svc_data in services.items():
        pricing_type = svc_data.get("pricing_type")
        print(f"\n--- {svc_name} ({pricing_type}) ---")

        if pricing_type == "periodic":
            for period in svc_data["periods"]:
                marker = " <-- current" if period["is_current"] else ""
                print(f"  {period['label']}: {period['price']} {svc_data['unit']}{marker}")

        elif pricing_type == "flat_rates":
            for rate, price in svc_data["rates"].items():
                print(f"  {rate}: {price} {svc_data['unit']}")

        elif pricing_type == "provider_based":
            for name, info in svc_data["providers"].items():
                status = "available" if info["available"] else "unavailable"
                print(f"  {name}: {info['price']} {svc_data['unit']} - {status}")

Python — กรองบริการ

python
params = {"services": "energy_1h,aml"}
response = requests.get(url, headers=headers, params=params)

Response โครงสร้าง

ฟิลด์ระดับบนสุด

FieldTypeDescription
successbooleantrue สำหรับคำขอที่สำเร็จ
versionstringเวอร์ชัน API (เช่น "2.1")
timestampstringเวลาเซิร์ฟเวอร์ในรูปแบบ ISO 8601 UTC
dataobjectข้อมูลเพย์โหลดการตอบกลับ

ฟิลด์ข้อมูล Data

FieldTypeDescription
data.trx_rate_usdnumberอัตราแลกเปลี่ยน TRX/USD ปัจจุบัน
data.units_metaobjectข้อมูลการแปลงหน่วยที่ระบบคอมพิวเตอร์สามารถอ่านและประมวลผลได้
data.servicesobjectข้อมูลแมปของบริการที่ร้องขอพร้อมข้อมูลราคา

Units Meta

ช่วยให้ไคลเอนต์สามารถแปลงหน่วยระหว่างกันได้ผ่านโปรแกรม:

json
{
    "units_meta": {
        "sun": {"base": "trx", "multiplier": 1000000},
        "trx": {"base": "trx", "multiplier": 1},
        "usdt": {"base": "usdt", "multiplier": 1}
    }
}

หากต้องการแปลงจาก SUN เป็น TRX: trx_price = sun_price / units_meta.sun.multiplier

ฟิลด์ทั่วไปของบริการ

ทุกบริการจะมีฟิลด์เหล่านี้:

FieldTypeDescription
unitstringหน่วยของราคา (sun, trx, usdt)
pricing_typestringวิธีแยกวิเคราะห์บริการนี้ (ดูด้านล่าง)
descriptionstringคำอธิบายที่มนุษย์สามารถอ่านเข้าใจได้
cache_ttlintegerความถี่ในการรีเฟรชข้อมูลนี้ (วินาที)

ประเภทการกำหนดราคา

ฟิลด์ pricing_type จะระบุให้ไคลเอนต์ทราบถึงวิธีแยกวิเคราะห์ในแต่ละบริการ:

TypeStructureUsed by
periodicอาร์เรย์ periods[] พร้อมราคาตามช่วงเวลาenergy_1h, energy_5m
flat_ratesออบเจกต์ rates{} พร้อมคีย์ชื่ออัตราhost
provider_basedออบเจกต์ providers{} พร้อมข้อมูลผู้ให้บริการaml
tiered_by_amount_and_periodtiers[] ตามช่วงจำนวน โดยแต่ละระดับจะมี periods[]bandwidth

บริการ: energy_1h / energy_5m

pricing_type: periodic

FieldTypeDescription
current_periodstringสลักของช่วงเวลาที่ใช้งานอยู่ในปัจจุบัน
periods[]arrayช่วงเวลาราคาทั้งหมด (ไดนามิก โหลดมาจาก DB)
periods[].idstringตัวระบุช่วงเวลาที่ไม่ซ้ำกัน (สลัก)
periods[].labelstringชื่อช่วงเวลาที่มนุษย์สามารถอ่านเข้าใจได้
periods[].startstringเวลาเริ่มต้นของช่วงเวลา (HH:MM UTC)
periods[].endstringเวลาสิ้นสุดของช่วงเวลา (HH:MM UTC)
periods[].is_currentbooleanระบุว่าช่วงเวลานี้กำลังใช้งานอยู่หรือไม่
periods[].priceintegerราคาต่อหน่วย Energy ในหน่วย SUN
periods[].tiersarray|nullระดับราคาตามปริมาณ (ดู Tiers)

ช่วงเวลาแบบไดนามิก

จำนวนของช่วงเวลา ขอบเขตเวลา ป้ายกำกับ และราคานั้นเป็นแบบไดนามิกทั้งหมดและได้รับการจัดการจากฝั่งเซิร์ฟเวอร์ อย่าเขียนโค้ดแบบฮาร์ดโค้ดรหัสหรือจำนวนช่วงเวลา ให้ทำการวนซ้ำ (iterate) ผ่านอาร์เรย์ periods เสมอ


บริการ: host

pricing_type: flat_rates

FieldTypeDescription
rates.standard_65knumberอัตรามาตรฐานสำหรับ 65k Energy (TRX)
rates.standard_131k_initialnumberอัตรามาตรฐานสำหรับ 131k Energy สำหรับการเปิดใช้งานครั้งแรก (TRX)
rates.frequent_65knumberอัตราใช้งานบ่อยสำหรับ 65k Energy (TRX)
rates.frequent_131knumberอัตราใช้งานบ่อยสำหรับ 131k Energy (TRX)

บริการ: aml

pricing_type: provider_based

FieldTypeDescription
providersobjectข้อมูลแมปของผู้ให้บริการ AML (ไดนามิก อาจมีการเปลี่ยนแปลง)
providers[name].pricenumberราคาตรวจสอบในหน่วย USDT
providers[name].price_trxnumberราคาตรวจสอบที่แปลงเป็น TRX ตามอัตราปัจจุบัน
providers[name].availablebooleanระบุว่าผู้ให้บริการมีโควตาที่พร้อมใช้งานหรือไม่

ผู้ให้บริการแบบไดนามิก

ผู้ให้บริการ AML จะถูกโหลดมาจากฐานข้อมูล ผู้ให้บริการใหม่อาจปรากฏขึ้นหรือผู้ให้บริการเดิมอาจไม่พร้อมใช้งาน ให้ทำการวนซ้ำ (iterate) ผ่านออบเจกต์ providers เสมอ


บริการ: bandwidth

pricing_type: tiered_by_amount_and_period

การเลือกรับเพิ่มเติมและการเข้าถึง

ราคา Bandwidth จะถูกส่งคืนเฉพาะเมื่อมีการร้องขออย่างชัดเจนผ่าน ?services=bandwidth เท่านั้น — ไม่ได้ เป็นส่วนหนึ่งของการตอบกลับเริ่มต้น ตัวเอนด์พอยต์การเช่า Bandwidth นั้นพร้อมใช้งานตามคำขอ; ติดต่อฝ่ายสนับสนุนเพื่อขอสิทธิ์การเข้าถึง ดูที่ การเช่า Bandwidth

ราคาเช่า Bandwidth ขึ้นอยู่กับจำนวนของคำสั่งซื้อ (ระดับหน่วย), ระยะเวลาการเช่า (เช่น 5m / 1h), ช่วงเวลาของวัน (UTC) และวันในสัปดาห์ ราคาพื้นฐานอยู่ในหน่วย SUN ต่อหน่วย; นอกเหนือจากราคาพื้นฐาน อาจมีค่าธรรมเนียมเพิ่มเติมคงที่ (ในหน่วย TRX) ที่มีผลบังคับใช้ — ค่าทั้งหมด จะถูกส่งคืนมาในการตอบกลับ

การตอบกลับจะมีทั้งมุมมองแบบสะดวก (tiers — ราคาสำหรับช่วงเวลา/วันปัจจุบัน) และตารางข้อมูลทั้งหมด (windows + schedule — ทุกช่วงเวลาในทุกวันของสัปดาห์)

รูปแบบที่ปรับเปลี่ยนได้ — ห้ามฮาร์ดโค้ด

ตารางราคานี้ขับเคลื่อนด้วยข้อมูลอย่างสมบูรณ์และอาจเปลี่ยนแปลงได้ตลอดเวลา: จำนวนของช่วงเวลา, ป้ายกำกับ, เวลาเริ่มต้น/สิ้นสุด, ชุดของระยะเวลาการเช่า (อาจมีการเพิ่มหรือตัดรอบระยะเวลาใหม่), ระดับจำนวน, การแจกแจงตามวันในสัปดาห์ และราคา เอง ไคลเอนต์จำเป็นต้องวนซ้ำ (iterate) ผ่านอาร์เรย์ที่ส่งคืนมา (windows, schedule, tiers, periods) และจับคู่ตามค่า — ห้ามสมมติจำนวนคงที่, ป้ายกำกับคงที่, เวลาคงที่ หรือรหัสระยะเวลาคงที่โดยเด็ดขาด โค้ดที่เขียนด้วยวิธีนี้จะยังคงทำงานได้ตามปกติแม้ตารางเวลาจะเปลี่ยนแปลงไป

FieldTypeDescription
unitstringsun_per_unit
windowstringป้ายกำกับช่วงเวลาของวันปัจจุบัน (UTC)
current_day_of_weekintegerวันในสัปดาห์ปัจจุบัน, ISO 1=จันทร์ … 7=อาทิตย์ (UTC)
tiers[]arrayระดับจำนวนสำหรับช่วงเวลา/วันปัจจุบัน (เพื่อความสะดวก; รูปแบบเดียวกันกับที่อยู่ภายใน schedule)
windows[]arrayไดเรกทอรีของช่วงเวลาของวันทั้งหมด (อาจเพิ่มขึ้น/ลดลง/ขยับเปลี่ยน)
windows[].labelstringป้ายกำกับช่วงเวลา
windows[].start / .endstringเวลาเริ่มต้น/สิ้นสุดของช่วงเวลา HH:MM UTC (ช่วงเวลาอาจข้ามเที่ยงคืน กล่าวคือ start > end)
schedule[]arrayตารางข้อมูลทั้งหมด — หนึ่งรายการต่อ (วันในสัปดาห์ × ช่วงเวลา)
schedule[].day_of_weekintegerวันในสัปดาห์ตามมาตรฐาน ISO 17
schedule[].windowstringป้ายกำกับช่วงเวลา (ตรงกับ windows[].label)
schedule[].period_start / .period_endstringHH:MM UTC
schedule[].is_currentbooleantrue สำหรับเซกเมนต์ที่ใช้งานอยู่ในขณะนี้
schedule[].tiers[]arrayระดับจำนวนสำหรับเซกเมนต์นี้
tiers[].amount_minintegerขอบเขตล่างของระดับ (รวมค่านี้)
tiers[].amount_maxinteger|nullขอบเขตบนของระดับ (ไม่รวมค่านี้) null = ไม่จำกัด
tiers[].periods[]arrayราคาต่อระยะเวลาการเช่าภายในระดับ
tiers[].periods[].idstringรหัสระยะเวลาการเช่า (เช่น 5m, 1h) — อาจเปลี่ยนแปลง/เพิ่มขึ้น
tiers[].periods[].rental_secondsintegerความยาวของระยะเวลาเป็นวินาที
tiers[].periods[].priceintegerราคาต่อหน่วย Bandwidth ในหน่วย SUN
surchargesobjectค่าธรรมเนียมเพิ่มเติมคงที่ในราคาของไคลเอนต์ (TRX) — ดูด้านล่าง
limitsobjectขีดจำกัดคำสั่งซื้อ: min_units, max_units

ค่าธรรมเนียมเพิ่มเติม

FieldTypeDescription
surcharges.small_order_threshold_unitsintegerคำสั่งซื้อที่มี amount ต่ำกว่าค่านี้จะถูกเรียกเก็บค่าธรรมเนียมเพิ่มเติมสำหรับคำสั่งซื้อขนาดเล็ก
surcharges.small_order_surcharge_trxnumberเพิ่มเติม (TRX) สำหรับคำสั่งซื้อการมอบสิทธิ์ขนาดเล็ก — เพื่อชดเชยการมอบสิทธิ์และการเรียกคืนบนเชน
surcharges.trx_send_surcharge_trxnumberเพิ่มเติม (TRX) เมื่อคำสั่งซื้อได้รับการดำเนินการโดยการส่ง TRX — เพื่อชดเชยการโอน TRX

Example การตอบกลับ

json
{
    "bandwidth": {
        "unit": "sun_per_unit",
        "pricing_type": "tiered_by_amount_and_period",
        "description": "Bandwidth delegation rental",
        "cache_ttl": 30,

        "window": "<current window label>",
        "current_day_of_week": 7,
        "tiers": [
            {
                "amount_min": 400,
                "amount_max": 1000,
                "periods": [
                    {"id": "5m", "rental_seconds": 300,  "price": "<price_sun>"},
                    {"id": "1h", "rental_seconds": 3600, "price": "<price_sun>"}
                ]
            },
            {"amount_min": 1000, "amount_max": 3000, "periods": ["..."]},
            {"amount_min": 3000, "amount_max": null,  "periods": ["..."]}
        ],

        "windows": [
            {"label": "<window label>", "start": "01:00", "end": "09:00"},
            {"label": "<window label>", "start": "14:00", "end": "00:00"}
        ],
        "schedule": [
            {
                "day_of_week": 1,
                "window": "<window label>",
                "period_start": "01:00",
                "period_end": "09:00",
                "is_current": false,
                "tiers": [
                    {"amount_min": 400, "amount_max": 1000, "periods": [
                        {"id": "5m", "rental_seconds": 300, "price": "<price_sun>"},
                        {"id": "1h", "rental_seconds": 3600, "price": "<price_sun>"}
                    ]}
                ]
            }
        ],

        "surcharges": {
            "small_order_threshold_units": 1000,
            "small_order_surcharge_trx": "<trx>",
            "trx_send_surcharge_trx": "<trx>"
        },
        "limits": {"min_units": 400, "max_units": 5000}
    }
}

schedule ประกอบด้วยหนึ่งรายการสำหรับทุกการรวมกันของ (วันในสัปดาห์ × ช่วงเวลา) — วนซ้ำรายการนี้เพื่อแสดงผล ปฏิทินราคาทั้งหมด โดยจะมีเพียงหนึ่งรายการเท่านั้นที่มี is_current: true

ตรรกะของไคลเอนต์ (คำนวณราคาคำสั่งซื้อ)

ใช้ tiers สำหรับ "ราคา ณ ขณะนี้" หากต้องการค้นหาราคาสำหรับช่วงเวลาอื่น ให้เลือกรายการ schedule ที่ตรงกันตามวันในสัปดาห์ + ช่วงเวลาที่มี [period_start, period_end) ครอบคลุมเวลานั้น (โปรดจำไว้ว่าช่วงเวลาอาจข้ามเที่ยงคืนได้เมื่อ start > end) จากนั้นให้ใช้ tiers ของรายการดังกล่าว

# price for the current moment:
for tier in bandwidth.tiers:
    if tier.amount_min <= amount < (tier.amount_max or infinity):
        for p in tier.periods:
            if p.id == requested_period:        # match by value, not by index
                base_trx = (p.price / units_meta.sun.multiplier) * amount
if amount < surcharges.small_order_threshold_units:
    base_trx += surcharges.small_order_surcharge_trx      # delegation orders
# TRX-send fulfillment branch instead:
#   trx_branch_trx = base_trx_for_smallest_tier_shortest_period + surcharges.trx_send_surcharge_trx

# price for an arbitrary weekday/time: same logic, but first select the schedule[] entry
# where day_of_week matches and the time falls in [period_start, period_end).

เป็นศูนย์กลางและเป็นไดนามิก

ราคา Bandwidth, ช่วงเวลา, การแบ่งตามวันในสัปดาห์ และค่าธรรมเนียมเพิ่มเติมได้รับการจัดการจากฝั่งเซิร์ฟเวอร์ (DB) และอาจ มีการเปลี่ยนแปลง ให้ทำการวนซ้ำ (iterate) windows, schedule, tiers และ periods จากการตอบกลับและจับคู่ ตามค่าเสมอ — อย่าฮาร์ดโค้ดจำนวน ป้ายกำกับ เวลา หรือรหัสระยะเวลา การบวกราคาส่วนต่างของ SUB-user จะไม่มีผล ต่อ Bandwidth


Tiers

ในปัจจุบัน tiers จะมีค่าเป็น null สำหรับทุกช่วงเวลา เมื่อมีการเปิดใช้งานการกำหนดราคาตามปริมาณ ฟิลด์นี้จะประกอบด้วยอาร์เรย์ของออบเจกต์ tier:

json
{
    "tiers": [
        {
            "min_energy": 0,
            "max_energy": 64999,
            "price": "<price_sun>",
            "label": "standard"
        },
        {
            "min_energy": 65000,
            "max_energy": 130999,
            "price": "<price_sun>",
            "label": "65k"
        },
        {
            "min_energy": 131000,
            "max_energy": 131000,
            "price": "<price_sun>",
            "label": "131k"
        },
        {
            "min_energy": 131001,
            "max_energy": null,
            "price": "<price_sun>",
            "label": "bulk"
        }
    ]
}

สกีมาของ Tiers

FieldTypeDescription
min_energyintegerปริมาณ Energy ขั้นต่ำสำหรับระดับนี้ (รวมค่านี้)
max_energyinteger|nullปริมาณ Energy สูงสุดสำหรับระดับนี้ (รวมค่านี้) null = ไม่จำกัด
priceintegerราคาต่อหน่วย Energy ในหน่วย SUN สำหรับระดับนี้
labelstringตัวระบุระดับ

ตรรกะของไคลเอนต์

if tiers != null:
    find the tier where min_energy <= order_amount <= max_energy
    use that tier's price
else:
    use the flat price field for all order amounts

รูปแบบการตอบกลับแบบย่อ

ใช้ส่วนหัว X-Format เพื่อรับการตอบกลับเป็นข้อความแบบย่อ โดยข้อมูลเหล่านี้จะส่งคืนราคาของช่วงเวลาที่ใช้งานอยู่ในปัจจุบันจาก energy_1h

X-Format: now / compact / short

bash
curl -H "X-API-KEY: your_key" -H "X-Format: now" https://netts.io/apiv2/pricing
text
<Period>: price=<N> sun, 65k=<X.XXX> TRX (<X.XX>$), 131k=<X.XXX> TRX (<X.XX>$), 1m=<X.XXX> TRX (<X.XX>$)

X-Format: short1h

เหมือนกันแต่จะไม่มีป้ายกำกับช่วงเวลาและราคาต่อหน่วย

bash
curl -H "X-API-KEY: your_key" -H "X-Format: short1h" https://netts.io/apiv2/pricing
text
65k=<X.XXX> TRX (<X.XX>$), 131k=<X.XXX> TRX (<X.XX>$), 1m=<X.XXX> TRX (<X.XX>$)

X-Format: count

ราคาคำสั่งซื้อจำนวนมากสำหรับ 1, 2, 3, 5, 10, 20 คำสั่งซื้อ

bash
curl -H "X-API-KEY: your_key" -H "X-Format: count" https://netts.io/apiv2/pricing
text
1-<X.XXX> TRX (<X.XX>$), 2-<X.XXX> TRX (<X.XX>$), ...

สูตรการคำนวณ

TRX cost = (price_sun / units_meta.sun.multiplier) x energy_amount
USD cost = TRX_cost x trx_rate_usd

การบวกราคาส่วนต่างของ SUB-User

SUB-user จะได้รับราคาที่ใช้การบวกราคาส่วนต่างของบัญชีหลักโดยอัตโนมัติ API จะส่งคืนราคาสุดท้ายสำหรับผู้ใช้ที่ได้รับการยืนยันตัวตนเสมอ — ไม่จำเป็นต้องคำนวณในฝั่งไคลเอนต์

การตอบกลับเมื่อเกิดข้อผิดพลาด

ข้อผิดพลาดอาจมาจาก สองระดับชั้น ซึ่งมีรูปแบบที่แตกต่างกัน ไคลเอนต์ของคุณควรจัดการได้ทั้งสองรูปแบบ

ข้อผิดพลาดระดับแอปพลิเคชัน (จาก API)

ข้อผิดพลาดในระดับแอปพลิเคชันจะใช้รูปแบบมาตรฐาน success/error:

บริการไม่ถูกต้อง (400)

json
{
    "success": false,
    "error": {
        "code": 4002,
        "message": "Unknown services: invalid_service"
    }
}

ข้อผิดพลาดในการยืนยันตัวตน (401)

ส่งคืนโดยแอปพลิเคชันเมื่อไม่มีคีย์ API หรือ IP ไม่ได้อยู่ในไวท์ลิสต์:

json
{
    "detail": {
        "code": -1,
        "msg": "Invalid API key or IP not in whitelist"
    }
}

รูปแบบที่แตกต่างกัน

ข้อผิดพลาดในการยืนยันตัวตนจะใช้รูปแบบ detail ดั้งเดิมของ FastAPI ไม่ใช่โครงสร้าง success/error เนื่องจากข้อผิดพลาดถูกสร้างขึ้นก่อนที่คำขอจะไปถึงตรรกะของแอปพลิเคชัน

ไม่พบผู้ใช้ (404)

json
{
    "detail": {
        "code": -1,
        "msg": "User not found"
    }
}

ข้อผิดพลาดภายในเซิร์ฟเวอร์ (500)

json
{
    "success": false,
    "error": {
        "code": 5001,
        "message": "Failed to retrieve pricing data"
    }
}

ข้อผิดพลาดระดับเกตเวย์ (จาก Kong)

ข้อผิดพลาดเหล่านี้จะถูกส่งคืนโดย API เกตเวย์ ก่อนที่ คำขอจะไปถึงแอปพลิเคชัน โดยจะใช้รูปแบบของ Kong เอง:

เกินขีดจำกัดอัตราคำขอ (429)

json
{
    "message": "API rate limit exceeded"
}

เกตเวย์หมดเวลาเชื่อมต่อ (504)

json
{
    "message": "An invalid response was received from the upstream server"
}

ตารางอ้างอิงรหัสข้อผิดพลาด

CodeDescriptionHTTP StatusSource
-1ไม่ได้ระบุคีย์ API401App
-1คีย์ API ไม่ถูกต้อง หรือ IP ไม่อยู่ในไวท์ลิสต์401App
-1ไม่พบผู้ใช้404App
4002บริการที่ไม่รู้จักในพารามิเตอร์ ?services=400App
5000ข้อผิดพลาดภายในเซิร์ฟเวอร์500App
5001ไม่สามารถดึงข้อมูลราคาได้500App
5002ไม่มีข้อมูลราคาสำหรับรูปแบบย่อ500App
-เกินขีดจำกัดอัตราคำขอของ API429Kong

การจัดการข้อผิดพลาดของไคลเอนต์ที่แนะนำ

python
response = requests.get(url, headers=headers)
data = response.json()

if response.status_code == 200 and data.get("success"):
    # Success — process data
    services = data["data"]["services"]
elif response.status_code == 429:
    # Kong rate limit — back off and retry
    retry_after = response.headers.get("Retry-After", "60")
    time.sleep(int(retry_after))
elif "detail" in data:
    # FastAPI auth/validation error
    detail = data["detail"]
    if isinstance(detail, dict):
        print(f"Error {detail.get('code')}: {detail.get('msg')}")
    else:
        print(f"Error: {detail}")
elif "error" in data:
    # Application error
    err = data["error"]
    print(f"Error {err.get('code')}: {err.get('message')}")
else:
    print(f"Unexpected response: {response.status_code}")

การย้ายมาจาก /apiv2/prices

Aspect/apiv2/prices (เดิม)/apiv2/pricing (ใหม่)
Periods5 ช่วงคงที่ไดนามิกจาก DB
Price tiers3 ระดับแบบฮาร์ดโค้ดราคาเดี่ยว + tiers ในอนาคต
Duration variantsไม่มีให้บริการenergy_5m
AML pricesเอนด์พอยต์แยกต่างหากรวมอยู่ด้วยผ่าน ?services=aml
Host pricesปะปนอยู่ในการตอบกลับบริการ host แยกต่างหาก
Service filteringไม่มีให้บริการพารามิเตอร์ ?services=
Unit conversionไม่มีเอกสารระบุunits_meta ในการตอบกลับ
Cache infoไม่มีเอกสารระบุcache_ttl ต่อบริการ
Response format{"status": "success", ...}{"success": true, "version": "2.1", "data": {...}}

การจำกัดอัตราการเรียกใช้

ใช้ขีดจำกัดอัตราคำขอเช่นเดียวกันกับ /apiv2/prices (กำหนดค่าไว้ใน Kong เกตเวย์)

หมายเหตุ

  • ราคา Energy ทั้งหมดอยู่ในหน่วย SUN — ใช้ units_meta สำหรับการแปลงหน่วย
  • ราคา Host อยู่ในหน่วย TRX
  • ราคา AML อยู่ในหน่วย USDT โดยมีการแปลงเป็น TRX รวมอยู่ด้วย
  • เวลาทั้งหมดอยู่ในเขตเวลา UTC
  • ใช้ cache_ttl ในแต่ละบริการเพื่อทราบว่าข้อมูลรีเฟรชบ่อยเพียงใด
  • ใช้ pricing_type เพื่อกำหนดวิธีแยกวิเคราะห์ในแต่ละบริการ
  • ช่วงเวลา ผู้ให้บริการ อัตรา และค่าทั้งหมดเป็นแบบไดนามิก — ห้ามฮาร์ดโค้ดค่าเหล่านี้
  • ราคา Bandwidth เป็นแบบเลือกรับเพิ่มเติม (opt-in) (?services=bandwidth), ใช้ tiered_by_amount_and_period พร้อม surcharges และไม่อยู่ภายใต้การบวกราคาส่วนต่างของ SUB-user