API v2 Shortener
สร้างและจัดการลิงก์สั้นจากแอปของคุณ Base URL: https://api.s.id/v2 เวอร์ชันปัจจุบันคือ 2.0.0 และข้อกำหนดฉบับเต็มมีให้ในรูปแบบ OpenAPI
เอกสารอ้างอิงแบบโต้ตอบการยืนยันตัวตน
ส่ง API key sk_live_... หรือ OAuth 2.0 access token ผ่านเฮดเดอร์ Authorization: Bearer สร้าง API key ได้ที่ Dashboard > Developer และแต่ละ key ใช้ได้เฉพาะ scope ที่คุณเลือก
| ขอบเขต | สิทธิ์การเข้าถึง |
|---|---|
links:read | แสดงและอ่านลิงก์ |
links:write | สร้างและอัปเดตลิงก์ (สร้าง แก้ไข กู้คืน) |
links:archive | เก็บลิงก์เข้าคลัง |
links:analytics | อ่านสถิติการคลิกและจำนวนคลิกตลอดอายุการใช้งานของแต่ละลิงก์ |
Authorization: Bearer sk_live_...สร้างลิงก์
ส่ง POST /links พร้อม URL ปลายทาง ระบบจะสร้าง slug ให้อัตโนมัติหากไม่ได้กรอก custom_slug
curl -X POST https://api.s.id/v2/links \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{"long_url": "https://example.com/long-url", "custom_slug": "[your-alias]"}'| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
long_url | string | ใช่ | URL ปลายทาง |
title | string | ไม่ | ชื่อลิงก์ |
custom_slug | string | ไม่ | slug แบบกำหนดเอง ระบบสร้างให้อัตโนมัติเมื่อเว้นว่าง |
password | string | ไม่ | รหัสผ่านที่ใช้ป้องกันลิงก์ |
expired_at | integer | ไม่ | เวลาหมดอายุในรูปแบบ Unix timestamp (วินาที) |
domain_alias | string | ไม่ | โดเมนที่กำหนดเองซึ่งใช้แทน s.id |
ตัวอย่างการตอบกลับ:
{
"data": {
"id": 123,
"short": "[your-alias]",
"short_url": "https://s.id/[your-alias]",
"long_url": "https://example.com/long-url",
"microsite": false,
"protected": false,
"disposable": false,
"adult": false
},
"message": "link_created"
}รายการ endpoint
Links
GET/linksแสดงรายการลิงก์
Returns a paginated list of the authenticated user's links.
Base URL: https://api.s.id/v2 · ขอบเขต: links:read
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
page | query | integer | ไม่ | |
limit | query | integer | ไม่ | |
search | query | string | ไม่ | Filter by short code or URL |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | List of links |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
POST/linksสร้างลิงก์
Base URL: https://api.s.id/v2 · ขอบเขต: links:write
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
long_url | string | ใช่ | The destination (long) URL |
title | string | ไม่ | |
custom_slug | string | ไม่ | Custom short code; auto-generated when omitted |
password | string | ไม่ | Optional password to protect the link |
expired_at | integer | ไม่ | Optional expiry as a Unix timestamp (seconds) |
domain_alias | string | ไม่ | Custom domain to use instead of s.id |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | A single link |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
422 | Request validation failed |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
POST/links/availableตรวจสอบว่า slug ใช้งานได้หรือไม่
Checks whether a custom slug is available before creating a link.
Base URL: https://api.s.id/v2 · ขอบเขต: links:read
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
short | string | ใช่ | |
domain_alias | string | ไม่ | Custom domain, if any |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Slug is available |
401 | Missing or invalid API key |
422 | Slug is taken or invalid |
GET/links/{short}รับลิงก์
Base URL: https://api.s.id/v2 · ขอบเขต: links:read
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
short | path | string | ใช่ | The short code of the link |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | A single link |
401 | Missing or invalid API key |
404 | Resource not found |
PUT/links/{short}อัปเดตลิงก์
Updates a link. All fields are optional; omitted fields are left unchanged.
- password: set a non-empty string to protect, empty string "" to remove protection.
- custom_slug: rename the short code (subject to quota).
- archive_at: schedule auto-archive on a date (YYYY-MM-DD).
- domain_alias: change the custom domain (must be owned by the user).
Base URL: https://api.s.id/v2 · ขอบเขต: links:write
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
short | path | string | ใช่ | The short code of the link |
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
long_url | string | ไม่ | New destination URL |
title | string | ไม่ | |
custom_slug | string | ไม่ | Rename the short code (subject to plan quota) |
password | string | ไม่ | Set a password ("" removes existing protection) |
disposable | boolean | ไม่ | Mark link as disposable (expires after first click) |
adult | boolean | ไม่ | Flag link as adult content |
archive_at | string | ไม่ | Schedule auto-archive on this date (YYYY-MM-DD) |
domain_alias | string | ไม่ | Change the custom domain (must be owned by the user) |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | A single link |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Resource not found |
422 | Request validation failed |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
DELETE/links/{short}เก็บลิงก์เข้าคลัง
Archives (soft-deletes) a link. The short code stops resolving. Use POST /links/{short}/unarchive to restore.
Base URL: https://api.s.id/v2 · ขอบเขต: links:archive
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
short | path | string | ใช่ | The short code of the link |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Link archived |
401 | Missing or invalid API key |
404 | Resource not found |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
POST/links/{short}/unarchiveกู้คืนลิงก์จากคลัง
Restores a previously archived link, making its short code resolve again.
Base URL: https://api.s.id/v2 · ขอบเขต: links:write
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
short | path | string | ใช่ | The short code of the archived link |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Link restored |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Resource not found |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
GET/links/{short}/statsไทม์ไลน์การคลิกลิงก์
Returns a date-bucketed click-count timeline for the link.
Base URL: https://api.s.id/v2 · ขอบเขต: links:analytics
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
short | path | string | ใช่ | |
start | query | string | ไม่ | |
end | query | string | ไม่ |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Click timeline |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Resource not found |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
GET/links/{short}/stats/lifetimeจำนวนคลิกตลอดอายุการใช้งาน
Returns the all-time total click count for a single link.
Base URL: https://api.s.id/v2 · ขอบเขต: links:analytics
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
short | path | string | ใช่ |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Lifetime click count |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Resource not found |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
POST/links/bulkสร้างลิงก์หลายรายการ
Create up to 100 short links in a single request. Requires a subscription plan with bulk shortening enabled. Each item reports individual success/failure — the overall request always returns 200 even if some items fail.
Base URL: https://api.s.id/v2 · ขอบเขต: links:write
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
links | object[] | ใช่ |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Bulk result — individual items may have success=false |
401 | Missing or invalid API key |
402 | Plan upgrade required (bulk shortening not in plan) |
403 | API key lacks the required scope |
User
GET/userรับผู้ใช้ที่ยืนยันตัวตนแล้ว
Base URL: https://api.s.id/v2 · ขอบเขต: user:read
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | User profile |
401 | Missing or invalid API key |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
GET/quotaรับโควตาบัญชี
Returns the authenticated user's current plan limits and usage counters.
Base URL: https://api.s.id/v2 · ขอบเขต: user:read
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Account quota |
401 | Missing or invalid API key |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
QR
GET/qrรับการตั้งค่า QR ส่วนกลาง
Returns the account-level (global) QR code settings applied to QR codes by default.
Base URL: https://api.s.id/v2 · ขอบเขต: qr:read
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Global QR settings |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
PUT/qrปรับแต่งการตั้งค่า QR ส่วนกลาง
Updates the account-level (global) QR code settings. All fields are optional; omitted fields are left unchanged.
Base URL: https://api.s.id/v2 · ขอบเขต: qr:write
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
logo | string | ไม่ | URL of the logo image embedded in the QR code |
color | string | ไม่ | Foreground color as a hex value, e.g. #1a56db |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Updated global QR settings |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
422 | Request validation failed |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
GET/links/{short}/qrรับการตั้งค่า QR ของลิงก์
Returns the QR code settings for a single link.
Base URL: https://api.s.id/v2 · ขอบเขต: qr:read
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
short | path | string | ใช่ | The short code of the link |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Link QR settings |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Resource not found |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
PUT/links/{short}/qrปรับแต่งการตั้งค่า QR ของลิงก์
Updates the QR code settings for a single link. All fields are optional; omitted fields are left unchanged.
Base URL: https://api.s.id/v2 · ขอบเขต: qr:write
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
short | path | string | ใช่ | The short code of the link |
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
logo | string | ไม่ | URL of the logo image embedded in the QR code |
color | string | ไม่ | Foreground color as a hex value, e.g. #1a56db |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Updated link QR settings |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Resource not found |
422 | Request validation failed |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
Microsites
GET/micrositesแสดงรายการ microsite
Returns a paginated list of microsites owned by the authenticated user.
Base URL: https://api.s.id/v2 · ขอบเขต: microsites:read
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
limit | query | integer | ไม่ | |
after | query | string | ไม่ | Cursor for the next page (opaque string from previous response) |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | List of microsites |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
POST/micrositesสร้าง microsite
Base URL: https://api.s.id/v2 · ขอบเขต: microsites:write
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
slug | string | ใช่ | URL-safe identifier (alphanumeric + hyphens/underscores) |
title | string | ใช่ | |
kind | string | ใช่ | Microsite category (e.g. personal_branding, brand, other) |
theme | string | ไม่ | Theme slug (optional, defaults to the platform default) |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Microsite created |
400 | Validation error (slug already taken, quota exceeded, etc.) |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
GET/microsites/{slug}รับ microsite
Base URL: https://api.s.id/v2 · ขอบเขต: microsites:read
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
slug | path | string | ใช่ |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Microsite detail |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Microsite not found |
PUT/microsites/{slug}อัปเดต microsite
Patches title, description, and/or visibility. All fields are optional.
Base URL: https://api.s.id/v2 · ขอบเขต: microsites:write
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
slug | path | string | ใช่ |
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
title | string | ไม่ | |
description | string | ไม่ | |
hide | boolean | ไม่ | Set true to hide the microsite from public (requires plan that supports visibility toggle) |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Updated microsite |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Microsite not found |
DELETE/microsites/{slug}ลบ microsite
Base URL: https://api.s.id/v2 · ขอบเขต: microsites:delete
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
slug | path | string | ใช่ |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Microsite deleted |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Microsite not found |
POST/microsites/availableตรวจสอบว่า slug ของ microsite ใช้งานได้หรือไม่
Checks whether a microsite slug is available before creating a microsite.
Base URL: https://api.s.id/v2 · ขอบเขต: microsites:read
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
slug | string | ใช่ |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Slug availability result |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
GET/microsites/{slug}/componentsแสดงคอมโพเนนต์ microsite
Returns the components belonging to a microsite, in display order.
Base URL: https://api.s.id/v2 · ขอบเขต: microsites:read
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
slug | path | string | ใช่ | The slug of the microsite |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | List of microsite components |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Resource not found |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
POST/microsites/{slug}/componentsเพิ่มคอมโพเนนต์ microsite
Adds a new component to a microsite.
The body is { kind, data, tag? }. The shape of the data object depends on kind. Unknown fields are ignored, validation is per-kind, and invalid input returns 422. All color fields are hex strings (e.g. #1a56db).
**Kinds:** PROFILE, LINK, HORIZONTAL_LINK, TEXT, IMAGE, MEDIA, DIVIDER, COUNTDOWN, MAPS, IMAGE_SLIDE, CV, AUTOPLAY_MUSIC, CONTACT, CALENDAR, SHOP_LISTING, SHOP_ITEM, SHOP_LEADERBOARD.
**Rules:**
- PROFILE, CV and AUTOPLAY_MUSIC are unique — at most one per microsite.
- IMAGE_SLIDE requires a plan with the Image Slide feature.
- On create the password is always stored empty — set or change it via update (PUT).
- Image fields (image, imageBackground, slide image) must be a local asset path, not a remote URL — they must match [/.a-zA-Z0-9_-]+.(jpg|jpeg|png|svg|webp|gif|bmp); any value containing a scheme (https://), //, or .. is rejected.
**Shared field groups** (a kind that lists a group accepts all of its fields inside data):
- **Button styling** (LINK, CONTACT, CALENDAR): icon (string, max 255), textFont (string, max 100), textPosition (string, max 100), buttonEffect (string, max 100), buttonColor (hex, max 20), buttonBorderColor (hex, max 20), buttonIconBackground (hex, max 20), buttonShadowColor (hex, max 20).
- **Spoiler reveal** (TEXT, IMAGE, MEDIA, MAPS, IMAGE_SLIDE, SHOP_LEADERBOARD): isSpoiler (bool), spoilerButtonText (string, max 140), spoilerButtonTextPosition (string, max 100), spoilerButtonIcon (string), spoilerButtonColor (hex, max 20), spoilerButtonFont (string, max 100), spoilerBackground (string, max 100), spoilerBackgroundOpacity (string, max 100), spoilerButtonBorderColor (hex, max 20), spoilerButtonIconBackground (hex, max 20), spoilerButtonShadowColor (hex, max 20).
- **Password protection** (LINK, TEXT, IMAGE, MEDIA, MAPS, IMAGE_SLIDE, CONTACT, CV, SHOP_LEADERBOARD): passwordActive (bool), password (string, max 255 — set via update only), passwordMessage (string, max 255).
Base URL: https://api.s.id/v2 · ขอบเขต: microsites:write
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
slug | path | string | ใช่ | The slug of the microsite |
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
kind | PROFILE | LINK | HORIZONTAL_LINK | TEXT | IMAGE | MEDIA | DIVIDER | COUNTDOWN | MAPS | IMAGE_SLIDE | CV | AUTOPLAY_MUSIC | CONTACT | CALENDAR | SHOP_LISTING | SHOP_ITEM | SHOP_LEADERBOARD | ใช่ | Component kind. The shape of data depends on this value. |
data | object | ใช่ | Kind-specific component data. Its shape depends on kind. See the operation description and examples below. |
tag | string | ไม่ | Optional grouping tag |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Component created |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Resource not found |
422 | Request validation failed |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
PUT/microsites/{slug}/components/{componentId}อัปเดตคอมโพเนนต์ microsite
Updates a single microsite component.
Base URL: https://api.s.id/v2 · ขอบเขต: microsites:write
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
slug | path | string | ใช่ | The slug of the microsite |
componentId | path | string | ใช่ | The component ID |
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
active | boolean | ใช่ | Whether the component is shown |
kind | string | ใช่ | Component kind (e.g. LINK, PROFILE, TEXT) |
data | object | ใช่ | Kind-specific component data |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Component updated |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Resource not found |
422 | Request validation failed |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
DELETE/microsites/{slug}/components/{componentId}ลบคอมโพเนนต์ microsite
Deletes a single microsite component.
Base URL: https://api.s.id/v2 · ขอบเขต: microsites:delete
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
slug | path | string | ใช่ | The slug of the microsite |
componentId | path | string | ใช่ | The component ID |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Component deleted |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Resource not found |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
POST/microsites/{slug}/components/orderจัดลำดับคอมโพเนนต์ microsite ใหม่
Reorders a microsite's components according to the provided list of component IDs.
Base URL: https://api.s.id/v2 · ขอบเขต: microsites:write
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
slug | path | string | ใช่ | The slug of the microsite |
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
orders | string[] | ใช่ | Component IDs in the desired display order |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Components reordered |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
404 | Resource not found |
422 | Request validation failed |
429 | Too many requests. Per-tier limits apply, resolved from your s.id plan: a per-credential per-minute rate limit (rate_limit_exceeded) and a daily call quota (api_quota_exceeded), both shared across every integration using your credential (sk_live_* key or OAuth token). OAuth apps also have a secondary per-client_id ceiling (client_rate_limit_exceeded) across all their users' tokens. See GET /v2/quota for your current standing, and the X-RateLimit-* / X-Quota-* response headers. |
OAuth 2.0
GET/oauth/authorizeGet consent screen data
A plain browser navigation here (no Accept: application/json) 302-redirects to the dash.s.id consent UI, preserving the query string. With Accept: application/json, returns application name, logo, and requested scopes for the consent UI to render.
Base URL: https://api.s.id
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
client_id | query | string | ใช่ | |
redirect_uri | query | string | ใช่ | |
response_type | query | code | ใช่ | |
scope | query | string | ไม่ | |
state | query | string | ไม่ | Recommended. Opaque value for CSRF protection. Returned unchanged in the redirect. |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Consent screen data |
400 | Bad request |
POST/oauth/tokenExchange code or refresh token
Base URL: https://api.s.id
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
grant_type | authorization_code | refresh_token | ไม่ | |
code | string | ไม่ | |
redirect_uri | string | ไม่ | |
client_id | string | ไม่ | |
client_secret | string | ไม่ | |
refresh_token | string | ไม่ |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Token response |
400 | Invalid grant, unsupported_grant_type, or invalid_client |
401 | Invalid client credentials |
POST/oauth/revokeRevoke a token
Revokes an access or refresh token. Always returns 200 OK regardless of whether the token was valid (RFC 7009).
Base URL: https://api.s.id
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
token | string | ใช่ |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Token revoked |
POST/oauth/introspectIntrospect a token
Reports whether a token is currently active and, if so, which scopes and client it belongs to (RFC 7662). Client-credential protected: client_id/client_secret identify the caller, not the token owner. Always returns 200 — including for an unknown, expired, or revoked token ({"active": false}) — to avoid leaking token validity to unauthenticated probing.
Base URL: https://api.s.id
เนื้อหาคำขอ
| ฟิลด์ | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|
token | string | ใช่ | |
client_id | string | ใช่ | |
client_secret | string | ใช่ |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Introspection result |
400 | Missing token/client_id, or invalid client credentials |
GET/oauth/userinfoGet authorized user profile
Returns the profile of the user who authorized the OAuth app. Requires Authorization: Bearer <access_token> (the OAuth access token, not an sk_live_ key).
Base URL: https://api.s.id · ขอบเขต: user:read
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | User profile |
401 | Unauthorized |
GET/.well-known/oauth-authorization-serverOAuth 2.0 Authorization Server Metadata
RFC 8414 discovery document advertising every OAuth endpoint URL, supported scopes, and PKCE methods, so standards-compliant client libraries can configure themselves instead of hard-coding s.id's URLs.
Base URL: https://api.s.id
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Authorization server metadata |
GET/api/user/oauth/appsList apps authorized by the current user
Returns all OAuth clients that have active tokens for the authenticated user. Auth: user session cookie (not API key).
Base URL: https://api.s.id
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | List of connected apps |
401 | Unauthorized |
DELETE/api/user/oauth/apps/{clientId}Revoke all tokens for an app
Revokes all active tokens granted by the current user to the specified OAuth client.
Base URL: https://api.s.id
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
clientId | path | string | ใช่ |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | App access revoked |
401 | Unauthorized |
404 | App not found |
Analytics
GET/statsข้อมูลวิเคราะห์การคลิกระดับบัญชี
Returns a timeline of clicks plus breakdowns by top links, referers, locations, devices, and browsers for the authenticated account. Date range is gated by subscription plan.
Base URL: https://api.s.id/v2 · ขอบเขต: links:analytics
พารามิเตอร์
| ฟิลด์ | ตำแหน่ง | ชนิด | จำเป็น | คำอธิบาย |
|---|---|---|---|---|
start | query | string | ไม่ | Start date (YYYY-MM-DD). Defaults to 30 days ago. |
end | query | string | ไม่ | End date (YYYY-MM-DD). Defaults to today. |
additional | query | boolean | ไม่ | Include referer, location, device, browser breakdowns |
การตอบกลับ
| รหัส | คำอธิบาย |
|---|---|
200 | Account analytics |
401 | Missing or invalid API key |
403 | API key lacks the required scope |
ขีดจำกัดและข้อผิดพลาด
แต่ละ credential ถูกจำกัดต่อนาที ตรวจสอบโควตาของคุณได้ด้วย GET /quota
| ข้อมูลยืนยันตัวตน | ขีดจำกัด |
|---|---|
| API key หรือ OAuth access token | 38 คำขอต่อนาที |
| แอป OAuth (รวมทุก token) | 500 คำขอต่อนาที |
| รหัส | ความหมาย |
|---|---|
400 | คำขอมีรูปแบบไม่ถูกต้องหรือไม่รองรับ |
401 | ไม่มีข้อมูลรับรอง ข้อมูลไม่ถูกต้อง ถูกเพิกถอน หรือหมดอายุ |
403 | ข้อมูลรับรองไม่มีสโคปที่จำเป็น |
404 | ไม่พบทรัพยากรที่ร้องขอ |
422 | การตรวจสอบคำขอล้มเหลว |
429 | เกินขีดจำกัดอัตราการเรียกใช้ |