Skip to main content

Launchpad venue policy (URC-5)

Every token launched on the Standard Reserve launchpad v2 can say, on chain, which Uniswap v4 pools are its official venues. The standard for that is URC-5, "Token Venue Policy" (also at urc5.org). This page explains what the policy means and which routes report it. The dashboard page Check a pool asks the same question for one pool.

Launchpad v1 launches predate URC-5, and STANDARD itself does not implement it. Both routes below cover v2 launch tokens only.

What a token declares​

A token that supports URC-5 answers three questions on chain:

  • Mode. Enforced means routers that follow URC-5 must not use a v4 pool outside the token's list. Preferred means the listed pools are recommended and other venues are allowed.
  • Official pools. The pools the token calls its own, most preferred first. The API names them canonical_pools.
  • Outside venues. Flags for non-v4 venues, plus a directional allowlist (external_venues).

URC-5 is a declaration. It does not stop anyone from creating a pool or trading in it. It tells routers and aggregators which pools the token wants used, and an Enforced token asks them to honor that.

Graduation and the official-pool list​

A launchpad token lists no official pool until it graduates. Before graduation, a token in Enforced mode allows no v4 pool at all, so any v4 pool that already holds the token is off-list and not allowed. After graduation the list holds the token's own pool. launch.graduated is true when the token lists an official pool or the curve's graduation event was indexed, and launch.graduated_via says which (canonical_pool or graduation_event).

Creator choice is not the live mode​

At launch the creator picks where the token should trade after graduation: "Only in its own pool" or "Trades anywhere". The API reports that as launch.creator_venue_choice (own_pool_only or trades_anywhere).

It is not the token's current mode. It takes effect at graduation, once the token lists an official pool. Read venue_policy.mode for what the token says now. In the data, as of 28 October 2026, every ungraduated v2 token reads Enforced, including hundreds that launched with "Trades anywhere". That is what the data shows today, not a rule of URC-5.

Off-list, allowed and not allowed​

Two fields carry the meaning, and they answer different questions:

  • status says whether the pool is on the token's own list. canonical means it is. off_list means the token's policy has been read and the pool is not on it. It is null if the policy has not been read.
  • allowed_by_policy says whether the token's policy lets routers use the pool. In Preferred mode it is true for every pool. In Enforced mode it is true only for a canonical pool. It is null when the mode has not been read.

So an off-list pool is not automatically a problem. An off-list pool on a Preferred token is allowed. An off-list pool on an Enforced token is not allowed, and that is the case to watch. Off-list means "not on the token's list" and nothing more: the API does not say why a pool exists or who created it.

A pool can hold two launchpad v2 tokens. It then appears once per token, each judged by that token's own policy.

In-range liquidity​

in_range_liquidity_raw is the liquidity active at the pool's current price, meaning the part of the deposits that can fill a trade right now. It is not total deposits. A pool can hold funds and still report zero in range, because its deposits sit at prices the market has moved away from. has_in_range_liquidity is the yes-or-no version. The raw value is an integer string, like other _raw fields (see How to read a TSR response).

Freshness and withheld answers​

Policy and pool values are the last snapshot reads from chain, at read_block and state_read_block. They are not live reads, and each response carries an assumptions line saying so.

Stale data is withheld, not guessed at:

  • Token route. If the token's policy read or its pools' state reads are too old, the route answers 503 with last_good_block and no classification. Otherwise the response carries serving_state (fresh or lagging) and lag_blocks.
  • Venues route. One old row does not take the route down. That row has stale: true and a null classification (or null liquidity and price, for a pool whose state read is old), and a pool_id lookup on it answers unknown. Tokens in that state are counted in tokens_withheld, and pools whose tokens are all withheld are counted in pools_withheld. Neither appears in any classification count. If even the newest read is too old, the whole route answers 503.

A null here means "not read recently". It never means "allowed" or "not allowed".

Which route answers which question​

QuestionRouteMCP tool
What is this token's mode, and what are its official pools?GET /v1/launchpad/tokens/{address}1s_std_launchpad_token
Which v4 pools hold this token, and is each official and allowed?GET /v1/launchpad/tokens/{address}1s_std_launchpad_token
What did the creator pick at launch, and has the token graduated?GET /v1/launchpad/tokens/{address}1s_std_launchpad_token
How has this token's policy changed?GET /v1/launchpad/tokens/{address} (policy_history)1s_std_launchpad_token
How many tokens and pools are there, in each mode and status?GET /v1/launchpad/venues1s_std_launchpad_venues
Which off-list pools does their token's policy not allow?GET /v1/launchpad/venues (add scope=all for every pool)1s_std_launchpad_venues (scope)
Is this one pool official, and is it allowed?GET /v1/launchpad/venues?pool_id=0x...1s_std_launchpad_venues (pool_id)

The token route answers 404 for an address that is not a launchpad v2 token, 400 for a malformed address, and 503 when withheld. The venues route lists pools newest first and pages with before (pass next_before from the previous page). An unknown query parameter, or a bad scope, pool_id or before, is a 400.

One token​

GET /v1/launchpad/tokens/{address} returns launch, venue_policy, pools, summary and policy_history. This excerpt is from the OpenAPI example, for a token that has not graduated and has one off-list pool:

{
"launch": {
"graduated": false,
"graduated_via": null,
"creator_venue_choice": "trades_anywhere"
},
"venue_policy": {
"supports_urc5": true,
"mode": "enforced",
"canonical_pools": []
},
"pools": [
{
"status": "off_list",
"allowed_by_policy": false,
"in_range_liquidity_raw": "1000000000000000000",
"has_in_range_liquidity": true
}
],
"summary": {
"pools_total": 1,
"canonical": 0,
"off_list": 1,
"off_list_not_allowed": 1,
"off_list_not_allowed_with_liquidity": 1
}
}

The creator chose "Trades anywhere", yet the live mode is Enforced and the pool is not allowed. That is the gap between creator choice and live mode, and it is what an ungraduated token looks like in the data as of 28 October 2026.

Chain-wide​

GET /v1/launchpad/venues returns counts, a page of pools, next_before and freshness. By default the list holds only off-list pools that the token's policy does not allow. This is the counts block from the OpenAPI example:

{
"counts": {
"tokens": 469,
"tokens_withheld": 0,
"supporting_urc5": 469,
"mode_enforced": 465,
"mode_preferred": 4,
"graduated": 9,
"pools": 91,
"canonical_pools": 9,
"off_list_pools": 82,
"off_list_not_allowed": 32,
"off_list_not_allowed_with_liquidity": 5
}
}

Counts are over distinct pools. A pool counts as off-list or not allowed if it is so for either of its tokens.

With pool_id, the response also carries pool_lookup: an answer, a plain-language message, and one entry per token in tokens. The answer is one of these:

answerMeaning
officialThe pool is on the token's official list.
not_official_allowedNot on the list, but the token is in Preferred mode, so routers may still use it.
not_official_not_allowedNot on the list and the token is Enforced, so routers that follow URC-5 must not use it.
not_officialNot on the list, and the token's mode has not been read, so whether it is allowed is unknown.
unknownThe token's policy has not been read, or not recently, so the pool cannot be classed.
not_foundNo launchpad v2 token trades in this pool, or the pool has not been indexed yet.

If a pool holds two v2 tokens, answer is the most restrictive of the per-token answers.

What this does not tell you​

  • It reports what a token declares and whether a pool is on that list. It does not say whether a particular router honors URC-5.
  • The values are snapshot reads, not live chain reads. Check read_block, state_read_block and serving_state before acting on one.
  • off_list describes a list. It says nothing about intent or quality.

See also Launchpad charter drops for the other half of launchpad v2, and Contracts and addresses for the factory addresses. The MCP tool 1s_std_launchpad_venues takes scope, pool_id, limit and before.