Chuyển đến nội dung chính
s.id Logo
Xem Markdown

API v2 Shortener

Tạo và quản lý link ngắn từ ứng dụng của bạn. Base URL: https://api.s.id/v2. Phiên bản hiện tại 2.0.0, và đặc tả đầy đủ có ở định dạng OpenAPI.

Tài liệu tham chiếu tương tác

Xác thực

Gửi API key sk_live_... hoặc OAuth 2.0 access token qua header Authorization: Bearer. Tạo API key trong Dashboard > Developer; mỗi key chỉ dùng được các scope bạn chọn.

Phạm viQuyền truy cập
links:readLiệt kê và đọc liên kết
links:writeTạo và cập nhật liên kết (tạo, sửa, khôi phục)
links:archiveLưu trữ liên kết
links:analyticsĐọc thống kê lượt nhấp và tổng lượt nhấp trọn đời của từng liên kết
http
Authorization: Bearer sk_live_...

Hướng dẫn xác thực đầy đủ

Gửi POST /links với URL đích. Slug sẽ được tạo tự động nếu bỏ trống custom_slug.

bash
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]"}'
TrườngKiểuBắt buộcMô tả
long_urlstringCóURL đích
titlestringKhôngTiêu đề liên kết
custom_slugstringKhôngSlug tùy chỉnh; tự động tạo khi để trống
passwordstringKhôngMật khẩu bảo vệ liên kết
expired_atintegerKhôngThời gian hết hạn dưới dạng Unix timestamp (giây)
domain_aliasstringKhôngTên miền tùy chỉnh dùng thay cho s.id

Ví dụ phản hồi:

json
{
  "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"
}

Danh sách endpoint

Chỉ giữ trong trang này cho đến khi tải lại. Xóa khi bạn dùng xong.

User

GET/user

URL gốc: https://api.s.id/v2 · Phạm vi: user:read

Phản hồi

MãMô tả
200User profile
401Missing or invalid API key
429Too 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.
Thử APIPhạm vi: user:read

Lưu API key của bạn ở trên để gửi yêu cầu.

GET/quota

Returns the authenticated user's current plan limits and usage counters.

URL gốc: https://api.s.id/v2 · Phạm vi: user:read

Phản hồi

MãMô tả
200Account quota
401Missing or invalid API key
429Too 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.
Thử APIPhạm vi: user:read

Lưu API key của bạn ở trên để gửi yêu cầu.

QR

GET/qr

Returns the account-level (global) QR code settings applied to QR codes by default.

URL gốc: https://api.s.id/v2 · Phạm vi: qr:read

Phản hồi

MãMô tả
200Global QR settings
401Missing or invalid API key
403API key lacks the required scope
429Too 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.
Thử APIPhạm vi: qr:read

Lưu API key của bạn ở trên để gửi yêu cầu.

PUT/qr

Updates the account-level (global) QR code settings. All fields are optional; omitted fields are left unchanged.

URL gốc: https://api.s.id/v2 · Phạm vi: qr:write

Nội dung yêu cầu

TrườngKiểuBắt buộcMô tả
logostringKhôngURL of the logo image embedded in the QR code
colorstringKhôngForeground color as a hex value, e.g. #1a56db

Phản hồi

MãMô tả
200Updated global QR settings
401Missing or invalid API key
403API key lacks the required scope
422Request validation failed
429Too 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.
Thử APIPhạm vi: qr:write

Lưu API key của bạn ở trên để gửi yêu cầu.

GET/links/{short}/qr

Returns the QR code settings for a single link.

URL gốc: https://api.s.id/v2 · Phạm vi: qr:read

Tham số

TrườngVị tríKiểuBắt buộcMô tả
shortpathstringCóThe short code of the link

Phản hồi

MãMô tả
200Link QR settings
401Missing or invalid API key
403API key lacks the required scope
404Resource not found
429Too 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.
Thử APIPhạm vi: qr:read

Lưu API key của bạn ở trên để gửi yêu cầu.

PUT/links/{short}/qr

Updates the QR code settings for a single link. All fields are optional; omitted fields are left unchanged.

URL gốc: https://api.s.id/v2 · Phạm vi: qr:write

Tham số

TrườngVị tríKiểuBắt buộcMô tả
shortpathstringCóThe short code of the link

Nội dung yêu cầu

TrườngKiểuBắt buộcMô tả
logostringKhôngURL of the logo image embedded in the QR code
colorstringKhôngForeground color as a hex value, e.g. #1a56db

Phản hồi

MãMô tả
200Updated link QR settings
401Missing or invalid API key
403API key lacks the required scope
404Resource not found
422Request validation failed
429Too 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.
Thử APIPhạm vi: qr:write

Lưu API key của bạn ở trên để gửi yêu cầu.

Microsites

GET/microsites

Returns a paginated list of microsites owned by the authenticated user.

URL gốc: https://api.s.id/v2 · Phạm vi: microsites:read

Tham số

TrườngVị tríKiểuBắt buộcMô tả
limitqueryintegerKhông
afterquerystringKhôngCursor for the next page (opaque string from previous response)

Phản hồi

MãMô tả
200List of microsites
401Missing or invalid API key
403API key lacks the required scope
Thử APIPhạm vi: microsites:read

Lưu API key của bạn ở trên để gửi yêu cầu.

POST/microsites

URL gốc: https://api.s.id/v2 · Phạm vi: microsites:write

Nội dung yêu cầu

TrườngKiểuBắt buộcMô tả
slugstringCóURL-safe identifier (alphanumeric + hyphens/underscores)
titlestringCó
kindstringCóMicrosite category (e.g. personal_branding, brand, other)
themestringKhôngTheme slug (optional, defaults to the platform default)

Phản hồi

MãMô tả
200Microsite created
400Validation error (slug already taken, quota exceeded, etc.)
401Missing or invalid API key
403API key lacks the required scope
Thử APIPhạm vi: microsites:write

Lưu API key của bạn ở trên để gửi yêu cầu.

GET/microsites/{slug}

URL gốc: https://api.s.id/v2 · Phạm vi: microsites:read

Tham số

TrườngVị tríKiểuBắt buộcMô tả
slugpathstringCó

Phản hồi

MãMô tả
200Microsite detail
401Missing or invalid API key
403API key lacks the required scope
404Microsite not found
Thử APIPhạm vi: microsites:read

Lưu API key của bạn ở trên để gửi yêu cầu.

PUT/microsites/{slug}

Patches title, description, and/or visibility. All fields are optional.

URL gốc: https://api.s.id/v2 · Phạm vi: microsites:write

Tham số

TrườngVị tríKiểuBắt buộcMô tả
slugpathstringCó

Nội dung yêu cầu

TrườngKiểuBắt buộcMô tả
titlestringKhông
descriptionstringKhông
hidebooleanKhôngSet true to hide the microsite from public (requires plan that supports visibility toggle)

Phản hồi

MãMô tả
200Updated microsite
401Missing or invalid API key
403API key lacks the required scope
404Microsite not found
Thử APIPhạm vi: microsites:write

Lưu API key của bạn ở trên để gửi yêu cầu.

DELETE/microsites/{slug}

URL gốc: https://api.s.id/v2 · Phạm vi: microsites:delete

Tham số

TrườngVị tríKiểuBắt buộcMô tả
slugpathstringCó

Phản hồi

MãMô tả
200Microsite deleted
401Missing or invalid API key
403API key lacks the required scope
404Microsite not found
Thử APIPhạm vi: microsites:delete

Lưu API key của bạn ở trên để gửi yêu cầu.

POST/microsites/available

Checks whether a microsite slug is available before creating a microsite.

URL gốc: https://api.s.id/v2 · Phạm vi: microsites:read

Nội dung yêu cầu

TrườngKiểuBắt buộcMô tả
slugstringCó

Phản hồi

MãMô tả
200Slug availability result
401Missing or invalid API key
403API key lacks the required scope
429Too 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.
Thử APIPhạm vi: microsites:read

Lưu API key của bạn ở trên để gửi yêu cầu.

GET/microsites/{slug}/components

Returns the components belonging to a microsite, in display order.

URL gốc: https://api.s.id/v2 · Phạm vi: microsites:read

Tham số

TrườngVị tríKiểuBắt buộcMô tả
slugpathstringCóThe slug of the microsite

Phản hồi

MãMô tả
200List of microsite components
401Missing or invalid API key
403API key lacks the required scope
404Resource not found
429Too 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.
Thử APIPhạm vi: microsites:read

Lưu API key của bạn ở trên để gửi yêu cầu.

POST/microsites/{slug}/components

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).

URL gốc: https://api.s.id/v2 · Phạm vi: microsites:write

Tham số

TrườngVị tríKiểuBắt buộcMô tả
slugpathstringCóThe slug of the microsite

Nội dung yêu cầu

TrườngKiểuBắt buộcMô tả
kindPROFILE | LINK | HORIZONTAL_LINK | TEXT | IMAGE | MEDIA | DIVIDER | COUNTDOWN | MAPS | IMAGE_SLIDE | CV | AUTOPLAY_MUSIC | CONTACT | CALENDAR | SHOP_LISTING | SHOP_ITEM | SHOP_LEADERBOARDCóComponent kind. The shape of data depends on this value.
dataobjectCóKind-specific component data. Its shape depends on kind. See the operation description and examples below.
tagstringKhôngOptional grouping tag

Phản hồi

MãMô tả
200Component created
401Missing or invalid API key
403API key lacks the required scope
404Resource not found
422Request validation failed
429Too 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.
Thử APIPhạm vi: microsites:write

Lưu API key của bạn ở trên để gửi yêu cầu.

PUT/microsites/{slug}/components/{componentId}

Updates a single microsite component.

URL gốc: https://api.s.id/v2 · Phạm vi: microsites:write

Tham số

TrườngVị tríKiểuBắt buộcMô tả
slugpathstringCóThe slug of the microsite
componentIdpathstringCóThe component ID

Nội dung yêu cầu

TrườngKiểuBắt buộcMô tả
activebooleanCóWhether the component is shown
kindstringCóComponent kind (e.g. LINK, PROFILE, TEXT)
dataobjectCóKind-specific component data

Phản hồi

MãMô tả
200Component updated
401Missing or invalid API key
403API key lacks the required scope
404Resource not found
422Request validation failed
429Too 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.
Thử APIPhạm vi: microsites:write

Lưu API key của bạn ở trên để gửi yêu cầu.

DELETE/microsites/{slug}/components/{componentId}

Deletes a single microsite component.

URL gốc: https://api.s.id/v2 · Phạm vi: microsites:delete

Tham số

TrườngVị tríKiểuBắt buộcMô tả
slugpathstringCóThe slug of the microsite
componentIdpathstringCóThe component ID

Phản hồi

MãMô tả
200Component deleted
401Missing or invalid API key
403API key lacks the required scope
404Resource not found
429Too 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.
Thử APIPhạm vi: microsites:delete

Lưu API key của bạn ở trên để gửi yêu cầu.

POST/microsites/{slug}/components/order

Reorders a microsite's components according to the provided list of component IDs.

URL gốc: https://api.s.id/v2 · Phạm vi: microsites:write

Tham số

TrườngVị tríKiểuBắt buộcMô tả
slugpathstringCóThe slug of the microsite

Nội dung yêu cầu

TrườngKiểuBắt buộcMô tả
ordersstring[]CóComponent IDs in the desired display order

Phản hồi

MãMô tả
200Components reordered
401Missing or invalid API key
403API key lacks the required scope
404Resource not found
422Request validation failed
429Too 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.
Thử APIPhạm vi: microsites:write

Lưu API key của bạn ở trên để gửi yêu cầu.

OAuth 2.0

GET/oauth/authorize

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.

URL gốc: https://api.s.id

Tham số

TrườngVị tríKiểuBắt buộcMô tả
client_idquerystringCó
redirect_uriquerystringCó
response_typequerycodeCó
scopequerystringKhông
statequerystringKhôngRecommended. Opaque value for CSRF protection. Returned unchanged in the redirect.

Phản hồi

MãMô tả
200Consent screen data
400Bad request
POST/oauth/token

URL gốc: https://api.s.id

Nội dung yêu cầu

TrườngKiểuBắt buộcMô tả
grant_typeauthorization_code | refresh_tokenKhông
codestringKhông
redirect_uristringKhông
client_idstringKhông
client_secretstringKhông
refresh_tokenstringKhông

Phản hồi

MãMô tả
200Token response
400Invalid grant, unsupported_grant_type, or invalid_client
401Invalid client credentials
POST/oauth/revoke

Revokes an access or refresh token. Always returns 200 OK regardless of whether the token was valid (RFC 7009).

URL gốc: https://api.s.id

Nội dung yêu cầu

TrườngKiểuBắt buộcMô tả
tokenstringCó

Phản hồi

MãMô tả
200Token revoked
POST/oauth/introspect

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.

URL gốc: https://api.s.id

Nội dung yêu cầu

TrườngKiểuBắt buộcMô tả
tokenstringCó
client_idstringCó
client_secretstringCó

Phản hồi

MãMô tả
200Introspection result
400Missing token/client_id, or invalid client credentials
GET/oauth/userinfo

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).

URL gốc: https://api.s.id · Phạm vi: user:read

Phản hồi

MãMô tả
200User profile
401Unauthorized
GET/.well-known/oauth-authorization-server

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.

URL gốc: https://api.s.id

Phản hồi

MãMô tả
200Authorization server metadata
GET/api/user/oauth/apps

Returns all OAuth clients that have active tokens for the authenticated user. Auth: user session cookie (not API key).

URL gốc: https://api.s.id

Phản hồi

MãMô tả
200List of connected apps
401Unauthorized
DELETE/api/user/oauth/apps/{clientId}

Revokes all active tokens granted by the current user to the specified OAuth client.

URL gốc: https://api.s.id

Tham số

TrườngVị tríKiểuBắt buộcMô tả
clientIdpathstringCó

Phản hồi

MãMô tả
200App access revoked
401Unauthorized
404App 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.

URL gốc: https://api.s.id/v2 · Phạm vi: links:analytics

Tham số

TrườngVị tríKiểuBắt buộcMô tả
startquerystringKhôngStart date (YYYY-MM-DD). Defaults to 30 days ago.
endquerystringKhôngEnd date (YYYY-MM-DD). Defaults to today.
additionalquerybooleanKhôngInclude referer, location, device, browser breakdowns

Phản hồi

MãMô tả
200Account analytics
401Missing or invalid API key
403API key lacks the required scope
Thử APIPhạm vi: links:analytics

Lưu API key của bạn ở trên để gửi yêu cầu.

Giới hạn và lỗi

Mỗi thông tin xác thực bị giới hạn theo phút. Kiểm tra hạn mức bằng GET /quota.

Thông tin xác thựcGiới hạn
API key hoặc OAuth access token38 yêu cầu mỗi phút
Ứng dụng OAuth (tổng tất cả token)500 yêu cầu mỗi phút
MãÝ nghĩa
400Yêu cầu sai định dạng hoặc không được hỗ trợ
401Thiếu, không hợp lệ, đã thu hồi hoặc hết hạn thông tin xác thực
403Thông tin xác thực không có phạm vi bắt buộc
404Không tìm thấy tài nguyên được yêu cầu
422Xác thực yêu cầu không thành công
429Vượt quá giới hạn tần suất