{
  "openapi": "3.1.0",
  "info": {
    "title": "Blast Partner API",
    "version": "1.0.0",
    "description": "Build your frontend with Blast’s read API.\n\n**Available now:** presale lists, featured presales, presale details, price history, search, and market status. Search has partial coverage: the profiles group is unavailable and launchpad coins are not indexed.\n\n**Coming soon:** discovery, holder snapshots, launch activity, curve pool summaries, pool candles, and venue trades. Read their full contracts and examples now to plan your integration. Live requests return 503 until launchpad indexing is enabled; retrying or replacing your key will not change this.\n\nVerified with a real partner key on **21 October 2026**, through both the API and this docs relay. Revoking that key caused all 12 routes to reject subsequent requests with 401.\n\n**Authenticate once:** enter your key in **Authentication**, then use **Test Request** beside any endpoint. Send `X-Blast-Partner-Key` on every request. We recommend calling from your backend; a browser key is visible to its users. The reference keeps credentials in memory, and live requests pass through the Blast docs relay.\n\n**TypeScript SDK:** install the published REST client with `npm install @interest-protocol/blast-partner-client@0.1.0`. Keep your existing credential on your server; see the [server-side SDK quickstart](/developers/partner-api/#typescript-sdk). The SDK covers the six live reads and does not expose coming-soon launchpad methods.\n\n**Versioning:** all endpoints use `/api/v1`. Breaking changes require a new major version; v1 remains available during an announced migration. Existing unversioned URLs continue working. [Compatibility policy](/developers/partner-api/versioning/).\n\n**Read-only:** the operations below use GET. HEAD is also supported with identical authorization and quota accounting, but no response body. Writes, private account data, and direct indexer access are excluded.\n\n**Rate limits:** 300 requests per fixed minute and 50,000 per UTC day, shared across all keys for a partner. Endpoint/IP limits also apply. On 429, honor `Retry-After`; remaining-quota headers are not guaranteed.\n\n**Examples vs. live data:** examples are available without a key. Examples labeled “Production response” are real responses captured on the date shown. Other examples are contract fixtures or illustrative data, including success examples for coming-soon endpoints. Replace example IDs with existing resources for live calls; captures are historical snapshots. A valid key authorizes the documented read endpoints even while the Blast frontend is private. Missing resources can return 404.\n\n[Authentication guide](/developers/partner-api/) · [Pagination](/developers/partner-api/pagination/) · [Rate limits and errors](/developers/partner-api/rate-limits/)",
    "contact": {
      "name": "Blast",
      "url": "https://www.blast.fun"
    }
  },
  "servers": [
    {
      "url": "https://www.blast.fun",
      "description": "Production · Partner API v1"
    }
  ],
  "security": [
    {
      "PartnerKey": []
    }
  ],
  "tags": [
    {
      "name": "Presales",
      "description": "Find presales, inspect their public details, and read price history."
    },
    {
      "name": "Discovery",
      "description": "Browse launches and search public content. Handle each section’s freshness state."
    },
    {
      "name": "Market data",
      "description": "Indexed balances, activity, pool economics, and historical trades."
    }
  ],
  "paths": {
    "/api/v1/presales": {
      "get": {
        "operationId": "presales",
        "summary": "List presales",
        "tags": [
          "Presales"
        ],
        "description": "Read public presale summaries, filtered before sorting and pagination. Viewer commitments and watchlist state are excluded.\n\n**Filter by partner:** set `partner_id` to the on-chain partner object ID. Associations become readable after the indexer processes `PresaleOpened`. An unknown partner returns an empty list. This filter does not change your key's permissions.\n\n**Pagination:** pass `next_cursor` as `cursor` and keep `status`, `sort`, `partner_id`, `verified_team`, and `audited` unchanged. Stop when `next_cursor` is null. Computed sort values can change between reads; deduplicate by `presale_id`. Each parameter may appear only once.\n\n[See a complete pagination example](/developers/partner-api/pagination/).",
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Which lifecycle group to list.",
            "schema": {
              "type": "string",
              "enum": [
                "live",
                "upcoming",
                "ended"
              ],
              "default": "live"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "description": "Depends on status. Live: ending (default), fastest, backed. Upcoming: opening (default), interest. Ended: recent (default), best, backed.",
            "schema": {
              "type": "string",
              "enum": [
                "ending",
                "fastest",
                "backed",
                "opening",
                "interest",
                "recent",
                "best"
              ]
            }
          },
          {
            "name": "partner_id",
            "in": "query",
            "required": false,
            "description": "Only presales associated with this on-chain partner object ID. This is not an API-key account name or wallet address. Omit to include all partners.",
            "schema": {
              "type": "string",
              "pattern": "^0x[0-9a-f]{64}$",
              "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum results per page; between 1 and 50.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 20
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The non-null continuation token from the previous response. Keep all filters unchanged.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "verified_team",
            "in": "query",
            "required": false,
            "description": "Set true to require a verified team. Omit to include both.",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ]
            }
          },
          {
            "name": "audited",
            "in": "query",
            "required": false,
            "description": "Set true to require an audit. Omit to include both.",
            "schema": {
              "type": "string",
              "enum": [
                "true"
              ]
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful read. Production examples were captured with a real partner key on 2026-10-21; other examples are illustrative or contract fixtures.",
            "headers": {
              "Cache-Control": {
                "description": "Partner responses use no-store. Do not assume shared CDN caching.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresaleListPage"
                },
                "examples": {
                  "production": {
                    "summary": "Production response · 2026-10-21",
                    "description": "Captured using a real partner key; values are a historical snapshot, not a guarantee of current results.",
                    "value": {
                      "presales": [
                        {
                          "presale_id": "0x22cc1e8a95137444a359a6c5da5fea927bad0d0a0e3e86166806747477c5b2d6",
                          "sale_decimals": 9,
                          "name": "Blastoff",
                          "symbol": "BLASTOFF",
                          "icon_url": "https://p7ns5xeckaua4oov.public.blob.vercel-storage.com/create-logos/e8a94ab348b182a867a627d88cfc90a2db94b991703f023ec4b3f1ccf1c81b61.webp",
                          "phase": "open",
                          "venue": "cetus",
                          "start_ms": 1792522177216,
                          "end_ms": 1792608577216,
                          "ended_ms": null,
                          "launched_ms": null,
                          "target_usd": "20000.00",
                          "raised_usd": "0.00",
                          "quote_symbol": "USDC",
                          "quote_type": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                          "quote_decimals": 6,
                          "target_atoms": "20000000000",
                          "raised_atoms": "0",
                          "fill_bps": 0,
                          "participants": 0,
                          "allowlisted": true,
                          "interested": 0,
                          "presale_price_usd": null,
                          "presale_price_quote": null,
                          "price_usd": null,
                          "multiple": null,
                          "verified_team": false,
                          "audited": false,
                          "metadata": {
                            "tagline": "Build your strategy, blast the rocket into space.",
                            "site": null,
                            "x_handle": null,
                            "telegram": null,
                            "docs_url": null,
                            "audit_url": null,
                            "cover": {
                              "url": "https://p7ns5xeckaua4oov.public.blob.vercel-storage.com/draft-covers/ffbc6077-1d98-4204-8dee-22d64fb66af1/8f07f57e03afe865db080a96f63a6556f3baf33b85f8fd70e25d627bd9a09b0a.webp",
                              "width": 1536,
                              "height": 512
                            },
                            "launch_at_ms": null
                          },
                          "hard_cap": false
                        },
                        {
                          "presale_id": "0xb457c5a68d9a4d58e1404d91e517422d7f5fe1ea26a26b2f3501012c53ab2423",
                          "sale_decimals": 9,
                          "name": "BLASTOFF",
                          "symbol": "BLASTOFF",
                          "icon_url": "https://p7ns5xeckaua4oov.public.blob.vercel-storage.com/create-logos/aa65a235c8325818cc09d97ad8a2aaabe21bfb4ad4da57248fcd7a0b365a4ff3.webp",
                          "phase": "open",
                          "venue": "bluefin",
                          "start_ms": 1792522869912,
                          "end_ms": 1792609269912,
                          "ended_ms": null,
                          "launched_ms": null,
                          "target_usd": "20000.00",
                          "raised_usd": "0.00",
                          "quote_symbol": "USDC",
                          "quote_type": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                          "quote_decimals": 6,
                          "target_atoms": "20000000000",
                          "raised_atoms": "0",
                          "fill_bps": 0,
                          "participants": 0,
                          "allowlisted": false,
                          "interested": 0,
                          "presale_price_usd": null,
                          "presale_price_quote": null,
                          "price_usd": null,
                          "multiple": null,
                          "verified_team": false,
                          "audited": false,
                          "metadata": {
                            "tagline": "Plan strategy, blast off.",
                            "site": null,
                            "x_handle": null,
                            "telegram": null,
                            "docs_url": null,
                            "audit_url": null,
                            "cover": {
                              "url": "https://p7ns5xeckaua4oov.public.blob.vercel-storage.com/draft-covers/1cc0d91f-1bd8-4df8-963b-96638b749727/8f07f57e03afe865db080a96f63a6556f3baf33b85f8fd70e25d627bd9a09b0a.webp",
                              "width": 1536,
                              "height": 512
                            },
                            "launch_at_ms": null
                          },
                          "hard_cap": false
                        }
                      ],
                      "next_cursor": null,
                      "as_of": {
                        "checkpoint": 336332901,
                        "timestamp_ms": 1792550378322,
                        "lag_ms": 1065
                      }
                    }
                  },
                  "page": {
                    "summary": "200 · more results",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "presales": [
                        {
                          "presale_id": "0x00000000000000000000000000000000000000000000000000000000000000a1",
                          "name": "Meridian",
                          "symbol": "MRDN",
                          "icon_url": "https://example.com/meridian.png",
                          "phase": "open",
                          "venue": "cetus",
                          "start_ms": 1792411200000,
                          "end_ms": 1792670400000,
                          "ended_ms": null,
                          "launched_ms": null,
                          "target_usd": "250000.00",
                          "raised_usd": "184221.00",
                          "quote_symbol": "USDC",
                          "quote_type": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                          "quote_decimals": 6,
                          "sale_decimals": 9,
                          "target_atoms": "250000000000",
                          "raised_atoms": "184221000000",
                          "fill_bps": 7368,
                          "participants": 68,
                          "allowlisted": false,
                          "interested": 128,
                          "presale_price_usd": null,
                          "presale_price_quote": null,
                          "price_usd": null,
                          "multiple": null,
                          "verified_team": true,
                          "audited": false,
                          "metadata": null
                        }
                      ],
                      "next_cursor": "WyIxNzkyNjcwNDAwMDAwIiwiMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMGExIl0",
                      "as_of": {
                        "checkpoint": 326274009,
                        "timestamp_ms": 1792584000000,
                        "lag_ms": 412
                      }
                    }
                  },
                  "lastPage": {
                    "summary": "200 · final page",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "presales": [
                        {
                          "presale_id": "0x00000000000000000000000000000000000000000000000000000000000000a1",
                          "name": "Meridian",
                          "symbol": "MRDN",
                          "icon_url": "https://example.com/meridian.png",
                          "phase": "open",
                          "venue": "cetus",
                          "start_ms": 1792411200000,
                          "end_ms": 1792670400000,
                          "ended_ms": null,
                          "launched_ms": null,
                          "target_usd": "250000.00",
                          "raised_usd": "184221.00",
                          "quote_symbol": "USDC",
                          "quote_type": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                          "quote_decimals": 6,
                          "sale_decimals": 9,
                          "target_atoms": "250000000000",
                          "raised_atoms": "184221000000",
                          "fill_bps": 7368,
                          "participants": 68,
                          "allowlisted": false,
                          "interested": 128,
                          "presale_price_usd": null,
                          "presale_price_quote": null,
                          "price_usd": null,
                          "multiple": null,
                          "verified_team": true,
                          "audited": false,
                          "metadata": null
                        }
                      ],
                      "next_cursor": null,
                      "as_of": {
                        "checkpoint": 326274009,
                        "timestamp_ms": 1792584000000,
                        "lag_ms": 412
                      }
                    }
                  },
                  "empty": {
                    "summary": "200 · no matching presales",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "presales": [],
                      "next_cursor": null,
                      "as_of": {
                        "checkpoint": 326274009,
                        "timestamp_ms": 1792584000000,
                        "lag_ms": 412
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid path or query parameters. Fix the request before retrying.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_parameter",
                    "message": "A path or query parameter is invalid."
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is malformed, unknown, or revoked. Replace it; do not retry the same key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_key_invalid",
                    "message": "A valid partner API key is required."
                  }
                }
              }
            }
          },
          "403": {
            "description": "The route or browser origin is not allowed for this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_origin_forbidden",
                    "message": "This origin is not enabled for this partner."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown resource or unsupported route/venue. Valid partner keys can read documented endpoints independently of frontend launch status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "Not found."
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Not Found"
              }
            }
          },
          "429": {
            "description": "Partner quota or endpoint/IP limit reached. Wait for Retry-After when present, then use bounded retries with jitter.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_rate_limited",
                    "message": "Too many requests."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Key verification, rate-limit storage, or the data source is temporarily unavailable.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_api_unavailable",
                    "message": "Partner access is temporarily unavailable."
                  }
                }
              }
            }
          }
        },
        "x-blast-anchor": "list-presales"
      }
    },
    "/api/v1/presales/featured": {
      "get": {
        "operationId": "featured",
        "summary": "Featured presales",
        "tags": [
          "Presales"
        ],
        "description": "Blast’s ordered featured presales that are open or pending. An empty list is a valid success. No pagination or query parameters.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Successful read. Production examples were captured with a real partner key on 2026-10-21; other examples are illustrative or contract fixtures.",
            "headers": {
              "Cache-Control": {
                "description": "Partner responses use no-store. Do not assume shared CDN caching.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "presales": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/PresaleSummary"
                      }
                    }
                  },
                  "required": [
                    "presales"
                  ],
                  "additionalProperties": false
                },
                "examples": {
                  "production": {
                    "summary": "Production response · 2026-10-21",
                    "description": "Captured using a real partner key; values are a historical snapshot, not a guarantee of current results.",
                    "value": {
                      "presales": []
                    }
                  },
                  "featured": {
                    "summary": "Success · example data",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "presales": [
                        {
                          "presale_id": "0x00000000000000000000000000000000000000000000000000000000000000a1",
                          "name": "Meridian",
                          "symbol": "MRDN",
                          "icon_url": "https://example.com/meridian.png",
                          "phase": "open",
                          "venue": "cetus",
                          "start_ms": 1792411200000,
                          "end_ms": 1792670400000,
                          "ended_ms": null,
                          "launched_ms": null,
                          "target_usd": "250000.00",
                          "raised_usd": "184221.00",
                          "quote_symbol": "USDC",
                          "quote_type": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                          "quote_decimals": 6,
                          "sale_decimals": 9,
                          "target_atoms": "250000000000",
                          "raised_atoms": "184221000000",
                          "fill_bps": 7368,
                          "participants": 68,
                          "allowlisted": false,
                          "interested": 128,
                          "presale_price_usd": null,
                          "presale_price_quote": null,
                          "price_usd": null,
                          "multiple": null,
                          "verified_team": true,
                          "audited": false,
                          "metadata": null
                        }
                      ]
                    }
                  },
                  "empty": {
                    "summary": "200 · no featured presales",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "presales": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid path or query parameters. Fix the request before retrying.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_parameter",
                    "message": "A path or query parameter is invalid."
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is malformed, unknown, or revoked. Replace it; do not retry the same key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_key_invalid",
                    "message": "A valid partner API key is required."
                  }
                }
              }
            }
          },
          "403": {
            "description": "The route or browser origin is not allowed for this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_origin_forbidden",
                    "message": "This origin is not enabled for this partner."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown resource or unsupported route/venue. Valid partner keys can read documented endpoints independently of frontend launch status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "Not found."
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Not Found"
              }
            }
          },
          "429": {
            "description": "Partner quota or endpoint/IP limit reached. Wait for Retry-After when present, then use bounded retries with jitter.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_rate_limited",
                    "message": "Too many requests."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Key verification, rate-limit storage, or the data source is temporarily unavailable.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_api_unavailable",
                    "message": "Partner access is temporarily unavailable."
                  }
                }
              }
            }
          }
        },
        "x-blast-anchor": "featured-presales"
      }
    },
    "/api/v1/presales/{presaleId}": {
      "get": {
        "operationId": "presale",
        "summary": "Presale detail",
        "tags": [
          "Presales"
        ],
        "description": "Read the public sale summary, creator, quote price, momentum, backers, theses, activity, raise history, vesting, and terms. Unavailable terms or prices are null, not zero. An unknown presale returns 404. Viewer-specific data is excluded.",
        "parameters": [
          {
            "name": "presaleId",
            "in": "path",
            "required": true,
            "description": "Canonical on-chain object ID. Example IDs may not exist on mainnet.",
            "schema": {
              "type": "string",
              "pattern": "^0x[0-9a-f]{64}$",
              "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
            },
            "example": "0x00000000000000000000000000000000000000000000000000000000000000a1"
          }
        ],
        "responses": {
          "200": {
            "description": "Successful read. Production examples were captured with a real partner key on 2026-10-21; other examples are illustrative or contract fixtures.",
            "headers": {
              "Cache-Control": {
                "description": "Partner responses use no-store. Do not assume shared CDN caching.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PresaleDetail"
                },
                "examples": {
                  "production": {
                    "summary": "Production response · 2026-10-21",
                    "description": "Captured using a real partner key; values are a historical snapshot, not a guarantee of current results.",
                    "value": {
                      "creator": {
                        "wallet": "0xee5c9c539a0793b727476432bc9d9b9c017571021e3ca9f2ca0d30c10d919c1b",
                        "account": null
                      },
                      "presale": {
                        "presale_id": "0x22cc1e8a95137444a359a6c5da5fea927bad0d0a0e3e86166806747477c5b2d6",
                        "sale_decimals": 9,
                        "name": "Blastoff",
                        "symbol": "BLASTOFF",
                        "icon_url": "https://p7ns5xeckaua4oov.public.blob.vercel-storage.com/create-logos/e8a94ab348b182a867a627d88cfc90a2db94b991703f023ec4b3f1ccf1c81b61.webp",
                        "phase": "open",
                        "venue": "cetus",
                        "start_ms": 1792522177216,
                        "end_ms": 1792608577216,
                        "ended_ms": null,
                        "launched_ms": null,
                        "target_usd": "20000.00",
                        "raised_usd": "0.00",
                        "quote_symbol": "USDC",
                        "quote_type": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                        "quote_decimals": 6,
                        "target_atoms": "20000000000",
                        "raised_atoms": "0",
                        "fill_bps": 0,
                        "participants": 0,
                        "allowlisted": true,
                        "interested": 0,
                        "presale_price_usd": "0.0000666666666667",
                        "presale_price_quote": "0.0000666666666667",
                        "price_usd": null,
                        "multiple": null,
                        "verified_team": false,
                        "audited": false,
                        "metadata": {
                          "tagline": "Build your strategy, blast the rocket into space.",
                          "site": null,
                          "x_handle": null,
                          "telegram": null,
                          "docs_url": null,
                          "audit_url": null,
                          "cover": {
                            "url": "https://p7ns5xeckaua4oov.public.blob.vercel-storage.com/draft-covers/ffbc6077-1d98-4204-8dee-22d64fb66af1/8f07f57e03afe865db080a96f63a6556f3baf33b85f8fd70e25d627bd9a09b0a.webp",
                            "width": 1536,
                            "height": 512
                          },
                          "launch_at_ms": null
                        },
                        "sale_token": "0xbab12ac11e34da9d322f0e84c1e4d7c0068c360053b6871246ba312b4d948e63::blastoff::BLASTOFF",
                        "min_commitment_usd": null,
                        "wallet_cap_usd": null,
                        "min_commitment_atoms": null,
                        "wallet_cap_atoms": null,
                        "opened_ms": 1792522177278
                      },
                      "quote_price": null,
                      "momentum": {
                        "5m": {
                          "commits": 0,
                          "total_usd": "0.00",
                          "total_atoms": "0",
                          "backers": 0,
                          "average_usd": null,
                          "median_usd": null,
                          "average_atoms": null,
                          "median_atoms": null,
                          "big_bps": 0
                        },
                        "1h": {
                          "commits": 0,
                          "total_usd": "0.00",
                          "total_atoms": "0",
                          "backers": 0,
                          "average_usd": null,
                          "median_usd": null,
                          "average_atoms": null,
                          "median_atoms": null,
                          "big_bps": 0
                        },
                        "4h": {
                          "commits": 0,
                          "total_usd": "0.00",
                          "total_atoms": "0",
                          "backers": 0,
                          "average_usd": null,
                          "median_usd": null,
                          "average_atoms": null,
                          "median_atoms": null,
                          "big_bps": 0
                        },
                        "1d": {
                          "commits": 0,
                          "total_usd": "0.00",
                          "total_atoms": "0",
                          "backers": 0,
                          "average_usd": null,
                          "median_usd": null,
                          "average_atoms": null,
                          "median_atoms": null,
                          "big_bps": 0
                        }
                      },
                      "backers": {
                        "top": [],
                        "top10_bps": 0
                      },
                      "theses": [],
                      "activity": [
                        {
                          "entry_id": "l:0x22cc1e8a95137444a359a6c5da5fea927bad0d0a0e3e86166806747477c5b2d6:opened",
                          "kind": "presale_opened",
                          "occurred_at_ms": 1792522177278,
                          "presale": {
                            "presale_id": "0x22cc1e8a95137444a359a6c5da5fea927bad0d0a0e3e86166806747477c5b2d6",
                            "symbol": "BLASTOFF",
                            "name": "Blastoff",
                            "icon_url": "https://p7ns5xeckaua4oov.public.blob.vercel-storage.com/create-logos/e8a94ab348b182a867a627d88cfc90a2db94b991703f023ec4b3f1ccf1c81b61.webp",
                            "lifecycle": "open",
                            "decimals": 9,
                            "venue": "cetus",
                            "start_ms": 1792522177216,
                            "end_ms": 1792608577216,
                            "raise_target": "20000000000",
                            "raised": "0",
                            "participants": 0,
                            "quote_symbol": "USDC",
                            "quote_decimals": 6,
                            "quote_usd": "0.99983787",
                            "market": null
                          },
                          "actor": null,
                          "amounts": null,
                          "digest": "GGWKDVaQGjUzmWJqNkR6AFnGzboABmwofxgXcAbJsikX",
                          "milestone_value": null,
                          "presale_post": true,
                          "big": false,
                          "why": null,
                          "reactions": {
                            "rocket": 0
                          },
                          "through": {
                            "people": 0,
                            "volume_usd": "0.00"
                          },
                          "do_the_same": {
                            "kind": "commit",
                            "enabled": true,
                            "label": "Blast",
                            "href": null
                          },
                          "call": false,
                          "backers": []
                        }
                      ],
                      "raise": {
                        "points": [],
                        "markers": []
                      },
                      "vesting": null,
                      "team_vesting": null,
                      "buyer_vesting": {
                        "schedules": 0,
                        "total": "0",
                        "claimed": "0",
                        "remaining": "0"
                      },
                      "terms": {
                        "supply": {
                          "total": "1000000000000000000",
                          "participants": {
                            "bps": 3000,
                            "amount": "300000000000000000"
                          },
                          "liquidity": {
                            "bps": 2000,
                            "amount": "200000000000000000"
                          },
                          "recipients": [
                            {
                              "address": "0xefcaf1486d0b24224fc3bc432b42a593a7a5e87bd6293b8fc5c7dc822260c4f0",
                              "bps": 500,
                              "amount": "50000000000000000",
                              "vesting": null
                            },
                            {
                              "address": "0xb71e17f342b9e8cca24cfb857436a7771464dcc8aaa617609610005237d97bc1",
                              "bps": 1000,
                              "amount": "100000000000000000",
                              "vesting": null
                            },
                            {
                              "address": "0x9368344bebf079bd1a4f3c259f188aefcde36d0d68b987f7b9c4ead5923508fe",
                              "bps": 1000,
                              "amount": "100000000000000000",
                              "vesting": null
                            },
                            {
                              "address": "0xcef0744c5c2c7ea86a5cdacebe57dadb4e23e3d835e7c8b089bf628182b972bb",
                              "bps": 2400,
                              "amount": "240000000000000000",
                              "vesting": null
                            }
                          ],
                          "protocol": {
                            "bps": 100,
                            "amount": "10000000000000000"
                          }
                        },
                        "raise": {
                          "pool_bps": 9800,
                          "recipients": [],
                          "protocol": {
                            "bps": 200,
                            "amount": "400000000"
                          }
                        },
                        "eligibility": {
                          "kind": "allowlisted",
                          "wallets": 10309
                        },
                        "buyer_vesting": null,
                        "presale_price_usd": "0.0000666666666667",
                        "launch_price_usd": "0.000098",
                        "presale_price_quote": "0.0000666666666667",
                        "launch_price_quote": "0.000098",
                        "burnable": false,
                        "hard_cap": false
                      },
                      "as_of": {
                        "checkpoint": 336332907,
                        "timestamp_ms": 1792550379608,
                        "lag_ms": 1102
                      }
                    }
                  },
                  "detail": {
                    "summary": "200 · public sale detail with unavailable terms",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "presale": {
                        "presale_id": "0x00000000000000000000000000000000000000000000000000000000000000a1",
                        "name": "Meridian",
                        "symbol": "MRDN",
                        "icon_url": "https://example.com/meridian.png",
                        "phase": "open",
                        "venue": "cetus",
                        "start_ms": 1792411200000,
                        "end_ms": 1792670400000,
                        "ended_ms": null,
                        "launched_ms": null,
                        "target_usd": "250000.00",
                        "raised_usd": "184221.00",
                        "quote_symbol": "USDC",
                        "quote_type": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                        "quote_decimals": 6,
                        "sale_decimals": 9,
                        "target_atoms": "250000000000",
                        "raised_atoms": "184221000000",
                        "fill_bps": 7368,
                        "participants": 68,
                        "allowlisted": false,
                        "interested": 128,
                        "presale_price_usd": null,
                        "presale_price_quote": null,
                        "price_usd": null,
                        "multiple": null,
                        "verified_team": true,
                        "audited": false,
                        "metadata": null,
                        "sale_token": "0x00000000000000000000000000000000000000000000000000000000000000a1::meridian::MRDN",
                        "min_commitment_usd": "10.00",
                        "wallet_cap_usd": "25000.00",
                        "min_commitment_atoms": "10000000",
                        "wallet_cap_atoms": "25000000000",
                        "opened_ms": 1792411200000
                      },
                      "creator": null,
                      "quote_price": null,
                      "momentum": {
                        "5m": {
                          "commits": 0,
                          "total_usd": "0.00",
                          "total_atoms": "0",
                          "backers": 0,
                          "average_usd": null,
                          "median_usd": null,
                          "average_atoms": null,
                          "median_atoms": null,
                          "big_bps": 0
                        },
                        "1h": {
                          "commits": 0,
                          "total_usd": "0.00",
                          "total_atoms": "0",
                          "backers": 0,
                          "average_usd": null,
                          "median_usd": null,
                          "average_atoms": null,
                          "median_atoms": null,
                          "big_bps": 0
                        },
                        "4h": {
                          "commits": 0,
                          "total_usd": "0.00",
                          "total_atoms": "0",
                          "backers": 0,
                          "average_usd": null,
                          "median_usd": null,
                          "average_atoms": null,
                          "median_atoms": null,
                          "big_bps": 0
                        },
                        "1d": {
                          "commits": 0,
                          "total_usd": "0.00",
                          "total_atoms": "0",
                          "backers": 0,
                          "average_usd": null,
                          "median_usd": null,
                          "average_atoms": null,
                          "median_atoms": null,
                          "big_bps": 0
                        }
                      },
                      "backers": {
                        "top": [
                          {
                            "wallet": "0x1111111111111111111111111111111111111111111111111111111111111111",
                            "account": null,
                            "commitment_usd": "15000.00",
                            "commitment_atoms": "15000000000",
                            "share_bps": 814,
                            "last_commit_ms": 1792494000000,
                            "why": null
                          }
                        ],
                        "top10_bps": 5000
                      },
                      "theses": [],
                      "activity": [],
                      "raise": {
                        "points": [
                          [
                            1792494000000,
                            "184221.00",
                            "184221000000"
                          ]
                        ],
                        "markers": []
                      },
                      "vesting": null,
                      "team_vesting": null,
                      "buyer_vesting": {
                        "schedules": 0,
                        "total": "0",
                        "claimed": "0",
                        "remaining": "0"
                      },
                      "terms": null,
                      "as_of": {
                        "checkpoint": 326274009,
                        "timestamp_ms": 1792584000000,
                        "lag_ms": 412
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid path or query parameters. Fix the request before retrying.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_parameter",
                    "message": "A path or query parameter is invalid."
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is malformed, unknown, or revoked. Replace it; do not retry the same key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_key_invalid",
                    "message": "A valid partner API key is required."
                  }
                }
              }
            }
          },
          "403": {
            "description": "The route or browser origin is not allowed for this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_origin_forbidden",
                    "message": "This origin is not enabled for this partner."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown resource or unsupported route/venue. Valid partner keys can read documented endpoints independently of frontend launch status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "Not found."
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Not Found"
              }
            }
          },
          "429": {
            "description": "Partner quota or endpoint/IP limit reached. Wait for Retry-After when present, then use bounded retries with jitter.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_rate_limited",
                    "message": "Too many requests."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Key verification, rate-limit storage, or the data source is temporarily unavailable.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_api_unavailable",
                    "message": "Partner access is temporarily unavailable."
                  }
                }
              }
            }
          }
        },
        "x-blast-anchor": "presale-detail"
      }
    },
    "/api/v1/prices": {
      "get": {
        "operationId": "prices",
        "summary": "Price history",
        "tags": [
          "Presales"
        ],
        "description": "USD price history for requested presales or coins. Provide at least one presale or coin; duplicate identifiers are deduplicated. A non-trading or unknown presale can have no entry. Match entries by presale_id or coin_type, never by array position.\n\nPoints are [Unix milliseconds, decimal price string] pairs, oldest first. USD fields can be null; quote can contain real pool prices in the quote coin when USD conversion is unavailable. The clock_ms watermark bounds the series. Sampling can include boundary observations; do not assume an exact point count.",
        "parameters": [
          {
            "name": "presale",
            "in": "query",
            "required": false,
            "description": "Repeat for up to 50 unique presale IDs. Provide at least one presale or coin.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^0x[0-9a-f]{64}$",
                "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
              },
              "maxItems": 50
            },
            "style": "form",
            "explode": true
          },
          {
            "name": "coin",
            "in": "query",
            "required": false,
            "description": "Repeat for up to four unique coin types. Only supported with window=24h.",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "pattern": "^0x[0-9a-f]{64}::[A-Za-z_][A-Za-z0-9_]*::[A-Za-z_][A-Za-z0-9_]*$",
                "description": "Canonical Move coin type. URL-encode when used in a path."
              },
              "maxItems": 4
            },
            "example": [
              "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI"
            ],
            "style": "form",
            "explode": true
          },
          {
            "name": "window",
            "in": "query",
            "required": false,
            "description": "24 hours, or since launch (presales only).",
            "schema": {
              "type": "string",
              "enum": [
                "24h",
                "launch"
              ],
              "default": "24h"
            }
          },
          {
            "name": "points",
            "in": "query",
            "required": false,
            "description": "Sampling density. Boundary observations may add points; output length is not fixed.",
            "schema": {
              "type": "integer",
              "minimum": 2,
              "maximum": 288,
              "default": 60
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful read. Production examples were captured with a real partner key on 2026-10-21; other examples are illustrative or contract fixtures.",
            "headers": {
              "Cache-Control": {
                "description": "Partner responses use no-store. Do not assume shared CDN caching.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PricesResponse"
                },
                "examples": {
                  "production": {
                    "summary": "Production response · 2026-10-21",
                    "description": "Captured using a real partner key; values are a historical snapshot, not a guarantee of current results.",
                    "value": {
                      "window": "24h",
                      "clock_ms": 1792550380073,
                      "prices": [],
                      "as_of": {
                        "checkpoint": 336332909,
                        "timestamp_ms": 1792550380073,
                        "lag_ms": 1414
                      }
                    }
                  },
                  "history": {
                    "summary": "Success · example data",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "window": "24h",
                      "clock_ms": 1792584000000,
                      "prices": [
                        {
                          "presale_id": null,
                          "coin_type": "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
                          "tier": "5m",
                          "from_ms": 1792497600000,
                          "points": [
                            [
                              1792497600000,
                              "3.2"
                            ],
                            [
                              1792584000000,
                              "3.42"
                            ]
                          ],
                          "price_usd": "3.42",
                          "price_24h_usd": "3.2",
                          "change_24h_bps": 688,
                          "day_open_usd": "3.3",
                          "day_open_ms": 1792540800000
                        }
                      ],
                      "as_of": {
                        "checkpoint": 326274009,
                        "timestamp_ms": 1792584000000,
                        "lag_ms": 412
                      }
                    }
                  },
                  "empty": {
                    "summary": "200 · no price observations",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "window": "24h",
                      "clock_ms": 1792584000000,
                      "prices": [],
                      "as_of": {
                        "checkpoint": 326274009,
                        "timestamp_ms": 1792584000000,
                        "lag_ms": 412
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid path or query parameters. Fix the request before retrying.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_parameter",
                    "message": "A path or query parameter is invalid."
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is malformed, unknown, or revoked. Replace it; do not retry the same key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_key_invalid",
                    "message": "A valid partner API key is required."
                  }
                }
              }
            }
          },
          "403": {
            "description": "The route or browser origin is not allowed for this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_origin_forbidden",
                    "message": "This origin is not enabled for this partner."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown resource or unsupported route/venue. Valid partner keys can read documented endpoints independently of frontend launch status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "Not found."
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Not Found"
              }
            }
          },
          "429": {
            "description": "Partner quota or endpoint/IP limit reached. Wait for Retry-After when present, then use bounded retries with jitter.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_rate_limited",
                    "message": "Too many requests."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Key verification, rate-limit storage, or the data source is temporarily unavailable.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_api_unavailable",
                    "message": "Partner access is temporarily unavailable."
                  }
                }
              }
            }
          }
        },
        "x-blast-anchor": "price-history"
      }
    },
    "/api/v1/discovery": {
      "get": {
        "operationId": "discovery",
        "summary": "Discover launches · Coming soon",
        "tags": [
          "Discovery"
        ],
        "description": "**Coming soon.** You can read the schemas, parameters, and examples now. Live requests currently return `503` because launchpad indexing is not enabled. A new key or repeated retries will not make this endpoint available.\n\nDiscover launches by creation time, proximity to graduation, or graduation time. Only available and stale sections contain data. Empty means a successful read with no matches; unavailable means the data could not be read.\n\nPass section.data.nextCursor as cursor with the same view. Stop on a null cursor or empty section. Unknown or repeated query parameters are rejected. The hot view is not supported.",
        "parameters": [
          {
            "name": "view",
            "in": "query",
            "required": false,
            "description": "Discovery order. Keep unchanged when paging.",
            "schema": {
              "type": "string",
              "enum": [
                "new",
                "near_graduation",
                "graduated"
              ],
              "default": "new"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum results per page; between 1 and 100.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The non-null continuation token from the previous response. Keep all filters unchanged.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Coming soon: this success contract is provided for integration planning. No successful production response is available yet.",
            "headers": {
              "Cache-Control": {
                "description": "Partner responses use no-store. Do not assume shared CDN caching.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DiscoveryResponse"
                },
                "examples": {
                  "available": {
                    "summary": "Success · example data",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "view": "new",
                      "section": {
                        "state": "available",
                        "data": {
                          "rows": [
                            {
                              "launchId": "0x00000000000000000000000000000000000000000000000000000000000000a1",
                              "coinType": "0x00000000000000000000000000000000000000000000000000000000000000a1::meridian::MRDN",
                              "quoteType": "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
                              "lifecycle": "live",
                              "name": "Meridian",
                              "symbol": "MRDN",
                              "iconUrl": null,
                              "createdAtMs": 1792497600000,
                              "graduatedAtMs": null,
                              "quoteRemaining": "15000000000",
                              "quoteDecimals": 9,
                              "progressBps": 5000,
                              "partner": {
                                "partnerId": "0x00000000000000000000000000000000000000000000000000000000000000b1",
                                "status": "admitted"
                              }
                            }
                          ],
                          "nextCursor": null
                        },
                        "provenance": {
                          "source": "blast-infra",
                          "network": "mainnet",
                          "deployment": "example-deployment",
                          "checkpoint": 326274009,
                          "timestampMs": 1792584000000,
                          "observedAt": 1792584000412,
                          "lagMs": 412
                        }
                      }
                    }
                  },
                  "empty": {
                    "summary": "200 · empty section",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "view": "new",
                      "section": {
                        "state": "empty",
                        "provenance": {
                          "source": "blast-infra",
                          "network": "mainnet",
                          "deployment": "example-deployment",
                          "checkpoint": 326274009,
                          "timestampMs": 1792584000000,
                          "observedAt": 1792584000412,
                          "lagMs": 412
                        }
                      }
                    }
                  },
                  "stale": {
                    "summary": "200 · stale data",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "view": "new",
                      "section": {
                        "state": "stale",
                        "data": {
                          "rows": [
                            {
                              "launchId": "0x00000000000000000000000000000000000000000000000000000000000000a1",
                              "coinType": "0x00000000000000000000000000000000000000000000000000000000000000a1::meridian::MRDN",
                              "quoteType": "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
                              "lifecycle": "live",
                              "name": "Meridian",
                              "symbol": "MRDN",
                              "iconUrl": null,
                              "createdAtMs": 1792497600000,
                              "graduatedAtMs": null,
                              "quoteRemaining": "15000000000",
                              "quoteDecimals": 9,
                              "progressBps": 5000,
                              "partner": {
                                "partnerId": "0x00000000000000000000000000000000000000000000000000000000000000b1",
                                "status": "admitted"
                              }
                            }
                          ],
                          "nextCursor": null
                        },
                        "provenance": {
                          "source": "blast-infra",
                          "network": "mainnet",
                          "deployment": "example-deployment",
                          "checkpoint": 326274009,
                          "timestampMs": 1792584000000,
                          "observedAt": 1792584120000,
                          "lagMs": 120000
                        },
                        "reason": "lag"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Unsupported view, repeated or unknown query parameter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "LAUNCHPAD_VIEW_UNSUPPORTED",
                    "message": "Choose one view: new, near_graduation or graduated, with only limit and cursor beside it."
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is malformed, unknown, or revoked. Replace it; do not retry the same key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_key_invalid",
                    "message": "A valid partner API key is required."
                  }
                }
              }
            }
          },
          "403": {
            "description": "The route or browser origin is not allowed for this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_origin_forbidden",
                    "message": "This origin is not enabled for this partner."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown resource or unsupported route/venue. Valid partner keys can read documented endpoints independently of frontend launch status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "Not found."
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Not Found"
              }
            }
          },
          "429": {
            "description": "Partner quota or endpoint/IP limit reached. Wait for Retry-After when present, then use bounded retries with jitter.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_rate_limited",
                    "message": "Too many requests."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Coming soon: launchpad indexing is not enabled. This is a deployment prerequisite, not a transient failure. Do not poll until availability is announced.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/Error"
                    },
                    {
                      "$ref": "#/components/schemas/DiscoveryResponse"
                    }
                  ]
                },
                "examples": {
                  "production": {
                    "summary": "Current production response · 2026-10-21",
                    "value": {
                      "view": "new",
                      "section": {
                        "state": "unavailable",
                        "reason": "not_ready",
                        "retryAfterSeconds": 5,
                        "provenance": {
                          "source": "blast-infra",
                          "network": null,
                          "deployment": null,
                          "checkpoint": null,
                          "timestampMs": null,
                          "observedAt": 1792550382119,
                          "lagMs": null,
                          "reason": "not_ready"
                        }
                      },
                      "error": {
                        "code": "SERVICE_UNAVAILABLE",
                        "message": "This service is temporarily unavailable. Please retry."
                      }
                    }
                  },
                  "access": {
                    "summary": "Partner access unavailable",
                    "value": {
                      "error": {
                        "code": "partner_api_unavailable",
                        "message": "Partner access is temporarily unavailable."
                      }
                    }
                  },
                  "source": {
                    "summary": "Data source unavailable",
                    "value": {
                      "view": "new",
                      "section": {
                        "state": "unavailable",
                        "reason": "unconfigured",
                        "retryAfterSeconds": 5
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-blast-anchor": "discover-launches"
      }
    },
    "/api/v1/search": {
      "get": {
        "operationId": "search",
        "summary": "Search",
        "tags": [
          "Discovery"
        ],
        "description": "Search canonical launches and public theses. With no group, identifier queries can produce onchain, wallets, and coins; text queries search coins. Theses are also searched. The ungrouped profiles section is always unavailable; profiles cannot be requested.\n\nHandle each section independently: a 200 can contain unavailable groups. If all requested groups are unavailable, the response is 503. To paginate, supply the group, its section.data.nextCursor, and the original q. Unknown or repeated query parameters are rejected.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": true,
            "description": "Searchable text or a canonical identifier.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            },
            "example": "Meridian"
          },
          {
            "name": "group",
            "in": "query",
            "required": false,
            "description": "Omit to search applicable groups. Identifier queries can include onchain and wallets. Must be applicable to q.",
            "schema": {
              "type": "string",
              "enum": [
                "onchain",
                "wallets",
                "coins",
                "theses"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum results per page; between 1 and 25.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 25,
              "default": 5
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "Continue section.data.nextCursor for one group. Requires group; preserve q.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Successful read. Production examples were captured with a real partner key on 2026-10-21; other examples are illustrative or contract fixtures.",
            "headers": {
              "Cache-Control": {
                "description": "Partner responses use no-store. Do not assume shared CDN caching.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResponse"
                },
                "examples": {
                  "production": {
                    "summary": "Production response · 2026-10-21",
                    "description": "Captured using a real partner key; values are a historical snapshot, not a guarantee of current results.",
                    "value": {
                      "groups": [
                        {
                          "group": "coins",
                          "section": {
                            "state": "empty",
                            "provenance": {
                              "source": "replica",
                              "network": "mainnet",
                              "deployment": "783b0af1d41f6ffab93688a031bdc45a75e6d03a98a75a0e9b9a57165bc253fe",
                              "checkpoint": 336332916,
                              "timestampMs": 1792550381688,
                              "observedAt": 1792550382839,
                              "lagMs": 1151
                            }
                          }
                        },
                        {
                          "group": "theses",
                          "section": {
                            "state": "empty",
                            "provenance": {
                              "source": "replica",
                              "network": "mainnet",
                              "deployment": "783b0af1d41f6ffab93688a031bdc45a75e6d03a98a75a0e9b9a57165bc253fe",
                              "checkpoint": 336332916,
                              "timestampMs": 1792550381688,
                              "observedAt": 1792550382839,
                              "lagMs": 1151
                            }
                          }
                        },
                        {
                          "group": "profiles",
                          "section": {
                            "state": "unavailable",
                            "reason": "no-source"
                          }
                        }
                      ]
                    }
                  },
                  "matches": {
                    "summary": "200 · results with an unavailable group",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "groups": [
                        {
                          "group": "coins",
                          "section": {
                            "state": "available",
                            "data": {
                              "items": [
                                {
                                  "match": "name",
                                  "launch": {
                                    "launchId": "0x00000000000000000000000000000000000000000000000000000000000000a1",
                                    "coinType": "0x00000000000000000000000000000000000000000000000000000000000000a1::meridian::MRDN",
                                    "name": "Meridian",
                                    "symbol": "MRDN",
                                    "iconUrl": null,
                                    "lifecycle": "live",
                                    "creator": null,
                                    "createdAtMs": 1792497600000
                                  },
                                  "pool": null
                                }
                              ],
                              "nextCursor": null
                            },
                            "provenance": {
                              "source": "blast-infra",
                              "network": "mainnet",
                              "deployment": "example-deployment",
                              "checkpoint": 326274009,
                              "timestampMs": 1792584000000,
                              "observedAt": 1792584000412,
                              "lagMs": 412
                            }
                          }
                        },
                        {
                          "group": "theses",
                          "section": {
                            "state": "empty",
                            "provenance": {
                              "source": "blast-infra",
                              "network": "mainnet",
                              "deployment": "example-deployment",
                              "checkpoint": 326274009,
                              "timestampMs": 1792584000000,
                              "observedAt": 1792584000412,
                              "lagMs": 412
                            }
                          }
                        },
                        {
                          "group": "profiles",
                          "section": {
                            "state": "unavailable",
                            "reason": "no-source"
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid path or query parameters. Fix the request before retrying.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "LAUNCHPAD_QUERY_INVALID",
                    "message": "Search takes q, and optionally group, cursor and limit, once each."
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is malformed, unknown, or revoked. Replace it; do not retry the same key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_key_invalid",
                    "message": "A valid partner API key is required."
                  }
                }
              }
            }
          },
          "403": {
            "description": "The route or browser origin is not allowed for this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_origin_forbidden",
                    "message": "This origin is not enabled for this partner."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown resource or unsupported route/venue. Valid partner keys can read documented endpoints independently of frontend launch status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "Not found."
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Not Found"
              }
            }
          },
          "429": {
            "description": "Partner quota or endpoint/IP limit reached. Wait for Retry-After when present, then use bounded retries with jitter.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_rate_limited",
                    "message": "Too many requests."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Key verification, rate-limit storage, or the data source is temporarily unavailable.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/Error"
                    },
                    {
                      "$ref": "#/components/schemas/SearchResponse"
                    }
                  ]
                },
                "examples": {
                  "access": {
                    "summary": "Partner access unavailable",
                    "value": {
                      "error": {
                        "code": "partner_api_unavailable",
                        "message": "Partner access is temporarily unavailable."
                      }
                    }
                  },
                  "source": {
                    "summary": "Data source unavailable",
                    "value": {
                      "groups": [
                        {
                          "group": "coins",
                          "section": {
                            "state": "unavailable",
                            "reason": "unconfigured",
                            "retryAfterSeconds": 5
                          }
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "x-blast-anchor": "search"
      }
    },
    "/api/v1/market/status": {
      "get": {
        "operationId": "status",
        "summary": "Market status",
        "tags": [
          "Market data"
        ],
        "description": "Inspect the indexed market checkpoint, cursor, and lag before presenting market data as current. Checkpoint fields can be null before the first checkpoint. The private engine hostname is excluded. No query parameters.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Successful read. Production examples were captured with a real partner key on 2026-10-21; other examples are illustrative or contract fixtures.",
            "headers": {
              "Cache-Control": {
                "description": "Partner responses use no-store. Do not assume shared CDN caching.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketStatus"
                },
                "examples": {
                  "production": {
                    "summary": "Production response · 2026-10-21",
                    "description": "Captured using a real partner key; values are a historical snapshot, not a guarantee of current results.",
                    "value": {
                      "provenance": {
                        "network": "mainnet",
                        "deployment_fingerprint": "783b0af1d41f6ffab93688a031bdc45a75e6d03a98a75a0e9b9a57165bc253fe",
                        "checkpoint": 336332918,
                        "timestamp_ms": 1792550382167,
                        "observed_ms": 1792550383467,
                        "lag_ms": 1300
                      },
                      "checkpoint": 336332918,
                      "timestamp_ms": 1792550382167,
                      "lag_ms": 1300,
                      "cursor": null
                    }
                  },
                  "status": {
                    "summary": "Success · example data",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "checkpoint": 326274009,
                      "timestamp_ms": 1792584000000,
                      "lag_ms": 412,
                      "cursor": "326274009:3:4294967295:0",
                      "provenance": {
                        "network": "mainnet",
                        "deployment_fingerprint": "5d2f2a4be1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c",
                        "checkpoint": 326274009,
                        "timestamp_ms": 1792584000000,
                        "observed_ms": 1792584000412,
                        "lag_ms": 412
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid path or query parameters. Fix the request before retrying.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_parameter",
                    "message": "The market data parameters are invalid."
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is malformed, unknown, or revoked. Replace it; do not retry the same key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_key_invalid",
                    "message": "A valid partner API key is required."
                  }
                }
              }
            }
          },
          "403": {
            "description": "The route or browser origin is not allowed for this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_origin_forbidden",
                    "message": "This origin is not enabled for this partner."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown resource or unsupported route/venue. Valid partner keys can read documented endpoints independently of frontend launch status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "Not found."
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Not Found"
              }
            }
          },
          "429": {
            "description": "Partner quota or endpoint/IP limit reached. Wait for Retry-After when present, then use bounded retries with jitter.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_rate_limited",
                    "message": "Too many requests."
                  }
                }
              }
            }
          },
          "502": {
            "description": "The upstream market service could not be read. Retry later.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "unreachable",
                    "message": "Market data could not be read."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Key verification, rate-limit storage, or the data source is temporarily unavailable.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_api_unavailable",
                    "message": "Partner access is temporarily unavailable."
                  }
                }
              }
            }
          }
        },
        "x-blast-anchor": "market-status"
      }
    },
    "/api/v1/market/coins/{coinType}/holders": {
      "get": {
        "operationId": "holders",
        "summary": "Holder snapshot · Coming soon",
        "tags": [
          "Market data"
        ],
        "description": "**Coming soon.** You can read the schemas, parameters, and examples now. Live requests currently return `503` because launchpad indexing is not enabled. A new key or repeated retries will not make this endpoint available.\n\nNative address balances at one identified checkpoint. Rows are ordered by balance descending, then address ascending.\n\nA complete snapshot carries every fact. Behind carries facts that lag the market checkpoint. Incomplete makes holder_count, held_supply, top_1, top_10, holders, and next_cursor null; never render those as zero or empty. Counts, balances, and share_bps are decimal strings. Shares are in basis points (10,000 = 100%).\n\nPass next_cursor as cursor; stop at null. Balances may move between pages; deduplicate by address.",
        "parameters": [
          {
            "name": "coinType",
            "in": "path",
            "required": true,
            "description": "Canonical coin type, URL-encoded as one path segment.",
            "schema": {
              "type": "string",
              "pattern": "^0x[0-9a-f]{64}::[A-Za-z_][A-Za-z0-9_]*::[A-Za-z_][A-Za-z0-9_]*$",
              "description": "Canonical Move coin type. URL-encode when used in a path."
            },
            "example": "0x27edca4d96f367e697f9aaaea7d38328a60970c25d0c7f3927848051b082295f::meme::MEME"
          },
          {
            "name": "view",
            "in": "query",
            "required": true,
            "description": "Required native-balance snapshot view.",
            "schema": {
              "type": "string",
              "enum": [
                "snapshot"
              ],
              "default": "snapshot"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum results per page; between 1 and 100.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The non-null continuation token from the previous response. Keep all filters unchanged.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Coming soon: this success contract is provided for integration planning. No successful production response is available yet.",
            "headers": {
              "Cache-Control": {
                "description": "Partner responses use no-store. Do not assume shared CDN caching.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketHoldersSnapshot"
                },
                "examples": {
                  "captured": {
                    "summary": "200 · captured contract-test response",
                    "description": "An actual response captured from the API contract-test environment. These localnet IDs and timestamps are not live mainnet resources.",
                    "value": {
                      "provenance": {
                        "network": "localnet",
                        "deployment_fingerprint": "5d2f2a4be1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c",
                        "checkpoint": 124,
                        "timestamp_ms": 1790294757750,
                        "observed_ms": 1790829665418,
                        "lag_ms": 534907668
                      },
                      "coin": "0x27edca4d96f367e697f9aaaea7d38328a60970c25d0c7f3927848051b082295f::meme::MEME",
                      "snapshot": {
                        "state": "complete",
                        "checkpoint": 124,
                        "timestamp_ms": 1790294757750
                      },
                      "holder_count": "6",
                      "held_supply": "597694095590364137",
                      "top_1": {
                        "amount": "175872616585214455",
                        "share_bps": "2942"
                      },
                      "top_10": {
                        "amount": "597694095590364137",
                        "share_bps": "10000"
                      },
                      "holders": [
                        {
                          "address": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "balance": "175872616585214455",
                          "share_bps": "2942"
                        },
                        {
                          "address": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "balance": "129745835606790027",
                          "share_bps": "2170"
                        }
                      ],
                      "next_cursor": "eyJ2IjoxLCJzIjoiY29pbl9ob2xkZXJzOjB4MjZmNmJjNTY5MTgyZTdhYjlkYjgxZmFiNThhMDZlNzg0ZTdlMGQyM2RjMTY3NWZlZjQ0NGY0YmY4ZmY3NWZiOCIsImsiOltdLCJ0IjpbIjAwMTI5NzQ1ODM1NjA2NzkwMDI3IiwiMHg4Zjc3YzkyN2FlOTQ4ZThiOWY4YjI2NDJmYzhmNjRlNGQ2OTQyZmU3Zjc5ZGZmMTZjYmE4MDViNDIzZGU3Y2EyIl19"
                    }
                  },
                  "incomplete": {
                    "summary": "200 · incomplete snapshot",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "provenance": {
                        "network": "localnet",
                        "deployment_fingerprint": "5d2f2a4be1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c",
                        "checkpoint": 124,
                        "timestamp_ms": 1790294757750,
                        "observed_ms": 1790829665418,
                        "lag_ms": 534907668
                      },
                      "coin": "0x27edca4d96f367e697f9aaaea7d38328a60970c25d0c7f3927848051b082295f::meme::MEME",
                      "snapshot": {
                        "state": "incomplete",
                        "checkpoint": 124,
                        "timestamp_ms": 1790294757750
                      },
                      "holder_count": null,
                      "held_supply": null,
                      "top_1": null,
                      "top_10": null,
                      "holders": null,
                      "next_cursor": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid path or query parameters. Fix the request before retrying.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_parameter",
                    "message": "The market data parameters are invalid."
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is malformed, unknown, or revoked. Replace it; do not retry the same key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_key_invalid",
                    "message": "A valid partner API key is required."
                  }
                }
              }
            }
          },
          "403": {
            "description": "The route or browser origin is not allowed for this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_origin_forbidden",
                    "message": "This origin is not enabled for this partner."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown resource or unsupported route/venue. Valid partner keys can read documented endpoints independently of frontend launch status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "Not found."
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Not Found"
              }
            }
          },
          "429": {
            "description": "Partner quota or endpoint/IP limit reached. Wait for Retry-After when present, then use bounded retries with jitter.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_rate_limited",
                    "message": "Too many requests."
                  }
                }
              }
            }
          },
          "502": {
            "description": "The upstream market service could not be read. Retry later.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "unreachable",
                    "message": "Market data could not be read."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Coming soon: launchpad indexing is not enabled. This is a deployment prerequisite, not a transient failure. Do not poll until availability is announced.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "production": {
                    "summary": "Current production response · 2026-10-21",
                    "value": {
                      "error": {
                        "code": "unavailable",
                        "message": "Market data is temporarily unavailable. Please retry."
                      }
                    }
                  },
                  "access": {
                    "summary": "Partner access unavailable",
                    "value": {
                      "error": {
                        "code": "partner_api_unavailable",
                        "message": "Partner access is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-blast-anchor": "holder-snapshot"
      }
    },
    "/api/v1/market/launches/{launchId}/activity": {
      "get": {
        "operationId": "activity",
        "summary": "Launch activity · Coming soon",
        "tags": [
          "Market data"
        ],
        "description": "**Coming soon.** You can read the schemas, parameters, and examples now. Live requests currently return `503` because launchpad indexing is not enabled. A new key or repeated retries will not make this endpoint available.\n\nClassified curve trades, opening-round events, migrations, and lifecycle changes for one launch. Amount fields depend on kind and are exact decimal strings in atomic units. Use the venue pool trades endpoint for Cetus and Bluefin swaps.\n\nPass next_cursor as cursor, keeping the launch ID and view unchanged. Stop at null.",
        "parameters": [
          {
            "name": "launchId",
            "in": "path",
            "required": true,
            "description": "Canonical on-chain object ID. Example IDs may not exist on mainnet.",
            "schema": {
              "type": "string",
              "pattern": "^0x[0-9a-f]{64}$",
              "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
            },
            "example": "0x00000000000000000000000000000000000000000000000000000000000000a1"
          },
          {
            "name": "view",
            "in": "query",
            "required": true,
            "description": "Required classified activity view.",
            "schema": {
              "type": "string",
              "enum": [
                "classified"
              ],
              "default": "classified"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum results per page; between 1 and 100.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 25
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "required": false,
            "description": "The non-null continuation token from the previous response. Keep all filters unchanged.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Coming soon: this success contract is provided for integration planning. No successful production response is available yet.",
            "headers": {
              "Cache-Control": {
                "description": "Partner responses use no-store. Do not assume shared CDN caching.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketActivityClassified"
                },
                "examples": {
                  "captured": {
                    "summary": "200 · captured contract-test response",
                    "description": "An actual response captured from the API contract-test environment. These localnet IDs and timestamps are not live mainnet resources.",
                    "value": {
                      "provenance": {
                        "network": "localnet",
                        "deployment_fingerprint": "5d2f2a4be1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c",
                        "checkpoint": 124,
                        "timestamp_ms": 1790294757750,
                        "observed_ms": 1790823983449,
                        "lag_ms": 529225699
                      },
                      "activity": [
                        {
                          "position": "123:2:0:0",
                          "checkpoint": 123,
                          "timestamp_ms": 1790294742750,
                          "digest": "A9XMRaMfWTx7xaEru9qaTufrEJKAod2ztnzRP7SWZHj6",
                          "kind": "opening_delivery",
                          "source": null,
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "bid": "2000000000",
                            "meme": "101904196063870",
                            "refund_quote": "0"
                          }
                        },
                        {
                          "position": "122:2:2:1",
                          "checkpoint": 122,
                          "timestamp_ms": 1790294734750,
                          "digest": "5SAayfetaTPUCsGjhuT2B6uwcFSo9GZvaWPdnRVqsYmd",
                          "kind": "lifecycle",
                          "source": null,
                          "actor": null,
                          "lifecycle": "migrated",
                          "amounts": {}
                        },
                        {
                          "position": "122:2:2:0",
                          "checkpoint": 122,
                          "timestamp_ms": 1790294734750,
                          "digest": "5SAayfetaTPUCsGjhuT2B6uwcFSo9GZvaWPdnRVqsYmd",
                          "kind": "migration",
                          "source": null,
                          "actor": null,
                          "lifecycle": null,
                          "amounts": {
                            "meme": "190000000000000",
                            "quote": "26700000000",
                            "disposed_meme": "175000000065659",
                            "total_supply_after": "1000000000000000"
                          }
                        },
                        {
                          "position": "120:2:0:1",
                          "checkpoint": 120,
                          "timestamp_ms": 1790294674750,
                          "digest": "296ZNQAHaLb4XMHJSjFaSnNj4YzapZottcAaK5kYZQxn",
                          "kind": "lifecycle",
                          "source": null,
                          "actor": null,
                          "lifecycle": "migration_ready",
                          "amounts": {}
                        },
                        {
                          "position": "120:2:0:0",
                          "checkpoint": 120,
                          "timestamp_ms": 1790294674750,
                          "digest": "296ZNQAHaLb4XMHJSjFaSnNj4YzapZottcAaK5kYZQxn",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "185874392546433",
                            "quote": "20912187034"
                          }
                        },
                        {
                          "position": "117:2:0:0",
                          "checkpoint": 117,
                          "timestamp_ms": 1790294610750,
                          "digest": "84g9PRnXhaAWgDf4o2sLrKBXBQNSbFgstWghxT2jM4pt",
                          "kind": "curve_sell",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "22677798912894",
                            "quote": "1260365577"
                          }
                        },
                        {
                          "position": "115:2:0:0",
                          "checkpoint": 115,
                          "timestamp_ms": 1790294544693,
                          "digest": "2nTbv8BNuTfh3cnLX8YjgWTzvsP3VpeHYrCqHGbo2v9B",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "6613034287406",
                            "quote": "400000000"
                          }
                        },
                        {
                          "position": "113:2:0:0",
                          "checkpoint": 113,
                          "timestamp_ms": 1790294336312,
                          "digest": "mX8kkXu3Q8hy5FC1phXPPTrd7WqxikcmazCskN9a9qC",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "3404838534273",
                            "quote": "200000000"
                          }
                        },
                        {
                          "position": "111:2:0:0",
                          "checkpoint": 111,
                          "timestamp_ms": 1790294159607,
                          "digest": "GLLEi298deUFPy8PRmtrDCQ86ccpSsasZswYMv8SuW4V",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "8814897693865",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "109:2:0:0",
                          "checkpoint": 109,
                          "timestamp_ms": 1790294014578,
                          "digest": "6ou6KeJsuk37LSnnswZtnKuBWvNb7Ap35rT21vU44s7f",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "5507288935975",
                            "quote": "300000000"
                          }
                        },
                        {
                          "position": "107:2:0:0",
                          "checkpoint": 107,
                          "timestamp_ms": 1790293901225,
                          "digest": "2xFW5eVsGQZyAamY6Ebn2nNi2sDAhNYAGgS6xriCwsbh",
                          "kind": "curve_sell",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "21088461776098",
                            "quote": "1152617130"
                          }
                        },
                        {
                          "position": "105:2:0:0",
                          "checkpoint": 105,
                          "timestamp_ms": 1790293819548,
                          "digest": "6xz93HZwtfQWKbqoru7CFnFFq2Kx8CoKycjV3rfu8EJq",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "6759393129079",
                            "quote": "400000000"
                          }
                        },
                        {
                          "position": "103:2:0:0",
                          "checkpoint": 103,
                          "timestamp_ms": 1790293682547,
                          "digest": "HtfrEVdySyjrP269nRrVnzTU9yqMCL6dXMrPqr9Fwgig",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "3481322066986",
                            "quote": "200000000"
                          }
                        },
                        {
                          "position": "101:2:0:0",
                          "checkpoint": 101,
                          "timestamp_ms": 1790293490222,
                          "digest": "C3cfZHNv6kM9evNoktXKKXQxC3ZoiQ7tccEvqunDj1Dj",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "9016473001487",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "99:2:0:0",
                          "checkpoint": 99,
                          "timestamp_ms": 1790293329573,
                          "digest": "3PhtLEPfUGPkH9zTN7B5B9THVQeQcWaQQLHFuhNj3jx4",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "5635838984573",
                            "quote": "300000000"
                          }
                        },
                        {
                          "position": "97:2:0:0",
                          "checkpoint": 97,
                          "timestamp_ms": 1790293200600,
                          "digest": "38vx3Fk9peDwDFZ3U8Wip2iCN6k7eTriCdJVToJmgN33",
                          "kind": "curve_sell",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "17210196822024",
                            "quote": "908367856"
                          }
                        },
                        {
                          "position": "95:2:0:0",
                          "checkpoint": 95,
                          "timestamp_ms": 1790293103303,
                          "digest": "6V7sAsqnGL2AZ2rHG2oiJWaJCkkFGkePau2d2BPEXLV6",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "7085022417543",
                            "quote": "400000000"
                          }
                        },
                        {
                          "position": "93:2:0:0",
                          "checkpoint": 93,
                          "timestamp_ms": 1790293037682,
                          "digest": "DegsZWTuhAfoXYmfzCRFzPcifN8Xsp3N6K4yoTZnGsTn",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "3651619874473",
                            "quote": "200000000"
                          }
                        },
                        {
                          "position": "91:2:0:0",
                          "checkpoint": 91,
                          "timestamp_ms": 1790292829737,
                          "digest": "2wHLkxSdyKb2c22B9E9cWCZQzCrhWoxehcYNzGTWqXbm",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "9465726136994",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "89:2:0:0",
                          "checkpoint": 89,
                          "timestamp_ms": 1790292653468,
                          "digest": "AQkR8mJoVvmWZ7kL9DfSxjwq1tVAH3VrZfv7b49jv49y",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "5922657988817",
                            "quote": "300000000"
                          }
                        },
                        {
                          "position": "83:2:0:0",
                          "checkpoint": 83,
                          "timestamp_ms": 1790292433875,
                          "digest": "BpX5z37XuPR7MyedJaGXeQrUB5ebZvuLKeDWScZxK9Vr",
                          "kind": "curve_sell",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "21949815323195",
                            "quote": "1115153813"
                          }
                        },
                        {
                          "position": "81:2:0:0",
                          "checkpoint": 81,
                          "timestamp_ms": 1790292360958,
                          "digest": "2srSJSTpx3h9N4z5EZ5UrSyLnvUVyoSJsVvVfoVhchPL",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "7275693096567",
                            "quote": "400000000"
                          }
                        },
                        {
                          "position": "79:2:0:0",
                          "checkpoint": 79,
                          "timestamp_ms": 1790292319717,
                          "digest": "EsESdnebbPU6D7dybDEucD1da5GDuxD3nUyEBhvBozBd",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "3751420194075",
                            "quote": "200000000"
                          }
                        },
                        {
                          "position": "78:3:0:0",
                          "checkpoint": 78,
                          "timestamp_ms": 1790292310975,
                          "digest": "DN4GpwXHkutPg6e3PtzYH1VBsLh6yZduzNZgwYqBndjv",
                          "kind": "curve_sell",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "19526091167490",
                            "quote": "1044561831"
                          }
                        },
                        {
                          "position": "77:2:0:0",
                          "checkpoint": 77,
                          "timestamp_ms": 1790292223152,
                          "digest": "3SGkxvU6yqu5TqDjVeaT67HFnbmM891gfPcRgBF8AUFK",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "8721503206516",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "75:2:0:0",
                          "checkpoint": 75,
                          "timestamp_ms": 1790292071263,
                          "digest": "DZUSvmZwg1mmRTNvwsv9QwSHCUkY9JdMJmUH76hWVNGV",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "5447759087342",
                            "quote": "300000000"
                          }
                        },
                        {
                          "position": "73:2:0:0",
                          "checkpoint": 73,
                          "timestamp_ms": 1790291951050,
                          "digest": "8u2etgke64ggzvL6CgER3P55hKLHdfjLcKMhA4mh7B2f",
                          "kind": "curve_sell",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "26034788223320",
                            "quote": "1460017592"
                          }
                        },
                        {
                          "position": "72:3:0:0",
                          "checkpoint": 72,
                          "timestamp_ms": 1790291902822,
                          "digest": "FKVdE99Xx1kVNm7ZXsFDQiCFQT5HRmWGVV8XpFww95zM",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "8150599640997",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "71:2:0:0",
                          "checkpoint": 71,
                          "timestamp_ms": 1790291862513,
                          "digest": "756k8ihbmGDV7H4jbbTzypiCvAUwqDE93GkRuu837AmY",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "6812821545707",
                            "quote": "400000000"
                          }
                        },
                        {
                          "position": "69:2:0:0",
                          "checkpoint": 69,
                          "timestamp_ms": 1790291805652,
                          "digest": "H1RXw9kERb9Bu1618kmLBbqGPc7M1CcQe71YTSFXQ5Wz",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "3509251665786",
                            "quote": "200000000"
                          }
                        },
                        {
                          "position": "67:2:0:0",
                          "checkpoint": 67,
                          "timestamp_ms": 1790291780467,
                          "digest": "Fvi1nuKQJuXPZ6Em3ikMtMf6EpVHfTDFnFfUrDg6H4ju",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "9090112329965",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "66:3:0:0",
                          "checkpoint": 66,
                          "timestamp_ms": 1790291692753,
                          "digest": "GQ3GhAb9UoxDj5fGaLXydR959ZxHgpgHujrHR8ThCyGA",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "7617031677259",
                            "quote": "400000000"
                          }
                        },
                        {
                          "position": "65:2:0:0",
                          "checkpoint": 65,
                          "timestamp_ms": 1790291612958,
                          "digest": "8tKUY131n67D4cAobMjkwhZuKDHEgGekt3VKtZH7jnKR",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "5926920144463",
                            "quote": "300000000"
                          }
                        },
                        {
                          "position": "63:2:0:0",
                          "checkpoint": 63,
                          "timestamp_ms": 1790291477125,
                          "digest": "2TYxvwuzj3foxGfdBW1yFnXgoPgDmyxg67iAkPjF6rsp",
                          "kind": "curve_sell",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "14380785767136",
                            "quote": "715053316"
                          }
                        },
                        {
                          "position": "61:2:0:0",
                          "checkpoint": 61,
                          "timestamp_ms": 1790291372968,
                          "digest": "9kgQAWBU671u8BTpUdd3nUpS4wims9j3zNp351iPY2w9",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "7593587932498",
                            "quote": "400000000"
                          }
                        },
                        {
                          "position": "60:3:0:0",
                          "checkpoint": 60,
                          "timestamp_ms": 1790291332768,
                          "digest": "5NFuVMsSQWiopPakmqkhk8eDtmpWcMcN8NCM1xZwkRFL",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "5908340692604",
                            "quote": "300000000"
                          }
                        },
                        {
                          "position": "59:2:0:0",
                          "checkpoint": 59,
                          "timestamp_ms": 1790291300487,
                          "digest": "BmkkgCea7VTFSh2ijewZNVwBcovYjE9gV1M9GUNQcXz8",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "4045330586400",
                            "quote": "200000000"
                          }
                        },
                        {
                          "position": "57:2:0:0",
                          "checkpoint": 57,
                          "timestamp_ms": 1790291259682,
                          "digest": "DuPoQB6ujY8WFxDjknGWudzcvJeMPmgW6KTWtdPrMDi",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "10506547322682",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "55:2:0:0",
                          "checkpoint": 55,
                          "timestamp_ms": 1790291163553,
                          "digest": "FHD46AQcDASiuTiaPpxnehakjxqCmZWtQrV9Z6JfviSA",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "6588796329227",
                            "quote": "300000000"
                          }
                        },
                        {
                          "position": "54:3:0:0",
                          "checkpoint": 54,
                          "timestamp_ms": 1790291083867,
                          "digest": "9thRdBCfhxmFCs3PZ7NM318K97U5yMdRvX41dSPYAdG9",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "4518007095803",
                            "quote": "200000000"
                          }
                        },
                        {
                          "position": "53:2:0:0",
                          "checkpoint": 53,
                          "timestamp_ms": 1790291012100,
                          "digest": "98GTaSQvV6ViLEuarG9XruBmb7RGfALkpG69kwzhuTc7",
                          "kind": "curve_sell",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "20764228603231",
                            "quote": "919788013"
                          }
                        },
                        {
                          "position": "51:2:0:0",
                          "checkpoint": 51,
                          "timestamp_ms": 1790290892323,
                          "digest": "AXQhRRKZW3s2ZeAuXPUxs8ycGaPFPGLsTmvQ9JdmJB1v",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "8415305408708",
                            "quote": "400000000"
                          }
                        },
                        {
                          "position": "49:2:0:0",
                          "checkpoint": 49,
                          "timestamp_ms": 1790290804222,
                          "digest": "95mVC19wRydyoo59mTnVSrGsHko9ZqU816rXwBxVXxDx",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "4349150581991",
                            "quote": "200000000"
                          }
                        },
                        {
                          "position": "48:3:0:0",
                          "checkpoint": 48,
                          "timestamp_ms": 1790290772050,
                          "digest": "AGddeoLgXXMKaGaCRjyaYrYJ3ppM4612g6ozsxWyvL7w",
                          "kind": "curve_sell",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "16774508870978",
                            "quote": "764832424"
                          }
                        },
                        {
                          "position": "47:2:0:0",
                          "checkpoint": 47,
                          "timestamp_ms": 1790290747797,
                          "digest": "CdrvghLBD9fd2AvSR8oz81mJRjeh6EuBDyaTrHFVRVAq",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "10371056760884",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "45:2:0:0",
                          "checkpoint": 45,
                          "timestamp_ms": 1790290723048,
                          "digest": "5E29Ftzo9Ja2Q1aNhu2VTA9oaH3KAD7JqoTEaSBD5NHF",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "6501953600169",
                            "quote": "300000000"
                          }
                        },
                        {
                          "position": "43:2:0:0",
                          "checkpoint": 43,
                          "timestamp_ms": 1790290555975,
                          "digest": "2pRALWVYoKVoJzpHP1c6sv6PyLprTt4NB8ZJSxsitdJ3",
                          "kind": "curve_sell",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "22366011827971",
                            "quote": "1032519919"
                          }
                        },
                        {
                          "position": "42:3:0:0",
                          "checkpoint": 42,
                          "timestamp_ms": 1790290484317,
                          "digest": "oh8B749jAQce4gzWvhdZKQtVrsg5MZ754HouX5TX5HU",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "10090640537492",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "41:2:0:0",
                          "checkpoint": 41,
                          "timestamp_ms": 1790290420578,
                          "digest": "C3QPhxmh3jULTYgnfAdHdexCkTM8HXhu1wCTvYog58CX",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "8476682549523",
                            "quote": "400000000"
                          }
                        },
                        {
                          "position": "39:2:0:0",
                          "checkpoint": 39,
                          "timestamp_ms": 1790290316857,
                          "digest": "2hVpc5VCUDoqhM6BwYnz9xY16UT2tJW7CM5wjKd3CVuw",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "4381401607401",
                            "quote": "200000000"
                          }
                        },
                        {
                          "position": "37:2:0:0",
                          "checkpoint": 37,
                          "timestamp_ms": 1790290244812,
                          "digest": "BiMhGgibPfnx2wt9d4RCxprcN87RLEmteptRgq2y2CuG",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "11397331501323",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "36:3:0:0",
                          "checkpoint": 36,
                          "timestamp_ms": 1790290220668,
                          "digest": "DrG9S2qJMeCuMv4q5tBRBGFibk83G7LvLrvKWrvEEni",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "9604129721890",
                            "quote": "400000000"
                          }
                        },
                        {
                          "position": "35:2:0:0",
                          "checkpoint": 35,
                          "timestamp_ms": 1790290204443,
                          "digest": "BsC716cvXCCA7G9edUyNqDWVWCCzLhG2nnfwWJFdraCU",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "7507286723747",
                            "quote": "300000000"
                          }
                        },
                        {
                          "position": "33:2:0:0",
                          "checkpoint": 33,
                          "timestamp_ms": 1790290108750,
                          "digest": "9W2yD7WbuV1UWJCSDBMFb1Nx5pp8aGgp282WJ22Qrqsv",
                          "kind": "curve_sell",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "9239311709861",
                            "quote": "355993950"
                          }
                        },
                        {
                          "position": "31:2:0:0",
                          "checkpoint": 31,
                          "timestamp_ms": 1790289957733,
                          "digest": "8wbyvB4nXMjzemyuQzNSG1S7wVnKHyChLDxaUmKj2z1X",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "9994531589856",
                            "quote": "400000000"
                          }
                        },
                        {
                          "position": "30:3:0:0",
                          "checkpoint": 30,
                          "timestamp_ms": 1790289894103,
                          "digest": "5X6KKVRtQNrEEScN9rjVsHKkFpy1aj5uiqEj7GWQ39Le",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "7819018218281",
                            "quote": "300000000"
                          }
                        },
                        {
                          "position": "29:2:0:0",
                          "checkpoint": 29,
                          "timestamp_ms": 1790289838392,
                          "digest": "EZyyj9q5bZzmWQVy9dNLVfmQA6iA3TcKe4vgmELrYvSC",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "5375179209974",
                            "quote": "200000000"
                          }
                        },
                        {
                          "position": "27:2:0:0",
                          "checkpoint": 27,
                          "timestamp_ms": 1790289750727,
                          "digest": "EKESaiSjVxD9g3RbbTSJopirgSf2t5KXFYYcRWEVfzns",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "14043301026045",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "25:2:0:0",
                          "checkpoint": 25,
                          "timestamp_ms": 1790289694738,
                          "digest": "7XALymbtojWLiSMYaoYT1iqAfV2UuuRyzd3ptN2BVKZR",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "8868319133319",
                            "quote": "300000000"
                          }
                        },
                        {
                          "position": "24:3:0:0",
                          "checkpoint": 24,
                          "timestamp_ms": 1790289678622,
                          "digest": "BHpv8F3F1YfByyshtBzECrescqAVvbg6NZjUgt29s1aQ",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "6108775810909",
                            "quote": "200000000"
                          }
                        },
                        {
                          "position": "23:2:0:0",
                          "checkpoint": 23,
                          "timestamp_ms": 1790289670425,
                          "digest": "FuAZUh8ffi38qq4MjXgVc2NH5kqxUo34nZzZEeZDLBG1",
                          "kind": "curve_sell",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "17108903056266",
                            "quote": "550853084"
                          }
                        },
                        {
                          "position": "21:2:0:0",
                          "checkpoint": 21,
                          "timestamp_ms": 1790289503788,
                          "digest": "JAtS9V6Ebg7TaHdyMxeyjZaX7tbzvMgucsfL6UtTgo3U",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "11806817918054",
                            "quote": "400000000"
                          }
                        },
                        {
                          "position": "19:2:0:0",
                          "checkpoint": 19,
                          "timestamp_ms": 1790289368827,
                          "digest": "8HwSMj9LBzeodhgy9PavABn3u8gzHALRrbdvQU9y15TR",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "6139529417021",
                            "quote": "200000000"
                          }
                        },
                        {
                          "position": "18:3:0:0",
                          "checkpoint": 18,
                          "timestamp_ms": 1790289313225,
                          "digest": "ELyF76zwco5e4GmnbUgCpuvZCKDHdvuqYHwZaVPvE3on",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0x8f77c927ae948e8b9f8b2642fc8f64e4d6942fe7f79dff16cba805b423de7ca2",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "19441771381794",
                            "quote": "600000000"
                          }
                        },
                        {
                          "position": "17:2:0:0",
                          "checkpoint": 17,
                          "timestamp_ms": 1790289265542,
                          "digest": "ADYBD8RBWTwTBTARXvaD9NxhWdJ16dkprJuHjqGYqgMU",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "17483514193131",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "15:2:0:0",
                          "checkpoint": 15,
                          "timestamp_ms": 1790289193933,
                          "digest": "2CYceKdzN8tCHxNBsiAtbvu8ifu6CcUdbfviYSn4AtL3",
                          "kind": "curve_buy",
                          "source": "user",
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "meme": "11107127895348",
                            "quote": "300000000"
                          }
                        },
                        {
                          "position": "13:2:1:0",
                          "checkpoint": 13,
                          "timestamp_ms": 1790289154000,
                          "digest": "Bv89LoGnEPjjgmUy8czNtwzbjok4YiqzGoVfE1XKBDd6",
                          "kind": "opening_delivery",
                          "source": null,
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "bid": "1000000000",
                            "meme": "50952098031934",
                            "refund_quote": "0"
                          }
                        },
                        {
                          "position": "13:2:0:0",
                          "checkpoint": 13,
                          "timestamp_ms": 1790289154000,
                          "digest": "Bv89LoGnEPjjgmUy8czNtwzbjok4YiqzGoVfE1XKBDd6",
                          "kind": "opening_delivery",
                          "source": null,
                          "actor": "0x471ce1566680b3ff5b9f0386f5e68f7bf2e1c44fc6947ef8b5fb3d856baabaee",
                          "lifecycle": null,
                          "amounts": {
                            "bid": "500000000",
                            "meme": "25476049015967",
                            "refund_quote": "0"
                          }
                        },
                        {
                          "position": "12:2:1:0",
                          "checkpoint": 12,
                          "timestamp_ms": 1790289148000,
                          "digest": "HgbhsaMwbfuiTUWNTtvW2HaJFU4aequJRHza1475MtLQ",
                          "kind": "opening_settlement",
                          "source": "opening_round_settlement",
                          "actor": null,
                          "lifecycle": null,
                          "amounts": {
                            "bids": "3500000000",
                            "meme": "178332343111771",
                            "refund_quote": "0"
                          }
                        },
                        {
                          "position": "12:2:0:1",
                          "checkpoint": 12,
                          "timestamp_ms": 1790289148000,
                          "digest": "HgbhsaMwbfuiTUWNTtvW2HaJFU4aequJRHza1475MtLQ",
                          "kind": "lifecycle",
                          "source": null,
                          "actor": null,
                          "lifecycle": "live",
                          "amounts": {}
                        },
                        {
                          "position": "12:2:0:0",
                          "checkpoint": 12,
                          "timestamp_ms": 1790289148000,
                          "digest": "HgbhsaMwbfuiTUWNTtvW2HaJFU4aequJRHza1475MtLQ",
                          "kind": "opening_settlement",
                          "source": "opening_round_settlement",
                          "actor": null,
                          "lifecycle": null,
                          "amounts": {
                            "meme": "178332343111771",
                            "quote": "3500000000"
                          }
                        },
                        {
                          "position": "11:3:0:0",
                          "checkpoint": 11,
                          "timestamp_ms": 1790289098000,
                          "digest": "HgcYdU5aRnXHYshvXeaLNcGUodYx4964th2H6fXRDxMb",
                          "kind": "opening_join",
                          "source": null,
                          "actor": "0xf20d9577af078ad7d98e3008edcbf3d39472ed01dc35fafbd6f9ef281eb97ecd",
                          "lifecycle": null,
                          "amounts": {
                            "bids": "3500000000",
                            "quote": "2000000000"
                          }
                        },
                        {
                          "position": "11:2:0:0",
                          "checkpoint": 11,
                          "timestamp_ms": 1790289098000,
                          "digest": "3fGDZN5dLcSEy8MPNsw1hUb5dU7rTGfjffqDgj5aFmRr",
                          "kind": "opening_join",
                          "source": null,
                          "actor": "0xace0c432a721f88f20b9af4762f497b0f88645b55178357f384edaef30375b29",
                          "lifecycle": null,
                          "amounts": {
                            "bids": "1500000000",
                            "quote": "1000000000"
                          }
                        },
                        {
                          "position": "10:2:1:0",
                          "checkpoint": 10,
                          "timestamp_ms": 1790289083000,
                          "digest": "98eBjf2aE6bH5PdZq3VVZqhYzYfhLQd87cnfPYy4p6UT",
                          "kind": "opening_join",
                          "source": null,
                          "actor": "0x471ce1566680b3ff5b9f0386f5e68f7bf2e1c44fc6947ef8b5fb3d856baabaee",
                          "lifecycle": null,
                          "amounts": {
                            "bids": "500000000",
                            "quote": "500000000"
                          }
                        },
                        {
                          "position": "10:2:0:1",
                          "checkpoint": 10,
                          "timestamp_ms": 1790289083000,
                          "digest": "98eBjf2aE6bH5PdZq3VVZqhYzYfhLQd87cnfPYy4p6UT",
                          "kind": "lifecycle",
                          "source": null,
                          "actor": null,
                          "lifecycle": "opening_round",
                          "amounts": {}
                        }
                      ],
                      "next_cursor": null
                    }
                  },
                  "empty": {
                    "summary": "200 · no observations",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "provenance": {
                        "network": "localnet",
                        "deployment_fingerprint": "5d2f2a4be1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c",
                        "checkpoint": 124,
                        "timestamp_ms": 1790294757750,
                        "observed_ms": 1790823983449,
                        "lag_ms": 529225699
                      },
                      "activity": [],
                      "next_cursor": null
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid path or query parameters. Fix the request before retrying.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_parameter",
                    "message": "The market data parameters are invalid."
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is malformed, unknown, or revoked. Replace it; do not retry the same key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_key_invalid",
                    "message": "A valid partner API key is required."
                  }
                }
              }
            }
          },
          "403": {
            "description": "The route or browser origin is not allowed for this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_origin_forbidden",
                    "message": "This origin is not enabled for this partner."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown resource or unsupported route/venue. Valid partner keys can read documented endpoints independently of frontend launch status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "Not found."
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Not Found"
              }
            }
          },
          "429": {
            "description": "Partner quota or endpoint/IP limit reached. Wait for Retry-After when present, then use bounded retries with jitter.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_rate_limited",
                    "message": "Too many requests."
                  }
                }
              }
            }
          },
          "502": {
            "description": "The upstream market service could not be read. Retry later.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "unreachable",
                    "message": "Market data could not be read."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Coming soon: launchpad indexing is not enabled. This is a deployment prerequisite, not a transient failure. Do not poll until availability is announced.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "production": {
                    "summary": "Current production response · 2026-10-21",
                    "value": {
                      "error": {
                        "code": "unavailable",
                        "message": "Market data is temporarily unavailable. Please retry."
                      }
                    }
                  },
                  "access": {
                    "summary": "Partner access unavailable",
                    "value": {
                      "error": {
                        "code": "partner_api_unavailable",
                        "message": "Partner access is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-blast-anchor": "launch-activity"
      }
    },
    "/api/v1/market/pools/blast_curve/{poolId}": {
      "get": {
        "operationId": "pool",
        "summary": "Curve pool summary · Coming soon",
        "tags": [
          "Market data"
        ],
        "description": "**Coming soon.** You can read the schemas, parameters, and examples now. Live requests currently return `503` because launchpad indexing is not enabled. A new key or repeated retries will not make this endpoint available.\n\nRead the Blast curve’s identity, lifecycle, economics, windowed flow, and current one-minute candle. The curve pool ID equals the launch ID. Candle is null when no candle is open. Plain pool summaries for Cetus and Bluefin are not exposed.\n\nMarket price fields are quote atoms per meme atom. To display quote coins per whole token, multiply by 10^(meme_decimals − quote_decimals). Preserve decimal precision.",
        "parameters": [
          {
            "name": "poolId",
            "in": "path",
            "required": true,
            "description": "Canonical on-chain object ID. Example IDs may not exist on mainnet.",
            "schema": {
              "type": "string",
              "pattern": "^0x[0-9a-f]{64}$",
              "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
            },
            "example": "0x00000000000000000000000000000000000000000000000000000000000000a1"
          }
        ],
        "responses": {
          "200": {
            "description": "Coming soon: this success contract is provided for integration planning. No successful production response is available yet.",
            "headers": {
              "Cache-Control": {
                "description": "Partner responses use no-store. Do not assume shared CDN caching.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketPool"
                },
                "examples": {
                  "captured": {
                    "summary": "200 · captured contract-test response",
                    "description": "An actual response captured from the API contract-test environment. These localnet IDs and timestamps are not live mainnet resources.",
                    "value": {
                      "provenance": {
                        "network": "localnet",
                        "deployment_fingerprint": "5d2f2a4be1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c",
                        "checkpoint": 23,
                        "timestamp_ms": 1790289670425,
                        "observed_ms": 1790823976613,
                        "lag_ms": 534306188
                      },
                      "pool": {
                        "pool_key": "blast_curve:0x7a79ac93eb3b3c2a93828a0a85367d15557e4d0b74bab119debb654c803f00fa",
                        "venue": "blast_curve",
                        "pool_id": "0x7a79ac93eb3b3c2a93828a0a85367d15557e4d0b74bab119debb654c803f00fa",
                        "coin": "0xc87fedd65e88c8517369ab363f8104caa51c711b323307b60ae2f447165ccd04::meme::MEME",
                        "metadata": {
                          "name": "TOAD fixture",
                          "symbol": "TOAD",
                          "description": "Fixture coin b",
                          "icon_url": "https://blast.fun/icons/toad.png"
                        },
                        "quote": "0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",
                        "lifecycle": "live",
                        "created_cursor": "10:2:0:0",
                        "created_at_ms": 1790289083000,
                        "launch": {
                          "migration_witness": "0xd617711ff37d35a2616a1e6aaca58f245fefdf9d1fc40e0c9b2ed208e37b0f70::mock_adapter::Venue",
                          "pool_tick_spacing": "60",
                          "pool_fee_rate": "2500",
                          "lp_fee_split": {
                            "creator_bps": "5000",
                            "auto_lp_bps": "2000",
                            "rewards_bps": "1000",
                            "burn_bps": "1000",
                            "recipients": [
                              {
                                "destination": "0x0000000000000000000000000000000000000000000000000000000000007ea3",
                                "bps": "1000"
                              }
                            ]
                          },
                          "allocation_plan": {
                            "curve_meme_bps": "7000",
                            "lp_meme_bps": "1900",
                            "lp_quote_bps": "8900",
                            "protocol_meme_bps": "100",
                            "protocol_quote_bps": "100",
                            "recipients": [
                              {
                                "destination": "0x0000000000000000000000000000000000000000000000000000000000007ea3",
                                "meme_bps": "1000",
                                "quote_bps": "1000"
                              }
                            ]
                          },
                          "opening_round_ms": "60000",
                          "creation_fee": "0",
                          "partner_id": null
                        },
                        "public_start_ms": "1790289083000",
                        "partner": null,
                        "migration": null,
                        "opening_round": {
                          "duration_ms": "60000",
                          "starts_at_ms": "1790289083000",
                          "ends_at_ms": "1790289143000",
                          "total_committed_quote": "3500000000",
                          "bidder_count": 3,
                          "settlement": {
                            "checkpoint": 12,
                            "timestamp_ms": 1790289148000,
                            "digest": "HgbhsaMwbfuiTUWNTtvW2HaJFU4aequJRHza1475MtLQ"
                          },
                          "delivered_count": 2,
                          "undelivered_count": 1,
                          "state": "settled"
                        },
                        "price": "0.000031667128012010982488273410384357",
                        "market_cap": "31667128012",
                        "inputs": {
                          "virtual_quote": "10000000000",
                          "meme_reserve": "470158921180125",
                          "quote_reserve": "4888582743",
                          "graduation_target": "30000000000",
                          "sqrt_price_x64": null,
                          "meme_is_coin_a": null,
                          "currency_supply": "1000000000000000",
                          "pending_burn_total": "0",
                          "balance_0x0": "0",
                          "meme_decimals": "6",
                          "quote_decimals": "9"
                        },
                        "supply": "1000000000000000",
                        "windows": {
                          "5m": {
                            "volume_quote": "950853084",
                            "volume_usd": "3.2824399312764",
                            "buys": 1,
                            "sells": 1,
                            "trades": 2,
                            "net_quote_flow": "-150853084",
                            "buyers": 1,
                            "sellers": 1
                          },
                          "1h": {
                            "volume_quote": "6050853084",
                            "volume_usd": "20.8881499312764",
                            "buys": 6,
                            "sells": 1,
                            "trades": 7,
                            "net_quote_flow": "1449146916",
                            "buyers": 3,
                            "sellers": 1
                          },
                          "6h": {
                            "volume_quote": "6050853084",
                            "volume_usd": "20.8881499312764",
                            "buys": 6,
                            "sells": 1,
                            "trades": 7,
                            "net_quote_flow": "1449146916",
                            "buyers": 3,
                            "sellers": 1
                          },
                          "24h": {
                            "volume_quote": "6050853084",
                            "volume_usd": "20.8881499312764",
                            "buys": 6,
                            "sells": 1,
                            "trades": 7,
                            "net_quote_flow": "1449146916",
                            "buyers": 3,
                            "sellers": 1
                          },
                          "all": {
                            "volume_quote": "6050853084",
                            "volume_usd": "20.8881499312764",
                            "buys": 6,
                            "sells": 1,
                            "trades": 7,
                            "net_quote_flow": "1449146916",
                            "buyers": 3,
                            "sellers": 1
                          }
                        },
                        "holders": 4,
                        "last_trade_cursor": "23:2:0:0",
                        "quote_usd": {
                          "price": "345210000",
                          "expo": -8,
                          "publish_time": 1790288863,
                          "age_ms": 807425
                        }
                      },
                      "candle": {
                        "bucket_start": 1790289660000,
                        "interval": "1m",
                        "open": "0.000034078289285714053056936433675057",
                        "high": "0.000034078289285714053056936433675057",
                        "low": "0.000031667128012010982488273410384357",
                        "close": "0.000031667128012010982488273410384357",
                        "volume_quote": "550853084",
                        "volume_meme": "17108903056266",
                        "volume_usd": "1.9015999312764",
                        "buys": 0,
                        "sells": 1,
                        "trades": 1
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid path or query parameters. Fix the request before retrying.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_parameter",
                    "message": "The market data parameters are invalid."
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is malformed, unknown, or revoked. Replace it; do not retry the same key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_key_invalid",
                    "message": "A valid partner API key is required."
                  }
                }
              }
            }
          },
          "403": {
            "description": "The route or browser origin is not allowed for this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_origin_forbidden",
                    "message": "This origin is not enabled for this partner."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown resource or unsupported route/venue. Valid partner keys can read documented endpoints independently of frontend launch status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "Not found."
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Not Found"
              }
            }
          },
          "429": {
            "description": "Partner quota or endpoint/IP limit reached. Wait for Retry-After when present, then use bounded retries with jitter.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_rate_limited",
                    "message": "Too many requests."
                  }
                }
              }
            }
          },
          "502": {
            "description": "The upstream market service could not be read. Retry later.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "unreachable",
                    "message": "Market data could not be read."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Coming soon: launchpad indexing is not enabled. This is a deployment prerequisite, not a transient failure. Do not poll until availability is announced.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "production": {
                    "summary": "Current production response · 2026-10-21",
                    "value": {
                      "error": {
                        "code": "unavailable",
                        "message": "Market data is temporarily unavailable. Please retry."
                      }
                    }
                  },
                  "access": {
                    "summary": "Partner access unavailable",
                    "value": {
                      "error": {
                        "code": "partner_api_unavailable",
                        "message": "Partner access is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-blast-anchor": "curve-pool-summary"
      }
    },
    "/api/v1/market/pools/{venue}/{poolId}/candles": {
      "get": {
        "operationId": "candles",
        "summary": "Pool candles · Coming soon",
        "tags": [
          "Market data"
        ],
        "description": "**Coming soon.** You can read the schemas, parameters, and examples now. Live requests currently return `503` because launchpad indexing is not enabled. A new key or repeated retries will not make this endpoint available.\n\nOHLC candles for one pool, oldest first. Each page contains the newest limit candles within the requested bounds. This does not merge the curve and venue pools into one chart.\n\nTo page backward, set to to the oldest returned bucket_start. Stop on an empty array. Gaps are valid: an interval without trades has no candle. Without to, the page may include the current open candle. Migration is null before migration.\n\nOHLC prices are quote atoms per meme atom; volumes are atomic decimal strings. To display quote coins per token, scale by 10^(meme_decimals − quote_decimals).",
        "parameters": [
          {
            "name": "venue",
            "in": "path",
            "required": true,
            "description": "Supported pool venue.",
            "schema": {
              "type": "string",
              "enum": [
                "blast_curve",
                "cetus",
                "bluefin"
              ]
            },
            "example": "blast_curve"
          },
          {
            "name": "poolId",
            "in": "path",
            "required": true,
            "description": "Canonical on-chain object ID. Example IDs may not exist on mainnet.",
            "schema": {
              "type": "string",
              "pattern": "^0x[0-9a-f]{64}$",
              "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
            },
            "example": "0x00000000000000000000000000000000000000000000000000000000000000a1"
          },
          {
            "name": "interval",
            "in": "query",
            "required": true,
            "description": "Candle interval.",
            "schema": {
              "type": "string",
              "enum": [
                "1s",
                "1m",
                "5m",
                "15m",
                "1h",
                "4h",
                "1d",
                "1w"
              ]
            },
            "example": "1m"
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "Inclusive Unix-millisecond start.",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "Exclusive Unix-millisecond end; must be greater than from. Set to the oldest bucket_start to page backward.",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum results per page; between 1 and 2000.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 2000,
              "default": 500
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Coming soon: this success contract is provided for integration planning. No successful production response is available yet.",
            "headers": {
              "Cache-Control": {
                "description": "Partner responses use no-store. Do not assume shared CDN caching.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketCandles"
                },
                "examples": {
                  "captured": {
                    "summary": "200 · captured contract-test response",
                    "description": "An actual response captured from the API contract-test environment. These localnet IDs and timestamps are not live mainnet resources.",
                    "value": {
                      "provenance": {
                        "network": "localnet",
                        "deployment_fingerprint": "5d2f2a4be1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c",
                        "checkpoint": 38,
                        "timestamp_ms": 1790338482000,
                        "observed_ms": 1790843643099,
                        "lag_ms": 505161099
                      },
                      "interval": "1m",
                      "candles": [
                        {
                          "bucket_start": 1790337900000,
                          "interval": "1m",
                          "open": "0.000000000122373749260792971666866786",
                          "high": "0.000000000122373749260792971666866786",
                          "low": "0.000000000105137655714183836703644091",
                          "close": "0.000000000105137655714183836703644091",
                          "volume_quote": "2162556",
                          "volume_meme": "18940296278468975",
                          "volume_usd": null,
                          "buys": 1,
                          "sells": 1,
                          "trades": 2
                        },
                        {
                          "bucket_start": 1790337960000,
                          "interval": "1m",
                          "open": "0.000000000105137655714183836703644091",
                          "high": "0.000000000105137655714183836703644091",
                          "low": "0.000000000082600918022668624942845793",
                          "close": "0.000000000082600918022668624942845793",
                          "volume_quote": "2395673",
                          "volume_meme": "25966946393974104",
                          "volume_usd": null,
                          "buys": 0,
                          "sells": 1,
                          "trades": 1
                        },
                        {
                          "bucket_start": 1790338020000,
                          "interval": "1m",
                          "open": "0.000000000082600918022668624942845793",
                          "high": "0.000000000087034963560096828600833077",
                          "low": "0.000000000082600918022668624942845793",
                          "close": "0.000000000087034963560096828600833077",
                          "volume_quote": "500000",
                          "volume_meme": "5838024133784102",
                          "volume_usd": null,
                          "buys": 1,
                          "sells": 0,
                          "trades": 1
                        },
                        {
                          "bucket_start": 1790338080000,
                          "interval": "1m",
                          "open": "0.000000000087034963560096828600833077",
                          "high": "0.000000000096250813357602626508519759",
                          "low": "0.000000000087034963560096828600833077",
                          "close": "0.000000000096250813357602626508519759",
                          "volume_quote": "1000000",
                          "volume_meme": "10816484059991787",
                          "volume_usd": null,
                          "buys": 1,
                          "sells": 0,
                          "trades": 1
                        },
                        {
                          "bucket_start": 1790338140000,
                          "interval": "1m",
                          "open": "0.000000000096250813357602626508519759",
                          "high": "0.000000000096250813357602626508519759",
                          "low": "0.000000000090628952149657622046649509",
                          "close": "0.000000000090628952149657622046649509",
                          "volume_quote": "597963",
                          "volume_meme": "6467017801074185",
                          "volume_usd": null,
                          "buys": 0,
                          "sells": 1,
                          "trades": 1
                        }
                      ],
                      "migration": {
                        "cursor": "22:2:2:0",
                        "timestamp_ms": 1790337919000,
                        "curve_pool_key": "blast_curve:0x5fa358bfe3e17fd50d63fd4cdbb7feb9f16dcb4a362f57acc8b012baa98113bf",
                        "venue_pool_key": "cetus:0x381bbabbda5683069531d9a8354c4418cd4aa924c712f86d3c29005395955706"
                      }
                    }
                  },
                  "empty": {
                    "summary": "200 · no observations",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "provenance": {
                        "network": "localnet",
                        "deployment_fingerprint": "5d2f2a4be1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c",
                        "checkpoint": 38,
                        "timestamp_ms": 1790338482000,
                        "observed_ms": 1790843643099,
                        "lag_ms": 505161099
                      },
                      "interval": "1m",
                      "candles": [],
                      "migration": {
                        "cursor": "22:2:2:0",
                        "timestamp_ms": 1790337919000,
                        "curve_pool_key": "blast_curve:0x5fa358bfe3e17fd50d63fd4cdbb7feb9f16dcb4a362f57acc8b012baa98113bf",
                        "venue_pool_key": "cetus:0x381bbabbda5683069531d9a8354c4418cd4aa924c712f86d3c29005395955706"
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid path or query parameters. Fix the request before retrying.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_parameter",
                    "message": "The market data parameters are invalid."
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is malformed, unknown, or revoked. Replace it; do not retry the same key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_key_invalid",
                    "message": "A valid partner API key is required."
                  }
                }
              }
            }
          },
          "403": {
            "description": "The route or browser origin is not allowed for this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_origin_forbidden",
                    "message": "This origin is not enabled for this partner."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown resource or unsupported route/venue. Valid partner keys can read documented endpoints independently of frontend launch status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "Not found."
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Not Found"
              }
            }
          },
          "429": {
            "description": "Partner quota or endpoint/IP limit reached. Wait for Retry-After when present, then use bounded retries with jitter.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_rate_limited",
                    "message": "Too many requests."
                  }
                }
              }
            }
          },
          "502": {
            "description": "The upstream market service could not be read. Retry later.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "unreachable",
                    "message": "Market data could not be read."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Coming soon: launchpad indexing is not enabled. This is a deployment prerequisite, not a transient failure. Do not poll until availability is announced.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "production": {
                    "summary": "Current production response · 2026-10-21",
                    "value": {
                      "error": {
                        "code": "unavailable",
                        "message": "Market data is temporarily unavailable. Please retry."
                      }
                    }
                  },
                  "access": {
                    "summary": "Partner access unavailable",
                    "value": {
                      "error": {
                        "code": "partner_api_unavailable",
                        "message": "Partner access is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-blast-anchor": "pool-candles"
      }
    },
    "/api/v1/market/pools/{venue}/{poolId}/trades": {
      "get": {
        "operationId": "trades",
        "summary": "Venue pool trades · Coming soon",
        "tags": [
          "Market data"
        ],
        "description": "**Coming soon.** You can read the schemas, parameters, and examples now. Live requests currently return `503` because launchpad indexing is not enabled. A new key or repeated retries will not make this endpoint available.\n\nCompleted Cetus or Bluefin pool trades, newest first. Curve trades use the classified activity endpoint instead.\n\nPass the last row’s cursor as before for strictly earlier trades. Stop on an empty page or an archived_before boundary; earlier history may be archived. Preserve atomic amounts as strings. Price is quote atoms per meme atom, not a USD price.",
        "parameters": [
          {
            "name": "venue",
            "in": "path",
            "required": true,
            "description": "Supported pool venue.",
            "schema": {
              "type": "string",
              "enum": [
                "cetus",
                "bluefin"
              ]
            },
            "example": "cetus"
          },
          {
            "name": "poolId",
            "in": "path",
            "required": true,
            "description": "Canonical on-chain object ID. Example IDs may not exist on mainnet.",
            "schema": {
              "type": "string",
              "pattern": "^0x[0-9a-f]{64}$",
              "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
            },
            "example": "0x00000000000000000000000000000000000000000000000000000000000000a1"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum results per page; between 1 and 200.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 200,
              "default": 50
            }
          },
          {
            "name": "before",
            "in": "query",
            "required": false,
            "description": "Last trade cursor from the previous page. Returns strictly earlier trades. This is not an opaque cursor token.",
            "schema": {
              "type": "string",
              "pattern": "^(0|[1-9][0-9]*):(0|[1-9][0-9]*):(0|[1-9][0-9]*):(0|[1-9][0-9]*)$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Coming soon: this success contract is provided for integration planning. No successful production response is available yet.",
            "headers": {
              "Cache-Control": {
                "description": "Partner responses use no-store. Do not assume shared CDN caching.",
                "schema": {
                  "type": "string"
                }
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketTrades"
                },
                "examples": {
                  "captured": {
                    "summary": "200 · captured contract-test response",
                    "description": "An actual response captured from the API contract-test environment. These localnet IDs and timestamps are not live mainnet resources.",
                    "value": {
                      "provenance": {
                        "network": "localnet",
                        "deployment_fingerprint": "5d2f2a4be1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c",
                        "checkpoint": 38,
                        "timestamp_ms": 1790338482000,
                        "observed_ms": 1790843643222,
                        "lag_ms": 505161222
                      },
                      "trades": [
                        {
                          "cursor": "28:2:0:0",
                          "checkpoint": 28,
                          "timestamp_ms": 1790338175000,
                          "digest": "FvFRVLsgYqA3DyDLNaiqFP77Z5UuVrFfYyRzpLEHEwZh",
                          "pool_key": "cetus:0x381bbabbda5683069531d9a8354c4418cd4aa924c712f86d3c29005395955706",
                          "venue": "cetus",
                          "coin": "0x6a2e1f1f579612328fd1519f19ab99f426bda2c42262340dc68892466a445361::meme::MEME",
                          "quote": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                          "trader": "0xfa9cbb9ac8d8b1d912be45fc4aac964488f4ac3c5a19553ab226d8c448d92634",
                          "side": "sell",
                          "kind": "swap",
                          "quote_amount": "597963",
                          "meme_amount": "6467017801074185",
                          "meme_fee": "64670178010742",
                          "quote_fee": "0",
                          "curve": null,
                          "opening_round": null,
                          "venue_swap": {
                            "amount_in": "6467017801074185",
                            "amount_out": "597963",
                            "ref_amount": "0",
                            "before_sqrt_price": "1880258317151797670252290",
                            "after_sqrt_price": "1937698678767445124954903",
                            "a_to_b": false
                          },
                          "inputs": {
                            "virtual_quote": null,
                            "meme_reserve": null,
                            "quote_reserve": null,
                            "graduation_target": null,
                            "sqrt_price_x64": "1937698678767445124954903",
                            "meme_is_coin_a": false,
                            "currency_supply": "883333321992279929",
                            "pending_burn_total": "0",
                            "balance_0x0": "0",
                            "meme_decimals": "9",
                            "quote_decimals": "6"
                          },
                          "usd": null,
                          "volume_usd": null,
                          "labels": [],
                          "price": "0.000000000090628952149657622046649509",
                          "market_cap": "80055573"
                        },
                        {
                          "cursor": "27:2:0:0",
                          "checkpoint": 27,
                          "timestamp_ms": 1790338095000,
                          "digest": "21xgg59ETb1e1prLGiKLh3EGvsNbeMtaWZAYNcnqq7Cb",
                          "pool_key": "cetus:0x381bbabbda5683069531d9a8354c4418cd4aa924c712f86d3c29005395955706",
                          "venue": "cetus",
                          "coin": "0x6a2e1f1f579612328fd1519f19ab99f426bda2c42262340dc68892466a445361::meme::MEME",
                          "quote": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                          "trader": "0x9f33a6fc03a9dca7e431f38f3fcd5c1f2f646061aaa2b21bc22d7a760d067aac",
                          "side": "buy",
                          "kind": "swap",
                          "quote_amount": "1000000",
                          "meme_amount": "10816484059991787",
                          "meme_fee": "0",
                          "quote_fee": "10000",
                          "curve": null,
                          "opening_round": null,
                          "venue_swap": {
                            "amount_in": "1000000",
                            "amount_out": "10816484059991787",
                            "ref_amount": "0",
                            "before_sqrt_price": "1977301275828029191423482",
                            "after_sqrt_price": "1880258317151797670252290",
                            "a_to_b": true
                          },
                          "inputs": {
                            "virtual_quote": null,
                            "meme_reserve": null,
                            "quote_reserve": null,
                            "graduation_target": null,
                            "sqrt_price_x64": "1880258317151797670252290",
                            "meme_is_coin_a": false,
                            "currency_supply": "883333321992279929",
                            "pending_burn_total": "0",
                            "balance_0x0": "0",
                            "meme_decimals": "9",
                            "quote_decimals": "6"
                          },
                          "usd": null,
                          "volume_usd": null,
                          "labels": [
                            "whale",
                            "top_trader"
                          ],
                          "price": "0.000000000096250813357602626508519759",
                          "market_cap": "85021550"
                        },
                        {
                          "cursor": "26:2:0:0",
                          "checkpoint": 26,
                          "timestamp_ms": 1790338028000,
                          "digest": "3HGSxnXENQaiJDbCUGHnfqMTC9cBS1yPGLM2cBC8ejpk",
                          "pool_key": "cetus:0x381bbabbda5683069531d9a8354c4418cd4aa924c712f86d3c29005395955706",
                          "venue": "cetus",
                          "coin": "0x6a2e1f1f579612328fd1519f19ab99f426bda2c42262340dc68892466a445361::meme::MEME",
                          "quote": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                          "trader": "0xfa9cbb9ac8d8b1d912be45fc4aac964488f4ac3c5a19553ab226d8c448d92634",
                          "side": "buy",
                          "kind": "swap",
                          "quote_amount": "500000",
                          "meme_amount": "5838024133784102",
                          "meme_fee": "0",
                          "quote_fee": "5000",
                          "curve": null,
                          "opening_round": null,
                          "venue_swap": {
                            "amount_in": "500000",
                            "amount_out": "5838024133784102",
                            "ref_amount": "0",
                            "before_sqrt_price": "2029678659423607949388433",
                            "after_sqrt_price": "1977301275828029191423482",
                            "a_to_b": true
                          },
                          "inputs": {
                            "virtual_quote": null,
                            "meme_reserve": null,
                            "quote_reserve": null,
                            "graduation_target": null,
                            "sqrt_price_x64": "1977301275828029191423482",
                            "meme_is_coin_a": false,
                            "currency_supply": "883333321992279929",
                            "pending_burn_total": "0",
                            "balance_0x0": "0",
                            "meme_decimals": "9",
                            "quote_decimals": "6"
                          },
                          "usd": null,
                          "volume_usd": null,
                          "labels": [],
                          "price": "0.000000000087034963560096828600833077",
                          "market_cap": "76880883"
                        },
                        {
                          "cursor": "25:2:0:0",
                          "checkpoint": 25,
                          "timestamp_ms": 1790337974000,
                          "digest": "EaGRQqmRPVsBDijhm5yWYV9fBdCQRNehLjd8fjs3pcrX",
                          "pool_key": "cetus:0x381bbabbda5683069531d9a8354c4418cd4aa924c712f86d3c29005395955706",
                          "venue": "cetus",
                          "coin": "0x6a2e1f1f579612328fd1519f19ab99f426bda2c42262340dc68892466a445361::meme::MEME",
                          "quote": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                          "trader": "0x19e889f3a5620aadde8f93461c04bef7cac0ede49f11e6002c172fd62c8ae7d5",
                          "side": "sell",
                          "kind": "swap",
                          "quote_amount": "2395673",
                          "meme_amount": "25966946393974104",
                          "meme_fee": "259669463939742",
                          "quote_fee": "0",
                          "curve": null,
                          "opening_round": null,
                          "venue_swap": {
                            "amount_in": "25966946393974104",
                            "amount_out": "2395673",
                            "ref_amount": "0",
                            "before_sqrt_price": "1799038998794213125756839",
                            "after_sqrt_price": "2029678659423607949388433",
                            "a_to_b": false
                          },
                          "inputs": {
                            "virtual_quote": null,
                            "meme_reserve": null,
                            "quote_reserve": null,
                            "graduation_target": null,
                            "sqrt_price_x64": "2029678659423607949388433",
                            "meme_is_coin_a": false,
                            "currency_supply": "883333321992279929",
                            "pending_burn_total": "0",
                            "balance_0x0": "0",
                            "meme_decimals": "9",
                            "quote_decimals": "6"
                          },
                          "usd": null,
                          "volume_usd": null,
                          "labels": [
                            "whale"
                          ],
                          "price": "0.000000000082600918022668624942845793",
                          "market_cap": "72964143"
                        },
                        {
                          "cursor": "24:2:0:0",
                          "checkpoint": 24,
                          "timestamp_ms": 1790337933000,
                          "digest": "7PFrpxq5miWGiBfZstjAa85KGNP4cPzMnnJcaY71ESXf",
                          "pool_key": "cetus:0x381bbabbda5683069531d9a8354c4418cd4aa924c712f86d3c29005395955706",
                          "venue": "cetus",
                          "coin": "0x6a2e1f1f579612328fd1519f19ab99f426bda2c42262340dc68892466a445361::meme::MEME",
                          "quote": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                          "trader": "0x9f33a6fc03a9dca7e431f38f3fcd5c1f2f646061aaa2b21bc22d7a760d067aac",
                          "side": "sell",
                          "kind": "swap",
                          "quote_amount": "1662556",
                          "meme_amount": "14805321558750365",
                          "meme_fee": "148053215587504",
                          "quote_fee": "0",
                          "curve": null,
                          "opening_round": null,
                          "venue_swap": {
                            "amount_in": "14805321558750365",
                            "amount_out": "1662556",
                            "ref_amount": "0",
                            "before_sqrt_price": "1667537424138070198668339",
                            "after_sqrt_price": "1799038998794213125756839",
                            "a_to_b": false
                          },
                          "inputs": {
                            "virtual_quote": null,
                            "meme_reserve": null,
                            "quote_reserve": null,
                            "graduation_target": null,
                            "sqrt_price_x64": "1799038998794213125756839",
                            "meme_is_coin_a": false,
                            "currency_supply": "883333321992279929",
                            "pending_burn_total": "0",
                            "balance_0x0": "0",
                            "meme_decimals": "9",
                            "quote_decimals": "6"
                          },
                          "usd": null,
                          "volume_usd": null,
                          "labels": [
                            "whale",
                            "top_trader"
                          ],
                          "price": "0.000000000105137655714183836703644091",
                          "market_cap": "92871594"
                        },
                        {
                          "cursor": "23:2:0:0",
                          "checkpoint": 23,
                          "timestamp_ms": 1790337926000,
                          "digest": "5k33Q4EUqK1job8VbtKThLzKj68EoUepNjm9kXXg1qNs",
                          "pool_key": "cetus:0x381bbabbda5683069531d9a8354c4418cd4aa924c712f86d3c29005395955706",
                          "venue": "cetus",
                          "coin": "0x6a2e1f1f579612328fd1519f19ab99f426bda2c42262340dc68892466a445361::meme::MEME",
                          "quote": "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",
                          "trader": "0xfa9cbb9ac8d8b1d912be45fc4aac964488f4ac3c5a19553ab226d8c448d92634",
                          "side": "buy",
                          "kind": "swap",
                          "quote_amount": "500000",
                          "meme_amount": "4134974719718610",
                          "meme_fee": "0",
                          "quote_fee": "5000",
                          "curve": null,
                          "opening_round": null,
                          "venue_swap": {
                            "amount_in": "500000",
                            "amount_out": "4134974719718610",
                            "ref_amount": "0",
                            "before_sqrt_price": "1704635447731258001359673",
                            "after_sqrt_price": "1667537424138070198668339",
                            "a_to_b": true
                          },
                          "inputs": {
                            "virtual_quote": null,
                            "meme_reserve": null,
                            "quote_reserve": null,
                            "graduation_target": null,
                            "sqrt_price_x64": "1667537424138070198668339",
                            "meme_is_coin_a": false,
                            "currency_supply": "883333321992279929",
                            "pending_burn_total": "0",
                            "balance_0x0": "0",
                            "meme_decimals": "9",
                            "quote_decimals": "6"
                          },
                          "usd": null,
                          "volume_usd": null,
                          "labels": [],
                          "price": "0.000000000122373749260792971666866786",
                          "market_cap": "108096810"
                        }
                      ]
                    }
                  },
                  "empty": {
                    "summary": "200 · no observations",
                    "description": "Illustrative data matching the public response contract. IDs are examples; use your own resource IDs for live requests.",
                    "value": {
                      "provenance": {
                        "network": "localnet",
                        "deployment_fingerprint": "5d2f2a4be1b2c3d4e5f60718293a4b5c6d7e8f90a1b2c3d4e5f60718293a4b5c",
                        "checkpoint": 38,
                        "timestamp_ms": 1790338482000,
                        "observed_ms": 1790843643222,
                        "lag_ms": 505161222
                      },
                      "trades": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid path or query parameters. Fix the request before retrying.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "invalid_parameter",
                    "message": "The market data parameters are invalid."
                  }
                }
              }
            }
          },
          "401": {
            "description": "The key is malformed, unknown, or revoked. Replace it; do not retry the same key.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_key_invalid",
                    "message": "A valid partner API key is required."
                  }
                }
              }
            }
          },
          "403": {
            "description": "The route or browser origin is not allowed for this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_origin_forbidden",
                    "message": "This origin is not enabled for this partner."
                  }
                }
              }
            }
          },
          "404": {
            "description": "Unknown resource or unsupported route/venue. Valid partner keys can read documented endpoints independently of frontend launch status.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "not_found",
                    "message": "Not found."
                  }
                }
              },
              "text/plain": {
                "schema": {
                  "type": "string"
                },
                "example": "Not Found"
              }
            }
          },
          "429": {
            "description": "Partner quota or endpoint/IP limit reached. Wait for Retry-After when present, then use bounded retries with jitter.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "partner_rate_limited",
                    "message": "Too many requests."
                  }
                }
              }
            }
          },
          "502": {
            "description": "The upstream market service could not be read. Retry later.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "error": {
                    "code": "unreachable",
                    "message": "Market data could not be read."
                  }
                }
              }
            }
          },
          "503": {
            "description": "Coming soon: launchpad indexing is not enabled. This is a deployment prerequisite, not a transient failure. Do not poll until availability is announced.",
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying, when supplied. Partner quota refusals include it. No remaining-quota or reset headers are guaranteed.",
                "schema": {
                  "type": "integer",
                  "minimum": 1
                },
                "example": 30
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "examples": {
                  "production": {
                    "summary": "Current production response · 2026-10-21",
                    "value": {
                      "error": {
                        "code": "unavailable",
                        "message": "Market data is temporarily unavailable. Please retry."
                      }
                    }
                  },
                  "access": {
                    "summary": "Partner access unavailable",
                    "value": {
                      "error": {
                        "code": "partner_api_unavailable",
                        "message": "Partner access is temporarily unavailable."
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "x-blast-anchor": "venue-pool-trades"
      }
    }
  },
  "components": {
    "securitySchemes": {
      "PartnerKey": {
        "type": "apiKey",
        "in": "header",
        "name": "X-Blast-Partner-Key",
        "description": "Partner read API key issued by Blast. Revocation takes effect on subsequent requests. Never commit a key or include it in a public URL."
      }
    },
    "schemas": {
      "SectionProvenance": {
        "type": "object",
        "properties": {
          "source": {
            "type": "string",
            "enum": [
              "replica",
              "primary",
              "blast-infra"
            ]
          },
          "network": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "mainnet",
                  "testnet",
                  "devnet",
                  "localnet"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "deployment": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "checkpoint": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ]
          },
          "timestampMs": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "Unix timestamp in milliseconds."
              },
              {
                "type": "null"
              }
            ]
          },
          "observedAt": {
            "type": "integer",
            "minimum": 0,
            "description": "Unix timestamp in milliseconds."
          },
          "lagMs": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "Age of the indexed checkpoint in milliseconds."
              },
              {
                "type": "null"
              }
            ]
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "source",
          "network",
          "deployment",
          "checkpoint",
          "timestampMs",
          "observedAt",
          "lagMs"
        ],
        "additionalProperties": false
      },
      "DiscoveryRow": {
        "type": "object",
        "properties": {
          "launchId": {
            "type": "string",
            "pattern": "^0x[0-9a-f]{64}$",
            "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
          },
          "coinType": {
            "type": "string",
            "pattern": "^0x[0-9a-f]{64}::[A-Za-z_][A-Za-z0-9_]*::[A-Za-z_][A-Za-z0-9_]*$",
            "description": "Canonical Move coin type. URL-encode when used in a path."
          },
          "quoteType": {
            "type": "string",
            "pattern": "^0x[0-9a-f]{64}::[A-Za-z_][A-Za-z0-9_]*::[A-Za-z_][A-Za-z0-9_]*$",
            "description": "Canonical Move coin type. URL-encode when used in a path."
          },
          "lifecycle": {
            "type": "string",
            "enum": [
              "opening_round",
              "live",
              "migration_ready",
              "migrated"
            ]
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "symbol": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "iconUrl": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "createdAtMs": {
            "type": "integer",
            "minimum": 0,
            "description": "Unix timestamp in milliseconds."
          },
          "graduatedAtMs": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "Unix timestamp in milliseconds."
              },
              {
                "type": "null"
              }
            ]
          },
          "quoteRemaining": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)$",
                "description": "Exact amount in the smallest coin units; preserve as a string or BigInt."
              },
              {
                "type": "null"
              }
            ]
          },
          "quoteDecimals": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 38
              },
              {
                "type": "null"
              }
            ]
          },
          "progressBps": {
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "description": "Progress in basis points: 10,000 = 100%.",
                "maximum": 10000
              },
              {
                "type": "null"
              }
            ]
          },
          "partner": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "partnerId": {
                    "type": "string",
                    "pattern": "^0x[0-9a-f]{64}$",
                    "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
                  },
                  "status": {
                    "type": "string",
                    "enum": [
                      "admitted",
                      "removal_scheduled",
                      "unknown"
                    ]
                  }
                },
                "required": [
                  "partnerId",
                  "status"
                ],
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "launchId",
          "coinType",
          "quoteType",
          "lifecycle",
          "name",
          "symbol",
          "iconUrl",
          "createdAtMs",
          "graduatedAtMs",
          "quoteRemaining",
          "quoteDecimals",
          "progressBps",
          "partner"
        ],
        "additionalProperties": false
      },
      "DiscoveryResponse": {
        "type": "object",
        "properties": {
          "view": {
            "type": "string",
            "enum": [
              "new",
              "near_graduation",
              "graduated"
            ]
          },
          "section": {
            "oneOf": [
              {
                "type": "object",
                "properties": {
                  "state": {
                    "const": "available"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "rows": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/DiscoveryRow"
                        }
                      },
                      "nextCursor": {
                        "anyOf": [
                          {
                            "type": "string",
                            "description": "Opaque page token. Pass unchanged to the next request; null marks the final page."
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "rows",
                      "nextCursor"
                    ],
                    "additionalProperties": false
                  },
                  "provenance": {
                    "$ref": "#/components/schemas/SectionProvenance"
                  }
                },
                "required": [
                  "state",
                  "data",
                  "provenance"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "state": {
                    "const": "stale"
                  },
                  "data": {
                    "type": "object",
                    "properties": {
                      "rows": {
                        "type": "array",
                        "items": {
                          "$ref": "#/components/schemas/DiscoveryRow"
                        }
                      },
                      "nextCursor": {
                        "anyOf": [
                          {
                            "type": "string",
                            "description": "Opaque page token. Pass unchanged to the next request; null marks the final page."
                          },
                          {
                            "type": "null"
                          }
                        ]
                      }
                    },
                    "required": [
                      "rows",
                      "nextCursor"
                    ],
                    "additionalProperties": false
                  },
                  "provenance": {
                    "$ref": "#/components/schemas/SectionProvenance"
                  },
                  "reason": {
                    "type": "string",
                    "description": "Why the data is stale."
                  }
                },
                "required": [
                  "state",
                  "data",
                  "provenance",
                  "reason"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "state": {
                    "const": "empty"
                  },
                  "provenance": {
                    "$ref": "#/components/schemas/SectionProvenance"
                  }
                },
                "required": [
                  "state",
                  "provenance"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "state": {
                    "const": "unavailable"
                  },
                  "reason": {
                    "type": "string"
                  },
                  "retryAfterSeconds": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "provenance": {
                    "$ref": "#/components/schemas/SectionProvenance"
                  }
                },
                "required": [
                  "state",
                  "reason"
                ],
                "additionalProperties": false
              }
            ],
            "discriminator": {
              "propertyName": "state"
            }
          },
          "error": {
            "$ref": "#/components/schemas/ErrorDetail"
          }
        },
        "required": [
          "view",
          "section"
        ],
        "additionalProperties": false
      },
      "SearchLaunch": {
        "type": "object",
        "properties": {
          "launchId": {
            "type": "string",
            "pattern": "^0x[0-9a-f]{64}$",
            "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
          },
          "coinType": {
            "type": "string",
            "pattern": "^0x[0-9a-f]{64}::[A-Za-z_][A-Za-z0-9_]*::[A-Za-z_][A-Za-z0-9_]*$",
            "description": "Canonical Move coin type. URL-encode when used in a path."
          },
          "name": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "symbol": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "iconUrl": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ]
          },
          "lifecycle": {
            "type": "string",
            "enum": [
              "opening_round",
              "live",
              "migration_ready",
              "migrated"
            ]
          },
          "creator": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^0x[0-9a-f]{64}$",
                "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
              },
              {
                "type": "null"
              }
            ]
          },
          "createdAtMs": {
            "type": "integer",
            "minimum": 0,
            "description": "Unix timestamp in milliseconds."
          }
        },
        "required": [
          "launchId",
          "coinType",
          "name",
          "symbol",
          "iconUrl",
          "lifecycle",
          "creator",
          "createdAtMs"
        ],
        "additionalProperties": false
      },
      "SearchResponse": {
        "type": "object",
        "properties": {
          "groups": {
            "type": "array",
            "items": {
              "oneOf": [
                {
                  "type": "object",
                  "properties": {
                    "group": {
                      "type": "string",
                      "enum": [
                        "onchain",
                        "wallets",
                        "coins"
                      ]
                    },
                    "section": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "const": "available"
                            },
                            "data": {
                              "type": "object",
                              "properties": {
                                "items": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "match": {
                                        "type": "string",
                                        "enum": [
                                          "launch_id",
                                          "pool_id",
                                          "creator",
                                          "coin_type",
                                          "ticker",
                                          "name",
                                          "words"
                                        ]
                                      },
                                      "launch": {
                                        "$ref": "#/components/schemas/SearchLaunch"
                                      },
                                      "pool": {
                                        "anyOf": [
                                          {
                                            "type": "object",
                                            "properties": {
                                              "venue": {
                                                "type": "string"
                                              },
                                              "poolId": {
                                                "type": "string",
                                                "pattern": "^0x[0-9a-f]{64}$",
                                                "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
                                              }
                                            },
                                            "required": [
                                              "venue",
                                              "poolId"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ]
                                      }
                                    },
                                    "required": [
                                      "match",
                                      "launch",
                                      "pool"
                                    ],
                                    "additionalProperties": false
                                  }
                                },
                                "nextCursor": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "description": "Opaque page token. Pass unchanged to the next request; null marks the final page."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "items",
                                "nextCursor"
                              ],
                              "additionalProperties": false
                            },
                            "provenance": {
                              "$ref": "#/components/schemas/SectionProvenance"
                            }
                          },
                          "required": [
                            "state",
                            "data",
                            "provenance"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "const": "stale"
                            },
                            "data": {
                              "type": "object",
                              "properties": {
                                "items": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "match": {
                                        "type": "string",
                                        "enum": [
                                          "launch_id",
                                          "pool_id",
                                          "creator",
                                          "coin_type",
                                          "ticker",
                                          "name",
                                          "words"
                                        ]
                                      },
                                      "launch": {
                                        "$ref": "#/components/schemas/SearchLaunch"
                                      },
                                      "pool": {
                                        "anyOf": [
                                          {
                                            "type": "object",
                                            "properties": {
                                              "venue": {
                                                "type": "string"
                                              },
                                              "poolId": {
                                                "type": "string",
                                                "pattern": "^0x[0-9a-f]{64}$",
                                                "description": "Canonical on-chain object ID: 0x followed by 64 lowercase hexadecimal characters."
                                              }
                                            },
                                            "required": [
                                              "venue",
                                              "poolId"
                                            ],
                                            "additionalProperties": false
                                          },
                                          {
                                            "type": "null"
                                          }
                                        ]
                                      }
                                    },
                                    "required": [
                                      "match",
                                      "launch",
                                      "pool"
                                    ],
                                    "additionalProperties": false
                                  }
                                },
                                "nextCursor": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "description": "Opaque page token. Pass unchanged to the next request; null marks the final page."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "items",
                                "nextCursor"
                              ],
                              "additionalProperties": false
                            },
                            "provenance": {
                              "$ref": "#/components/schemas/SectionProvenance"
                            },
                            "reason": {
                              "type": "string",
                              "description": "Why the data is stale."
                            }
                          },
                          "required": [
                            "state",
                            "data",
                            "provenance",
                            "reason"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "const": "empty"
                            },
                            "provenance": {
                              "$ref": "#/components/schemas/SectionProvenance"
                            }
                          },
                          "required": [
                            "state",
                            "provenance"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "const": "unavailable"
                            },
                            "reason": {
                              "type": "string"
                            },
                            "retryAfterSeconds": {
                              "type": "integer",
                              "minimum": 0
                            },
                            "provenance": {
                              "$ref": "#/components/schemas/SectionProvenance"
                            }
                          },
                          "required": [
                            "state",
                            "reason"
                          ],
                          "additionalProperties": false
                        }
                      ],
                      "discriminator": {
                        "propertyName": "state"
                      }
                    }
                  },
                  "required": [
                    "group",
                    "section"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "group": {
                      "const": "theses"
                    },
                    "section": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "const": "available"
                            },
                            "data": {
                              "type": "object",
                              "properties": {
                                "items": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "match": {
                                        "const": "words"
                                      },
                                      "launch": {
                                        "$ref": "#/components/schemas/SearchLaunch"
                                      },
                                      "thesis": {
                                        "type": "object",
                                        "properties": {
                                          "id": {
                                            "type": "string"
                                          },
                                          "thesisId": {
                                            "type": "string"
                                          },
                                          "kind": {
                                            "type": "string",
                                            "enum": [
                                              "creator_thesis",
                                              "creator_update",
                                              "community_thesis"
                                            ]
                                          },
                                          "stance": {
                                            "anyOf": [
                                              {
                                                "type": "string",
                                                "enum": [
                                                  "bullish",
                                                  "bearish",
                                                  "neutral"
                                                ]
                                              },
                                              {
                                                "type": "null"
                                              }
                                            ]
                                          },
                                          "body": {
                                            "type": "string"
                                          },
                                          "authorLabels": {
                                            "type": "array",
                                            "items": {
                                              "type": "string",
                                              "enum": [
                                                "creator",
                                                "wallet"
                                              ]
                                            }
                                          },
                                          "postedAt": {
                                            "type": "string",
                                            "format": "date-time"
                                          },
                                          "createdAt": {
                                            "type": "string",
                                            "format": "date-time"
                                          }
                                        },
                                        "required": [
                                          "id",
                                          "thesisId",
                                          "kind",
                                          "stance",
                                          "body",
                                          "authorLabels",
                                          "postedAt",
                                          "createdAt"
                                        ],
                                        "additionalProperties": false
                                      }
                                    },
                                    "required": [
                                      "match",
                                      "launch",
                                      "thesis"
                                    ],
                                    "additionalProperties": false
                                  }
                                },
                                "nextCursor": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "description": "Opaque page token. Pass unchanged to the next request; null marks the final page."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "items",
                                "nextCursor"
                              ],
                              "additionalProperties": false
                            },
                            "provenance": {
                              "$ref": "#/components/schemas/SectionProvenance"
                            }
                          },
                          "required": [
                            "state",
                            "data",
                            "provenance"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "const": "stale"
                            },
                            "data": {
                              "type": "object",
                              "properties": {
                                "items": {
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "match": {
                                        "const": "words"
                                      },
                                      "launch": {
                                        "$ref": "#/components/schemas/SearchLaunch"
                                      },
                                      "thesis": {
                                        "type": "object",
                                        "properties": {
                                          "id": {
                                            "type": "string"
                                          },
                                          "thesisId": {
                                            "type": "string"
                                          },
                                          "kind": {
                                            "type": "string",
                                            "enum": [
                                              "creator_thesis",
                                              "creator_update",
                                              "community_thesis"
                                            ]
                                          },
                                          "stance": {
                                            "anyOf": [
                                              {
                                                "type": "string",
                                                "enum": [
                                                  "bullish",
                                                  "bearish",
                                                  "neutral"
                                                ]
                                              },
                                              {
                                                "type": "null"
                                              }
                                            ]
                                          },
                                          "body": {
                                            "type": "string"
                                          },
                                          "authorLabels": {
                                            "type": "array",
                                            "items": {
                                              "type": "string",
                                              "enum": [
                                                "creator",
                                                "wallet"
                                              ]
                                            }
                                          },
                                          "postedAt": {
                                            "type": "string",
                                            "format": "date-time"
                                          },
                                          "createdAt": {
                                            "type": "string",
                                            "format": "date-time"
                                          }
                                        },
                                        "required": [
                                          "id",
                                          "thesisId",
                                          "kind",
                                          "stance",
                                          "body",
                                          "authorLabels",
                                          "postedAt",
                                          "createdAt"
                                        ],
                                        "additionalProperties": false
                                      }
                                    },
                                    "required": [
                                      "match",
                                      "launch",
                                      "thesis"
                                    ],
                                    "additionalProperties": false
                                  }
                                },
                                "nextCursor": {
                                  "anyOf": [
                                    {
                                      "type": "string",
                                      "description": "Opaque page token. Pass unchanged to the next request; null marks the final page."
                                    },
                                    {
                                      "type": "null"
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "items",
                                "nextCursor"
                              ],
                              "additionalProperties": false
                            },
                            "provenance": {
                              "$ref": "#/components/schemas/SectionProvenance"
                            },
                            "reason": {
                              "type": "string",
                              "description": "Why the data is stale."
                            }
                          },
                          "required": [
                            "state",
                            "data",
                            "provenance",
                            "reason"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "const": "empty"
                            },
                            "provenance": {
                              "$ref": "#/components/schemas/SectionProvenance"
                            }
                          },
                          "required": [
                            "state",
                            "provenance"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "state": {
                              "const": "unavailable"
                            },
                            "reason": {
                              "type": "string"
                            },
                            "retryAfterSeconds": {
                              "type": "integer",
                              "minimum": 0
                            },
                            "provenance": {
                              "$ref": "#/components/schemas/SectionProvenance"
                            }
                          },
                          "required": [
                            "state",
                            "reason"
                          ],
                          "additionalProperties": false
                        }
                      ],
                      "discriminator": {
                        "propertyName": "state"
                      }
                    }
                  },
                  "required": [
                    "group",
                    "section"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "object",
                  "properties": {
                    "group": {
                      "const": "profiles"
                    },
                    "section": {
                      "type": "object",
                      "properties": {
                        "state": {
                          "const": "unavailable"
                        },
                        "reason": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "state",
                        "reason"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "required": [
                    "group",
                    "section"
                  ],
                  "additionalProperties": false
                }
              ]
            }
          },
          "error": {
            "$ref": "#/components/schemas/ErrorDetail"
          }
        },
        "required": [
          "groups"
        ],
        "additionalProperties": false
      },
      "ErrorDetail": {
        "type": "object",
        "properties": {
          "code": {
            "type": "string",
            "description": "Machine-readable error code."
          },
          "message": {
            "type": "string",
            "description": "Human-readable explanation."
          },
          "parameter": {
            "type": "string",
            "description": "Invalid parameter, when supplied."
          }
        },
        "required": [
          "code",
          "message"
        ],
        "additionalProperties": true
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "$ref": "#/components/schemas/ErrorDetail"
          }
        },
        "required": [
          "error"
        ],
        "additionalProperties": false
      },
      "PresaleListPage": {
        "title": "Presale list page",
        "description": "GET /api/social/presales 200: one keyset page of a tab, the same for every caller.",
        "type": "object",
        "properties": {
          "presales": {
            "type": "array",
            "maxItems": 50,
            "items": {
              "$ref": "#/components/schemas/PresaleSummary"
            }
          },
          "next_cursor": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 512
              }
            ]
          },
          "as_of": {
            "$ref": "#/components/schemas/AsOf"
          }
        },
        "required": [
          "presales",
          "next_cursor",
          "as_of"
        ],
        "additionalProperties": false
      },
      "PresaleSummary": {
        "title": "Presale summary",
        "description": "One sale as a list row shows it (contracts/presales.ts SocialPresaleSummary).",
        "type": "object",
        "properties": {
          "presale_id": {
            "type": "string",
            "pattern": "^0x[0-9a-f]{64}$"
          },
          "name": {
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "icon_url": {
            "type": "string"
          },
          "phase": {
            "enum": [
              "pending",
              "open",
              "closed",
              "funded",
              "trading",
              "cancelled"
            ]
          },
          "venue": {
            "type": "string"
          },
          "start_ms": {
            "type": "integer",
            "minimum": 0
          },
          "end_ms": {
            "type": "integer",
            "minimum": 0
          },
          "ended_ms": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "integer",
                "minimum": 0
              }
            ]
          },
          "launched_ms": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "integer",
                "minimum": 0
              }
            ]
          },
          "target_usd": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
              }
            ]
          },
          "raised_usd": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
              }
            ]
          },
          "quote_symbol": {
            "description": "the sale's quote coin (USDC or SUI). A USDC sale reads in dollars (the *_usd fields); any other quote reads in its own coin from the *_atoms figures and quote_decimals.",
            "type": "string",
            "minLength": 1
          },
          "quote_decimals": {
            "type": "integer",
            "minimum": 0
          },
          "target_atoms": {
            "type": "string",
            "pattern": "^(0|[1-9][0-9]*)$",
            "description": "the target in quote atoms (raise_target)."
          },
          "raised_atoms": {
            "type": "string",
            "pattern": "^(0|[1-9][0-9]*)$",
            "description": "the amount raised in quote atoms (total_commitments)."
          },
          "fill_bps": {
            "type": "integer",
            "minimum": 0
          },
          "participants": {
            "type": "integer",
            "minimum": 0
          },
          "interested": {
            "description": "the sale's current presale follows, one per account; an unfollow decrements it and a deleted account never counts. The same for every caller; names nobody.",
            "type": "integer",
            "minimum": 0
          },
          "presale_price_usd": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
              }
            ]
          },
          "presale_price_quote": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
              }
            ],
            "description": "the presale price in the quote coin per whole token; null with no claim yet."
          },
          "price_usd": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
              }
            ]
          },
          "multiple": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
              }
            ]
          },
          "verified_team": {
            "description": "Blast checked who is behind the project. Set only by an operator (social_sale_trust); false without a row. Never derived from creator input.",
            "type": "boolean"
          },
          "audited": {
            "description": "Blast read the audit report. Set only by an operator; an audit link in the sale's metadata never sets it. False without a row.",
            "type": "boolean"
          },
          "metadata": {
            "description": "the sale's public details (cover, tagline, links, published launch date); null when it has none. Never names who wrote them.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/SaleMetadata"
              }
            ]
          },
          "quote_type": {
            "description": "The exact on-chain coin type accepted by this presale.",
            "type": "string",
            "minLength": 1
          },
          "sale_decimals": {
            "type": "integer",
            "minimum": 0,
            "maximum": 255
          },
          "allowlisted": {
            "type": "boolean"
          },
          "hard_cap": {
            "type": [
              "boolean",
              "null"
            ]
          }
        },
        "required": [
          "presale_id",
          "name",
          "symbol",
          "icon_url",
          "phase",
          "venue",
          "start_ms",
          "end_ms",
          "ended_ms",
          "launched_ms",
          "target_usd",
          "raised_usd",
          "quote_symbol",
          "quote_decimals",
          "target_atoms",
          "raised_atoms",
          "fill_bps",
          "participants",
          "interested",
          "presale_price_usd",
          "presale_price_quote",
          "price_usd",
          "multiple",
          "verified_team",
          "audited",
          "metadata",
          "quote_type"
        ],
        "additionalProperties": false
      },
      "SaleMetadata": {
        "title": "Sale metadata",
        "description": "(contracts/sales.ts SocialSaleMetadata): a sale's public details. A tagline is one plain line, never auto-linked; links are https URLs with no userinfo or port; handles are bare. An audit link never implies an Audited badge.",
        "type": "object",
        "properties": {
          "tagline": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 120
              }
            ]
          },
          "site": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "maxLength": 512,
                "pattern": "^https://[^\\s/?#@:]+(/[^\\s#]*)?$"
              }
            ]
          },
          "x_handle": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "pattern": "^[A-Za-z0-9_]{1,15}$"
              }
            ]
          },
          "telegram": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "pattern": "^[A-Za-z0-9_]{5,32}$"
              }
            ]
          },
          "docs_url": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "maxLength": 512,
                "pattern": "^https://[^\\s/?#@:]+(/[^\\s#]*)?$"
              }
            ]
          },
          "audit_url": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "maxLength": 512,
                "pattern": "^https://[^\\s/?#@:]+(/[^\\s#]*)?$"
              }
            ]
          },
          "cover": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "properties": {
                  "url": {
                    "type": "string",
                    "pattern": "^https://[^\\s]+$",
                    "maxLength": 2048
                  },
                  "width": {
                    "type": "integer",
                    "minimum": 1
                  },
                  "height": {
                    "type": "integer",
                    "minimum": 1
                  }
                },
                "required": [
                  "url",
                  "width",
                  "height"
                ],
                "additionalProperties": false
              }
            ]
          },
          "launch_at_ms": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "integer",
                "minimum": 1
              }
            ]
          }
        },
        "required": [
          "tagline",
          "site",
          "x_handle",
          "telegram",
          "docs_url",
          "audit_url",
          "cover",
          "launch_at_ms"
        ],
        "additionalProperties": false
      },
      "AsOf": {
        "title": "Chain freshness of a social read",
        "description": "From chain_read_v1.watermark: the slowest pipeline's checkpoint and timestamp, and their age when read.",
        "type": "object",
        "properties": {
          "checkpoint": {
            "type": "integer",
            "minimum": 0
          },
          "timestamp_ms": {
            "type": "integer",
            "minimum": 0
          },
          "lag_ms": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "checkpoint",
          "timestamp_ms",
          "lag_ms"
        ],
        "additionalProperties": false
      },
      "PresaleDetail": {
        "title": "Presale detail",
        "description": "GET /api/social/presales/{presale_id} 200: one sale, the same for every caller.",
        "type": "object",
        "properties": {
          "presale": {
            "type": "object",
            "properties": {
              "presale_id": {
                "type": "string",
                "pattern": "^0x[0-9a-f]{64}$"
              },
              "name": {
                "type": "string"
              },
              "symbol": {
                "type": "string"
              },
              "icon_url": {
                "type": "string"
              },
              "phase": {
                "enum": [
                  "pending",
                  "open",
                  "closed",
                  "funded",
                  "trading",
                  "cancelled"
                ]
              },
              "venue": {
                "type": "string"
              },
              "start_ms": {
                "type": "integer",
                "minimum": 0
              },
              "end_ms": {
                "type": "integer",
                "minimum": 0
              },
              "ended_ms": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "integer",
                    "minimum": 0
                  }
                ]
              },
              "launched_ms": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "integer",
                    "minimum": 0
                  }
                ]
              },
              "target_usd": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "string",
                    "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                  }
                ]
              },
              "raised_usd": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "string",
                    "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                  }
                ]
              },
              "quote_symbol": {
                "description": "the sale's quote coin (USDC or SUI). A USDC sale reads in dollars (the *_usd fields); any other quote reads in its own coin from the *_atoms figures and quote_decimals.",
                "type": "string",
                "minLength": 1
              },
              "quote_decimals": {
                "type": "integer",
                "minimum": 0
              },
              "target_atoms": {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)$",
                "description": "the target in quote atoms (raise_target)."
              },
              "raised_atoms": {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)$",
                "description": "the amount raised in quote atoms (total_commitments)."
              },
              "fill_bps": {
                "type": "integer",
                "minimum": 0
              },
              "participants": {
                "type": "integer",
                "minimum": 0
              },
              "interested": {
                "description": "the sale's current presale follows, one per account; an unfollow decrements it and a deleted account never counts. The same for every caller; names nobody.",
                "type": "integer",
                "minimum": 0
              },
              "presale_price_usd": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
                  }
                ]
              },
              "presale_price_quote": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
                  }
                ],
                "description": "the presale price in the quote coin per whole token; null with no claim yet."
              },
              "price_usd": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
                  }
                ]
              },
              "multiple": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
                  }
                ]
              },
              "sale_token": {
                "type": "string"
              },
              "sale_decimals": {
                "type": "integer",
                "minimum": 0
              },
              "allowlisted": {
                "description": "An allowlisted sale: any positive commitment up to each wallet's own allowlist cap (min_commitment_usd and wallet_cap_usd are then null).",
                "type": "boolean"
              },
              "min_commitment_usd": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "string",
                    "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                  }
                ]
              },
              "wallet_cap_usd": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "string",
                    "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                  }
                ]
              },
              "min_commitment_atoms": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]*)$"
                  }
                ],
                "description": "min_commitment_usd's limit in quote atoms."
              },
              "wallet_cap_atoms": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]*)$"
                  }
                ],
                "description": "wallet_cap_usd's limit in quote atoms."
              },
              "opened_ms": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "integer",
                    "minimum": 0
                  }
                ]
              },
              "verified_team": {
                "description": "Blast checked who is behind the project. Set only by an operator (social_sale_trust); false without a row. Never derived from creator input.",
                "type": "boolean"
              },
              "audited": {
                "description": "Blast read the audit report. Set only by an operator; an audit link in the sale's metadata never sets it. False without a row.",
                "type": "boolean"
              },
              "metadata": {
                "description": "the sale's public details (cover, tagline, links, published launch date); null when it has none. Never names who wrote them.",
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "$ref": "#/components/schemas/SaleMetadata"
                  }
                ]
              },
              "quote_type": {
                "description": "The exact on-chain coin type accepted by this presale.",
                "type": "string",
                "minLength": 1
              },
              "hard_cap": {
                "type": [
                  "boolean",
                  "null"
                ]
              }
            },
            "required": [
              "presale_id",
              "name",
              "symbol",
              "icon_url",
              "phase",
              "venue",
              "start_ms",
              "end_ms",
              "ended_ms",
              "launched_ms",
              "target_usd",
              "raised_usd",
              "quote_symbol",
              "quote_decimals",
              "target_atoms",
              "raised_atoms",
              "fill_bps",
              "participants",
              "interested",
              "presale_price_usd",
              "presale_price_quote",
              "price_usd",
              "multiple",
              "sale_token",
              "sale_decimals",
              "allowlisted",
              "min_commitment_usd",
              "wallet_cap_usd",
              "min_commitment_atoms",
              "wallet_cap_atoms",
              "opened_ms",
              "verified_team",
              "audited",
              "metadata",
              "quote_type"
            ],
            "additionalProperties": false
          },
          "quote_price": {
            "description": "a SUI sale's quote price row (chain_read_v1.prices): USD a whole coin and when it was taken, for a display-only dollar equivalent; null for a USDC sale or without a row.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "properties": {
                  "usd_price": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
                  },
                  "as_of_ms": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "required": [
                  "usd_price",
                  "as_of_ms"
                ],
                "additionalProperties": false
              }
            ]
          },
          "momentum": {
            "type": "object",
            "properties": {
              "5m": {
                "type": "object",
                "properties": {
                  "commits": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "total_usd": {
                    "type": "string",
                    "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                  },
                  "total_atoms": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]*)$"
                  },
                  "backers": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "average_usd": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                      }
                    ]
                  },
                  "median_usd": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                      }
                    ]
                  },
                  "average_atoms": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)$"
                      }
                    ]
                  },
                  "median_atoms": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)$"
                      }
                    ]
                  },
                  "big_bps": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "required": [
                  "commits",
                  "total_usd",
                  "total_atoms",
                  "backers",
                  "average_usd",
                  "median_usd",
                  "average_atoms",
                  "median_atoms",
                  "big_bps"
                ],
                "additionalProperties": false
              },
              "1h": {
                "type": "object",
                "properties": {
                  "commits": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "total_usd": {
                    "type": "string",
                    "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                  },
                  "total_atoms": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]*)$"
                  },
                  "backers": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "average_usd": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                      }
                    ]
                  },
                  "median_usd": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                      }
                    ]
                  },
                  "average_atoms": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)$"
                      }
                    ]
                  },
                  "median_atoms": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)$"
                      }
                    ]
                  },
                  "big_bps": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "required": [
                  "commits",
                  "total_usd",
                  "total_atoms",
                  "backers",
                  "average_usd",
                  "median_usd",
                  "average_atoms",
                  "median_atoms",
                  "big_bps"
                ],
                "additionalProperties": false
              },
              "4h": {
                "type": "object",
                "properties": {
                  "commits": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "total_usd": {
                    "type": "string",
                    "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                  },
                  "total_atoms": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]*)$"
                  },
                  "backers": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "average_usd": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                      }
                    ]
                  },
                  "median_usd": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                      }
                    ]
                  },
                  "average_atoms": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)$"
                      }
                    ]
                  },
                  "median_atoms": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)$"
                      }
                    ]
                  },
                  "big_bps": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "required": [
                  "commits",
                  "total_usd",
                  "total_atoms",
                  "backers",
                  "average_usd",
                  "median_usd",
                  "average_atoms",
                  "median_atoms",
                  "big_bps"
                ],
                "additionalProperties": false
              },
              "1d": {
                "type": "object",
                "properties": {
                  "commits": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "total_usd": {
                    "type": "string",
                    "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                  },
                  "total_atoms": {
                    "type": "string",
                    "pattern": "^(0|[1-9][0-9]*)$"
                  },
                  "backers": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "average_usd": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                      }
                    ]
                  },
                  "median_usd": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                      }
                    ]
                  },
                  "average_atoms": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)$"
                      }
                    ]
                  },
                  "median_atoms": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)$"
                      }
                    ]
                  },
                  "big_bps": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "required": [
                  "commits",
                  "total_usd",
                  "total_atoms",
                  "backers",
                  "average_usd",
                  "median_usd",
                  "average_atoms",
                  "median_atoms",
                  "big_bps"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "5m",
              "1h",
              "4h",
              "1d"
            ],
            "additionalProperties": false
          },
          "backers": {
            "type": "object",
            "properties": {
              "top": {
                "type": "array",
                "maxItems": 25,
                "items": {
                  "type": "object",
                  "properties": {
                    "wallet": {
                      "type": "string",
                      "pattern": "^0x[0-9a-f]{64}$"
                    },
                    "account": {
                      "oneOf": [
                        {
                          "type": "null"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "callsign": {
                              "type": "string",
                              "pattern": "^[a-z0-9][a-z0-9_]{1,18}[a-z0-9]$"
                            },
                            "display_name": {
                              "oneOf": [
                                {
                                  "type": "null"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            "avatar_url": {
                              "oneOf": [
                                {
                                  "type": "null"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            "verified": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "callsign",
                            "display_name",
                            "avatar_url",
                            "verified"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    },
                    "commitment_usd": {
                      "oneOf": [
                        {
                          "type": "null"
                        },
                        {
                          "type": "string",
                          "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                        }
                      ]
                    },
                    "commitment_atoms": {
                      "type": "string",
                      "pattern": "^(0|[1-9][0-9]*)$"
                    },
                    "share_bps": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "last_commit_ms": {
                      "description": "Null for a wallet blast-infra knows only from its claim.",
                      "oneOf": [
                        {
                          "type": "null"
                        },
                        {
                          "type": "integer",
                          "minimum": 0
                        }
                      ]
                    },
                    "why": {
                      "oneOf": [
                        {
                          "type": "null"
                        },
                        {
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "required": [
                    "wallet",
                    "account",
                    "commitment_usd",
                    "commitment_atoms",
                    "share_bps",
                    "last_commit_ms",
                    "why"
                  ],
                  "additionalProperties": false
                }
              },
              "top10_bps": {
                "type": "integer",
                "minimum": 0
              }
            },
            "required": [
              "top",
              "top10_bps"
            ],
            "additionalProperties": false
          },
          "theses": {
            "type": "array",
            "maxItems": 50,
            "items": {
              "type": "object",
              "properties": {
                "why_id": {
                  "type": "string"
                },
                "entry_id": {
                  "type": "string"
                },
                "account": {
                  "type": "object",
                  "properties": {
                    "callsign": {
                      "type": "string",
                      "pattern": "^[a-z0-9][a-z0-9_]{1,18}[a-z0-9]$"
                    },
                    "display_name": {
                      "oneOf": [
                        {
                          "type": "null"
                        },
                        {
                          "type": "string"
                        }
                      ]
                    },
                    "avatar_url": {
                      "oneOf": [
                        {
                          "type": "null"
                        },
                        {
                          "type": "string"
                        }
                      ]
                    },
                    "verified": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "callsign",
                    "display_name",
                    "avatar_url",
                    "verified"
                  ],
                  "additionalProperties": false
                },
                "text": {
                  "type": "string"
                },
                "commit_usd": {
                  "oneOf": [
                    {
                      "type": "null"
                    },
                    {
                      "type": "string",
                      "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                    }
                  ]
                },
                "commit_atoms": {
                  "type": "string",
                  "pattern": "^(0|[1-9][0-9]*)$"
                },
                "rockets": {
                  "type": "integer",
                  "minimum": 0
                },
                "occurred_at_ms": {
                  "type": "integer",
                  "minimum": 0
                }
              },
              "required": [
                "why_id",
                "entry_id",
                "account",
                "text",
                "commit_usd",
                "commit_atoms",
                "rockets",
                "occurred_at_ms"
              ],
              "additionalProperties": false
            }
          },
          "activity": {
            "type": "array",
            "maxItems": 30,
            "items": {
              "$ref": "#/components/schemas/FeedItem"
            }
          },
          "raise": {
            "type": "object",
            "properties": {
              "points": {
                "type": "array",
                "maxItems": 160,
                "items": {
                  "type": "array",
                  "prefixItems": [
                    {
                      "type": "integer",
                      "minimum": 0
                    },
                    {
                      "type": "string",
                      "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                    },
                    {
                      "type": "string",
                      "pattern": "^(0|[1-9][0-9]*)$"
                    }
                  ],
                  "minItems": 3,
                  "maxItems": 3,
                  "items": false
                }
              },
              "markers": {
                "type": "array",
                "maxItems": 60,
                "items": {
                  "type": "object",
                  "properties": {
                    "t": {
                      "type": "integer",
                      "minimum": 0
                    },
                    "raised_usd": {
                      "type": "string",
                      "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                    },
                    "commit_usd": {
                      "oneOf": [
                        {
                          "type": "null"
                        },
                        {
                          "type": "string",
                          "pattern": "^-?(0|[1-9][0-9]*)\\.[0-9]{2}$"
                        }
                      ]
                    },
                    "raised_atoms": {
                      "type": "string",
                      "pattern": "^(0|[1-9][0-9]*)$"
                    },
                    "commit_atoms": {
                      "type": "string",
                      "pattern": "^(0|[1-9][0-9]*)$"
                    },
                    "wallet": {
                      "type": "string",
                      "pattern": "^0x[0-9a-f]{64}$"
                    },
                    "account": {
                      "oneOf": [
                        {
                          "type": "null"
                        },
                        {
                          "type": "object",
                          "properties": {
                            "callsign": {
                              "type": "string",
                              "pattern": "^[a-z0-9][a-z0-9_]{1,18}[a-z0-9]$"
                            },
                            "display_name": {
                              "oneOf": [
                                {
                                  "type": "null"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            "avatar_url": {
                              "oneOf": [
                                {
                                  "type": "null"
                                },
                                {
                                  "type": "string"
                                }
                              ]
                            },
                            "verified": {
                              "type": "boolean"
                            }
                          },
                          "required": [
                            "callsign",
                            "display_name",
                            "avatar_url",
                            "verified"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    },
                    "why": {
                      "oneOf": [
                        {
                          "type": "null"
                        },
                        {
                          "type": "string"
                        }
                      ]
                    }
                  },
                  "required": [
                    "t",
                    "raised_usd",
                    "commit_usd",
                    "raised_atoms",
                    "commit_atoms",
                    "wallet",
                    "account",
                    "why"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "points",
              "markers"
            ],
            "additionalProperties": false
          },
          "vesting": {
            "description": "The span of every schedule of the sale (token and raise recipients', and any other the view holds): the earliest start and cliff end, the latest end. Not the team's; a team unlock reads team_vesting.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "properties": {
                  "start_ms": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "cliff_end_ms": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "end_ms": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "required": [
                  "start_ms",
                  "cliff_end_ms",
                  "end_ms"
                ],
                "additionalProperties": false
              }
            ]
          },
          "team_vesting": {
            "description": "The team's vesting: the span of the sale's token recipients' schedules, or null when the sale has none or the read cannot tell which schedules are the team's (no terms, a token recipient that is also a raise recipient, or token recipients that unlock differently). Null never means nothing vests.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "properties": {
                  "start_ms": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "cliff_end_ms": {
                    "type": "integer",
                    "minimum": 0
                  },
                  "end_ms": {
                    "type": "integer",
                    "minimum": 0
                  }
                },
                "required": [
                  "start_ms",
                  "cliff_end_ms",
                  "end_ms"
                ],
                "additionalProperties": false
              }
            ]
          },
          "terms": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "properties": {
                  "supply": {
                    "type": "object",
                    "properties": {
                      "total": {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)$"
                      },
                      "participants": {
                        "type": "object",
                        "properties": {
                          "bps": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "amount": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]*)$"
                          }
                        },
                        "required": [
                          "bps",
                          "amount"
                        ],
                        "additionalProperties": false
                      },
                      "liquidity": {
                        "type": "object",
                        "properties": {
                          "bps": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "amount": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]*)$"
                          }
                        },
                        "required": [
                          "bps",
                          "amount"
                        ],
                        "additionalProperties": false
                      },
                      "recipients": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "address": {
                              "type": "string",
                              "pattern": "^0x[0-9a-f]{64}$"
                            },
                            "bps": {
                              "type": "integer",
                              "minimum": 0
                            },
                            "amount": {
                              "type": "string",
                              "pattern": "^(0|[1-9][0-9]*)$"
                            },
                            "vesting": {
                              "oneOf": [
                                {
                                  "type": "null"
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "start_ms": {
                                      "type": "integer",
                                      "minimum": 0
                                    },
                                    "cliff_end_ms": {
                                      "type": "integer",
                                      "minimum": 0
                                    },
                                    "end_ms": {
                                      "type": "integer",
                                      "minimum": 0
                                    }
                                  },
                                  "required": [
                                    "start_ms",
                                    "cliff_end_ms",
                                    "end_ms"
                                  ],
                                  "additionalProperties": false
                                }
                              ]
                            }
                          },
                          "required": [
                            "address",
                            "bps",
                            "amount",
                            "vesting"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "protocol": {
                        "type": "object",
                        "properties": {
                          "bps": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "amount": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]*)$"
                          }
                        },
                        "required": [
                          "bps",
                          "amount"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "total",
                      "participants",
                      "liquidity",
                      "recipients",
                      "protocol"
                    ],
                    "additionalProperties": false
                  },
                  "raise": {
                    "type": "object",
                    "properties": {
                      "pool_bps": {
                        "type": "integer",
                        "minimum": 0
                      },
                      "recipients": {
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "address": {
                              "type": "string",
                              "pattern": "^0x[0-9a-f]{64}$"
                            },
                            "bps": {
                              "type": "integer",
                              "minimum": 0
                            },
                            "amount": {
                              "type": "string",
                              "pattern": "^(0|[1-9][0-9]*)$"
                            },
                            "vesting": {
                              "oneOf": [
                                {
                                  "type": "null"
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "start_ms": {
                                      "type": "integer",
                                      "minimum": 0
                                    },
                                    "cliff_end_ms": {
                                      "type": "integer",
                                      "minimum": 0
                                    },
                                    "end_ms": {
                                      "type": "integer",
                                      "minimum": 0
                                    }
                                  },
                                  "required": [
                                    "start_ms",
                                    "cliff_end_ms",
                                    "end_ms"
                                  ],
                                  "additionalProperties": false
                                }
                              ]
                            }
                          },
                          "required": [
                            "address",
                            "bps",
                            "amount",
                            "vesting"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "protocol": {
                        "type": "object",
                        "properties": {
                          "bps": {
                            "type": "integer",
                            "minimum": 0
                          },
                          "amount": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]*)$"
                          }
                        },
                        "required": [
                          "bps",
                          "amount"
                        ],
                        "additionalProperties": false
                      }
                    },
                    "required": [
                      "pool_bps",
                      "recipients",
                      "protocol"
                    ],
                    "additionalProperties": false
                  },
                  "eligibility": {
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "const": "open"
                          }
                        },
                        "required": [
                          "kind"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "kind": {
                            "const": "allowlisted"
                          },
                          "wallets": {
                            "type": "integer",
                            "minimum": 0
                          }
                        },
                        "required": [
                          "kind",
                          "wallets"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "presale_price_usd": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
                      }
                    ]
                  },
                  "launch_price_usd": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
                      }
                    ]
                  },
                  "presale_price_quote": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
                      }
                    ]
                  },
                  "launch_price_quote": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "string",
                        "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
                      }
                    ]
                  },
                  "burnable": {
                    "description": "whether holders can burn the coin (blast-infra supply.burnable); null when the terms read does not carry it.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "hard_cap": {
                    "description": "whether the sale stops at its target (the sale's hard_cap setting; the hard cap is then the target); false when it can go over the target; null when the terms read does not carry it.",
                    "type": [
                      "boolean",
                      "null"
                    ]
                  },
                  "buyer_vesting": {
                    "oneOf": [
                      {
                        "type": "null"
                      },
                      {
                        "type": "object",
                        "properties": {
                          "cliff_ms": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]*)$"
                          },
                          "duration_ms": {
                            "type": "string",
                            "pattern": "^(0|[1-9][0-9]*)$"
                          }
                        },
                        "required": [
                          "cliff_ms",
                          "duration_ms"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  }
                },
                "required": [
                  "supply",
                  "raise",
                  "eligibility",
                  "presale_price_usd",
                  "launch_price_usd",
                  "presale_price_quote",
                  "launch_price_quote",
                  "burnable",
                  "hard_cap"
                ],
                "additionalProperties": false
              }
            ]
          },
          "as_of": {
            "$ref": "#/components/schemas/AsOf"
          },
          "creator": {
            "type": [
              "object",
              "null"
            ],
            "description": "Original creating wallet; account respects privacy and sharing at creation.",
            "properties": {
              "wallet": {
                "type": "string",
                "pattern": "^0x[0-9a-f]{64}$"
              },
              "account": {
                "oneOf": [
                  {
                    "type": "null"
                  },
                  {
                    "type": "object",
                    "properties": {
                      "callsign": {
                        "type": "string",
                        "pattern": "^[a-z0-9][a-z0-9_]{1,18}[a-z0-9]$"
                      },
                      "display_name": {
                        "oneOf": [
                          {
                            "type": "null"
                          },
                          {
                            "type": "string"
                          }
                        ]
                      },
                      "avatar_url": {
                        "oneOf": [
                          {
                            "type": "null"
                          },
                          {
                            "type": "string"
                          }
                        ]
                      },
                      "verified": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "callsign",
                      "display_name",
                      "avatar_url",
                      "verified"
                    ],
                    "additionalProperties": false
                  }
                ]
              }
            },
            "required": [
              "wallet",
              "account"
            ],
            "additionalProperties": false
          },
          "buyer_vesting": {
            "type": "object",
            "properties": {
              "schedules": {
                "type": "integer",
                "minimum": 0
              },
              "total": {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)$"
              },
              "claimed": {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)$"
              },
              "remaining": {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)$"
              }
            },
            "required": [
              "schedules",
              "total",
              "claimed",
              "remaining"
            ],
            "additionalProperties": false
          }
        },
        "required": [
          "presale",
          "quote_price",
          "momentum",
          "backers",
          "theses",
          "activity",
          "raise",
          "vesting",
          "team_vesting",
          "terms",
          "as_of",
          "creator"
        ],
        "additionalProperties": false
      },
      "FeedItem": {
        "title": "Social feed item",
        "description": "One public feed item, as every feed, profile and item route answers it. No viewer-specific field. On-chain amounts are decimal strings in atoms, times are integer milliseconds, USD is a decimal string with two places. `kind` and `do_the_same.kind` are open strings: a client renders an unknown value generically.",
        "type": "object",
        "properties": {
          "pinned": {
            "type": "boolean",
            "description": "Pinned by Blast in the home feed. Omitted on ordinary posts."
          },
          "entry_id": {
            "type": "string",
            "pattern": "^[alm]:",
            "maxLength": 512,
            "description": "a:<checkpoint>:<tx_slot>:<event_slot>:<part>, l:<presale_id>:<state> or m:<presale_id>:<kind>:<value>."
          },
          "kind": {
            "$ref": "#/components/schemas/FeedItemKind"
          },
          "occurred_at_ms": {
            "$ref": "#/components/schemas/FeedItemMillis"
          },
          "presale": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemPresale"
              }
            ]
          },
          "actor": {
            "description": "The account for a named entry, the wallet address only for an unnamed presale post, null for lifecycle and milestone posts.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemAccountActor"
              },
              {
                "$ref": "#/components/schemas/FeedItemAddressActor"
              }
            ]
          },
          "amounts": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemAmounts"
              }
            ]
          },
          "digest": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "minLength": 1
              }
            ]
          },
          "milestone_value": {
            "description": "A milestone post's threshold; null for every other item.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]+)?$"
              }
            ]
          },
          "presale_post": {
            "type": "boolean",
            "description": "True for lifecycle, milestone and big items."
          },
          "big": {
            "type": "boolean",
            "description": "A commit at or above big_commit_usd, or a trade at or above big_trade_usd, evaluated on each read."
          },
          "why": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemWhy"
              }
            ]
          },
          "reactions": {
            "$ref": "#/components/schemas/FeedItemReactions"
          },
          "through": {
            "$ref": "#/components/schemas/FeedItemThrough"
          },
          "do_the_same": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemDoTheSame"
              }
            ]
          },
          "call": {
            "type": "boolean",
            "description": "a named presale_commit of a presale whose coin now trades (lifecycle migrated). Its result is presale.market."
          },
          "backers": {
            "description": "A lifecycle or milestone post's named backers of its presale (the naming rule applies), the largest first, at most 12; null on every other item.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "array",
                "maxItems": 12,
                "items": {
                  "$ref": "#/components/schemas/FeedItemBacker"
                }
              }
            ]
          }
        },
        "required": [
          "entry_id",
          "kind",
          "occurred_at_ms",
          "presale",
          "actor",
          "amounts",
          "digest",
          "milestone_value",
          "presale_post",
          "big",
          "why",
          "reactions",
          "through",
          "do_the_same",
          "call",
          "backers"
        ],
        "additionalProperties": false
      },
      "FeedItemKind": {
        "type": "string",
        "minLength": 1,
        "maxLength": 64,
        "description": "Open string. Known values: presale_commit, presale_claim, trade_buy, trade_sell, presale_created, presale_opened, presale_funded, presale_migrated, presale_cancelled, milestone_participants, milestone_raise, milestone_holders, launch_buy, launch_sell, boost_mint, boost_redeem.",
        "examples": [
          "presale_commit",
          "presale_claim",
          "trade_buy",
          "trade_sell",
          "presale_created",
          "presale_opened",
          "presale_funded",
          "presale_migrated",
          "presale_cancelled",
          "milestone_participants",
          "milestone_raise",
          "milestone_holders",
          "launch_buy",
          "launch_sell",
          "boost_mint",
          "boost_redeem"
        ]
      },
      "FeedItemMillis": {
        "type": "integer",
        "minimum": 0
      },
      "FeedItemPresale": {
        "type": "object",
        "properties": {
          "presale_id": {
            "type": "string",
            "pattern": "^0x[0-9a-f]{64}$"
          },
          "symbol": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "icon_url": {
            "type": "string"
          },
          "lifecycle": {
            "type": "string",
            "minLength": 1,
            "description": "Open string. Known values: pending, open, funded, cancelled, migrated.",
            "examples": [
              "pending",
              "open",
              "funded",
              "cancelled",
              "migrated"
            ]
          },
          "decimals": {
            "type": "integer",
            "minimum": 0,
            "maximum": 255,
            "description": "The sale token's decimals: amounts.tokens divided by 10^decimals is whole tokens."
          },
          "venue": {
            "type": "string",
            "minLength": 1,
            "description": "Open string. Known values: cetus, bluefin.",
            "examples": [
              "cetus",
              "bluefin"
            ]
          },
          "start_ms": {
            "$ref": "#/components/schemas/FeedItemMillis"
          },
          "end_ms": {
            "$ref": "#/components/schemas/FeedItemMillis"
          },
          "raise_target": {
            "$ref": "#/components/schemas/FeedItemAtoms",
            "description": "Quote atoms."
          },
          "raised": {
            "$ref": "#/components/schemas/FeedItemAtoms",
            "description": "Quote atoms committed so far (total_commitments); final once the sale ended."
          },
          "participants": {
            "type": "integer",
            "minimum": 0
          },
          "quote_symbol": {
            "type": "string",
            "minLength": 1
          },
          "quote_decimals": {
            "type": "integer",
            "minimum": 0,
            "maximum": 255
          },
          "quote_usd": {
            "description": "The Quote's latest USD price; null when missing or older than 120 s at the read.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemDecimal"
              }
            ]
          },
          "market": {
            "description": "Set once the presale migrated; null before.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemMarket"
              }
            ]
          }
        },
        "required": [
          "presale_id",
          "symbol",
          "name",
          "icon_url",
          "lifecycle",
          "decimals",
          "venue",
          "start_ms",
          "end_ms",
          "raise_target",
          "raised",
          "participants",
          "quote_symbol",
          "quote_decimals",
          "quote_usd",
          "market"
        ],
        "additionalProperties": false
      },
      "FeedItemAtoms": {
        "type": "string",
        "pattern": "^(0|[1-9][0-9]*)$"
      },
      "FeedItemDecimal": {
        "type": "string",
        "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{1,12})?$",
        "description": "A non-negative decimal with at most 12 fraction digits."
      },
      "FeedItemMarket": {
        "type": "object",
        "description": "A migrated presale's coin on the market. Prices are USD per whole sale token; a price older than 120 s at the read is null, and so is anything derived from it.",
        "properties": {
          "presale_price_usd": {
            "description": "raise_target ÷ token_allocation in whole units, times the Quote's USD price.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemDecimal"
              }
            ]
          },
          "price_usd": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemDecimal"
              }
            ]
          },
          "price_as_of_ms": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemMillis"
              }
            ]
          },
          "multiple": {
            "description": "price_usd ÷ presale_price_usd with four places.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)\\.[0-9]{4}$"
              }
            ]
          }
        },
        "required": [
          "presale_price_usd",
          "price_usd",
          "price_as_of_ms",
          "multiple"
        ],
        "additionalProperties": false
      },
      "FeedItemAccountActor": {
        "type": "object",
        "properties": {
          "type": {
            "const": "account"
          },
          "callsign": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_]{1,18}[a-z0-9]$"
          },
          "display_name": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "minLength": 1
              }
            ]
          },
          "avatar_url": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "minLength": 1
              }
            ]
          },
          "x_handle": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "minLength": 1
              }
            ]
          },
          "path": {
            "type": "string",
            "pattern": "^/@[a-z0-9][a-z0-9_]{1,18}[a-z0-9]$",
            "description": "/@<callsign> ()."
          },
          "verified": {
            "type": "boolean",
            "description": "the account has a linked X account."
          }
        },
        "required": [
          "type",
          "callsign",
          "display_name",
          "avatar_url",
          "x_handle",
          "verified",
          "path"
        ],
        "additionalProperties": false
      },
      "FeedItemAddressActor": {
        "type": "object",
        "properties": {
          "type": {
            "const": "address"
          },
          "address": {
            "type": "string",
            "pattern": "^0x[0-9a-f]{64}$"
          },
          "short": {
            "type": "string",
            "pattern": "^0x[0-9a-f]{4}…[0-9a-f]{4}$"
          }
        },
        "required": [
          "type",
          "address",
          "short"
        ],
        "additionalProperties": false
      },
      "FeedItemAmounts": {
        "type": "object",
        "properties": {
          "quote": {
            "$ref": "#/components/schemas/FeedItemAtoms"
          },
          "quote_symbol": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "minLength": 1
              }
            ]
          },
          "quote_decimals": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 255
              }
            ]
          },
          "usd": {
            "description": "The activity row's usd_value, priced by the indexer at the event's time; null when it stored none.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemUsd"
              }
            ]
          },
          "tokens": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemAtoms"
              }
            ]
          },
          "quote_refund": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemAtoms"
              }
            ]
          }
        },
        "required": [
          "quote",
          "quote_symbol",
          "quote_decimals",
          "usd",
          "tokens",
          "quote_refund"
        ],
        "additionalProperties": false
      },
      "FeedItemUsd": {
        "type": "string",
        "pattern": "^(0|[1-9][0-9]*)\\.[0-9]{2}$"
      },
      "FeedItemWhy": {
        "type": "object",
        "properties": {
          "why_id": {
            "type": "string",
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
          },
          "text": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2000
          }
        },
        "required": [
          "why_id",
          "text"
        ],
        "additionalProperties": false
      },
      "FeedItemReactions": {
        "type": "object",
        "description": "Stored reactions per currently configured key, in configured order, zeros included.",
        "propertyNames": {
          "type": "string",
          "pattern": "^[a-z][a-z0-9_]{0,31}$"
        },
        "additionalProperties": {
          "type": "integer",
          "minimum": 0
        },
        "maxProperties": 8
      },
      "FeedItemThrough": {
        "type": "object",
        "description": "Distinct accounts with a non-voided attribution to the item, and their non-null USD.",
        "properties": {
          "people": {
            "type": "integer",
            "minimum": 0
          },
          "volume_usd": {
            "$ref": "#/components/schemas/FeedItemUsd"
          }
        },
        "required": [
          "people",
          "volume_usd"
        ],
        "additionalProperties": false
      },
      "FeedItemDoTheSame": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "minLength": 1,
            "maxLength": 64,
            "description": "Open string. Known values: commit, buy, long (later).",
            "examples": [
              "commit",
              "buy",
              "long"
            ]
          },
          "enabled": {
            "type": "boolean"
          },
          "label": {
            "type": "string",
            "minLength": 1
          },
          "href": {
            "description": "Null while enabled; the presale page (/presale/{id}) when disabled.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "pattern": "^/"
              }
            ]
          }
        },
        "required": [
          "kind",
          "enabled",
          "label",
          "href"
        ],
        "additionalProperties": false
      },
      "FeedItemBacker": {
        "type": "object",
        "properties": {
          "callsign": {
            "type": "string",
            "pattern": "^[a-z0-9][a-z0-9_]{1,18}[a-z0-9]$"
          },
          "display_name": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "minLength": 1
              }
            ]
          },
          "avatar_url": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "type": "string",
                "minLength": 1
              }
            ]
          },
          "verified": {
            "type": "boolean"
          },
          "path": {
            "type": "string",
            "pattern": "^/@[a-z0-9][a-z0-9_]{1,18}[a-z0-9]$"
          },
          "usd": {
            "description": "The USD of the backer's named commits to the presale; null when none was priced.",
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/FeedItemUsd"
              }
            ]
          }
        },
        "required": [
          "callsign",
          "display_name",
          "avatar_url",
          "verified",
          "path",
          "usd"
        ],
        "additionalProperties": false
      },
      "PricesResponse": {
        "title": "Coins' prices over time",
        "description": "GET /api/v1/prices 200 (Cache-Control: private, no-store): for each sale or coin asked that has a price, its USD prices over the window from chain_read_v1.price_history, the price now from chain_read_v1.prices, the price 24 hours ago, the move between them and the price at the day's open (00:00 UTC), bounded by the watermark (contracts/prices.ts). The same for every caller; no viewer field.",
        "type": "object",
        "properties": {
          "window": {
            "enum": [
              "24h",
              "launch"
            ]
          },
          "clock_ms": {
            "$ref": "#/components/schemas/FeedItemMillis",
            "description": "The chain clock every window ends at: the earlier of the watermark and the server's clock."
          },
          "prices": {
            "type": "array",
            "maxItems": 54,
            "items": {
              "$ref": "#/components/schemas/PricesResponseHistory"
            }
          },
          "as_of": {
            "$ref": "#/components/schemas/AsOf"
          }
        },
        "required": [
          "window",
          "clock_ms",
          "prices",
          "as_of"
        ],
        "additionalProperties": false
      },
      "PricesResponseHistory": {
        "type": "object",
        "properties": {
          "presale_id": {
            "type": [
              "string",
              "null"
            ],
            "pattern": "^0x[0-9a-f]{64}$"
          },
          "coin_type": {
            "type": "string",
            "minLength": 1
          },
          "tier": {
            "enum": [
              "5m",
              "1h",
              "1d"
            ]
          },
          "from_ms": {
            "$ref": "#/components/schemas/FeedItemMillis"
          },
          "points": {
            "type": "array",
            "maxItems": 292,
            "description": "Oldest first: [the price's own time in ms, its USD price]. Empty when the window has no line.",
            "items": {
              "type": "array",
              "prefixItems": [
                {
                  "$ref": "#/components/schemas/FeedItemMillis"
                },
                {
                  "$ref": "#/components/schemas/PricesResponsePrice"
                }
              ],
              "items": false,
              "minItems": 2
            }
          },
          "price_usd": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PricesResponsePrice"
              },
              {
                "type": "null"
              }
            ]
          },
          "price_24h_usd": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PricesResponsePrice"
              },
              {
                "type": "null"
              }
            ]
          },
          "change_24h_bps": {
            "type": [
              "integer",
              "null"
            ]
          },
          "day_open_usd": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PricesResponsePrice"
              },
              {
                "type": "null"
              }
            ]
          },
          "day_open_ms": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/FeedItemMillis"
              },
              {
                "type": "null"
              }
            ]
          },
          "quote": {
            "type": "object",
            "properties": {
              "coin_type": {
                "type": "string",
                "minLength": 1
              },
              "symbol": {
                "type": "string",
                "minLength": 1
              },
              "price": {
                "type": "string",
                "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]*[1-9])?$"
              },
              "as_of_ms": {
                "$ref": "#/components/schemas/FeedItemMillis"
              },
              "points": {
                "type": "array",
                "maxItems": 292,
                "description": "Real indexed pool observations: timestamp and quote coins per whole sale token. No USD conversion or synthetic endpoint.",
                "items": {
                  "type": "array",
                  "prefixItems": [
                    {
                      "$ref": "#/components/schemas/FeedItemMillis"
                    },
                    {
                      "$ref": "#/components/schemas/PricesResponsePrice"
                    }
                  ],
                  "items": false,
                  "minItems": 2
                }
              },
              "change_24h_bps": {
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "required": [
              "coin_type",
              "symbol",
              "price",
              "as_of_ms",
              "points",
              "change_24h_bps"
            ],
            "additionalProperties": false,
            "description": "Available pool price/history in the sale quote when a genuine USD conversion is unavailable. USD fields retain their own units; unavailable values remain null."
          }
        },
        "required": [
          "presale_id",
          "coin_type",
          "tier",
          "from_ms",
          "points",
          "price_usd",
          "price_24h_usd",
          "change_24h_bps",
          "day_open_usd",
          "day_open_ms"
        ],
        "additionalProperties": false
      },
      "PricesResponsePrice": {
        "type": "string",
        "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]*[1-9])?$",
        "description": "USD per whole token, exact, trailing zeros trimmed."
      },
      "MarketStatus": {
        "title": "Market status",
        "type": "object",
        "properties": {
          "checkpoint": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonCount"
              },
              {
                "type": "null"
              }
            ]
          },
          "timestamp_ms": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonTimestampMs"
              },
              {
                "type": "null"
              }
            ]
          },
          "lag_ms": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonCount"
              },
              {
                "type": "null"
              }
            ]
          },
          "cursor": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonCursor"
              },
              {
                "type": "null"
              }
            ]
          },
          "provenance": {
            "$ref": "#/components/schemas/MarketCommonProvenance"
          }
        },
        "required": [
          "checkpoint",
          "timestamp_ms",
          "lag_ms",
          "cursor",
          "provenance"
        ],
        "additionalProperties": false
      },
      "MarketCommonCount": {
        "description": "A count, as a JSON integer.",
        "type": "integer",
        "minimum": 0
      },
      "MarketCommonTimestampMs": {
        "description": "Unix time in milliseconds, as a JSON integer.",
        "type": "integer",
        "minimum": 0
      },
      "MarketCommonCursor": {
        "description": "A chain-derived message position '<checkpoint>:<tx_slot>:<event_slot>:<part>', compared as a numeric tuple.",
        "type": "string",
        "pattern": "^(0|[1-9][0-9]*):(0|[1-9][0-9]*):(0|[1-9][0-9]*):(0|[1-9][0-9]*)$"
      },
      "MarketCommonProvenance": {
        "description": "Where a market-data answer comes from. Over HTTP, checkpoint is memory's applied checkpoint when the request arrived: the body reflects it or a later one, so lag_ms is an upper bound. On the socket, it is the message's own checkpoint. checkpoint, timestamp_ms and lag_ms are null before the first checkpoint.",
        "type": "object",
        "properties": {
          "network": {
            "$ref": "#/components/schemas/MarketCommonNetwork"
          },
          "deployment_fingerprint": {
            "description": "The indexed deployment's fingerprint, or null when the engine runs without the launchpad and BLAST_DEPLOYMENT_FINGERPRINT is unset: no launchpad deployment manifest is indexed.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonDeploymentFingerprint"
              },
              {
                "type": "null"
              }
            ]
          },
          "checkpoint": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonCount"
              },
              {
                "type": "null"
              }
            ]
          },
          "timestamp_ms": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonTimestampMs"
              },
              {
                "type": "null"
              }
            ],
            "description": "The checkpoint's timestamp."
          },
          "observed_ms": {
            "$ref": "#/components/schemas/MarketCommonTimestampMs",
            "description": "The engine's wall clock when it served the answer or sent the frame."
          },
          "lag_ms": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonCount"
              },
              {
                "type": "null"
              }
            ],
            "description": "observed_ms minus timestamp_ms, floored at 0."
          }
        },
        "required": [
          "network",
          "deployment_fingerprint",
          "checkpoint",
          "timestamp_ms",
          "observed_ms",
          "lag_ms"
        ],
        "additionalProperties": false
      },
      "MarketCommonNetwork": {
        "description": "The Sui network of the indexed Blast deployment, as the canonical SDK's deployment manifest names it.",
        "enum": [
          "mainnet",
          "testnet",
          "devnet",
          "localnet"
        ]
      },
      "MarketCommonDeploymentFingerprint": {
        "description": "The canonical SDK's deploymentFingerprint of the indexed deployment manifest: sha256, 64 lowercase hex characters.",
        "type": "string",
        "pattern": "^[0-9a-f]{64}$"
      },
      "MarketHoldersSnapshot": {
        "title": "Market Holders Snapshot",
        "description": "A coin's native holder snapshot, read from one memory snapshot. A complete or behind snapshot serves every fact; an incomplete one serves none (each is null), never a partial one.",
        "type": "object",
        "properties": {
          "coin": {
            "$ref": "#/components/schemas/MarketCommonCoinType"
          },
          "snapshot": {
            "$ref": "#/components/schemas/MarketCommonHolderSnapshot"
          },
          "holder_count": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ]
          },
          "held_supply": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ]
          },
          "top_1": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonHolderConcentration"
              },
              {
                "type": "null"
              }
            ]
          },
          "top_10": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonHolderConcentration"
              },
              {
                "type": "null"
              }
            ]
          },
          "holders": {
            "anyOf": [
              {
                "description": "This page's holders, by balance descending, then address ascending.",
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/MarketCommonHolderRow"
                },
                "maxItems": 100
              },
              {
                "type": "null"
              }
            ]
          },
          "next_cursor": {
            "description": "The page token of the next page (the web cursor envelope); null on the last page and when incomplete.",
            "type": [
              "string",
              "null"
            ]
          },
          "provenance": {
            "$ref": "#/components/schemas/MarketCommonProvenance"
          }
        },
        "required": [
          "coin",
          "snapshot",
          "holder_count",
          "held_supply",
          "top_1",
          "top_10",
          "holders",
          "next_cursor",
          "provenance"
        ],
        "additionalProperties": false,
        "oneOf": [
          {
            "description": "Complete or behind: every fact.",
            "properties": {
              "snapshot": {
                "type": "object",
                "properties": {
                  "state": {
                    "enum": [
                      "complete",
                      "behind"
                    ]
                  }
                }
              },
              "holder_count": {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              "held_supply": {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              "top_1": {
                "$ref": "#/components/schemas/MarketCommonHolderConcentration"
              },
              "top_10": {
                "$ref": "#/components/schemas/MarketCommonHolderConcentration"
              },
              "holders": {
                "type": "array"
              }
            }
          },
          {
            "description": "Incomplete: no fact.",
            "properties": {
              "snapshot": {
                "type": "object",
                "properties": {
                  "state": {
                    "const": "incomplete"
                  }
                }
              },
              "holder_count": {
                "type": "null"
              },
              "held_supply": {
                "type": "null"
              },
              "top_1": {
                "type": "null"
              },
              "top_10": {
                "type": "null"
              },
              "holders": {
                "type": "null"
              },
              "next_cursor": {
                "type": "null"
              }
            }
          }
        ]
      },
      "MarketCommonCoinType": {
        "description": "A canonical coin type '0x<64 hex>::<module>::<Name>'.",
        "type": "string",
        "pattern": "^0x[0-9a-f]{64}::[A-Za-z_][A-Za-z0-9_]*::[A-Za-z_][A-Za-z0-9_]*$"
      },
      "MarketCommonHolderSnapshot": {
        "description": "The native holder state an answer reflects. complete: every native balance change of the coin from its first appearance through checkpoint; incomplete: some of the coin's history is missing, so no holder fact is served; behind: complete, but checkpoint is older than the engine's committed market checkpoint.",
        "type": "object",
        "properties": {
          "state": {
            "enum": [
              "complete",
              "incomplete",
              "behind"
            ]
          },
          "checkpoint": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "timestamp_ms": {
            "$ref": "#/components/schemas/MarketCommonTimestampMs"
          }
        },
        "required": [
          "state",
          "checkpoint",
          "timestamp_ms"
        ],
        "additionalProperties": false
      },
      "MarketCommonUint": {
        "description": "An unsigned integer as a decimal string: amounts, reserves, supply, targets, decimals, bps and market caps.",
        "type": "string",
        "pattern": "^(0|[1-9][0-9]*)$"
      },
      "MarketCommonHolderConcentration": {
        "description": "The summed balance of a coin's largest holders (one or ten) and its share of held_supply in basis points, floored; share_bps is null when held_supply is 0.",
        "type": "object",
        "properties": {
          "amount": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "share_bps": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "amount",
          "share_bps"
        ],
        "additionalProperties": false
      },
      "MarketCommonHolderRow": {
        "description": "One holder of a native holder snapshot: an address other than 0x0 and its native balance, with its share of held_supply in basis points, floored. It carries no labels.",
        "type": "object",
        "properties": {
          "address": {
            "$ref": "#/components/schemas/MarketCommonAddress"
          },
          "balance": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "share_bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          }
        },
        "required": [
          "address",
          "balance",
          "share_bps"
        ],
        "additionalProperties": false
      },
      "MarketCommonAddress": {
        "description": "A Sui address: '0x' and 64 lowercase hex characters.",
        "type": "string",
        "pattern": "^0x[0-9a-f]{64}$"
      },
      "MarketActivityClassified": {
        "title": "Market Activity Classified",
        "type": "object",
        "properties": {
          "activity": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MarketCommonClassifiedActivity"
            },
            "maxItems": 100
          },
          "next_cursor": {
            "description": "The page token of the next page (the web cursor envelope); null on the last page.",
            "type": [
              "string",
              "null"
            ]
          },
          "provenance": {
            "$ref": "#/components/schemas/MarketCommonProvenance"
          }
        },
        "required": [
          "activity",
          "next_cursor",
          "provenance"
        ],
        "additionalProperties": false
      },
      "MarketCommonClassifiedActivity": {
        "description": "One row of a launch's classified activity: a chain event (sub 0 of its native position) or a lifecycle change it caused (sub 1 and up). The actor is the event's own bidder (opening_delivery), the transaction sender where the contract makes it the party (opening_join; curve_buy and curve_sell, the executing signer, not necessarily the coins' recipient), and null on opening_settlement, lifecycle and migration rows. Amounts are decimal strings.",
        "type": "object",
        "properties": {
          "position": {
            "$ref": "#/components/schemas/MarketCommonCursor"
          },
          "checkpoint": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "timestamp_ms": {
            "$ref": "#/components/schemas/MarketCommonTimestampMs"
          },
          "digest": {
            "$ref": "#/components/schemas/MarketCommonDigest"
          },
          "kind": {
            "enum": [
              "curve_buy",
              "curve_sell",
              "opening_join",
              "opening_settlement",
              "opening_delivery",
              "lifecycle",
              "migration"
            ]
          },
          "source": {
            "enum": [
              "user",
              "creator_pre_share",
              "opening_round_settlement",
              null
            ]
          },
          "actor": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonAddress"
              },
              {
                "type": "null"
              }
            ]
          },
          "lifecycle": {
            "enum": [
              "opening_round",
              "live",
              "migration_ready",
              "migrated",
              null
            ]
          },
          "amounts": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/MarketCommonUint"
            }
          }
        },
        "required": [
          "position",
          "checkpoint",
          "timestamp_ms",
          "digest",
          "kind",
          "source",
          "actor",
          "lifecycle",
          "amounts"
        ],
        "additionalProperties": false
      },
      "MarketCommonDigest": {
        "description": "A transaction digest in Base58.",
        "type": "string",
        "pattern": "^[1-9A-HJ-NP-Za-km-z]{32,44}$"
      },
      "MarketPool": {
        "title": "Market Pool",
        "type": "object",
        "properties": {
          "pool": {
            "$ref": "#/components/schemas/MarketCommonPoolSummary"
          },
          "candle": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonCandle"
              },
              {
                "type": "null"
              }
            ],
            "description": "The open 1m candle; null while none is open: before the pool's first trade, and from the close of its last candle until its next trade."
          },
          "provenance": {
            "$ref": "#/components/schemas/MarketCommonProvenance"
          }
        },
        "required": [
          "pool",
          "candle",
          "provenance"
        ],
        "additionalProperties": false
      },
      "MarketCommonPoolSummary": {
        "type": "object",
        "properties": {
          "pool_key": {
            "$ref": "#/components/schemas/MarketCommonPoolKey"
          },
          "venue": {
            "$ref": "#/components/schemas/MarketCommonVenue"
          },
          "pool_id": {
            "$ref": "#/components/schemas/MarketCommonObjectId"
          },
          "coin": {
            "$ref": "#/components/schemas/MarketCommonCoinType"
          },
          "metadata": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonCoinMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "quote": {
            "$ref": "#/components/schemas/MarketCommonCoinType"
          },
          "lifecycle": {
            "$ref": "#/components/schemas/MarketCommonLifecycle"
          },
          "created_cursor": {
            "$ref": "#/components/schemas/MarketCommonCursor"
          },
          "created_at_ms": {
            "$ref": "#/components/schemas/MarketCommonTimestampMs"
          },
          "launch": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonLaunchSettings"
              },
              {
                "type": "null"
              }
            ],
            "description": "Immutable launch settings for a curve; null for venue pools."
          },
          "public_start_ms": {
            "description": "The curve's LaunchShared public start, Unix ms as a decimal string; null before the launch is shared and on venue pools.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ]
          },
          "partner": {
            "description": "The partner the curve's launch names; null without one and on venue pools.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonLaunchPartner"
              },
              {
                "type": "null"
              }
            ]
          },
          "migration": {
            "description": "The curve's Migrated; null before it and on venue pools.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonLaunchMigration"
              },
              {
                "type": "null"
              }
            ]
          },
          "opening_round": {
            "description": "The curve's opening round; null for a launch without one and on venue pools.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonOpeningRound"
              },
              {
                "type": "null"
              }
            ]
          },
          "price": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonPrice"
              },
              {
                "type": "null"
              }
            ]
          },
          "market_cap": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ]
          },
          "supply": {
            "$ref": "#/components/schemas/MarketCommonUint",
            "description": "The coin's live supply (see 'Numbers')."
          },
          "inputs": {
            "$ref": "#/components/schemas/MarketCommonInputs"
          },
          "windows": {
            "$ref": "#/components/schemas/MarketCommonWindows"
          },
          "holders": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "last_trade_cursor": {
            "description": "The cursor of the last trade on the pool's tape; null before the first.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonCursor"
              },
              {
                "type": "null"
              }
            ]
          },
          "quote_usd": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUsdStamp"
              },
              {
                "type": "null"
              }
            ],
            "description": "The quote's latest USD price and its age."
          }
        },
        "required": [
          "pool_key",
          "venue",
          "pool_id",
          "coin",
          "quote",
          "lifecycle",
          "created_cursor",
          "price",
          "market_cap",
          "supply",
          "inputs",
          "windows",
          "holders",
          "last_trade_cursor",
          "quote_usd"
        ],
        "additionalProperties": false
      },
      "MarketCommonPoolKey": {
        "description": "'<venue>:<pool_id>'. For the curve, the pool ID is the launch object ID.",
        "type": "string",
        "pattern": "^(blast_curve|cetus|bluefin):0x[0-9a-f]{64}$"
      },
      "MarketCommonVenue": {
        "enum": [
          "blast_curve",
          "cetus",
          "bluefin"
        ]
      },
      "MarketCommonObjectId": {
        "description": "A Sui object ID: '0x' and 64 lowercase hex characters.",
        "type": "string",
        "pattern": "^0x[0-9a-f]{64}$"
      },
      "MarketCommonCoinMetadata": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "icon_url": {
            "type": "string"
          }
        },
        "required": [
          "name",
          "symbol",
          "description",
          "icon_url"
        ],
        "additionalProperties": false
      },
      "MarketCommonLifecycle": {
        "description": "'opening_round', 'live', 'migration_ready' or 'migrated' for the curve; 'active' for venue pools.",
        "enum": [
          "opening_round",
          "live",
          "migration_ready",
          "migrated",
          "active"
        ]
      },
      "MarketCommonLaunchSettings": {
        "type": "object",
        "properties": {
          "migration_witness": {
            "$ref": "#/components/schemas/MarketCommonMoveType"
          },
          "pool_tick_spacing": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "pool_fee_rate": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "lp_fee_split": {
            "$ref": "#/components/schemas/MarketCommonFeeSplit"
          },
          "allocation_plan": {
            "$ref": "#/components/schemas/MarketCommonAllocationPlan"
          },
          "opening_round_ms": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "creation_fee": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "partner_id": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonObjectId"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "migration_witness",
          "pool_tick_spacing",
          "pool_fee_rate",
          "lp_fee_split",
          "allocation_plan",
          "opening_round_ms",
          "creation_fee",
          "partner_id"
        ],
        "additionalProperties": false
      },
      "MarketCommonMoveType": {
        "description": "A canonical Move type, '0x'-prefixed, possibly with type parameters.",
        "type": "string",
        "pattern": "^0x[0-9a-f]{64}::[A-Za-z_][A-Za-z0-9_]*::[A-Za-z_][A-Za-z0-9_]*(<.+>)?$"
      },
      "MarketCommonFeeSplit": {
        "type": "object",
        "properties": {
          "creator_bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "auto_lp_bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "rewards_bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "burn_bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "recipients": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MarketCommonFeeRoute"
            }
          }
        },
        "required": [
          "creator_bps",
          "auto_lp_bps",
          "rewards_bps",
          "burn_bps",
          "recipients"
        ],
        "additionalProperties": false
      },
      "MarketCommonFeeRoute": {
        "type": "object",
        "properties": {
          "destination": {
            "$ref": "#/components/schemas/MarketCommonAddress"
          },
          "bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          }
        },
        "required": [
          "destination",
          "bps"
        ],
        "additionalProperties": false
      },
      "MarketCommonAllocationPlan": {
        "type": "object",
        "properties": {
          "curve_meme_bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "lp_meme_bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "lp_quote_bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "protocol_meme_bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "protocol_quote_bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "recipients": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MarketCommonAllocationRecipient"
            }
          }
        },
        "required": [
          "curve_meme_bps",
          "lp_meme_bps",
          "lp_quote_bps",
          "protocol_meme_bps",
          "protocol_quote_bps",
          "recipients"
        ],
        "additionalProperties": false
      },
      "MarketCommonAllocationRecipient": {
        "type": "object",
        "properties": {
          "destination": {
            "$ref": "#/components/schemas/MarketCommonAddress"
          },
          "meme_bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "quote_bps": {
            "$ref": "#/components/schemas/MarketCommonUint"
          }
        },
        "required": [
          "destination",
          "meme_bps",
          "quote_bps"
        ],
        "additionalProperties": false
      },
      "MarketCommonLaunchPartner": {
        "description": "The partner a launch names, as the launchpad's partner events left it: `admitted`, `removal_scheduled` (new launches may name it until `accepted_until_ms`; launches that name it keep paying it) or `unknown` (no partner event of it was indexed).",
        "type": "object",
        "properties": {
          "partner_id": {
            "$ref": "#/components/schemas/MarketCommonObjectId"
          },
          "status": {
            "enum": [
              "admitted",
              "removal_scheduled",
              "unknown"
            ]
          },
          "accepted_until_ms": {
            "description": "The scheduled removal's deadline for new launches, Unix ms as a decimal string; null unless a removal is scheduled.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "partner_id",
          "status",
          "accepted_until_ms"
        ],
        "additionalProperties": false
      },
      "MarketCommonLaunchMigration": {
        "description": "A launch's Migrated: its event cursor and checkpoint timestamp (the Graduated view's order), its amounts, the coin's venue pool (null when the migration opened none the engine tracks), and the allocation payments before it.",
        "type": "object",
        "properties": {
          "cursor": {
            "$ref": "#/components/schemas/MarketCommonCursor"
          },
          "timestamp_ms": {
            "$ref": "#/components/schemas/MarketCommonTimestampMs"
          },
          "meme": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "quote": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "disposed_meme": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "total_supply_after": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "pool_key": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonPoolKey"
              },
              {
                "type": "null"
              }
            ]
          },
          "allocations": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MarketCommonMigrationAllocation"
            }
          }
        },
        "required": [
          "cursor",
          "timestamp_ms",
          "meme",
          "quote",
          "disposed_meme",
          "total_supply_after",
          "pool_key",
          "allocations"
        ],
        "additionalProperties": false
      },
      "MarketCommonMigrationAllocation": {
        "description": "One MigrationAllocationPaid: the migration's payment to an allocation recipient.",
        "type": "object",
        "properties": {
          "cursor": {
            "$ref": "#/components/schemas/MarketCommonCursor"
          },
          "destination": {
            "$ref": "#/components/schemas/MarketCommonAddress"
          },
          "meme": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "quote": {
            "$ref": "#/components/schemas/MarketCommonUint"
          }
        },
        "required": [
          "cursor",
          "destination",
          "meme",
          "quote"
        ],
        "additionalProperties": false
      },
      "MarketCommonOpeningRound": {
        "description": "A launch's opening round as its summary's checkpoint leaves it: duration, start and end (null before LaunchShared, never inferred), totals, the settlement event, delivery counts, and its state at that checkpoint's time.",
        "type": "object",
        "properties": {
          "duration_ms": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "starts_at_ms": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ]
          },
          "ends_at_ms": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ]
          },
          "total_committed_quote": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "bidder_count": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "settlement": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonEventStamp"
              },
              {
                "type": "null"
              }
            ]
          },
          "delivered_count": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "undelivered_count": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "state": {
            "enum": [
              "pending",
              "open",
              "ended_unsettled",
              "settled"
            ]
          }
        },
        "required": [
          "duration_ms",
          "starts_at_ms",
          "ends_at_ms",
          "total_committed_quote",
          "bidder_count",
          "settlement",
          "delivered_count",
          "undelivered_count",
          "state"
        ],
        "additionalProperties": false
      },
      "MarketCommonEventStamp": {
        "description": "Where and when a chain event committed: its checkpoint, that checkpoint's timestamp and its transaction digest.",
        "type": "object",
        "properties": {
          "checkpoint": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "timestamp_ms": {
            "$ref": "#/components/schemas/MarketCommonTimestampMs"
          },
          "digest": {
            "$ref": "#/components/schemas/MarketCommonDigest"
          }
        },
        "required": [
          "checkpoint",
          "timestamp_ms",
          "digest"
        ],
        "additionalProperties": false
      },
      "MarketCommonPrice": {
        "description": "The canonical price string: quote atoms per meme atom, truncated toward zero at 36 fractional digits, with no exponent and no trailing fractional zeros.",
        "type": "string",
        "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{0,35}[1-9])?$"
      },
      "MarketCommonInputs": {
        "description": "Everything a client needs to recompute price, market cap and supply (see 'Numbers' in docs/api.md).",
        "type": "object",
        "properties": {
          "virtual_quote": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ],
            "description": "Curve only; null for venue pools."
          },
          "meme_reserve": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ],
            "description": "Curve only; null for venue pools."
          },
          "quote_reserve": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ],
            "description": "The real quote reserve. Curve only; null for venue pools."
          },
          "graduation_target": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ],
            "description": "Curve only; null for venue pools."
          },
          "sqrt_price_x64": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ],
            "description": "Venue pools only; null for the curve."
          },
          "meme_is_coin_a": {
            "description": "Venue pools only; null for the curve.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "currency_supply": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "pending_burn_total": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "balance_0x0": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "meme_decimals": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "quote_decimals": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ],
            "description": "null for a quote coin the engine's quote table does not list."
          }
        },
        "required": [
          "virtual_quote",
          "meme_reserve",
          "quote_reserve",
          "graduation_target",
          "sqrt_price_x64",
          "meme_is_coin_a",
          "currency_supply",
          "pending_burn_total",
          "balance_0x0",
          "meme_decimals",
          "quote_decimals"
        ],
        "additionalProperties": false
      },
      "MarketCommonWindows": {
        "description": "Keyed by window: each counts the trades on the pool's tape in the 1m buckets whose start is at or after the last applied checkpoint's timestamp less the window; 'all' counts every trade since the pool opened.",
        "type": "object",
        "properties": {
          "5m": {
            "$ref": "#/components/schemas/MarketCommonWindow"
          },
          "1h": {
            "$ref": "#/components/schemas/MarketCommonWindow"
          },
          "6h": {
            "$ref": "#/components/schemas/MarketCommonWindow"
          },
          "24h": {
            "$ref": "#/components/schemas/MarketCommonWindow"
          },
          "all": {
            "$ref": "#/components/schemas/MarketCommonWindow"
          }
        },
        "required": [
          "5m",
          "1h",
          "6h",
          "24h",
          "all"
        ],
        "additionalProperties": false
      },
      "MarketCommonWindow": {
        "type": "object",
        "properties": {
          "volume_quote": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "volume_usd": {
            "description": "The sum of the trades that carry a USD stamp; null only when no trade in the window has one.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUsd"
              },
              {
                "type": "null"
              }
            ]
          },
          "buys": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "sells": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "trades": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "net_quote_flow": {
            "description": "Curve pool summaries only: the trader-side Quote of the window's curve buys (creator pre-share buys included) less that of its curve sells, never the opening-round settlement or fills.",
            "$ref": "#/components/schemas/MarketCommonInt"
          },
          "buyers": {
            "description": "Curve pool summaries only: the distinct traders of the window's curve buys, settlement excluded.",
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "sellers": {
            "description": "Curve pool summaries only: the distinct traders of the window's curve sells.",
            "$ref": "#/components/schemas/MarketCommonCount"
          }
        },
        "required": [
          "volume_quote",
          "volume_usd",
          "buys",
          "sells",
          "trades"
        ],
        "additionalProperties": false
      },
      "MarketCommonUsd": {
        "description": "A non-negative USD value with up to 18 fractional digits, truncated toward zero, with no trailing fractional zeros.",
        "type": "string",
        "pattern": "^(0|[1-9][0-9]*)(\\.[0-9]{0,17}[1-9])?$"
      },
      "MarketCommonInt": {
        "description": "A signed integer as a decimal string, with an optional leading '-'.",
        "type": "string",
        "pattern": "^(0|-?[1-9][0-9]*)$"
      },
      "MarketCommonUsdStamp": {
        "description": "The quote's USD price from the latest Pyth update on chain before the stamped point: a trade's event (a fill's settlement), or the checkpoint a summary shows.",
        "type": "object",
        "properties": {
          "price": {
            "$ref": "#/components/schemas/MarketCommonInt",
            "description": "The Pyth price mantissa; the USD price is price × 10^expo."
          },
          "expo": {
            "$ref": "#/components/schemas/MarketCommonPythExpo"
          },
          "publish_time": {
            "$ref": "#/components/schemas/MarketCommonUnixSeconds",
            "description": "The Pyth publish time, in Unix seconds."
          },
          "age_ms": {
            "$ref": "#/components/schemas/MarketCommonCount",
            "description": "Checkpoint time minus publish time, in milliseconds; 0 when the publish time is later."
          }
        },
        "required": [
          "price",
          "expo",
          "publish_time",
          "age_ms"
        ],
        "additionalProperties": false
      },
      "MarketCommonPythExpo": {
        "description": "A Pyth price exponent, as a JSON integer.",
        "type": "integer"
      },
      "MarketCommonUnixSeconds": {
        "description": "Unix time in seconds, as a JSON integer.",
        "type": "integer",
        "minimum": 0
      },
      "MarketCommonCandle": {
        "type": "object",
        "properties": {
          "bucket_start": {
            "$ref": "#/components/schemas/MarketCommonTimestampMs"
          },
          "interval": {
            "$ref": "#/components/schemas/MarketCommonInterval"
          },
          "open": {
            "$ref": "#/components/schemas/MarketCommonPrice"
          },
          "high": {
            "$ref": "#/components/schemas/MarketCommonPrice"
          },
          "low": {
            "$ref": "#/components/schemas/MarketCommonPrice"
          },
          "close": {
            "$ref": "#/components/schemas/MarketCommonPrice"
          },
          "volume_quote": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "volume_meme": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "volume_usd": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUsd"
              },
              {
                "type": "null"
              }
            ]
          },
          "buys": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "sells": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "trades": {
            "$ref": "#/components/schemas/MarketCommonCount"
          }
        },
        "required": [
          "bucket_start",
          "interval",
          "open",
          "high",
          "low",
          "close",
          "volume_quote",
          "volume_meme",
          "volume_usd",
          "buys",
          "sells",
          "trades"
        ],
        "additionalProperties": false
      },
      "MarketCommonInterval": {
        "description": "A candle interval. `1s` candles are built on request from the stored trades; `1m` and `1d` are stored; `5m` to `4h` derive from `1m` and `1w` from `1d`. Weeks start on Monday 00:00 UTC.",
        "enum": [
          "1s",
          "1m",
          "5m",
          "15m",
          "1h",
          "4h",
          "1d",
          "1w"
        ]
      },
      "MarketCandles": {
        "title": "Market Candles",
        "type": "object",
        "properties": {
          "interval": {
            "$ref": "#/components/schemas/MarketCommonInterval"
          },
          "candles": {
            "description": "The newest `limit` candles that start at or after `from` and before `to`, oldest first. Empty when there are none: a chart paging back with `to` stops there.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MarketCommonCandle"
            },
            "maxItems": 2000
          },
          "migration": {
            "description": "The migration the page is bounded by, the same on the coin's and each of its pools' pages; null before the coin's curve migrates.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonCandleMigration"
              },
              {
                "type": "null"
              }
            ]
          },
          "provenance": {
            "$ref": "#/components/schemas/MarketCommonProvenance"
          }
        },
        "required": [
          "interval",
          "candles",
          "migration",
          "provenance"
        ],
        "additionalProperties": false
      },
      "MarketCommonCandleMigration": {
        "description": "The migration a candle page is bounded by, null before the coin's curve migrates: the curve's Migrated cursor and checkpoint timestamp, the curve's pool key, and the venue pool the migration recorded (null when it opened none the engine tracks). A curve candle holds only trades before the cursor and a venue candle only swaps after it.",
        "type": "object",
        "properties": {
          "cursor": {
            "$ref": "#/components/schemas/MarketCommonCursor"
          },
          "timestamp_ms": {
            "$ref": "#/components/schemas/MarketCommonTimestampMs"
          },
          "curve_pool_key": {
            "type": "string",
            "pattern": "^blast_curve:0x[0-9a-f]{64}$"
          },
          "venue_pool_key": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^(cetus|bluefin):0x[0-9a-f]{64}$"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "cursor",
          "timestamp_ms",
          "curve_pool_key",
          "venue_pool_key"
        ],
        "additionalProperties": false
      },
      "MarketTrades": {
        "title": "Market Trades",
        "type": "object",
        "properties": {
          "trades": {
            "description": "Newest first.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MarketCommonTrade"
            },
            "maxItems": 200
          },
          "archived_before": {
            "$ref": "#/components/schemas/MarketCommonCursor",
            "description": "Present only when the read reaches the archive cut: earlier trades are archived."
          },
          "provenance": {
            "$ref": "#/components/schemas/MarketCommonProvenance"
          }
        },
        "required": [
          "trades",
          "provenance"
        ],
        "additionalProperties": false
      },
      "MarketCommonTrade": {
        "type": "object",
        "properties": {
          "cursor": {
            "$ref": "#/components/schemas/MarketCommonCursor"
          },
          "checkpoint": {
            "$ref": "#/components/schemas/MarketCommonCount"
          },
          "timestamp_ms": {
            "$ref": "#/components/schemas/MarketCommonTimestampMs"
          },
          "digest": {
            "$ref": "#/components/schemas/MarketCommonDigest"
          },
          "pool_key": {
            "$ref": "#/components/schemas/MarketCommonPoolKey"
          },
          "venue": {
            "$ref": "#/components/schemas/MarketCommonVenue"
          },
          "coin": {
            "$ref": "#/components/schemas/MarketCommonCoinType"
          },
          "quote": {
            "$ref": "#/components/schemas/MarketCommonCoinType"
          },
          "trader": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonAddress"
              },
              {
                "type": "null"
              }
            ],
            "description": "The transaction sender, or a fill's bidder. Null only for the opening-round pot's buy (kind opening_round)."
          },
          "side": {
            "enum": [
              "buy",
              "sell"
            ]
          },
          "kind": {
            "description": "pre_share_buy, buy and sell are curve trades; opening_round is the pot's buy that settles an opening round; opening_round_fill is a bidder's share of it, on wallet tapes only; swap is a venue trade.",
            "enum": [
              "pre_share_buy",
              "buy",
              "sell",
              "opening_round",
              "opening_round_fill",
              "swap"
            ]
          },
          "quote_amount": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "meme_amount": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "meme_fee": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "quote_fee": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "curve": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonCurveFields"
              },
              {
                "type": "null"
              }
            ]
          },
          "opening_round": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonOpeningRoundFields"
              },
              {
                "type": "null"
              }
            ]
          },
          "venue_swap": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonVenueFields"
              },
              {
                "type": "null"
              }
            ]
          },
          "price": {
            "$ref": "#/components/schemas/MarketCommonPrice",
            "description": "The price after the trade."
          },
          "market_cap": {
            "$ref": "#/components/schemas/MarketCommonUint",
            "description": "floor(price × supply) after the trade, at the exact price, in quote atoms."
          },
          "inputs": {
            "$ref": "#/components/schemas/MarketCommonInputs"
          },
          "usd": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUsdStamp"
              },
              {
                "type": "null"
              }
            ]
          },
          "volume_usd": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUsd"
              },
              {
                "type": "null"
              }
            ]
          },
          "labels": {
            "$ref": "#/components/schemas/MarketCommonLabels",
            "description": "The trader's labels, none for the opening-round pot. whale is fixed when the trade is indexed; creator and top_trader are as they stand after the trade's transaction in a live message, and when read on a route or in a snapshot. A replayed trade keeps whale only."
          }
        },
        "required": [
          "cursor",
          "checkpoint",
          "timestamp_ms",
          "digest",
          "pool_key",
          "venue",
          "coin",
          "quote",
          "trader",
          "side",
          "kind",
          "quote_amount",
          "meme_amount",
          "meme_fee",
          "quote_fee",
          "curve",
          "opening_round",
          "venue_swap",
          "price",
          "market_cap",
          "inputs",
          "usd",
          "volume_usd",
          "labels"
        ],
        "additionalProperties": false,
        "allOf": [
          {
            "if": {
              "properties": {
                "venue": {
                  "const": "blast_curve"
                }
              }
            },
            "then": {
              "properties": {
                "kind": {
                  "enum": [
                    "pre_share_buy",
                    "buy",
                    "sell",
                    "opening_round",
                    "opening_round_fill"
                  ]
                },
                "venue_swap": {
                  "type": "null"
                }
              }
            },
            "else": {
              "properties": {
                "kind": {
                  "const": "swap"
                },
                "curve": {
                  "type": "null"
                },
                "opening_round": {
                  "type": "null"
                },
                "venue_swap": {
                  "$ref": "#/components/schemas/MarketCommonVenueFields"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "kind": {
                  "enum": [
                    "pre_share_buy",
                    "buy",
                    "sell",
                    "opening_round"
                  ]
                }
              }
            },
            "then": {
              "properties": {
                "curve": {
                  "$ref": "#/components/schemas/MarketCommonCurveFields"
                },
                "opening_round": {
                  "type": "null"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "kind": {
                  "const": "opening_round_fill"
                }
              }
            },
            "then": {
              "properties": {
                "curve": {
                  "type": "null"
                },
                "opening_round": {
                  "$ref": "#/components/schemas/MarketCommonOpeningRoundFields"
                },
                "meme_fee": {
                  "const": "0"
                },
                "quote_fee": {
                  "const": "0"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "kind": {
                  "const": "opening_round"
                }
              }
            },
            "then": {
              "properties": {
                "trader": {
                  "type": "null"
                }
              }
            },
            "else": {
              "properties": {
                "trader": {
                  "$ref": "#/components/schemas/MarketCommonAddress"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "kind": {
                  "enum": [
                    "pre_share_buy",
                    "buy",
                    "opening_round",
                    "opening_round_fill"
                  ]
                }
              }
            },
            "then": {
              "properties": {
                "side": {
                  "const": "buy"
                }
              }
            }
          },
          {
            "if": {
              "properties": {
                "kind": {
                  "const": "sell"
                }
              }
            },
            "then": {
              "properties": {
                "side": {
                  "const": "sell"
                }
              }
            }
          }
        ]
      },
      "MarketCommonCurveFields": {
        "description": "The raw curve event fields. Null on opening-round fills and venue trades.",
        "type": "object",
        "properties": {
          "quote_gross": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "meme_gross": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "protocol_quote_fee_delta": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "creator_quote_fee_delta": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "protocol_meme_fee_delta": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "creator_meme_fee_delta": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "pending_burn_delta": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ],
            "description": "Sells only; null otherwise."
          },
          "quote_refund": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ],
            "description": "Buys only (Bought.quote_refund, the quote returned beyond the graduation target); null on sells."
          }
        },
        "required": [
          "quote_gross",
          "meme_gross",
          "protocol_quote_fee_delta",
          "creator_quote_fee_delta",
          "protocol_meme_fee_delta",
          "creator_meme_fee_delta",
          "pending_burn_delta",
          "quote_refund"
        ],
        "additionalProperties": false
      },
      "MarketCommonOpeningRoundFields": {
        "description": "An opening-round fill's bid and the part of it refunded. Null on every other trade.",
        "type": "object",
        "properties": {
          "bid": {
            "$ref": "#/components/schemas/MarketCommonUint",
            "description": "The bidder's bid in the round."
          },
          "quote_refund": {
            "$ref": "#/components/schemas/MarketCommonUint",
            "description": "The part of the bid the delivery refunded (OpeningRoundDelivered.quote)."
          }
        },
        "required": [
          "bid",
          "quote_refund"
        ],
        "additionalProperties": false
      },
      "MarketCommonVenueFields": {
        "description": "The raw venue swap fields. Null on curve trades.",
        "type": "object",
        "properties": {
          "amount_in": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "amount_out": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "ref_amount": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/MarketCommonUint"
              },
              {
                "type": "null"
              }
            ],
            "description": "Cetus only; null on Bluefin."
          },
          "before_sqrt_price": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "after_sqrt_price": {
            "$ref": "#/components/schemas/MarketCommonUint"
          },
          "a_to_b": {
            "description": "The swap direction: coin A in, coin B out.",
            "type": "boolean"
          }
        },
        "required": [
          "amount_in",
          "amount_out",
          "ref_amount",
          "before_sqrt_price",
          "after_sqrt_price",
          "a_to_b"
        ],
        "additionalProperties": false
      },
      "MarketCommonLabels": {
        "description": "Wallet labels, in the order creator, whale, top_trader. The web app adds its own profile label.",
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/MarketCommonLabel"
        },
        "uniqueItems": true
      },
      "MarketCommonLabel": {
        "enum": [
          "creator",
          "whale",
          "top_trader"
        ]
      }
    }
  }
}
