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.