---
sidebar:
  order: 1
title: "HTTP API"
description: "ยืนยันตัวตน ค้นหาเครื่องมือ และยืนยันการเปลี่ยนแปลงผ่าน HTTP API ที่มีอยู่"
---

ส่งคำขอ API ของผลิตภัณฑ์ไปยัง origin ของ Influence ที่เชื่อถือได้ เช่น `https://influence.so` โดเมนเอกสารไม่รับคำขอ API ของผลิตภัณฑ์ ใช้เส้นทางด้านล่างตรงตามที่ระบุโดยไม่มีพารามิเตอร์คิวรี

## สร้างคีย์ API พร้อมสิทธิ์ที่จำเป็น

ใน[การตั้งค่า Influence](https://influence.so/sign-in?next=%2Fapp%2Fsettings%2Faccount%23settings-developer) เปิด แอปและระบบอัตโนมัติ → คีย์ API เลือกสิทธิ์ที่จำเป็นและวันหมดอายุ คีย์จะแสดงเพียงครั้งเดียว ให้เก็บในที่เก็บข้อมูลลับเป็น `PUBLISH_API_TOKEN` ส่งผ่าน `Authorization: Bearer …` เท่านั้น อย่าใส่ใน URL เนื้อหาคำขอ หรือแชต เพิกถอนเมื่อไม่ใช้งานแล้ว

## ค้นหาเครื่องมือและอ่านข้อมูล

ตั้งค่า `PUBLISH_API_URL` เป็น origin ที่เชื่อถือได้ ตัวอย่างนี้สมมติว่าโปรเซสมี `PUBLISH_API_TOKEN` แล้ว `accountList` ต้องมีสิทธิ์ `integrations:read` ให้ใช้ฟิลด์แบ่งหน้าเพื่ออ่านหน้าถัดไป

```sh
export PUBLISH_API_URL="https://influence.so"
curl "$PUBLISH_API_URL/api/v1/tools" \
  -H "Authorization: Bearer $PUBLISH_API_TOKEN"

curl "$PUBLISH_API_URL/api/v1/tools/accountList/call" \
  -H "Authorization: Bearer $PUBLISH_API_TOKEN" \
  -H 'Content-Type: application/json' \
  --data '{"input":{}}'
```

## เส้นทางคำขอ

| เมธอด | เส้นทาง | หน้าที่ |
| --- | --- | --- |
| `GET` | `/api/v1/tools` | แสดงเครื่องมือที่ข้อมูลรับรองนี้ใช้ได้ |
| `POST` | `/api/v1/tools/{tool}/call` | เรียกเครื่องมือแบบอ่านอย่างเดียว |
| `POST` | `/api/v1/tools/{tool}/prepare` | เตรียมการเปลี่ยนแปลงตามข้อมูลที่ระบุโดยยังไม่ดำเนินการ |
| `POST` | `/api/v1/tools/{tool}/confirm` | ยืนยันการเปลี่ยนแปลงที่เตรียมไว้ |
| `POST` | `/api/v1/media/import` | ยืนยันการอัปโหลดรูปภาพไบนารีขนาดเล็กที่เตรียมไว้ |

คำขอ JSON ของเครื่องมือใช้ `Content-Type: application/json` และเนื้อหาที่มีเพียง `input`: `{"input":{…}}` ดูสคีมาอินพุตของแต่ละเครื่องมือจากรายการเครื่องมือปัจจุบัน

## เตรียมและยืนยันการเปลี่ยนแปลง

1. ส่งอินพุตของการดำเนินการที่ตรงตามต้องการไปยัง `/prepare` คำตอบที่สำเร็จมี `status: "confirmation_required"`, `confirmationCapability`, `expiresAt`, `inputDigest` และอาจมี `summary`
2. ก่อนหมดอายุ ส่งอินพุตเดิมไปยัง `/confirm` ใส่ค่าการยืนยันที่ได้รับใน `X-Publish-Confirmation` และคีย์ใหม่ที่ไคลเอนต์สร้างใน `Idempotency-Key`
3. เก็บอินพุต ค่าการยืนยัน และคีย์ไว้ด้วยกัน หากการยืนยันขาดช่วงหรือผลยังไม่แน่นอน ให้ใช้ทั้งสามค่าเดิมสำหรับคำขอเดิม อย่าเตรียมการดำเนินการใหม่แทนเพื่อกู้คืนผลที่ยังไม่แน่นอน

คีย์ idempotency มี 16–200 ตัวอักษรจาก `A–Z`, `a–z`, `0–9`, `.`, `_`, `:` และ `-` ค่าการยืนยันเป็นข้อมูลลับที่ไม่ต้องตีความ การส่งคีย์ไปยัง `/call` หรือ `/prepare` ไม่ได้จองการเปลี่ยนแปลงที่ยืนยันแล้ว

การยืนยันคำขอแยกจากการอนุมัติให้เผยแพร่ เมื่อต้องการเผยแพร่หรือเปลี่ยนเวลา ให้สร้างและแสดงข้อมูลตรวจทานล่าสุดอย่างครบถ้วน ข้อความต้องได้รับการอนุมัติใหม่หลังแสดงข้อมูลนั้น รูปภาพและวิดีโอต้องให้บุคคลตรวจดูและอนุมัติผ่านหน้าตรวจทานที่รองรับหรือหลังลงชื่อเข้าใช้ Influence การเตรียมข้อมูลตรวจทานยังไม่เผยแพร่สิ่งใด อ่านผลที่บันทึกไว้ก่อนดำเนินการต่อ สถานะ `needs_review` ต้องตรวจสอบว่าเกิดอะไรขึ้น ไม่ใช่ส่งซ้ำ

## จัดการข้อผิดพลาดและผลที่ยังไม่แน่นอน

ตรวจสอบทั้งสถานะ HTTP และเนื้อหาคำตอบ เมื่อสำเร็จจะได้ `{"ok":true,"toolName":"…","output":{…}}` เมื่อเครื่องมือล้มเหลวจะได้ `{"ok":false,"toolName":"…","error":{"code":"…","message":"…","retryable":false}}` ซึ่งอาจมากับ HTTP 200 ข้อผิดพลาดระดับการรับส่งใช้ `{"error":{"code":"…","message":"…","retryable":false}}` โดยไม่มี `ok` หรือ `toolName`

401 หมายถึงต้องยืนยันตัวตน ให้ตรวจสอบการหมดอายุหรือการเพิกถอน หากขาดสิทธิ์ต้องได้รับสิทธิ์ที่เหมาะสม ไม่ใช่ส่งคำขอซ้ำ 503 หมายถึง API ไม่พร้อมใช้ในสภาพแวดล้อมนั้น ปฏิบัติตามข้อผิดพลาดและคำแนะนำการลองใหม่ การหมดเวลารอไม่ได้พิสูจน์ว่าการเปลี่ยนแปลงล้มเหลว ให้เก็บข้อมูลยืนยันและอ่านสถานะก่อนส่งซ้ำ การรับคำขอ การตั้งเวลา และการเผยแพร่เป็นคนละผลลัพธ์

## อัปโหลดสื่อ

สำหรับไฟล์ในเครื่อง ควรใช้ `uploadMedia` ของ SDK หรือ `media:upload` ของ CLI ทั้งสองใช้เครื่องมืออัปโหลดแบบแบ่งส่วนเดียวกันและคง `clientKey` เดิมสำหรับการลองใหม่ แนบได้เฉพาะผลลัพธ์ที่พร้อมใช้และมี `assetId` สำหรับการอ้างอิงไฟล์ HTTPS ที่ได้รับอนุญาตให้ใช้ `mediaImport` เส้นทางไฟล์ในเครื่องไม่ใช่ URL ดาวน์โหลด

`POST /api/v1/media/import` รองรับการรับส่งรูปภาพขนาดเล็กแบบเดิม ให้เตรียม `mediaImport` ด้วยตัวอธิบายการอัปโหลดที่ตรงกัน แล้วส่งไบต์เดิมเป็น `application/octet-stream` แนบ `X-Publish-Confirmation`, `Idempotency-Key` และ `X-Publish-Upload` ที่มีตัวอธิบาย JSON เข้ารหัสสำหรับ URI ไบต์ต้องตรงกับขนาดและ SHA-256 จำกัดไว้ที่ 3 MiB สำหรับไฟล์ที่ใหญ่กว่าและรองรับให้ใช้ฟังก์ชันช่วยอัปโหลด การอัปโหลดไม่เคยเป็นการอนุมัติให้เผยแพร่

[เปิดเอกสารอ้างอิง API](/th/api-reference) หรือ[ดาวน์โหลดข้อกำหนด OpenAPI](/specs/influence.openapi.json)
