mirror of
https://github.com/luxfi/safe-wallet.git
synced 2026-10-30 15:19:21 +00:00
14294 lines
376 KiB
JSON
14294 lines
376 KiB
JSON
{
|
|
"openapi": "3.0.0",
|
|
"paths": {
|
|
"/about": {
|
|
"get": {
|
|
"description": "Retrieves basic information about the Safe Client Gateway application including version and build details.",
|
|
"operationId": "aboutGetAbout",
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Application information retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/About"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get application information",
|
|
"tags": [
|
|
"about"
|
|
]
|
|
}
|
|
},
|
|
"/v1/auth/me": {
|
|
"get": {
|
|
"description": "Returns the authenticated user session if a valid session cookie is present, 403 otherwise. The response includes the user ID, the authentication method used, and (for SIWE users) the wallet signer address.",
|
|
"operationId": "authGetMeV1",
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Authenticated user session",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UserSession"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Not authenticated"
|
|
}
|
|
},
|
|
"summary": "Get authenticated user",
|
|
"tags": [
|
|
"auth"
|
|
]
|
|
}
|
|
},
|
|
"/v1/auth/nonce": {
|
|
"get": {
|
|
"description": "Generates and returns a unique nonce that must be signed by the client for authentication. The nonce is used in the Sign-In with Ethereum (SiWE) message.",
|
|
"operationId": "authGetNonceV1",
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Unique nonce generated for authentication",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AuthNonce"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get authentication nonce",
|
|
"tags": [
|
|
"auth"
|
|
]
|
|
}
|
|
},
|
|
"/v1/auth/verify": {
|
|
"post": {
|
|
"description": "Verifies a signed Sign-In with Ethereum (SiWE) message and nonce. On successful verification, sets an HTTP-only JWT cookie for subsequent authenticated requests.",
|
|
"operationId": "authVerifyV1",
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Sign-In with Ethereum message and signature for verification",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SiweDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Authentication successful. JWT token set as HTTP-only cookie named \"access_token\"."
|
|
},
|
|
"400": {
|
|
"description": "Invalid SiWE message format or signature verification failed"
|
|
},
|
|
"401": {
|
|
"description": "Authentication failed - invalid or expired nonce"
|
|
}
|
|
},
|
|
"summary": "Verify authentication",
|
|
"tags": [
|
|
"auth"
|
|
]
|
|
}
|
|
},
|
|
"/v1/auth/logout": {
|
|
"post": {
|
|
"description": "Logs out the authenticated user by clearing the JWT authentication cookie. This invalidates the current session.",
|
|
"operationId": "authLogoutV1",
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Logout successful. Authentication cookie cleared and set to expire."
|
|
}
|
|
},
|
|
"summary": "Logout user",
|
|
"tags": [
|
|
"auth"
|
|
]
|
|
}
|
|
},
|
|
"/v1/auth/logout/redirect": {
|
|
"post": {
|
|
"description": "Clears the authentication cookie and redirects the browser. For OIDC users, redirects through identity platform to clear their session cookie. For SiWe users, redirects directly to the app.",
|
|
"operationId": "authLogoutWithRedirectV1",
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": false,
|
|
"content": {
|
|
"application/x-www-form-urlencoded": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LogoutDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"303": {
|
|
"description": "Redirects to identity platform logout (OIDC) or directly to the app."
|
|
},
|
|
"400": {
|
|
"description": "Invalid redirect URL"
|
|
}
|
|
},
|
|
"summary": "Logout (with redirect)",
|
|
"tags": [
|
|
"auth"
|
|
]
|
|
}
|
|
},
|
|
"/v1/auth/oidc/authorize": {
|
|
"get": {
|
|
"description": "Redirects the browser to OIDC provider login page with a generated state value stored in an HTTP-only cookie.",
|
|
"operationId": "oidcAuthAuthorizeV1",
|
|
"parameters": [
|
|
{
|
|
"name": "redirect_url",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "URL to redirect to after successful login. Must be same-origin as the configured post-login redirect URI.",
|
|
"schema": {
|
|
"example": "/settings",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "connection",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "OIDC connection name to route to a specific identity provider.",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"302": {
|
|
"description": "Redirect to OIDC authorize endpoint"
|
|
}
|
|
},
|
|
"summary": "Start OIDC authorization code flow",
|
|
"tags": [
|
|
"auth"
|
|
]
|
|
}
|
|
},
|
|
"/v1/auth/oidc/callback": {
|
|
"get": {
|
|
"description": "Exchanges the OIDC authorization code for user information, mints the internal JWT cookie, and redirects to the provided post-login URL or a configured default one.",
|
|
"operationId": "oidcAuthCallbackV1",
|
|
"parameters": [
|
|
{
|
|
"name": "code",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Authorization code returned by the OIDC provider",
|
|
"schema": {
|
|
"example": "SplxlOBeZQQYbYS6WxSbIA",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "state",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "State parameter returned by the OIDC provider",
|
|
"schema": {
|
|
"example": "af0ifjsldkj",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "error",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Error parameter returned by the OIDC provider",
|
|
"schema": {
|
|
"example": "access_denied",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "error_description",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Description of the error returned by the OIDC provider (if failed)",
|
|
"schema": {
|
|
"example": "The user has denied the request",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"302": {
|
|
"description": "Redirect to the post-login URL. On error, includes error query parameter."
|
|
}
|
|
},
|
|
"summary": "Handle OIDC authorization callback",
|
|
"tags": [
|
|
"auth"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/balances/{fiatCode}": {
|
|
"get": {
|
|
"description": "Retrieves token balances for a Safe on a specific chain, converted to the specified fiat currency. Includes native tokens, ERC-20 tokens, and their current market values.",
|
|
"operationId": "balancesGetBalancesV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "fiatCode",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Fiat currency code for balance conversion (e.g., USD, EUR)",
|
|
"schema": {
|
|
"example": "USD",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "trusted",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "If true, only returns balances for trusted tokens",
|
|
"schema": {
|
|
"example": false,
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "exclude_spam",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "If true, excludes spam tokens from results",
|
|
"schema": {
|
|
"example": true,
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Safe balances retrieved successfully with fiat conversions",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Balances"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get Safe balances",
|
|
"tags": [
|
|
"balances"
|
|
]
|
|
}
|
|
},
|
|
"/v1/balances/supported-fiat-codes": {
|
|
"get": {
|
|
"description": "Retrieves a list of all supported fiat currency codes that can be used for balance conversions.",
|
|
"operationId": "balancesGetSupportedFiatCodesV1",
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "List of supported fiat currency codes (e.g., [\"USD\", \"EUR\", \"GBP\"])",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get supported fiat currencies",
|
|
"tags": [
|
|
"balances"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/positions/{fiatCode}": {
|
|
"get": {
|
|
"operationId": "positionsGetPositionsV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "fiatCode",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "refresh",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Cache busting parameter. Set to true to invalidate cache and fetch fresh data from Zerion",
|
|
"schema": {
|
|
"example": true,
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "sync",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "If true, waits for position data to be aggregated before responding (up to 30s)",
|
|
"schema": {
|
|
"example": false,
|
|
"type": "boolean"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Protocol"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"positions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/portfolio/{address}": {
|
|
"get": {
|
|
"description": "Retrieves the complete portfolio for an address including token balances and app positions across all supported chains.",
|
|
"operationId": "portfolioGetPortfolioV1",
|
|
"parameters": [
|
|
{
|
|
"name": "address",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Wallet address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "sync",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "If true, waits for position data to be aggregated before responding (up to 30s)",
|
|
"schema": {
|
|
"example": false,
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "excludeDust",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "If true, filters out dust positions (balance < $0.001 USD)",
|
|
"schema": {
|
|
"example": true,
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "trusted",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "If true, only returns trusted tokens",
|
|
"schema": {
|
|
"example": true,
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "chainIds",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Comma-separated list of chain IDs to filter by. If omitted, returns data for all chains.",
|
|
"schema": {
|
|
"example": "1,137,42161",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "fiatCode",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Fiat currency code for balance conversion (e.g., USD, EUR)",
|
|
"schema": {
|
|
"example": "USD",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Portfolio"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get portfolio",
|
|
"tags": [
|
|
"portfolio"
|
|
]
|
|
},
|
|
"delete": {
|
|
"description": "Clears the cached portfolio data for a specific address",
|
|
"operationId": "portfolioClearPortfolioV1",
|
|
"parameters": [
|
|
{
|
|
"name": "address",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Wallet address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": ""
|
|
}
|
|
},
|
|
"summary": "Clear portfolio cache",
|
|
"tags": [
|
|
"portfolio"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains": {
|
|
"get": {
|
|
"description": "Retrieves a paginated list of all blockchain networks supported by the Safe infrastructure, including their configuration and capabilities.",
|
|
"operationId": "chainsGetChainsV1",
|
|
"parameters": [
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Pagination cursor for retrieving the next set of results",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Paginated list of supported chains",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ChainPage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get supported chains",
|
|
"tags": [
|
|
"chains"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}": {
|
|
"get": {
|
|
"description": "Retrieves detailed information about a specific blockchain network, including its configuration, features, and Safe-specific settings.",
|
|
"operationId": "chainsGetChainV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID of the blockchain network",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Chain details retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Chain"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get chain details",
|
|
"tags": [
|
|
"chains"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/about": {
|
|
"get": {
|
|
"description": "Retrieves general information about a blockchain network, including network details and statistics.",
|
|
"operationId": "chainsGetAboutChainV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID of the blockchain network",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Chain information retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AboutChain"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get chain information",
|
|
"tags": [
|
|
"chains"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/about/backbone": {
|
|
"get": {
|
|
"description": "Retrieves backbone infrastructure information for a specific chain, including API endpoints and service configurations.",
|
|
"operationId": "chainsGetBackboneV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID of the blockchain network",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Chain backbone information retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Backbone"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get chain backbone information",
|
|
"tags": [
|
|
"chains"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/about/master-copies": {
|
|
"get": {
|
|
"description": "Retrieves information about Safe master copy contracts deployed on the specified chain, including their addresses and versions.",
|
|
"operationId": "chainsGetMasterCopiesV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID of the blockchain network",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "List of Safe master copy contracts",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/MasterCopy"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get Safe master copy contracts",
|
|
"tags": [
|
|
"chains"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/about/indexing": {
|
|
"get": {
|
|
"description": "Retrieves the current indexing status for a blockchain network, including the latest indexed block and synchronization state.",
|
|
"operationId": "chainsGetIndexingStatusV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID of the blockchain network",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Chain indexing status retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/IndexingStatus"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get chain indexing status",
|
|
"tags": [
|
|
"chains"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/gas-price": {
|
|
"get": {
|
|
"operationId": "chainsGetGasPriceV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GasPriceResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get gas price from oracle",
|
|
"tags": [
|
|
"chains"
|
|
]
|
|
}
|
|
},
|
|
"/v2/chains": {
|
|
"get": {
|
|
"description": "Retrieves a paginated list of all blockchain networks supported by the Safe infrastructure, with features scoped to the service key.",
|
|
"operationId": "chainsGetChainsV2",
|
|
"parameters": [
|
|
{
|
|
"name": "serviceKey",
|
|
"required": true,
|
|
"in": "query",
|
|
"description": "Service key for scoping chain features (e.g., WALLET_WEB, MOBILE)",
|
|
"schema": {
|
|
"example": "WALLET_WEB",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Pagination cursor for retrieving the next set of results",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Paginated list of supported chains with service-scoped features",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ChainPage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get supported chains (v2)",
|
|
"tags": [
|
|
"chains"
|
|
]
|
|
}
|
|
},
|
|
"/v2/chains/{chainId}": {
|
|
"get": {
|
|
"description": "Retrieves detailed information about a specific blockchain network, with features scoped to the service key.",
|
|
"operationId": "chainsGetChainV2",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID of the blockchain network",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "serviceKey",
|
|
"required": true,
|
|
"in": "query",
|
|
"description": "Service key for scoping chain features (e.g., WALLET_WEB, MOBILE)",
|
|
"schema": {
|
|
"example": "WALLET_WEB",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Chain details with service-scoped features",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Chain"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get chain details (v2)",
|
|
"tags": [
|
|
"chains"
|
|
]
|
|
}
|
|
},
|
|
"/v2/chains/{chainId}/safes/{safeAddress}/collectibles": {
|
|
"get": {
|
|
"operationId": "collectiblesGetCollectiblesV2",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "trusted",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "exclude_spam",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CollectiblePage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"collectibles"
|
|
]
|
|
}
|
|
},
|
|
"/v1/community/campaigns": {
|
|
"get": {
|
|
"operationId": "communityGetCampaignsV1",
|
|
"parameters": [
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CampaignPage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"community"
|
|
]
|
|
}
|
|
},
|
|
"/v1/community/campaigns/{resourceId}": {
|
|
"get": {
|
|
"operationId": "communityGetCampaignByIdV1",
|
|
"parameters": [
|
|
{
|
|
"name": "resourceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Campaign"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"community"
|
|
]
|
|
}
|
|
},
|
|
"/v1/community/campaigns/{resourceId}/activities": {
|
|
"get": {
|
|
"operationId": "communityGetCampaignActivitiesV1",
|
|
"parameters": [
|
|
{
|
|
"name": "resourceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "holder",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": ""
|
|
}
|
|
},
|
|
"tags": [
|
|
"community"
|
|
]
|
|
}
|
|
},
|
|
"/v1/community/campaigns/{resourceId}/leaderboard": {
|
|
"get": {
|
|
"operationId": "communityGetCampaignLeaderboardV1",
|
|
"parameters": [
|
|
{
|
|
"name": "resourceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CampaignRankPage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"community"
|
|
]
|
|
}
|
|
},
|
|
"/v1/community/campaigns/{resourceId}/leaderboard/{safeAddress}": {
|
|
"get": {
|
|
"operationId": "communityGetCampaignRankV1",
|
|
"parameters": [
|
|
{
|
|
"name": "resourceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CampaignRank"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"community"
|
|
]
|
|
}
|
|
},
|
|
"/v1/community/eligibility": {
|
|
"post": {
|
|
"operationId": "communityCheckEligibilityV1",
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/EligibilityRequest"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Eligibility"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"community"
|
|
]
|
|
}
|
|
},
|
|
"/v1/community/locking/leaderboard": {
|
|
"get": {
|
|
"operationId": "communityGetLeaderboardV1",
|
|
"parameters": [
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LockingRankPage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"community"
|
|
]
|
|
}
|
|
},
|
|
"/v1/community/locking/{safeAddress}/rank": {
|
|
"get": {
|
|
"operationId": "communityGetLockingRankV1",
|
|
"parameters": [
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LockingRank"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"community"
|
|
]
|
|
}
|
|
},
|
|
"/v1/community/locking/{safeAddress}/history": {
|
|
"get": {
|
|
"operationId": "communityGetLockingHistoryV1",
|
|
"parameters": [
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/LockingEventPage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"community"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/contracts/{contractAddress}": {
|
|
"get": {
|
|
"description": "Retrieves detailed information about a smart contract deployed on the specified chain, including ABI, source code verification status, and contract metadata.",
|
|
"operationId": "contractsGetContractV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the contract is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "contractAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Contract information retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Contract"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get contract information",
|
|
"tags": [
|
|
"contracts"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/data-decoder": {
|
|
"post": {
|
|
"description": "Decodes raw transaction data into human-readable format using contract ABIs. This helps understand what functions are being called and with what parameters.",
|
|
"operationId": "dataDecodedGetDataDecodedV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the transaction will be executed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Transaction data to decode, including contract address and data payload",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TransactionDataDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Transaction data decoded successfully with method name, parameters, and values",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DataDecoded"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Decode transaction data",
|
|
"tags": [
|
|
"data-decoded"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/recovery": {
|
|
"post": {
|
|
"operationId": "recoveryAddRecoveryModuleV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AddRecoveryModuleDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": ""
|
|
}
|
|
},
|
|
"tags": [
|
|
"recovery"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/recovery/{moduleAddress}": {
|
|
"delete": {
|
|
"operationId": "recoveryDeleteRecoveryModuleV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "moduleAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": ""
|
|
}
|
|
},
|
|
"tags": [
|
|
"recovery"
|
|
]
|
|
}
|
|
},
|
|
"/v2/chains/{chainId}/safes/{address}/multisig-transactions/estimations": {
|
|
"post": {
|
|
"description": "Estimates the gas cost for executing a multisig transaction on a Safe. Provides both the recommended gas limit and the current gas price for accurate cost calculation.",
|
|
"operationId": "estimationsGetEstimationV2",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "address",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Transaction details for gas estimation including recipient, value, and data",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GetEstimationDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Gas estimation calculated successfully with recommended values",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/EstimationResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid transaction parameters or estimation failed"
|
|
}
|
|
},
|
|
"summary": "Estimate multisig transaction gas",
|
|
"tags": [
|
|
"estimations"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/fees/{safeAddress}/preview": {
|
|
"post": {
|
|
"description": "Calculates the estimated fees for executing a transaction via Pay with Safe, including gas costs, relay fees, and total costs in USD.",
|
|
"operationId": "feesGetFeePreviewV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Transaction data for fee calculation including recipient, value, data, operation type, gas token, and number of signatures",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/FeePreviewTransactionDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Fee preview with transaction data, relay cost, and pricing context",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/FeePreviewResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid transaction data or Pay with Safe not available for this chain"
|
|
}
|
|
},
|
|
"summary": "Get transaction fee preview",
|
|
"tags": [
|
|
"fees"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/messages/{messageHash}": {
|
|
"get": {
|
|
"description": "Retrieves a specific message by its hash, including signatures, confirmations, and message content.",
|
|
"operationId": "messagesGetMessageByHashV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the message was created",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "messageHash",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Message hash (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Message retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Message"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Message not found"
|
|
}
|
|
},
|
|
"summary": "Get message by hash",
|
|
"tags": [
|
|
"messages"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/messages": {
|
|
"get": {
|
|
"description": "Retrieves a paginated list of messages for a specific Safe, including both pending and confirmed messages with date labels.",
|
|
"operationId": "messagesGetMessagesBySafeV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Pagination cursor for retrieving the next set of results",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Paginated list of messages for the Safe",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MessagePage"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Safe not found on the specified chain"
|
|
}
|
|
},
|
|
"summary": "Get messages for Safe",
|
|
"tags": [
|
|
"messages"
|
|
]
|
|
},
|
|
"post": {
|
|
"description": "Creates a new message for a Safe. The message must be properly formatted and signed according to EIP-191 or EIP-712 standards.",
|
|
"operationId": "messagesCreateMessageV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Message data including content and signature",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateMessageDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Message created successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid message format or signature"
|
|
}
|
|
},
|
|
"summary": "Create message",
|
|
"tags": [
|
|
"messages"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/messages/{messageHash}/signatures": {
|
|
"post": {
|
|
"description": "Adds a signature to an existing message. Multiple Safe owners can sign the same message to reach consensus.",
|
|
"operationId": "messagesUpdateMessageSignatureV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the message was created",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "messageHash",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Message hash (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Signature data to add to the message",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateMessageSignatureDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Signature added successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid signature or signer not authorized"
|
|
},
|
|
"404": {
|
|
"description": "Message not found"
|
|
}
|
|
},
|
|
"summary": "Add message signature",
|
|
"tags": [
|
|
"messages"
|
|
]
|
|
}
|
|
},
|
|
"/v1/users": {
|
|
"get": {
|
|
"description": "Retrieves the authenticated user information along with all associated wallet addresses.",
|
|
"operationId": "usersGetWithWalletsV1",
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "User information with associated wallets retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UserWithWallets"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required - valid JWT token must be provided"
|
|
},
|
|
"404": {
|
|
"description": "User not found - the authenticated wallet is not associated with any user"
|
|
}
|
|
},
|
|
"summary": "Get user with wallets",
|
|
"tags": [
|
|
"users"
|
|
]
|
|
},
|
|
"delete": {
|
|
"description": "Deletes the authenticated user and all associated data including wallets and account information.",
|
|
"operationId": "usersDeleteV1",
|
|
"parameters": [],
|
|
"responses": {
|
|
"204": {
|
|
"description": "User deleted successfully"
|
|
},
|
|
"401": {
|
|
"description": "Authentication required - valid JWT token must be provided"
|
|
},
|
|
"404": {
|
|
"description": "User not found - the authenticated wallet is not associated with any user"
|
|
}
|
|
},
|
|
"summary": "Delete user",
|
|
"tags": [
|
|
"users"
|
|
]
|
|
}
|
|
},
|
|
"/v1/users/wallet": {
|
|
"post": {
|
|
"description": "Creates a new user account associated with the authenticated wallet address.",
|
|
"operationId": "usersCreateWithWalletV1",
|
|
"parameters": [],
|
|
"responses": {
|
|
"201": {
|
|
"description": "User created successfully with wallet association",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreatedUserWithWallet"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required - valid JWT token must be provided"
|
|
},
|
|
"409": {
|
|
"description": "Wallet already exists - this wallet is already associated with a user"
|
|
}
|
|
},
|
|
"summary": "Create user with wallet",
|
|
"tags": [
|
|
"users"
|
|
]
|
|
}
|
|
},
|
|
"/v1/users/wallet/add": {
|
|
"post": {
|
|
"description": "Associates an additional wallet address with the authenticated user account using Sign-In with Ethereum (SiWE) verification.",
|
|
"operationId": "usersAddWalletToUserV1",
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Sign-In with Ethereum message and signature for the wallet to add",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SiweDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Wallet added to user successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/WalletAddedToUser"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required or invalid SiWE message/signature"
|
|
},
|
|
"404": {
|
|
"description": "User not found - the authenticated wallet is not associated with any user"
|
|
},
|
|
"409": {
|
|
"description": "Wallet already exists - this wallet is already associated with a user"
|
|
}
|
|
},
|
|
"summary": "Add wallet to user",
|
|
"tags": [
|
|
"users"
|
|
]
|
|
}
|
|
},
|
|
"/v1/users/wallet/{walletAddress}": {
|
|
"delete": {
|
|
"description": "Removes a wallet address from the authenticated user account. Cannot remove the currently authenticated wallet.",
|
|
"operationId": "usersDeleteWalletFromUserV1",
|
|
"parameters": [
|
|
{
|
|
"name": "walletAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Wallet address to remove (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Wallet removed from user successfully"
|
|
},
|
|
"401": {
|
|
"description": "Authentication required - valid JWT token must be provided"
|
|
},
|
|
"404": {
|
|
"description": "User or specified wallet not found"
|
|
},
|
|
"409": {
|
|
"description": "Cannot remove the current wallet - use a different wallet to authenticate"
|
|
}
|
|
},
|
|
"summary": "Remove wallet from user",
|
|
"tags": [
|
|
"users"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/address-book": {
|
|
"get": {
|
|
"description": "Retrieves all address book entries for a specific space. Address books help organize and label frequently used addresses.",
|
|
"operationId": "addressBooksGetAddressBookItemsV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to get address book for",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Address book items retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SpaceAddressBookDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required - valid JWT token must be provided"
|
|
},
|
|
"403": {
|
|
"description": "Access forbidden - user is not a member of this space"
|
|
},
|
|
"404": {
|
|
"description": "User, member, or space not found"
|
|
}
|
|
},
|
|
"summary": "Get space address book",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
},
|
|
"put": {
|
|
"description": "Creates or updates address book entries for a space. This allows adding labels and organizing frequently used addresses.",
|
|
"operationId": "addressBooksUpsertAddressBookItemsV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to update address book for",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Address book items to create or update, including addresses and their labels",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpsertAddressBookItemsDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Address book updated successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SpaceAddressBookDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Address book items limit exceeded or invalid data provided"
|
|
},
|
|
"401": {
|
|
"description": "Authentication required - valid JWT token must be provided"
|
|
},
|
|
"403": {
|
|
"description": "Access forbidden - user is not authorized to modify this address book"
|
|
},
|
|
"404": {
|
|
"description": "User, member, or space not found"
|
|
}
|
|
},
|
|
"summary": "Update space address book",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/address-book/{address}": {
|
|
"delete": {
|
|
"description": "Removes a specific address from the space address book by its address.",
|
|
"operationId": "addressBooksDeleteByAddressV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID containing the address book",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "address",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Address to remove from the address book (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Address book entry deleted successfully"
|
|
},
|
|
"403": {
|
|
"description": "Access forbidden - user is not authorized to modify this address book"
|
|
},
|
|
"404": {
|
|
"description": "User, member, space, or address book entry not found"
|
|
}
|
|
},
|
|
"summary": "Delete address book entry",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/address-book/private": {
|
|
"get": {
|
|
"description": "Retrieves the authenticated user's private address book entries for a specific space.",
|
|
"operationId": "userAddressBookGetPrivateItemsV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Private address book items retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UserAddressBookDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"403": {
|
|
"description": "User is not a member of this space"
|
|
}
|
|
},
|
|
"summary": "Get private address book",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
},
|
|
"put": {
|
|
"description": "Creates or updates the authenticated user's private address book entries for a space.",
|
|
"operationId": "userAddressBookUpsertPrivateItemsV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Address book items to create or update",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpsertAddressBookItemsDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Private address book updated successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UserAddressBookDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"403": {
|
|
"description": "User is not a member of this space or wallet authentication required"
|
|
}
|
|
},
|
|
"summary": "Upsert private address book entries",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/address-book/private/{address}": {
|
|
"delete": {
|
|
"description": "Removes a specific address from the user's private address book.",
|
|
"operationId": "userAddressBookDeletePrivateItemV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "address",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Address to remove (0x prefixed)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Private address book entry deleted successfully"
|
|
},
|
|
"403": {
|
|
"description": "User is not a member or wallet authentication required"
|
|
},
|
|
"404": {
|
|
"description": "Entry not found"
|
|
}
|
|
},
|
|
"summary": "Delete a private address book entry",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/address-book/requests": {
|
|
"get": {
|
|
"description": "Retrieves pending requests to add contacts to the space address book. Admins see all pending requests, members see only their own.",
|
|
"operationId": "addressBookRequestsGetPendingRequestsV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Pending requests retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AddressBookRequestsDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"403": {
|
|
"description": "User is not a member of this space"
|
|
}
|
|
},
|
|
"summary": "Get pending address book requests",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
},
|
|
"post": {
|
|
"description": "Creates a request to add a private contact to the shared space address book. Requires the contact to exist in the private address book first.",
|
|
"operationId": "addressBookRequestsCreateRequestV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Address of the private contact to request adding",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateAddressBookRequestDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Request created successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AddressBookRequestItemDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "User is not a member or wallet authentication required"
|
|
},
|
|
"404": {
|
|
"description": "Private contact not found"
|
|
}
|
|
},
|
|
"summary": "Request to add a private contact to the space address book",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/address-book/requests/{requestId}/approve": {
|
|
"put": {
|
|
"description": "Admin approves a pending request. The contact is added to the shared space address book.",
|
|
"operationId": "addressBookRequestsApproveRequestV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "requestId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Request ID to approve",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Request approved successfully"
|
|
},
|
|
"400": {
|
|
"description": "Only pending requests can be approved"
|
|
},
|
|
"403": {
|
|
"description": "User is not an admin or wallet authentication required"
|
|
},
|
|
"404": {
|
|
"description": "Request not found"
|
|
}
|
|
},
|
|
"summary": "Approve a pending address book request",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/address-book/requests/{requestId}/reject": {
|
|
"put": {
|
|
"description": "Admin rejects a pending request. The contact stays in the private address book.",
|
|
"operationId": "addressBookRequestsRejectRequestV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "requestId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Request ID to reject",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Request rejected successfully"
|
|
},
|
|
"400": {
|
|
"description": "Only pending requests can be rejected"
|
|
},
|
|
"403": {
|
|
"description": "User is not an admin or wallet authentication required"
|
|
},
|
|
"404": {
|
|
"description": "Request not found"
|
|
}
|
|
},
|
|
"summary": "Reject a pending address book request",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces": {
|
|
"post": {
|
|
"description": "Creates a new space for the authenticated user. A space is a collaborative workspace where users can manage multiple Safes together.",
|
|
"operationId": "spacesCreateV1",
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Space creation data including the name of the space",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateSpaceDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Space created successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateSpaceResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required - valid JWT token must be provided"
|
|
},
|
|
"403": {
|
|
"description": "Forbidden resource - user lacks permission to create spaces"
|
|
}
|
|
},
|
|
"summary": "Create space",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
},
|
|
"get": {
|
|
"description": "Retrieves all spaces that the authenticated user is a member of or has been invited to, including the count of Safes in each space.",
|
|
"operationId": "spacesGetV1",
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "User spaces retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/GetSpaceResponse"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required - valid JWT token must be provided"
|
|
},
|
|
"403": {
|
|
"description": "Forbidden resource - user lacks permission to view spaces"
|
|
}
|
|
},
|
|
"summary": "Get user spaces",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/create-with-user": {
|
|
"post": {
|
|
"deprecated": true,
|
|
"description": "Creates a new space for the authenticated user. This endpoint is deprecated, please use POST /v1/spaces instead.",
|
|
"operationId": "spacesCreateWithUserV1",
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Space creation data including the name of the space",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateSpaceDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Space created successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateSpaceResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required - valid JWT token must be provided"
|
|
},
|
|
"403": {
|
|
"description": "Forbidden resource - user lacks permission to create spaces"
|
|
}
|
|
},
|
|
"summary": "Create space with user (deprecated)",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{id}": {
|
|
"get": {
|
|
"description": "Retrieves detailed information about a specific space. The user must be a member of or invited to the space.",
|
|
"operationId": "spacesGetOneV1",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Space information retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GetSpaceResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required - valid JWT token must be provided"
|
|
},
|
|
"403": {
|
|
"description": "Forbidden resource - user is not a member of this space"
|
|
},
|
|
"404": {
|
|
"description": "Space not found"
|
|
}
|
|
},
|
|
"summary": "Get space by ID",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
},
|
|
"patch": {
|
|
"description": "Updates space information such as name. Only space admins can update space details.",
|
|
"operationId": "spacesUpdateV1",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to update",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Space update data including new name or other properties",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateSpaceDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Space updated successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateSpaceResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required or user unauthorized to update this space"
|
|
},
|
|
"403": {
|
|
"description": "Forbidden resource - user is not an admin of this space"
|
|
},
|
|
"404": {
|
|
"description": "Space not found"
|
|
}
|
|
},
|
|
"summary": "Update space",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
},
|
|
"delete": {
|
|
"description": "Deletes a space and all its associated data. Only space admins can delete spaces.",
|
|
"operationId": "spacesDeleteV1",
|
|
"parameters": [
|
|
{
|
|
"name": "id",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to delete",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Space deleted successfully"
|
|
},
|
|
"401": {
|
|
"description": "Authentication required or user unauthorized to delete this space"
|
|
},
|
|
"403": {
|
|
"description": "Forbidden resource - user is not an admin of this space"
|
|
},
|
|
"404": {
|
|
"description": "Space not found"
|
|
}
|
|
},
|
|
"summary": "Delete space",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/safes": {
|
|
"post": {
|
|
"description": "Adds one or more Safe addresses to a space. This allows the space members to collectively manage these Safes.",
|
|
"operationId": "spaceSafesCreateV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to add Safes to",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "List of Safe addresses and their chain information to add to the space",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateSpaceSafesDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Safes added to space successfully"
|
|
},
|
|
"401": {
|
|
"description": "Authentication required or user unauthorized to modify this space"
|
|
},
|
|
"403": {
|
|
"description": "Access forbidden - user lacks permission to add Safes to this space"
|
|
},
|
|
"404": {
|
|
"description": "User or space not found"
|
|
}
|
|
},
|
|
"summary": "Add Safes to space",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
},
|
|
"get": {
|
|
"description": "Retrieves all Safes associated with a specific space, including their chain information and metadata.",
|
|
"operationId": "spaceSafesGetV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to get Safes for",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Space Safes retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GetSpaceSafeResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required or user unauthorized to access this space"
|
|
},
|
|
"403": {
|
|
"description": "Access forbidden - user is not a member of this space"
|
|
},
|
|
"404": {
|
|
"description": "User or space not found"
|
|
}
|
|
},
|
|
"summary": "Get space Safes",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
},
|
|
"delete": {
|
|
"description": "Removes one or more Safe addresses from a space. This stops the space from managing these Safes.",
|
|
"operationId": "spaceSafesDeleteV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to remove Safes from",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "List of Safe addresses and their chain information to remove from the space",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DeleteSpaceSafesDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"204": {
|
|
"description": "Safes removed from space successfully"
|
|
},
|
|
"401": {
|
|
"description": "Authentication required or user unauthorized to modify this space"
|
|
},
|
|
"403": {
|
|
"description": "Access forbidden - user lacks permission to remove Safes from this space"
|
|
},
|
|
"404": {
|
|
"description": "Space has no Safes, user not found, or specified Safes not found in space"
|
|
}
|
|
},
|
|
"summary": "Remove Safes from space",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/members/invite": {
|
|
"post": {
|
|
"description": "Invites one or more users to join a space. Only space admins can send invitations.",
|
|
"operationId": "membersInviteUserV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to invite users to",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "List of wallet addresses to invite to the space",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/InviteUsersDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Users invited successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Invitation"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required or user not admin or member not active"
|
|
},
|
|
"403": {
|
|
"description": "User not authorized - must be a space admin to invite users"
|
|
},
|
|
"409": {
|
|
"description": "Too many invites or some users already invited"
|
|
}
|
|
},
|
|
"summary": "Invite users to space",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/members/accept": {
|
|
"post": {
|
|
"description": "Accepts an invitation to join a space. The user must have a pending invitation to the space.",
|
|
"operationId": "membersAcceptInviteV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to accept invitation for",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Invitation acceptance data including any required confirmation",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AcceptInviteDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Invitation accepted successfully - user is now a member of the space"
|
|
},
|
|
"403": {
|
|
"description": "Access forbidden - user is not authorized to accept this invitation"
|
|
},
|
|
"404": {
|
|
"description": "User, space, or membership invitation not found"
|
|
},
|
|
"409": {
|
|
"description": "User invitation is not in pending state or already processed"
|
|
}
|
|
},
|
|
"summary": "Accept space invitation",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/members/decline": {
|
|
"post": {
|
|
"description": "Declines an invitation to join a space. The user must have a pending invitation to the space.",
|
|
"operationId": "membersDeclineInviteV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to decline invitation for",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Invitation declined successfully"
|
|
},
|
|
"403": {
|
|
"description": "Access forbidden - user is not authorized to decline this invitation"
|
|
},
|
|
"404": {
|
|
"description": "User, space, or membership invitation not found"
|
|
},
|
|
"409": {
|
|
"description": "User invitation is not in pending state or already processed"
|
|
}
|
|
},
|
|
"summary": "Decline space invitation",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/members": {
|
|
"get": {
|
|
"description": "Retrieves all members of a space including their roles, status, and membership information.",
|
|
"operationId": "membersGetUsersV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to get members for",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Space members retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MembersDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"403": {
|
|
"description": "Access forbidden - user is not authorized to view this space's members"
|
|
},
|
|
"404": {
|
|
"description": "User or space not found"
|
|
}
|
|
},
|
|
"summary": "Get space members",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
},
|
|
"delete": {
|
|
"description": "Remove own membership from a space.",
|
|
"operationId": "membersSelfRemoveV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Membership deleted"
|
|
},
|
|
"401": {
|
|
"description": "Not authenticated"
|
|
},
|
|
"403": {
|
|
"description": "User not authorized"
|
|
},
|
|
"404": {
|
|
"description": "Space not found"
|
|
},
|
|
"409": {
|
|
"description": "Cannot remove last admin"
|
|
}
|
|
},
|
|
"summary": "Leave a space",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/membership": {
|
|
"get": {
|
|
"description": "Returns the membership record of the authenticated user for the given space. Returns 403 if the caller has no ACTIVE or INVITED membership in the space.",
|
|
"operationId": "membersGetMembershipV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to fetch the caller's membership for",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Membership retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MemberDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Not authenticated"
|
|
},
|
|
"403": {
|
|
"description": "Access forbidden - user not authenticated, or has no ACTIVE/INVITED membership in this space"
|
|
}
|
|
},
|
|
"summary": "Get the authenticated user's membership in a space",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/members/{userId}/role": {
|
|
"patch": {
|
|
"description": "Updates the role of a space member. Only space admins can change member roles. Cannot remove the last admin from a space.",
|
|
"operationId": "membersUpdateRoleV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID containing the member",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "userId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "User ID of the member to update",
|
|
"schema": {
|
|
"example": 123,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "New role information for the member",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateRoleDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Member role updated successfully"
|
|
},
|
|
"401": {
|
|
"description": "User is not active or not an admin of this space"
|
|
},
|
|
"403": {
|
|
"description": "Access forbidden - user is not authorized to update member roles"
|
|
},
|
|
"404": {
|
|
"description": "User, space, or member not found"
|
|
},
|
|
"409": {
|
|
"description": "Cannot remove the last admin from the space"
|
|
}
|
|
},
|
|
"summary": "Update member role",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/members/alias": {
|
|
"patch": {
|
|
"description": "Update the alias of the authenticated member in a space. Users can only update their own alias.",
|
|
"operationId": "membersUpdateAliasV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpdateMemberAliasDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Alias updated"
|
|
},
|
|
"403": {
|
|
"description": "User not authorized"
|
|
},
|
|
"404": {
|
|
"description": "Space or member not found"
|
|
}
|
|
},
|
|
"summary": "Update member alias",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/members/{userId}": {
|
|
"delete": {
|
|
"description": "Removes a member from a space. Only space admins can remove other members. Cannot remove the last admin from a space.",
|
|
"operationId": "membersRemoveUserV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID to remove member from",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "userId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "User ID of the member to remove",
|
|
"schema": {
|
|
"example": 123,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Member removed from space successfully"
|
|
},
|
|
"401": {
|
|
"description": "User is not active or not an admin of this space"
|
|
},
|
|
"403": {
|
|
"description": "Access forbidden - user is not authorized to remove members"
|
|
},
|
|
"404": {
|
|
"description": "User, space, or member not found"
|
|
},
|
|
"409": {
|
|
"description": "Cannot remove the last admin from the space"
|
|
}
|
|
},
|
|
"summary": "Remove member from space",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/users/counterfactual-safes": {
|
|
"post": {
|
|
"description": "Stores the CREATE2 deployment parameters for one or more counterfactual (undeployed) Safes. These parameters are needed to deploy the Safe later.",
|
|
"operationId": "counterfactualSafesCreateV1",
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Counterfactual Safe creation parameters",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateCounterfactualSafesDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Counterfactual Safes saved successfully"
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
}
|
|
},
|
|
"summary": "Save counterfactual Safe creation parameters",
|
|
"tags": [
|
|
"counterfactual-safes"
|
|
]
|
|
},
|
|
"get": {
|
|
"description": "Retrieves all counterfactual (undeployed) Safes for the authenticated user, grouped by chain ID.",
|
|
"operationId": "counterfactualSafesGetV1",
|
|
"parameters": [],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Counterfactual Safes retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GetCounterfactualSafesResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
}
|
|
},
|
|
"summary": "Get counterfactual Safes",
|
|
"tags": [
|
|
"counterfactual-safes"
|
|
]
|
|
},
|
|
"delete": {
|
|
"description": "Removes counterfactual Safe records for the authenticated user, typically after successful deployment.",
|
|
"operationId": "counterfactualSafesDeleteV1",
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DeleteCounterfactualSafesDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"204": {
|
|
"description": "Counterfactual Safes deleted successfully"
|
|
},
|
|
"401": {
|
|
"description": "Authentication required"
|
|
},
|
|
"404": {
|
|
"description": "Counterfactual Safe not found"
|
|
}
|
|
},
|
|
"summary": "Delete counterfactual Safes",
|
|
"tags": [
|
|
"counterfactual-safes"
|
|
]
|
|
}
|
|
},
|
|
"/v1/spaces/{spaceId}/counterfactual-safes": {
|
|
"get": {
|
|
"description": "Retrieves creation parameters for all counterfactual (undeployed) Safes that are associated with a space. Uses a join between space_safes and counterfactual_safes to provide full transparency on Safe ownership and deployment parameters to all space members.",
|
|
"operationId": "spaceCounterfactualSafesGetV1",
|
|
"parameters": [
|
|
{
|
|
"name": "spaceId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Space ID",
|
|
"schema": {
|
|
"example": 1,
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Counterfactual Safes retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/GetCounterfactualSafesResponse"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required or user is not a member of this space"
|
|
},
|
|
"404": {
|
|
"description": "Space not found"
|
|
}
|
|
},
|
|
"summary": "Get counterfactual Safes in a space",
|
|
"tags": [
|
|
"spaces"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/owners/{ownerAddress}/safes": {
|
|
"get": {
|
|
"description": "Retrieves a list of Safe addresses that are owned by the specified address on a specific chain.",
|
|
"operationId": "ownersGetSafesByOwnerV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID to search for Safes",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "ownerAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Owner address to search Safes for (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "List of Safes owned by the specified address",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SafeList"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get Safes by owner",
|
|
"tags": [
|
|
"owners"
|
|
]
|
|
}
|
|
},
|
|
"/v2/owners/{ownerAddress}/safes": {
|
|
"get": {
|
|
"description": "Retrieves all Safes owned by the specified address across all supported chains. Returns a map of chain IDs to arrays of Safe addresses.",
|
|
"operationId": "ownersGetAllSafesByOwnerV2",
|
|
"parameters": [
|
|
{
|
|
"name": "ownerAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Owner address to search Safes for (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Map of chain IDs to arrays of Safe addresses owned by the address",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"1": [
|
|
"0x1234567890123456789012345678901234567890"
|
|
],
|
|
"5": [
|
|
"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get all Safes by owner",
|
|
"tags": [
|
|
"owners"
|
|
]
|
|
}
|
|
},
|
|
"/v3/owners/{ownerAddress}/safes": {
|
|
"get": {
|
|
"description": "Retrieves all Safes owned by the specified address across all supported chains. Returns a map of chain IDs to arrays of Safe addresses.",
|
|
"operationId": "ownersGetAllSafesByOwnerV3",
|
|
"parameters": [
|
|
{
|
|
"name": "ownerAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Owner address to search Safes for (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Map of chain IDs to arrays of Safe addresses owned by the address",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"1": [
|
|
"0x1234567890123456789012345678901234567890"
|
|
],
|
|
"5": [
|
|
"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get all Safes by owner",
|
|
"tags": [
|
|
"owners"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/relay": {
|
|
"post": {
|
|
"description": "Relays a Safe transaction using the relay service, which pays for gas fees. The transaction must meet certain criteria and the Safe must have remaining relay quota.",
|
|
"operationId": "relayRelayV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe transaction will be executed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Transaction data to relay including Safe address, transaction details, and signatures",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RelayDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Transaction relayed successfully with transaction hash",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Relay"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid transaction data, unofficial contracts, or unsupported operation"
|
|
},
|
|
"429": {
|
|
"description": "Relay limit reached for this Safe"
|
|
}
|
|
},
|
|
"summary": "Relay transaction",
|
|
"tags": [
|
|
"relay"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/relay/status/{taskId}": {
|
|
"get": {
|
|
"description": "Retrieves the status of a relay task from the relay provider. This is a proxy endpoint to securely query task status without exposing the API key.",
|
|
"operationId": "relayGetTaskStatusV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID associated with the relay task",
|
|
"schema": {
|
|
"example": "11155111",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "taskId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Task ID returned from the relay transaction",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Task status retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RelayTaskStatus"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Task not found"
|
|
}
|
|
},
|
|
"summary": "Get relay task status",
|
|
"tags": [
|
|
"relay"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/relay/{safeAddress}": {
|
|
"get": {
|
|
"description": "Retrieves the number of remaining relay transactions available for a specific Safe on the given chain.",
|
|
"operationId": "relayGetRelaysRemainingV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeTxHash",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Safe transaction hash (0x prefixed hex string). Required for chains enabled for relay-fee relayer",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Remaining relay quota retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RelaysRemaining"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get remaining relays",
|
|
"tags": [
|
|
"relay"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safe-apps": {
|
|
"get": {
|
|
"description": "Retrieves a list of Safe Apps available for a specific chain, with optional filtering by client URL or app URL.",
|
|
"operationId": "safeAppsGetSafeAppsV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID to get Safe Apps for",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "clientUrl",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by client URL to get apps compatible with specific client",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "url",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by specific Safe App URL",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "List of Safe Apps available for the specified chain",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SafeApp"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get Safe Apps",
|
|
"tags": [
|
|
"safe-apps"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}": {
|
|
"get": {
|
|
"description": "Retrieves detailed information about a Safe including owners, threshold, modules, and current state.",
|
|
"operationId": "safesGetSafeV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Safe information retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SafeState"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Safe not found on the specified chain"
|
|
}
|
|
},
|
|
"summary": "Get Safe information",
|
|
"tags": [
|
|
"safes"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/nonces": {
|
|
"get": {
|
|
"description": "Retrieves the current nonces for a Safe, including the transaction nonce and any queued nonces.",
|
|
"operationId": "safesGetNoncesV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Safe nonces retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SafeNonces"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Safe not found on the specified chain"
|
|
}
|
|
},
|
|
"summary": "Get Safe nonces",
|
|
"tags": [
|
|
"safes"
|
|
]
|
|
}
|
|
},
|
|
"/v1/safes": {
|
|
"get": {
|
|
"description": "Retrieves an overview of multiple Safes including their balances, transaction counts, and other summary information. Supports cross-chain queries using CAIP-10 address format.",
|
|
"operationId": "safesGetSafeOverviewV1",
|
|
"parameters": [
|
|
{
|
|
"name": "currency",
|
|
"required": true,
|
|
"in": "query",
|
|
"description": "Fiat currency code for balance conversion (e.g., USD, EUR)",
|
|
"schema": {
|
|
"example": "USD",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safes",
|
|
"required": true,
|
|
"in": "query",
|
|
"description": "Comma-separated list of Safe addresses in CAIP-10 format (chainId:address)",
|
|
"schema": {
|
|
"example": "1:0x1234567890123456789012345678901234567890,5:0xabcdefabcdefabcdefabcdefabcdefabcdefabcd",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "trusted",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "If true, only includes trusted tokens in balance calculations",
|
|
"schema": {
|
|
"example": false,
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "exclude_spam",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "If true, excludes spam tokens from balance calculations",
|
|
"schema": {
|
|
"example": true,
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "wallet_address",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Optional wallet address to filter Safes where this address is an owner",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Array of Safe overviews with balances and metadata",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SafeOverview"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get Safe overview",
|
|
"tags": [
|
|
"safes"
|
|
]
|
|
}
|
|
},
|
|
"/v2/safes": {
|
|
"get": {
|
|
"description": "Retrieves an overview of multiple Safes. Supports cross-chain queries using chainId:address format.",
|
|
"operationId": "safesGetSafeOverviewV2",
|
|
"parameters": [
|
|
{
|
|
"name": "currency",
|
|
"required": true,
|
|
"in": "query",
|
|
"description": "Fiat currency code for balance conversion (e.g., USD, EUR)",
|
|
"schema": {
|
|
"example": "USD",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safes",
|
|
"required": true,
|
|
"in": "query",
|
|
"description": "Comma-separated list of Safe addresses in chainId:address format",
|
|
"schema": {
|
|
"example": "1:0x1234567890123456789012345678901234567890,5:0xabcdefabcdefabcdefabcdefabcdefabcdefabcd",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "trusted",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "If true, only includes trusted tokens in balance calculations.",
|
|
"schema": {
|
|
"example": false,
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "wallet_address",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Optional wallet address to filter Safes where this address is an owner",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Array of Safe overviews with balances and metadata",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SafeOverview"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get Safe overview (v2)",
|
|
"tags": [
|
|
"safes"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/security/{safeAddress}/recipient/{recipientAddress}": {
|
|
"get": {
|
|
"description": "Performs real-time security analysis of a recipient address for a specific Safe. Returns analysis results grouped by status group, sorted by severity (CRITICAL first).",
|
|
"operationId": "safeShieldAnalyzeRecipientV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "recipientAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Recipient address to analyze",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Recipient interaction analysis results",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/SingleRecipientAnalysisDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Analyze recipient address",
|
|
"tags": [
|
|
"safe-shield"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/security/{safeAddress}/counterparty-analysis": {
|
|
"post": {
|
|
"description": "Performs combined contract and recipient analysis for a Safe transaction. Returns both analyses grouped by status group for each counterparty.",
|
|
"operationId": "safeShieldAnalyzeCounterpartyV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Transaction data used to analyze all counterparties involved.",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CounterpartyAnalysisRequestDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Combined counterparty analysis including recipients and contracts grouped by status group and mapped to an address.",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CounterpartyAnalysisDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Analyze transaction counterparties",
|
|
"tags": [
|
|
"safe-shield"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/security/{safeAddress}/threat-analysis": {
|
|
"post": {
|
|
"description": "Performs real-time threat analysis for a Safe transaction.",
|
|
"operationId": "safeShieldAnalyzeThreatV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "EIP-712 typed data and wallet information for threat analysis.",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ThreatAnalysisRequestDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Threat analysis results including threat findings and balance changes.",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ThreatAnalysisResponseDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Analyze transaction threat",
|
|
"tags": [
|
|
"safe-shield"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/security/{safeAddress}/report-false-result": {
|
|
"post": {
|
|
"description": "Reports a FALSE_POSITIVE or FALSE_NEGATIVE Blockaid transaction scan result for review. Use the request_id from the original scan response to identify the transaction.",
|
|
"operationId": "safeShieldReportFalseResultV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Report details including event type, request_id from scan response, and details.",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ReportFalseResultRequestDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Report submitted successfully.",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ReportFalseResultResponseDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Report false Blockaid scan result",
|
|
"tags": [
|
|
"safe-shield"
|
|
]
|
|
}
|
|
},
|
|
"/v1/targeted-messaging/outreaches/{outreachId}/chains/{chainId}/safes/{safeAddress}": {
|
|
"get": {
|
|
"operationId": "targetedMessagingGetTargetedSafeV1",
|
|
"parameters": [
|
|
{
|
|
"name": "outreachId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TargetedSafe"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Safe not targeted."
|
|
}
|
|
},
|
|
"tags": [
|
|
"targeted-messaging"
|
|
]
|
|
}
|
|
},
|
|
"/v1/targeted-messaging/outreaches/{outreachId}/chains/{chainId}/safes/{safeAddress}/signers/{signerAddress}/submissions": {
|
|
"get": {
|
|
"operationId": "targetedMessagingGetSubmissionV1",
|
|
"parameters": [
|
|
{
|
|
"name": "outreachId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "signerAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Submission"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"targeted-messaging"
|
|
]
|
|
},
|
|
"post": {
|
|
"operationId": "targetedMessagingCreateSubmissionV1",
|
|
"parameters": [
|
|
{
|
|
"name": "outreachId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "signerAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateSubmissionDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Submission"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"targeted-messaging"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/transactions/{id}": {
|
|
"get": {
|
|
"description": "Retrieves detailed information about a specific transaction by its ID, including execution status, confirmations, and decoded transaction data.",
|
|
"operationId": "transactionsGetTransactionByIdV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the transaction exists",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "id",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Transaction ID (safe transaction hash or multisig transaction ID)",
|
|
"schema": {
|
|
"example": "multisig_0x1234567890123456789012345678901234567890_0x5678...",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Transaction details retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TransactionDetails"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Transaction not found"
|
|
}
|
|
},
|
|
"summary": "Get transaction details",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/multisig-transactions/{safeTxHash}/raw": {
|
|
"get": {
|
|
"deprecated": true,
|
|
"operationId": "transactionsGetDomainMultisigTransactionBySafeTxHashV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeTxHash",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TXSMultisigTransaction"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Deprecated",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/multisig-transactions/raw": {
|
|
"get": {
|
|
"deprecated": true,
|
|
"operationId": "transactionsGetDomainMultisigTransactionsV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "failed",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "modified__lt",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "modified__gt",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "modified__lte",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "modified__gte",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "nonce__lt",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "nonce__gt",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "nonce__lte",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "nonce__gte",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "nonce",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "safe_tx_hash",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "value__lt",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "value__gt",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "value",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "executed",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "has_confirmations",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "trusted",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "execution_date__gte",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "execution_date__lte",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "submission_date__gte",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "submission_date__lte",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "transaction_hash",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "ordering",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "limit",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
{
|
|
"name": "offset",
|
|
"required": false,
|
|
"in": "query",
|
|
"schema": {
|
|
"type": "number"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TXSMultisigTransactionPage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Deprecated",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/multisig-transactions": {
|
|
"get": {
|
|
"description": "Retrieves a paginated list of multisig transactions for a Safe with optional filtering by execution date, recipient, value, nonce, and execution status.",
|
|
"operationId": "transactionsGetMultisigTransactionsV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "execution_date__gte",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by execution date greater than or equal to (ISO 8601 format)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "execution_date__lte",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by execution date less than or equal to (ISO 8601 format)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by recipient address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "value",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by transaction value in wei",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "nonce",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by transaction nonce",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "executed",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by execution status (true for executed, false for pending)",
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Pagination cursor for retrieving the next set of results",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Paginated list of multisig transactions",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/MultisigTransactionPage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get multisig transactions",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/transactions/{safeTxHash}": {
|
|
"delete": {
|
|
"description": "Deletes a pending multisig transaction. Only the proposer or a Safe owner can delete a transaction.",
|
|
"operationId": "transactionsDeleteTransactionV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the transaction exists",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeTxHash",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe transaction hash (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Signature proving authorization to delete the transaction",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DeleteTransactionDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"204": {
|
|
"description": "Transaction deleted successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid signature or unauthorized deletion attempt"
|
|
},
|
|
"404": {
|
|
"description": "Transaction not found"
|
|
}
|
|
},
|
|
"summary": "Delete transaction",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/module-transactions": {
|
|
"get": {
|
|
"description": "Retrieves a paginated list of module transactions for a Safe. Module transactions are executed directly by enabled modules without requiring owner signatures.",
|
|
"operationId": "transactionsGetModuleTransactionsV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by recipient address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "module",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by module address that executed the transaction",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "transaction_hash",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by specific transaction hash",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Pagination cursor for retrieving the next set of results",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Paginated list of module transactions",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ModuleTransactionPage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get module transactions",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/transactions/{safeTxHash}/confirmations": {
|
|
"post": {
|
|
"description": "Adds a confirmation signature to a pending multisig transaction. Once enough confirmations are collected to meet the Safe threshold, the transaction can be executed.",
|
|
"operationId": "transactionsAddConfirmationV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeTxHash",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe transaction hash (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Confirmation signature from a Safe owner proving their approval of the transaction",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/AddConfirmationDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Transaction details with updated confirmation status",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/Transaction"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid signature or confirmation already exists for this owner"
|
|
},
|
|
"404": {
|
|
"description": "Transaction not found"
|
|
}
|
|
},
|
|
"summary": "Add transaction confirmation",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/incoming-transfers": {
|
|
"get": {
|
|
"description": "Retrieves a paginated list of incoming transfers to a Safe, including ETH and token transfers with optional filtering by date, value, token, and trust status.",
|
|
"operationId": "transactionsGetIncomingTransfersV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "trusted",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by trust status (true for trusted tokens, false for untrusted)",
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "execution_date__gte",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by execution date greater than or equal to (ISO 8601 format)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "execution_date__lte",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by execution date less than or equal to (ISO 8601 format)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "to",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by recipient address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "value",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by transfer value in wei",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "token_address",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by token contract address (0x prefixed hex string for ERC-20 tokens)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Pagination cursor for retrieving the next set of results",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Paginated list of incoming transfers",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/IncomingTransferPage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get incoming transfers",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/transactions/{safeAddress}/preview": {
|
|
"post": {
|
|
"description": "Simulates a transaction execution to preview its effects, including gas estimates, balance changes, and potential errors before actually proposing or executing it.",
|
|
"operationId": "transactionsPreviewTransactionV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Transaction data to preview including recipient, value, data, and operation type",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/PreviewTransactionDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Transaction preview with simulation results, gas estimates, and potential effects",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TransactionPreview"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid transaction data or simulation failed"
|
|
},
|
|
"404": {
|
|
"description": "Safe not found"
|
|
}
|
|
},
|
|
"summary": "Preview transaction",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/transactions/queued": {
|
|
"get": {
|
|
"description": "Retrieves a paginated list of queued (pending) transactions for a Safe that are waiting for execution, ordered by nonce.",
|
|
"operationId": "transactionsGetTransactionQueueV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "trusted",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by trust status (true for trusted transactions, false for untrusted)",
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Pagination cursor for retrieving the next set of results",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Paginated list of queued transactions",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/QueuedItemPage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get transaction queue",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/transactions/history": {
|
|
"get": {
|
|
"description": "Retrieves a paginated list of executed transactions for a Safe, including multisig transactions, module transactions, and incoming transfers, ordered by execution date.",
|
|
"operationId": "transactionsGetTransactionsHistoryV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "timezone_offset",
|
|
"required": false,
|
|
"in": "query",
|
|
"deprecated": true,
|
|
"description": "Deprecated: Timezone offset in milliseconds for date formatting (use timezone parameter instead)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "trusted",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by trust status (default: true, set to false to include untrusted transactions)",
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "imitation",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Include imitation transactions in results (default: true, set to false to exclude)",
|
|
"schema": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
{
|
|
"name": "timezone",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "IANA timezone identifier for date formatting (e.g., \"America/New_York\")",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Pagination cursor for retrieving the next set of results",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Paginated list of historical transactions",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TransactionItemPage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get transaction history",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/transactions/{safeAddress}/propose": {
|
|
"post": {
|
|
"description": "Proposes a new multisig transaction for a Safe. The transaction will be pending until enough owners sign it to reach the required threshold.",
|
|
"operationId": "transactionsProposeTransactionV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Transaction proposal including recipient, value, data, and initial signature",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/ProposeTransactionDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Transaction proposed successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TransactionDetails"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid transaction data or signature"
|
|
}
|
|
},
|
|
"summary": "Propose transaction",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/transactions/creation": {
|
|
"get": {
|
|
"description": "Retrieves the transaction that created the Safe, including the creation timestamp, creator address, factory used, and setup data.",
|
|
"operationId": "transactionsGetCreationTransactionV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Safe creation transaction details",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreationTransaction"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "Safe not found or creation transaction not available"
|
|
}
|
|
},
|
|
"summary": "Get Safe creation transaction",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/creation/raw": {
|
|
"get": {
|
|
"deprecated": true,
|
|
"operationId": "transactionsGetDomainCreationTransactionV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TXSCreationTransaction"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Deprecated",
|
|
"tags": [
|
|
"transactions"
|
|
]
|
|
}
|
|
},
|
|
"/v1/export/chains/{chainId}/{safeAddress}": {
|
|
"post": {
|
|
"operationId": "csvExportLaunchExportV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": false,
|
|
"description": "Transaction export request",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/TransactionExportDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"202": {
|
|
"description": "",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/JobStatusDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"export"
|
|
]
|
|
}
|
|
},
|
|
"/v1/export/{jobId}/status": {
|
|
"get": {
|
|
"operationId": "csvExportGetExportStatusV1",
|
|
"parameters": [
|
|
{
|
|
"name": "jobId",
|
|
"required": true,
|
|
"in": "path",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "CSV export status retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/JobStatusDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"404": {
|
|
"description": "CSV export not found",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/JobStatusErrorDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"tags": [
|
|
"export"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/delegates": {
|
|
"get": {
|
|
"deprecated": true,
|
|
"description": "Retrieves a paginated list of delegates for a specific chain. This endpoint is deprecated, please use the v2 version instead.",
|
|
"operationId": "delegatesGetDelegatesV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where delegates are registered",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Pagination cursor for retrieving the next set of results",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "label",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by delegate label",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "delegator",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by delegator address",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "delegate",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by delegate address",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safe",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by Safe address",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Paginated list of delegates retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DelegatePage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get delegates (deprecated)",
|
|
"tags": [
|
|
"delegates"
|
|
]
|
|
},
|
|
"post": {
|
|
"deprecated": true,
|
|
"description": "Creates a new delegate for a specific chain. This endpoint is deprecated, please use the v2 version instead.",
|
|
"operationId": "delegatesPostDelegateV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the delegate will be registered",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Delegate creation data including Safe address, delegate address, and signature",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateDelegateDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"204": {
|
|
"description": "Delegate created successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid delegate data or signature"
|
|
}
|
|
},
|
|
"summary": "Create delegate (deprecated)",
|
|
"tags": [
|
|
"delegates"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/delegates/{delegateAddress}": {
|
|
"delete": {
|
|
"deprecated": true,
|
|
"description": "Deletes a delegate for a specific chain and address. This endpoint is deprecated, please use the v2 version instead.",
|
|
"operationId": "delegatesDeleteDelegateV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the delegate is registered",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "delegateAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Delegate address to delete (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Signature proving authorization to delete the delegate",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DeleteDelegateDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"204": {
|
|
"description": "Delegate deleted successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid signature or unauthorized deletion attempt"
|
|
}
|
|
},
|
|
"summary": "Delete delegate (deprecated)",
|
|
"tags": [
|
|
"delegates"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/safes/{safeAddress}/delegates/{delegateAddress}": {
|
|
"delete": {
|
|
"deprecated": true,
|
|
"description": "Removes a delegate from a specific Safe. This endpoint is deprecated, please use the v2 version instead.",
|
|
"operationId": "delegatesDeleteSafeDelegateV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "delegateAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Delegate address to remove (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Signature proving authorization to remove the delegate",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DeleteSafeDelegateDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"204": {
|
|
"description": "Safe delegate removed successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid signature or unauthorized removal attempt"
|
|
}
|
|
},
|
|
"summary": "Delete Safe delegate (deprecated)",
|
|
"tags": [
|
|
"delegates"
|
|
]
|
|
}
|
|
},
|
|
"/v2/chains/{chainId}/delegates": {
|
|
"get": {
|
|
"description": "Retrieves a paginated list of delegates for a specific chain with optional filtering by Safe, delegate, delegator, or label.",
|
|
"operationId": "delegatesGetDelegatesV2",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where delegates are registered",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "cursor",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Pagination cursor for retrieving the next set of results",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "label",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by delegate label or name",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "delegator",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by delegator address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "delegate",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by delegate address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safe",
|
|
"required": false,
|
|
"in": "query",
|
|
"description": "Filter by Safe address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "Paginated list of delegates retrieved successfully",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DelegatePage"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"summary": "Get delegates",
|
|
"tags": [
|
|
"delegates"
|
|
]
|
|
},
|
|
"post": {
|
|
"description": "Creates a new delegate relationship between a Safe and a delegate address. Requires proper authorization signature.",
|
|
"operationId": "delegatesPostDelegateV2",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the delegate will be registered",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Delegate creation data including Safe address, delegate address, label, and authorization signature",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/CreateDelegateDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"204": {
|
|
"description": "Delegate created successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid delegate data, signature, or unauthorized creation attempt"
|
|
}
|
|
},
|
|
"summary": "Create delegate",
|
|
"tags": [
|
|
"delegates"
|
|
]
|
|
}
|
|
},
|
|
"/v2/chains/{chainId}/delegates/{delegateAddress}": {
|
|
"delete": {
|
|
"description": "Removes a delegate relationship for a specific delegate address. Requires proper authorization signature.",
|
|
"operationId": "delegatesDeleteDelegateV2",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the delegate is registered",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "delegateAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Delegate address to remove (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Signature and data proving authorization to delete the delegate",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DeleteDelegateV2Dto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"204": {
|
|
"description": "Delegate deleted successfully"
|
|
},
|
|
"400": {
|
|
"description": "Invalid signature or unauthorized deletion attempt"
|
|
}
|
|
},
|
|
"summary": "Delete delegate",
|
|
"tags": [
|
|
"delegates"
|
|
]
|
|
}
|
|
},
|
|
"/v1/register/notifications": {
|
|
"post": {
|
|
"deprecated": true,
|
|
"description": "Registers a device to receive push notifications for Safe events. This endpoint is deprecated, please use the v2 version instead.",
|
|
"operationId": "notificationsRegisterDeviceV1",
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Device registration data including device token, UUID, and Safe registrations with signatures",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/RegisterDeviceDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"200": {
|
|
"description": "Device registered successfully for notifications"
|
|
},
|
|
"400": {
|
|
"description": "Invalid device data, expired timestamp, or invalid signature"
|
|
}
|
|
},
|
|
"summary": "Register device for notifications (deprecated)",
|
|
"tags": [
|
|
"notifications"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/notifications/devices/{uuid}": {
|
|
"delete": {
|
|
"deprecated": true,
|
|
"description": "Removes a device from receiving notifications. This endpoint is deprecated, please use the v2 version instead.",
|
|
"operationId": "notificationsUnregisterDeviceV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID (kept for backward compatibility)",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "uuid",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Device UUID to unregister",
|
|
"schema": {
|
|
"example": "550e8400-e29b-41d4-a716-446655440000",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Device unregistered successfully"
|
|
}
|
|
},
|
|
"summary": "Unregister device (deprecated)",
|
|
"tags": [
|
|
"notifications"
|
|
]
|
|
}
|
|
},
|
|
"/v1/chains/{chainId}/notifications/devices/{uuid}/safes/{safeAddress}": {
|
|
"delete": {
|
|
"deprecated": true,
|
|
"description": "Removes a specific Safe from receiving notifications on a device. This endpoint is deprecated, please use the v2 version instead.",
|
|
"operationId": "notificationsUnregisterSafeV1",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "uuid",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Device UUID",
|
|
"schema": {
|
|
"example": "550e8400-e29b-41d4-a716-446655440000",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Safe unregistered from device notifications successfully"
|
|
}
|
|
},
|
|
"summary": "Unregister Safe from device (deprecated)",
|
|
"tags": [
|
|
"notifications"
|
|
]
|
|
}
|
|
},
|
|
"/v2/register/notifications": {
|
|
"post": {
|
|
"description": "Registers or updates a device to receive push notifications for Safe events. Creates subscriptions for specified Safes and notification types.",
|
|
"operationId": "notificationsUpsertSubscriptionsV2",
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"description": "Device and subscription data including device token, Safe addresses, and notification preferences",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/UpsertSubscriptionsDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"201": {
|
|
"description": "Device registered successfully with returned device UUID",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "object",
|
|
"properties": {
|
|
"deviceUuid": {
|
|
"type": "string",
|
|
"format": "uuid",
|
|
"description": "Generated UUID for the registered device"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"400": {
|
|
"description": "Invalid device data or subscription configuration"
|
|
}
|
|
},
|
|
"summary": "Register device for notifications",
|
|
"tags": [
|
|
"notifications"
|
|
]
|
|
}
|
|
},
|
|
"/v2/chains/{chainId}/notifications/devices/{deviceUuid}/safes/{safeAddress}": {
|
|
"get": {
|
|
"description": "Retrieves the notification types that a device is subscribed to for a specific Safe.",
|
|
"operationId": "notificationsGetSafeSubscriptionV2",
|
|
"parameters": [
|
|
{
|
|
"name": "deviceUuid",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Device UUID",
|
|
"schema": {
|
|
"example": "550e8400-e29b-41d4-a716-446655440000",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"200": {
|
|
"description": "List of notification types the device is subscribed to for this Safe",
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/NotificationTypeResponseDto"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"401": {
|
|
"description": "Authentication required - valid JWT token must be provided"
|
|
},
|
|
"404": {
|
|
"description": "Device, Safe, or subscription not found"
|
|
}
|
|
},
|
|
"summary": "Get Safe subscription",
|
|
"tags": [
|
|
"notifications"
|
|
]
|
|
},
|
|
"delete": {
|
|
"description": "Removes all notification subscriptions for a specific Safe on a device.",
|
|
"operationId": "notificationsDeleteSubscriptionV2",
|
|
"parameters": [
|
|
{
|
|
"name": "deviceUuid",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Device UUID",
|
|
"schema": {
|
|
"example": "550e8400-e29b-41d4-a716-446655440000",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID where the Safe is deployed",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "safeAddress",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Safe contract address (0x prefixed hex string)",
|
|
"schema": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Safe subscription deleted successfully"
|
|
},
|
|
"404": {
|
|
"description": "Device, Safe, or subscription not found"
|
|
}
|
|
},
|
|
"summary": "Delete Safe subscription",
|
|
"tags": [
|
|
"notifications"
|
|
]
|
|
}
|
|
},
|
|
"/v2/notifications/subscriptions": {
|
|
"delete": {
|
|
"description": "Delete all subscriptions of a Safe on a device. This will delete all subscriptions of a Safe on a device for all chains passed in the request body.",
|
|
"operationId": "notificationsDeleteAllSubscriptionsV2",
|
|
"parameters": [],
|
|
"requestBody": {
|
|
"required": true,
|
|
"content": {
|
|
"application/json": {
|
|
"schema": {
|
|
"$ref": "#/components/schemas/DeleteAllSubscriptionsDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"responses": {
|
|
"404": {
|
|
"description": "No subscription was found"
|
|
},
|
|
"422": {
|
|
"description": "The request body is invalid"
|
|
}
|
|
},
|
|
"summary": "Delete all subscriptions of a device",
|
|
"tags": [
|
|
"notifications"
|
|
]
|
|
}
|
|
},
|
|
"/v2/chains/{chainId}/notifications/devices/{deviceUuid}": {
|
|
"delete": {
|
|
"description": "Removes a device and all its notification subscriptions from the system.",
|
|
"operationId": "notificationsDeleteDeviceV2",
|
|
"parameters": [
|
|
{
|
|
"name": "chainId",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Chain ID (kept for backward compatibility)",
|
|
"schema": {
|
|
"example": "1",
|
|
"type": "string"
|
|
}
|
|
},
|
|
{
|
|
"name": "deviceUuid",
|
|
"required": true,
|
|
"in": "path",
|
|
"description": "Device UUID to delete",
|
|
"schema": {
|
|
"example": "550e8400-e29b-41d4-a716-446655440000",
|
|
"type": "string"
|
|
}
|
|
}
|
|
],
|
|
"responses": {
|
|
"204": {
|
|
"description": "Device deleted successfully"
|
|
},
|
|
"404": {
|
|
"description": "Device not found"
|
|
}
|
|
},
|
|
"summary": "Delete device",
|
|
"tags": [
|
|
"notifications"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"info": {
|
|
"title": "Safe Client Gateway",
|
|
"description": "",
|
|
"version": "main",
|
|
"contact": {}
|
|
},
|
|
"tags": [],
|
|
"servers": [],
|
|
"components": {
|
|
"schemas": {
|
|
"About": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"buildNumber": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"name"
|
|
]
|
|
},
|
|
"UserSession": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"authMethod": {
|
|
"type": "string",
|
|
"enum": [
|
|
"siwe",
|
|
"oidc"
|
|
]
|
|
},
|
|
"signerAddress": {
|
|
"type": "string",
|
|
"description": "Wallet signer address. Present only for SIWE-authenticated users."
|
|
},
|
|
"email": {
|
|
"type": "string",
|
|
"description": "Verified email address. Present only for OIDC-authenticated users when stored."
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"authMethod"
|
|
]
|
|
},
|
|
"AuthNonce": {
|
|
"type": "object",
|
|
"properties": {
|
|
"nonce": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"nonce"
|
|
]
|
|
},
|
|
"SiweDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": {
|
|
"type": "string"
|
|
},
|
|
"signature": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"message",
|
|
"signature"
|
|
]
|
|
},
|
|
"LogoutDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"redirect_url": {
|
|
"type": "string",
|
|
"description": "Post-logout redirect URL (must be same-origin as pre-configured URL)"
|
|
}
|
|
}
|
|
},
|
|
"NativeToken": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"decimals": {
|
|
"type": "number"
|
|
},
|
|
"logoUri": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"symbol": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NATIVE_TOKEN"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"decimals",
|
|
"logoUri",
|
|
"name",
|
|
"symbol",
|
|
"type"
|
|
]
|
|
},
|
|
"Erc20Token": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"decimals": {
|
|
"type": "number"
|
|
},
|
|
"logoUri": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"symbol": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ERC20"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"decimals",
|
|
"logoUri",
|
|
"name",
|
|
"symbol",
|
|
"type"
|
|
]
|
|
},
|
|
"Erc721Token": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"decimals": {
|
|
"type": "number"
|
|
},
|
|
"logoUri": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"symbol": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ERC721"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"decimals",
|
|
"logoUri",
|
|
"name",
|
|
"symbol",
|
|
"type"
|
|
]
|
|
},
|
|
"Balance": {
|
|
"type": "object",
|
|
"properties": {
|
|
"balance": {
|
|
"type": "string"
|
|
},
|
|
"fiatBalance": {
|
|
"type": "string"
|
|
},
|
|
"fiatConversion": {
|
|
"type": "string"
|
|
},
|
|
"tokenInfo": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/NativeToken"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/Erc20Token"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/Erc721Token"
|
|
}
|
|
]
|
|
},
|
|
"fiatBalance24hChange": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"balance",
|
|
"fiatBalance",
|
|
"fiatConversion",
|
|
"tokenInfo"
|
|
]
|
|
},
|
|
"Balances": {
|
|
"type": "object",
|
|
"properties": {
|
|
"fiatTotal": {
|
|
"type": "string"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Balance"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"fiatTotal",
|
|
"items"
|
|
]
|
|
},
|
|
"Position": {
|
|
"type": "object",
|
|
"properties": {
|
|
"balance": {
|
|
"type": "string"
|
|
},
|
|
"fiatBalance": {
|
|
"type": "string"
|
|
},
|
|
"fiatConversion": {
|
|
"type": "string"
|
|
},
|
|
"tokenInfo": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/NativeToken"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/Erc20Token"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/Erc721Token"
|
|
}
|
|
]
|
|
},
|
|
"fiatBalance24hChange": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"position_type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"deposit",
|
|
"loan",
|
|
"locked",
|
|
"staked",
|
|
"reward",
|
|
"wallet",
|
|
"airdrop",
|
|
"margin",
|
|
"unknown"
|
|
],
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"balance",
|
|
"fiatBalance",
|
|
"fiatConversion",
|
|
"tokenInfo",
|
|
"fiatBalance24hChange",
|
|
"position_type"
|
|
]
|
|
},
|
|
"PositionGroup": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Position"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"items"
|
|
]
|
|
},
|
|
"ProtocolIcon": {
|
|
"type": "object",
|
|
"properties": {
|
|
"url": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"url"
|
|
]
|
|
},
|
|
"ProtocolMetadata": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"icon": {
|
|
"$ref": "#/components/schemas/ProtocolIcon"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"icon"
|
|
]
|
|
},
|
|
"Protocol": {
|
|
"type": "object",
|
|
"properties": {
|
|
"protocol": {
|
|
"type": "string"
|
|
},
|
|
"protocol_metadata": {
|
|
"$ref": "#/components/schemas/ProtocolMetadata"
|
|
},
|
|
"fiatTotal": {
|
|
"type": "string"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PositionGroup"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"protocol",
|
|
"protocol_metadata",
|
|
"fiatTotal",
|
|
"items"
|
|
]
|
|
},
|
|
"PortfolioNativeToken": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"decimals": {
|
|
"type": "number"
|
|
},
|
|
"logoUri": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"symbol": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NATIVE_TOKEN"
|
|
]
|
|
},
|
|
"chainId": {
|
|
"type": "string",
|
|
"description": "The chain ID"
|
|
},
|
|
"trusted": {
|
|
"type": "boolean",
|
|
"description": "Whether the token is trusted (spam filter)"
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"decimals",
|
|
"logoUri",
|
|
"name",
|
|
"symbol",
|
|
"type",
|
|
"chainId",
|
|
"trusted"
|
|
]
|
|
},
|
|
"PortfolioErc20Token": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"decimals": {
|
|
"type": "number"
|
|
},
|
|
"logoUri": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"symbol": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ERC20"
|
|
]
|
|
},
|
|
"chainId": {
|
|
"type": "string",
|
|
"description": "The chain ID"
|
|
},
|
|
"trusted": {
|
|
"type": "boolean",
|
|
"description": "Whether the token is trusted (spam filter)"
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"decimals",
|
|
"logoUri",
|
|
"name",
|
|
"symbol",
|
|
"type",
|
|
"chainId",
|
|
"trusted"
|
|
]
|
|
},
|
|
"PortfolioErc721Token": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"decimals": {
|
|
"type": "number"
|
|
},
|
|
"logoUri": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"symbol": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ERC721"
|
|
]
|
|
},
|
|
"chainId": {
|
|
"type": "string",
|
|
"description": "The chain ID"
|
|
},
|
|
"trusted": {
|
|
"type": "boolean",
|
|
"description": "Whether the token is trusted (spam filter)"
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"decimals",
|
|
"logoUri",
|
|
"name",
|
|
"symbol",
|
|
"type",
|
|
"chainId",
|
|
"trusted"
|
|
]
|
|
},
|
|
"TokenBalance": {
|
|
"type": "object",
|
|
"properties": {
|
|
"tokenInfo": {
|
|
"description": "Token information",
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PortfolioNativeToken"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/PortfolioErc20Token"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/PortfolioErc721Token"
|
|
}
|
|
]
|
|
},
|
|
"balance": {
|
|
"type": "string",
|
|
"description": "Balance in smallest unit as string integer. Use decimals to convert."
|
|
},
|
|
"balanceFiat": {
|
|
"type": "string",
|
|
"description": "Balance in requested fiat currency. Decimal string without exponent notation or thousand separators.",
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
|
|
"example": "4801.653401839"
|
|
},
|
|
"price": {
|
|
"type": "string",
|
|
"description": "Token price in requested fiat currency. Decimal string without exponent notation or thousand separators.",
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
|
|
"example": "3890.12"
|
|
},
|
|
"priceChangePercentage1d": {
|
|
"type": "string",
|
|
"description": "Price change as decimal (e.g., \"-0.0431\" for -4.31%). Decimal string without exponent notation.",
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
|
|
"example": "-0.0431"
|
|
}
|
|
},
|
|
"required": [
|
|
"tokenInfo",
|
|
"balance"
|
|
]
|
|
},
|
|
"AppPosition": {
|
|
"type": "object",
|
|
"properties": {
|
|
"key": {
|
|
"type": "string",
|
|
"description": "Unique position key"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Position type (e.g., staked, lending, liquidity)"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Position name"
|
|
},
|
|
"groupId": {
|
|
"type": "string",
|
|
"description": "Group ID for grouping related positions together"
|
|
},
|
|
"tokenInfo": {
|
|
"description": "Token information",
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PortfolioNativeToken"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/PortfolioErc20Token"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/PortfolioErc721Token"
|
|
}
|
|
]
|
|
},
|
|
"receiptTokenAddress": {
|
|
"type": "string",
|
|
"description": "Receipt token address (pool address) representing this position. This is the contract address for the position token (LP token, staking receipt, etc.), not the underlying token."
|
|
},
|
|
"balance": {
|
|
"type": "string",
|
|
"description": "Balance in smallest unit as string integer. Use decimals to convert."
|
|
},
|
|
"balanceFiat": {
|
|
"type": "string",
|
|
"description": "Balance in requested fiat currency. Decimal string without exponent notation or thousand separators.",
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
|
|
"example": "18638914.125656575"
|
|
},
|
|
"priceChangePercentage1d": {
|
|
"type": "string",
|
|
"description": "Price change as decimal (e.g., \"-0.0431\" for -4.31%). Decimal string without exponent notation.",
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
|
|
"example": "-0.0431"
|
|
}
|
|
},
|
|
"required": [
|
|
"key",
|
|
"type",
|
|
"name",
|
|
"tokenInfo",
|
|
"balance"
|
|
]
|
|
},
|
|
"AppPositionGroup": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Group name (e.g., \"Protocol A Vesting\")"
|
|
},
|
|
"items": {
|
|
"type": "array",
|
|
"description": "Positions in this group",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AppPosition"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"items"
|
|
]
|
|
},
|
|
"AppBalanceAppInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Application name"
|
|
},
|
|
"logoUrl": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"description": "Application logo URL (HTTPS)"
|
|
},
|
|
"url": {
|
|
"type": "string",
|
|
"format": "uri",
|
|
"description": "Application URL (HTTPS)"
|
|
}
|
|
},
|
|
"required": [
|
|
"name"
|
|
]
|
|
},
|
|
"AppBalance": {
|
|
"type": "object",
|
|
"properties": {
|
|
"appInfo": {
|
|
"description": "Application information",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AppBalanceAppInfo"
|
|
}
|
|
]
|
|
},
|
|
"balanceFiat": {
|
|
"type": "string",
|
|
"description": "Total balance in fiat currency across all position groups. Decimal string without exponent notation or thousand separators.",
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
|
|
"example": "18638914.125656575"
|
|
},
|
|
"groups": {
|
|
"type": "array",
|
|
"description": "Position groups in this app, grouped by position name",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AppPositionGroup"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"appInfo",
|
|
"balanceFiat",
|
|
"groups"
|
|
]
|
|
},
|
|
"Portfolio": {
|
|
"type": "object",
|
|
"properties": {
|
|
"totalBalanceFiat": {
|
|
"type": "string",
|
|
"description": "Total balance in fiat currency across all tokens and positions. Decimal string without exponent notation or thousand separators.",
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
|
|
"example": "954181237.094243"
|
|
},
|
|
"totalTokenBalanceFiat": {
|
|
"type": "string",
|
|
"description": "Total balance in fiat currency for all token holdings. Decimal string without exponent notation or thousand separators.",
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
|
|
"example": "935542322.9685864"
|
|
},
|
|
"totalPositionsBalanceFiat": {
|
|
"type": "string",
|
|
"description": "Total balance in fiat currency for all app positions. Decimal string without exponent notation or thousand separators.",
|
|
"pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
|
|
"example": "18638914.125656575"
|
|
},
|
|
"tokenBalances": {
|
|
"description": "List of token balances",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/TokenBalance"
|
|
}
|
|
},
|
|
"positionBalances": {
|
|
"description": "List of app balances",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AppBalance"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"totalBalanceFiat",
|
|
"totalTokenBalanceFiat",
|
|
"totalPositionsBalanceFiat",
|
|
"tokenBalances",
|
|
"positionBalances"
|
|
]
|
|
},
|
|
"GasPriceOracle": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"oracle"
|
|
]
|
|
},
|
|
"gasParameter": {
|
|
"type": "string"
|
|
},
|
|
"gweiFactor": {
|
|
"type": "string"
|
|
},
|
|
"uri": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"gasParameter",
|
|
"gweiFactor",
|
|
"uri"
|
|
]
|
|
},
|
|
"GasPriceFixed": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"fixed"
|
|
]
|
|
},
|
|
"weiValue": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"weiValue"
|
|
]
|
|
},
|
|
"GasPriceFixedEIP1559": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"fixed1559"
|
|
]
|
|
},
|
|
"maxFeePerGas": {
|
|
"type": "string"
|
|
},
|
|
"maxPriorityFeePerGas": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"maxFeePerGas",
|
|
"maxPriorityFeePerGas"
|
|
]
|
|
},
|
|
"NativeCurrency": {
|
|
"type": "object",
|
|
"properties": {
|
|
"decimals": {
|
|
"type": "number"
|
|
},
|
|
"logoUri": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"symbol": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"decimals",
|
|
"logoUri",
|
|
"name",
|
|
"symbol"
|
|
]
|
|
},
|
|
"BlockExplorerUriTemplate": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"api": {
|
|
"type": "string"
|
|
},
|
|
"txHash": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"api",
|
|
"txHash"
|
|
]
|
|
},
|
|
"BalancesProvider": {
|
|
"type": "object",
|
|
"properties": {
|
|
"chainName": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"enabled": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"chainName",
|
|
"enabled"
|
|
]
|
|
},
|
|
"RpcUri": {
|
|
"type": "object",
|
|
"properties": {
|
|
"authentication": {
|
|
"type": "string",
|
|
"enum": [
|
|
"API_KEY_PATH",
|
|
"NO_AUTHENTICATION",
|
|
"UNKNOWN"
|
|
]
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"authentication",
|
|
"value"
|
|
]
|
|
},
|
|
"Theme": {
|
|
"type": "object",
|
|
"properties": {
|
|
"backgroundColor": {
|
|
"type": "string"
|
|
},
|
|
"textColor": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"backgroundColor",
|
|
"textColor"
|
|
]
|
|
},
|
|
"Chain": {
|
|
"type": "object",
|
|
"properties": {
|
|
"chainId": {
|
|
"type": "string"
|
|
},
|
|
"chainName": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"chainLogoUri": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"l2": {
|
|
"type": "boolean"
|
|
},
|
|
"isTestnet": {
|
|
"type": "boolean"
|
|
},
|
|
"zk": {
|
|
"type": "boolean"
|
|
},
|
|
"nativeCurrency": {
|
|
"$ref": "#/components/schemas/NativeCurrency"
|
|
},
|
|
"transactionService": {
|
|
"type": "string"
|
|
},
|
|
"blockExplorerUriTemplate": {
|
|
"$ref": "#/components/schemas/BlockExplorerUriTemplate"
|
|
},
|
|
"beaconChainExplorerUriTemplate": {
|
|
"type": "object"
|
|
},
|
|
"disabledWallets": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"ensRegistryAddress": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"balancesProvider": {
|
|
"$ref": "#/components/schemas/BalancesProvider"
|
|
},
|
|
"features": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"gasPrice": {
|
|
"type": "array",
|
|
"items": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/GasPriceOracle"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/GasPriceFixed"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/GasPriceFixedEIP1559"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"publicRpcUri": {
|
|
"$ref": "#/components/schemas/RpcUri"
|
|
},
|
|
"rpcUri": {
|
|
"$ref": "#/components/schemas/RpcUri"
|
|
},
|
|
"safeAppsRpcUri": {
|
|
"$ref": "#/components/schemas/RpcUri"
|
|
},
|
|
"shortName": {
|
|
"type": "string"
|
|
},
|
|
"theme": {
|
|
"$ref": "#/components/schemas/Theme"
|
|
},
|
|
"recommendedMasterCopyVersion": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"chainId",
|
|
"chainName",
|
|
"description",
|
|
"l2",
|
|
"isTestnet",
|
|
"zk",
|
|
"nativeCurrency",
|
|
"transactionService",
|
|
"blockExplorerUriTemplate",
|
|
"beaconChainExplorerUriTemplate",
|
|
"disabledWallets",
|
|
"balancesProvider",
|
|
"features",
|
|
"gasPrice",
|
|
"publicRpcUri",
|
|
"rpcUri",
|
|
"safeAppsRpcUri",
|
|
"shortName",
|
|
"theme"
|
|
]
|
|
},
|
|
"ChainPage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Chain"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"AboutChain": {
|
|
"type": "object",
|
|
"properties": {
|
|
"transactionServiceBaseUri": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
},
|
|
"buildNumber": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"transactionServiceBaseUri",
|
|
"name",
|
|
"version",
|
|
"buildNumber"
|
|
]
|
|
},
|
|
"Backbone": {
|
|
"type": "object",
|
|
"properties": {
|
|
"api_version": {
|
|
"type": "string"
|
|
},
|
|
"headers": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"host": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"secure": {
|
|
"type": "boolean"
|
|
},
|
|
"settings": {
|
|
"type": "object",
|
|
"nullable": true
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"api_version",
|
|
"host",
|
|
"name",
|
|
"secure",
|
|
"settings",
|
|
"version"
|
|
]
|
|
},
|
|
"MasterCopy": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"version"
|
|
]
|
|
},
|
|
"IndexingStatus": {
|
|
"type": "object",
|
|
"properties": {
|
|
"currentBlockNumber": {
|
|
"type": "number"
|
|
},
|
|
"currentBlockTimestamp": {
|
|
"format": "date-time",
|
|
"type": "string"
|
|
},
|
|
"erc20BlockNumber": {
|
|
"type": "number"
|
|
},
|
|
"erc20BlockTimestamp": {
|
|
"format": "date-time",
|
|
"type": "string"
|
|
},
|
|
"erc20Synced": {
|
|
"type": "boolean"
|
|
},
|
|
"masterCopiesBlockNumber": {
|
|
"type": "number"
|
|
},
|
|
"masterCopiesBlockTimestamp": {
|
|
"format": "date-time",
|
|
"type": "string"
|
|
},
|
|
"masterCopiesSynced": {
|
|
"type": "boolean"
|
|
},
|
|
"synced": {
|
|
"type": "boolean"
|
|
},
|
|
"lastSync": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"currentBlockNumber",
|
|
"currentBlockTimestamp",
|
|
"erc20BlockNumber",
|
|
"erc20BlockTimestamp",
|
|
"erc20Synced",
|
|
"masterCopiesBlockNumber",
|
|
"masterCopiesBlockTimestamp",
|
|
"masterCopiesSynced",
|
|
"synced",
|
|
"lastSync"
|
|
]
|
|
},
|
|
"GasPriceResult": {
|
|
"type": "object",
|
|
"properties": {
|
|
"LastBlock": {
|
|
"type": "string",
|
|
"description": "Last block number",
|
|
"example": "23467872"
|
|
},
|
|
"SafeGasPrice": {
|
|
"type": "string",
|
|
"description": "Safe gas price recommendation (Gwei)",
|
|
"example": "0.496839934"
|
|
},
|
|
"ProposeGasPrice": {
|
|
"type": "string",
|
|
"description": "Proposed gas price (Gwei)",
|
|
"example": "0.496840168"
|
|
},
|
|
"FastGasPrice": {
|
|
"type": "string",
|
|
"description": "Fast gas price recommendation (Gwei)",
|
|
"example": "0.55411917"
|
|
},
|
|
"suggestBaseFee": {
|
|
"type": "string",
|
|
"description": "Base fee of the next pending block (Gwei)",
|
|
"example": "0.496839934"
|
|
},
|
|
"gasUsedRatio": {
|
|
"type": "string",
|
|
"description": "Gas used ratio to estimate network congestion",
|
|
"example": "0.5,0.6,0.7"
|
|
}
|
|
},
|
|
"required": [
|
|
"LastBlock",
|
|
"SafeGasPrice",
|
|
"ProposeGasPrice",
|
|
"FastGasPrice",
|
|
"suggestBaseFee",
|
|
"gasUsedRatio"
|
|
]
|
|
},
|
|
"GasPriceResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "string",
|
|
"description": "Status code (\"1\" = success)",
|
|
"example": "1"
|
|
},
|
|
"message": {
|
|
"type": "string",
|
|
"description": "Response message",
|
|
"example": "OK"
|
|
},
|
|
"result": {
|
|
"description": "Gas price data",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/GasPriceResult"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"status",
|
|
"message",
|
|
"result"
|
|
]
|
|
},
|
|
"Collectible": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"tokenName": {
|
|
"type": "string"
|
|
},
|
|
"tokenSymbol": {
|
|
"type": "string"
|
|
},
|
|
"logoUri": {
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"uri": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"imageUri": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"metadata": {
|
|
"type": "object",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"tokenName",
|
|
"tokenSymbol",
|
|
"logoUri",
|
|
"id"
|
|
]
|
|
},
|
|
"CollectiblePage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Collectible"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"ActivityMetadata": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"maxPoints": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"description",
|
|
"maxPoints"
|
|
]
|
|
},
|
|
"Campaign": {
|
|
"type": "object",
|
|
"properties": {
|
|
"resourceId": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"startDate": {
|
|
"type": "string"
|
|
},
|
|
"endDate": {
|
|
"type": "string"
|
|
},
|
|
"lastUpdated": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"activitiesMetadata": {
|
|
"nullable": true,
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ActivityMetadata"
|
|
}
|
|
},
|
|
"rewardValue": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"rewardText": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"iconUrl": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"safeAppUrl": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"partnerUrl": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"isPromoted": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"resourceId",
|
|
"name",
|
|
"description",
|
|
"startDate",
|
|
"endDate",
|
|
"isPromoted"
|
|
]
|
|
},
|
|
"CampaignPage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Campaign"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"CampaignRank": {
|
|
"type": "object",
|
|
"properties": {
|
|
"holder": {
|
|
"type": "string"
|
|
},
|
|
"position": {
|
|
"type": "number"
|
|
},
|
|
"boost": {
|
|
"type": "number"
|
|
},
|
|
"totalPoints": {
|
|
"type": "number"
|
|
},
|
|
"totalBoostedPoints": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"holder",
|
|
"position",
|
|
"boost",
|
|
"totalPoints",
|
|
"totalBoostedPoints"
|
|
]
|
|
},
|
|
"CampaignRankPage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/CampaignRank"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"EligibilityRequest": {
|
|
"type": "object",
|
|
"properties": {
|
|
"requestId": {
|
|
"type": "string"
|
|
},
|
|
"sealedData": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"requestId",
|
|
"sealedData"
|
|
]
|
|
},
|
|
"Eligibility": {
|
|
"type": "object",
|
|
"properties": {
|
|
"requestId": {
|
|
"type": "string"
|
|
},
|
|
"isAllowed": {
|
|
"type": "boolean"
|
|
},
|
|
"isVpn": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"requestId",
|
|
"isAllowed",
|
|
"isVpn"
|
|
]
|
|
},
|
|
"LockingRank": {
|
|
"type": "object",
|
|
"properties": {
|
|
"holder": {
|
|
"type": "string"
|
|
},
|
|
"position": {
|
|
"type": "number"
|
|
},
|
|
"lockedAmount": {
|
|
"type": "string"
|
|
},
|
|
"unlockedAmount": {
|
|
"type": "string"
|
|
},
|
|
"withdrawnAmount": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"holder",
|
|
"position",
|
|
"lockedAmount",
|
|
"unlockedAmount",
|
|
"withdrawnAmount"
|
|
]
|
|
},
|
|
"LockingRankPage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/LockingRank"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"LockEventItem": {
|
|
"type": "object",
|
|
"properties": {
|
|
"eventType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"LOCKED"
|
|
]
|
|
},
|
|
"executionDate": {
|
|
"type": "string"
|
|
},
|
|
"transactionHash": {
|
|
"type": "string"
|
|
},
|
|
"holder": {
|
|
"type": "string"
|
|
},
|
|
"amount": {
|
|
"type": "string"
|
|
},
|
|
"logIndex": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"eventType",
|
|
"executionDate",
|
|
"transactionHash",
|
|
"holder",
|
|
"amount",
|
|
"logIndex"
|
|
]
|
|
},
|
|
"UnlockEventItem": {
|
|
"type": "object",
|
|
"properties": {
|
|
"eventType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"UNLOCKED"
|
|
]
|
|
},
|
|
"executionDate": {
|
|
"type": "string"
|
|
},
|
|
"transactionHash": {
|
|
"type": "string"
|
|
},
|
|
"holder": {
|
|
"type": "string"
|
|
},
|
|
"amount": {
|
|
"type": "string"
|
|
},
|
|
"logIndex": {
|
|
"type": "string"
|
|
},
|
|
"unlockIndex": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"eventType",
|
|
"executionDate",
|
|
"transactionHash",
|
|
"holder",
|
|
"amount",
|
|
"logIndex",
|
|
"unlockIndex"
|
|
]
|
|
},
|
|
"WithdrawEventItem": {
|
|
"type": "object",
|
|
"properties": {
|
|
"eventType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"WITHDRAWN"
|
|
]
|
|
},
|
|
"executionDate": {
|
|
"type": "string"
|
|
},
|
|
"transactionHash": {
|
|
"type": "string"
|
|
},
|
|
"holder": {
|
|
"type": "string"
|
|
},
|
|
"amount": {
|
|
"type": "string"
|
|
},
|
|
"logIndex": {
|
|
"type": "string"
|
|
},
|
|
"unlockIndex": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"eventType",
|
|
"executionDate",
|
|
"transactionHash",
|
|
"holder",
|
|
"amount",
|
|
"logIndex",
|
|
"unlockIndex"
|
|
]
|
|
},
|
|
"LockingEventPage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/LockEventItem"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/UnlockEventItem"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/WithdrawEventItem"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"Contract": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"displayName": {
|
|
"type": "string"
|
|
},
|
|
"logoUri": {
|
|
"type": "string"
|
|
},
|
|
"contractAbi": {
|
|
"type": "object",
|
|
"nullable": true
|
|
},
|
|
"trustedForDelegateCall": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"name",
|
|
"displayName",
|
|
"logoUri",
|
|
"trustedForDelegateCall"
|
|
]
|
|
},
|
|
"TransactionDataDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"data": {
|
|
"type": "string",
|
|
"description": "Hexadecimal value"
|
|
},
|
|
"to": {
|
|
"type": "string",
|
|
"description": "The target Ethereum address"
|
|
}
|
|
},
|
|
"required": [
|
|
"data"
|
|
]
|
|
},
|
|
"Operation": {
|
|
"type": "number",
|
|
"enum": [
|
|
0,
|
|
1
|
|
],
|
|
"description": "Operation type: 0 for CALL, 1 for DELEGATE"
|
|
},
|
|
"BaseDataDecoded": {
|
|
"type": "object",
|
|
"properties": {
|
|
"method": {
|
|
"type": "string"
|
|
},
|
|
"parameters": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/DataDecodedParameter"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"method"
|
|
]
|
|
},
|
|
"MultiSend": {
|
|
"type": "object",
|
|
"properties": {
|
|
"operation": {
|
|
"description": "Operation type: 0 for CALL, 1 for DELEGATE",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Operation"
|
|
}
|
|
]
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"dataDecoded": {
|
|
"$ref": "#/components/schemas/BaseDataDecoded"
|
|
},
|
|
"to": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"description": "Hexadecimal encoded data",
|
|
"pattern": "^0x[0-9a-fA-F]*$"
|
|
}
|
|
},
|
|
"required": [
|
|
"operation",
|
|
"value",
|
|
"to",
|
|
"data"
|
|
]
|
|
},
|
|
"DataDecodedParameter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"description": "Parameter value - typically a string, but may be an array of strings for array types (e.g., address[], uint256[])",
|
|
"oneOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"valueDecoded": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/BaseDataDecoded"
|
|
},
|
|
{
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/MultiSend"
|
|
}
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"type",
|
|
"value"
|
|
]
|
|
},
|
|
"DataDecoded": {
|
|
"type": "object",
|
|
"properties": {
|
|
"method": {
|
|
"type": "string"
|
|
},
|
|
"parameters": {
|
|
"nullable": true,
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/DataDecodedParameter"
|
|
}
|
|
},
|
|
"accuracy": {
|
|
"type": "string",
|
|
"enum": [
|
|
"FULL_MATCH",
|
|
"PARTIAL_MATCH",
|
|
"ONLY_FUNCTION_MATCH",
|
|
"NO_MATCH",
|
|
"UNKNOWN"
|
|
],
|
|
"default": "UNKNOWN"
|
|
}
|
|
},
|
|
"required": [
|
|
"method"
|
|
]
|
|
},
|
|
"AddRecoveryModuleDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"moduleAddress": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"moduleAddress"
|
|
]
|
|
},
|
|
"GetEstimationDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"to": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"operation": {
|
|
"description": "Operation type: 0 for CALL, 1 for DELEGATE",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Operation"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"to",
|
|
"value",
|
|
"operation"
|
|
]
|
|
},
|
|
"EstimationResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"currentNonce": {
|
|
"type": "number"
|
|
},
|
|
"recommendedNonce": {
|
|
"type": "number"
|
|
},
|
|
"safeTxGas": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"currentNonce",
|
|
"recommendedNonce",
|
|
"safeTxGas"
|
|
]
|
|
},
|
|
"FeePreviewTransactionDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"to": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"type": "string"
|
|
},
|
|
"operation": {
|
|
"description": "Operation type: 0 for CALL, 1 for DELEGATE",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Operation"
|
|
}
|
|
]
|
|
},
|
|
"gasToken": {
|
|
"type": "string",
|
|
"description": "Gas token address (0x0...0 for native token)",
|
|
"example": "0x0000000000000000000000000000000000000000"
|
|
},
|
|
"numberSignatures": {
|
|
"type": "number",
|
|
"description": "Number of signatures required for execution",
|
|
"example": 2,
|
|
"minimum": 1
|
|
},
|
|
"fiatCode": {
|
|
"type": "string",
|
|
"description": "Fiat currency code for relay cost conversion (e.g. EUR, GBP). Defaults to USD.",
|
|
"example": "EUR"
|
|
}
|
|
},
|
|
"required": [
|
|
"to",
|
|
"value",
|
|
"data",
|
|
"operation",
|
|
"gasToken",
|
|
"numberSignatures"
|
|
]
|
|
},
|
|
"FeePreviewTxData": {
|
|
"type": "object",
|
|
"properties": {
|
|
"chainId": {
|
|
"type": "number",
|
|
"description": "Chain ID",
|
|
"example": 1
|
|
},
|
|
"safeAddress": {
|
|
"type": "string",
|
|
"description": "Safe address",
|
|
"example": "0x..."
|
|
},
|
|
"safeTxGas": {
|
|
"type": "string",
|
|
"description": "Safe transaction gas",
|
|
"example": "150000"
|
|
},
|
|
"baseGas": {
|
|
"type": "string",
|
|
"description": "Base gas for relay overhead",
|
|
"example": "48564"
|
|
},
|
|
"gasPrice": {
|
|
"type": "string",
|
|
"description": "Gas price per gas unit. Denominated in wei when `gasToken` is the native token (zero address), or in the ERC20 gas token atomic units per gas otherwise",
|
|
"example": "195000000000000"
|
|
},
|
|
"gasToken": {
|
|
"type": "string",
|
|
"description": "Gas token address",
|
|
"example": "0x0000000000000000000000000000000000000000"
|
|
},
|
|
"refundReceiver": {
|
|
"type": "string",
|
|
"description": "Refund receiver address",
|
|
"example": "0x0000000000000000000000000000000000000000"
|
|
},
|
|
"numberSignatures": {
|
|
"type": "number",
|
|
"description": "Number of signatures",
|
|
"example": 2
|
|
}
|
|
},
|
|
"required": [
|
|
"chainId",
|
|
"safeAddress",
|
|
"safeTxGas",
|
|
"baseGas",
|
|
"gasPrice",
|
|
"gasToken",
|
|
"refundReceiver",
|
|
"numberSignatures"
|
|
]
|
|
},
|
|
"FeePreviewRelayCost": {
|
|
"type": "object",
|
|
"properties": {
|
|
"fiatCode": {
|
|
"type": "string",
|
|
"description": "Fiat currency code",
|
|
"example": "USD"
|
|
},
|
|
"fiatValue": {
|
|
"type": "string",
|
|
"description": "Relay cost as a string",
|
|
"example": "0.0025"
|
|
}
|
|
},
|
|
"required": [
|
|
"fiatCode",
|
|
"fiatValue"
|
|
]
|
|
},
|
|
"PriceSource": {
|
|
"type": "string",
|
|
"enum": [
|
|
"COINGECKO"
|
|
],
|
|
"description": "Price data source"
|
|
},
|
|
"FeePreviewPricingContext": {
|
|
"type": "object",
|
|
"properties": {
|
|
"phase": {
|
|
"type": "number",
|
|
"description": "Pricing phase"
|
|
},
|
|
"priceSource": {
|
|
"description": "Price data source",
|
|
"example": "COINGECKO",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/PriceSource"
|
|
}
|
|
]
|
|
},
|
|
"priceTimestamp": {
|
|
"type": "number",
|
|
"description": "Price snapshot Unix timestamp",
|
|
"example": 1700000000
|
|
},
|
|
"gasPriceVolatilityBuffer": {
|
|
"type": "number",
|
|
"description": "Gas price volatility buffer multiplier",
|
|
"example": 1.3
|
|
}
|
|
},
|
|
"required": [
|
|
"phase",
|
|
"priceSource",
|
|
"priceTimestamp",
|
|
"gasPriceVolatilityBuffer"
|
|
]
|
|
},
|
|
"FeePreviewResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"txData": {
|
|
"$ref": "#/components/schemas/FeePreviewTxData"
|
|
},
|
|
"relayCost": {
|
|
"$ref": "#/components/schemas/FeePreviewRelayCost"
|
|
},
|
|
"pricingContextSnapshot": {
|
|
"$ref": "#/components/schemas/FeePreviewPricingContext"
|
|
}
|
|
},
|
|
"required": [
|
|
"txData",
|
|
"relayCost",
|
|
"pricingContextSnapshot"
|
|
]
|
|
},
|
|
"TypedDataParameter": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"type"
|
|
]
|
|
},
|
|
"TypedDataDomain": {
|
|
"type": "object",
|
|
"properties": {
|
|
"chainId": {
|
|
"type": "number"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"salt": {
|
|
"type": "string"
|
|
},
|
|
"verifyingContract": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"TypedData": {
|
|
"type": "object",
|
|
"properties": {
|
|
"domain": {
|
|
"$ref": "#/components/schemas/TypedDataDomain"
|
|
},
|
|
"primaryType": {
|
|
"type": "string"
|
|
},
|
|
"types": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"items": {
|
|
"$ref": "#/components/schemas/TypedDataParameter"
|
|
},
|
|
"type": "array"
|
|
}
|
|
},
|
|
"message": {
|
|
"type": "object",
|
|
"additionalProperties": true
|
|
}
|
|
},
|
|
"required": [
|
|
"domain",
|
|
"primaryType",
|
|
"types",
|
|
"message"
|
|
]
|
|
},
|
|
"AddressInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"logoUri": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"value"
|
|
]
|
|
},
|
|
"MessageConfirmation": {
|
|
"type": "object",
|
|
"properties": {
|
|
"owner": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"signature": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"owner",
|
|
"signature"
|
|
]
|
|
},
|
|
"Message": {
|
|
"type": "object",
|
|
"properties": {
|
|
"messageHash": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NEEDS_CONFIRMATION",
|
|
"CONFIRMED"
|
|
]
|
|
},
|
|
"logoUri": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"message": {
|
|
"oneOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TypedData"
|
|
}
|
|
]
|
|
},
|
|
"creationTimestamp": {
|
|
"type": "number"
|
|
},
|
|
"modifiedTimestamp": {
|
|
"type": "number"
|
|
},
|
|
"confirmationsSubmitted": {
|
|
"type": "number"
|
|
},
|
|
"confirmationsRequired": {
|
|
"type": "number"
|
|
},
|
|
"proposedBy": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"confirmations": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/MessageConfirmation"
|
|
}
|
|
},
|
|
"preparedSignature": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"origin": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"messageHash",
|
|
"status",
|
|
"message",
|
|
"creationTimestamp",
|
|
"modifiedTimestamp",
|
|
"confirmationsSubmitted",
|
|
"confirmationsRequired",
|
|
"proposedBy",
|
|
"confirmations"
|
|
]
|
|
},
|
|
"MessageItem": {
|
|
"type": "object",
|
|
"properties": {
|
|
"messageHash": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NEEDS_CONFIRMATION",
|
|
"CONFIRMED"
|
|
]
|
|
},
|
|
"logoUri": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"message": {
|
|
"oneOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TypedData"
|
|
}
|
|
]
|
|
},
|
|
"creationTimestamp": {
|
|
"type": "number"
|
|
},
|
|
"modifiedTimestamp": {
|
|
"type": "number"
|
|
},
|
|
"confirmationsSubmitted": {
|
|
"type": "number"
|
|
},
|
|
"confirmationsRequired": {
|
|
"type": "number"
|
|
},
|
|
"proposedBy": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"confirmations": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/MessageConfirmation"
|
|
}
|
|
},
|
|
"preparedSignature": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"origin": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"MESSAGE"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"messageHash",
|
|
"status",
|
|
"message",
|
|
"creationTimestamp",
|
|
"modifiedTimestamp",
|
|
"confirmationsSubmitted",
|
|
"confirmationsRequired",
|
|
"proposedBy",
|
|
"confirmations",
|
|
"type"
|
|
]
|
|
},
|
|
"DateLabel": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"DATE_LABEL"
|
|
]
|
|
},
|
|
"timestamp": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"timestamp"
|
|
]
|
|
},
|
|
"MessagePage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/MessageItem"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/DateLabel"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"CreateMessageDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": {
|
|
"oneOf": [
|
|
{
|
|
"type": "string"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TypedData"
|
|
}
|
|
]
|
|
},
|
|
"safeAppId": {
|
|
"type": "number",
|
|
"nullable": true,
|
|
"deprecated": true
|
|
},
|
|
"signature": {
|
|
"type": "string"
|
|
},
|
|
"origin": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"message",
|
|
"signature"
|
|
]
|
|
},
|
|
"UpdateMessageSignatureDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"signature": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"signature"
|
|
]
|
|
},
|
|
"UserWallet": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "number"
|
|
},
|
|
"address": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"address"
|
|
]
|
|
},
|
|
"UserWithWallets": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "number"
|
|
},
|
|
"status": {
|
|
"type": "number",
|
|
"enum": [
|
|
0,
|
|
1
|
|
]
|
|
},
|
|
"wallets": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/UserWallet"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"status",
|
|
"wallets"
|
|
]
|
|
},
|
|
"CreatedUserWithWallet": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"id"
|
|
]
|
|
},
|
|
"WalletAddedToUser": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"id"
|
|
]
|
|
},
|
|
"SpaceAddressBookItemDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"chainIds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"createdBy": {
|
|
"type": "string",
|
|
"description": "Email or wallet address of the creator, \"Unknown user\" if the user has no display identity, or \"Deleted user\""
|
|
},
|
|
"createdByUserId": {
|
|
"type": "number",
|
|
"description": "User ID of the creator"
|
|
},
|
|
"lastUpdatedBy": {
|
|
"type": "string",
|
|
"description": "Email or wallet address of the last editor, \"Unknown user\" if the user has no display identity, or \"Deleted user\""
|
|
},
|
|
"lastUpdatedByUserId": {
|
|
"type": "number",
|
|
"description": "User ID of the last editor"
|
|
},
|
|
"createdAt": {
|
|
"format": "date-time",
|
|
"type": "string"
|
|
},
|
|
"updatedAt": {
|
|
"format": "date-time",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"address",
|
|
"chainIds",
|
|
"createdBy",
|
|
"createdByUserId",
|
|
"lastUpdatedBy",
|
|
"lastUpdatedByUserId",
|
|
"createdAt",
|
|
"updatedAt"
|
|
]
|
|
},
|
|
"SpaceAddressBookDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"spaceId": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SpaceAddressBookItemDto"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"spaceId",
|
|
"data"
|
|
]
|
|
},
|
|
"AddressBookItem": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"chainIds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"address",
|
|
"chainIds"
|
|
]
|
|
},
|
|
"UpsertAddressBookItemsDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"items": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AddressBookItem"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"items"
|
|
]
|
|
},
|
|
"UserAddressBookItemDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"chainIds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"createdBy": {
|
|
"type": "string"
|
|
},
|
|
"createdAt": {
|
|
"type": "object"
|
|
},
|
|
"updatedAt": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"address",
|
|
"chainIds",
|
|
"createdBy",
|
|
"createdAt",
|
|
"updatedAt"
|
|
]
|
|
},
|
|
"UserAddressBookDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"spaceId": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/UserAddressBookItemDto"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"spaceId",
|
|
"data"
|
|
]
|
|
},
|
|
"AddressBookRequestItemDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "number"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"chainIds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"requestedBy": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"PENDING",
|
|
"APPROVED",
|
|
"REJECTED"
|
|
]
|
|
},
|
|
"createdAt": {
|
|
"format": "date-time",
|
|
"type": "string"
|
|
},
|
|
"updatedAt": {
|
|
"format": "date-time",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"address",
|
|
"chainIds",
|
|
"requestedBy",
|
|
"status",
|
|
"createdAt",
|
|
"updatedAt"
|
|
]
|
|
},
|
|
"AddressBookRequestsDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"spaceId": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AddressBookRequestItemDto"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"spaceId",
|
|
"data"
|
|
]
|
|
},
|
|
"CreateAddressBookRequestDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string",
|
|
"description": "Address of the private contact to request adding to space"
|
|
}
|
|
},
|
|
"required": [
|
|
"address"
|
|
]
|
|
},
|
|
"CreateSpaceDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"name"
|
|
]
|
|
},
|
|
"CreateSpaceResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"id": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"id"
|
|
]
|
|
},
|
|
"UserDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"id"
|
|
]
|
|
},
|
|
"SpaceMemberDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"role": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ADMIN",
|
|
"MEMBER"
|
|
]
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"invitedBy": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"INVITED",
|
|
"ACTIVE",
|
|
"DECLINED"
|
|
]
|
|
},
|
|
"user": {
|
|
"$ref": "#/components/schemas/UserDto"
|
|
}
|
|
},
|
|
"required": [
|
|
"role",
|
|
"name",
|
|
"invitedBy",
|
|
"status",
|
|
"user"
|
|
]
|
|
},
|
|
"GetSpaceResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "number"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"members": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SpaceMemberDto"
|
|
}
|
|
},
|
|
"safeCount": {
|
|
"type": "number",
|
|
"description": "Total count of Safes in the space",
|
|
"example": 5
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"members",
|
|
"safeCount"
|
|
]
|
|
},
|
|
"UpdateSpaceDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ACTIVE"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"UpdateSpaceResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"id"
|
|
]
|
|
},
|
|
"SpaceSafeDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"chainId": {
|
|
"type": "string"
|
|
},
|
|
"address": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"chainId",
|
|
"address"
|
|
]
|
|
},
|
|
"CreateSpaceSafesDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"safes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SpaceSafeDto"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"safes"
|
|
]
|
|
},
|
|
"GetSpaceSafeResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"safes": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"example": {
|
|
"{chainId}": [
|
|
"0x..."
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"safes"
|
|
]
|
|
},
|
|
"DeleteSpaceSafesDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"safes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SpaceSafeDto"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"safes"
|
|
]
|
|
},
|
|
"InviteUserDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"minLength": 3,
|
|
"maxLength": 30
|
|
},
|
|
"role": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ADMIN",
|
|
"MEMBER"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"name",
|
|
"role"
|
|
]
|
|
},
|
|
"InviteUsersDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"users": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/InviteUserDto"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"users"
|
|
]
|
|
},
|
|
"Invitation": {
|
|
"type": "object",
|
|
"properties": {
|
|
"userId": {
|
|
"type": "number"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"spaceId": {
|
|
"type": "number"
|
|
},
|
|
"role": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ADMIN",
|
|
"MEMBER"
|
|
]
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"INVITED",
|
|
"ACTIVE",
|
|
"DECLINED"
|
|
]
|
|
},
|
|
"invitedBy": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"userId",
|
|
"name",
|
|
"spaceId",
|
|
"role",
|
|
"status"
|
|
]
|
|
},
|
|
"AcceptInviteDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"minLength": 3,
|
|
"maxLength": 30
|
|
}
|
|
},
|
|
"required": [
|
|
"name"
|
|
]
|
|
},
|
|
"MemberUser": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "number"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"PENDING",
|
|
"ACTIVE"
|
|
]
|
|
},
|
|
"email": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"status",
|
|
"email"
|
|
]
|
|
},
|
|
"MemberDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "number"
|
|
},
|
|
"role": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ADMIN",
|
|
"MEMBER"
|
|
]
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"INVITED",
|
|
"ACTIVE",
|
|
"DECLINED"
|
|
]
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"alias": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"invitedBy": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"createdAt": {
|
|
"format": "date-time",
|
|
"type": "string"
|
|
},
|
|
"updatedAt": {
|
|
"format": "date-time",
|
|
"type": "string"
|
|
},
|
|
"user": {
|
|
"$ref": "#/components/schemas/MemberUser"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"role",
|
|
"status",
|
|
"name",
|
|
"createdAt",
|
|
"updatedAt",
|
|
"user"
|
|
]
|
|
},
|
|
"MembersDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"members": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/MemberDto"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"members"
|
|
]
|
|
},
|
|
"UpdateRoleDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"role": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ADMIN",
|
|
"MEMBER"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"role"
|
|
]
|
|
},
|
|
"UpdateMemberAliasDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"alias": {
|
|
"type": "string",
|
|
"description": "The new alias for the member"
|
|
}
|
|
},
|
|
"required": [
|
|
"alias"
|
|
]
|
|
},
|
|
"CounterfactualSafeDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"chainId": {
|
|
"type": "string"
|
|
},
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"factoryAddress": {
|
|
"type": "string"
|
|
},
|
|
"masterCopy": {
|
|
"type": "string"
|
|
},
|
|
"saltNonce": {
|
|
"type": "string"
|
|
},
|
|
"safeVersion": {
|
|
"type": "string"
|
|
},
|
|
"threshold": {
|
|
"type": "number"
|
|
},
|
|
"owners": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"fallbackHandler": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"to": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"data": {
|
|
"type": "string"
|
|
},
|
|
"paymentToken": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"payment": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"paymentReceiver": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"chainId",
|
|
"address",
|
|
"factoryAddress",
|
|
"masterCopy",
|
|
"saltNonce",
|
|
"safeVersion",
|
|
"threshold",
|
|
"owners",
|
|
"data"
|
|
]
|
|
},
|
|
"CreateCounterfactualSafesDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"safes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/CounterfactualSafeDto"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"safes"
|
|
]
|
|
},
|
|
"GetCounterfactualSafeItem": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"factoryAddress": {
|
|
"type": "string"
|
|
},
|
|
"masterCopy": {
|
|
"type": "string"
|
|
},
|
|
"saltNonce": {
|
|
"type": "string"
|
|
},
|
|
"safeVersion": {
|
|
"type": "string"
|
|
},
|
|
"threshold": {
|
|
"type": "number"
|
|
},
|
|
"owners": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"fallbackHandler": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"to": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"data": {
|
|
"type": "string"
|
|
},
|
|
"paymentToken": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"payment": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"paymentReceiver": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"factoryAddress",
|
|
"masterCopy",
|
|
"saltNonce",
|
|
"safeVersion",
|
|
"threshold",
|
|
"owners",
|
|
"fallbackHandler",
|
|
"to",
|
|
"data",
|
|
"paymentToken",
|
|
"payment",
|
|
"paymentReceiver"
|
|
]
|
|
},
|
|
"GetCounterfactualSafesResponse": {
|
|
"type": "object",
|
|
"properties": {
|
|
"safes": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/GetCounterfactualSafeItem"
|
|
}
|
|
},
|
|
"example": {
|
|
"{chainId}": [
|
|
{
|
|
"address": "0x...",
|
|
"factoryAddress": "0x...",
|
|
"masterCopy": "0x...",
|
|
"saltNonce": "1712000000000",
|
|
"safeVersion": "1.4.1",
|
|
"threshold": 1,
|
|
"owners": [
|
|
"0x..."
|
|
],
|
|
"fallbackHandler": "0x...",
|
|
"to": null,
|
|
"data": "0x...",
|
|
"paymentToken": null,
|
|
"payment": null,
|
|
"paymentReceiver": null
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"safes"
|
|
]
|
|
},
|
|
"DeleteCounterfactualSafeDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"chainId": {
|
|
"type": "string"
|
|
},
|
|
"address": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"chainId",
|
|
"address"
|
|
]
|
|
},
|
|
"DeleteCounterfactualSafesDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"safes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/DeleteCounterfactualSafeDto"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"safes"
|
|
]
|
|
},
|
|
"SafeList": {
|
|
"type": "object",
|
|
"properties": {
|
|
"safes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"safes"
|
|
]
|
|
},
|
|
"RelayDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"version": {
|
|
"type": "string"
|
|
},
|
|
"to": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"type": "string"
|
|
},
|
|
"gasLimit": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"description": "Accepted for backward compatibility and validation; not forwarded to the relay provider (Gelato)."
|
|
},
|
|
"safeTxHash": {
|
|
"type": "string",
|
|
"description": "Safe transaction hash for relay-fee eligibility check"
|
|
}
|
|
},
|
|
"required": [
|
|
"version",
|
|
"to",
|
|
"data"
|
|
]
|
|
},
|
|
"Relay": {
|
|
"type": "object",
|
|
"properties": {
|
|
"taskId": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"taskId"
|
|
]
|
|
},
|
|
"RelayTaskStatusReceipt": {
|
|
"type": "object",
|
|
"properties": {
|
|
"transactionHash": {
|
|
"type": "string",
|
|
"example": "0x4e4bb4493b2183061c3a0106ea96604edcc84f83313dbc0ab718abb1523d1042"
|
|
}
|
|
},
|
|
"required": [
|
|
"transactionHash"
|
|
]
|
|
},
|
|
"RelayTaskStatus": {
|
|
"type": "object",
|
|
"properties": {
|
|
"status": {
|
|
"type": "number",
|
|
"description": "Relay task status code: 100=Pending, 110=Submitted, 200=Included, 400=Rejected, 500=Reverted",
|
|
"enum": [
|
|
100,
|
|
110,
|
|
200,
|
|
400,
|
|
500
|
|
],
|
|
"example": 200
|
|
},
|
|
"receipt": {
|
|
"description": "On-chain receipt. Only present when status is 200 (Included) or 500 (Reverted)",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/RelayTaskStatusReceipt"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"status"
|
|
]
|
|
},
|
|
"RelaysRemaining": {
|
|
"type": "object",
|
|
"properties": {
|
|
"remaining": {
|
|
"type": "number"
|
|
},
|
|
"limit": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"remaining",
|
|
"limit"
|
|
]
|
|
},
|
|
"SafeAppProvider": {
|
|
"type": "object",
|
|
"properties": {
|
|
"url": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"url",
|
|
"name"
|
|
]
|
|
},
|
|
"SafeAppAccessControl": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"nullable": true,
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"type"
|
|
]
|
|
},
|
|
"SafeAppSocialProfile": {
|
|
"type": "object",
|
|
"properties": {
|
|
"platform": {
|
|
"type": "string",
|
|
"enum": [
|
|
"DISCORD",
|
|
"GITHUB",
|
|
"TWITTER",
|
|
"TELEGRAM",
|
|
"UNKNOWN"
|
|
]
|
|
},
|
|
"url": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"platform",
|
|
"url"
|
|
]
|
|
},
|
|
"SafeApp": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "number"
|
|
},
|
|
"url": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"iconUrl": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"chainIds": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"provider": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SafeAppProvider"
|
|
}
|
|
]
|
|
},
|
|
"accessControl": {
|
|
"$ref": "#/components/schemas/SafeAppAccessControl"
|
|
},
|
|
"tags": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"features": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"developerWebsite": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"socialProfiles": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SafeAppSocialProfile"
|
|
}
|
|
},
|
|
"featured": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"url",
|
|
"name",
|
|
"description",
|
|
"chainIds",
|
|
"accessControl",
|
|
"tags",
|
|
"features",
|
|
"socialProfiles",
|
|
"featured"
|
|
]
|
|
},
|
|
"SafeState": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"chainId": {
|
|
"type": "string"
|
|
},
|
|
"nonce": {
|
|
"type": "number"
|
|
},
|
|
"threshold": {
|
|
"type": "number"
|
|
},
|
|
"owners": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"implementation": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"modules": {
|
|
"nullable": true,
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"fallbackHandler": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
]
|
|
},
|
|
"guard": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
]
|
|
},
|
|
"version": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"implementationVersionState": {
|
|
"type": "string",
|
|
"enum": [
|
|
"UP_TO_DATE",
|
|
"OUTDATED",
|
|
"UNKNOWN"
|
|
]
|
|
},
|
|
"collectiblesTag": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"txQueuedTag": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"txHistoryTag": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"messagesTag": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"chainId",
|
|
"nonce",
|
|
"threshold",
|
|
"owners",
|
|
"implementation",
|
|
"implementationVersionState"
|
|
]
|
|
},
|
|
"SafeNonces": {
|
|
"type": "object",
|
|
"properties": {
|
|
"currentNonce": {
|
|
"type": "number"
|
|
},
|
|
"recommendedNonce": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"currentNonce",
|
|
"recommendedNonce"
|
|
]
|
|
},
|
|
"SafeOverview": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"chainId": {
|
|
"type": "string"
|
|
},
|
|
"threshold": {
|
|
"type": "number"
|
|
},
|
|
"owners": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"fiatTotal": {
|
|
"type": "string"
|
|
},
|
|
"queued": {
|
|
"type": "number"
|
|
},
|
|
"awaitingConfirmation": {
|
|
"type": "number",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"chainId",
|
|
"threshold",
|
|
"owners",
|
|
"fiatTotal",
|
|
"queued"
|
|
]
|
|
},
|
|
"SingleRecipientAnalysisResultDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"severity": {
|
|
"type": "string",
|
|
"description": "Severity level indicating the importance and risk",
|
|
"enum": [
|
|
"OK",
|
|
"INFO",
|
|
"WARN",
|
|
"CRITICAL"
|
|
]
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Recipient interaction status code",
|
|
"enum": [
|
|
"NEW_RECIPIENT",
|
|
"RECURRING_RECIPIENT",
|
|
"LOW_ACTIVITY",
|
|
"FAILED"
|
|
],
|
|
"example": "NEW_RECIPIENT"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "User-facing title of the finding"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Detailed description explaining the finding and its implications"
|
|
},
|
|
"error": {
|
|
"type": "string",
|
|
"description": "Error message for failed analysis"
|
|
}
|
|
},
|
|
"required": [
|
|
"severity",
|
|
"type",
|
|
"title",
|
|
"description"
|
|
]
|
|
},
|
|
"SingleRecipientAnalysisDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"RECIPIENT_INTERACTION": {
|
|
"description": "Analysis results related to recipient interaction history. Shows whether this is a new or recurring recipient.",
|
|
"example": [
|
|
{
|
|
"severity": "INFO",
|
|
"type": "NEW_RECIPIENT",
|
|
"title": "New recipient",
|
|
"description": "This is the first time you are interacting with this recipient."
|
|
}
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SingleRecipientAnalysisResultDto"
|
|
}
|
|
},
|
|
"RECIPIENT_ACTIVITY": {
|
|
"description": "Analysis results related to recipient activity. Shows whether this is a low activity recipient. (Available only for Safes)",
|
|
"example": [
|
|
{
|
|
"severity": "WARN",
|
|
"type": "LOW_ACTIVITY",
|
|
"title": "Low activity recipient",
|
|
"description": "This address has few transactions."
|
|
}
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SingleRecipientAnalysisResultDto"
|
|
}
|
|
},
|
|
"isSafe": {
|
|
"type": "boolean",
|
|
"description": "Indicates whether the analyzed recipient address is a Safe.",
|
|
"example": false
|
|
}
|
|
},
|
|
"required": [
|
|
"RECIPIENT_INTERACTION",
|
|
"isSafe"
|
|
]
|
|
},
|
|
"CounterpartyAnalysisRequestDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"to": {
|
|
"type": "string",
|
|
"description": "Recipient address of the transaction."
|
|
},
|
|
"value": {
|
|
"type": "string",
|
|
"description": "Amount to send with the transaction."
|
|
},
|
|
"data": {
|
|
"type": "string",
|
|
"description": "Hex-encoded data payload for the transaction."
|
|
},
|
|
"operation": {
|
|
"type": "number",
|
|
"enum": [
|
|
0,
|
|
1
|
|
],
|
|
"description": "Operation type: 0 for CALL, 1 for DELEGATECALL."
|
|
}
|
|
},
|
|
"required": [
|
|
"to",
|
|
"value",
|
|
"data",
|
|
"operation"
|
|
]
|
|
},
|
|
"RecipientResultDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"severity": {
|
|
"type": "string",
|
|
"description": "Severity level indicating the importance and risk",
|
|
"enum": [
|
|
"OK",
|
|
"INFO",
|
|
"WARN",
|
|
"CRITICAL"
|
|
]
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Bridge compatibility status code",
|
|
"enum": [
|
|
"NEW_RECIPIENT",
|
|
"RECURRING_RECIPIENT",
|
|
"LOW_ACTIVITY",
|
|
"INCOMPATIBLE_SAFE",
|
|
"MISSING_OWNERSHIP",
|
|
"UNSUPPORTED_NETWORK",
|
|
"DIFFERENT_SAFE_SETUP",
|
|
"FAILED"
|
|
],
|
|
"example": "MISSING_OWNERSHIP"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "User-facing title of the finding"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Detailed description explaining the finding and its implications"
|
|
},
|
|
"error": {
|
|
"type": "string",
|
|
"description": "Error message for failed analysis"
|
|
},
|
|
"targetChainId": {
|
|
"type": "string",
|
|
"description": "Target chain ID for bridge operations. Only present for BridgeStatus."
|
|
}
|
|
},
|
|
"required": [
|
|
"severity",
|
|
"type",
|
|
"title",
|
|
"description"
|
|
]
|
|
},
|
|
"RecipientAnalysisDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"isSafe": {
|
|
"type": "boolean",
|
|
"description": "Indicates whether the analyzed recipient address is a Safe.",
|
|
"example": true
|
|
},
|
|
"RECIPIENT_INTERACTION": {
|
|
"description": "Analysis results related to recipient interaction history. Shows whether this is a new or recurring recipient.",
|
|
"example": [
|
|
{
|
|
"severity": "INFO",
|
|
"type": "NEW_RECIPIENT",
|
|
"title": "New recipient",
|
|
"description": "This is the first time you are interacting with this recipient."
|
|
}
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/RecipientResultDto"
|
|
}
|
|
},
|
|
"RECIPIENT_ACTIVITY": {
|
|
"description": "Analysis results related to recipient activity frequency. Shows whether this is a low activity recipient.",
|
|
"example": [
|
|
{
|
|
"severity": "WARN",
|
|
"type": "LOW_ACTIVITY",
|
|
"title": "Low activity recipient",
|
|
"description": "This address has few transactions."
|
|
}
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/RecipientResultDto"
|
|
}
|
|
},
|
|
"BRIDGE": {
|
|
"description": "Analysis results for cross-chain bridge operations. Identifies compatibility issues, ownership problems, or unsupported networks.",
|
|
"example": [
|
|
{
|
|
"severity": "WARN",
|
|
"type": "MISSING_OWNERSHIP",
|
|
"title": "No ownership on target chain",
|
|
"description": "You do not have ownership of a Safe on the target chain.",
|
|
"targetChainId": "137"
|
|
}
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/RecipientResultDto"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"isSafe"
|
|
]
|
|
},
|
|
"ContractAnalysisResultDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"severity": {
|
|
"type": "string",
|
|
"description": "Severity level indicating the importance and risk",
|
|
"enum": [
|
|
"OK",
|
|
"INFO",
|
|
"WARN",
|
|
"CRITICAL"
|
|
]
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Contract verification status code",
|
|
"enum": [
|
|
"VERIFIED",
|
|
"NOT_VERIFIED",
|
|
"NOT_VERIFIED_BY_SAFE",
|
|
"VERIFICATION_UNAVAILABLE",
|
|
"NEW_CONTRACT",
|
|
"KNOWN_CONTRACT",
|
|
"UNEXPECTED_DELEGATECALL",
|
|
"UNOFFICIAL_FALLBACK_HANDLER",
|
|
"FAILED"
|
|
],
|
|
"example": "VERIFIED"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "User-facing title of the finding"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Detailed description explaining the finding and its implications"
|
|
},
|
|
"error": {
|
|
"type": "string",
|
|
"description": "Error message for failed analysis"
|
|
}
|
|
},
|
|
"required": [
|
|
"severity",
|
|
"type",
|
|
"title",
|
|
"description"
|
|
]
|
|
},
|
|
"FallbackHandlerInfoDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string",
|
|
"description": "Address of the fallback handler contract"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Name of the fallback handler contract"
|
|
},
|
|
"logoUrl": {
|
|
"type": "string",
|
|
"description": "Logo URL for the fallback handler contract"
|
|
}
|
|
},
|
|
"required": [
|
|
"address"
|
|
]
|
|
},
|
|
"FallbackHandlerAnalysisResultDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"severity": {
|
|
"type": "string",
|
|
"description": "Severity level indicating the importance and risk",
|
|
"enum": [
|
|
"OK",
|
|
"INFO",
|
|
"WARN",
|
|
"CRITICAL"
|
|
]
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Status code for unofficial fallback handler",
|
|
"enum": [
|
|
"UNOFFICIAL_FALLBACK_HANDLER"
|
|
],
|
|
"example": "VERIFIED"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "User-facing title of the finding"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Detailed description explaining the finding and its implications"
|
|
},
|
|
"error": {
|
|
"type": "string",
|
|
"description": "Error message for failed analysis"
|
|
},
|
|
"fallbackHandler": {
|
|
"description": "Information about the fallback handler",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/FallbackHandlerInfoDto"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"severity",
|
|
"type",
|
|
"title",
|
|
"description"
|
|
]
|
|
},
|
|
"ContractAnalysisDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"logoUrl": {
|
|
"type": "string",
|
|
"description": "Logo URL for the contract",
|
|
"example": "https://example.com/logo.png"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Name of the contract",
|
|
"example": "Uniswap V3 Router"
|
|
},
|
|
"CONTRACT_VERIFICATION": {
|
|
"description": "Analysis results for contract verification status. Shows whether contracts are verified and source code is available.",
|
|
"example": [
|
|
{
|
|
"severity": "INFO",
|
|
"type": "VERIFIED",
|
|
"title": "Verified contract",
|
|
"description": "This contract has been verified and its source code is available"
|
|
}
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ContractAnalysisResultDto"
|
|
}
|
|
},
|
|
"CONTRACT_INTERACTION": {
|
|
"description": "Analysis results related to contract interaction history. Shows whether this is a new or previously interacted contract.",
|
|
"example": [
|
|
{
|
|
"severity": "INFO",
|
|
"type": "NEW_CONTRACT",
|
|
"title": "New contract",
|
|
"description": "This is the first time you are interacting with this contract"
|
|
}
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ContractAnalysisResultDto"
|
|
}
|
|
},
|
|
"DELEGATECALL": {
|
|
"description": "Analysis results for delegatecall operations. Identifies unexpected or potentially dangerous delegate calls.",
|
|
"example": [
|
|
{
|
|
"severity": "CRITICAL",
|
|
"type": "UNEXPECTED_DELEGATECALL",
|
|
"title": "Unexpected delegatecall",
|
|
"description": "An unexpected delegatecall operation was detected that could be dangerous"
|
|
}
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ContractAnalysisResultDto"
|
|
}
|
|
},
|
|
"FALLBACK_HANDLER": {
|
|
"description": "Analysis results for setFallbackHandler operations. Identifies untrusted or unofficial fallback handlers in the transactions.",
|
|
"example": [
|
|
{
|
|
"severity": "WARN",
|
|
"type": "UNOFFICIAL_FALLBACK_HANDLER",
|
|
"title": "Unofficial fallback handler",
|
|
"description": "Verify the fallback handler is trusted and secure before proceeding.",
|
|
"fallbackHandler": {
|
|
"address": "0x123",
|
|
"name": "CompatibilityFallbackHandler",
|
|
"logoUrl": "https://example.com/logo.png"
|
|
}
|
|
}
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/FallbackHandlerAnalysisResultDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"DeadlockAnalysisResultDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"severity": {
|
|
"type": "string",
|
|
"description": "Severity level indicating the importance and risk",
|
|
"enum": [
|
|
"OK",
|
|
"INFO",
|
|
"WARN",
|
|
"CRITICAL"
|
|
]
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Deadlock analysis status code",
|
|
"enum": [
|
|
"DEADLOCK_DETECTED",
|
|
"NESTED_SAFE_WARNING",
|
|
"FAILED"
|
|
],
|
|
"example": "DEADLOCK_DETECTED"
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "User-facing title of the finding"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Detailed description explaining the finding and its implications"
|
|
},
|
|
"error": {
|
|
"type": "string",
|
|
"description": "Error message for failed analysis"
|
|
}
|
|
},
|
|
"required": [
|
|
"severity",
|
|
"type",
|
|
"title",
|
|
"description"
|
|
]
|
|
},
|
|
"DeadlockAnalysisDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"DEADLOCK": {
|
|
"description": "Deadlock analysis findings. Identifies signing deadlock risks in nested Safe configurations.",
|
|
"example": [
|
|
{
|
|
"severity": "CRITICAL",
|
|
"type": "DEADLOCK_DETECTED",
|
|
"title": "Signing deadlock risk detected",
|
|
"description": "This change may create a signing cycle between Safes and can permanently lock funds. You will not be allowed to proceed forward."
|
|
}
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/DeadlockAnalysisResultDto"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"CounterpartyAnalysisDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"recipient": {
|
|
"type": "object",
|
|
"description": "Recipient analysis results mapped by address. Contains recipient interaction history and bridge analysis.type: Record<Address, RecipientAnalysisDto>.",
|
|
"additionalProperties": {
|
|
"$ref": "#/components/schemas/RecipientAnalysisDto"
|
|
},
|
|
"example": {
|
|
"0x0000000000000000000000000000000000000000": {
|
|
"isSafe": true,
|
|
"RECIPIENT_INTERACTION": [
|
|
{
|
|
"severity": "INFO",
|
|
"type": "NEW_RECIPIENT",
|
|
"title": "New recipient",
|
|
"description": "This is the first time you are interacting with this recipient"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"contract": {
|
|
"type": "object",
|
|
"description": "Contract analysis results mapped by address. Contains contract verification, interaction history, and delegatecall analysis.type: Record<Address, ContractAnalysisDto>.",
|
|
"additionalProperties": {
|
|
"$ref": "#/components/schemas/ContractAnalysisDto"
|
|
},
|
|
"example": {
|
|
"0x0000000000000000000000000000000000000000": {
|
|
"CONTRACT_VERIFICATION": [
|
|
{
|
|
"severity": "INFO",
|
|
"type": "VERIFIED",
|
|
"title": "Verified contract",
|
|
"description": "This contract has been verified and its source code is available"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"deadlock": {
|
|
"type": "object",
|
|
"description": "Deadlock analysis results mapped by Safe address. Contains signing deadlock risk findings for owner/threshold management transactions.",
|
|
"additionalProperties": {
|
|
"$ref": "#/components/schemas/DeadlockAnalysisDto"
|
|
},
|
|
"example": {
|
|
"0x0000000000000000000000000000000000000000": {
|
|
"DEADLOCK": [
|
|
{
|
|
"severity": "CRITICAL",
|
|
"type": "DEADLOCK_DETECTED",
|
|
"title": "Signing deadlock risk detected",
|
|
"description": "This change may create a signing cycle between Safes and can permanently lock funds. You will not be allowed to proceed forward."
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"recipient",
|
|
"contract",
|
|
"deadlock"
|
|
]
|
|
},
|
|
"ThreatAnalysisRequestDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"data": {
|
|
"description": "EIP-712 typed data to analyze for security threats. Contains domain, primaryType, types, and message fields following the EIP-712 standard for structured data signing.",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TypedData"
|
|
}
|
|
]
|
|
},
|
|
"walletAddress": {
|
|
"type": "string",
|
|
"description": "Address of the transaction signer/wallet"
|
|
},
|
|
"origin": {
|
|
"type": "string",
|
|
"description": "Optional origin identifier for the request"
|
|
}
|
|
},
|
|
"required": [
|
|
"data",
|
|
"walletAddress"
|
|
]
|
|
},
|
|
"ThreatAnalysisResultDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"severity": {
|
|
"type": "string",
|
|
"description": "Severity level indicating the importance and risk",
|
|
"enum": [
|
|
"OK",
|
|
"INFO",
|
|
"WARN",
|
|
"CRITICAL"
|
|
]
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Threat status code",
|
|
"enum": [
|
|
"NO_THREAT",
|
|
"OWNERSHIP_CHANGE",
|
|
"MODULE_CHANGE"
|
|
]
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "User-facing title of the finding"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Detailed description explaining the finding and its implications"
|
|
},
|
|
"error": {
|
|
"type": "string",
|
|
"description": "Error message for failed analysis"
|
|
}
|
|
},
|
|
"required": [
|
|
"severity",
|
|
"type",
|
|
"title",
|
|
"description"
|
|
]
|
|
},
|
|
"MasterCopyChangeThreatAnalysisResultDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"severity": {
|
|
"type": "string",
|
|
"description": "Severity level indicating the importance and risk",
|
|
"enum": [
|
|
"OK",
|
|
"INFO",
|
|
"WARN",
|
|
"CRITICAL"
|
|
]
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Threat status code",
|
|
"enum": [
|
|
"MASTERCOPY_CHANGE"
|
|
]
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "User-facing title of the finding"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Detailed description explaining the finding and its implications"
|
|
},
|
|
"error": {
|
|
"type": "string",
|
|
"description": "Error message for failed analysis"
|
|
},
|
|
"before": {
|
|
"type": "string",
|
|
"description": "Address of the old master copy/implementation contract"
|
|
},
|
|
"after": {
|
|
"type": "string",
|
|
"description": "Address of the new master copy/implementation contract"
|
|
}
|
|
},
|
|
"required": [
|
|
"severity",
|
|
"type",
|
|
"title",
|
|
"description",
|
|
"before",
|
|
"after"
|
|
]
|
|
},
|
|
"ThreatIssueDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string",
|
|
"description": "Address involved in the issue, if applicable"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Issue description"
|
|
}
|
|
},
|
|
"required": [
|
|
"description"
|
|
]
|
|
},
|
|
"MaliciousOrModerateThreatAnalysisResultDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"severity": {
|
|
"type": "string",
|
|
"description": "Severity level indicating the importance and risk",
|
|
"enum": [
|
|
"OK",
|
|
"INFO",
|
|
"WARN",
|
|
"CRITICAL"
|
|
]
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Threat status code",
|
|
"enum": [
|
|
"MALICIOUS",
|
|
"MODERATE"
|
|
]
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "User-facing title of the finding"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Detailed description explaining the finding and its implications"
|
|
},
|
|
"error": {
|
|
"type": "string",
|
|
"description": "Error message for failed analysis"
|
|
},
|
|
"issues": {
|
|
"type": "object",
|
|
"description": "A partial record of specific issues identified during threat analysis, grouped by severity.Record<Severity, ThreatIssue[]> - keys should be one of the Severity enum (OK | INFO | WARN | CRITICAL)",
|
|
"additionalProperties": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ThreatIssueDto"
|
|
}
|
|
},
|
|
"example": {
|
|
"CRITICAL": [
|
|
{
|
|
"description": "Malicious contract interaction detected",
|
|
"address": "0x0000000000000000000000000000000000000000"
|
|
}
|
|
],
|
|
"WARN": [
|
|
{
|
|
"description": "High gas price detected"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"severity",
|
|
"type",
|
|
"title",
|
|
"description"
|
|
]
|
|
},
|
|
"FailedThreatAnalysisResultDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"severity": {
|
|
"type": "string",
|
|
"description": "Severity level indicating the importance and risk",
|
|
"enum": [
|
|
"OK",
|
|
"INFO",
|
|
"WARN",
|
|
"CRITICAL"
|
|
]
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Threat status code",
|
|
"enum": [
|
|
"FAILED"
|
|
]
|
|
},
|
|
"title": {
|
|
"type": "string",
|
|
"description": "User-facing title of the finding"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Detailed description explaining the finding and its implications"
|
|
},
|
|
"error": {
|
|
"type": "string",
|
|
"description": "Error message for failed analysis"
|
|
}
|
|
},
|
|
"required": [
|
|
"severity",
|
|
"type",
|
|
"title",
|
|
"description"
|
|
]
|
|
},
|
|
"NativeAssetDetailsDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"symbol": {
|
|
"type": "string",
|
|
"description": "Token symbol (if available)"
|
|
},
|
|
"logo_url": {
|
|
"type": "string",
|
|
"description": "URL to asset logo (if available)",
|
|
"example": "https://example.com/logo.png"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Asset type",
|
|
"enum": [
|
|
"NATIVE"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type"
|
|
]
|
|
},
|
|
"TokenAssetDetailsDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"symbol": {
|
|
"type": "string",
|
|
"description": "Token symbol (if available)"
|
|
},
|
|
"logo_url": {
|
|
"type": "string",
|
|
"description": "URL to asset logo (if available)",
|
|
"example": "https://example.com/logo.png"
|
|
},
|
|
"type": {
|
|
"type": "string",
|
|
"description": "Asset type",
|
|
"enum": [
|
|
"ERC20",
|
|
"ERC721",
|
|
"ERC1155"
|
|
]
|
|
},
|
|
"address": {
|
|
"type": "string",
|
|
"description": "Token contract address"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"address"
|
|
]
|
|
},
|
|
"FungibleDiffDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"value": {
|
|
"type": "string",
|
|
"description": "Value change for fungible tokens",
|
|
"example": "1000000"
|
|
}
|
|
}
|
|
},
|
|
"NFTDiffDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"token_id": {
|
|
"type": "number",
|
|
"description": "Token ID for NFTs",
|
|
"example": 42
|
|
}
|
|
},
|
|
"required": [
|
|
"token_id"
|
|
]
|
|
},
|
|
"BalanceChangeDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"asset": {
|
|
"description": "Asset details",
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/NativeAssetDetailsDto"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TokenAssetDetailsDto"
|
|
}
|
|
]
|
|
},
|
|
"in": {
|
|
"type": "array",
|
|
"description": "Incoming asset changes",
|
|
"items": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/FungibleDiffDto"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NFTDiffDto"
|
|
}
|
|
]
|
|
},
|
|
"example": [
|
|
{
|
|
"value": "1000000"
|
|
}
|
|
]
|
|
},
|
|
"out": {
|
|
"type": "array",
|
|
"description": "Outgoing asset changes",
|
|
"items": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/FungibleDiffDto"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NFTDiffDto"
|
|
}
|
|
]
|
|
},
|
|
"example": [
|
|
{
|
|
"value": "500000"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"asset",
|
|
"in",
|
|
"out"
|
|
]
|
|
},
|
|
"ThreatAnalysisResponseDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"THREAT": {
|
|
"description": "Array of threat analysis results. Results are sorted by severity (CRITICAL first). May include malicious patterns, ownership changes, module changes, or master copy upgrades.",
|
|
"example": [
|
|
{
|
|
"severity": "OK",
|
|
"type": "NO_THREAT",
|
|
"title": "No threats detected",
|
|
"description": "Transaction analysis found no security threats"
|
|
}
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ThreatAnalysisResultDto"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/MasterCopyChangeThreatAnalysisResultDto"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/MaliciousOrModerateThreatAnalysisResultDto"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/FailedThreatAnalysisResultDto"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"BALANCE_CHANGE": {
|
|
"description": "Balance changes resulting from the transaction. Shows incoming and outgoing transfers for various asset types.",
|
|
"example": [
|
|
{
|
|
"asset": {
|
|
"type": "ERC20",
|
|
"symbol": "USDC",
|
|
"address": "0x0000000000000000000000000000000000000000",
|
|
"logo_url": "https://example.com/usdc-logo.png"
|
|
},
|
|
"in": [
|
|
{
|
|
"value": "1000000"
|
|
}
|
|
],
|
|
"out": [
|
|
{
|
|
"value": "500000"
|
|
}
|
|
]
|
|
}
|
|
],
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/BalanceChangeDto"
|
|
}
|
|
},
|
|
"request_id": {
|
|
"type": "string",
|
|
"description": "Blockaid request ID from x-request-id header. Used for reporting false positives/negatives via the report endpoint.",
|
|
"example": "11111111-1111-1111-1111-111111111111"
|
|
}
|
|
}
|
|
},
|
|
"ReportFalseResultRequestDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"event": {
|
|
"type": "string",
|
|
"enum": [
|
|
"FALSE_POSITIVE",
|
|
"FALSE_NEGATIVE"
|
|
],
|
|
"description": "Type of report: FALSE_POSITIVE if flagged incorrectly, FALSE_NEGATIVE if should have been flagged"
|
|
},
|
|
"request_id": {
|
|
"type": "string",
|
|
"description": "The request_id from the original Blockaid scan response",
|
|
"example": "11111111-1111-1111-1111-111111111111"
|
|
},
|
|
"details": {
|
|
"type": "string",
|
|
"description": "Details about why this is a false result",
|
|
"maxLength": 1000,
|
|
"example": "This transaction was incorrectly flagged as malicious"
|
|
}
|
|
},
|
|
"required": [
|
|
"event",
|
|
"request_id",
|
|
"details"
|
|
]
|
|
},
|
|
"ReportFalseResultResponseDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"success": {
|
|
"type": "boolean",
|
|
"description": "Whether the report was submitted successfully",
|
|
"example": true
|
|
}
|
|
},
|
|
"required": [
|
|
"success"
|
|
]
|
|
},
|
|
"TargetedSafe": {
|
|
"type": "object",
|
|
"properties": {
|
|
"outreachId": {
|
|
"type": "number"
|
|
},
|
|
"address": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"outreachId",
|
|
"address"
|
|
]
|
|
},
|
|
"Submission": {
|
|
"type": "object",
|
|
"properties": {
|
|
"outreachId": {
|
|
"type": "number"
|
|
},
|
|
"targetedSafeId": {
|
|
"type": "number"
|
|
},
|
|
"signerAddress": {
|
|
"type": "string"
|
|
},
|
|
"completionDate": {
|
|
"format": "date-time",
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"outreachId",
|
|
"targetedSafeId",
|
|
"signerAddress"
|
|
]
|
|
},
|
|
"CreateSubmissionDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"completed": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"completed"
|
|
]
|
|
},
|
|
"TransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"Bridge",
|
|
"Creation",
|
|
"Custom",
|
|
"NativeStakingDeposit",
|
|
"NativeStakingValidatorsExit",
|
|
"NativeStakingWithdraw",
|
|
"SettingsChange",
|
|
"Swap",
|
|
"SwapAndBridge",
|
|
"SwapOrder",
|
|
"SwapTransfer",
|
|
"Transfer",
|
|
"TwapOrder",
|
|
"VaultDeposit",
|
|
"VaultRedeem"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"type"
|
|
]
|
|
},
|
|
"CreationTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"Creation"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"creator": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"transactionHash": {
|
|
"type": "string"
|
|
},
|
|
"implementation": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
]
|
|
},
|
|
"factory": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"saltNonce": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"creator",
|
|
"transactionHash"
|
|
]
|
|
},
|
|
"CustomTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"Custom"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"to": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"dataSize": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"isCancellation": {
|
|
"type": "boolean"
|
|
},
|
|
"methodName": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"to",
|
|
"dataSize",
|
|
"isCancellation"
|
|
]
|
|
},
|
|
"MultiSendTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"Custom"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"to": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"dataSize": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"isCancellation": {
|
|
"type": "boolean"
|
|
},
|
|
"methodName": {
|
|
"type": "string",
|
|
"enum": [
|
|
"multiSend"
|
|
]
|
|
},
|
|
"actionCount": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"to",
|
|
"dataSize",
|
|
"isCancellation",
|
|
"methodName",
|
|
"actionCount"
|
|
]
|
|
},
|
|
"AddOwner": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ADD_OWNER"
|
|
]
|
|
},
|
|
"owner": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"threshold": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"owner",
|
|
"threshold"
|
|
]
|
|
},
|
|
"ChangeMasterCopy": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"CHANGE_MASTER_COPY"
|
|
]
|
|
},
|
|
"implementation": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"implementation"
|
|
]
|
|
},
|
|
"ChangeThreshold": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"CHANGE_THRESHOLD"
|
|
]
|
|
},
|
|
"threshold": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"threshold"
|
|
]
|
|
},
|
|
"DeleteGuard": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"DELETE_GUARD"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type"
|
|
]
|
|
},
|
|
"DisableModule": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"DISABLE_MODULE"
|
|
]
|
|
},
|
|
"module": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"module"
|
|
]
|
|
},
|
|
"EnableModule": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ENABLE_MODULE"
|
|
]
|
|
},
|
|
"module": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"module"
|
|
]
|
|
},
|
|
"RemoveOwner": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"REMOVE_OWNER"
|
|
]
|
|
},
|
|
"owner": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"threshold": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"owner",
|
|
"threshold"
|
|
]
|
|
},
|
|
"SetFallbackHandler": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SET_FALLBACK_HANDLER"
|
|
]
|
|
},
|
|
"handler": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"handler"
|
|
]
|
|
},
|
|
"SetGuard": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SET_GUARD"
|
|
]
|
|
},
|
|
"guard": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"guard"
|
|
]
|
|
},
|
|
"SettingsChange": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ADD_OWNER",
|
|
"CHANGE_MASTER_COPY",
|
|
"CHANGE_THRESHOLD",
|
|
"DELETE_GUARD",
|
|
"DISABLE_MODULE",
|
|
"ENABLE_MODULE",
|
|
"REMOVE_OWNER",
|
|
"SET_FALLBACK_HANDLER",
|
|
"SET_GUARD",
|
|
"SWAP_OWNER"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type"
|
|
]
|
|
},
|
|
"SwapOwner": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SWAP_OWNER"
|
|
]
|
|
},
|
|
"oldOwner": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"newOwner": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"oldOwner",
|
|
"newOwner"
|
|
]
|
|
},
|
|
"SettingsChangeTransaction": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SettingsChange"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"dataDecoded": {
|
|
"$ref": "#/components/schemas/DataDecoded"
|
|
},
|
|
"settingsInfo": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AddOwner"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/ChangeMasterCopy"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/ChangeThreshold"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/DeleteGuard"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/DisableModule"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/EnableModule"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/RemoveOwner"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SetFallbackHandler"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SetGuard"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SwapOwner"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"dataDecoded",
|
|
"settingsInfo"
|
|
]
|
|
},
|
|
"Erc20Transfer": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ERC20"
|
|
]
|
|
},
|
|
"tokenAddress": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"tokenName": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"tokenSymbol": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"logoUri": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"decimals": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"trusted": {
|
|
"type": "boolean",
|
|
"nullable": true
|
|
},
|
|
"imitation": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"tokenAddress",
|
|
"value",
|
|
"imitation"
|
|
]
|
|
},
|
|
"Erc721Transfer": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ERC721"
|
|
]
|
|
},
|
|
"tokenAddress": {
|
|
"type": "string"
|
|
},
|
|
"tokenId": {
|
|
"type": "string"
|
|
},
|
|
"tokenName": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"tokenSymbol": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"logoUri": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"trusted": {
|
|
"type": "boolean",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"tokenAddress",
|
|
"tokenId"
|
|
]
|
|
},
|
|
"NativeCoinTransfer": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NATIVE_COIN"
|
|
]
|
|
},
|
|
"value": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"type"
|
|
]
|
|
},
|
|
"Transfer": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NATIVE_COIN",
|
|
"ERC20",
|
|
"ERC721"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type"
|
|
]
|
|
},
|
|
"TransferTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"Transfer"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"sender": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"recipient": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"direction": {
|
|
"type": "string",
|
|
"enum": [
|
|
"INCOMING",
|
|
"OUTGOING",
|
|
"UNKNOWN"
|
|
]
|
|
},
|
|
"transferInfo": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Erc20Transfer"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/Erc721Transfer"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NativeCoinTransfer"
|
|
}
|
|
],
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Transfer"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"sender",
|
|
"recipient",
|
|
"direction",
|
|
"transferInfo"
|
|
]
|
|
},
|
|
"BridgeFee": {
|
|
"type": "object",
|
|
"properties": {
|
|
"tokenAddress": {
|
|
"type": "string"
|
|
},
|
|
"integratorFee": {
|
|
"type": "string"
|
|
},
|
|
"lifiFee": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"tokenAddress",
|
|
"integratorFee",
|
|
"lifiFee"
|
|
]
|
|
},
|
|
"TokenInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string",
|
|
"description": "The token address"
|
|
},
|
|
"decimals": {
|
|
"type": "number",
|
|
"description": "The token decimals"
|
|
},
|
|
"logoUri": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"description": "The logo URI for the token"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "The token name"
|
|
},
|
|
"symbol": {
|
|
"type": "string",
|
|
"description": "The token symbol"
|
|
},
|
|
"trusted": {
|
|
"type": "boolean",
|
|
"description": "The token trusted status"
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"decimals",
|
|
"name",
|
|
"symbol",
|
|
"trusted"
|
|
]
|
|
},
|
|
"BridgeAndSwapTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SwapAndBridge"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"fromToken": {
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
},
|
|
"recipient": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"explorerUrl": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NOT_FOUND",
|
|
"INVALID",
|
|
"PENDING",
|
|
"DONE",
|
|
"FAILED",
|
|
"UNKNOWN",
|
|
"AWAITING_EXECUTION"
|
|
]
|
|
},
|
|
"substatus": {
|
|
"type": "string",
|
|
"enum": [
|
|
"WAIT_SOURCE_CONFIRMATIONS",
|
|
"WAIT_DESTINATION_TRANSACTION",
|
|
"BRIDGE_NOT_AVAILABLE",
|
|
"CHAIN_NOT_AVAILABLE",
|
|
"REFUND_IN_PROGRESS",
|
|
"UNKNOWN_ERROR",
|
|
"COMPLETED",
|
|
"PARTIAL",
|
|
"REFUNDED",
|
|
"INSUFFICIENT_ALLOWANCE",
|
|
"INSUFFICIENT_BALANCE",
|
|
"OUT_OF_GAS",
|
|
"EXPIRED",
|
|
"SLIPPAGE_EXCEEDED",
|
|
"UNKNOWN_FAILED_ERROR",
|
|
"UNKNOWN",
|
|
"AWAITING_EXECUTION"
|
|
]
|
|
},
|
|
"fees": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/BridgeFee"
|
|
}
|
|
]
|
|
},
|
|
"fromAmount": {
|
|
"type": "string"
|
|
},
|
|
"toChain": {
|
|
"type": "string"
|
|
},
|
|
"toToken": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
}
|
|
]
|
|
},
|
|
"toAmount": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"fromToken",
|
|
"recipient",
|
|
"explorerUrl",
|
|
"status",
|
|
"substatus",
|
|
"fees",
|
|
"fromAmount",
|
|
"toChain",
|
|
"toToken",
|
|
"toAmount"
|
|
]
|
|
},
|
|
"SwapOrderTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SwapOrder"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"uid": {
|
|
"type": "string",
|
|
"description": "The order UID"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"presignaturePending",
|
|
"open",
|
|
"fulfilled",
|
|
"cancelled",
|
|
"expired",
|
|
"unknown"
|
|
]
|
|
},
|
|
"kind": {
|
|
"type": "string",
|
|
"enum": [
|
|
"buy",
|
|
"sell",
|
|
"unknown"
|
|
]
|
|
},
|
|
"orderClass": {
|
|
"type": "string",
|
|
"enum": [
|
|
"market",
|
|
"limit",
|
|
"liquidity",
|
|
"unknown"
|
|
]
|
|
},
|
|
"validUntil": {
|
|
"type": "number",
|
|
"description": "The timestamp when the order expires"
|
|
},
|
|
"sellAmount": {
|
|
"type": "string",
|
|
"description": "The sell token raw amount (no decimals)"
|
|
},
|
|
"buyAmount": {
|
|
"type": "string",
|
|
"description": "The buy token raw amount (no decimals)"
|
|
},
|
|
"executedSellAmount": {
|
|
"type": "string",
|
|
"description": "The executed sell token raw amount (no decimals)"
|
|
},
|
|
"executedBuyAmount": {
|
|
"type": "string",
|
|
"description": "The executed buy token raw amount (no decimals)"
|
|
},
|
|
"sellToken": {
|
|
"description": "The sell token of the order",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
}
|
|
]
|
|
},
|
|
"buyToken": {
|
|
"description": "The buy token of the order",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
}
|
|
]
|
|
},
|
|
"explorerUrl": {
|
|
"type": "string",
|
|
"description": "The URL to the explorer page of the order"
|
|
},
|
|
"executedFee": {
|
|
"type": "string",
|
|
"description": "The amount of fees paid for this order."
|
|
},
|
|
"executedFeeToken": {
|
|
"description": "The token in which the fee was paid, expressed by SURPLUS tokens (BUY tokens for SELL orders and SELL tokens for BUY orders).",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
}
|
|
]
|
|
},
|
|
"receiver": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"description": "The (optional) address to receive the proceeds of the trade"
|
|
},
|
|
"owner": {
|
|
"type": "string"
|
|
},
|
|
"fullAppData": {
|
|
"type": "object",
|
|
"nullable": true,
|
|
"description": "The App Data for this order"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"uid",
|
|
"status",
|
|
"kind",
|
|
"orderClass",
|
|
"validUntil",
|
|
"sellAmount",
|
|
"buyAmount",
|
|
"executedSellAmount",
|
|
"executedBuyAmount",
|
|
"sellToken",
|
|
"buyToken",
|
|
"explorerUrl",
|
|
"executedFee",
|
|
"executedFeeToken",
|
|
"owner"
|
|
]
|
|
},
|
|
"SwapTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"Swap"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"recipient": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"fees": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/BridgeFee"
|
|
}
|
|
]
|
|
},
|
|
"fromToken": {
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
},
|
|
"fromAmount": {
|
|
"type": "string"
|
|
},
|
|
"toToken": {
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
},
|
|
"toAmount": {
|
|
"type": "string"
|
|
},
|
|
"lifiExplorerUrl": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"recipient",
|
|
"fees",
|
|
"fromToken",
|
|
"fromAmount",
|
|
"toToken",
|
|
"toAmount",
|
|
"lifiExplorerUrl"
|
|
]
|
|
},
|
|
"SwapTransferTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SwapTransfer"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"sender": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"recipient": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"direction": {
|
|
"type": "string"
|
|
},
|
|
"transferInfo": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Erc20Transfer"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/Erc721Transfer"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NativeCoinTransfer"
|
|
}
|
|
],
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Transfer"
|
|
}
|
|
]
|
|
},
|
|
"uid": {
|
|
"type": "string",
|
|
"description": "The order UID"
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"presignaturePending",
|
|
"open",
|
|
"fulfilled",
|
|
"cancelled",
|
|
"expired",
|
|
"unknown"
|
|
]
|
|
},
|
|
"kind": {
|
|
"type": "string",
|
|
"enum": [
|
|
"buy",
|
|
"sell",
|
|
"unknown"
|
|
]
|
|
},
|
|
"orderClass": {
|
|
"type": "string",
|
|
"enum": [
|
|
"market",
|
|
"limit",
|
|
"liquidity",
|
|
"unknown"
|
|
]
|
|
},
|
|
"validUntil": {
|
|
"type": "number",
|
|
"description": "The timestamp when the order expires"
|
|
},
|
|
"sellAmount": {
|
|
"type": "string",
|
|
"description": "The sell token raw amount (no decimals)"
|
|
},
|
|
"buyAmount": {
|
|
"type": "string",
|
|
"description": "The buy token raw amount (no decimals)"
|
|
},
|
|
"executedSellAmount": {
|
|
"type": "string",
|
|
"description": "The executed sell token raw amount (no decimals)"
|
|
},
|
|
"executedBuyAmount": {
|
|
"type": "string",
|
|
"description": "The executed buy token raw amount (no decimals)"
|
|
},
|
|
"sellToken": {
|
|
"description": "The sell token of the order",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
}
|
|
]
|
|
},
|
|
"buyToken": {
|
|
"description": "The buy token of the order",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
}
|
|
]
|
|
},
|
|
"explorerUrl": {
|
|
"type": "string",
|
|
"description": "The URL to the explorer page of the order"
|
|
},
|
|
"executedFee": {
|
|
"type": "string",
|
|
"description": "The amount of fees paid for this order."
|
|
},
|
|
"executedFeeToken": {
|
|
"description": "The token in which the fee was paid, expressed by SURPLUS tokens (BUY tokens for SELL orders and SELL tokens for BUY orders).",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
}
|
|
]
|
|
},
|
|
"receiver": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"description": "The (optional) address to receive the proceeds of the trade"
|
|
},
|
|
"owner": {
|
|
"type": "string"
|
|
},
|
|
"fullAppData": {
|
|
"type": "object",
|
|
"nullable": true,
|
|
"description": "The App Data for this order"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"sender",
|
|
"recipient",
|
|
"direction",
|
|
"transferInfo",
|
|
"uid",
|
|
"status",
|
|
"kind",
|
|
"orderClass",
|
|
"validUntil",
|
|
"sellAmount",
|
|
"buyAmount",
|
|
"executedSellAmount",
|
|
"executedBuyAmount",
|
|
"sellToken",
|
|
"buyToken",
|
|
"explorerUrl",
|
|
"executedFee",
|
|
"executedFeeToken",
|
|
"owner"
|
|
]
|
|
},
|
|
"DurationAuto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"durationType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"AUTO"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"durationType"
|
|
]
|
|
},
|
|
"DurationLimit": {
|
|
"type": "object",
|
|
"properties": {
|
|
"durationType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"LIMIT_DURATION"
|
|
]
|
|
},
|
|
"duration": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"durationType",
|
|
"duration"
|
|
]
|
|
},
|
|
"StartTimeAtMining": {
|
|
"type": "object",
|
|
"properties": {
|
|
"startType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"AT_MINING_TIME"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"startType"
|
|
]
|
|
},
|
|
"StartTimeAtEpoch": {
|
|
"type": "object",
|
|
"properties": {
|
|
"startType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"AT_EPOCH"
|
|
]
|
|
},
|
|
"epoch": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"startType",
|
|
"epoch"
|
|
]
|
|
},
|
|
"TwapOrderTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"TwapOrder"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"description": "The TWAP status",
|
|
"enum": [
|
|
"presignaturePending",
|
|
"open",
|
|
"fulfilled",
|
|
"cancelled",
|
|
"expired",
|
|
"unknown"
|
|
]
|
|
},
|
|
"kind": {
|
|
"type": "string",
|
|
"enum": [
|
|
"buy",
|
|
"sell",
|
|
"unknown"
|
|
]
|
|
},
|
|
"class": {
|
|
"type": "string",
|
|
"enum": [
|
|
"market",
|
|
"limit",
|
|
"liquidity",
|
|
"unknown"
|
|
]
|
|
},
|
|
"activeOrderUid": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"description": "The order UID of the active order, or null if none is active"
|
|
},
|
|
"validUntil": {
|
|
"type": "number",
|
|
"description": "The timestamp when the TWAP expires"
|
|
},
|
|
"sellAmount": {
|
|
"type": "string",
|
|
"description": "The sell token raw amount (no decimals)"
|
|
},
|
|
"buyAmount": {
|
|
"type": "string",
|
|
"description": "The buy token raw amount (no decimals)"
|
|
},
|
|
"executedSellAmount": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"description": "The executed sell token raw amount (no decimals), or null if there are too many parts"
|
|
},
|
|
"executedBuyAmount": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"description": "The executed buy token raw amount (no decimals), or null if there are too many parts"
|
|
},
|
|
"executedFee": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"description": "The executed surplus fee raw amount (no decimals), or null if there are too many parts"
|
|
},
|
|
"executedFeeToken": {
|
|
"description": "The token in which the fee was paid, expressed by SURPLUS tokens (BUY tokens for SELL orders and SELL tokens for BUY orders).",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
}
|
|
]
|
|
},
|
|
"sellToken": {
|
|
"description": "The sell token of the TWAP",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
}
|
|
]
|
|
},
|
|
"buyToken": {
|
|
"description": "The buy token of the TWAP",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
}
|
|
]
|
|
},
|
|
"receiver": {
|
|
"type": "string",
|
|
"description": "The address to receive the proceeds of the trade"
|
|
},
|
|
"owner": {
|
|
"type": "string"
|
|
},
|
|
"fullAppData": {
|
|
"type": "object",
|
|
"nullable": true,
|
|
"description": "The App Data for this TWAP"
|
|
},
|
|
"numberOfParts": {
|
|
"type": "string",
|
|
"description": "The number of parts in the TWAP"
|
|
},
|
|
"partSellAmount": {
|
|
"type": "string",
|
|
"description": "The amount of sellToken to sell in each part"
|
|
},
|
|
"minPartLimit": {
|
|
"type": "string",
|
|
"description": "The amount of buyToken that must be bought in each part"
|
|
},
|
|
"timeBetweenParts": {
|
|
"type": "number",
|
|
"description": "The duration of the TWAP interval"
|
|
},
|
|
"durationOfPart": {
|
|
"description": "Whether the TWAP is valid for the entire interval or not",
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/DurationAuto"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/DurationLimit"
|
|
}
|
|
]
|
|
},
|
|
"startTime": {
|
|
"description": "The start time of the TWAP",
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/StartTimeAtMining"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/StartTimeAtEpoch"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"status",
|
|
"kind",
|
|
"validUntil",
|
|
"sellAmount",
|
|
"buyAmount",
|
|
"executedFeeToken",
|
|
"sellToken",
|
|
"buyToken",
|
|
"receiver",
|
|
"owner",
|
|
"numberOfParts",
|
|
"partSellAmount",
|
|
"minPartLimit",
|
|
"timeBetweenParts",
|
|
"durationOfPart",
|
|
"startTime"
|
|
]
|
|
},
|
|
"NativeStakingDepositTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NativeStakingDeposit"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NOT_STAKED",
|
|
"ACTIVATING",
|
|
"DEPOSIT_IN_PROGRESS",
|
|
"ACTIVE",
|
|
"EXIT_REQUESTED",
|
|
"EXITING",
|
|
"EXITED",
|
|
"SLASHED"
|
|
]
|
|
},
|
|
"estimatedEntryTime": {
|
|
"type": "number"
|
|
},
|
|
"estimatedExitTime": {
|
|
"type": "number"
|
|
},
|
|
"estimatedWithdrawalTime": {
|
|
"type": "number"
|
|
},
|
|
"fee": {
|
|
"type": "number"
|
|
},
|
|
"monthlyNrr": {
|
|
"type": "number"
|
|
},
|
|
"annualNrr": {
|
|
"type": "number"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"numValidators": {
|
|
"type": "number"
|
|
},
|
|
"expectedAnnualReward": {
|
|
"type": "string"
|
|
},
|
|
"expectedMonthlyReward": {
|
|
"type": "string"
|
|
},
|
|
"expectedFiatAnnualReward": {
|
|
"type": "number"
|
|
},
|
|
"expectedFiatMonthlyReward": {
|
|
"type": "number"
|
|
},
|
|
"tokenInfo": {
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
},
|
|
"validators": {
|
|
"nullable": true,
|
|
"description": "Populated after transaction has been executed",
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"status",
|
|
"estimatedEntryTime",
|
|
"estimatedExitTime",
|
|
"estimatedWithdrawalTime",
|
|
"fee",
|
|
"monthlyNrr",
|
|
"annualNrr",
|
|
"value",
|
|
"numValidators",
|
|
"expectedAnnualReward",
|
|
"expectedMonthlyReward",
|
|
"expectedFiatAnnualReward",
|
|
"expectedFiatMonthlyReward",
|
|
"tokenInfo"
|
|
]
|
|
},
|
|
"NativeStakingValidatorsExitTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NativeStakingValidatorsExit"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"status": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NOT_STAKED",
|
|
"ACTIVATING",
|
|
"DEPOSIT_IN_PROGRESS",
|
|
"ACTIVE",
|
|
"EXIT_REQUESTED",
|
|
"EXITING",
|
|
"EXITED",
|
|
"SLASHED"
|
|
]
|
|
},
|
|
"estimatedExitTime": {
|
|
"type": "number"
|
|
},
|
|
"estimatedWithdrawalTime": {
|
|
"type": "number"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"numValidators": {
|
|
"type": "number"
|
|
},
|
|
"tokenInfo": {
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
},
|
|
"validators": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"status",
|
|
"estimatedExitTime",
|
|
"estimatedWithdrawalTime",
|
|
"value",
|
|
"numValidators",
|
|
"tokenInfo",
|
|
"validators"
|
|
]
|
|
},
|
|
"NativeStakingWithdrawTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"NativeStakingWithdraw"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"tokenInfo": {
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
},
|
|
"validators": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"value",
|
|
"tokenInfo",
|
|
"validators"
|
|
]
|
|
},
|
|
"VaultInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"dashboardUri": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"logoUri": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"address",
|
|
"name",
|
|
"description",
|
|
"logoUri"
|
|
]
|
|
},
|
|
"VaultExtraReward": {
|
|
"type": "object",
|
|
"properties": {
|
|
"tokenInfo": {
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
},
|
|
"nrr": {
|
|
"type": "number"
|
|
},
|
|
"claimable": {
|
|
"type": "string"
|
|
},
|
|
"claimableNext": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"tokenInfo",
|
|
"nrr",
|
|
"claimable",
|
|
"claimableNext"
|
|
]
|
|
},
|
|
"VaultDepositTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"VaultDeposit"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"baseNrr": {
|
|
"type": "number"
|
|
},
|
|
"fee": {
|
|
"type": "number"
|
|
},
|
|
"tokenInfo": {
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
},
|
|
"vaultInfo": {
|
|
"$ref": "#/components/schemas/VaultInfo"
|
|
},
|
|
"currentReward": {
|
|
"type": "string"
|
|
},
|
|
"additionalRewardsNrr": {
|
|
"type": "number"
|
|
},
|
|
"additionalRewards": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/VaultExtraReward"
|
|
}
|
|
},
|
|
"expectedMonthlyReward": {
|
|
"type": "string"
|
|
},
|
|
"expectedAnnualReward": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"value",
|
|
"baseNrr",
|
|
"fee",
|
|
"tokenInfo",
|
|
"vaultInfo",
|
|
"currentReward",
|
|
"additionalRewardsNrr",
|
|
"additionalRewards",
|
|
"expectedMonthlyReward",
|
|
"expectedAnnualReward"
|
|
]
|
|
},
|
|
"VaultRedeemTransactionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"VaultRedeem"
|
|
]
|
|
},
|
|
"humanDescription": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"baseNrr": {
|
|
"type": "number"
|
|
},
|
|
"fee": {
|
|
"type": "number"
|
|
},
|
|
"tokenInfo": {
|
|
"$ref": "#/components/schemas/TokenInfo"
|
|
},
|
|
"vaultInfo": {
|
|
"$ref": "#/components/schemas/VaultInfo"
|
|
},
|
|
"currentReward": {
|
|
"type": "string"
|
|
},
|
|
"additionalRewardsNrr": {
|
|
"type": "number"
|
|
},
|
|
"additionalRewards": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/VaultExtraReward"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"value",
|
|
"baseNrr",
|
|
"fee",
|
|
"tokenInfo",
|
|
"vaultInfo",
|
|
"currentReward",
|
|
"additionalRewardsNrr",
|
|
"additionalRewards"
|
|
]
|
|
},
|
|
"TransactionData": {
|
|
"type": "object",
|
|
"properties": {
|
|
"hexData": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"dataDecoded": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/DataDecoded"
|
|
}
|
|
]
|
|
},
|
|
"to": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"value": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"operation": {
|
|
"description": "Operation type: 0 for CALL, 1 for DELEGATE",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Operation"
|
|
}
|
|
]
|
|
},
|
|
"trustedDelegateCallTarget": {
|
|
"type": "boolean",
|
|
"nullable": true
|
|
},
|
|
"addressInfoIndex": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"nullable": true
|
|
},
|
|
"tokenInfoIndex": {
|
|
"type": "object",
|
|
"additionalProperties": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/NativeToken"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/Erc20Token"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/Erc721Token"
|
|
}
|
|
]
|
|
},
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"to",
|
|
"operation"
|
|
]
|
|
},
|
|
"MultisigConfirmationDetails": {
|
|
"type": "object",
|
|
"properties": {
|
|
"signer": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"signature": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"submittedAt": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"signer",
|
|
"submittedAt"
|
|
]
|
|
},
|
|
"MultisigExecutionDetails": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"MULTISIG"
|
|
]
|
|
},
|
|
"submittedAt": {
|
|
"type": "number"
|
|
},
|
|
"nonce": {
|
|
"type": "number"
|
|
},
|
|
"safeTxGas": {
|
|
"type": "string"
|
|
},
|
|
"baseGas": {
|
|
"type": "string"
|
|
},
|
|
"gasPrice": {
|
|
"type": "string"
|
|
},
|
|
"gasToken": {
|
|
"type": "string"
|
|
},
|
|
"fee": {
|
|
"type": "string"
|
|
},
|
|
"payment": {
|
|
"type": "string"
|
|
},
|
|
"refundReceiver": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
},
|
|
"safeTxHash": {
|
|
"type": "string"
|
|
},
|
|
"executor": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
]
|
|
},
|
|
"signers": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"confirmationsRequired": {
|
|
"type": "number"
|
|
},
|
|
"confirmations": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/MultisigConfirmationDetails"
|
|
}
|
|
},
|
|
"rejectors": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"gasTokenInfo": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/NativeToken"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/Erc20Token"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/Erc721Token"
|
|
}
|
|
],
|
|
"nullable": true
|
|
},
|
|
"trusted": {
|
|
"type": "boolean"
|
|
},
|
|
"proposer": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
]
|
|
},
|
|
"proposedByDelegate": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"submittedAt",
|
|
"nonce",
|
|
"safeTxGas",
|
|
"baseGas",
|
|
"gasPrice",
|
|
"gasToken",
|
|
"fee",
|
|
"payment",
|
|
"refundReceiver",
|
|
"safeTxHash",
|
|
"signers",
|
|
"confirmationsRequired",
|
|
"confirmations",
|
|
"rejectors",
|
|
"trusted"
|
|
]
|
|
},
|
|
"ModuleExecutionDetails": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"MODULE"
|
|
]
|
|
},
|
|
"address": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"address"
|
|
]
|
|
},
|
|
"SafeAppInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"type": "string"
|
|
},
|
|
"logoUri": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"url"
|
|
]
|
|
},
|
|
"TransactionDetails": {
|
|
"type": "object",
|
|
"properties": {
|
|
"txInfo": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/CreationTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/CustomTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/MultiSendTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SettingsChangeTransaction"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TransferTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SwapOrderTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/BridgeAndSwapTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SwapTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SwapTransferTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TwapOrderTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NativeStakingDepositTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NativeStakingValidatorsExitTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NativeStakingWithdrawTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/VaultDepositTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/VaultRedeemTransactionInfo"
|
|
}
|
|
],
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TransactionInfo"
|
|
}
|
|
]
|
|
},
|
|
"safeAddress": {
|
|
"type": "string"
|
|
},
|
|
"txId": {
|
|
"type": "string"
|
|
},
|
|
"executedAt": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"txStatus": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SUCCESS",
|
|
"FAILED",
|
|
"CANCELLED",
|
|
"AWAITING_CONFIRMATIONS",
|
|
"AWAITING_EXECUTION"
|
|
]
|
|
},
|
|
"txData": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TransactionData"
|
|
}
|
|
]
|
|
},
|
|
"detailedExecutionInfo": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/MultisigExecutionDetails"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/ModuleExecutionDetails"
|
|
}
|
|
],
|
|
"nullable": true
|
|
},
|
|
"txHash": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"safeAppInfo": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SafeAppInfo"
|
|
}
|
|
]
|
|
},
|
|
"note": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"txInfo",
|
|
"safeAddress",
|
|
"txId",
|
|
"txStatus"
|
|
]
|
|
},
|
|
"TXSMultisigTransaction": {
|
|
"type": "object",
|
|
"properties": {
|
|
"safe": {
|
|
"type": "string"
|
|
},
|
|
"to": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"type": "object"
|
|
},
|
|
"operation": {
|
|
"description": "Operation type: 0 for CALL, 1 for DELEGATE",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Operation"
|
|
}
|
|
]
|
|
},
|
|
"gasToken": {
|
|
"type": "object"
|
|
},
|
|
"safeTxGas": {
|
|
"type": "object"
|
|
},
|
|
"baseGas": {
|
|
"type": "object"
|
|
},
|
|
"gasPrice": {
|
|
"type": "object"
|
|
},
|
|
"proposer": {
|
|
"type": "object"
|
|
},
|
|
"proposedByDelegate": {
|
|
"type": "object"
|
|
},
|
|
"refundReceiver": {
|
|
"type": "object"
|
|
},
|
|
"nonce": {
|
|
"type": "number"
|
|
},
|
|
"executionDate": {
|
|
"type": "object"
|
|
},
|
|
"submissionDate": {
|
|
"format": "date-time",
|
|
"type": "string"
|
|
},
|
|
"modified": {
|
|
"type": "object"
|
|
},
|
|
"blockNumber": {
|
|
"type": "object"
|
|
},
|
|
"transactionHash": {
|
|
"type": "object"
|
|
},
|
|
"safeTxHash": {
|
|
"type": "string"
|
|
},
|
|
"executor": {
|
|
"type": "object"
|
|
},
|
|
"isExecuted": {
|
|
"type": "boolean"
|
|
},
|
|
"isSuccessful": {
|
|
"type": "object"
|
|
},
|
|
"ethGasPrice": {
|
|
"type": "object"
|
|
},
|
|
"gasUsed": {
|
|
"type": "object"
|
|
},
|
|
"fee": {
|
|
"type": "object"
|
|
},
|
|
"payment": {
|
|
"type": "object"
|
|
},
|
|
"origin": {
|
|
"type": "object"
|
|
},
|
|
"confirmationsRequired": {
|
|
"type": "number"
|
|
},
|
|
"confirmations": {
|
|
"type": "object"
|
|
},
|
|
"signatures": {
|
|
"type": "object"
|
|
},
|
|
"trusted": {
|
|
"type": "boolean"
|
|
}
|
|
},
|
|
"required": [
|
|
"safe",
|
|
"to",
|
|
"value",
|
|
"data",
|
|
"operation",
|
|
"gasToken",
|
|
"safeTxGas",
|
|
"baseGas",
|
|
"gasPrice",
|
|
"proposer",
|
|
"proposedByDelegate",
|
|
"refundReceiver",
|
|
"nonce",
|
|
"executionDate",
|
|
"submissionDate",
|
|
"modified",
|
|
"blockNumber",
|
|
"transactionHash",
|
|
"safeTxHash",
|
|
"executor",
|
|
"isExecuted",
|
|
"isSuccessful",
|
|
"ethGasPrice",
|
|
"gasUsed",
|
|
"fee",
|
|
"payment",
|
|
"origin",
|
|
"confirmationsRequired",
|
|
"confirmations",
|
|
"signatures",
|
|
"trusted"
|
|
]
|
|
},
|
|
"TXSMultisigTransactionPage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/TXSMultisigTransaction"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"ModuleExecutionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"MODULE"
|
|
]
|
|
},
|
|
"address": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"address"
|
|
]
|
|
},
|
|
"MultisigExecutionInfo": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"MULTISIG"
|
|
]
|
|
},
|
|
"nonce": {
|
|
"type": "number"
|
|
},
|
|
"confirmationsRequired": {
|
|
"type": "number"
|
|
},
|
|
"confirmationsSubmitted": {
|
|
"type": "number"
|
|
},
|
|
"missingSigners": {
|
|
"nullable": true,
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/AddressInfo"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"nonce",
|
|
"confirmationsRequired",
|
|
"confirmationsSubmitted"
|
|
]
|
|
},
|
|
"Transaction": {
|
|
"type": "object",
|
|
"properties": {
|
|
"txInfo": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/CreationTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/CustomTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/MultiSendTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SettingsChangeTransaction"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TransferTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SwapOrderTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/BridgeAndSwapTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SwapTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SwapTransferTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TwapOrderTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NativeStakingDepositTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NativeStakingValidatorsExitTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NativeStakingWithdrawTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/VaultDepositTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/VaultRedeemTransactionInfo"
|
|
}
|
|
],
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TransactionInfo"
|
|
}
|
|
]
|
|
},
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"txHash": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"timestamp": {
|
|
"type": "number"
|
|
},
|
|
"txStatus": {
|
|
"type": "string",
|
|
"enum": [
|
|
"SUCCESS",
|
|
"FAILED",
|
|
"CANCELLED",
|
|
"AWAITING_CONFIRMATIONS",
|
|
"AWAITING_EXECUTION"
|
|
]
|
|
},
|
|
"executionInfo": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/MultisigExecutionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/ModuleExecutionInfo"
|
|
}
|
|
],
|
|
"nullable": true
|
|
},
|
|
"safeAppInfo": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/SafeAppInfo"
|
|
}
|
|
]
|
|
},
|
|
"note": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"txInfo",
|
|
"id",
|
|
"timestamp",
|
|
"txStatus"
|
|
]
|
|
},
|
|
"MultisigTransaction": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"TRANSACTION"
|
|
]
|
|
},
|
|
"transaction": {
|
|
"$ref": "#/components/schemas/Transaction"
|
|
},
|
|
"conflictType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"None",
|
|
"HasNext",
|
|
"End"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"transaction",
|
|
"conflictType"
|
|
]
|
|
},
|
|
"MultisigTransactionPage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/MultisigTransaction"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"DeleteTransactionDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"signature": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"signature"
|
|
]
|
|
},
|
|
"ModuleTransaction": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"TRANSACTION"
|
|
]
|
|
},
|
|
"transaction": {
|
|
"$ref": "#/components/schemas/Transaction"
|
|
},
|
|
"conflictType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"None"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"transaction",
|
|
"conflictType"
|
|
]
|
|
},
|
|
"ModuleTransactionPage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/ModuleTransaction"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"AddConfirmationDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"signature": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"signature"
|
|
]
|
|
},
|
|
"IncomingTransfer": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"TRANSACTION"
|
|
]
|
|
},
|
|
"transaction": {
|
|
"$ref": "#/components/schemas/Transaction"
|
|
},
|
|
"conflictType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"None"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"transaction",
|
|
"conflictType"
|
|
]
|
|
},
|
|
"IncomingTransferPage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/IncomingTransfer"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"PreviewTransactionDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"to": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"operation": {
|
|
"description": "Operation type: 0 for CALL, 1 for DELEGATE",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Operation"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"to",
|
|
"value",
|
|
"operation"
|
|
]
|
|
},
|
|
"TransactionPreview": {
|
|
"type": "object",
|
|
"properties": {
|
|
"txInfo": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/CreationTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/CustomTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/MultiSendTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SettingsChangeTransaction"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TransferTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SwapOrderTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/BridgeAndSwapTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SwapTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/SwapTransferTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TwapOrderTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NativeStakingDepositTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NativeStakingValidatorsExitTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/NativeStakingWithdrawTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/VaultDepositTransactionInfo"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/VaultRedeemTransactionInfo"
|
|
}
|
|
],
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TransactionInfo"
|
|
}
|
|
]
|
|
},
|
|
"txData": {
|
|
"$ref": "#/components/schemas/TransactionData"
|
|
}
|
|
},
|
|
"required": [
|
|
"txInfo",
|
|
"txData"
|
|
]
|
|
},
|
|
"ConflictHeaderQueuedItem": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"CONFLICT_HEADER"
|
|
]
|
|
},
|
|
"nonce": {
|
|
"type": "number"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"nonce"
|
|
]
|
|
},
|
|
"LabelQueuedItem": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"LABEL"
|
|
]
|
|
},
|
|
"label": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"label"
|
|
]
|
|
},
|
|
"TransactionQueuedItem": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"TRANSACTION"
|
|
]
|
|
},
|
|
"transaction": {
|
|
"$ref": "#/components/schemas/Transaction"
|
|
},
|
|
"conflictType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"None",
|
|
"HasNext",
|
|
"End"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"transaction",
|
|
"conflictType"
|
|
]
|
|
},
|
|
"QueuedItemPage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/ConflictHeaderQueuedItem"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/LabelQueuedItem"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/TransactionQueuedItem"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"TransactionItem": {
|
|
"type": "object",
|
|
"properties": {
|
|
"type": {
|
|
"type": "string",
|
|
"enum": [
|
|
"TRANSACTION"
|
|
]
|
|
},
|
|
"transaction": {
|
|
"$ref": "#/components/schemas/Transaction"
|
|
},
|
|
"conflictType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"None"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"transaction",
|
|
"conflictType"
|
|
]
|
|
},
|
|
"TransactionItemPage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"oneOf": [
|
|
{
|
|
"$ref": "#/components/schemas/TransactionItem"
|
|
},
|
|
{
|
|
"$ref": "#/components/schemas/DateLabel"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"ProposeTransactionDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"to": {
|
|
"type": "string"
|
|
},
|
|
"value": {
|
|
"type": "string"
|
|
},
|
|
"data": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"nonce": {
|
|
"type": "string"
|
|
},
|
|
"operation": {
|
|
"description": "Operation type: 0 for CALL, 1 for DELEGATE",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/Operation"
|
|
}
|
|
]
|
|
},
|
|
"safeTxGas": {
|
|
"type": "string"
|
|
},
|
|
"baseGas": {
|
|
"type": "string"
|
|
},
|
|
"gasPrice": {
|
|
"type": "string"
|
|
},
|
|
"gasToken": {
|
|
"type": "string"
|
|
},
|
|
"refundReceiver": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"safeTxHash": {
|
|
"type": "string"
|
|
},
|
|
"sender": {
|
|
"type": "string"
|
|
},
|
|
"signature": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"origin": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"to",
|
|
"value",
|
|
"nonce",
|
|
"operation",
|
|
"safeTxGas",
|
|
"baseGas",
|
|
"gasPrice",
|
|
"gasToken",
|
|
"safeTxHash",
|
|
"sender"
|
|
]
|
|
},
|
|
"CreationTransaction": {
|
|
"type": "object",
|
|
"properties": {
|
|
"created": {
|
|
"format": "date-time",
|
|
"type": "string"
|
|
},
|
|
"creator": {
|
|
"type": "string"
|
|
},
|
|
"transactionHash": {
|
|
"type": "string"
|
|
},
|
|
"factoryAddress": {
|
|
"type": "string"
|
|
},
|
|
"masterCopy": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"setupData": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"saltNonce": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"dataDecoded": {
|
|
"nullable": true,
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/DataDecoded"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"created",
|
|
"creator",
|
|
"transactionHash",
|
|
"factoryAddress"
|
|
]
|
|
},
|
|
"TXSCreationTransaction": {
|
|
"type": "object",
|
|
"properties": {
|
|
"created": {
|
|
"format": "date-time",
|
|
"type": "string"
|
|
},
|
|
"creator": {
|
|
"type": "string"
|
|
},
|
|
"transactionHash": {
|
|
"type": "string"
|
|
},
|
|
"factoryAddress": {
|
|
"type": "string"
|
|
},
|
|
"masterCopy": {
|
|
"type": "object"
|
|
},
|
|
"setupData": {
|
|
"type": "object"
|
|
},
|
|
"saltNonce": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"required": [
|
|
"created",
|
|
"creator",
|
|
"transactionHash",
|
|
"factoryAddress",
|
|
"masterCopy",
|
|
"setupData",
|
|
"saltNonce"
|
|
]
|
|
},
|
|
"TransactionExportDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"executionDateGte": {
|
|
"type": "string",
|
|
"description": "Execution date greater than or equal to (ISO date string)"
|
|
},
|
|
"executionDateLte": {
|
|
"type": "string",
|
|
"description": "Execution date less than or equal to (ISO date string)"
|
|
},
|
|
"limit": {
|
|
"type": "number",
|
|
"description": "Maximum number of transactions to export"
|
|
},
|
|
"offset": {
|
|
"type": "number",
|
|
"description": "Number of transactions to start from"
|
|
}
|
|
}
|
|
},
|
|
"JobStatusDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"id": {
|
|
"type": "string",
|
|
"description": "Job ID"
|
|
},
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Job name"
|
|
},
|
|
"data": {
|
|
"type": "object",
|
|
"description": "Job data payload"
|
|
},
|
|
"timestamp": {
|
|
"type": "number",
|
|
"description": "Timestamp when the job was created"
|
|
},
|
|
"progress": {
|
|
"description": "Job progress",
|
|
"oneOf": [
|
|
{
|
|
"type": "number",
|
|
"example": 50
|
|
},
|
|
{
|
|
"type": "string",
|
|
"example": "50%"
|
|
},
|
|
{
|
|
"type": "boolean",
|
|
"example": false
|
|
},
|
|
{
|
|
"type": "object",
|
|
"example": {
|
|
"current": 5,
|
|
"total": 10
|
|
}
|
|
}
|
|
]
|
|
},
|
|
"processedOn": {
|
|
"type": "number",
|
|
"description": "Timestamp when job processing started"
|
|
},
|
|
"finishedOn": {
|
|
"type": "number",
|
|
"description": "Timestamp when job finished"
|
|
},
|
|
"failedReason": {
|
|
"type": "string",
|
|
"description": "Reason for job failure"
|
|
},
|
|
"returnValue": {
|
|
"type": "object",
|
|
"description": "Job return value"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"name",
|
|
"data",
|
|
"timestamp",
|
|
"progress",
|
|
"processedOn",
|
|
"finishedOn",
|
|
"failedReason",
|
|
"returnValue"
|
|
]
|
|
},
|
|
"JobStatusErrorDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"error": {
|
|
"type": "string",
|
|
"description": "Error message"
|
|
}
|
|
},
|
|
"required": [
|
|
"error"
|
|
]
|
|
},
|
|
"Delegate": {
|
|
"type": "object",
|
|
"properties": {
|
|
"safe": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"delegate": {
|
|
"type": "string"
|
|
},
|
|
"delegator": {
|
|
"type": "string"
|
|
},
|
|
"label": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"delegate",
|
|
"delegator",
|
|
"label"
|
|
]
|
|
},
|
|
"DelegatePage": {
|
|
"type": "object",
|
|
"properties": {
|
|
"count": {
|
|
"type": "number",
|
|
"nullable": true
|
|
},
|
|
"next": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"previous": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"results": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/Delegate"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"results"
|
|
]
|
|
},
|
|
"CreateDelegateDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"safe": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"delegate": {
|
|
"type": "string"
|
|
},
|
|
"delegator": {
|
|
"type": "string"
|
|
},
|
|
"signature": {
|
|
"type": "string"
|
|
},
|
|
"label": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"delegate",
|
|
"delegator",
|
|
"signature",
|
|
"label"
|
|
]
|
|
},
|
|
"DeleteDelegateDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"delegate": {
|
|
"type": "string"
|
|
},
|
|
"delegator": {
|
|
"type": "string"
|
|
},
|
|
"signature": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"delegate",
|
|
"delegator",
|
|
"signature"
|
|
]
|
|
},
|
|
"DeleteSafeDelegateDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"delegate": {
|
|
"type": "string"
|
|
},
|
|
"safe": {
|
|
"type": "string"
|
|
},
|
|
"signature": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"delegate",
|
|
"safe",
|
|
"signature"
|
|
]
|
|
},
|
|
"DeleteDelegateV2Dto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"delegator": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"safe": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"signature": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"signature"
|
|
]
|
|
},
|
|
"SafeRegistration": {
|
|
"type": "object",
|
|
"properties": {
|
|
"chainId": {
|
|
"type": "string"
|
|
},
|
|
"safes": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"signatures": {
|
|
"type": "array",
|
|
"items": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"chainId",
|
|
"safes",
|
|
"signatures"
|
|
]
|
|
},
|
|
"RegisterDeviceDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"uuid": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"cloudMessagingToken": {
|
|
"type": "string"
|
|
},
|
|
"buildNumber": {
|
|
"type": "string"
|
|
},
|
|
"bundle": {
|
|
"type": "string"
|
|
},
|
|
"deviceType": {
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"type": "string"
|
|
},
|
|
"timestamp": {
|
|
"type": "string",
|
|
"nullable": true
|
|
},
|
|
"safeRegistrations": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/SafeRegistration"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"cloudMessagingToken",
|
|
"buildNumber",
|
|
"bundle",
|
|
"deviceType",
|
|
"version",
|
|
"safeRegistrations"
|
|
]
|
|
},
|
|
"NotificationTypeEnum": {
|
|
"type": "string",
|
|
"enum": [
|
|
"CONFIRMATION_REQUEST",
|
|
"DELETED_MULTISIG_TRANSACTION",
|
|
"EXECUTED_MULTISIG_TRANSACTION",
|
|
"INCOMING_ETHER",
|
|
"INCOMING_TOKEN",
|
|
"MESSAGE_CONFIRMATION_REQUEST",
|
|
"MODULE_TRANSACTION"
|
|
]
|
|
},
|
|
"UpsertSubscriptionsSafesDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"chainId": {
|
|
"type": "string"
|
|
},
|
|
"address": {
|
|
"type": "string"
|
|
},
|
|
"notificationTypes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/NotificationTypeEnum"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"chainId",
|
|
"address",
|
|
"notificationTypes"
|
|
]
|
|
},
|
|
"DeviceType": {
|
|
"type": "string",
|
|
"enum": [
|
|
"ANDROID",
|
|
"IOS",
|
|
"WEB"
|
|
]
|
|
},
|
|
"UpsertSubscriptionsDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"cloudMessagingToken": {
|
|
"type": "string"
|
|
},
|
|
"safes": {
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/UpsertSubscriptionsSafesDto"
|
|
}
|
|
},
|
|
"deviceType": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/DeviceType"
|
|
}
|
|
]
|
|
},
|
|
"deviceUuid": {
|
|
"type": "string",
|
|
"nullable": true
|
|
}
|
|
},
|
|
"required": [
|
|
"cloudMessagingToken",
|
|
"safes",
|
|
"deviceType"
|
|
]
|
|
},
|
|
"NotificationTypeResponseDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"description": "The notification type name",
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/components/schemas/NotificationTypeEnum"
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"name"
|
|
]
|
|
},
|
|
"DeleteAllSubscriptionItemDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"chainId": {
|
|
"type": "string"
|
|
},
|
|
"deviceUuid": {
|
|
"type": "string"
|
|
},
|
|
"safeAddress": {
|
|
"type": "string"
|
|
},
|
|
"signerAddress": {
|
|
"type": "string",
|
|
"nullable": true,
|
|
"description": "Optional signer address filter:\n• Omitted (undefined): Deletes subscriptions regardless of signer address\n• null: Deletes only subscriptions with no signer address\n• Valid address: Deletes only subscriptions with that specific signer address"
|
|
}
|
|
},
|
|
"required": [
|
|
"chainId",
|
|
"deviceUuid",
|
|
"safeAddress"
|
|
]
|
|
},
|
|
"DeleteAllSubscriptionsDto": {
|
|
"type": "object",
|
|
"properties": {
|
|
"subscriptions": {
|
|
"minItems": 1,
|
|
"description": "At least one subscription is required",
|
|
"type": "array",
|
|
"items": {
|
|
"$ref": "#/components/schemas/DeleteAllSubscriptionItemDto"
|
|
}
|
|
}
|
|
},
|
|
"required": [
|
|
"subscriptions"
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|