Reference data
GET /origins#
Every Origin account on chain, ordered by id. No parameters. Origins are append-only and can never be edited or removed, so this list only ever grows.
{
"source": "chain:Origin accounts",
"items": [
{
"id": 1,
"pubkey": "4LjMhsTWQrwqLPbHY6z5gf1CCxVennQcMSKmwTpfAw5g",
"name": "stocks-only",
"asset_class_mask": 79,
"max_risk": 100
}
]
}["origin", id].init_policy without deriving it.Policy.risk for policies of this origin.GET /models#
Every Model account on chain, ordered by id. No parameters. Currently 21 entries across 9 providers.
{
"source": "chain:Model accounts",
"items": [
{ "id": 1, "name": "GPT-5.5", "provider": "OpenAI", "enabled": true, "registeredAt": "2026-09-23T00:08:28.000Z" },
{ "id": 5, "name": "Claude Opus 5", "provider": "Anthropic", "enabled": true, "registeredAt": "2026-09-23T00:08:30.000Z" },
{ "id": 9, "name": "Llama", "provider": "Meta", "enabled": true, "registeredAt": "2026-09-23T00:08:32.000Z" }
]
}["model", id], little-endian. This is the value written to Policy.model_id.init_policy and set_policy, and does not affect policies already pointing at it.register_model overwrites in place, this is a last-changed time rather than a created time.There is no price here, and there is not going to be. Prices live off chain and are documented on compute costs.
GET /quotes#
StonkFun's launchable pair catalogue, polled into the indexer.
| Parameter | Type | Default | Effect |
|---|---|---|---|
search | string | none | Case-insensitive substring match against symbol or name. Omit it to get the whole catalogue. |
Ordered by policy count descending, then symbol ascending, and hard-capped at 600 rows. There is no offset.
{
"source": "stonkfun:/pairs + /launchlab/pricing",
"items": [
{
"mint": "XsoCS1TfEyfFhfvj8EtZ528L3CaKBDBRqRapnBbDF2W",
"symbol": "SPYX",
"name": "SP500",
"decimals": 8,
"category": "xstock",
"launchable": true,
"launchLabReady": true,
"logoUrl": "https://www.stonkfun.xyz/api/asset/quote-logo/XsoCS1TfEyfFhfvj8EtZ528L3CaKBDBRqRapnBbDF2W?v=c2b8ddb3",
"policyCount": 0,
"startMarketCapUsd": null,
"graduationMarketCapUsd": null,
"graduationMultiple": null
}
]
}custom, backpack, xstock, prestock, currency, solana, collectible, tessera and leverage.Where a quote's name comes from#
Elsewhere in the API a quote mint appears attached to a policy, and it needs a symbol. Two sources are tried in order, and the response always says which one it got.
| Order | Source | Reported as |
|---|---|---|
| 1 | StonkFun's /pairs catalogue | "stonkfun:/pairs catalogue" |
| 2 | the quote mint's own Token-2022 metadata extension | "chain:quote mint Token-2022 metadata" |
| neither | nothing | quoteSymbolSource: null, plus a quoteSymbolAbsentReason naming both places that were checked |
The absent case, verbatim#
"quoteSymbol": null,
"quoteSymbolSource": null,
"quoteSymbolAbsentReason": "this mint is not in StonkFun's /pairs catalogue and its mint account carries no Token-2022 metadata, so there is no first-party name for it. Both sources were checked."The launched token's own name, symbol and image come from the same Token-2022 metadata mechanism on the base mint, and are reported as mintName, mintSymbol and mintImageUrl on a ranking row. They are prefixed mint because a row already carries the quote leg's symbol and the two must not be confused.