Files

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"
]
}
}
}
}