เอกสาร API

เอกสาร API

เรียกฟีเจอร์ AI ทั้งหมดผ่านคีย์ API จ่ายตามการใช้งาน เชื่อมต่อด้วยโค้ดไม่กี่บรรทัด

การยืนยันตัวตน

คำขอ API ทั้งหมดต้องมี header Authorization

Authorization: Bearer sk-xxxxxxxxxxxxxxxx

รับคีย์ API จากหน้า „คีย์ API" ในคอนโซล คีย์เดียวต่อบัญชี รีเซ็ตในคอนโซล คีย์เดิมถูกยกเลิกทันที

สร้างงาน

POST https://nsfwrouter.xyz/api/v1/tasks/create

ส่งงาน AI ไปยังคลัสเตอร์ GPU งานเป็นแบบอะซิงโครนัส ส่งคืน ID รับผลลัพธ์ผ่าน API หรือ Webhook

พารามิเตอร์คำขอ
พารามิเตอร์ ประเภท จำเป็น คำอธิบาย
tool_idintใช่รหัสเครื่องมือ จากรายการเครื่องมือ
paramsobjectใช่พารามิเตอร์งาน ออบเจกต์ JSON ฟิลด์ขึ้นอยู่กับเครื่องมือ
webhook_urlstringไม่URL callback สำหรับแจ้งเตือนเมื่อเสร็จ
priorityintไม่ลำดับความสำคัญงาน 1-10 ค่าเริ่มต้น 5
idempotency_keystringไม่คีย์ Idempotency ป้องกันการซ้ำ
execution_optionsobjectไม่ตัวเลือกการดำเนินการ ออบเจกต์ JSON
ตัวอย่างคำขอ
curl -X POST https://nsfwrouter.xyz/api/v1/tasks/create \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "tool_id": 1,
    "params": {
      "image": "https://example.com/photo.jpg",
      "prompt": "a beautiful landscape"
    },
    "webhook_url": "https://your-server.com/webhook"
  }'
ตัวอย่างการตอบกลับ
{
  "code": 0,
  "message": "success",
  "data": {
    "task": {
      "id": 123,
      "status": 0,
      "consume_coins": 5
    },
    "message": "task_submitted"
  }
}

ตรวจสอบยอดคงเหลือก่อนเรียก ไม่เพียงพอ = ข้อผิดพลาด insufficient_coins หักเหรียญเมื่อส่งสำเร็จ

สอบถามงาน

GET https://nsfwrouter.xyz/api/v1/tasks/query

สอบถามรายละเอียดและสถานะตาม ID ระหว่างประมวลผล สถานะล่าสุดมาจากคลัสเตอร์ GPU การสอบถามซ้ำภายใน 10 วินาทีส่งคืนแคช DB

พารามิเตอร์การสอบถาม
พารามิเตอร์ ประเภท จำเป็น คำอธิบาย
idintใช่รหัสงาน
ตัวอย่างการตอบกลับ
{
  "code": 0,
  "message": "success",
  "data": {
    "task": {
      "id": 123,
      "status": 1,
      "task_output_json": [
        {
          "type": "image",
          "url": "https://cdn.example.com/outputs/abc123.png",
          "file_name": "abc123.png",
          "file_size": 1024000,
          "mime_type": "image/png",
          "width": 1024,
          "height": 1024
        }
      ],
      "consume_coins": 5,
      "created_at": 1718200000,
      "completed_at": 1718200015
    }
  }
}
ค่าสถานะงาน
status ความหมาย
0กำลังประมวลผล
1เสร็จสิ้น
-1ยกเลิกแล้ว
-2ล้มเหลว

รายการงาน

GET https://nsfwrouter.xyz/api/v1/tasks

สอบถามงานของบัญชีแบบแบ่งหน้า พร้อมตัวกรองเครื่องมือ สถานะและช่วงเวลา

พารามิเตอร์การสอบถาม
พารามิเตอร์ ประเภท จำเป็น คำอธิบาย
pageintไม่หมายเลขหน้า ค่าเริ่มต้น 1
page_sizeintไม่ขนาดหน้า ค่าเริ่มต้น 20 สูงสุด 50
tool_idintไม่กรองตามเครื่องมือ
statusintไม่กรองตามสถานะ (0/1/-1/-2)
daysintไม่ช่วงเวลาเป็นวัน ค่าเริ่มต้น 30
ตัวอย่างการตอบกลับ
{
  "code": 0,
  "message": "success",
  "data": {
    "list": [
      {
        "id": 123,
        "tool_id": 1,
        "status": 1,
        "task_output_json": [
          {
            "type": "image",
            "url": "https://cdn.example.com/outputs/abc123.png",
            "file_name": "abc123.png",
            "file_size": 1024000,
            "mime_type": "image/png",
            "width": 1024,
            "height": 1024
          }
        ],
        "error": null,
        "consume_coins": 5,
        "created_at": 1718200000,
        "completed_at": 1718200015
      },
      {
        "id": 122,
        "tool_id": 3,
        "status": 0,
        "task_output_json": [],
        "error": null,
        "consume_coins": 10,
        "created_at": 1718199000,
        "completed_at": 0
      }
    ],
    "page": 1,
    "page_size": 20
  }
}
คำอธิบายฟิลด์ task_output_json
ฟิลด์ ประเภท คำอธิบาย
typestringประเภทผลลัพธ์: image หรือ video
urlstringURL CDN สำหรับไฟล์ผลลัพธ์
file_namestringชื่อไฟล์
file_sizeintขนาดไฟล์ (ไบต์)
mime_typestringประเภท MIME เช่น image/png, video/mp4
widthintความกว้าง (พิกเซล)
heightintความสูง (พิกเซล)

ยอดคงเหลือบัญชี

GET https://nsfwrouter.xyz/api/v1/account/balance

ตรวจสอบยอดเหรียญ ยอดเติมรวมและยอดใช้รวม

ตัวอย่างการตอบกลับ
{
  "code": 0,
  "message": "success",
  "data": {
    "remain_coins": 5000,
    "total_coins": 10000,
    "used_coins": 5000
  }
}

Webhook callback

หากระบุ webhook_url จะส่ง POST เมื่องานเสร็จ ล้มเหลวหรือยกเลิก body เป็น JSON

header คำขอ callback
Content-Type: application/json
Accept: application/json
User-Agent: OpenAPI-Webhook/1.0
body คำขอ callback
{
  "event": "task.finished",
  "task": {
    "id": 123,
    "status": 1,
    "task_output_json": [
      {
        "type": "image",
        "url": "https://cdn.example.com/outputs/abc123.png",
        "file_name": "abc123.png",
        "file_size": 1024000,
        "mime_type": "image/png",
        "width": 1024,
        "height": 1024
      }
    ],
    "consume_coins": 5,
    "created_at": 1718200000,
    "completed_at": 1718200015
  }
}

เซิร์ฟเวอร์ของคุณต้องส่ง HTTP 2xx กลับ หาก non-2xx หรือหมดเวลา (10 วินาที) ระบบลองใหม่สูงสุด 5 ครั้งด้วย backoff แบบเอ็กซ์โพเนนเชียล

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

การตอบกลับข้อผิดพลาดทั้งหมดใช้รูปแบบเดียวกัน: {"code": รหัส, "message": "identifier", "data": {}}

รหัสข้อผิดพลาด message คำอธิบาย
20001api_key_requiredไม่ได้ระบุคีย์ API
20001invalid_api_keyคีย์ API ไม่ถูกต้อง
20001ip_not_allowedIP ไม่อยู่ใน whitelist
20001permission_deniedปฏิเสธการเข้าถึง
30001tool_not_foundไม่พบเครื่องมือ
30001task_not_foundไม่พบงาน
30001insufficient_coinsยอดเหรียญไม่เพียงพอ
30001task_submit_failedส่งงานล้มเหลว
30001task_query_failedสอบถามงานล้มเหลว
30001task_already_existsงานมีอยู่แล้ว (idempotency)
40001tool_id_requiredพารามิเตอร์ tool_id ขาด
40001param_errorข้อผิดพลาดพารามิเตอร์
40001webhook_url_invalidรูปแบบ webhook_url ไม่ถูกต้อง
40001params_must_be_json_object_or_arrayparams ต้องเป็นออบเจกต์หรืออาร์เรย์ JSON
40001execution_options_must_be_json_object_or_arrayexecution_options ต้องเป็นออบเจกต์หรืออาร์เรย์ JSON
ช่วงรหัสข้อผิดพลาด
ช่วง หมวดหมู่
1xxxxข้อผิดพลาดระบบ
2xxxxข้อผิดพลาดการยืนยันตัวตน
3xxxxข้อผิดพลาดตรรกะธุรกิจ
4xxxxข้อผิดพลาดพารามิเตอร์
5xxxxข้อผิดพลาดการพึ่งพาภายนอก