Skip to main content

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​

Stream profile

Elements​

Every stream URL is built from one product namespace plus three identifier parts:

  • a kind namespace — vesting (Lockup) or payments (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., 1 for Ethereum, 137 for Polygon, 8453 for 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/:

URLDescription
app.sablier.com/vesting/stream/LL3-137-29Lockup v1.2 Linear vesting stream #29 on Polygon
app.sablier.com/vesting/stream/LK3-1-12Lockup v4.0 vesting stream #12 on Ethereum
app.sablier.com/vesting/stream/0xB10…f95-1-6Vesting stream #6 on Ethereum, addressed by contract address
app.sablier.com/payments/stream/FL4-8453-100Flow v3.0 payment stream #100 on Base
app.sablier.com/payments/stream/FL2-11155111-40Flow 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-routeEffectExample
/detailsOpens the Details modal viewapp.sablier.com/vesting/stream/LL3-137-29/details
/historyOpens the History modal viewapp.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:

ParameterCodeTypeDescriptionExample
chainIdcNumberChain to filter by. On /vesting/search the chain lives in the path; on /payments/search it stays as a query param.c=137
sendersAddress / ENSStream sender (creator).s=vitalik.eth
recipientrAddress / ENSStream recipient.r=0x12…AB
idsiComma-separatedFilter by stream IDs or aliases.i=LL2-1-2,LL3-1-29
filterfComma-separatedStatus filter (e.g., streaming, paused, cancelled, settled).f=streaming,cancelled
sortFieldsoEnumdefault, value, or timeline. Omitted when default.so=value
sortDirsdEnumasc or desc. Omitted when desc.sd=asc
pagepNumber1-indexed page number. Omitted on page 1.p=2
tabtEnumDashboard 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​

URLDescriptionPreview
vesting/search/ethereum?s=0x0aAe…72cCVesting streams on Ethereum created by a particular senderForm
vesting/search/ethereum?i=LL2-1-2,LL3-1-29Vesting streams matching specific IDs on EthereumForm
payments/search/0xa0b8…eB48?c=8453Payments streams in USDC on Base—
vesting?t=sender&f=streamingVesting dashboard, "sender" tab, only currently streaming—
info

The legacy ?t=search query is no longer emitted by the portal. New integrations should use the path-based search routes above.


Airdrop Page​

Airdrop Profile

Elements​

Every airdrop campaign is identified by two parts:

  • a chainId (e.g. 1 for Ethereum, 137 for Polygon)
  • a contract address (e.g. 0x12…AB)

Building the URL​

Concatenate the address and chain ID with a hyphen and append to app.sablier.com/airdrops/campaign/. The address is lowercased.

URLDescription
app.sablier.com/airdrops/campaign/0xe721…bbabc-11155111Campaign 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​

ParameterCodeTypeDescriptionExample
chainIdcNumberChain to filter by.c=1
adminmAddress / ENSCampaign admin (creator).m=vitalik.eth
isAliveoBooleantrue for ongoing campaigns, false for expired.o=true
namenStringCampaign 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.

ParameterCodeTypeDescriptionExample
connectedChainccNumberChain 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 URLNew 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.