From 560514cc401593621c576c1c4c86b714e83b2dd6 Mon Sep 17 00:00:00 2001 From: "Chip Stack (CTO)" Date: Fri, 9 Oct 2026 13:07:34 -0400 Subject: [PATCH] =?UTF-8?q?docs:=20peripheral-ownership=20annex=20?= =?UTF-8?q?=E2=80=94=20AMB/FxPortal=20proxy=20sources=20now=20merged=20(go?= =?UTF-8?q?vernance#83)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Paperclip --- public/openapi/ekubo.json | 1937 +++++++++++++++-- public/openapi/quoter.json | 4 +- schemas/ekubo.json | 1937 +++++++++++++++-- schemas/quoter.json | 4 +- .../contracts/peripheral-ownership.md | 2 +- 5 files changed, 3421 insertions(+), 463 deletions(-) diff --git a/public/openapi/ekubo.json b/public/openapi/ekubo.json index 5a0b958..29a15a4 100644 --- a/public/openapi/ekubo.json +++ b/public/openapi/ekubo.json @@ -20,7 +20,30 @@ } ], "components": { - "schemas": {}, + "schemas": { + "ErrorResponse": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "description": "HTTP status code for the error" + }, + "error": { + "type": "string", + "description": "Human-readable description of the error" + } + }, + "required": [ + "status", + "error" + ], + "description": "Standard error response payload", + "example": { + "status": 404, + "error": "Token not found" + } + } + }, "parameters": {} }, "paths": { @@ -90,6 +113,7 @@ ], "minimum": -100, "maximum": 100, + "default": 0, "title": "Visibility Priority", "description": "Token visibility priority threshold" }, @@ -97,6 +121,21 @@ "description": "Token visibility priority threshold", "name": "minVisibilityPriority", "in": "query" + }, + { + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ], + "default": "true", + "description": "Set to false to omit usd_price from every row. The price-free list only changes when token metadata does, so it is cached for longer; pair it with /tokens/prices to keep prices fresh." + }, + "required": false, + "description": "Set to false to omit usd_price from every row. The price-free list only changes when token metadata does, so it is cached for longer; pair it with /tokens/prices to keep prices fresh.", + "name": "includePrices", + "in": "query" } ], "responses": { @@ -105,99 +144,206 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "chain_id": { - "type": "string" - }, - "name": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Name of the token" - }, - "symbol": { - "type": "string", - "minLength": 1, - "maxLength": 32, - "description": "Symbol for the token" - }, - "decimals": { - "type": "integer", - "minimum": 0, - "maximum": 78, - "description": "The number of decimals used for display of token balances" - }, - "address": { - "type": "string", - "description": "The address of the token for the specified chain" - }, - "visibility_priority": { - "type": "integer", - "description": "How much this token should be surfaced relative to other tokens (higher is better)" - }, - "sort_order": { - "type": "integer", - "description": "How much the token should prefer to be the numerator when displayed in prices (higher is more numerator-like)" - }, - "total_supply": { - "type": [ - "integer", - "null" - ], - "minimum": 0, - "description": "The total supply of the token" - }, - "logo_url": { - "type": "string", - "format": "uri" - }, - "usd_price": { - "type": [ - "number", - "null" - ], - "minimum": 0, - "description": "The USD price for one unit of the token" - }, - "bridgeInfos": { - "type": [ - "object", - "null" - ], - "additionalProperties": { - "type": "object", - "properties": { - "bridge_address": { - "type": "string", - "description": "Token address for the destination chain" + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "chain_id": { + "type": "string" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 100, + "description": "Name of the token" + }, + "symbol": { + "type": "string", + "minLength": 1, + "maxLength": 32, + "description": "Symbol for the token" + }, + "decimals": { + "type": "integer", + "minimum": 0, + "maximum": 78, + "description": "The number of decimals used for display of token balances" + }, + "address": { + "type": "string", + "description": "The address of the token for the specified chain" + }, + "visibility_priority": { + "type": "integer", + "description": "How much this token should be surfaced relative to other tokens (higher is better)" + }, + "sort_order": { + "type": "integer", + "description": "How much the token should prefer to be the numerator when displayed in prices (higher is more numerator-like)" + }, + "total_supply": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "description": "The total supply of the token" + }, + "logo_url": { + "type": "string", + "format": "uri" + }, + "usd_price": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "description": "The USD price for one unit of the token" + }, + "bridgeInfos": { + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "object", + "properties": { + "bridge_address": { + "type": "string", + "description": "Token address for the destination chain" + } + }, + "required": [ + "bridge_address" + ] } + } + }, + "required": [ + "chain_id", + "name", + "symbol", + "decimals", + "address", + "visibility_priority", + "sort_order", + "total_supply", + "usd_price", + "bridgeInfos" + ] + }, + "description": "Array of tokens" + }, + { + "type": "array", + "items": { + "type": "object", + "properties": { + "chain_id": { + "type": "string" }, - "required": [ - "bridge_address" - ] - } + "name": { + "type": "string", + "minLength": 1, + "maxLength": 100, + "description": "Name of the token" + }, + "symbol": { + "type": "string", + "minLength": 1, + "maxLength": 32, + "description": "Symbol for the token" + }, + "decimals": { + "type": "integer", + "minimum": 0, + "maximum": 78, + "description": "The number of decimals used for display of token balances" + }, + "address": { + "type": "string", + "description": "The address of the token for the specified chain" + }, + "visibility_priority": { + "type": "integer", + "description": "How much this token should be surfaced relative to other tokens (higher is better)" + }, + "sort_order": { + "type": "integer", + "description": "How much the token should prefer to be the numerator when displayed in prices (higher is more numerator-like)" + }, + "total_supply": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "description": "The total supply of the token" + }, + "logo_url": { + "type": "string", + "format": "uri" + }, + "bridgeInfos": { + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "object", + "properties": { + "bridge_address": { + "type": "string", + "description": "Token address for the destination chain" + } + }, + "required": [ + "bridge_address" + ] + } + } + }, + "required": [ + "chain_id", + "name", + "symbol", + "decimals", + "address", + "visibility_priority", + "sort_order", + "total_supply", + "bridgeInfos" + ] } - }, - "required": [ - "chain_id", - "name", - "symbol", - "decimals", - "address", - "visibility_priority", - "sort_order", - "total_supply", - "usd_price", - "bridgeInfos" - ] - }, + } + ], "description": "Array of tokens" } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -327,6 +473,110 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tokens/prices": { + "get": { + "tags": [ + "Meta" + ], + "summary": "List token USD prices", + "description": "The usd_price of every priced token on a chain, keyed by address. Poll this instead of the token list when only prices need to stay fresh; tokens without a price are omitted.", + "operationId": "get_ListTokenUsdPrices", + "parameters": [ + { + "schema": { + "type": "integer", + "title": "Chain ID", + "description": "The ID of the network that is being fetched", + "format": "int64", + "minimum": 1, + "maximum": 9223372036854776000 + }, + "required": true, + "description": "The ID of the network that is being fetched", + "name": "chainId", + "in": "query" + }, + { + "schema": { + "type": [ + "integer", + "null" + ], + "minimum": -100, + "maximum": 100, + "default": 0, + "title": "Visibility Priority", + "description": "Token visibility priority threshold" + }, + "required": false, + "description": "Token visibility priority threshold", + "name": "minVisibilityPriority", + "in": "query" + } + ], + "responses": { + "200": { + "description": "USD prices by token address", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "number", + "minimum": 0, + "description": "The USD price for one unit of the token" + }, + "description": "USD price by token address, for priced tokens only", + "example": { + "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": 0.9999 + } + } + } + } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -473,32 +723,32 @@ } } }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { - "description": "Token not found", + "description": "The requested resource was not found", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "description": "HTTP status code for the error" - }, - "error": { - "type": "string", - "description": "Human-readable description of the error" - } - }, - "required": [ - "status", - "error" - ], - "additionalProperties": {}, - "description": "Standard error response payload", - "example": { - "status": 404, - "error": "Token not found" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -565,6 +815,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -637,6 +917,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -672,6 +982,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -823,6 +1153,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -886,7 +1236,10 @@ "type": "string" }, "tick_spacing": { - "type": "integer" + "type": [ + "integer", + "null" + ] }, "core_address": { "type": "string" @@ -1036,6 +1389,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -1140,6 +1513,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -1244,6 +1637,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -1364,6 +1777,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -1498,11 +1931,15 @@ }, "balance": { "type": "string" + }, + "chain_id": { + "type": "string" } }, "required": [ "token", - "balance" + "balance", + "chain_id" ] } }, @@ -1548,6 +1985,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -1710,6 +2167,9 @@ "type": "string" } ] + }, + "chain_id": { + "type": "string" } }, "required": [ @@ -1717,7 +2177,8 @@ "volume", "fees", "ve33_fees", - "date" + "date", + "chain_id" ] } }, @@ -1756,6 +2217,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -1871,7 +2352,10 @@ "type": "string" }, "tick_spacing": { - "type": "integer" + "type": [ + "integer", + "null" + ] }, "core_address": { "type": "string" @@ -2018,6 +2502,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -2153,32 +2657,32 @@ } } }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { - "description": "Token not found", + "description": "The requested resource was not found", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "description": "HTTP status code for the error" - }, - "error": { - "type": "string", - "description": "Human-readable description of the error" - } - }, - "required": [ - "status", - "error" - ], - "additionalProperties": {}, - "description": "Standard error response payload", - "example": { - "status": 404, - "error": "Token not found" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2267,11 +2771,40 @@ { "schema": { "type": "integer", - "minimum": 60 + "minimum": 60, + "default": 1800 }, "required": false, "name": "interval", "in": "query" + }, + { + "schema": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "description": "Unix timestamp (seconds) of the start of the range; defaults to 60 intervals before end" + }, + "required": false, + "description": "Unix timestamp (seconds) of the start of the range; defaults to 60 intervals before end", + "name": "start", + "in": "query" + }, + { + "schema": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "description": "Unix timestamp (seconds) of the end of the range; defaults to now" + }, + "required": false, + "description": "Unix timestamp (seconds) of the end of the range; defaults to now", + "name": "end", + "in": "query" } ], "responses": { @@ -2314,10 +2847,16 @@ "type": "number" }, "max": { - "type": "number" + "type": [ + "number", + "null" + ] }, "min": { - "type": "number" + "type": [ + "number", + "null" + ] }, "k_volume": { "type": "string" @@ -2343,6 +2882,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -2444,10 +3003,10 @@ "null" ], "minimum": 0, - "description": "Unix timestamp (seconds) of the first bucket" + "description": "Unix timestamp (seconds) of the first bucket; defaults to 60 intervals before end" }, "required": false, - "description": "Unix timestamp (seconds) of the first bucket", + "description": "Unix timestamp (seconds) of the first bucket; defaults to 60 intervals before end", "name": "start", "in": "query" }, @@ -2458,10 +3017,10 @@ "null" ], "minimum": 0, - "description": "Unix timestamp (seconds) of the last bucket" + "description": "Unix timestamp (seconds) of the last bucket; defaults to now" }, "required": false, - "description": "Unix timestamp (seconds) of the last bucket", + "description": "Unix timestamp (seconds) of the last bucket; defaults to now", "name": "end", "in": "query" } @@ -2557,31 +3116,21 @@ } }, "400": { - "description": "Invalid tokens or range", + "description": "The request parameters are invalid", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "description": "HTTP status code for the error" - }, - "error": { - "type": "string", - "description": "Human-readable description of the error" - } - }, - "required": [ - "status", - "error" - ], - "additionalProperties": {}, - "description": "Standard error response payload", - "example": { - "status": 404, - "error": "Token not found" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2662,6 +3211,7 @@ "schema": { "type": "integer", "minimum": 1, + "default": 300, "description": "Bucket size in seconds" }, "required": false, @@ -2676,10 +3226,10 @@ "null" ], "minimum": 0, - "description": "Unix timestamp (seconds)" + "description": "Unix timestamp (seconds); defaults to 60 intervals before end" }, "required": false, - "description": "Unix timestamp (seconds)", + "description": "Unix timestamp (seconds); defaults to 60 intervals before end", "name": "start", "in": "query" }, @@ -2690,10 +3240,10 @@ "null" ], "minimum": 0, - "description": "Unix timestamp (seconds)" + "description": "Unix timestamp (seconds); defaults to now" }, "required": false, - "description": "Unix timestamp (seconds)", + "description": "Unix timestamp (seconds); defaults to now", "name": "end", "in": "query" } @@ -2784,6 +3334,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -2872,7 +3452,7 @@ "type": "object", "properties": { "tick": { - "type": "string" + "type": "integer" }, "net_liquidity_delta_diff": { "type": "string" @@ -2891,6 +3471,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -3029,6 +3629,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -3205,6 +3835,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -3481,6 +4141,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -3567,7 +4247,7 @@ "type": "object", "properties": { "tick": { - "type": "string" + "type": "integer" }, "net_liquidity_delta_diff": { "type": "string" @@ -3586,6 +4266,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -3886,6 +4586,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -4142,6 +4862,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -4291,7 +5031,10 @@ "type": "string" }, "tick_spacing": { - "type": "integer" + "type": [ + "integer", + "null" + ] }, "extension": { "type": "string" @@ -4344,6 +5087,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -4664,6 +5427,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -4979,6 +5762,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -5546,6 +6349,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -5845,6 +6668,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -5973,6 +6826,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -6043,19 +6926,49 @@ "pattern": "^\\d+e?\\d*$", "description": "A decimal number" } - ], - "title": "Numeric", - "description": "A number represented in hexadecimal or decimal" - }, - "required": true, - "description": "A number represented in hexadecimal or decimal", - "name": "id", - "in": "path" - } - ], - "responses": { - "200": { - "description": "The order NFT image" + ], + "title": "Numeric", + "description": "A number represented in hexadecimal or decimal" + }, + "required": true, + "description": "A number represented in hexadecimal or decimal", + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "The order NFT image" + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -6184,6 +7097,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -6323,13 +7266,13 @@ }, "token0SaleRateDelta": { "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" + "pattern": "^-?\\d+e?\\d*$", + "description": "A signed decimal number" }, "token1SaleRateDelta": { "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" + "pattern": "^-?\\d+e?\\d*$", + "description": "A signed decimal number" } }, "required": [ @@ -6346,6 +7289,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -6439,13 +7412,13 @@ }, "token0SaleRateDelta": { "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" + "pattern": "^-?\\d+e?\\d*$", + "description": "A signed decimal number" }, "token1SaleRateDelta": { "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" + "pattern": "^-?\\d+e?\\d*$", + "description": "A signed decimal number" } }, "required": [ @@ -6462,6 +7435,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -6555,13 +7558,13 @@ }, "token0SaleRateDelta": { "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" + "pattern": "^-?\\d+e?\\d*$", + "description": "A signed decimal number" }, "token1SaleRateDelta": { "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" + "pattern": "^-?\\d+e?\\d*$", + "description": "A signed decimal number" } }, "required": [ @@ -6578,6 +7581,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -6841,6 +7864,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7100,6 +8143,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7346,6 +8409,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7429,6 +8512,36 @@ "responses": { "200": { "description": "The position NFT image" + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7512,6 +8625,36 @@ "responses": { "200": { "description": "The NFT metadata for the given position ID" + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7595,6 +8738,36 @@ "responses": { "200": { "description": "The position NFT image" + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7827,6 +9000,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7955,6 +9148,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8174,6 +9397,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8257,6 +9510,36 @@ "responses": { "200": { "description": "The NFT image" + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8397,6 +9680,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8436,7 +9739,8 @@ "schema": { "type": "integer", "minimum": 1, - "maximum": 1000 + "maximum": 1000, + "default": 100 }, "required": false, "name": "pageSize", @@ -8448,7 +9752,8 @@ "integer", "null" ], - "minimum": 0 + "minimum": 0, + "default": 0 }, "required": false, "name": "start", @@ -8463,11 +9768,6 @@ "schema": { "type": "object", "properties": { - "amountDelegatedTo": { - "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" - }, "delegates": { "type": "array", "items": { @@ -8526,12 +9826,31 @@ } }, "required": [ - "amountDelegatedTo", "delegates" ] } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8636,6 +9955,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8755,6 +10094,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8851,34 +10210,11 @@ "type": "string", "pattern": "^\\d+e?\\d*$", "description": "A decimal number" - }, - "votingRecord": { - "type": "object", - "properties": { - "yea": { - "type": "integer", - "minimum": 0 - }, - "nay": { - "type": "integer", - "minimum": 0 - }, - "missed": { - "type": "integer", - "minimum": 0 - } - }, - "required": [ - "yea", - "nay", - "missed" - ] } }, "required": [ "delegate", - "amount", - "votingRecord" + "amount" ] } } @@ -8890,6 +10226,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -9267,6 +10623,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -9423,6 +10799,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -9771,6 +11167,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -9871,7 +11287,10 @@ "format": "date-time" }, "nextDropTime": { - "type": "string", + "type": [ + "string", + "null" + ], "format": "date-time" }, "allowedExtensions": { @@ -10025,6 +11444,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -10161,6 +11600,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -10341,6 +11800,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } diff --git a/public/openapi/quoter.json b/public/openapi/quoter.json index 07e1484..2a0db36 100644 --- a/public/openapi/quoter.json +++ b/public/openapi/quoter.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "Ekubo Quoter API", - "version": "3.4.4", + "version": "3.4.10", "description": "Returns block-pinned split routes for exact-input and exact-output Ekubo Protocol swaps. Resolve token addresses and decimals through the Ekubo API token list before requesting a quote. All token amounts are base-unit decimal strings.", "contact": { "url": "https://ekubo.org", @@ -242,7 +242,7 @@ "estimated_gas_cost": { "type": "integer", "minimum": 0, - "description": "Routing execution-resource estimate. Transaction preparation should separately estimate the complete transaction." + "description": "Estimated gas to execute the route. On EVM chains this is the Ekubo Yul router's execution gas: router entry, the Core lock, and every split and hop of the route. It excludes the 21,000 intrinsic transaction gas, calldata gas, token payment and withdrawal (settlement), and any approval transaction. On Starknet it estimates the route's pool swaps only. Transaction preparation should separately estimate the complete transaction." }, "price_impact": { "type": [ diff --git a/schemas/ekubo.json b/schemas/ekubo.json index 5a0b958..29a15a4 100644 --- a/schemas/ekubo.json +++ b/schemas/ekubo.json @@ -20,7 +20,30 @@ } ], "components": { - "schemas": {}, + "schemas": { + "ErrorResponse": { + "type": "object", + "properties": { + "status": { + "type": "integer", + "description": "HTTP status code for the error" + }, + "error": { + "type": "string", + "description": "Human-readable description of the error" + } + }, + "required": [ + "status", + "error" + ], + "description": "Standard error response payload", + "example": { + "status": 404, + "error": "Token not found" + } + } + }, "parameters": {} }, "paths": { @@ -90,6 +113,7 @@ ], "minimum": -100, "maximum": 100, + "default": 0, "title": "Visibility Priority", "description": "Token visibility priority threshold" }, @@ -97,6 +121,21 @@ "description": "Token visibility priority threshold", "name": "minVisibilityPriority", "in": "query" + }, + { + "schema": { + "type": "string", + "enum": [ + "true", + "false" + ], + "default": "true", + "description": "Set to false to omit usd_price from every row. The price-free list only changes when token metadata does, so it is cached for longer; pair it with /tokens/prices to keep prices fresh." + }, + "required": false, + "description": "Set to false to omit usd_price from every row. The price-free list only changes when token metadata does, so it is cached for longer; pair it with /tokens/prices to keep prices fresh.", + "name": "includePrices", + "in": "query" } ], "responses": { @@ -105,99 +144,206 @@ "content": { "application/json": { "schema": { - "type": "array", - "items": { - "type": "object", - "properties": { - "chain_id": { - "type": "string" - }, - "name": { - "type": "string", - "minLength": 1, - "maxLength": 100, - "description": "Name of the token" - }, - "symbol": { - "type": "string", - "minLength": 1, - "maxLength": 32, - "description": "Symbol for the token" - }, - "decimals": { - "type": "integer", - "minimum": 0, - "maximum": 78, - "description": "The number of decimals used for display of token balances" - }, - "address": { - "type": "string", - "description": "The address of the token for the specified chain" - }, - "visibility_priority": { - "type": "integer", - "description": "How much this token should be surfaced relative to other tokens (higher is better)" - }, - "sort_order": { - "type": "integer", - "description": "How much the token should prefer to be the numerator when displayed in prices (higher is more numerator-like)" - }, - "total_supply": { - "type": [ - "integer", - "null" - ], - "minimum": 0, - "description": "The total supply of the token" - }, - "logo_url": { - "type": "string", - "format": "uri" - }, - "usd_price": { - "type": [ - "number", - "null" - ], - "minimum": 0, - "description": "The USD price for one unit of the token" - }, - "bridgeInfos": { - "type": [ - "object", - "null" - ], - "additionalProperties": { - "type": "object", - "properties": { - "bridge_address": { - "type": "string", - "description": "Token address for the destination chain" + "anyOf": [ + { + "type": "array", + "items": { + "type": "object", + "properties": { + "chain_id": { + "type": "string" + }, + "name": { + "type": "string", + "minLength": 1, + "maxLength": 100, + "description": "Name of the token" + }, + "symbol": { + "type": "string", + "minLength": 1, + "maxLength": 32, + "description": "Symbol for the token" + }, + "decimals": { + "type": "integer", + "minimum": 0, + "maximum": 78, + "description": "The number of decimals used for display of token balances" + }, + "address": { + "type": "string", + "description": "The address of the token for the specified chain" + }, + "visibility_priority": { + "type": "integer", + "description": "How much this token should be surfaced relative to other tokens (higher is better)" + }, + "sort_order": { + "type": "integer", + "description": "How much the token should prefer to be the numerator when displayed in prices (higher is more numerator-like)" + }, + "total_supply": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "description": "The total supply of the token" + }, + "logo_url": { + "type": "string", + "format": "uri" + }, + "usd_price": { + "type": [ + "number", + "null" + ], + "minimum": 0, + "description": "The USD price for one unit of the token" + }, + "bridgeInfos": { + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "object", + "properties": { + "bridge_address": { + "type": "string", + "description": "Token address for the destination chain" + } + }, + "required": [ + "bridge_address" + ] } + } + }, + "required": [ + "chain_id", + "name", + "symbol", + "decimals", + "address", + "visibility_priority", + "sort_order", + "total_supply", + "usd_price", + "bridgeInfos" + ] + }, + "description": "Array of tokens" + }, + { + "type": "array", + "items": { + "type": "object", + "properties": { + "chain_id": { + "type": "string" }, - "required": [ - "bridge_address" - ] - } + "name": { + "type": "string", + "minLength": 1, + "maxLength": 100, + "description": "Name of the token" + }, + "symbol": { + "type": "string", + "minLength": 1, + "maxLength": 32, + "description": "Symbol for the token" + }, + "decimals": { + "type": "integer", + "minimum": 0, + "maximum": 78, + "description": "The number of decimals used for display of token balances" + }, + "address": { + "type": "string", + "description": "The address of the token for the specified chain" + }, + "visibility_priority": { + "type": "integer", + "description": "How much this token should be surfaced relative to other tokens (higher is better)" + }, + "sort_order": { + "type": "integer", + "description": "How much the token should prefer to be the numerator when displayed in prices (higher is more numerator-like)" + }, + "total_supply": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "description": "The total supply of the token" + }, + "logo_url": { + "type": "string", + "format": "uri" + }, + "bridgeInfos": { + "type": [ + "object", + "null" + ], + "additionalProperties": { + "type": "object", + "properties": { + "bridge_address": { + "type": "string", + "description": "Token address for the destination chain" + } + }, + "required": [ + "bridge_address" + ] + } + } + }, + "required": [ + "chain_id", + "name", + "symbol", + "decimals", + "address", + "visibility_priority", + "sort_order", + "total_supply", + "bridgeInfos" + ] } - }, - "required": [ - "chain_id", - "name", - "symbol", - "decimals", - "address", - "visibility_priority", - "sort_order", - "total_supply", - "usd_price", - "bridgeInfos" - ] - }, + } + ], "description": "Array of tokens" } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -327,6 +473,110 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + } + } + } + }, + "/tokens/prices": { + "get": { + "tags": [ + "Meta" + ], + "summary": "List token USD prices", + "description": "The usd_price of every priced token on a chain, keyed by address. Poll this instead of the token list when only prices need to stay fresh; tokens without a price are omitted.", + "operationId": "get_ListTokenUsdPrices", + "parameters": [ + { + "schema": { + "type": "integer", + "title": "Chain ID", + "description": "The ID of the network that is being fetched", + "format": "int64", + "minimum": 1, + "maximum": 9223372036854776000 + }, + "required": true, + "description": "The ID of the network that is being fetched", + "name": "chainId", + "in": "query" + }, + { + "schema": { + "type": [ + "integer", + "null" + ], + "minimum": -100, + "maximum": 100, + "default": 0, + "title": "Visibility Priority", + "description": "Token visibility priority threshold" + }, + "required": false, + "description": "Token visibility priority threshold", + "name": "minVisibilityPriority", + "in": "query" + } + ], + "responses": { + "200": { + "description": "USD prices by token address", + "content": { + "application/json": { + "schema": { + "type": "object", + "additionalProperties": { + "type": "number", + "minimum": 0, + "description": "The USD price for one unit of the token" + }, + "description": "USD price by token address, for priced tokens only", + "example": { + "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48": 0.9999 + } + } + } + } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -473,32 +723,32 @@ } } }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { - "description": "Token not found", + "description": "The requested resource was not found", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "description": "HTTP status code for the error" - }, - "error": { - "type": "string", - "description": "Human-readable description of the error" - } - }, - "required": [ - "status", - "error" - ], - "additionalProperties": {}, - "description": "Standard error response payload", - "example": { - "status": 404, - "error": "Token not found" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -565,6 +815,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -637,6 +917,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -672,6 +982,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -823,6 +1153,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -886,7 +1236,10 @@ "type": "string" }, "tick_spacing": { - "type": "integer" + "type": [ + "integer", + "null" + ] }, "core_address": { "type": "string" @@ -1036,6 +1389,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -1140,6 +1513,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -1244,6 +1637,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -1364,6 +1777,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -1498,11 +1931,15 @@ }, "balance": { "type": "string" + }, + "chain_id": { + "type": "string" } }, "required": [ "token", - "balance" + "balance", + "chain_id" ] } }, @@ -1548,6 +1985,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -1710,6 +2167,9 @@ "type": "string" } ] + }, + "chain_id": { + "type": "string" } }, "required": [ @@ -1717,7 +2177,8 @@ "volume", "fees", "ve33_fees", - "date" + "date", + "chain_id" ] } }, @@ -1756,6 +2217,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -1871,7 +2352,10 @@ "type": "string" }, "tick_spacing": { - "type": "integer" + "type": [ + "integer", + "null" + ] }, "core_address": { "type": "string" @@ -2018,6 +2502,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -2153,32 +2657,32 @@ } } }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, "404": { - "description": "Token not found", + "description": "The requested resource was not found", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "description": "HTTP status code for the error" - }, - "error": { - "type": "string", - "description": "Human-readable description of the error" - } - }, - "required": [ - "status", - "error" - ], - "additionalProperties": {}, - "description": "Standard error response payload", - "example": { - "status": 404, - "error": "Token not found" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2267,11 +2771,40 @@ { "schema": { "type": "integer", - "minimum": 60 + "minimum": 60, + "default": 1800 }, "required": false, "name": "interval", "in": "query" + }, + { + "schema": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "description": "Unix timestamp (seconds) of the start of the range; defaults to 60 intervals before end" + }, + "required": false, + "description": "Unix timestamp (seconds) of the start of the range; defaults to 60 intervals before end", + "name": "start", + "in": "query" + }, + { + "schema": { + "type": [ + "integer", + "null" + ], + "minimum": 0, + "description": "Unix timestamp (seconds) of the end of the range; defaults to now" + }, + "required": false, + "description": "Unix timestamp (seconds) of the end of the range; defaults to now", + "name": "end", + "in": "query" } ], "responses": { @@ -2314,10 +2847,16 @@ "type": "number" }, "max": { - "type": "number" + "type": [ + "number", + "null" + ] }, "min": { - "type": "number" + "type": [ + "number", + "null" + ] }, "k_volume": { "type": "string" @@ -2343,6 +2882,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -2444,10 +3003,10 @@ "null" ], "minimum": 0, - "description": "Unix timestamp (seconds) of the first bucket" + "description": "Unix timestamp (seconds) of the first bucket; defaults to 60 intervals before end" }, "required": false, - "description": "Unix timestamp (seconds) of the first bucket", + "description": "Unix timestamp (seconds) of the first bucket; defaults to 60 intervals before end", "name": "start", "in": "query" }, @@ -2458,10 +3017,10 @@ "null" ], "minimum": 0, - "description": "Unix timestamp (seconds) of the last bucket" + "description": "Unix timestamp (seconds) of the last bucket; defaults to now" }, "required": false, - "description": "Unix timestamp (seconds) of the last bucket", + "description": "Unix timestamp (seconds) of the last bucket; defaults to now", "name": "end", "in": "query" } @@ -2557,31 +3116,21 @@ } }, "400": { - "description": "Invalid tokens or range", + "description": "The request parameters are invalid", "content": { "application/json": { "schema": { - "type": "object", - "properties": { - "status": { - "type": "integer", - "description": "HTTP status code for the error" - }, - "error": { - "type": "string", - "description": "Human-readable description of the error" - } - }, - "required": [ - "status", - "error" - ], - "additionalProperties": {}, - "description": "Standard error response payload", - "example": { - "status": 404, - "error": "Token not found" - } + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } @@ -2662,6 +3211,7 @@ "schema": { "type": "integer", "minimum": 1, + "default": 300, "description": "Bucket size in seconds" }, "required": false, @@ -2676,10 +3226,10 @@ "null" ], "minimum": 0, - "description": "Unix timestamp (seconds)" + "description": "Unix timestamp (seconds); defaults to 60 intervals before end" }, "required": false, - "description": "Unix timestamp (seconds)", + "description": "Unix timestamp (seconds); defaults to 60 intervals before end", "name": "start", "in": "query" }, @@ -2690,10 +3240,10 @@ "null" ], "minimum": 0, - "description": "Unix timestamp (seconds)" + "description": "Unix timestamp (seconds); defaults to now" }, "required": false, - "description": "Unix timestamp (seconds)", + "description": "Unix timestamp (seconds); defaults to now", "name": "end", "in": "query" } @@ -2784,6 +3334,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -2872,7 +3452,7 @@ "type": "object", "properties": { "tick": { - "type": "string" + "type": "integer" }, "net_liquidity_delta_diff": { "type": "string" @@ -2891,6 +3471,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -3029,6 +3629,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -3205,6 +3835,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -3481,6 +4141,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -3567,7 +4247,7 @@ "type": "object", "properties": { "tick": { - "type": "string" + "type": "integer" }, "net_liquidity_delta_diff": { "type": "string" @@ -3586,6 +4266,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -3886,6 +4586,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -4142,6 +4862,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -4291,7 +5031,10 @@ "type": "string" }, "tick_spacing": { - "type": "integer" + "type": [ + "integer", + "null" + ] }, "extension": { "type": "string" @@ -4344,6 +5087,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -4664,6 +5427,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -4979,6 +5762,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -5546,6 +6349,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -5845,6 +6668,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -5973,6 +6826,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -6043,19 +6926,49 @@ "pattern": "^\\d+e?\\d*$", "description": "A decimal number" } - ], - "title": "Numeric", - "description": "A number represented in hexadecimal or decimal" - }, - "required": true, - "description": "A number represented in hexadecimal or decimal", - "name": "id", - "in": "path" - } - ], - "responses": { - "200": { - "description": "The order NFT image" + ], + "title": "Numeric", + "description": "A number represented in hexadecimal or decimal" + }, + "required": true, + "description": "A number represented in hexadecimal or decimal", + "name": "id", + "in": "path" + } + ], + "responses": { + "200": { + "description": "The order NFT image" + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -6184,6 +7097,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -6323,13 +7266,13 @@ }, "token0SaleRateDelta": { "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" + "pattern": "^-?\\d+e?\\d*$", + "description": "A signed decimal number" }, "token1SaleRateDelta": { "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" + "pattern": "^-?\\d+e?\\d*$", + "description": "A signed decimal number" } }, "required": [ @@ -6346,6 +7289,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -6439,13 +7412,13 @@ }, "token0SaleRateDelta": { "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" + "pattern": "^-?\\d+e?\\d*$", + "description": "A signed decimal number" }, "token1SaleRateDelta": { "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" + "pattern": "^-?\\d+e?\\d*$", + "description": "A signed decimal number" } }, "required": [ @@ -6462,6 +7435,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -6555,13 +7558,13 @@ }, "token0SaleRateDelta": { "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" + "pattern": "^-?\\d+e?\\d*$", + "description": "A signed decimal number" }, "token1SaleRateDelta": { "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" + "pattern": "^-?\\d+e?\\d*$", + "description": "A signed decimal number" } }, "required": [ @@ -6578,6 +7581,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -6841,6 +7864,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7100,6 +8143,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7346,6 +8409,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7429,6 +8512,36 @@ "responses": { "200": { "description": "The position NFT image" + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7512,6 +8625,36 @@ "responses": { "200": { "description": "The NFT metadata for the given position ID" + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7595,6 +8738,36 @@ "responses": { "200": { "description": "The position NFT image" + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7827,6 +9000,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -7955,6 +9148,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8174,6 +9397,36 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8257,6 +9510,36 @@ "responses": { "200": { "description": "The NFT image" + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "404": { + "description": "The requested resource was not found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8397,6 +9680,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8436,7 +9739,8 @@ "schema": { "type": "integer", "minimum": 1, - "maximum": 1000 + "maximum": 1000, + "default": 100 }, "required": false, "name": "pageSize", @@ -8448,7 +9752,8 @@ "integer", "null" ], - "minimum": 0 + "minimum": 0, + "default": 0 }, "required": false, "name": "start", @@ -8463,11 +9768,6 @@ "schema": { "type": "object", "properties": { - "amountDelegatedTo": { - "type": "string", - "pattern": "^\\d+e?\\d*$", - "description": "A decimal number" - }, "delegates": { "type": "array", "items": { @@ -8526,12 +9826,31 @@ } }, "required": [ - "amountDelegatedTo", "delegates" ] } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8636,6 +9955,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8755,6 +10094,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -8851,34 +10210,11 @@ "type": "string", "pattern": "^\\d+e?\\d*$", "description": "A decimal number" - }, - "votingRecord": { - "type": "object", - "properties": { - "yea": { - "type": "integer", - "minimum": 0 - }, - "nay": { - "type": "integer", - "minimum": 0 - }, - "missed": { - "type": "integer", - "minimum": 0 - } - }, - "required": [ - "yea", - "nay", - "missed" - ] } }, "required": [ "delegate", - "amount", - "votingRecord" + "amount" ] } } @@ -8890,6 +10226,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -9267,6 +10623,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -9423,6 +10799,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -9771,6 +11167,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -9871,7 +11287,10 @@ "format": "date-time" }, "nextDropTime": { - "type": "string", + "type": [ + "string", + "null" + ], "format": "date-time" }, "allowedExtensions": { @@ -10025,6 +11444,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -10161,6 +11600,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } @@ -10341,6 +11800,26 @@ } } } + }, + "400": { + "description": "The request parameters are invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } + }, + "500": { + "description": "An unexpected server error occurred", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" + } + } + } } } } diff --git a/schemas/quoter.json b/schemas/quoter.json index 07e1484..2a0db36 100644 --- a/schemas/quoter.json +++ b/schemas/quoter.json @@ -2,7 +2,7 @@ "openapi": "3.1.0", "info": { "title": "Ekubo Quoter API", - "version": "3.4.4", + "version": "3.4.10", "description": "Returns block-pinned split routes for exact-input and exact-output Ekubo Protocol swaps. Resolve token addresses and decimals through the Ekubo API token list before requesting a quote. All token amounts are base-unit decimal strings.", "contact": { "url": "https://ekubo.org", @@ -242,7 +242,7 @@ "estimated_gas_cost": { "type": "integer", "minimum": 0, - "description": "Routing execution-resource estimate. Transaction preparation should separately estimate the complete transaction." + "description": "Estimated gas to execute the route. On EVM chains this is the Ekubo Yul router's execution gas: router entry, the Core lock, and every split and hop of the route. It excludes the 21,000 intrinsic transaction gas, calldata gas, token payment and withdrawal (settlement), and any approval transaction. On Starknet it estimates the route's pool swaps only. Transaction preparation should separately estimate the complete transaction." }, "price_impact": { "type": [ diff --git a/src/content/docs/reference/contracts/peripheral-ownership.md b/src/content/docs/reference/contracts/peripheral-ownership.md index cc82d06..50524db 100644 --- a/src/content/docs/reference/contracts/peripheral-ownership.md +++ b/src/content/docs/reference/contracts/peripheral-ownership.md @@ -59,7 +59,7 @@ Companion to the [ownership update of 9 October 2026](/products/governance/#peri | Gnosis (100) | AMBOwnerProxy | `0xdaa3293aab3a1da4f63ffdf5d015bb761f84a065` | 2026-10-08 | `0xc04ea38ac53d84e6a1c0d1701e817aae8b6a6746f146985b64acc1cfacf333c7` | | Polygon PoS (137) | FxPortalOwnerProxy | `0x6ed0533539b76d160f7a2c7630c1c85313d78dcc` | 2026-10-08 | `0xb569f85ed1431c3c9a6a3a41f78e71f590f05aa5530360d42e00d0657ebc48d9` | -Source code for all proxies is published and verified on the chains' explorers (Sourcify/Blockscout/Etherscan-family). The `OPStackOwnerProxy` and `ArbitrumOwnerProxy` sources are in the public [`EkuboProtocol/governance`](https://github.com/EkuboProtocol/governance) repository (`l1_proxy/`); the `AMBOwnerProxy` and `FxPortalOwnerProxy` sources are in that repository's [pull request #83](https://github.com/EkuboProtocol/governance/pull/83), pending merge. +Source code for all proxies is published and verified on the chains' explorers (Sourcify/Blockscout/Etherscan-family). The `OPStackOwnerProxy` and `ArbitrumOwnerProxy` sources are in the public [`EkuboProtocol/governance`](https://github.com/EkuboProtocol/governance) repository (`l1_proxy/`); the `AMBOwnerProxy` and `FxPortalOwnerProxy` sources were merged into the same repository on 9 October 2026 ([pull request #83](https://github.com/EkuboProtocol/governance/pull/83)). ## 3. Contracts that remain owned by the Ekubo, Inc. company key (6)