URL Schemes
The Sablier Interface makes it easy for integrators to deep-link into specific streams, campaigns, or filtered searches. The portal is split into three products — vesting, payments, and airdrops — and each one has a profile page and a search page reachable through composable URLs. This guide documents the URL schemes you can build against.
Stream Page
![]() |
Elements
Every stream URL is built from one product namespace plus three identifier parts:
- a kind namespace —
vesting(Lockup) orpayments(Flow), used as the URL prefix - a source — either an uppercase contract alias (e.g.
LL3,FL4) or a lowercase contract address (e.g.0xb10d…f95) - a chainId (e.g.,
1for Ethereum,137for Polygon,8453for Base) - a streamId — the ERC-721 token ID assigned at stream creation
See Identifiers for the full alias table covering every released Lockup and Flow contract.
Building the URL
Concatenate the three identifier parts with hyphens (source-chainId-streamId) and append the result to the
product-namespaced base URL app.sablier.com/{kind}/stream/:
| URL | Description |
|---|---|
| app.sablier.com/vesting/stream/LL3-137-29 | Lockup v1.2 Linear vesting stream #29 on Polygon |
| app.sablier.com/vesting/stream/LK3-1-12 | Lockup v4.0 vesting stream #12 on Ethereum |
| app.sablier.com/vesting/stream/0xB10…f95-1-6 | Vesting stream #6 on Ethereum, addressed by contract address |
| app.sablier.com/payments/stream/FL4-8453-100 | Flow v3.0 payment stream #100 on Base |
| app.sablier.com/payments/stream/FL2-11155111-40 | Flow v1.1 payment stream #40 on Ethereum Sepolia |
The portal normalizes the alias to uppercase and the contract address to lowercase before resolving the stream.
Sub-routes
Append a sub-route to land on a specific tab of the stream page:
| Sub-route | Effect | Example |
|---|---|---|
/details | Opens the Details modal view | app.sablier.com/vesting/stream/LL3-137-29/details |
/history | Opens the History modal view | app.sablier.com/payments/stream/FL4-8453-100/history |
Search Streams
Route Shape
Stream search is path-based. The chain lives in the path for vesting, and the asset (when present) is always the last path segment:
- Vesting:
app.sablier.com/vesting/search/{chain}/{token?} - Payments:
app.sablier.com/payments/search/{token?}
{chain} is the lowercase chain slug — ethereum for chain ID 1, otherwise the chain's slug (polygon, base,
arbitrum, optimism, sepolia, …). {token?} is the optional ERC-20 contract address to filter by.
To land on the dashboard with a specific tab instead of the search view, use /vesting or /payments with t=.
Query Parameters
These parameters apply to both vesting and payments search:
| Parameter | Code | Type | Description | Example |
|---|---|---|---|---|
| chainId | c | Number | Chain to filter by. On /vesting/search the chain lives in the path; on /payments/search it stays as a query param. | c=137 |
| sender | s | Address / ENS | Stream sender (creator). | s=vitalik.eth |
| recipient | r | Address / ENS | Stream recipient. | r=0x12…AB |
| ids | i | Comma-separated | Filter by stream IDs or aliases. | i=LL2-1-2,LL3-1-29 |
| filter | f | Comma-separated | Status filter (e.g., streaming, paused, cancelled, settled). | f=streaming,cancelled |
| sortField | so | Enum | default, value, or timeline. Omitted when default. | so=value |
| sortDir | sd | Enum | asc or desc. Omitted when desc. | sd=asc |
| page | p | Number | 1-indexed page number. Omitted on page 1. | p=2 |
| tab | t | Enum | Dashboard tab: created, recipient, or sender. Used on /vesting and /payments, not on /search. | t=recipient |
Address values for s and r are case-insensitive on input — the portal accepts checksummed (0xB10d…F95) and
lowercase (0xb10d…f95) forms equally — but it lowercases them when emitting URLs of its own. ENS names are passed
through as-is.
Examples
| URL | Description | Preview |
|---|---|---|
| vesting/search/ethereum?s=0x0aAe…72cC | Vesting streams on Ethereum created by a particular sender | ![]() |
| vesting/search/ethereum?i=LL2-1-2,LL3-1-29 | Vesting streams matching specific IDs on Ethereum | ![]() |
| payments/search/0xa0b8…eB48?c=8453 | Payments streams in USDC on Base | — |
| vesting?t=sender&f=streaming | Vesting dashboard, "sender" tab, only currently streaming | — |
The legacy ?t=search query is no longer emitted by the portal. New integrations should use the path-based search
routes above.
Airdrop Page
![]() |
Elements
Every airdrop campaign is identified by two parts:
- a chainId (e.g.
1for Ethereum,137for Polygon) - a contract address (e.g.
0x12…AB)
Airdrops do not use aliases — campaigns are referenced by their contract address. See Identifiers for details.
Building the URL
Concatenate the address and chain ID with a hyphen and append to app.sablier.com/airdrops/campaign/. The address is
lowercased.
| URL | Description |
|---|---|
| app.sablier.com/airdrops/campaign/0xe721…bbabc-11155111 | Campaign on Ethereum Sepolia |
Sub-route
Append /manage to land directly on the admin manage view (only useful to the campaign admin):
app.sablier.com/airdrops/campaign/0xe721…bbabc-11155111/manage
Search Airdrops
Route Shape
app.sablier.com/airdrops/search/{token?}
{token?} is the optional ERC-20 contract address of the airdrop's token.
Query Parameters
| Parameter | Code | Type | Description | Example |
|---|---|---|---|---|
| chainId | c | Number | Chain to filter by. | c=1 |
| admin | m | Address / ENS | Campaign admin (creator). | m=vitalik.eth |
| isAlive | o | Boolean | true for ongoing campaigns, false for expired. | o=true |
| name | n | String | Campaign name substring. | n=Q1+Drop |
Like the stream search params, m is case-insensitive on input and lowercased on output; ENS is passed through as-is.
Example
app.sablier.com/airdrops/search/0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48?c=1&m=0x..1&o=true
Global Parameter: Connected Chain
Any portal URL can carry a cc (connected chain) parameter. When present, the portal prompts the connected wallet to
switch to that chain ID before rendering — useful when deep-linking into a stream or campaign that lives on a chain
different from the user's current wallet network.
| Parameter | Code | Type | Description | Example |
|---|---|---|---|---|
| connectedChain | cc | Number | Chain ID the wallet should switch to before load. | app.sablier.com/vesting/stream/LL3-137-29?cc=137 |
Migrating from the Legacy Interface
If you previously linked into the older interface, here is the mapping:
| Legacy URL | New URL |
|---|---|
app.sablier.com/stream/{id} | app.sablier.com/vesting/stream/{id} or app.sablier.com/payments/stream/{id} |
app.sablier.com/airstream/{id} | app.sablier.com/airdrops/campaign/{id} |
app.sablier.com/?t=search&c=…&s=… | app.sablier.com/vesting/search/{chain}?s=… or app.sablier.com/payments/search?c=…&s=… |
app.sablier.com/airdrops/?t=search&… | app.sablier.com/airdrops/search?… |
Legacy URLs still resolve through redirects, but new integrations should use the product-namespaced format. Note that
vesting search now expects the chain as a path slug (ethereum, polygon, base, …) rather than the numeric c=
query — convert the chain ID before building the URL.



