REST API · OpenAPI 3.1

API Tier1.shop

เชื่อมต่อบริการหรือ AI agent ของคุณ: การลงทะเบียน, อัตราค่าบริการ, คำสั่งซื้อ, ลิงก์ และสถานะการชำระเงินผ่าน API เดียว ข้อมูลลูกค้าจะเข้าถึงได้ผ่านคีย์ที่สามารถเพิกถอนได้เท่านั้น

API Base URL
https://tier1.shop/wp-json/tier1-api/v1

เริ่มต้นใช้งาน

มีบัญชีนี้อยู่ในระบบแล้ว

สร้างคีย์

เปิด «API และการเชื่อมต่อ» ในแดชบอร์ดของคุณ หรือขอลิงก์สร้างคีย์ผ่านอีเมลโดยใช้ POST /api-key-requests.

ลูกค้าใหม่

ยืนยันอีเมล

เอเย่นต์เรียกใช้ POST /registration-intents. คุณต้องคลิกลิงก์ในอีเมลเพื่อยืนยันที่อยู่ของคุณ หลังจากนั้นบัญชีและคีย์จึงจะถูกสร้างขึ้น สามารถเพิ่ม Telegram ได้ในภายหลัง

คำสั่งซื้อแรก — ห้าขั้นตอน

  1. เลือกแผนGET /catalog/tariffs และ GET /balances จะแสดงราคาปัจจุบันและความพร้อมใช้งาน
  2. ยืนยันรายละเอียดโปรดตกลงเรื่องจำนวน, URL, anchor text และสกุลเงินกับตัวแทนก่อนสร้างรายการชำระเงิน
  3. รับลิงก์การชำระเงินPOST /checkout-intents จะส่งคืน URL แบบใช้ครั้งเดียว การชำระเงินจะถูกดำเนินการบนเว็บไซต์เท่านั้น
  4. ยืนยันการชำระเงินGET /checkout-intents/{id} จะแสดงสถานะและหมายเลขคำสั่งซื้อ WooCommerce
  5. เปิดลิงก์GET /orders/by-wc/{id} จะพบคำสั่งซื้อภายใน; placement_progress จะแสดงสถานะการดำเนินการ
สำคัญ: หมายเลขการสั่งซื้อจากอีเมลและ ID คำสั่งซื้อในบัญชีเป็นค่าที่แตกต่างกัน สำหรับหมายเลขอีเมลให้ใช้ /orders/by-wc/{id}, สำหรับ ID ภายใน ให้ใช้ /orders/{id}.

การอนุญาตสิทธิ์

ส่งคีย์ใน HTTPS header ห้ามใส่คีย์ใน URL, พรอมต์สาธารณะ หรือบันทึก (logs) คีย์สามารถถูกเพิกถอนได้ในบัญชี โดยข้อความเต็มจะแสดงให้เห็นเฉพาะตอนสร้างเท่านั้น

Authorization: Bearer t1c_sk_YOUR_KEY
การอนุญาตหลัก (scopes)8
profile:readสถานะโปรไฟล์และการเชื่อมต่อ
balance:readยอดคงเหลือของบริการและวอลเล็ต
orders:readดูคำสั่งซื้อ
links:readดูลิงก์
catalog:readแคตตาล็อกและอัตราค่าบริการ
orders:writeเติมข้อมูลและส่งคำสั่งซื้อจำนวนมาก
links:writeURLs, Anchors, ข้อความรอบข้าง และการส่งข้อมูล
checkout:createสร้างลิงก์การชำระเงินที่ปลอดภัย

คีย์นี้ไม่อนุญาตให้เอเจนต์หักเงินจากวอลเล็ตโดยตรง สำหรับคำขอที่มีการเปลี่ยนแปลง จะมีการสุ่ม Idempotency-Key จำนวน 8–128 ตัวอักษร หากการตอบกลับสูญหาย ให้ส่งคำขอเดิมซ้ำด้วยคีย์เดิม หากต้องการดำเนินการใหม่ ให้สร้างคีย์ใหม่

API Methods

วิธีการถูกจัดกลุ่มเป็น 10 กลุ่ม โปรดเปิดกลุ่มที่ต้องการเพื่อดูพารามิเตอร์และตัวอย่างการตอบกลับ โดยสัญญาเครื่องจักรฉบับเต็มอยู่ใน OpenAPI JSON.

23 วิธีการ

Замены URL/анкора 3

GET/links/{id}/replacementУсловия платной замены размещённой ссылки: доступность, остаток замен, текущие данные и актуальные товары. Денежных списаний нет. При нехватке купите замены через checkout и дождитесь replacement_credits_fulfilled=true.
การเข้าถึง: BearerScope: links:read

ตัวอย่างการตอบกลับ

{
    "link_id": 456,
    "eligible": true,
    "credits_available": 1,
    "pending_replacement": false,
    "purchase_offers": []
}
POST/links/{id}/replacementПосле согласия клиента сохранить новые URL/анкор. Резервирует одну замену, но ещё не отправляет её в работу. expected_* берутся точно из свежих current_*; кошелёк не списывается.
การเข้าถึง: Bearer + Idempotency-KeyScope: links:write

ขอ JSON

{
    "confirmed": true,
    "expected_url": "https://example.com/old",
    "expected_anchor": "старый анкор",
    "url": "https://example.com/new",
    "anchor": "новый анкор"
}

ตัวอย่างการตอบกลับ

{
    "saved": true,
    "link": {
        "id": 456
    },
    "wallet_was_charged": false
}
POST/links/{id}/replacement/submitОтправить только эту сохранённую замену. expected_* — уже новые данные. Проверяйте submission.submitted, submission.errors и статус; HTTP 200 сам по себе не означает принятия задачи. Это не замена донора.
การเข้าถึง: Bearer + Idempotency-KeyScope: links:write

ขอ JSON

{
    "confirmed": true,
    "expected_url": "https://example.com/new",
    "expected_anchor": "новый анкор"
}

ตัวอย่างการตอบกลับ

{
    "submission": {
        "submitted": 1,
        "errors": []
    },
    "link": {
        "id": 456,
        "status": "revision"
    }
}

การค้นพบ 2

GET/capabilitiesความสามารถของ API และลิงก์การเชื่อมต่อปัจจุบัน
การเข้าถึง: ไม่Scope: —

ตัวอย่างการตอบกลับ

{
    "name": "Tier1.shop API",
    "api_enabled": true,
    "public_registration": true
}
GET/openapi.jsonข้อกำหนด OpenAPI 3.1 ฉบับเต็ม
การเข้าถึง: ไม่Scope: —

ตัวอย่างการตอบกลับ

{
    "openapi": "3.1.0",
    "info": {
        "title": "Tier1.shop Client API"
    }
}

ลงทะเบียน 3

POST/registration-intentsเริ่มการลงทะเบียนสำหรับลูกค้าใหม่โดยต้องมีการยืนยันทางอีเมล
การเข้าถึง: ไม่Scope: —

ขอ JSON

{
    "email": "client@example.com",
    "telegram_username": "@client",
    "locale": "ru",
    "issue_api_key": true
}

ตัวอย่างการตอบกลับ

{
    "accepted": true,
    "request_id": "…",
    "status_token": "…",
    "status": "pending_email",
    "expires_in": 86400
}
GET/registration-intents/{id}?status_token={token}ตรวจสอบสถานะของการลงทะเบียนที่ระบุ
การเข้าถึง: Status tokenScope: —

ตัวอย่างการตอบกลับ

{
    "status": "pending_email|email_verified|expired",
    "email_verified": false,
    "telegram_status": "not_requested|pending_bot_message|verified"
}
POST/api-key-requestsขอลิงก์สร้างคีย์แบบใช้ครั้งเดียวสำหรับบัญชีที่มีอยู่
การเข้าถึง: ไม่Scope: —

ขอ JSON

{
    "email": "client@example.com",
    "name": "Мой агент"
}

ตัวอย่างการตอบกลับ

{
    "accepted": true,
    "next_action": "…"
}

บัญชี 2

GET/profileโปรไฟล์, การยืนยันอีเมล และช่องทาง Telegram ทั้งหมด
การเข้าถึง: BearerScope: profile:read

ตัวอย่างการตอบกลับ

{
    "account": {
        "email": "client@example.com",
        "email_verified": true,
        "telegram_username": "@client",
        "telegram_usernames": [
            "@client",
            "@manager"
        ]
    }
}
GET/balances?geo=allวอลเล็ต RUB/$ และบริการ RU/intl ที่ไม่ได้ใช้งาน
การเข้าถึง: BearerScope: balance:read

ตัวอย่างการตอบกลับ

{
    "wallets": {
        "rub": {
            "currency": "RUB",
            "amount_minor": 0
        },
        "usd": {
            "currency": "USD",
            "amount_minor": 0
        }
    },
    "service_balances": []
}

คำสั่งซื้อ 3

GET/orders?geo=all&page=1&per_page=20รายการคำสั่งซื้อในบัญชีแบบแบ่งหน้า per_page จำกัดที่ 50: ดำเนินการต่อผ่าน next_page
การเข้าถึง: BearerScope: orders:read

ตัวอย่างการตอบกลับ

{
    "orders": [
        {
            "cabinet_order_id": 123,
            "wc_order_id": 456,
            "placement_progress": {
                "completed": 2,
                "total": 3,
                "fully_placed": false
            }
        }
    ],
    "page": 1,
    "per_page": 20,
    "has_more": false,
    "next_page": null
}
GET/orders/{id}คำสั่งซื้อเดียวและลิงก์ตาม cabinet_order_id ไม่ใช่หมายเลข WooCommerce จากอีเมล
การเข้าถึง: BearerScope: orders:read

ตัวอย่างการตอบกลับ

{
    "order": {
        "cabinet_order_id": 123,
        "wc_order_id": 456,
        "geo": "ru"
    },
    "links": []
}
GET/orders/by-wc/{id}คำสั่งซื้อภายในและลิงก์ทั้งหมดตามหมายเลข WooCommerce ของลูกค้า
การเข้าถึง: BearerScope: orders:read

ตัวอย่างการตอบกลับ

{
    "wc_order_id": 456,
    "count": 2,
    "orders": [
        {
            "order": {
                "cabinet_order_id": 123
            },
            "links": []
        }
    ]
}

ลิงก์ 1

GET/links?geo=all&page=1&per_page=20ลิงก์พร้อมตัวกรอง geo, สถานะ และ link_type; ดำเนินการต่อผ่าน next_page
การเข้าถึง: BearerScope: links:read

ตัวอย่างการตอบกลับ

{
    "links": [],
    "page": 1,
    "per_page": 20,
    "total": 0,
    "has_more": false,
    "next_page": null
}

แคตตาล็อก 2

GET/catalog/tariffs?geo=ruผลิตภัณฑ์ ราคา สกุลเงิน และองค์ประกอบสล็อตที่แน่นอนในปัจจุบัน
การเข้าถึง: BearerScope: catalog:read

ตัวอย่างการตอบกลับ

{
    "geo": "ru",
    "currency": "RUB",
    "tariffs": [
        {
            "product_id": 3708,
            "name": "…",
            "price": {
                "amount_minor": 200000
            }
        }
    ]
}
GET/catalog/burzh-igamingไซต์ผู้บริจาค iGaming แบบไม่ระบุตัวตน, เมทริกซ์, ราคา และสล็อตที่ว่าง
การเข้าถึง: BearerScope: catalog:read

ตัวอย่างการตอบกลับ

{
    "donors": [],
    "count": 0,
    "price": {
        "currency": "USD",
        "amount_minor": 9400
    }
}

ฉบับร่าง 3

PATCH/links/{id}เปลี่ยน URL, anchor text, ข้อความรอบข้าง หรือกำหนดเวลา โดยไม่ต้องส่งลิงก์เพื่อดำเนินการ
การเข้าถึง: Bearer + Idempotency-KeyScope: links:write

ขอ JSON

{
    "url": "https://example.com/page",
    "anchor": "пример",
    "context_text": "Окружающий текст с анкором пример.",
    "scheduled_at": "2026-09-01T09:00:00Z"
}

ตัวอย่างการตอบกลับ

{
    "link": {
        "id": 456,
        "status": "awaiting_confirmation"
    }
}
PUT/links/{id}PATCH alias สำหรับลูกค้าที่ส่งชุดฟิลด์ที่แก้ไขได้เพียงบางส่วน
การเข้าถึง: Bearer + Idempotency-KeyScope: links:write

ขอ JSON

{
    "anchor": "новый анкор"
}

ตัวอย่างการตอบกลับ

{
    "link": {
        "id": 456,
        "status": "awaiting_confirmation"
    }
}
POST/orders/{id}/bulk-updateเติมข้อมูลแถวคำสั่งซื้อจำนวนมากโดยไม่ส่งไปยังระบบจริง
การเข้าถึง: Bearer + Idempotency-KeyScope: orders:write

ขอ JSON

{
    "links": [
        {
            "url": "https://example.com/a",
            "anchor": "ключ"
        },
        {
            "url": "https://example.com/b",
            "anchor": "другой ключ"
        }
    ]
}

ตัวอย่างการตอบกลับ

{
    "updated": 2,
    "errors": []
}

ส่ง 2

POST/links/{id}/submitส่งลิงก์ที่พร้อมหนึ่งลิงก์ไปยังการผลิตหลังจากได้รับการยืนยันจากลูกค้า
การเข้าถึง: Bearer + Idempotency-KeyScope: links:write

ขอ JSON

[]

ตัวอย่างการตอบกลับ

{
    "link": {
        "id": 456,
        "status": "in_progress"
    }
}
POST/orders/{id}/submit-allส่งแถวคำสั่งซื้อที่พร้อมทั้งหมดหลังจากได้รับการยืนยันจากลูกค้า
การเข้าถึง: Bearer + Idempotency-KeyScope: orders:write

ขอ JSON

[]

ตัวอย่างการตอบกลับ

{
    "submitted": 2,
    "skipped": 0
}

การชำระเงิน 2

POST/checkout-intentsสร้างลิงก์แบบใช้ครั้งเดียวที่ปลอดภัยไปยังหน้าชำระเงินมาตรฐาน โดยจะไม่มีการเรียกเก็บเงิน
การเข้าถึง: Bearer + Idempotency-KeyScope: checkout:create

ขอ JSON

{
    "geo": "ru",
    "items": [
        {
            "product_id": 3708,
            "quantity": 1
        }
    ],
    "links": [
        {
            "type": "yearly",
            "url": "https://example.com/page",
            "anchor": "пример"
        }
    ]
}

ตัวอย่างการตอบกลับ

{
    "intent_id": "32-символьный ID",
    "checkout_url": "https://tier1.shop/?t1c_agent_checkout=…",
    "expires_at": "…",
    "summary": {
        "currency": "RUB",
        "total_minor": 200000
    },
    "payment_preview": {
        "wallet_available_minor": 0,
        "nominal_wallet_gap_minor": 200000,
        "final_amount_at_checkout": true
    }
}
GET/checkout-intents/{id}ตรวจสอบการชำระเงินและการปรากฏของคำสั่งซื้อในบัญชีผ่าน intent_id โดยไม่ต้องเปิด one-time link ซ้ำ
การเข้าถึง: BearerScope: checkout:create

ตัวอย่างการตอบกลับ

{
    "intent_id": "…",
    "state": "paid",
    "wc_order_id": 456,
    "cabinet_order_ids": [
        123
    ],
    "fulfilment_pending": false
}

หากคำขอล้มเหลว

400 / 422กรุณาแก้ไขพารามิเตอร์ อย่าส่งคำขอที่ไม่ถูกต้องซ้ำ
401 / 403ตรวจสอบคีย์และสิทธิ์การใช้งาน; สร้างคีย์ใหม่หากจำเป็น
404ตรวจสอบหมายเลขและประเภท ID คำสั่งซื้อของบุคคลที่สามจะไม่ถูกเปิดเผย
409อัปเดตสถานะคำสั่งซื้อ หรือใช้คีย์ใหม่สำหรับการดำเนินการใหม่
429 / 5xxโปรดรอสักครู่แล้วลองใหม่อีกครั้ง สำหรับคำขอที่มีการเปลี่ยนแปลง ให้ใช้ Idempotency-Key และ JSON เดิม

รายการจะแสดงสูงสุด 50 แถวต่อหน้า หาก has_more=true, ไปที่ next_page. จำนวนเงินเบื้องต้นใน API ไม่สามารถแทนที่จำนวนเงินสุดท้ายและวิธีการชำระเงินที่มีให้ในขั้นตอนการชำระเงินได้

ต้องการ MCP แทน REST API หรือไม่?

คีย์ที่เพิกถอนได้แบบเดียวกันนี้สามารถใช้กับ MCP client พร้อม HTTP headers ได้ นอกจากนี้คุณยังสามารถเชื่อมต่อผ่าน OAuth ได้หากแอปพลิเคชันรองรับ

เปิดคำแนะนำ MCP