{
	"openapi": "3.0.3",
	"info": {
		"title": "Faze platform API",
		"version": "1.0.0",
		"description": "The public API surface - the same one @fazedotfun/sdk wraps. Reads are anonymous. Session-scoped operations carry the cookie the API mints on first contact and that the wallet-link flow binds a wallet to. Amounts are base-unit decimal strings (convert with BigInt, never floating point); USD fields are null when the platform has no fresh rate - render a dash, never zero. Administrative, moderation and ad-booking routes exist but are deliberately not described here."
	},
	"servers": [
		{
			"url": "https://lmfao.gg/api/v1",
			"description": "Staging (testnet) - the DEFAULT, and where to integrate against."
		},
		{
			"url": "https://faze.fun/api/v1",
			"description": "Production (mainnet) - real funds; opt in explicitly."
		}
	],
	"paths": {
		"/health": {
			"get": {
				"operationId": "health",
				"summary": "Probe the API's health.",
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/Health"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/coins": {
			"get": {
				"operationId": "listCoins",
				"summary": "The coin discovery feed, sorted and filtered.",
				"parameters": [
					{
						"name": "sort",
						"in": "query",
						"required": false,
						"description": "trending | new | top | graduating | graduated (endpoint default applies).",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "window",
						"in": "query",
						"required": false,
						"description": "Rolling window the sort scores over, e.g. 5m, 1h, 6h, 24h.",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "dir",
						"in": "query",
						"required": false,
						"description": "asc | desc.",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "states",
						"in": "query",
						"required": false,
						"description": "CSV of lifecycle states to include.",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "keywords",
						"in": "query",
						"required": false,
						"description": "CSV of free-text terms matched against ticker and name.",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "links",
						"in": "query",
						"required": false,
						"description": "CSV of link kinds a coin must carry.",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "limit",
						"in": "query",
						"required": false,
						"description": "Page size, clamped to the endpoint range.",
						"schema": {
							"type": "integer"
						}
					},
					{
						"name": "cursor",
						"in": "query",
						"required": false,
						"description": "Opaque keyset cursor - pass the response's nextCursor back verbatim.",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CoinList"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/coins/{mint}": {
			"get": {
				"operationId": "getCoinSummary",
				"summary": "One coin's registry record plus its metrics snapshot, in a single read.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CoinSummaryView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/coins/{mint}/metrics": {
			"get": {
				"operationId": "getCoinMetrics",
				"summary": "Price, FDV, volume, holder and momentum rollups for one coin.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CoinMetricsView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/coins/{mint}/holders": {
			"get": {
				"operationId": "getCoinHolders",
				"summary": "The coin's holders with balances and supply shares.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "limit",
						"in": "query",
						"required": false,
						"description": "Page size, clamped to the endpoint range.",
						"schema": {
							"type": "integer"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CoinHoldersView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/coins/{mint}/traders": {
			"get": {
				"operationId": "getCoinTraders",
				"summary": "Per-wallet trading totals for one coin.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "sort",
						"in": "query",
						"required": false,
						"description": "Ranking to sort by.",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "limit",
						"in": "query",
						"required": false,
						"description": "Page size, clamped to the endpoint range.",
						"schema": {
							"type": "integer"
						}
					},
					{
						"name": "cursor",
						"in": "query",
						"required": false,
						"description": "Opaque keyset cursor - pass the response's nextCursor back verbatim.",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CoinTradersList"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/coins/{mint}/trades": {
			"get": {
				"operationId": "getCoinTrades",
				"summary": "The coin's trade tape, newest first.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "limit",
						"in": "query",
						"required": false,
						"description": "Page size, clamped to the endpoint range.",
						"schema": {
							"type": "integer"
						}
					},
					{
						"name": "before",
						"in": "query",
						"required": false,
						"description": "Page older: the last row's timeMs.",
						"schema": {
							"type": "integer"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CoinTradesView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/coins/{mint}/burns": {
			"get": {
				"operationId": "getCoinBurns",
				"summary": "The coin's fee-burn history, newest first; the tip page also carries the graduation burn.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "limit",
						"in": "query",
						"required": false,
						"description": "Page size, clamped to the endpoint range.",
						"schema": {
							"type": "integer"
						}
					},
					{
						"name": "before",
						"in": "query",
						"required": false,
						"description": "Page older: the last row's blockRef (a block number).",
						"schema": {
							"type": "integer"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CoinBurnsView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/coins/{mint}/candles": {
			"get": {
				"operationId": "getCandles",
				"summary": "OHLCV candles, oldest first.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "timeframe",
						"in": "query",
						"required": false,
						"description": "Candle width, e.g. 1m, 5m, 1h, 1d.",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "limit",
						"in": "query",
						"required": false,
						"description": "Page size, clamped to the endpoint range.",
						"schema": {
							"type": "integer"
						}
					},
					{
						"name": "before",
						"in": "query",
						"required": false,
						"description": "Page older: the first candle's bucketStartMs.",
						"schema": {
							"type": "integer"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CandleSeries"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/coins/{mint}/sentiment": {
			"get": {
				"operationId": "getCoinSentiment",
				"summary": "Community sentiment tallies, plus the caller's own vote and eligibility.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CoinSentimentView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			},
			"put": {
				"operationId": "setCoinSentiment",
				"summary": "Cast or clear the caller's sentiment vote. Requires a qualifying buy of the coin.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": true,
					"description": "`{ vote: \"rocket\" | \"shit\" | null }` - null clears. Unknown fields are refused with a 400.",
					"content": {
						"application/json": {
							"schema": {
								"type": "object"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CoinSentimentView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"403": {
						"description": "Session has no linked wallet (`wallet link required`), or consent is missing.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/coins/{mint}/details": {
			"put": {
				"operationId": "editCoinDetails",
				"summary": "Replace a coin's description + links (resolved-creator only; empty fields clear).",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": true,
					"description": "The full editable set: `description`, `website`, `twitter`, `telegram`, `discord`. Unknown fields are refused with a 400.",
					"content": {
						"application/json": {
							"schema": {
								"type": "object"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CoinDetailsEditResponse"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"403": {
						"description": "Session has no linked wallet (`wallet link required`), or consent is missing.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/coins/{mint}/pool-fee": {
			"get": {
				"operationId": "getPoolFee",
				"summary": "A graduated coin's current pool fee.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/PoolFeeView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/launches": {
			"get": {
				"operationId": "listLaunches",
				"summary": "The launch registry, newest first.",
				"parameters": [
					{
						"name": "states",
						"in": "query",
						"required": false,
						"description": "CSV of lifecycle states to include.",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "limit",
						"in": "query",
						"required": false,
						"description": "Page size, clamped to the endpoint range.",
						"schema": {
							"type": "integer"
						}
					},
					{
						"name": "cursor",
						"in": "query",
						"required": false,
						"description": "Opaque keyset cursor - pass the response's nextCursor back verbatim.",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/LaunchList"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/launches/{mint}": {
			"get": {
				"operationId": "getLaunch",
				"summary": "One coin's launch registry record.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/LaunchRecord"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/config": {
			"get": {
				"operationId": "getLaunchConfig",
				"summary": "The deployment profile: chain and contract addresses, live fee rates, and the terms version a wallet link must accept.",
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/LaunchConfig"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/placements": {
			"get": {
				"operationId": "getPlacements",
				"summary": "Which coins currently occupy which map placements.",
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/MapPlacementsSnapshot"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/rates": {
			"get": {
				"operationId": "getNativeUsdRates",
				"summary": "The native-token USD rates the platform itself prices rows with. Null price = no fresh rate.",
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/NativeUsdRates"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/activity": {
			"get": {
				"operationId": "getActivity",
				"summary": "The cross-coin activity feed.",
				"parameters": [
					{
						"name": "limit",
						"in": "query",
						"required": false,
						"description": "Page size, clamped to the endpoint range.",
						"schema": {
							"type": "integer"
						}
					},
					{
						"name": "cursor",
						"in": "query",
						"required": false,
						"description": "Opaque keyset cursor - pass the response's nextCursor back verbatim.",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/ActivityFeedView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/wallets/{wallet}/holdings": {
			"get": {
				"operationId": "getWalletHoldings",
				"summary": "Every launchpad coin the wallet holds, value-sorted.",
				"parameters": [
					{
						"name": "wallet",
						"in": "path",
						"required": true,
						"description": "A wallet address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WalletHoldingsView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/wallets/{wallet}/pnl": {
			"get": {
				"operationId": "getWalletPnl",
				"summary": "Realized and unrealized PnL per coin the wallet has traded.",
				"parameters": [
					{
						"name": "wallet",
						"in": "path",
						"required": true,
						"description": "A wallet address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WalletPnlView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/wallets/{wallet}/trades": {
			"get": {
				"operationId": "getWalletTrades",
				"summary": "The wallet's trade history across coins.",
				"parameters": [
					{
						"name": "wallet",
						"in": "path",
						"required": true,
						"description": "A wallet address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "limit",
						"in": "query",
						"required": false,
						"description": "Page size, clamped to the endpoint range.",
						"schema": {
							"type": "integer"
						}
					},
					{
						"name": "before",
						"in": "query",
						"required": false,
						"description": "Page older: the last row's timeMs.",
						"schema": {
							"type": "integer"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WalletTradesView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/wallets/{wallet}/trading-stats": {
			"get": {
				"operationId": "getWalletTradingStats",
				"summary": "Aggregate trading statistics for the wallet.",
				"parameters": [
					{
						"name": "wallet",
						"in": "path",
						"required": true,
						"description": "A wallet address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WalletTradingStatsView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/wallets/{wallet}/pnl-curve": {
			"get": {
				"operationId": "getWalletPnlCurve",
				"summary": "The wallet's PnL over time.",
				"parameters": [
					{
						"name": "wallet",
						"in": "path",
						"required": true,
						"description": "A wallet address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WalletPnlCurveView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/wallets/{wallet}/creator-stats": {
			"get": {
				"operationId": "getCreatorStats",
				"summary": "Statistics for the coins this wallet launched.",
				"parameters": [
					{
						"name": "wallet",
						"in": "path",
						"required": true,
						"description": "A wallet address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/CreatorStatsView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/watchlist": {
			"get": {
				"operationId": "getWatchlist",
				"summary": "The caller's starred coins.",
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WatchlistView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"403": {
						"description": "Session has no linked wallet (`wallet link required`), or consent is missing.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/watchlist/{mint}": {
			"put": {
				"operationId": "watchCoin",
				"summary": "Star a coin.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WatchlistToggleView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"403": {
						"description": "Session has no linked wallet (`wallet link required`), or consent is missing.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			},
			"delete": {
				"operationId": "unwatchCoin",
				"summary": "Unstar a coin.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WatchlistToggleView"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"403": {
						"description": "Session has no linked wallet (`wallet link required`), or consent is missing.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/launch/build": {
			"post": {
				"operationId": "buildLaunch",
				"summary": "Prepare a launch: predicts the CREATE2 coin address, writes the registry row, and returns the transaction requests for the wallet to sign and broadcast in order.",
				"requestBody": {
					"required": true,
					"description": "`ticker` and `name` are required. Optional: `imageKey` (from an upload), `description`, website and social links, `bondingTargetWei`, an atomic `devBuyWei`, and `gated`. Unknown fields are refused with a 400.",
					"content": {
						"application/json": {
							"schema": {
								"type": "object"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/LaunchBuildResponse"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"403": {
						"description": "Session has no linked wallet (`wallet link required`), or consent is missing.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/launches/{mint}/confirm": {
			"post": {
				"operationId": "confirmLaunch",
				"summary": "Report the broadcast transaction hash; the on-chain verifier owns the lifecycle from here.",
				"parameters": [
					{
						"name": "mint",
						"in": "path",
						"required": true,
						"description": "The coin's mint address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"requestBody": {
					"required": true,
					"description": "`{ signature: \"0x<tx hash>\" }`. Unknown fields are refused with a 400.",
					"content": {
						"application/json": {
							"schema": {
								"type": "object"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/LaunchRecord"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"403": {
						"description": "Session has no linked wallet (`wallet link required`), or consent is missing.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/wallet/challenge": {
			"post": {
				"operationId": "walletChallenge",
				"summary": "Issue a single-use, session-bound message for the wallet to sign.",
				"requestBody": {
					"required": false,
					"description": "`{ publicKey: \"0x<address that will sign>\" }` returns an EIP-4361 (Sign-In with Ethereum) message bound to this site, that address and a five-minute expiry; the link must then come from the same address. Without `publicKey` the challenge is plain text, where the deployment still serves it. Optional `namespace: \"eip155\"`; absent = eip155. Unknown fields are refused with a 400.",
					"content": {
						"application/json": {
							"schema": {
								"type": "object"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WalletChallenge"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/wallet/link": {
			"post": {
				"operationId": "walletLink",
				"summary": "Bind a wallet to the session by proving the signature over the challenge.",
				"requestBody": {
					"required": true,
					"description": "`publicKey`, `signature` (EIP-191 personal_sign over the challenge text) and `acceptedTermsVersion` - REQUIRED: without it the link is refused 403 `terms acceptance required`. Read the current value from GET /launchpad/config `termsVersion`; the 403 body carries it too. Unknown fields are refused with a 400.",
					"content": {
						"application/json": {
							"schema": {
								"type": "object"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WalletLink"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/wallet/unlink": {
			"post": {
				"operationId": "walletUnlink",
				"summary": "Clear the session's wallet link.",
				"requestBody": {
					"required": false,
					"description": "Optional `{ namespace: \"eip155\" }`; absent = eip155. Unknown fields are refused with a 400.",
					"content": {
						"application/json": {
							"schema": {
								"type": "object"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WalletUnlink"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/wallet/moderation": {
			"get": {
				"operationId": "walletModeration",
				"summary": "The linked wallet's moderation standing. Check it before offering a trade you build yourself.",
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WalletModeration"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"403": {
						"description": "Session has no linked wallet (`wallet link required`), or consent is missing.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/profile/{wallet}": {
			"get": {
				"operationId": "getProfile",
				"summary": "Another wallet's public profile.",
				"parameters": [
					{
						"name": "wallet",
						"in": "path",
						"required": true,
						"description": "A wallet address (EIP-55 checksummed; any casing is accepted).",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/Profile"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/profile/me": {
			"get": {
				"operationId": "getMyProfile",
				"summary": "The caller's own profile.",
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/Profile"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"403": {
						"description": "Session has no linked wallet (`wallet link required`), or consent is missing.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/profile": {
			"put": {
				"operationId": "updateProfile",
				"summary": "Update the caller's profile. Unknown fields are refused, not ignored.",
				"requestBody": {
					"required": true,
					"description": "Any of `username` (3-14 chars of [A-Za-z0-9_], stored lowercase, unique), `avatarKey` (an uploaded image key, null clears) and `twitterHandle` (null clears). A field named wrongly is a 400. Unknown fields are refused with a 400.",
					"content": {
						"application/json": {
							"schema": {
								"type": "object"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/Profile"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"403": {
						"description": "Session has no linked wallet (`wallet link required`), or consent is missing.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/profile/handle-check": {
			"get": {
				"operationId": "checkHandle",
				"summary": "Whether a username is available AND valid - the cheap pre-flight for updateProfile. `reason` distinguishes invalid from reserved and taken. Advisory: the uniqueness index at save time is the arbiter.",
				"parameters": [
					{
						"name": "handle",
						"in": "query",
						"required": false,
						"description": "The handle to check.",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/UsernameAvailability"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/garage/asset": {
			"post": {
				"operationId": "uploadAsset",
				"summary": "Upload image bytes. The platform re-encodes them; poll getMedia until the handle is ready before referencing the key.",
				"requestBody": {
					"required": true,
					"description": "The raw bytes, with the real Content-Type. Unknown fields are refused with a 400.",
					"content": {
						"application/json": {
							"schema": {
								"type": "object"
							}
						}
					}
				},
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/MediaUpload"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"401": {
						"description": "No live session (`session required`).",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"403": {
						"description": "Session has no linked wallet (`wallet link required`), or consent is missing.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/media/{key}": {
			"get": {
				"operationId": "getMedia",
				"summary": "An upload's processing status and, once ready, its served URL.",
				"parameters": [
					{
						"name": "key",
						"in": "path",
						"required": true,
						"description": "The sha256 content-address returned by the upload.",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/MediaUpload"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "No such coin.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/world/props": {
			"get": {
				"operationId": "getWorldProps",
				"summary": "The world's decorative prop layer.",
				"parameters": [
					{
						"name": "world",
						"in": "query",
						"required": false,
						"description": "World id. Absent = the deployment default world.",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WorldPropsSnapshot"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/world/players": {
			"get": {
				"operationId": "getWorldPlayers",
				"summary": "Who is in the world right now, with map positions.",
				"parameters": [
					{
						"name": "world",
						"in": "query",
						"required": false,
						"description": "World id. Absent = the deployment default world.",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WorldMapPlayers"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/world/players/search": {
			"get": {
				"operationId": "searchWorldPlayers",
				"summary": "Search players in the world by name.",
				"parameters": [
					{
						"name": "q",
						"in": "query",
						"required": false,
						"description": "The search term.",
						"schema": {
							"type": "string"
						}
					},
					{
						"name": "world",
						"in": "query",
						"required": false,
						"description": "World id. Absent = the deployment default world.",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/WorldPlayerSearch"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/bazaar": {
			"get": {
				"operationId": "getBazaar",
				"summary": "The bazaar's stalls and which coins occupy them.",
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/BazaarSnapshot"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/ring": {
			"get": {
				"operationId": "getRing",
				"summary": "The showcase ring's slots and their coins.",
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/RingSnapshot"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/world/ad-boards": {
			"get": {
				"operationId": "getAdBoards",
				"summary": "The world's ad boards and what is showing on each.",
				"parameters": [
					{
						"name": "world",
						"in": "query",
						"required": false,
						"description": "World id. Absent = the deployment default world.",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/AdBoardsSnapshot"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/ads/pulse": {
			"get": {
				"operationId": "getAdPulse",
				"summary": "Ad venue activity.",
				"parameters": [
					{
						"name": "world",
						"in": "query",
						"required": false,
						"description": "World id. Absent = the deployment default world.",
						"schema": {
							"type": "string"
						}
					}
				],
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/AdVenuePulse"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/tokenlist.json": {
			"get": {
				"operationId": "getTokenList",
				"summary": "Uniswap-standard token list (tokenlists.org) of every listed coin.",
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/TokenList"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "Never published yet, currently empty (the standard requires a token), or disabled.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		},
		"/launchpad/tokenlist-graduated.json": {
			"get": {
				"operationId": "getGraduatedTokenList",
				"summary": "Uniswap-standard token list of graduated coins only.",
				"responses": {
					"200": {
						"description": "Success.",
						"content": {
							"application/json": {
								"schema": {
									"$ref": "#/components/schemas/TokenList"
								}
							}
						}
					},
					"400": {
						"description": "Invalid request.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"404": {
						"description": "Never published yet, currently empty (the standard requires a token), or disabled.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					},
					"429": {
						"description": "Rate limited - honour Retry-After.",
						"content": {
							"application/json": {
								"schema": {
									"type": "object",
									"properties": {
										"error": {
											"type": "string",
											"description": "A STABLE identifier - branch on this, never on message text."
										},
										"details": {
											"type": "array",
											"description": "Present on a 400 from schema validation: which field was rejected and why.",
											"items": {
												"type": "object",
												"properties": {
													"field": {
														"type": "string"
													},
													"reason": {
														"type": "string"
													}
												}
											}
										}
									},
									"required": [
										"error"
									]
								}
							}
						}
					}
				}
			}
		}
	},
	"components": {
		"schemas": {
			"Health": {
				"type": "object",
				"properties": {
					"status": {
						"type": "string",
						"enum": [
							"ok"
						]
					}
				},
				"required": [
					"status"
				],
				"additionalProperties": false
			},
			"CoinList": {
				"type": "object",
				"properties": {
					"coins": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"id": {
									"type": "string",
									"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
								},
								"mint": {
									"type": "string",
									"minLength": 1
								},
								"chain": {
									"type": "string",
									"minLength": 1
								},
								"ticker": {
									"type": "string"
								},
								"name": {
									"type": "string"
								},
								"metadataUri": {
									"type": "string"
								},
								"creatorWallet": {
									"type": "string",
									"minLength": 1
								},
								"lifecycleState": {
									"type": "string",
									"enum": [
										"launched",
										"awaiting-dev-buy",
										"curve-trading",
										"dormant",
										"graduating",
										"graduated",
										"abandoned",
										"launch-failed"
									]
								},
								"createdAtMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"graduatedAtMs": {
									"nullable": true,
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"feeBurn": {
									"nullable": true,
									"type": "object",
									"properties": {
										"shareBps": {
											"type": "integer",
											"minimum": 0,
											"maximum": 10000
										},
										"active": {
											"type": "boolean"
										},
										"ethBurnedWei": {
											"type": "string",
											"pattern": "^\\d+$"
										},
										"tokensBurned": {
											"type": "string",
											"pattern": "^\\d+$"
										},
										"burnCount": {
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"holderShareBps": {
											"type": "integer",
											"minimum": 0,
											"maximum": 10000
										}
									},
									"required": [
										"shareBps",
										"active",
										"ethBurnedWei",
										"tokensBurned",
										"burnCount"
									],
									"additionalProperties": false
								},
								"bondingTarget": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"poolFeeBps": {
									"type": "integer",
									"minimum": 0,
									"maximum": 10000
								},
								"earlyBuyFeeBps": {
									"type": "integer",
									"minimum": 0,
									"maximum": 10000
								},
								"quoteToken": {
									"nullable": true,
									"type": "string",
									"minLength": 1
								},
								"quoteAsset": {
									"nullable": true,
									"type": "object",
									"properties": {
										"address": {
											"type": "string",
											"minLength": 1
										},
										"symbol": {
											"type": "string",
											"minLength": 1
										},
										"name": {
											"type": "string",
											"minLength": 1
										},
										"decimals": {
											"type": "integer",
											"minimum": 0,
											"maximum": 255
										},
										"thumbUrl": {
											"nullable": true,
											"type": "string"
										},
										"unitPriceUsd": {
											"nullable": true,
											"type": "number",
											"minimum": 0
										}
									},
									"required": [
										"address",
										"symbol",
										"name",
										"decimals",
										"thumbUrl"
									],
									"additionalProperties": false
								},
								"curveRelease": {
									"type": "string",
									"enum": [
										"2.0",
										"3.0",
										"4.0",
										"5.0",
										"6.0",
										"7.0",
										"7.1",
										"8.0",
										"9.0"
									]
								},
								"compounding": {
									"type": "boolean"
								},
								"compoundCommitBps": {
									"type": "integer",
									"minimum": -9007199254740991,
									"maximum": 9007199254740991
								},
								"burnShareBps": {
									"type": "integer",
									"minimum": -9007199254740991,
									"maximum": 9007199254740991
								},
								"holderShareBps": {
									"type": "integer",
									"minimum": -9007199254740991,
									"maximum": 9007199254740991
								},
								"launchWindow": {
									"nullable": true,
									"type": "object",
									"properties": {
										"feeBps": {
											"type": "integer",
											"minimum": 0,
											"exclusiveMinimum": true,
											"maximum": 9007199254740991
										},
										"decaySeconds": {
											"type": "integer",
											"minimum": 0,
											"exclusiveMinimum": true,
											"maximum": 9007199254740991
										}
									},
									"required": [
										"feeBps",
										"decaySeconds"
									],
									"additionalProperties": false
								},
								"buyWindow": {
									"nullable": true,
									"type": "object",
									"properties": {
										"feeBps": {
											"type": "integer",
											"minimum": 0,
											"exclusiveMinimum": true,
											"maximum": 9007199254740991
										},
										"decaySeconds": {
											"type": "integer",
											"minimum": 0,
											"exclusiveMinimum": true,
											"maximum": 9007199254740991
										}
									},
									"required": [
										"feeBps",
										"decaySeconds"
									],
									"additionalProperties": false
								},
								"priceNative": {
									"type": "number",
									"minimum": 0
								},
								"fdvNative": {
									"type": "number",
									"minimum": 0
								},
								"curveProgressPct": {
									"type": "number",
									"minimum": 0,
									"maximum": 100
								},
								"volume24h": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"buyVolume24h": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"sellVolume24h": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"changePct": {
									"type": "object",
									"properties": {
										"m5": {
											"nullable": true,
											"type": "number"
										},
										"h1": {
											"nullable": true,
											"type": "number"
										},
										"h6": {
											"nullable": true,
											"type": "number"
										},
										"h24": {
											"nullable": true,
											"type": "number"
										}
									},
									"required": [
										"m5",
										"h1",
										"h6",
										"h24"
									],
									"additionalProperties": false
								},
								"trades24h": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"traders24h": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"holders": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"creatorSold": {
									"type": "boolean"
								},
								"creatorHoldingPct": {
									"nullable": true,
									"type": "number",
									"minimum": 0,
									"maximum": 100
								},
								"top10HolderPct": {
									"nullable": true,
									"type": "number",
									"minimum": 0,
									"maximum": 100
								},
								"athPriceNative": {
									"type": "number",
									"minimum": 0
								},
								"lastTradeAtMs": {
									"nullable": true,
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"lastTradeDirection": {
									"default": null,
									"nullable": true,
									"type": "string",
									"enum": [
										"buy",
										"sell"
									]
								},
								"momentum": {
									"type": "number",
									"minimum": 0
								},
								"priceUsd": {
									"nullable": true,
									"type": "number",
									"minimum": 0
								},
								"fdvUsd": {
									"nullable": true,
									"type": "number",
									"minimum": 0
								},
								"volumeUsd": {
									"nullable": true,
									"type": "string",
									"pattern": "^\\d+(?:\\.\\d+)?$"
								},
								"nativeUsdPrice": {
									"nullable": true,
									"type": "number",
									"minimum": 0
								},
								"nativeUsdAtMs": {
									"nullable": true,
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"mapRank": {
									"nullable": true,
									"type": "integer",
									"minimum": 0,
									"exclusiveMinimum": true,
									"maximum": 9007199254740991
								},
								"graveyard": {
									"type": "boolean"
								},
								"computedAtMs": {
									"nullable": true,
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								}
							},
							"required": [
								"id",
								"mint",
								"chain",
								"ticker",
								"name",
								"metadataUri",
								"creatorWallet",
								"lifecycleState",
								"createdAtMs",
								"graduatedAtMs",
								"bondingTarget",
								"priceNative",
								"fdvNative",
								"curveProgressPct",
								"volume24h",
								"buyVolume24h",
								"sellVolume24h",
								"changePct",
								"trades24h",
								"traders24h",
								"holders",
								"creatorSold",
								"creatorHoldingPct",
								"top10HolderPct",
								"athPriceNative",
								"lastTradeAtMs",
								"lastTradeDirection",
								"momentum",
								"priceUsd",
								"fdvUsd",
								"volumeUsd",
								"nativeUsdPrice",
								"nativeUsdAtMs",
								"mapRank",
								"graveyard",
								"computedAtMs"
							],
							"additionalProperties": false
						}
					},
					"nextCursor": {
						"nullable": true,
						"type": "string"
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"coins",
					"nextCursor",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"CoinSummaryView": {
				"type": "object",
				"properties": {
					"launch": {
						"type": "object",
						"properties": {
							"id": {
								"type": "string",
								"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
							},
							"mint": {
								"type": "string",
								"minLength": 1
							},
							"chain": {
								"type": "string",
								"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
							},
							"provider": {
								"type": "string",
								"minLength": 1
							},
							"providerMeta": {
								"type": "object",
								"properties": {
									"curveAddress": {
										"nullable": true,
										"type": "string",
										"minLength": 1
									},
									"graduatedPoolAddress": {
										"nullable": true,
										"type": "string",
										"minLength": 1
									},
									"curveKind": {
										"type": "string",
										"enum": [
											"v3",
											"v4"
										]
									},
									"curveRelease": {
										"type": "string",
										"enum": [
											"2.0",
											"3.0",
											"4.0",
											"5.0",
											"6.0",
											"7.0",
											"7.1",
											"8.0",
											"9.0"
										]
									},
									"hookAddress": {
										"nullable": true,
										"type": "string",
										"minLength": 1
									},
									"quoteToken": {
										"nullable": true,
										"type": "string",
										"minLength": 1
									},
									"quoteDecimals": {
										"type": "integer",
										"minimum": 0,
										"maximum": 255
									},
									"graduatedPoolId": {
										"nullable": true,
										"type": "string",
										"pattern": "^0x[0-9a-fA-F]{64}$"
									},
									"poolFeeBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"earlyBuyFeeBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"compounding": {
										"type": "boolean"
									},
									"compoundCommitBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"burnShareBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"holderShareBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"creatorCurveFees": {
										"type": "boolean"
									},
									"launchWindow": {
										"nullable": true,
										"type": "object",
										"properties": {
											"feeBps": {
												"type": "integer",
												"minimum": 0,
												"maximum": 10000
											},
											"decaySeconds": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											}
										},
										"required": [
											"feeBps",
											"decaySeconds"
										],
										"additionalProperties": false
									},
									"buyWindow": {
										"nullable": true,
										"type": "object",
										"properties": {
											"feeBps": {
												"type": "integer",
												"minimum": 0,
												"maximum": 10000
											},
											"decaySeconds": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											}
										},
										"required": [
											"feeBps",
											"decaySeconds"
										],
										"additionalProperties": false
									}
								},
								"required": [
									"curveAddress",
									"graduatedPoolAddress"
								],
								"additionalProperties": false
							},
							"bondingTarget": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"creatorWallet": {
								"type": "string",
								"minLength": 1
							},
							"ticker": {
								"type": "string",
								"minLength": 1
							},
							"name": {
								"type": "string",
								"minLength": 1
							},
							"metadataUri": {
								"type": "string",
								"minLength": 1
							},
							"lifecycleState": {
								"type": "string",
								"enum": [
									"launched",
									"awaiting-dev-buy",
									"curve-trading",
									"dormant",
									"graduating",
									"graduated",
									"abandoned",
									"launch-failed"
								]
							},
							"createdAt": {
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"confirmedAt": {
								"nullable": true,
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"curveCompletedAt": {
								"nullable": true,
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"graduatedAt": {
								"nullable": true,
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"signals": {
								"nullable": true,
								"type": "object",
								"properties": {
									"momentum": {
										"type": "number",
										"minimum": 0
									},
									"uniqueBuyers": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buyVolumeWei": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"windowMs": {
										"type": "integer",
										"minimum": 0,
										"exclusiveMinimum": true,
										"maximum": 9007199254740991
									},
									"computedAt": {
										"type": "string",
										"format": "date-time",
										"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
									}
								},
								"required": [
									"momentum",
									"uniqueBuyers",
									"buyVolumeWei",
									"windowMs",
									"computedAt"
								],
								"additionalProperties": false
							},
							"curveProgress": {
								"nullable": true,
								"type": "number",
								"minimum": 0,
								"maximum": 1
							},
							"decimals": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"createdAtMs": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"curveCompletedAtMs": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"graduatedAtMs": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"hidden": {
								"type": "object",
								"properties": {
									"at": {
										"type": "string",
										"format": "date-time",
										"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
									},
									"reason": {
										"nullable": true,
										"type": "string"
									}
								},
								"required": [
									"at",
									"reason"
								],
								"additionalProperties": false
							}
						},
						"required": [
							"id",
							"mint",
							"chain",
							"provider",
							"providerMeta",
							"bondingTarget",
							"creatorWallet",
							"ticker",
							"name",
							"metadataUri",
							"lifecycleState",
							"createdAt",
							"confirmedAt",
							"curveCompletedAt",
							"graduatedAt",
							"signals",
							"curveProgress",
							"decimals",
							"createdAtMs",
							"curveCompletedAtMs",
							"graduatedAtMs"
						],
						"additionalProperties": false
					},
					"metrics": {
						"type": "object",
						"properties": {
							"mint": {
								"type": "string",
								"minLength": 1
							},
							"chain": {
								"type": "string",
								"minLength": 1
							},
							"priceNative": {
								"type": "number",
								"minimum": 0
							},
							"fdvNative": {
								"type": "number",
								"minimum": 0
							},
							"curveProgressPct": {
								"type": "number",
								"minimum": 0,
								"maximum": 100
							},
							"feesTotal": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"creatorFeesNative": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"creatorFeesToken": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"holders": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"top10HolderPct": {
								"nullable": true,
								"type": "number",
								"minimum": 0,
								"maximum": 100
							},
							"watcherCount": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"creatorHoldingPct": {
								"nullable": true,
								"type": "number",
								"minimum": 0,
								"maximum": 100
							},
							"creatorSold": {
								"type": "boolean"
							},
							"athPriceNative": {
								"type": "number",
								"minimum": 0
							},
							"athAtMs": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"lastTradeAtMs": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"lastTradeDirection": {
								"default": null,
								"nullable": true,
								"type": "string",
								"enum": [
									"buy",
									"sell"
								]
							},
							"windows": {
								"type": "object",
								"properties": {
									"m5": {
										"type": "object",
										"properties": {
											"buys": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"sells": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"buyVolume": {
												"type": "string",
												"pattern": "^\\d+$"
											},
											"sellVolume": {
												"type": "string",
												"pattern": "^\\d+$"
											},
											"buyers": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"sellers": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"priceChangePct": {
												"nullable": true,
												"type": "number"
											}
										},
										"required": [
											"buys",
											"sells",
											"buyVolume",
											"sellVolume",
											"buyers",
											"sellers",
											"priceChangePct"
										],
										"additionalProperties": false
									},
									"h1": {
										"type": "object",
										"properties": {
											"buys": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"sells": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"buyVolume": {
												"type": "string",
												"pattern": "^\\d+$"
											},
											"sellVolume": {
												"type": "string",
												"pattern": "^\\d+$"
											},
											"buyers": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"sellers": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"priceChangePct": {
												"nullable": true,
												"type": "number"
											}
										},
										"required": [
											"buys",
											"sells",
											"buyVolume",
											"sellVolume",
											"buyers",
											"sellers",
											"priceChangePct"
										],
										"additionalProperties": false
									},
									"h6": {
										"type": "object",
										"properties": {
											"buys": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"sells": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"buyVolume": {
												"type": "string",
												"pattern": "^\\d+$"
											},
											"sellVolume": {
												"type": "string",
												"pattern": "^\\d+$"
											},
											"buyers": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"sellers": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"priceChangePct": {
												"nullable": true,
												"type": "number"
											}
										},
										"required": [
											"buys",
											"sells",
											"buyVolume",
											"sellVolume",
											"buyers",
											"sellers",
											"priceChangePct"
										],
										"additionalProperties": false
									},
									"h24": {
										"type": "object",
										"properties": {
											"buys": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"sells": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"buyVolume": {
												"type": "string",
												"pattern": "^\\d+$"
											},
											"sellVolume": {
												"type": "string",
												"pattern": "^\\d+$"
											},
											"buyers": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"sellers": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											},
											"priceChangePct": {
												"nullable": true,
												"type": "number"
											}
										},
										"required": [
											"buys",
											"sells",
											"buyVolume",
											"sellVolume",
											"buyers",
											"sellers",
											"priceChangePct"
										],
										"additionalProperties": false
									}
								},
								"required": [
									"m5",
									"h1",
									"h6",
									"h24"
								],
								"additionalProperties": false
							},
							"graduation": {
								"nullable": true,
								"type": "object",
								"properties": {
									"mint": {
										"type": "string",
										"pattern": "^0x[0-9a-fA-F]{40}$"
									},
									"chain": {
										"type": "string",
										"minLength": 1
									},
									"pool": {
										"type": "string",
										"pattern": "^0x[0-9a-fA-F]{40}$"
									},
									"txHash": {
										"type": "string",
										"pattern": "^0x[0-9a-fA-F]{64}$"
									},
									"blockNumber": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"blockTimeMs": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"caller": {
										"type": "string",
										"pattern": "^0x[0-9a-fA-F]{40}$"
									},
									"ethMigrated": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"migrationFee": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"liquidity": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"feeTierBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"closingPriceNative": {
										"nullable": true,
										"type": "number",
										"minimum": 0
									}
								},
								"required": [
									"mint",
									"chain",
									"pool",
									"txHash",
									"blockNumber",
									"blockTimeMs",
									"caller",
									"ethMigrated",
									"migrationFee",
									"liquidity",
									"feeTierBps",
									"closingPriceNative"
								],
								"additionalProperties": false
							},
							"external": {
								"nullable": true,
								"type": "object",
								"properties": {
									"source": {
										"type": "string",
										"minLength": 1
									},
									"priceNative": {
										"nullable": true,
										"type": "number",
										"minimum": 0
									},
									"priceUsd": {
										"nullable": true,
										"type": "number",
										"minimum": 0
									},
									"fdvUsd": {
										"nullable": true,
										"type": "number",
										"minimum": 0
									},
									"volume24hUsd": {
										"nullable": true,
										"type": "number",
										"minimum": 0
									},
									"priceChange24hPct": {
										"nullable": true,
										"type": "number"
									},
									"holders": {
										"nullable": true,
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"fetchedAtMs": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									}
								},
								"required": [
									"source",
									"priceNative",
									"priceUsd",
									"fdvUsd",
									"volume24hUsd",
									"priceChange24hPct",
									"holders",
									"fetchedAtMs"
								],
								"additionalProperties": false
							},
							"computedAtMs": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"quoteAsset": {
								"nullable": true,
								"type": "object",
								"properties": {
									"address": {
										"type": "string",
										"minLength": 1
									},
									"symbol": {
										"type": "string",
										"minLength": 1
									},
									"name": {
										"type": "string",
										"minLength": 1
									},
									"decimals": {
										"type": "integer",
										"minimum": 0,
										"maximum": 255
									},
									"thumbUrl": {
										"nullable": true,
										"type": "string"
									},
									"unitPriceUsd": {
										"nullable": true,
										"type": "number",
										"minimum": 0
									}
								},
								"required": [
									"address",
									"symbol",
									"name",
									"decimals",
									"thumbUrl"
								],
								"additionalProperties": false
							},
							"generatedAt": {
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							}
						},
						"required": [
							"mint",
							"chain",
							"priceNative",
							"fdvNative",
							"curveProgressPct",
							"feesTotal",
							"creatorFeesNative",
							"creatorFeesToken",
							"holders",
							"top10HolderPct",
							"watcherCount",
							"creatorHoldingPct",
							"creatorSold",
							"athPriceNative",
							"athAtMs",
							"lastTradeAtMs",
							"lastTradeDirection",
							"windows",
							"graduation",
							"external",
							"computedAtMs",
							"generatedAt"
						],
						"additionalProperties": false
					},
					"feeBurn": {
						"nullable": true,
						"type": "object",
						"properties": {
							"shareBps": {
								"type": "integer",
								"minimum": 0,
								"maximum": 10000
							},
							"active": {
								"type": "boolean"
							},
							"ethBurnedWei": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"tokensBurned": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"burnCount": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							}
						},
						"required": [
							"shareBps",
							"active",
							"ethBurnedWei",
							"tokensBurned",
							"burnCount"
						],
						"additionalProperties": false
					},
					"thesisCount": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					}
				},
				"required": [
					"launch",
					"metrics"
				],
				"additionalProperties": false
			},
			"CoinMetricsView": {
				"type": "object",
				"properties": {
					"mint": {
						"type": "string",
						"minLength": 1
					},
					"chain": {
						"type": "string",
						"minLength": 1
					},
					"priceNative": {
						"type": "number",
						"minimum": 0
					},
					"fdvNative": {
						"type": "number",
						"minimum": 0
					},
					"curveProgressPct": {
						"type": "number",
						"minimum": 0,
						"maximum": 100
					},
					"feesTotal": {
						"type": "string",
						"pattern": "^\\d+$"
					},
					"creatorFeesNative": {
						"type": "string",
						"pattern": "^\\d+$"
					},
					"creatorFeesToken": {
						"type": "string",
						"pattern": "^\\d+$"
					},
					"holders": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"top10HolderPct": {
						"nullable": true,
						"type": "number",
						"minimum": 0,
						"maximum": 100
					},
					"watcherCount": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"creatorHoldingPct": {
						"nullable": true,
						"type": "number",
						"minimum": 0,
						"maximum": 100
					},
					"creatorSold": {
						"type": "boolean"
					},
					"athPriceNative": {
						"type": "number",
						"minimum": 0
					},
					"athAtMs": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"lastTradeAtMs": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"lastTradeDirection": {
						"default": null,
						"nullable": true,
						"type": "string",
						"enum": [
							"buy",
							"sell"
						]
					},
					"windows": {
						"type": "object",
						"properties": {
							"m5": {
								"type": "object",
								"properties": {
									"buys": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"sells": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buyVolume": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"sellVolume": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"buyers": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"sellers": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"priceChangePct": {
										"nullable": true,
										"type": "number"
									}
								},
								"required": [
									"buys",
									"sells",
									"buyVolume",
									"sellVolume",
									"buyers",
									"sellers",
									"priceChangePct"
								],
								"additionalProperties": false
							},
							"h1": {
								"type": "object",
								"properties": {
									"buys": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"sells": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buyVolume": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"sellVolume": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"buyers": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"sellers": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"priceChangePct": {
										"nullable": true,
										"type": "number"
									}
								},
								"required": [
									"buys",
									"sells",
									"buyVolume",
									"sellVolume",
									"buyers",
									"sellers",
									"priceChangePct"
								],
								"additionalProperties": false
							},
							"h6": {
								"type": "object",
								"properties": {
									"buys": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"sells": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buyVolume": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"sellVolume": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"buyers": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"sellers": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"priceChangePct": {
										"nullable": true,
										"type": "number"
									}
								},
								"required": [
									"buys",
									"sells",
									"buyVolume",
									"sellVolume",
									"buyers",
									"sellers",
									"priceChangePct"
								],
								"additionalProperties": false
							},
							"h24": {
								"type": "object",
								"properties": {
									"buys": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"sells": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buyVolume": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"sellVolume": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"buyers": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"sellers": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"priceChangePct": {
										"nullable": true,
										"type": "number"
									}
								},
								"required": [
									"buys",
									"sells",
									"buyVolume",
									"sellVolume",
									"buyers",
									"sellers",
									"priceChangePct"
								],
								"additionalProperties": false
							}
						},
						"required": [
							"m5",
							"h1",
							"h6",
							"h24"
						],
						"additionalProperties": false
					},
					"graduation": {
						"nullable": true,
						"type": "object",
						"properties": {
							"mint": {
								"type": "string",
								"pattern": "^0x[0-9a-fA-F]{40}$"
							},
							"chain": {
								"type": "string",
								"minLength": 1
							},
							"pool": {
								"type": "string",
								"pattern": "^0x[0-9a-fA-F]{40}$"
							},
							"txHash": {
								"type": "string",
								"pattern": "^0x[0-9a-fA-F]{64}$"
							},
							"blockNumber": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"blockTimeMs": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"caller": {
								"type": "string",
								"pattern": "^0x[0-9a-fA-F]{40}$"
							},
							"ethMigrated": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"migrationFee": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"liquidity": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"feeTierBps": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"closingPriceNative": {
								"nullable": true,
								"type": "number",
								"minimum": 0
							}
						},
						"required": [
							"mint",
							"chain",
							"pool",
							"txHash",
							"blockNumber",
							"blockTimeMs",
							"caller",
							"ethMigrated",
							"migrationFee",
							"liquidity",
							"feeTierBps",
							"closingPriceNative"
						],
						"additionalProperties": false
					},
					"external": {
						"nullable": true,
						"type": "object",
						"properties": {
							"source": {
								"type": "string",
								"minLength": 1
							},
							"priceNative": {
								"nullable": true,
								"type": "number",
								"minimum": 0
							},
							"priceUsd": {
								"nullable": true,
								"type": "number",
								"minimum": 0
							},
							"fdvUsd": {
								"nullable": true,
								"type": "number",
								"minimum": 0
							},
							"volume24hUsd": {
								"nullable": true,
								"type": "number",
								"minimum": 0
							},
							"priceChange24hPct": {
								"nullable": true,
								"type": "number"
							},
							"holders": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"fetchedAtMs": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							}
						},
						"required": [
							"source",
							"priceNative",
							"priceUsd",
							"fdvUsd",
							"volume24hUsd",
							"priceChange24hPct",
							"holders",
							"fetchedAtMs"
						],
						"additionalProperties": false
					},
					"computedAtMs": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"quoteAsset": {
						"nullable": true,
						"type": "object",
						"properties": {
							"address": {
								"type": "string",
								"minLength": 1
							},
							"symbol": {
								"type": "string",
								"minLength": 1
							},
							"name": {
								"type": "string",
								"minLength": 1
							},
							"decimals": {
								"type": "integer",
								"minimum": 0,
								"maximum": 255
							},
							"thumbUrl": {
								"nullable": true,
								"type": "string"
							},
							"unitPriceUsd": {
								"nullable": true,
								"type": "number",
								"minimum": 0
							}
						},
						"required": [
							"address",
							"symbol",
							"name",
							"decimals",
							"thumbUrl"
						],
						"additionalProperties": false
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"mint",
					"chain",
					"priceNative",
					"fdvNative",
					"curveProgressPct",
					"feesTotal",
					"creatorFeesNative",
					"creatorFeesToken",
					"holders",
					"top10HolderPct",
					"watcherCount",
					"creatorHoldingPct",
					"creatorSold",
					"athPriceNative",
					"athAtMs",
					"lastTradeAtMs",
					"lastTradeDirection",
					"windows",
					"graduation",
					"external",
					"computedAtMs",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"CoinHoldersView": {
				"type": "object",
				"properties": {
					"mint": {
						"type": "string",
						"minLength": 1
					},
					"holderCount": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"holders": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"username": {
									"type": "string",
									"minLength": 1
								},
								"avatarUrl": {
									"nullable": true,
									"type": "string"
								},
								"isKol": {
									"type": "boolean"
								},
								"isVerified": {
									"type": "boolean"
								},
								"isRegistered": {
									"type": "boolean"
								},
								"wallet": {
									"type": "string",
									"minLength": 1
								},
								"balance": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"pct": {
									"type": "number",
									"minimum": 0,
									"maximum": 100
								}
							},
							"required": [
								"username",
								"wallet",
								"balance",
								"pct"
							],
							"additionalProperties": false
						}
					},
					"venues": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"wallet": {
									"type": "string",
									"minLength": 1
								},
								"kind": {
									"type": "string",
									"enum": [
										"curve",
										"pool",
										"burn"
									]
								},
								"balance": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"pct": {
									"type": "number",
									"minimum": 0,
									"maximum": 100
								}
							},
							"required": [
								"wallet",
								"kind",
								"balance",
								"pct"
							],
							"additionalProperties": false
						}
					},
					"nextCursor": {
						"nullable": true,
						"type": "string"
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"mint",
					"holderCount",
					"holders",
					"venues",
					"nextCursor",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"CoinTradersList": {
				"type": "object",
				"properties": {
					"mint": {
						"type": "string",
						"minLength": 1
					},
					"quoteAsset": {
						"nullable": true,
						"type": "object",
						"properties": {
							"address": {
								"type": "string",
								"minLength": 1
							},
							"symbol": {
								"type": "string",
								"minLength": 1
							},
							"name": {
								"type": "string",
								"minLength": 1
							},
							"decimals": {
								"type": "integer",
								"minimum": 0,
								"maximum": 255
							},
							"thumbUrl": {
								"nullable": true,
								"type": "string"
							},
							"unitPriceUsd": {
								"nullable": true,
								"type": "number",
								"minimum": 0
							}
						},
						"required": [
							"address",
							"symbol",
							"name",
							"decimals",
							"thumbUrl"
						],
						"additionalProperties": false
					},
					"traders": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"username": {
									"type": "string",
									"minLength": 1
								},
								"wallet": {
									"type": "string",
									"minLength": 1
								},
								"buyCount": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"sellCount": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"spentNative": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"receivedNative": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"volumeNative": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"realizedPnlNative": {
									"type": "number"
								},
								"tokensBought": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"tokensSold": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"firstTradeAtMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"lastTradeAtMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								}
							},
							"required": [
								"username",
								"wallet",
								"buyCount",
								"sellCount",
								"spentNative",
								"receivedNative",
								"volumeNative",
								"realizedPnlNative",
								"tokensBought",
								"tokensSold",
								"firstTradeAtMs",
								"lastTradeAtMs"
							],
							"additionalProperties": false
						}
					},
					"nextCursor": {
						"nullable": true,
						"type": "string"
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"mint",
					"traders",
					"nextCursor",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"CoinTradesView": {
				"type": "object",
				"properties": {
					"mint": {
						"type": "string",
						"minLength": 1
					},
					"trades": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"id": {
									"type": "string",
									"minLength": 1
								},
								"timeMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"blockRef": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"direction": {
									"type": "string",
									"enum": [
										"buy",
										"sell"
									]
								},
								"username": {
									"type": "string",
									"minLength": 1
								},
								"wallet": {
									"type": "string",
									"minLength": 1
								},
								"amountNative": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"tokenAmount": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"price": {
									"type": "number",
									"minimum": 0
								},
								"venue": {
									"type": "string",
									"enum": [
										"curve",
										"dex"
									]
								},
								"isKol": {
									"type": "boolean"
								},
								"isVerified": {
									"type": "boolean"
								},
								"avatarUrl": {
									"nullable": true,
									"type": "string"
								},
								"isRegistered": {
									"type": "boolean"
								},
								"kind": {
									"type": "string",
									"enum": [
										"trade",
										"burn"
									]
								}
							},
							"required": [
								"id",
								"timeMs",
								"blockRef",
								"direction",
								"username",
								"wallet",
								"amountNative",
								"tokenAmount",
								"price",
								"venue"
							],
							"additionalProperties": false
						}
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"mint",
					"trades",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"CoinBurnsView": {
				"type": "object",
				"properties": {
					"mint": {
						"type": "string",
						"minLength": 1
					},
					"burns": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"id": {
									"type": "string",
									"minLength": 1
								},
								"timeMs": {
									"nullable": true,
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"blockRef": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"txHash": {
									"type": "string",
									"minLength": 1
								},
								"caller": {
									"type": "string",
									"minLength": 1
								},
								"username": {
									"type": "string",
									"minLength": 1
								},
								"isKol": {
									"type": "boolean"
								},
								"isVerified": {
									"type": "boolean"
								},
								"avatarUrl": {
									"nullable": true,
									"type": "string"
								},
								"amountNative": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"tokenAmount": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"bountyNative": {
									"type": "string",
									"pattern": "^\\d+$"
								}
							},
							"required": [
								"id",
								"timeMs",
								"blockRef",
								"txHash",
								"caller",
								"username",
								"amountNative",
								"tokenAmount",
								"bountyNative"
							],
							"additionalProperties": false
						}
					},
					"graduationBurn": {
						"nullable": true,
						"type": "object",
						"properties": {
							"tokenAmount": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"txHash": {
								"type": "string",
								"minLength": 1
							},
							"timeMs": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"blockRef": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"isExact": {
								"type": "boolean"
							}
						},
						"required": [
							"tokenAmount",
							"txHash",
							"timeMs",
							"blockRef",
							"isExact"
						],
						"additionalProperties": false
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"mint",
					"burns",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"CandleSeries": {
				"type": "object",
				"properties": {
					"mint": {
						"type": "string",
						"minLength": 1
					},
					"timeframe": {
						"type": "string",
						"enum": [
							"1m",
							"1h",
							"4h",
							"1d"
						]
					},
					"candles": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"bucketStartMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"open": {
									"type": "number",
									"minimum": 0
								},
								"high": {
									"type": "number",
									"minimum": 0
								},
								"low": {
									"type": "number",
									"minimum": 0
								},
								"close": {
									"type": "number",
									"minimum": 0
								},
								"volumeWei": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"tradeCount": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"venue": {
									"type": "string",
									"enum": [
										"curve",
										"dex"
									]
								}
							},
							"required": [
								"bucketStartMs",
								"open",
								"high",
								"low",
								"close",
								"volumeWei",
								"tradeCount",
								"venue"
							],
							"additionalProperties": false
						}
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					},
					"changePercent": {
						"nullable": true,
						"type": "number"
					},
					"linkOutUrl": {
						"nullable": true,
						"type": "string"
					},
					"coverageThroughMs": {
						"nullable": true,
						"type": "number"
					}
				},
				"required": [
					"mint",
					"timeframe",
					"candles",
					"generatedAt",
					"changePercent",
					"linkOutUrl",
					"coverageThroughMs"
				],
				"additionalProperties": false
			},
			"CoinSentimentView": {
				"type": "object",
				"properties": {
					"mint": {
						"type": "string",
						"minLength": 1
					},
					"rocket": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"shit": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"myVote": {
						"nullable": true,
						"type": "string",
						"enum": [
							"rocket",
							"shit"
						]
					},
					"canVote": {
						"type": "boolean"
					},
					"minBuyUsd": {
						"type": "number",
						"minimum": 0
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"mint",
					"rocket",
					"shit",
					"myVote",
					"canVote",
					"minBuyUsd",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"CoinDetailsEditResponse": {
				"type": "object",
				"properties": {
					"launch": {
						"type": "object",
						"properties": {
							"id": {
								"type": "string",
								"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
							},
							"mint": {
								"type": "string",
								"minLength": 1
							},
							"chain": {
								"type": "string",
								"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
							},
							"provider": {
								"type": "string",
								"minLength": 1
							},
							"providerMeta": {
								"type": "object",
								"properties": {
									"curveAddress": {
										"nullable": true,
										"type": "string",
										"minLength": 1
									},
									"graduatedPoolAddress": {
										"nullable": true,
										"type": "string",
										"minLength": 1
									},
									"curveKind": {
										"type": "string",
										"enum": [
											"v3",
											"v4"
										]
									},
									"curveRelease": {
										"type": "string",
										"enum": [
											"2.0",
											"3.0",
											"4.0",
											"5.0",
											"6.0",
											"7.0",
											"7.1",
											"8.0",
											"9.0"
										]
									},
									"hookAddress": {
										"nullable": true,
										"type": "string",
										"minLength": 1
									},
									"quoteToken": {
										"nullable": true,
										"type": "string",
										"minLength": 1
									},
									"quoteDecimals": {
										"type": "integer",
										"minimum": 0,
										"maximum": 255
									},
									"graduatedPoolId": {
										"nullable": true,
										"type": "string",
										"pattern": "^0x[0-9a-fA-F]{64}$"
									},
									"poolFeeBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"earlyBuyFeeBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"compounding": {
										"type": "boolean"
									},
									"compoundCommitBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"burnShareBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"holderShareBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"creatorCurveFees": {
										"type": "boolean"
									},
									"launchWindow": {
										"nullable": true,
										"type": "object",
										"properties": {
											"feeBps": {
												"type": "integer",
												"minimum": 0,
												"maximum": 10000
											},
											"decaySeconds": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											}
										},
										"required": [
											"feeBps",
											"decaySeconds"
										],
										"additionalProperties": false
									},
									"buyWindow": {
										"nullable": true,
										"type": "object",
										"properties": {
											"feeBps": {
												"type": "integer",
												"minimum": 0,
												"maximum": 10000
											},
											"decaySeconds": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											}
										},
										"required": [
											"feeBps",
											"decaySeconds"
										],
										"additionalProperties": false
									}
								},
								"required": [
									"curveAddress",
									"graduatedPoolAddress"
								],
								"additionalProperties": false
							},
							"bondingTarget": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"creatorWallet": {
								"type": "string",
								"minLength": 1
							},
							"ticker": {
								"type": "string",
								"minLength": 1
							},
							"name": {
								"type": "string",
								"minLength": 1
							},
							"metadataUri": {
								"type": "string",
								"minLength": 1
							},
							"lifecycleState": {
								"type": "string",
								"enum": [
									"launched",
									"awaiting-dev-buy",
									"curve-trading",
									"dormant",
									"graduating",
									"graduated",
									"abandoned",
									"launch-failed"
								]
							},
							"createdAt": {
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"confirmedAt": {
								"nullable": true,
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"curveCompletedAt": {
								"nullable": true,
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"graduatedAt": {
								"nullable": true,
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"signals": {
								"nullable": true,
								"type": "object",
								"properties": {
									"momentum": {
										"type": "number",
										"minimum": 0
									},
									"uniqueBuyers": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buyVolumeWei": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"windowMs": {
										"type": "integer",
										"minimum": 0,
										"exclusiveMinimum": true,
										"maximum": 9007199254740991
									},
									"computedAt": {
										"type": "string",
										"format": "date-time",
										"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
									}
								},
								"required": [
									"momentum",
									"uniqueBuyers",
									"buyVolumeWei",
									"windowMs",
									"computedAt"
								],
								"additionalProperties": false
							},
							"curveProgress": {
								"nullable": true,
								"type": "number",
								"minimum": 0,
								"maximum": 1
							},
							"decimals": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"createdAtMs": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"curveCompletedAtMs": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"graduatedAtMs": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"hidden": {
								"type": "object",
								"properties": {
									"at": {
										"type": "string",
										"format": "date-time",
										"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
									},
									"reason": {
										"nullable": true,
										"type": "string"
									}
								},
								"required": [
									"at",
									"reason"
								],
								"additionalProperties": false
							}
						},
						"required": [
							"id",
							"mint",
							"chain",
							"provider",
							"providerMeta",
							"bondingTarget",
							"creatorWallet",
							"ticker",
							"name",
							"metadataUri",
							"lifecycleState",
							"createdAt",
							"confirmedAt",
							"curveCompletedAt",
							"graduatedAt",
							"signals",
							"curveProgress",
							"decimals",
							"createdAtMs",
							"curveCompletedAtMs",
							"graduatedAtMs"
						],
						"additionalProperties": false
					}
				},
				"required": [
					"launch"
				],
				"additionalProperties": false
			},
			"PoolFeeView": {
				"type": "object",
				"properties": {
					"mint": {
						"type": "string",
						"minLength": 1
					},
					"curveKind": {
						"type": "string",
						"enum": [
							"v3",
							"v4"
						]
					},
					"baseFeeBps": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 10000
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"mint",
					"curveKind",
					"baseFeeBps",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"LaunchList": {
				"type": "object",
				"properties": {
					"launches": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"id": {
									"type": "string",
									"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
								},
								"mint": {
									"type": "string",
									"minLength": 1
								},
								"chain": {
									"type": "string",
									"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
								},
								"provider": {
									"type": "string",
									"minLength": 1
								},
								"providerMeta": {
									"type": "object",
									"properties": {
										"curveAddress": {
											"nullable": true,
											"type": "string",
											"minLength": 1
										},
										"graduatedPoolAddress": {
											"nullable": true,
											"type": "string",
											"minLength": 1
										},
										"curveKind": {
											"type": "string",
											"enum": [
												"v3",
												"v4"
											]
										},
										"curveRelease": {
											"type": "string",
											"enum": [
												"2.0",
												"3.0",
												"4.0",
												"5.0",
												"6.0",
												"7.0",
												"7.1",
												"8.0",
												"9.0"
											]
										},
										"hookAddress": {
											"nullable": true,
											"type": "string",
											"minLength": 1
										},
										"quoteToken": {
											"nullable": true,
											"type": "string",
											"minLength": 1
										},
										"quoteDecimals": {
											"type": "integer",
											"minimum": 0,
											"maximum": 255
										},
										"graduatedPoolId": {
											"nullable": true,
											"type": "string",
											"pattern": "^0x[0-9a-fA-F]{64}$"
										},
										"poolFeeBps": {
											"type": "integer",
											"minimum": 0,
											"maximum": 10000
										},
										"earlyBuyFeeBps": {
											"type": "integer",
											"minimum": 0,
											"maximum": 10000
										},
										"compounding": {
											"type": "boolean"
										},
										"compoundCommitBps": {
											"type": "integer",
											"minimum": 0,
											"maximum": 10000
										},
										"burnShareBps": {
											"type": "integer",
											"minimum": 0,
											"maximum": 10000
										},
										"holderShareBps": {
											"type": "integer",
											"minimum": 0,
											"maximum": 10000
										},
										"creatorCurveFees": {
											"type": "boolean"
										},
										"launchWindow": {
											"nullable": true,
											"type": "object",
											"properties": {
												"feeBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"decaySeconds": {
													"type": "integer",
													"minimum": 0,
													"maximum": 9007199254740991
												}
											},
											"required": [
												"feeBps",
												"decaySeconds"
											],
											"additionalProperties": false
										},
										"buyWindow": {
											"nullable": true,
											"type": "object",
											"properties": {
												"feeBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"decaySeconds": {
													"type": "integer",
													"minimum": 0,
													"maximum": 9007199254740991
												}
											},
											"required": [
												"feeBps",
												"decaySeconds"
											],
											"additionalProperties": false
										}
									},
									"required": [
										"curveAddress",
										"graduatedPoolAddress"
									],
									"additionalProperties": false
								},
								"bondingTarget": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"creatorWallet": {
									"type": "string",
									"minLength": 1
								},
								"ticker": {
									"type": "string",
									"minLength": 1
								},
								"name": {
									"type": "string",
									"minLength": 1
								},
								"metadataUri": {
									"type": "string",
									"minLength": 1
								},
								"lifecycleState": {
									"type": "string",
									"enum": [
										"launched",
										"awaiting-dev-buy",
										"curve-trading",
										"dormant",
										"graduating",
										"graduated",
										"abandoned",
										"launch-failed"
									]
								},
								"createdAt": {
									"type": "string",
									"format": "date-time",
									"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
								},
								"confirmedAt": {
									"nullable": true,
									"type": "string",
									"format": "date-time",
									"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
								},
								"curveCompletedAt": {
									"nullable": true,
									"type": "string",
									"format": "date-time",
									"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
								},
								"graduatedAt": {
									"nullable": true,
									"type": "string",
									"format": "date-time",
									"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
								},
								"signals": {
									"nullable": true,
									"type": "object",
									"properties": {
										"momentum": {
											"type": "number",
											"minimum": 0
										},
										"uniqueBuyers": {
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"buyVolumeWei": {
											"type": "string",
											"pattern": "^\\d+$"
										},
										"windowMs": {
											"type": "integer",
											"minimum": 0,
											"exclusiveMinimum": true,
											"maximum": 9007199254740991
										},
										"computedAt": {
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										}
									},
									"required": [
										"momentum",
										"uniqueBuyers",
										"buyVolumeWei",
										"windowMs",
										"computedAt"
									],
									"additionalProperties": false
								},
								"curveProgress": {
									"nullable": true,
									"type": "number",
									"minimum": 0,
									"maximum": 1
								},
								"decimals": {
									"nullable": true,
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"createdAtMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"curveCompletedAtMs": {
									"nullable": true,
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"graduatedAtMs": {
									"nullable": true,
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"hidden": {
									"type": "object",
									"properties": {
										"at": {
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"reason": {
											"nullable": true,
											"type": "string"
										}
									},
									"required": [
										"at",
										"reason"
									],
									"additionalProperties": false
								}
							},
							"required": [
								"id",
								"mint",
								"chain",
								"provider",
								"providerMeta",
								"bondingTarget",
								"creatorWallet",
								"ticker",
								"name",
								"metadataUri",
								"lifecycleState",
								"createdAt",
								"confirmedAt",
								"curveCompletedAt",
								"graduatedAt",
								"signals",
								"curveProgress",
								"decimals",
								"createdAtMs",
								"curveCompletedAtMs",
								"graduatedAtMs"
							],
							"additionalProperties": false
						}
					},
					"nextCursor": {
						"nullable": true,
						"type": "string"
					}
				},
				"required": [
					"launches",
					"nextCursor"
				],
				"additionalProperties": false
			},
			"LaunchRecord": {
				"type": "object",
				"properties": {
					"id": {
						"type": "string",
						"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
					},
					"mint": {
						"type": "string",
						"minLength": 1
					},
					"chain": {
						"type": "string",
						"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
					},
					"provider": {
						"type": "string",
						"minLength": 1
					},
					"providerMeta": {
						"type": "object",
						"properties": {
							"curveAddress": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"graduatedPoolAddress": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"curveKind": {
								"type": "string",
								"enum": [
									"v3",
									"v4"
								]
							},
							"curveRelease": {
								"type": "string",
								"enum": [
									"2.0",
									"3.0",
									"4.0",
									"5.0",
									"6.0",
									"7.0",
									"7.1",
									"8.0",
									"9.0"
								]
							},
							"hookAddress": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"quoteToken": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"quoteDecimals": {
								"type": "integer",
								"minimum": 0,
								"maximum": 255
							},
							"graduatedPoolId": {
								"nullable": true,
								"type": "string",
								"pattern": "^0x[0-9a-fA-F]{64}$"
							},
							"poolFeeBps": {
								"type": "integer",
								"minimum": 0,
								"maximum": 10000
							},
							"earlyBuyFeeBps": {
								"type": "integer",
								"minimum": 0,
								"maximum": 10000
							},
							"compounding": {
								"type": "boolean"
							},
							"compoundCommitBps": {
								"type": "integer",
								"minimum": 0,
								"maximum": 10000
							},
							"burnShareBps": {
								"type": "integer",
								"minimum": 0,
								"maximum": 10000
							},
							"holderShareBps": {
								"type": "integer",
								"minimum": 0,
								"maximum": 10000
							},
							"creatorCurveFees": {
								"type": "boolean"
							},
							"launchWindow": {
								"nullable": true,
								"type": "object",
								"properties": {
									"feeBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"decaySeconds": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									}
								},
								"required": [
									"feeBps",
									"decaySeconds"
								],
								"additionalProperties": false
							},
							"buyWindow": {
								"nullable": true,
								"type": "object",
								"properties": {
									"feeBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"decaySeconds": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									}
								},
								"required": [
									"feeBps",
									"decaySeconds"
								],
								"additionalProperties": false
							}
						},
						"required": [
							"curveAddress",
							"graduatedPoolAddress"
						],
						"additionalProperties": false
					},
					"bondingTarget": {
						"type": "string",
						"pattern": "^\\d+$"
					},
					"creatorWallet": {
						"type": "string",
						"minLength": 1
					},
					"ticker": {
						"type": "string",
						"minLength": 1
					},
					"name": {
						"type": "string",
						"minLength": 1
					},
					"metadataUri": {
						"type": "string",
						"minLength": 1
					},
					"lifecycleState": {
						"type": "string",
						"enum": [
							"launched",
							"awaiting-dev-buy",
							"curve-trading",
							"dormant",
							"graduating",
							"graduated",
							"abandoned",
							"launch-failed"
						]
					},
					"createdAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					},
					"confirmedAt": {
						"nullable": true,
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					},
					"curveCompletedAt": {
						"nullable": true,
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					},
					"graduatedAt": {
						"nullable": true,
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					},
					"signals": {
						"nullable": true,
						"type": "object",
						"properties": {
							"momentum": {
								"type": "number",
								"minimum": 0
							},
							"uniqueBuyers": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"buyVolumeWei": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"windowMs": {
								"type": "integer",
								"minimum": 0,
								"exclusiveMinimum": true,
								"maximum": 9007199254740991
							},
							"computedAt": {
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							}
						},
						"required": [
							"momentum",
							"uniqueBuyers",
							"buyVolumeWei",
							"windowMs",
							"computedAt"
						],
						"additionalProperties": false
					},
					"curveProgress": {
						"nullable": true,
						"type": "number",
						"minimum": 0,
						"maximum": 1
					},
					"decimals": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"createdAtMs": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"curveCompletedAtMs": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"graduatedAtMs": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"hidden": {
						"type": "object",
						"properties": {
							"at": {
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"reason": {
								"nullable": true,
								"type": "string"
							}
						},
						"required": [
							"at",
							"reason"
						],
						"additionalProperties": false
					}
				},
				"required": [
					"id",
					"mint",
					"chain",
					"provider",
					"providerMeta",
					"bondingTarget",
					"creatorWallet",
					"ticker",
					"name",
					"metadataUri",
					"lifecycleState",
					"createdAt",
					"confirmedAt",
					"curveCompletedAt",
					"graduatedAt",
					"signals",
					"curveProgress",
					"decimals",
					"createdAtMs",
					"curveCompletedAtMs",
					"graduatedAtMs"
				],
				"additionalProperties": false
			},
			"LaunchConfig": {
				"type": "object",
				"properties": {
					"evmLaunchChain": {
						"nullable": true,
						"type": "string",
						"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
					},
					"enabledChains": {
						"minItems": 1,
						"type": "array",
						"items": {
							"type": "string",
							"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
						}
					},
					"creatorFeeShareBps": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 10000
					},
					"landFeeShareBps": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 10000
					},
					"compounding": {
						"nullable": true,
						"type": "object",
						"properties": {
							"creatorShareBps": {
								"type": "integer",
								"minimum": 0,
								"maximum": 10000
							},
							"compoundShareBps": {
								"type": "integer",
								"minimum": 0,
								"maximum": 10000
							},
							"mandatory": {
								"type": "boolean"
							},
							"commitMenu": {
								"type": "array",
								"items": {
									"type": "integer",
									"minimum": 1,
									"maximum": 10000
								}
							},
							"mandatoryCommitBps": {
								"type": "integer",
								"minimum": 0,
								"maximum": 10000
							}
						},
						"required": [
							"creatorShareBps"
						],
						"additionalProperties": false
					},
					"launchFeeWei": {
						"nullable": true,
						"type": "string",
						"pattern": "^\\d+$"
					},
					"tradeFeeBps": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 10000
					},
					"migrationFeeBps": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 10000
					},
					"ctoFeeWei": {
						"nullable": true,
						"type": "string",
						"pattern": "^\\d+$"
					},
					"launchWindow": {
						"nullable": true,
						"type": "object",
						"properties": {
							"feeBps": {
								"type": "integer",
								"minimum": 0,
								"maximum": 10000
							},
							"decaySeconds": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							}
						},
						"required": [
							"feeBps",
							"decaySeconds"
						],
						"additionalProperties": false
					},
					"buyWindow": {
						"nullable": true,
						"type": "object",
						"properties": {
							"feeBps": {
								"type": "integer",
								"minimum": 0,
								"maximum": 10000
							},
							"decaySeconds": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							}
						},
						"required": [
							"feeBps",
							"decaySeconds"
						],
						"additionalProperties": false
					},
					"graduationSurchargeEnabled": {
						"nullable": true,
						"type": "boolean"
					},
					"earlyBuyEnabled": {
						"nullable": true,
						"type": "boolean"
					},
					"sellWindowEnabled": {
						"nullable": true,
						"type": "boolean"
					},
					"curveCreatorFeesEnabled": {
						"nullable": true,
						"type": "boolean"
					},
					"burnCommitEnabled": {
						"nullable": true,
						"type": "boolean"
					},
					"holderShareEnabled": {
						"nullable": true,
						"type": "boolean"
					},
					"sniperTaxWindowSeconds": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"quoteAssets": {
						"nullable": true,
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"address": {
									"type": "string",
									"minLength": 1
								},
								"symbol": {
									"type": "string",
									"minLength": 1
								},
								"name": {
									"type": "string",
									"minLength": 1
								},
								"decimals": {
									"type": "integer",
									"minimum": 0,
									"maximum": 36
								},
								"description": {
									"nullable": true,
									"type": "string"
								},
								"imageUrl": {
									"nullable": true,
									"type": "string"
								},
								"thumbUrl": {
									"nullable": true,
									"type": "string"
								},
								"minTarget": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"maxTarget": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"minTargetUsd": {
									"nullable": true,
									"type": "number"
								},
								"maxTargetUsd": {
									"nullable": true,
									"type": "number"
								},
								"defaultTarget": {
									"nullable": true,
									"type": "string",
									"pattern": "^\\d+$"
								},
								"unitPriceUsd": {
									"nullable": true,
									"type": "number"
								},
								"priceUpdatedAt": {
									"nullable": true,
									"type": "string",
									"format": "date-time",
									"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
								},
								"pegMaxAgeHours": {
									"type": "integer",
									"minimum": 1,
									"maximum": 72
								},
								"sortOrder": {
									"type": "integer",
									"minimum": -9007199254740991,
									"maximum": 9007199254740991
								},
								"raiseMenuEnabled": {
									"type": "boolean"
								},
								"zapRoute": {
									"nullable": true,
									"type": "object",
									"properties": {
										"currency0": {
											"type": "string",
											"minLength": 1
										},
										"currency1": {
											"type": "string",
											"minLength": 1
										},
										"fee": {
											"type": "integer",
											"minimum": -9007199254740991,
											"maximum": 9007199254740991
										},
										"tickSpacing": {
											"type": "integer",
											"minimum": -9007199254740991,
											"maximum": 9007199254740991
										},
										"hooks": {
											"type": "string",
											"minLength": 1
										}
									},
									"required": [
										"currency0",
										"currency1",
										"fee",
										"tickSpacing",
										"hooks"
									],
									"additionalProperties": false
								}
							},
							"required": [
								"address",
								"symbol",
								"name",
								"decimals",
								"description",
								"imageUrl",
								"thumbUrl",
								"minTarget",
								"maxTarget",
								"minTargetUsd",
								"maxTargetUsd",
								"defaultTarget",
								"unitPriceUsd",
								"priceUpdatedAt",
								"pegMaxAgeHours",
								"sortOrder",
								"raiseMenuEnabled"
							],
							"additionalProperties": false
						}
					},
					"raiseLadder": {
						"nullable": true,
						"type": "object",
						"properties": {
							"usd": {
								"type": "array",
								"items": {
									"anyOf": [
										{
											"type": "number",
											"minimum": 0,
											"exclusiveMinimum": true
										},
										{
											"type": "number",
											"minimum": 0,
											"exclusiveMinimum": true
										},
										{
											"type": "number",
											"minimum": 0,
											"exclusiveMinimum": true
										},
										{
											"type": "number",
											"minimum": 0,
											"exclusiveMinimum": true
										},
										{
											"type": "number",
											"minimum": 0,
											"exclusiveMinimum": true
										}
									]
								},
								"minItems": 5,
								"maxItems": 5
							},
							"defaultIndex": {
								"type": "integer",
								"minimum": 0,
								"maximum": 4
							}
						},
						"required": [
							"usd",
							"defaultIndex"
						],
						"additionalProperties": false
					},
					"curveContracts": {
						"nullable": true,
						"type": "object",
						"properties": {
							"chainId": {
								"type": "integer",
								"minimum": 0,
								"exclusiveMinimum": true,
								"maximum": 9007199254740991
							},
							"publicRpcUrl": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"explorer": {
								"nullable": true,
								"type": "object",
								"properties": {
									"addressUrlTemplate": {
										"type": "string",
										"minLength": 1
									},
									"txUrlTemplate": {
										"type": "string",
										"minLength": 1
									}
								},
								"required": [
									"addressUrlTemplate",
									"txUrlTemplate"
								],
								"additionalProperties": false
							},
							"bondingCurveV4": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"v4Quoter": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"stateView": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"universalRouter": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"permit2": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"positionManager": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"launchpadHook": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"legacyBondingCurveV4": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"legacyLaunchpadHook": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"activeCurveRelease": {
								"type": "string",
								"enum": [
									"2.0",
									"3.0",
									"4.0",
									"5.0",
									"6.0",
									"7.0",
									"7.1",
									"8.0",
									"9.0"
								]
							},
							"legacyCurveRelease": {
								"nullable": true,
								"type": "string",
								"enum": [
									"2.0",
									"3.0",
									"4.0",
									"5.0",
									"6.0",
									"7.0",
									"7.1",
									"8.0",
									"9.0"
								]
							},
							"activeContractVersion": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"legacyContractVersion": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							},
							"passBurnerFactory": {
								"nullable": true,
								"type": "string",
								"minLength": 1
							}
						},
						"required": [
							"chainId",
							"bondingCurveV4",
							"v4Quoter",
							"stateView",
							"universalRouter",
							"permit2",
							"launchpadHook",
							"legacyBondingCurveV4",
							"legacyLaunchpadHook",
							"activeCurveRelease",
							"passBurnerFactory"
						],
						"additionalProperties": false
					},
					"termsVersion": {
						"type": "string",
						"minLength": 1
					},
					"agentAccessEnabled": {
						"type": "boolean"
					},
					"worldEnabled": {
						"type": "boolean"
					},
					"funding": {
						"type": "object",
						"properties": {
							"card": {
								"type": "boolean"
							},
							"bank": {
								"type": "boolean"
							},
							"deposit": {
								"type": "boolean"
							},
							"asset": {
								"type": "string",
								"minLength": 1
							}
						},
						"required": [
							"asset"
						],
						"additionalProperties": false
					},
					"fundingEnabled": {
						"type": "boolean"
					},
					"externalWalletsEnabled": {
						"type": "boolean"
					},
					"compoundPotKeeperEnabled": {
						"type": "boolean"
					}
				},
				"required": [
					"evmLaunchChain",
					"enabledChains",
					"creatorFeeShareBps",
					"landFeeShareBps",
					"compounding",
					"launchFeeWei",
					"tradeFeeBps",
					"migrationFeeBps",
					"ctoFeeWei",
					"termsVersion",
					"agentAccessEnabled"
				],
				"additionalProperties": false
			},
			"MapPlacementsSnapshot": {
				"type": "object",
				"properties": {
					"placements": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"mint": {
									"type": "string",
									"minLength": 1
								},
								"rank": {
									"type": "integer",
									"minimum": 0,
									"exclusiveMinimum": true,
									"maximum": 9007199254740991
								},
								"districtId": {
									"type": "string",
									"minLength": 1
								},
								"stallIndex": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"scoreAtAssign": {
									"type": "number",
									"minimum": 0
								},
								"assignedAtMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"coin": {
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
										},
										"mint": {
											"type": "string",
											"minLength": 1
										},
										"chain": {
											"type": "string",
											"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
										},
										"provider": {
											"type": "string",
											"minLength": 1
										},
										"providerMeta": {
											"type": "object",
											"properties": {
												"curveAddress": {
													"nullable": true,
													"type": "string",
													"minLength": 1
												},
												"graduatedPoolAddress": {
													"nullable": true,
													"type": "string",
													"minLength": 1
												},
												"curveKind": {
													"type": "string",
													"enum": [
														"v3",
														"v4"
													]
												},
												"curveRelease": {
													"type": "string",
													"enum": [
														"2.0",
														"3.0",
														"4.0",
														"5.0",
														"6.0",
														"7.0",
														"7.1",
														"8.0",
														"9.0"
													]
												},
												"hookAddress": {
													"nullable": true,
													"type": "string",
													"minLength": 1
												},
												"quoteToken": {
													"nullable": true,
													"type": "string",
													"minLength": 1
												},
												"quoteDecimals": {
													"type": "integer",
													"minimum": 0,
													"maximum": 255
												},
												"graduatedPoolId": {
													"nullable": true,
													"type": "string",
													"pattern": "^0x[0-9a-fA-F]{64}$"
												},
												"poolFeeBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"earlyBuyFeeBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"compounding": {
													"type": "boolean"
												},
												"compoundCommitBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"burnShareBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"holderShareBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"creatorCurveFees": {
													"type": "boolean"
												},
												"launchWindow": {
													"nullable": true,
													"type": "object",
													"properties": {
														"feeBps": {
															"type": "integer",
															"minimum": 0,
															"maximum": 10000
														},
														"decaySeconds": {
															"type": "integer",
															"minimum": 0,
															"maximum": 9007199254740991
														}
													},
													"required": [
														"feeBps",
														"decaySeconds"
													],
													"additionalProperties": false
												},
												"buyWindow": {
													"nullable": true,
													"type": "object",
													"properties": {
														"feeBps": {
															"type": "integer",
															"minimum": 0,
															"maximum": 10000
														},
														"decaySeconds": {
															"type": "integer",
															"minimum": 0,
															"maximum": 9007199254740991
														}
													},
													"required": [
														"feeBps",
														"decaySeconds"
													],
													"additionalProperties": false
												}
											},
											"required": [
												"curveAddress",
												"graduatedPoolAddress"
											],
											"additionalProperties": false
										},
										"bondingTarget": {
											"type": "string",
											"pattern": "^\\d+$"
										},
										"creatorWallet": {
											"type": "string",
											"minLength": 1
										},
										"ticker": {
											"type": "string",
											"minLength": 1
										},
										"name": {
											"type": "string",
											"minLength": 1
										},
										"metadataUri": {
											"type": "string",
											"minLength": 1
										},
										"lifecycleState": {
											"type": "string",
											"enum": [
												"launched",
												"awaiting-dev-buy",
												"curve-trading",
												"dormant",
												"graduating",
												"graduated",
												"abandoned",
												"launch-failed"
											]
										},
										"createdAt": {
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"confirmedAt": {
											"nullable": true,
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"curveCompletedAt": {
											"nullable": true,
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"graduatedAt": {
											"nullable": true,
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"signals": {
											"nullable": true,
											"type": "object",
											"properties": {
												"momentum": {
													"type": "number",
													"minimum": 0
												},
												"uniqueBuyers": {
													"type": "integer",
													"minimum": 0,
													"maximum": 9007199254740991
												},
												"buyVolumeWei": {
													"type": "string",
													"pattern": "^\\d+$"
												},
												"windowMs": {
													"type": "integer",
													"minimum": 0,
													"exclusiveMinimum": true,
													"maximum": 9007199254740991
												},
												"computedAt": {
													"type": "string",
													"format": "date-time",
													"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
												}
											},
											"required": [
												"momentum",
												"uniqueBuyers",
												"buyVolumeWei",
												"windowMs",
												"computedAt"
											],
											"additionalProperties": false
										},
										"curveProgress": {
											"nullable": true,
											"type": "number",
											"minimum": 0,
											"maximum": 1
										},
										"decimals": {
											"nullable": true,
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"createdAtMs": {
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"curveCompletedAtMs": {
											"nullable": true,
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"graduatedAtMs": {
											"nullable": true,
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"hidden": {
											"type": "object",
											"properties": {
												"at": {
													"type": "string",
													"format": "date-time",
													"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
												},
												"reason": {
													"nullable": true,
													"type": "string"
												}
											},
											"required": [
												"at",
												"reason"
											],
											"additionalProperties": false
										}
									},
									"required": [
										"id",
										"mint",
										"chain",
										"provider",
										"providerMeta",
										"bondingTarget",
										"creatorWallet",
										"ticker",
										"name",
										"metadataUri",
										"lifecycleState",
										"createdAt",
										"confirmedAt",
										"curveCompletedAt",
										"graduatedAt",
										"signals",
										"curveProgress",
										"decimals",
										"createdAtMs",
										"curveCompletedAtMs",
										"graduatedAtMs"
									],
									"additionalProperties": false
								}
							},
							"required": [
								"mint",
								"rank",
								"districtId",
								"stallIndex",
								"scoreAtAssign",
								"assignedAtMs",
								"coin"
							],
							"additionalProperties": false
						}
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"placements",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"NativeUsdRates": {
				"type": "object",
				"properties": {
					"rates": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"symbol": {
									"type": "string",
									"minLength": 1
								},
								"priceUsd": {
									"nullable": true,
									"type": "number",
									"minimum": 0,
									"exclusiveMinimum": true
								},
								"feedUpdatedAtMs": {
									"nullable": true,
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"stalenessBoundMs": {
									"nullable": true,
									"type": "integer",
									"minimum": 0,
									"exclusiveMinimum": true,
									"maximum": 9007199254740991
								},
								"sourceNetwork": {
									"nullable": true,
									"type": "string",
									"minLength": 1
								}
							},
							"required": [
								"symbol",
								"priceUsd",
								"feedUpdatedAtMs",
								"stalenessBoundMs",
								"sourceNetwork"
							],
							"additionalProperties": false
						}
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"rates",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"ActivityFeedView": {
				"type": "object",
				"properties": {
					"trades": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"id": {
									"type": "string",
									"minLength": 1
								},
								"timeMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"blockRef": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"direction": {
									"type": "string",
									"enum": [
										"buy",
										"sell"
									]
								},
								"username": {
									"type": "string",
									"minLength": 1
								},
								"wallet": {
									"type": "string",
									"minLength": 1
								},
								"amountNative": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"tokenAmount": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"price": {
									"type": "number",
									"minimum": 0
								},
								"venue": {
									"type": "string",
									"enum": [
										"curve",
										"dex"
									]
								},
								"isKol": {
									"type": "boolean"
								},
								"isVerified": {
									"type": "boolean"
								},
								"avatarUrl": {
									"nullable": true,
									"type": "string"
								},
								"isRegistered": {
									"type": "boolean"
								},
								"kind": {
									"type": "string",
									"enum": [
										"trade",
										"burn"
									]
								},
								"mint": {
									"type": "string",
									"minLength": 1
								},
								"chain": {
									"type": "string",
									"minLength": 1
								},
								"quoteAsset": {
									"nullable": true,
									"type": "object",
									"properties": {
										"address": {
											"type": "string",
											"minLength": 1
										},
										"symbol": {
											"type": "string",
											"minLength": 1
										},
										"name": {
											"type": "string",
											"minLength": 1
										},
										"decimals": {
											"type": "integer",
											"minimum": 0,
											"maximum": 255
										},
										"thumbUrl": {
											"nullable": true,
											"type": "string"
										},
										"unitPriceUsd": {
											"nullable": true,
											"type": "number",
											"minimum": 0
										}
									},
									"required": [
										"address",
										"symbol",
										"name",
										"decimals",
										"thumbUrl"
									],
									"additionalProperties": false
								}
							},
							"required": [
								"id",
								"timeMs",
								"blockRef",
								"direction",
								"username",
								"wallet",
								"amountNative",
								"tokenAmount",
								"price",
								"venue",
								"mint",
								"chain"
							],
							"additionalProperties": false
						}
					},
					"windowStartMs": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"trades",
					"windowStartMs",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"WalletHoldingsView": {
				"type": "object",
				"properties": {
					"wallet": {
						"type": "string",
						"minLength": 1
					},
					"holdings": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"mint": {
									"type": "string",
									"minLength": 1
								},
								"chain": {
									"type": "string",
									"minLength": 1
								},
								"ticker": {
									"type": "string"
								},
								"name": {
									"type": "string"
								},
								"metadataUri": {
									"type": "string"
								},
								"lifecycleState": {
									"type": "string",
									"minLength": 1
								},
								"balance": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"tokens": {
									"type": "number",
									"minimum": 0
								},
								"priceNative": {
									"type": "number",
									"minimum": 0
								},
								"valueNative": {
									"type": "number",
									"minimum": 0
								},
								"valuation": {
									"type": "string",
									"enum": [
										"exit",
										"mark"
									]
								},
								"quoteAsset": {
									"nullable": true,
									"type": "object",
									"properties": {
										"address": {
											"type": "string",
											"minLength": 1
										},
										"symbol": {
											"type": "string",
											"minLength": 1
										},
										"name": {
											"type": "string",
											"minLength": 1
										},
										"decimals": {
											"type": "integer",
											"minimum": 0,
											"maximum": 255
										},
										"thumbUrl": {
											"nullable": true,
											"type": "string"
										},
										"unitPriceUsd": {
											"nullable": true,
											"type": "number",
											"minimum": 0
										}
									},
									"required": [
										"address",
										"symbol",
										"name",
										"decimals",
										"thumbUrl"
									],
									"additionalProperties": false
								}
							},
							"required": [
								"mint",
								"chain",
								"ticker",
								"name",
								"metadataUri",
								"lifecycleState",
								"balance",
								"tokens",
								"priceNative",
								"valueNative",
								"valuation"
							],
							"additionalProperties": false
						}
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"wallet",
					"holdings",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"WalletPnlView": {
				"type": "object",
				"properties": {
					"wallet": {
						"type": "string",
						"minLength": 1
					},
					"coins": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"mint": {
									"type": "string",
									"minLength": 1
								},
								"chain": {
									"type": "string",
									"minLength": 1
								},
								"ticker": {
									"type": "string"
								},
								"name": {
									"type": "string"
								},
								"lifecycleState": {
									"type": "string",
									"enum": [
										"launched",
										"awaiting-dev-buy",
										"curve-trading",
										"dormant",
										"graduating",
										"graduated",
										"abandoned",
										"launch-failed"
									]
								},
								"spentNative": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"receivedNative": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"tokensBought": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"tokensSold": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"balance": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"priceNative": {
									"type": "number",
									"minimum": 0
								},
								"currentValueNative": {
									"type": "number",
									"minimum": 0
								},
								"valuation": {
									"type": "string",
									"enum": [
										"exit",
										"mark"
									]
								},
								"costBasisNative": {
									"type": "number",
									"minimum": 0
								},
								"realizedPnlNative": {
									"type": "number"
								},
								"unrealizedPnlNative": {
									"type": "number"
								},
								"totalPnlNative": {
									"type": "number"
								},
								"totalPnlPct": {
									"nullable": true,
									"type": "number"
								},
								"firstTradeAtMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"lastTradeAtMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"quoteAsset": {
									"nullable": true,
									"type": "object",
									"properties": {
										"address": {
											"type": "string",
											"minLength": 1
										},
										"symbol": {
											"type": "string",
											"minLength": 1
										},
										"name": {
											"type": "string",
											"minLength": 1
										},
										"decimals": {
											"type": "integer",
											"minimum": 0,
											"maximum": 255
										},
										"thumbUrl": {
											"nullable": true,
											"type": "string"
										},
										"unitPriceUsd": {
											"nullable": true,
											"type": "number",
											"minimum": 0
										}
									},
									"required": [
										"address",
										"symbol",
										"name",
										"decimals",
										"thumbUrl"
									],
									"additionalProperties": false
								}
							},
							"required": [
								"mint",
								"chain",
								"ticker",
								"name",
								"lifecycleState",
								"spentNative",
								"receivedNative",
								"tokensBought",
								"tokensSold",
								"balance",
								"priceNative",
								"currentValueNative",
								"valuation",
								"costBasisNative",
								"realizedPnlNative",
								"unrealizedPnlNative",
								"totalPnlNative",
								"totalPnlPct",
								"firstTradeAtMs",
								"lastTradeAtMs"
							],
							"additionalProperties": false
						}
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"wallet",
					"coins",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"WalletTradesView": {
				"type": "object",
				"properties": {
					"wallet": {
						"type": "string",
						"minLength": 1
					},
					"trades": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"id": {
									"type": "string",
									"minLength": 1
								},
								"timeMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"blockRef": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"direction": {
									"type": "string",
									"enum": [
										"buy",
										"sell"
									]
								},
								"username": {
									"type": "string",
									"minLength": 1
								},
								"wallet": {
									"type": "string",
									"minLength": 1
								},
								"amountNative": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"tokenAmount": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"price": {
									"type": "number",
									"minimum": 0
								},
								"venue": {
									"type": "string",
									"enum": [
										"curve",
										"dex"
									]
								},
								"isKol": {
									"type": "boolean"
								},
								"isVerified": {
									"type": "boolean"
								},
								"avatarUrl": {
									"nullable": true,
									"type": "string"
								},
								"isRegistered": {
									"type": "boolean"
								},
								"kind": {
									"type": "string",
									"enum": [
										"trade",
										"burn"
									]
								},
								"mint": {
									"type": "string",
									"minLength": 1
								},
								"chain": {
									"type": "string",
									"minLength": 1
								},
								"quoteAsset": {
									"nullable": true,
									"type": "object",
									"properties": {
										"address": {
											"type": "string",
											"minLength": 1
										},
										"symbol": {
											"type": "string",
											"minLength": 1
										},
										"name": {
											"type": "string",
											"minLength": 1
										},
										"decimals": {
											"type": "integer",
											"minimum": 0,
											"maximum": 255
										},
										"thumbUrl": {
											"nullable": true,
											"type": "string"
										},
										"unitPriceUsd": {
											"nullable": true,
											"type": "number",
											"minimum": 0
										}
									},
									"required": [
										"address",
										"symbol",
										"name",
										"decimals",
										"thumbUrl"
									],
									"additionalProperties": false
								}
							},
							"required": [
								"id",
								"timeMs",
								"blockRef",
								"direction",
								"username",
								"wallet",
								"amountNative",
								"tokenAmount",
								"price",
								"venue",
								"mint",
								"chain"
							],
							"additionalProperties": false
						}
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"wallet",
					"trades",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"WalletTradingStatsView": {
				"type": "object",
				"properties": {
					"wallet": {
						"type": "string",
						"minLength": 1
					},
					"coinsTraded": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"coinsWithSells": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"winningCoins": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"winRatePct": {
						"nullable": true,
						"type": "number",
						"minimum": 0
					},
					"realizedPnlNative": {
						"type": "number"
					},
					"unrealizedPnlNative": {
						"type": "number"
					},
					"totalPnlNative": {
						"type": "number"
					},
					"spentNative": {
						"type": "string",
						"pattern": "^\\d+$"
					},
					"receivedNative": {
						"type": "string",
						"pattern": "^\\d+$"
					},
					"roiPct": {
						"nullable": true,
						"type": "number"
					},
					"grossWinsNative": {
						"type": "number",
						"minimum": 0
					},
					"grossLossesNative": {
						"type": "number",
						"minimum": 0
					},
					"profitFactor": {
						"nullable": true,
						"type": "number",
						"minimum": 0
					},
					"avgWinNative": {
						"nullable": true,
						"type": "number",
						"minimum": 0
					},
					"avgLossNative": {
						"nullable": true,
						"type": "number",
						"minimum": 0
					},
					"bestCoin": {
						"nullable": true,
						"type": "object",
						"properties": {
							"mint": {
								"type": "string",
								"minLength": 1
							},
							"ticker": {
								"type": "string"
							},
							"name": {
								"type": "string"
							},
							"metadataUri": {
								"nullable": true,
								"type": "string"
							},
							"realizedPnlNative": {
								"type": "number"
							}
						},
						"required": [
							"mint",
							"ticker",
							"name",
							"metadataUri",
							"realizedPnlNative"
						],
						"additionalProperties": false
					},
					"worstCoin": {
						"nullable": true,
						"type": "object",
						"properties": {
							"mint": {
								"type": "string",
								"minLength": 1
							},
							"ticker": {
								"type": "string"
							},
							"name": {
								"type": "string"
							},
							"metadataUri": {
								"nullable": true,
								"type": "string"
							},
							"realizedPnlNative": {
								"type": "number"
							}
						},
						"required": [
							"mint",
							"ticker",
							"name",
							"metadataUri",
							"realizedPnlNative"
						],
						"additionalProperties": false
					},
					"avgHoldTimeMs": {
						"nullable": true,
						"type": "number",
						"minimum": 0
					},
					"graduationsBacked": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"tradingSinceMs": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"mostActiveDay": {
						"nullable": true,
						"type": "object",
						"properties": {
							"date": {
								"type": "string",
								"minLength": 1
							},
							"trades": {
								"type": "integer",
								"minimum": 0,
								"exclusiveMinimum": true,
								"maximum": 9007199254740991
							}
						},
						"required": [
							"date",
							"trades"
						],
						"additionalProperties": false
					},
					"windows": {
						"type": "object",
						"properties": {
							"24h": {
								"type": "object",
								"properties": {
									"trades": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buys": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"sells": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buyVolumeNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"sellVolumeNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"volumeNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"feesNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"avgTradeNative": {
										"nullable": true,
										"type": "number",
										"minimum": 0
									},
									"largestTradeNative": {
										"type": "number",
										"minimum": 0
									}
								},
								"required": [
									"trades",
									"buys",
									"sells",
									"buyVolumeNative",
									"sellVolumeNative",
									"volumeNative",
									"feesNative",
									"avgTradeNative",
									"largestTradeNative"
								],
								"additionalProperties": false
							},
							"7d": {
								"type": "object",
								"properties": {
									"trades": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buys": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"sells": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buyVolumeNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"sellVolumeNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"volumeNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"feesNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"avgTradeNative": {
										"nullable": true,
										"type": "number",
										"minimum": 0
									},
									"largestTradeNative": {
										"type": "number",
										"minimum": 0
									}
								},
								"required": [
									"trades",
									"buys",
									"sells",
									"buyVolumeNative",
									"sellVolumeNative",
									"volumeNative",
									"feesNative",
									"avgTradeNative",
									"largestTradeNative"
								],
								"additionalProperties": false
							},
							"30d": {
								"type": "object",
								"properties": {
									"trades": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buys": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"sells": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buyVolumeNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"sellVolumeNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"volumeNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"feesNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"avgTradeNative": {
										"nullable": true,
										"type": "number",
										"minimum": 0
									},
									"largestTradeNative": {
										"type": "number",
										"minimum": 0
									}
								},
								"required": [
									"trades",
									"buys",
									"sells",
									"buyVolumeNative",
									"sellVolumeNative",
									"volumeNative",
									"feesNative",
									"avgTradeNative",
									"largestTradeNative"
								],
								"additionalProperties": false
							},
							"all": {
								"type": "object",
								"properties": {
									"trades": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buys": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"sells": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buyVolumeNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"sellVolumeNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"volumeNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"feesNative": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"avgTradeNative": {
										"nullable": true,
										"type": "number",
										"minimum": 0
									},
									"largestTradeNative": {
										"type": "number",
										"minimum": 0
									}
								},
								"required": [
									"trades",
									"buys",
									"sells",
									"buyVolumeNative",
									"sellVolumeNative",
									"volumeNative",
									"feesNative",
									"avgTradeNative",
									"largestTradeNative"
								],
								"additionalProperties": false
							}
						},
						"required": [
							"24h",
							"7d",
							"30d",
							"all"
						],
						"additionalProperties": false
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"wallet",
					"coinsTraded",
					"coinsWithSells",
					"winningCoins",
					"winRatePct",
					"realizedPnlNative",
					"unrealizedPnlNative",
					"totalPnlNative",
					"spentNative",
					"receivedNative",
					"roiPct",
					"grossWinsNative",
					"grossLossesNative",
					"profitFactor",
					"avgWinNative",
					"avgLossNative",
					"bestCoin",
					"worstCoin",
					"avgHoldTimeMs",
					"graduationsBacked",
					"tradingSinceMs",
					"mostActiveDay",
					"windows",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"WalletPnlCurveView": {
				"type": "object",
				"properties": {
					"wallet": {
						"type": "string",
						"minLength": 1
					},
					"points": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"t": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"realizedPnlNative": {
									"type": "number"
								}
							},
							"required": [
								"t",
								"realizedPnlNative"
							],
							"additionalProperties": false
						}
					},
					"tradeCount": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"complete": {
						"type": "boolean"
					},
					"baselineRealizedNative": {
						"type": "number"
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"wallet",
					"points",
					"tradeCount",
					"complete",
					"baselineRealizedNative",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"CreatorStatsView": {
				"type": "object",
				"properties": {
					"wallet": {
						"type": "string",
						"minLength": 1
					},
					"coinsCreated": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"coinsGraduated": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"coinsInBonding": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"coinsFailed": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"graduationRatePct": {
						"nullable": true,
						"type": "number",
						"minimum": 0
					},
					"creatorFeesNative": {
						"type": "string",
						"pattern": "^\\d+$"
					},
					"creatorFeesToken": {
						"type": "string",
						"pattern": "^\\d+$"
					},
					"combinedFdvNative": {
						"type": "number",
						"minimum": 0
					},
					"bestLaunch": {
						"nullable": true,
						"type": "object",
						"properties": {
							"mint": {
								"type": "string",
								"minLength": 1
							},
							"ticker": {
								"type": "string"
							},
							"name": {
								"type": "string"
							},
							"metadataUri": {
								"nullable": true,
								"type": "string"
							},
							"athFdvNative": {
								"type": "number",
								"minimum": 0
							}
						},
						"required": [
							"mint",
							"ticker",
							"name",
							"metadataUri",
							"athFdvNative"
						],
						"additionalProperties": false
					},
					"volumeNative": {
						"type": "string",
						"pattern": "^\\d+$"
					},
					"uniqueTraders": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"totalHolders": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"coinsCreatorStillHolding": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"handoffsGiven": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"handoffsReceived": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"wallet",
					"coinsCreated",
					"coinsGraduated",
					"coinsInBonding",
					"coinsFailed",
					"graduationRatePct",
					"creatorFeesNative",
					"creatorFeesToken",
					"combinedFdvNative",
					"bestLaunch",
					"volumeNative",
					"uniqueTraders",
					"totalHolders",
					"coinsCreatorStillHolding",
					"handoffsGiven",
					"handoffsReceived",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"WatchlistView": {
				"type": "object",
				"properties": {
					"entries": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"mint": {
									"type": "string",
									"minLength": 1
								},
								"chain": {
									"type": "string",
									"minLength": 1
								},
								"ticker": {
									"type": "string",
									"minLength": 1
								},
								"name": {
									"type": "string",
									"minLength": 1
								},
								"metadataUri": {
									"nullable": true,
									"type": "string"
								},
								"lifecycleState": {
									"type": "string",
									"enum": [
										"launched",
										"awaiting-dev-buy",
										"curve-trading",
										"dormant",
										"graduating",
										"graduated",
										"abandoned",
										"launch-failed"
									]
								},
								"watchedAtMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"priceNative": {
									"type": "number",
									"minimum": 0
								},
								"fdvNative": {
									"type": "number",
									"minimum": 0
								},
								"fdvUsd": {
									"nullable": true,
									"type": "number",
									"minimum": 0
								},
								"volume24h": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"changePct": {
									"type": "object",
									"properties": {
										"m5": {
											"nullable": true,
											"type": "number"
										},
										"h1": {
											"nullable": true,
											"type": "number"
										},
										"h6": {
											"nullable": true,
											"type": "number"
										},
										"h24": {
											"nullable": true,
											"type": "number"
										}
									},
									"required": [
										"m5",
										"h1",
										"h6",
										"h24"
									],
									"additionalProperties": false
								},
								"curveProgressPct": {
									"type": "number",
									"minimum": 0,
									"maximum": 100
								},
								"holders": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"nativeDecimals": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"quoteAsset": {
									"nullable": true,
									"type": "object",
									"properties": {
										"address": {
											"type": "string",
											"minLength": 1
										},
										"symbol": {
											"type": "string",
											"minLength": 1
										},
										"name": {
											"type": "string",
											"minLength": 1
										},
										"decimals": {
											"type": "integer",
											"minimum": 0,
											"maximum": 255
										},
										"thumbUrl": {
											"nullable": true,
											"type": "string"
										},
										"unitPriceUsd": {
											"nullable": true,
											"type": "number",
											"minimum": 0
										}
									},
									"required": [
										"address",
										"symbol",
										"name",
										"decimals",
										"thumbUrl"
									],
									"additionalProperties": false
								}
							},
							"required": [
								"mint",
								"chain",
								"ticker",
								"name",
								"metadataUri",
								"lifecycleState",
								"watchedAtMs",
								"priceNative",
								"fdvNative",
								"fdvUsd",
								"volume24h",
								"changePct",
								"curveProgressPct",
								"holders",
								"nativeDecimals"
							],
							"additionalProperties": false
						}
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"entries",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"WatchlistToggleView": {
				"type": "object",
				"properties": {
					"mint": {
						"type": "string",
						"minLength": 1
					},
					"watching": {
						"type": "boolean"
					},
					"watcherCount": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					}
				},
				"required": [
					"mint",
					"watching",
					"watcherCount"
				],
				"additionalProperties": false
			},
			"LaunchBuildResponse": {
				"type": "object",
				"properties": {
					"launch": {
						"type": "object",
						"properties": {
							"id": {
								"type": "string",
								"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
							},
							"mint": {
								"type": "string",
								"minLength": 1
							},
							"chain": {
								"type": "string",
								"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
							},
							"provider": {
								"type": "string",
								"minLength": 1
							},
							"providerMeta": {
								"type": "object",
								"properties": {
									"curveAddress": {
										"nullable": true,
										"type": "string",
										"minLength": 1
									},
									"graduatedPoolAddress": {
										"nullable": true,
										"type": "string",
										"minLength": 1
									},
									"curveKind": {
										"type": "string",
										"enum": [
											"v3",
											"v4"
										]
									},
									"curveRelease": {
										"type": "string",
										"enum": [
											"2.0",
											"3.0",
											"4.0",
											"5.0",
											"6.0",
											"7.0",
											"7.1",
											"8.0",
											"9.0"
										]
									},
									"hookAddress": {
										"nullable": true,
										"type": "string",
										"minLength": 1
									},
									"quoteToken": {
										"nullable": true,
										"type": "string",
										"minLength": 1
									},
									"quoteDecimals": {
										"type": "integer",
										"minimum": 0,
										"maximum": 255
									},
									"graduatedPoolId": {
										"nullable": true,
										"type": "string",
										"pattern": "^0x[0-9a-fA-F]{64}$"
									},
									"poolFeeBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"earlyBuyFeeBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"compounding": {
										"type": "boolean"
									},
									"compoundCommitBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"burnShareBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"holderShareBps": {
										"type": "integer",
										"minimum": 0,
										"maximum": 10000
									},
									"creatorCurveFees": {
										"type": "boolean"
									},
									"launchWindow": {
										"nullable": true,
										"type": "object",
										"properties": {
											"feeBps": {
												"type": "integer",
												"minimum": 0,
												"maximum": 10000
											},
											"decaySeconds": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											}
										},
										"required": [
											"feeBps",
											"decaySeconds"
										],
										"additionalProperties": false
									},
									"buyWindow": {
										"nullable": true,
										"type": "object",
										"properties": {
											"feeBps": {
												"type": "integer",
												"minimum": 0,
												"maximum": 10000
											},
											"decaySeconds": {
												"type": "integer",
												"minimum": 0,
												"maximum": 9007199254740991
											}
										},
										"required": [
											"feeBps",
											"decaySeconds"
										],
										"additionalProperties": false
									}
								},
								"required": [
									"curveAddress",
									"graduatedPoolAddress"
								],
								"additionalProperties": false
							},
							"bondingTarget": {
								"type": "string",
								"pattern": "^\\d+$"
							},
							"creatorWallet": {
								"type": "string",
								"minLength": 1
							},
							"ticker": {
								"type": "string",
								"minLength": 1
							},
							"name": {
								"type": "string",
								"minLength": 1
							},
							"metadataUri": {
								"type": "string",
								"minLength": 1
							},
							"lifecycleState": {
								"type": "string",
								"enum": [
									"launched",
									"awaiting-dev-buy",
									"curve-trading",
									"dormant",
									"graduating",
									"graduated",
									"abandoned",
									"launch-failed"
								]
							},
							"createdAt": {
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"confirmedAt": {
								"nullable": true,
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"curveCompletedAt": {
								"nullable": true,
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"graduatedAt": {
								"nullable": true,
								"type": "string",
								"format": "date-time",
								"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
							},
							"signals": {
								"nullable": true,
								"type": "object",
								"properties": {
									"momentum": {
										"type": "number",
										"minimum": 0
									},
									"uniqueBuyers": {
										"type": "integer",
										"minimum": 0,
										"maximum": 9007199254740991
									},
									"buyVolumeWei": {
										"type": "string",
										"pattern": "^\\d+$"
									},
									"windowMs": {
										"type": "integer",
										"minimum": 0,
										"exclusiveMinimum": true,
										"maximum": 9007199254740991
									},
									"computedAt": {
										"type": "string",
										"format": "date-time",
										"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
									}
								},
								"required": [
									"momentum",
									"uniqueBuyers",
									"buyVolumeWei",
									"windowMs",
									"computedAt"
								],
								"additionalProperties": false
							},
							"curveProgress": {
								"nullable": true,
								"type": "number",
								"minimum": 0,
								"maximum": 1
							},
							"decimals": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"createdAtMs": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"curveCompletedAtMs": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"graduatedAtMs": {
								"nullable": true,
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"hidden": {
								"type": "object",
								"properties": {
									"at": {
										"type": "string",
										"format": "date-time",
										"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
									},
									"reason": {
										"nullable": true,
										"type": "string"
									}
								},
								"required": [
									"at",
									"reason"
								],
								"additionalProperties": false
							}
						},
						"required": [
							"id",
							"mint",
							"chain",
							"provider",
							"providerMeta",
							"bondingTarget",
							"creatorWallet",
							"ticker",
							"name",
							"metadataUri",
							"lifecycleState",
							"createdAt",
							"confirmedAt",
							"curveCompletedAt",
							"graduatedAt",
							"signals",
							"curveProgress",
							"decimals",
							"createdAtMs",
							"curveCompletedAtMs",
							"graduatedAtMs"
						],
						"additionalProperties": false
					},
					"txRequests": {
						"minItems": 1,
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"from": {
									"type": "string",
									"pattern": "^0x[0-9a-fA-F]{40}$"
								},
								"to": {
									"type": "string",
									"pattern": "^0x[0-9a-fA-F]{40}$"
								},
								"data": {
									"type": "string",
									"pattern": "^0x(?:[0-9a-fA-F]{2})*$"
								},
								"value": {
									"type": "string",
									"pattern": "^\\d+$"
								},
								"chainId": {
									"type": "integer",
									"minimum": 0,
									"exclusiveMinimum": true,
									"maximum": 9007199254740991
								},
								"gas": {
									"nullable": true,
									"type": "string",
									"pattern": "^\\d+$"
								}
							},
							"required": [
								"from",
								"to",
								"data",
								"value",
								"chainId",
								"gas"
							],
							"additionalProperties": false
						}
					},
					"launchTxIndex": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"burnAwaitsFirstBuy": {
						"type": "boolean",
						"enum": [
							true
						]
					},
					"devBuyTokensOut": {
						"type": "string",
						"pattern": "^\\d+$"
					}
				},
				"required": [
					"launch",
					"txRequests"
				],
				"additionalProperties": false
			},
			"WalletChallenge": {
				"type": "object",
				"properties": {
					"message": {
						"type": "string",
						"minLength": 1
					}
				},
				"required": [
					"message"
				],
				"additionalProperties": false
			},
			"WalletLink": {
				"type": "object",
				"properties": {
					"wallet": {
						"type": "string",
						"minLength": 1
					}
				},
				"required": [
					"wallet"
				],
				"additionalProperties": false
			},
			"WalletUnlink": {
				"type": "object",
				"properties": {
					"unlinked": {
						"type": "boolean"
					}
				},
				"required": [
					"unlinked"
				],
				"additionalProperties": false
			},
			"WalletModeration": {
				"type": "object",
				"properties": {
					"banned": {
						"type": "boolean"
					},
					"muted": {
						"type": "boolean"
					}
				},
				"required": [
					"banned",
					"muted"
				],
				"additionalProperties": false
			},
			"Profile": {
				"type": "object",
				"properties": {
					"wallet": {
						"type": "string",
						"minLength": 1
					},
					"username": {
						"nullable": true,
						"type": "string",
						"minLength": 1
					},
					"avatarKey": {
						"nullable": true,
						"type": "string",
						"pattern": "^[0-9a-f]{64}$"
					},
					"avatarUrl": {
						"nullable": true,
						"type": "string",
						"minLength": 1
					},
					"twitterHandle": {
						"nullable": true,
						"type": "string",
						"minLength": 1
					},
					"isVerified": {
						"type": "boolean"
					},
					"telegramHandle": {
						"nullable": true,
						"type": "string",
						"minLength": 1
					},
					"isTelegramVerified": {
						"type": "boolean"
					},
					"bio": {
						"nullable": true,
						"type": "string"
					},
					"showsStats": {
						"type": "boolean"
					},
					"isKol": {
						"type": "boolean"
					},
					"isRegistered": {
						"type": "boolean"
					},
					"createdAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					},
					"updatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"wallet",
					"username",
					"avatarKey",
					"avatarUrl",
					"twitterHandle",
					"telegramHandle",
					"bio",
					"showsStats",
					"isKol",
					"createdAt",
					"updatedAt"
				],
				"additionalProperties": false
			},
			"UsernameAvailability": {
				"type": "object",
				"properties": {
					"handle": {
						"type": "string",
						"minLength": 1
					},
					"available": {
						"type": "boolean"
					},
					"reason": {
						"nullable": true,
						"type": "string",
						"enum": [
							"invalid",
							"reserved",
							"taken"
						]
					}
				},
				"required": [
					"handle",
					"available",
					"reason"
				],
				"additionalProperties": false
			},
			"MediaUpload": {
				"type": "object",
				"properties": {
					"key": {
						"type": "string",
						"pattern": "^[0-9a-f]{64}$"
					},
					"kind": {
						"type": "string",
						"enum": [
							"image",
							"video"
						]
					},
					"status": {
						"type": "string",
						"enum": [
							"pending",
							"processing",
							"ready",
							"failed"
						]
					},
					"url": {
						"nullable": true,
						"type": "string",
						"minLength": 1
					},
					"posterUrl": {
						"nullable": true,
						"type": "string",
						"minLength": 1
					},
					"thumbUrl": {
						"nullable": true,
						"type": "string",
						"minLength": 1
					},
					"thumbMotionUrl": {
						"nullable": true,
						"type": "string",
						"minLength": 1
					},
					"width": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"exclusiveMinimum": true,
						"maximum": 9007199254740991
					},
					"height": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"exclusiveMinimum": true,
						"maximum": 9007199254740991
					},
					"durationMs": {
						"nullable": true,
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"failureReason": {
						"nullable": true,
						"type": "string",
						"minLength": 1
					}
				},
				"required": [
					"key",
					"kind",
					"status",
					"url",
					"posterUrl",
					"thumbUrl",
					"thumbMotionUrl",
					"width",
					"height",
					"durationMs",
					"failureReason"
				],
				"additionalProperties": false
			},
			"WorldPropsSnapshot": {
				"type": "object",
				"properties": {
					"worldId": {
						"type": "string",
						"minLength": 1
					},
					"props": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"id": {
									"type": "string",
									"format": "uuid",
									"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
								},
								"worldId": {
									"type": "string",
									"minLength": 1
								},
								"model": {
									"type": "string",
									"minLength": 1
								},
								"x": {
									"type": "number"
								},
								"z": {
									"type": "number"
								},
								"y": {
									"nullable": true,
									"type": "number"
								},
								"yaw": {
									"type": "number"
								},
								"scale": {
									"type": "number",
									"minimum": 0,
									"exclusiveMinimum": true
								},
								"updatedAtMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								}
							},
							"required": [
								"id",
								"worldId",
								"model",
								"x",
								"z",
								"y",
								"yaw",
								"scale",
								"updatedAtMs"
							],
							"additionalProperties": false
						}
					},
					"feedBindings": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"feedId": {
									"type": "string",
									"minLength": 1
								},
								"propIds": {
									"type": "array",
									"items": {
										"type": "string",
										"format": "uuid",
										"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
									}
								}
							},
							"required": [
								"feedId",
								"propIds"
							],
							"additionalProperties": false
						}
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"worldId",
					"props",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"WorldMapPlayers": {
				"type": "object",
				"properties": {
					"players": {
						"type": "array",
						"items": {
							"type": "array",
							"items": {
								"anyOf": [
									{
										"type": "number"
									},
									{
										"type": "number"
									}
								]
							},
							"minItems": 2,
							"maxItems": 2
						}
					},
					"total": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					}
				},
				"required": [
					"players",
					"total"
				],
				"additionalProperties": false
			},
			"WorldPlayerSearch": {
				"type": "object",
				"properties": {
					"players": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"peerId": {
									"nullable": true,
									"type": "string"
								},
								"name": {
									"type": "string"
								},
								"wallet": {
									"nullable": true,
									"type": "string",
									"minLength": 1
								},
								"username": {
									"nullable": true,
									"type": "string"
								},
								"online": {
									"type": "boolean"
								}
							},
							"required": [
								"peerId",
								"name",
								"wallet",
								"username",
								"online"
							],
							"additionalProperties": false
						}
					}
				},
				"required": [
					"players"
				],
				"additionalProperties": false
			},
			"BazaarSnapshot": {
				"type": "object",
				"properties": {
					"slots": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"slotIndex": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"tier": {
									"nullable": true,
									"type": "string",
									"enum": [
										"recency",
										"momentum"
									]
								},
								"coin": {
									"nullable": true,
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
										},
										"mint": {
											"type": "string",
											"minLength": 1
										},
										"chain": {
											"type": "string",
											"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
										},
										"provider": {
											"type": "string",
											"minLength": 1
										},
										"providerMeta": {
											"type": "object",
											"properties": {
												"curveAddress": {
													"nullable": true,
													"type": "string",
													"minLength": 1
												},
												"graduatedPoolAddress": {
													"nullable": true,
													"type": "string",
													"minLength": 1
												},
												"curveKind": {
													"type": "string",
													"enum": [
														"v3",
														"v4"
													]
												},
												"curveRelease": {
													"type": "string",
													"enum": [
														"2.0",
														"3.0",
														"4.0",
														"5.0",
														"6.0",
														"7.0",
														"7.1",
														"8.0",
														"9.0"
													]
												},
												"hookAddress": {
													"nullable": true,
													"type": "string",
													"minLength": 1
												},
												"quoteToken": {
													"nullable": true,
													"type": "string",
													"minLength": 1
												},
												"quoteDecimals": {
													"type": "integer",
													"minimum": 0,
													"maximum": 255
												},
												"graduatedPoolId": {
													"nullable": true,
													"type": "string",
													"pattern": "^0x[0-9a-fA-F]{64}$"
												},
												"poolFeeBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"earlyBuyFeeBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"compounding": {
													"type": "boolean"
												},
												"compoundCommitBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"burnShareBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"holderShareBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"creatorCurveFees": {
													"type": "boolean"
												},
												"launchWindow": {
													"nullable": true,
													"type": "object",
													"properties": {
														"feeBps": {
															"type": "integer",
															"minimum": 0,
															"maximum": 10000
														},
														"decaySeconds": {
															"type": "integer",
															"minimum": 0,
															"maximum": 9007199254740991
														}
													},
													"required": [
														"feeBps",
														"decaySeconds"
													],
													"additionalProperties": false
												},
												"buyWindow": {
													"nullable": true,
													"type": "object",
													"properties": {
														"feeBps": {
															"type": "integer",
															"minimum": 0,
															"maximum": 10000
														},
														"decaySeconds": {
															"type": "integer",
															"minimum": 0,
															"maximum": 9007199254740991
														}
													},
													"required": [
														"feeBps",
														"decaySeconds"
													],
													"additionalProperties": false
												}
											},
											"required": [
												"curveAddress",
												"graduatedPoolAddress"
											],
											"additionalProperties": false
										},
										"bondingTarget": {
											"type": "string",
											"pattern": "^\\d+$"
										},
										"creatorWallet": {
											"type": "string",
											"minLength": 1
										},
										"ticker": {
											"type": "string",
											"minLength": 1
										},
										"name": {
											"type": "string",
											"minLength": 1
										},
										"metadataUri": {
											"type": "string",
											"minLength": 1
										},
										"lifecycleState": {
											"type": "string",
											"enum": [
												"launched",
												"awaiting-dev-buy",
												"curve-trading",
												"dormant",
												"graduating",
												"graduated",
												"abandoned",
												"launch-failed"
											]
										},
										"createdAt": {
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"confirmedAt": {
											"nullable": true,
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"curveCompletedAt": {
											"nullable": true,
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"graduatedAt": {
											"nullable": true,
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"signals": {
											"nullable": true,
											"type": "object",
											"properties": {
												"momentum": {
													"type": "number",
													"minimum": 0
												},
												"uniqueBuyers": {
													"type": "integer",
													"minimum": 0,
													"maximum": 9007199254740991
												},
												"buyVolumeWei": {
													"type": "string",
													"pattern": "^\\d+$"
												},
												"windowMs": {
													"type": "integer",
													"minimum": 0,
													"exclusiveMinimum": true,
													"maximum": 9007199254740991
												},
												"computedAt": {
													"type": "string",
													"format": "date-time",
													"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
												}
											},
											"required": [
												"momentum",
												"uniqueBuyers",
												"buyVolumeWei",
												"windowMs",
												"computedAt"
											],
											"additionalProperties": false
										},
										"curveProgress": {
											"nullable": true,
											"type": "number",
											"minimum": 0,
											"maximum": 1
										},
										"decimals": {
											"nullable": true,
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"createdAtMs": {
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"curveCompletedAtMs": {
											"nullable": true,
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"graduatedAtMs": {
											"nullable": true,
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"hidden": {
											"type": "object",
											"properties": {
												"at": {
													"type": "string",
													"format": "date-time",
													"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
												},
												"reason": {
													"nullable": true,
													"type": "string"
												}
											},
											"required": [
												"at",
												"reason"
											],
											"additionalProperties": false
										}
									},
									"required": [
										"id",
										"mint",
										"chain",
										"provider",
										"providerMeta",
										"bondingTarget",
										"creatorWallet",
										"ticker",
										"name",
										"metadataUri",
										"lifecycleState",
										"createdAt",
										"confirmedAt",
										"curveCompletedAt",
										"graduatedAt",
										"signals",
										"curveProgress",
										"decimals",
										"createdAtMs",
										"curveCompletedAtMs",
										"graduatedAtMs"
									],
									"additionalProperties": false
								}
							},
							"required": [
								"slotIndex",
								"tier",
								"coin"
							],
							"additionalProperties": false
						}
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"slots",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"RingSnapshot": {
				"type": "object",
				"properties": {
					"slots": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"slotIndex": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"tier": {
									"nullable": true,
									"type": "string",
									"enum": [
										"recency",
										"performance"
									]
								},
								"coin": {
									"nullable": true,
									"type": "object",
									"properties": {
										"id": {
											"type": "string",
											"pattern": "^[0-9A-HJKMNP-TV-Z]{26}$"
										},
										"mint": {
											"type": "string",
											"minLength": 1
										},
										"chain": {
											"type": "string",
											"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
										},
										"provider": {
											"type": "string",
											"minLength": 1
										},
										"providerMeta": {
											"type": "object",
											"properties": {
												"curveAddress": {
													"nullable": true,
													"type": "string",
													"minLength": 1
												},
												"graduatedPoolAddress": {
													"nullable": true,
													"type": "string",
													"minLength": 1
												},
												"curveKind": {
													"type": "string",
													"enum": [
														"v3",
														"v4"
													]
												},
												"curveRelease": {
													"type": "string",
													"enum": [
														"2.0",
														"3.0",
														"4.0",
														"5.0",
														"6.0",
														"7.0",
														"7.1",
														"8.0",
														"9.0"
													]
												},
												"hookAddress": {
													"nullable": true,
													"type": "string",
													"minLength": 1
												},
												"quoteToken": {
													"nullable": true,
													"type": "string",
													"minLength": 1
												},
												"quoteDecimals": {
													"type": "integer",
													"minimum": 0,
													"maximum": 255
												},
												"graduatedPoolId": {
													"nullable": true,
													"type": "string",
													"pattern": "^0x[0-9a-fA-F]{64}$"
												},
												"poolFeeBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"earlyBuyFeeBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"compounding": {
													"type": "boolean"
												},
												"compoundCommitBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"burnShareBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"holderShareBps": {
													"type": "integer",
													"minimum": 0,
													"maximum": 10000
												},
												"creatorCurveFees": {
													"type": "boolean"
												},
												"launchWindow": {
													"nullable": true,
													"type": "object",
													"properties": {
														"feeBps": {
															"type": "integer",
															"minimum": 0,
															"maximum": 10000
														},
														"decaySeconds": {
															"type": "integer",
															"minimum": 0,
															"maximum": 9007199254740991
														}
													},
													"required": [
														"feeBps",
														"decaySeconds"
													],
													"additionalProperties": false
												},
												"buyWindow": {
													"nullable": true,
													"type": "object",
													"properties": {
														"feeBps": {
															"type": "integer",
															"minimum": 0,
															"maximum": 10000
														},
														"decaySeconds": {
															"type": "integer",
															"minimum": 0,
															"maximum": 9007199254740991
														}
													},
													"required": [
														"feeBps",
														"decaySeconds"
													],
													"additionalProperties": false
												}
											},
											"required": [
												"curveAddress",
												"graduatedPoolAddress"
											],
											"additionalProperties": false
										},
										"bondingTarget": {
											"type": "string",
											"pattern": "^\\d+$"
										},
										"creatorWallet": {
											"type": "string",
											"minLength": 1
										},
										"ticker": {
											"type": "string",
											"minLength": 1
										},
										"name": {
											"type": "string",
											"minLength": 1
										},
										"metadataUri": {
											"type": "string",
											"minLength": 1
										},
										"lifecycleState": {
											"type": "string",
											"enum": [
												"launched",
												"awaiting-dev-buy",
												"curve-trading",
												"dormant",
												"graduating",
												"graduated",
												"abandoned",
												"launch-failed"
											]
										},
										"createdAt": {
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"confirmedAt": {
											"nullable": true,
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"curveCompletedAt": {
											"nullable": true,
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"graduatedAt": {
											"nullable": true,
											"type": "string",
											"format": "date-time",
											"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
										},
										"signals": {
											"nullable": true,
											"type": "object",
											"properties": {
												"momentum": {
													"type": "number",
													"minimum": 0
												},
												"uniqueBuyers": {
													"type": "integer",
													"minimum": 0,
													"maximum": 9007199254740991
												},
												"buyVolumeWei": {
													"type": "string",
													"pattern": "^\\d+$"
												},
												"windowMs": {
													"type": "integer",
													"minimum": 0,
													"exclusiveMinimum": true,
													"maximum": 9007199254740991
												},
												"computedAt": {
													"type": "string",
													"format": "date-time",
													"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
												}
											},
											"required": [
												"momentum",
												"uniqueBuyers",
												"buyVolumeWei",
												"windowMs",
												"computedAt"
											],
											"additionalProperties": false
										},
										"curveProgress": {
											"nullable": true,
											"type": "number",
											"minimum": 0,
											"maximum": 1
										},
										"decimals": {
											"nullable": true,
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"createdAtMs": {
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"curveCompletedAtMs": {
											"nullable": true,
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"graduatedAtMs": {
											"nullable": true,
											"type": "integer",
											"minimum": 0,
											"maximum": 9007199254740991
										},
										"hidden": {
											"type": "object",
											"properties": {
												"at": {
													"type": "string",
													"format": "date-time",
													"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
												},
												"reason": {
													"nullable": true,
													"type": "string"
												}
											},
											"required": [
												"at",
												"reason"
											],
											"additionalProperties": false
										}
									},
									"required": [
										"id",
										"mint",
										"chain",
										"provider",
										"providerMeta",
										"bondingTarget",
										"creatorWallet",
										"ticker",
										"name",
										"metadataUri",
										"lifecycleState",
										"createdAt",
										"confirmedAt",
										"curveCompletedAt",
										"graduatedAt",
										"signals",
										"curveProgress",
										"decimals",
										"createdAtMs",
										"curveCompletedAtMs",
										"graduatedAtMs"
									],
									"additionalProperties": false
								}
							},
							"required": [
								"slotIndex",
								"tier",
								"coin"
							],
							"additionalProperties": false
						}
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"slots",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"AdBoardsSnapshot": {
				"type": "object",
				"properties": {
					"worldId": {
						"type": "string",
						"minLength": 1
					},
					"boards": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"id": {
									"type": "string",
									"minLength": 1
								},
								"worldId": {
									"type": "string",
									"minLength": 1
								},
								"x": {
									"type": "number"
								},
								"z": {
									"type": "number"
								},
								"y": {
									"nullable": true,
									"type": "number"
								},
								"yaw": {
									"type": "number"
								},
								"tier": {
									"type": "string",
									"enum": [
										"small",
										"medium",
										"large"
									]
								},
								"status": {
									"type": "string",
									"enum": [
										"active",
										"disabled"
									]
								},
								"slotCount": {
									"type": "integer",
									"minimum": 0,
									"exclusiveMinimum": true,
									"maximum": 9007199254740991
								}
							},
							"required": [
								"id",
								"worldId",
								"x",
								"z",
								"y",
								"yaw",
								"tier",
								"status",
								"slotCount"
							],
							"additionalProperties": false
						}
					},
					"placements": {
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"boardId": {
									"type": "string",
									"minLength": 1
								},
								"slotIndex": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								},
								"assetUrl": {
									"type": "string",
									"minLength": 1
								},
								"posterUrl": {
									"nullable": true,
									"type": "string",
									"minLength": 1
								},
								"contentType": {
									"type": "string",
									"minLength": 1
								},
								"kind": {
									"type": "string",
									"enum": [
										"image",
										"video"
									]
								},
								"durationMs": {
									"nullable": true,
									"type": "number",
									"minimum": 0
								},
								"clickUrl": {
									"type": "string",
									"minLength": 1
								},
								"endsAtMs": {
									"type": "integer",
									"minimum": 0,
									"maximum": 9007199254740991
								}
							},
							"required": [
								"boardId",
								"slotIndex",
								"assetUrl",
								"posterUrl",
								"contentType",
								"kind",
								"durationMs",
								"clickUrl",
								"endsAtMs"
							],
							"additionalProperties": false
						}
					},
					"publicBookingEnabled": {
						"type": "boolean"
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"worldId",
					"boards",
					"placements",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"AdVenuePulse": {
				"type": "object",
				"properties": {
					"volume24hWei": {
						"type": "string",
						"pattern": "^\\d+$"
					},
					"volume24hUsd": {
						"nullable": true,
						"type": "number"
					},
					"trades24h": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"activeTraders24h": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"playersOnline": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"boardsActive": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"boardsOccupied": {
						"type": "integer",
						"minimum": 0,
						"maximum": 9007199254740991
					},
					"generatedAt": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					}
				},
				"required": [
					"volume24hWei",
					"volume24hUsd",
					"trades24h",
					"activeTraders24h",
					"playersOnline",
					"boardsActive",
					"boardsOccupied",
					"generatedAt"
				],
				"additionalProperties": false
			},
			"TokenList": {
				"type": "object",
				"properties": {
					"name": {
						"type": "string",
						"minLength": 1,
						"maxLength": 30,
						"pattern": "^[\\w ]+$"
					},
					"timestamp": {
						"type": "string",
						"format": "date-time",
						"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
					},
					"version": {
						"type": "object",
						"properties": {
							"major": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"minor": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							},
							"patch": {
								"type": "integer",
								"minimum": 0,
								"maximum": 9007199254740991
							}
						},
						"required": [
							"major",
							"minor",
							"patch"
						],
						"additionalProperties": false
					},
					"tokens": {
						"minItems": 1,
						"maxItems": 10000,
						"type": "array",
						"items": {
							"type": "object",
							"properties": {
								"chainId": {
									"type": "integer",
									"minimum": 1,
									"maximum": 9007199254740991
								},
								"address": {
									"type": "string",
									"pattern": "^(?:0x[a-fA-F0-9]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$"
								},
								"decimals": {
									"type": "integer",
									"minimum": 0,
									"maximum": 255
								},
								"name": {
									"type": "string",
									"maxLength": 60,
									"pattern": "^[ \\S]*$"
								},
								"symbol": {
									"type": "string",
									"maxLength": 20,
									"pattern": "^\\S*$"
								},
								"logoURI": {
									"type": "string",
									"format": "uri"
								},
								"tags": {
									"maxItems": 10,
									"type": "array",
									"items": {
										"type": "string",
										"minLength": 1,
										"maxLength": 10,
										"pattern": "^\\w+$"
									}
								},
								"extensions": {
									"type": "object",
									"additionalProperties": {
										"anyOf": [
											{
												"anyOf": [
													{
														"type": "string",
														"minLength": 1,
														"maxLength": 42
													},
													{
														"type": "boolean"
													},
													{
														"type": "number"
													},
													{
														"type": "string",
														"nullable": true,
														"enum": [
															null
														]
													}
												]
											},
											{
												"type": "object",
												"additionalProperties": {
													"anyOf": [
														{
															"anyOf": [
																{
																	"type": "string",
																	"minLength": 1,
																	"maxLength": 42
																},
																{
																	"type": "boolean"
																},
																{
																	"type": "number"
																},
																{
																	"type": "string",
																	"nullable": true,
																	"enum": [
																		null
																	]
																}
															]
														},
														{
															"type": "object",
															"additionalProperties": {
																"anyOf": [
																	{
																		"type": "string",
																		"minLength": 1,
																		"maxLength": 42
																	},
																	{
																		"type": "boolean"
																	},
																	{
																		"type": "number"
																	},
																	{
																		"type": "string",
																		"nullable": true,
																		"enum": [
																			null
																		]
																	}
																]
															}
														}
													]
												}
											}
										]
									}
								}
							},
							"required": [
								"chainId",
								"address",
								"decimals",
								"name",
								"symbol"
							],
							"additionalProperties": false
						}
					},
					"tokenMap": {
						"type": "object",
						"additionalProperties": {
							"type": "object",
							"properties": {
								"chainId": {
									"type": "integer",
									"minimum": 1,
									"maximum": 9007199254740991
								},
								"address": {
									"type": "string",
									"pattern": "^(?:0x[a-fA-F0-9]{40}|[1-9A-HJ-NP-Za-km-z]{32,44})$"
								},
								"decimals": {
									"type": "integer",
									"minimum": 0,
									"maximum": 255
								},
								"name": {
									"type": "string",
									"maxLength": 60,
									"pattern": "^[ \\S]*$"
								},
								"symbol": {
									"type": "string",
									"maxLength": 20,
									"pattern": "^\\S*$"
								},
								"logoURI": {
									"type": "string",
									"format": "uri"
								},
								"tags": {
									"maxItems": 10,
									"type": "array",
									"items": {
										"type": "string",
										"minLength": 1,
										"maxLength": 10,
										"pattern": "^\\w+$"
									}
								},
								"extensions": {
									"type": "object",
									"additionalProperties": {
										"anyOf": [
											{
												"anyOf": [
													{
														"type": "string",
														"minLength": 1,
														"maxLength": 42
													},
													{
														"type": "boolean"
													},
													{
														"type": "number"
													},
													{
														"type": "string",
														"nullable": true,
														"enum": [
															null
														]
													}
												]
											},
											{
												"type": "object",
												"additionalProperties": {
													"anyOf": [
														{
															"anyOf": [
																{
																	"type": "string",
																	"minLength": 1,
																	"maxLength": 42
																},
																{
																	"type": "boolean"
																},
																{
																	"type": "number"
																},
																{
																	"type": "string",
																	"nullable": true,
																	"enum": [
																		null
																	]
																}
															]
														},
														{
															"type": "object",
															"additionalProperties": {
																"anyOf": [
																	{
																		"type": "string",
																		"minLength": 1,
																		"maxLength": 42
																	},
																	{
																		"type": "boolean"
																	},
																	{
																		"type": "number"
																	},
																	{
																		"type": "string",
																		"nullable": true,
																		"enum": [
																			null
																		]
																	}
																]
															}
														}
													]
												}
											}
										]
									}
								}
							},
							"required": [
								"chainId",
								"address",
								"decimals",
								"name",
								"symbol"
							],
							"additionalProperties": false
						}
					},
					"keywords": {
						"maxItems": 20,
						"type": "array",
						"items": {
							"type": "string",
							"minLength": 1,
							"maxLength": 20,
							"pattern": "^[\\w ]+$"
						}
					},
					"tags": {
						"type": "object",
						"additionalProperties": {
							"type": "object",
							"properties": {
								"name": {
									"type": "string",
									"minLength": 1,
									"maxLength": 20,
									"pattern": "^[ \\w]+$"
								},
								"description": {
									"type": "string",
									"minLength": 1,
									"maxLength": 200,
									"pattern": "^[ \\w.,:]+$"
								}
							},
							"required": [
								"name",
								"description"
							],
							"additionalProperties": false
						}
					},
					"logoURI": {
						"type": "string",
						"format": "uri"
					}
				},
				"required": [
					"name",
					"timestamp",
					"version",
					"tokens"
				],
				"additionalProperties": false
			}
		}
	}
}
