สร้างลิงก์พร้อมกฎการกำหนดเส้นทาง จัดการแท็กและโดเมนของคุณเอง และอ่านสถิติการคลิกผ่าน REST API ที่มีสเปก OpenAPI 3.1 หรือ TypeScript SDK ที่มีชนิดข้อมูลและไม่มี dependency
สร้างคีย์ได้ที่ โปรไฟล์ → API
อัปเดตล่าสุด: พฤศจิกายน 2026
npm install revolink
ใช้ได้กับ Node.js 18+ และทุกรันไทม์ที่มี fetch แบบ global ไม่มี dependency และมีชนิดข้อมูล TypeScript ครบถ้วนที่สร้างจากสเปกของ API
จากศูนย์ถึงลิงก์สั้นลิงก์แรกใน 3 ขั้นตอน
ใน Revolink เปิด โปรไฟล์ → API แล้วสร้างคีย์ เลือกเฉพาะสิทธิ์ที่คีย์ต้องใช้
workspace id จะถูกส่งไปกับทุกคำขอ คีย์จึงทำงานใน workspace เดียวเสมอ
สร้างไคลเอนต์ด้วยคีย์และ workspace id แล้วเรียก links.create
เก็บคีย์ไว้บนเซิร์ฟเวอร์ของคุณ ใครมีคีย์ก็สามารถทำงานใน workspace ของคุณได้ตามสิทธิ์ของคีย์
ด้วย Revolink SDK คุณสร้างลิงก์สั้นพร้อมกฎการกำหนดเส้นทางได้ในไม่กี่บรรทัด
import {Revolink} from 'revolink';
const revolink = new Revolink({
apiKey: process.env.REVOLINK_API_KEY!,
workspaceId: process.env.REVOLINK_WORKSPACE_ID!,
});
const {shortLink} = await revolink.links.create({
url: 'https://example.com',
});
console.log(shortLink); // https://rvlnk.link/k3x9aคำขอ
await revolink.links.create({
url: 'https://example.com',
});การตอบกลับ
{
id: "65f1c0a2e4b0a1d2c3b4a5f6",
name: "example.com",
domain: "rvlnk.link",
slug: "k3x9a",
shortLink: "https://rvlnk.link/k3x9a",
url: "https://example.com",
active: true,
clicks: 0,
...
}สี่รีซอร์สและการเรียก me แต่ละเมธอดสอดคล้องกับ REST endpoint หนึ่งรายการ
| รีซอร์ส | เมธอด | ทำอะไรได้ |
|---|---|---|
| revolink.links | createupsertgetlistiterateupdatedeletecreateManyupdateManydeleteMany | สร้าง อ่าน อัปเดต และลบลิงก์ upsert ตาม slug แสดงรายการพร้อมตัวกรองและการแบ่งหน้า วนอ่านทุกหน้า และทำงานเป็นชุด (สูงสุด 100 รายการต่อการเรียก) |
| revolink.tags | listgetcreateupdatedelete | สร้าง แสดงรายการ เปลี่ยนชื่อ และลบแท็ก |
| revolink.domains | listgetcreatedelete | เพิ่มโดเมนของคุณเอง ตรวจสอบสถานะการยืนยัน และลบโดเมน |
| revolink.analytics | linkworkspace | สถิติการคลิกของลิงก์เดียวหรือทั้ง workspace ในช่วงวันที่ที่กำหนด |
| revolink.me() | คีย์นี้ทำงานในนามใคร workspace ใด และคีย์มีสิทธิ์อะไรบ้าง |
ส่งผู้เข้าชมต่างกันไปยังปลายทางต่างกัน มีกฎเริ่มต้นเพียงหนึ่งกฎเท่านั้น ส่วนกฎอื่นตรงตามประเทศ อุปกรณ์ ระบบปฏิบัติการ และเงื่อนไขอื่น
await revolink.links.create({
name: 'App download',
rules: [
{isDefault: true, targetUrl: 'https://example.com/download'},
{
isDefault: false,
targetUrl: 'https://apps.apple.com/app/id1',
device: ['mobile'],
os: ['iOS'],
},
],
});ทุกคีย์มี scope endpoint จะตอบ 403 เมื่อขาด scope ที่ต้องใช้ ดังนั้นให้แต่ละการเชื่อมต่อเฉพาะสิ่งที่ใช้จริง
Authorization: Bearer <key>ส่งคีย์เป็น bearer token
X-Api-Keyหรือส่งคีย์ในเฮดเดอร์นี้แทน
X-Workspace-Idจำเป็น workspace ที่คำขอทำงานอยู่ เจ้าของคีย์ต้องเป็นสมาชิกของ workspace นั้น
| Scope | อนุญาตให้ |
|---|---|
links:read | แสดงรายการและอ่านลิงก์ |
links:write | สร้าง upsert และอัปเดตลิงก์ |
links:delete | ลบลิงก์ |
links:bulk | สร้าง อัปเดต และลบเป็นชุด (สูงสุด 100 ลิงก์ต่อคำขอ) |
analytics:read | อ่านสถิติการคลิก |
tags:read | แสดงรายการและอ่านแท็ก |
tags:write | สร้างและอัปเดตแท็ก |
tags:delete | ลบแท็ก |
domains:read | แสดงรายการและอ่านโดเมนของคุณเอง |
domains:write | เพิ่มโดเมนของคุณเอง |
domains:delete | ลบโดเมนของคุณเอง |
การเรียก API นับรวมในโควต้า API รายเดือนของแพ็กเกจของเจ้าของ workspace เมื่อขีดจำกัดของแพ็กเกจหยุดคำขอ รหัสข้อผิดพลาดคือ license_limit_reached
ทุกคำขอที่ล้มเหลวจะโยน RevolinkError พร้อมสถานะ HTTP รหัสที่เครื่องอ่านได้ และข้อความที่บอกว่าต้องแก้อะไร
import {RevolinkError} from 'revolink';
try {
await revolink.links.create({url: 'https://example.com', slug: 'taken'});
} catch (error) {
if (error instanceof RevolinkError) {
error.status; // 409
error.code; // 'conflict'
error.licenseLimitReached; // true when the plan's limit stopped the request
error.requiredPermission; // e.g. 'tags:write' when the key lacks a scope
error.retryAfter; // seconds, on 429
}
}429 จะถูกลองใหม่เสมอหลังหน่วงตาม Retry-After ข้อผิดพลาดของเครือข่ายและ 5xx จะถูกลองใหม่เฉพาะ GET, PUT และ DELETE ส่วน POST หรือ PATCH ที่อาจถูกประมวลผลไปแล้วจะไม่ถูกส่งซ้ำ ลิงก์จึงไม่ถูกสร้างสองครั้ง ค่าเริ่มต้น: หมดเวลา 30 วินาทีต่อครั้งและลองใหม่ 2 ครั้ง ตั้ง maxRetries เป็น 0 เพื่อปิดการลองใหม่
| รหัส | ความหมาย |
|---|---|
invalid_request | คำขอไม่ถูกต้อง (400) ข้อความจะบอกสาเหตุ |
unauthorized | ไม่มีคีย์ หรือคีย์ไม่ถูกต้องหรือหมดอายุ (401) |
forbidden | คีย์ขาดสิทธิ์ หรือบทบาทของคุณทำสิ่งนี้ไม่ได้ (403) |
license_limit_reached | ถึงขีดจำกัดของแพ็กเกจแล้ว: ลิงก์ แท็ก โดเมน หรือการเรียก API (403) |
not_found | ไม่มีรายการนี้ใน workspace นี้ (404) |
conflict | มีอยู่แล้ว เช่น slug หรือชื่อแท็กที่ถูกใช้ไปแล้ว (409) |
rate_limited | คีย์ส่งคำขอเกิน 300 ครั้งต่อนาที (429) |
network_error | ไม่มีการตอบกลับ: เครือข่ายล้มเหลวหรือหมดเวลา (สถานะเป็น 0) |
ไม่จำเป็น SDK เป็นเพียงตัวห่อบาง ๆ ที่มีชนิดข้อมูลครอบ REST API คุณเรียก https://api.revolink.link/apiv2 ได้โดยตรงจากภาษาใดก็ได้ด้วย API key และเฮดเดอร์ X-Workspace-Id หรือสร้างไคลเอนต์จากสเปก OpenAPI 3.1
Node.js 18 ขึ้นไปและทุกรันไทม์ที่มี fetch แบบ global ไม่มี dependency และมีบิลด์ ESM กับ CommonJS พร้อมชนิดข้อมูล TypeScript ที่สร้างจากสเปกของ API
จำกัดที่ 300 คำขอต่อนาทีต่อ API key เกินจากนั้น API จะตอบ 429 พร้อมเฮดเดอร์ Retry-After และ SDK จะรอแล้วลองใหม่เอง นอกจากนี้การเรียก API ยังนับรวมในโควต้ารายเดือนของแพ็กเกจของเจ้าของ workspace
API v1 ถูกระงับการพัฒนาและการตอบกลับมีเฮดเดอร์ Deprecation การเชื่อมต่อใหม่ควรใช้ API v2
ไม่ POST หรือ PATCH ที่อาจถูกประมวลผลไปแล้วจะไม่ถูกลองใหม่ มีเพียงการตอบ 429 และคำขอแบบ idempotent (GET, PUT, DELETE) เท่านั้นที่ถูกลองใหม่
ได้ เซิร์ฟเวอร์ Revolink MCP ให้ Claude, Cursor และไคลเอนต์ MCP อื่นจัดการลิงก์ด้วยภาษาธรรมชาติ ส่วน SDK เหมาะกับโค้ดและสคริปต์ของคุณเอง
เข้าร่วมกับทีมและครีเอเตอร์ที่ควบคุมทุกคลิกด้วยการเราต์ติ้งอัจฉริยะ เปิดตัวแคมเปญที่ฉลาดขึ้น ปรับปรุงทราฟฟิกแบบเรียลไทม์ และเติบโตอย่างไม่มีขีดจำกัด
เริ่มต้นฟรีแผนฟรี · ไม่ต้องบัตรเครดิต · ยกเลิกเมื่อใดก็ได้
มีลิงก์อยู่แล้วหรือไม่? นำเข้าเลย