Referensi API
Jelajahi setiap operasi REST dan OAuth beserta host, metode autentikasi, scope, parameter, field request, dan response code yang tepat.
OpenAPI v2.1.0
Ikhtisar API
Operasi publik /v2 menerima API key terbatas atau access token OAuth 2.0. Operasi pengelolaan OAuth memiliki persyaratan browser, sesi, atau kredensial klien masing-masing.
- URL Dasar:
- https://api.s.id/v2
- Operasi
- 38
- Scope
- 10
Autentikasi
Kredensial dibatasi oleh scope. Scope yang kurang menghasilkan 403 insufficient_scope. Minta hanya izin yang dibutuhkan integrasimu.
Authorization: Bearer sk_live_...Endpoint
Katalog endpoint
Buka operasi untuk melihat base URL, autentikasi, input, dan kemungkinan response code yang tepat.
Links
GET/linksDaftar link
Returns a paginated list of the authenticated user's links.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
links:readParameter
pagequery · integerlimitquery · integersearchquery · stringFilter by short code or URL
Respons
200List of links401403429POST/linksBuat link
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
links:writeRequest body
long_urlstringWajibThe destination (long) URL
titlestringcustom_slugstringCustom short code; auto-generated when omitted
passwordstringOptional password to protect the link
expired_atintegerOptional expiry as a Unix timestamp (seconds)
domain_aliasstringCustom domain to use instead of s.id
Respons
200401403422429POST/links/availablePeriksa ketersediaan slug
Checks whether a custom slug is available before creating a link.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
links:readRequest body
shortstringWajibdomain_aliasstringCustom domain, if any
Respons
200Slug is available401422Slug is taken or invalidGET/links/{short}Ambil link
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
links:readParameter
shortpath · stringWajibThe short code of the link
Respons
200401404PUT/links/{short}Perbarui link
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).
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
links:writeParameter
shortpath · stringWajibThe short code of the link
Request body
long_urlstringNew destination URL
titlestringcustom_slugstringRename the short code (subject to plan quota)
passwordstringSet a password (`""` removes existing protection)
disposablebooleanMark link as disposable (expires after first click)
adultbooleanFlag link as adult content
archive_atstringSchedule auto-archive on this date (YYYY-MM-DD)
domain_aliasstringChange the custom domain (must be owned by the user)
Respons
200401403404422429DELETE/links/{short}Arsipkan link
Archives (soft-deletes) a link. The short code stops resolving. Use `POST /links/{short}/unarchive` to restore.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
links:archiveParameter
shortpath · stringWajibThe short code of the link
Respons
200Link archived401404429POST/links/{short}/unarchivePulihkan link yang diarsipkan
Restores a previously archived link, making its short code resolve again.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
links:writeParameter
shortpath · stringWajibThe short code of the archived link
Respons
200Link restored401403404429GET/links/{short}/statsLinimasa klik link
Returns a date-bucketed click-count timeline for the link.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
links:analyticsParameter
shortpath · stringWajibstartquery · stringendquery · string
Respons
200Click timeline401403404429GET/links/{short}/stats/lifetimeJumlah klik sepanjang waktu
Returns the all-time total click count for a single link.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
links:analyticsParameter
shortpath · stringWajib
Respons
200Lifetime click count401403404429POST/links/bulkBuat banyak link sekaligus
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.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
links:writeRequest body
linksarray<object>Wajib
Respons
200Bulk result — individual items may have success=false401402Plan upgrade required (bulk shortening not in plan)403User
GET/userAmbil pengguna terautentikasi
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
user:readRespons
200User profile401429GET/quotaAmbil kuota akun
Returns the authenticated user's current plan limits and usage counters.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
user:readRespons
200Account quota401429Microsites
GET/micrositesDaftar microsite
Returns a paginated list of microsites owned by the authenticated user.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
microsites:readParameter
limitquery · integerafterquery · stringCursor for the next page (opaque string from previous response)
Respons
200List of microsites401403POST/micrositesBuat microsite
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
microsites:writeRequest body
slugstringWajibURL-safe identifier (alphanumeric + hyphens/underscores)
titlestringWajibkindstringWajibMicrosite category (e.g. `personal_branding`, `brand`, `other`)
themestringTheme slug (optional, defaults to the platform default)
Respons
200Microsite created400Validation error (slug already taken, quota exceeded, etc.)401403GET/microsites/{slug}Ambil microsite
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
microsites:readParameter
slugpath · stringWajib
Respons
200Microsite detail401403404Microsite not foundPUT/microsites/{slug}Perbarui microsite
Patches title, description, and/or visibility. All fields are optional.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
microsites:writeParameter
slugpath · stringWajib
Request body
titlestringdescriptionstringhidebooleanSet `true` to hide the microsite from public (requires plan that supports visibility toggle)
Respons
200Updated microsite401403404Microsite not foundDELETE/microsites/{slug}Hapus microsite
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
microsites:deleteParameter
slugpath · stringWajib
Respons
200Microsite deleted401403404Microsite not foundPOST/microsites/availablePeriksa ketersediaan slug microsite
Checks whether a microsite slug is available before creating a microsite.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
microsites:readRequest body
slugstringWajib
Respons
200Slug availability result401403429GET/microsites/{slug}/componentsDaftar komponen microsite
Returns the components belonging to a microsite, in display order.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
microsites:readParameter
slugpath · stringWajibThe slug of the microsite
Respons
200List of microsite components401403404429POST/microsites/{slug}/componentsTambahkan komponen 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).
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
microsites:writeParameter
slugpath · stringWajibThe slug of the microsite
Request body
kindstringWajibComponent kind. The shape of `data` depends on this value.
dataobjectWajibKind-specific component data. Its shape depends on `kind`. See the operation description and examples below.
tagstringOptional grouping tag
Respons
200Component created401403404422429PUT/microsites/{slug}/components/{componentId}Perbarui komponen microsite
Updates a single microsite component.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
microsites:writeParameter
slugpath · stringWajibThe slug of the microsite
componentIdpath · stringWajibThe component ID
Request body
activebooleanWajibWhether the component is shown
kindstringWajibComponent kind (e.g. `LINK`, `PROFILE`, `TEXT`)
dataobjectWajibKind-specific component data
Respons
200Component updated401403404422429DELETE/microsites/{slug}/components/{componentId}Hapus komponen microsite
Deletes a single microsite component.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
microsites:deleteParameter
slugpath · stringWajibThe slug of the microsite
componentIdpath · stringWajibThe component ID
Respons
200Component deleted401403404429POST/microsites/{slug}/components/orderAtur ulang urutan komponen microsite
Reorders a microsite's components according to the provided list of component IDs.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
microsites:writeParameter
slugpath · stringWajibThe slug of the microsite
Request body
ordersarray<string>WajibComponent IDs in the desired display order
Respons
200Components reordered401403404422429Analytics
GET/statsAnalitik klik tingkat akun
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 Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
links:analyticsParameter
startquery · stringStart date (YYYY-MM-DD). Defaults to 30 days ago.
endquery · stringEnd date (YYYY-MM-DD). Defaults to today.
additionalquery · booleanInclude referer, location, device, browser breakdowns
Respons
200Account analytics401403QR
GET/qrAmbil pengaturan QR global
Returns the account-level (global) QR code settings applied to QR codes by default.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
qr:readRespons
200Global QR settings401403429PUT/qrSesuaikan pengaturan QR global
Updates the account-level (global) QR code settings. All fields are optional; omitted fields are left unchanged.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
qr:writeRequest body
logostringURL of the logo image embedded in the QR code
colorstringForeground color as a hex value, e.g. #1a56db
Respons
200Updated global QR settings401403422429GET/links/{short}/qrAmbil pengaturan QR sebuah link
Returns the QR code settings for a single link.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
qr:readParameter
shortpath · stringWajibThe short code of the link
Respons
200Link QR settings401403404429PUT/links/{short}/qrSesuaikan pengaturan QR sebuah link
Updates the QR code settings for a single link. All fields are optional; omitted fields are left unchanged.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key atau OAuth 2.0
Scope
qr:writeParameter
shortpath · stringWajibThe short code of the link
Request body
logostringURL of the logo image embedded in the QR code
colorstringForeground color as a hex value, e.g. #1a56db
Respons
200Updated link QR settings401403404422429OAuth 2.0
POST/oauth/tokenTukarkan kode atau refresh token
- URL Dasar
- https://api.s.id
- Autentikasi
- API key
Request body
grant_typestringcodestringredirect_uristringclient_idstringclient_secretstringrefresh_tokenstring
Respons
200Token response400Invalid grant, unsupported_grant_type, or invalid_client401Invalid client credentialsPOST/oauth/revokeCabut token
Revokes an access or refresh token. Always returns 200 OK regardless of whether the token was valid (RFC 7009).
- URL Dasar
- https://api.s.id
- Autentikasi
- API key
Request body
tokenstringWajib
Respons
200Token revokedPOST/oauth/introspectIntrospeksi 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.
- URL Dasar
- https://api.s.id
- Autentikasi
- API key
Request body
tokenstringWajibclient_idstringWajibclient_secretstringWajib
Respons
200Introspection result400Missing token/client_id, or invalid client credentialsGET/oauth/userinfoAmbil profil pengguna terotorisasi
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 Dasar
- https://api.s.id
- Autentikasi
- OAuth 2.0
Scope
user:readRespons
200User profile401UnauthorizedGET/api/user/oauth/appsDaftar aplikasi yang diotorisasi pengguna saat ini
Returns all OAuth clients that have active tokens for the authenticated user. Auth: user session cookie (not API key).
- URL Dasar
- https://api.s.id
- Autentikasi
- API key
Respons
200List of connected apps401UnauthorizedDELETE/api/user/oauth/apps/{clientId}Cabut semua token untuk sebuah aplikasi
Revokes all active tokens granted by the current user to the specified OAuth client.
- URL Dasar
- https://api.s.id
- Autentikasi
- API key
Parameter
clientIdpath · stringWajib
Respons
200App access revoked401Unauthorized404App not foundIntegrations
POST/integrations/make/webhook/subscribeBerlangganan webhook Make.com
Registers a Make.com (Integromat) scenario webhook URL to receive s.id events. Authenticated via DeveloperAPIAuth (API key or OAuth Bearer) with no scope requirement — every authenticated developer credential can subscribe.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key
Respons
200Subscribed401UnauthorizedPOST/integrations/make/webhook/unsubscribeBerhenti berlangganan webhook Make.com
Removes a previously registered Make.com scenario webhook subscription. Authenticated via DeveloperAPIAuth with no scope requirement.
- URL Dasar
- https://api.s.id/v2
- Autentikasi
- API key
Respons
200Unsubscribed401UnauthorizedReferensi Scope
links:readLihat daftar dan detail link
links:writeBuat dan perbarui link (buat, edit, pulihkan)
links:archiveArsipkan link
links:analyticsLihat statistik klik per link dan jumlah sepanjang waktu
qr:readLihat pengaturan QR (global dan per link)
qr:writeSesuaikan pengaturan QR (global dan per link)
user:readLihat profil pengguna terautentikasi dan kuota akun
microsites:readLihat microsite
microsites:writeBuat, perbarui, dan kelola komponen microsite
microsites:deleteHapus microsite dan komponennya
Batas Rate
Batas default adalah 38 permintaan per menit untuk setiap kredensial—per API key atau access token OAuth. Aplikasi OAuth juga memiliki batas gabungan 500 permintaan per menit untuk seluruh tokennya.
Respons error umum
- 400
- Permintaan salah format atau tidak didukung
- 401
- Kredensial tidak ada, tidak valid, dicabut, atau kedaluwarsa
- 403
- Kredensial tidak memiliki scope yang dibutuhkan
- 404
- Resource yang diminta tidak ditemukan
- 422
- Validasi permintaan gagal
- 429
- Batas permintaan terlampaui
Siap mulai membangun?
Buat API key dalam hitungan menit. Sudah termasuk tier gratis, tanpa kartu kredit.
