{ "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/accounts": { "post": { "description": "Creates a new account for the authenticated user. The account is associated with the signer address from the authentication payload.", "operationId": "accountsCreateAccountV1", "parameters": [], "requestBody": { "required": true, "description": "Account creation data including name and other optional settings", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAccountDto" } } } }, "responses": { "201": { "description": "Account created successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Account" } } } }, "401": { "description": "Authentication required - valid JWT token must be provided" }, "403": { "description": "Access forbidden - insufficient permissions" } }, "summary": "Create account", "tags": [ "accounts" ] } }, "/v1/accounts/data-types": { "get": { "description": "Retrieves all available account data types that can be used when configuring account data settings.", "operationId": "accountsGetDataTypesV1", "parameters": [], "responses": { "200": { "description": "List of available account data types", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AccountDataType" } } } } } }, "summary": "Get account data types", "tags": [ "accounts" ] } }, "/v1/accounts/{address}/data-settings": { "get": { "description": "Retrieves data settings for a specific account address. Returns the configured data types and their settings for the authenticated user.", "operationId": "accountsGetAccountDataSettingsV1", "parameters": [ { "name": "address", "required": true, "in": "path", "description": "The account address (0x prefixed hex string)", "schema": { "type": "string" } } ], "responses": { "200": { "description": "List of account data settings for the specified address", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AccountDataSetting" } } } } }, "401": { "description": "Authentication required - valid JWT token must be provided" } }, "summary": "Get account data settings", "tags": [ "accounts" ] }, "put": { "description": "Creates or updates data settings for a specific account address. This endpoint allows configuring which data types are enabled for the account.", "operationId": "accountsUpsertAccountDataSettingsV1", "parameters": [ { "name": "address", "required": true, "in": "path", "description": "The account address (0x prefixed hex string)", "schema": { "type": "string" } } ], "requestBody": { "required": true, "description": "Data settings to create or update for the account", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpsertAccountDataSettingsDto" } } } }, "responses": { "200": { "description": "Updated account data settings", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/AccountDataSetting" } } } } }, "401": { "description": "Authentication required - valid JWT token must be provided" } }, "summary": "Update account data settings", "tags": [ "accounts" ] } }, "/v1/accounts/{address}": { "get": { "description": "Retrieves account information for a specific address. The account must belong to the authenticated user.", "operationId": "accountsGetAccountV1", "parameters": [ { "name": "address", "required": true, "in": "path", "description": "The account address (0x prefixed hex string)", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Account information retrieved successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/Account" } } } }, "401": { "description": "Authentication required - valid JWT token must be provided" } }, "summary": "Get account by address", "tags": [ "accounts" ] }, "delete": { "description": "Deletes an account and all its associated data for the specified address. The account must belong to the authenticated user.", "operationId": "accountsDeleteAccountV1", "parameters": [ { "name": "address", "required": true, "in": "path", "description": "The account address to delete (0x prefixed hex string)", "schema": { "type": "string" } } ], "responses": { "204": { "description": "Account deleted successfully" }, "401": { "description": "Authentication required - valid JWT token must be provided" } }, "summary": "Delete account", "tags": [ "accounts" ] } }, "/v1/accounts/{address}/address-books/{chainId}": { "get": { "operationId": "addressBooksGetAddressBookV1", "parameters": [ { "name": "address", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "chainId", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddressBook" } } } } }, "tags": [ "accounts" ] }, "post": { "operationId": "addressBooksCreateAddressBookItemV1", "parameters": [ { "name": "address", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "chainId", "required": true, "in": "path", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAddressBookItemDto" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AddressBookItem" } } } } }, "tags": [ "accounts" ] }, "delete": { "operationId": "addressBooksDeleteAddressBookV1", "parameters": [ { "name": "address", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "chainId", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "" } }, "tags": [ "accounts" ] } }, "/v1/accounts/{address}/address-books/{chainId}/{addressBookItemId}": { "delete": { "operationId": "addressBooksDeleteAddressBookItemV1", "parameters": [ { "name": "address", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "chainId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "addressBookItemId", "required": true, "in": "path", "schema": { "type": "number" } } ], "responses": { "200": { "description": "" } }, "tags": [ "accounts" ] } }, "/v1/accounts/{address}/counterfactual-safes/{chainId}/{predictedAddress}": { "get": { "operationId": "counterfactualSafesGetCounterfactualSafeV1", "parameters": [ { "name": "address", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "chainId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "predictedAddress", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CounterfactualSafe" } } } } }, "tags": [ "accounts" ] }, "delete": { "operationId": "counterfactualSafesDeleteCounterfactualSafeV1", "parameters": [ { "name": "address", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "chainId", "required": true, "in": "path", "schema": { "type": "string" } }, { "name": "predictedAddress", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "" } }, "tags": [ "accounts" ] } }, "/v1/accounts/{address}/counterfactual-safes": { "get": { "operationId": "counterfactualSafesGetCounterfactualSafesV1", "parameters": [ { "name": "address", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CounterfactualSafe" } } } } } }, "tags": [ "accounts" ] }, "put": { "operationId": "counterfactualSafesCreateCounterfactualSafeV1", "parameters": [ { "name": "address", "required": true, "in": "path", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateCounterfactualSafeDto" } } } }, "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CounterfactualSafe" } } } } }, "tags": [ "accounts" ] }, "delete": { "operationId": "counterfactualSafesDeleteCounterfactualSafesV1", "parameters": [ { "name": "address", "required": true, "in": "path", "schema": { "type": "string" } } ], "responses": { "200": { "description": "" } }, "tags": [ "accounts" ] } }, "/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/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" } } ], "responses": { "200": { "description": "", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Protocol" } } } } } }, "tags": [ "positions" ] } }, "/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" ] } }, "/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/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}/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}/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": "safe", "required": false, "in": "query", "description": "Filter by Safe address", "schema": { "type": "string" } }, { "name": "delegate", "required": false, "in": "query", "description": "Filter by delegate address", "schema": { "type": "string" } }, { "name": "delegator", "required": false, "in": "query", "description": "Filter by delegator address", "schema": { "type": "string" } }, { "name": "label", "required": false, "in": "query", "description": "Filter by delegate label", "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 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": "safe", "required": false, "in": "query", "description": "Filter by Safe 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": "delegator", "required": false, "in": "query", "description": "Filter by delegator address (0x prefixed hex string)", "schema": { "type": "string" } }, { "name": "label", "required": false, "in": "query", "description": "Filter by delegate label or name", "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 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/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" ] } }, "/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" ] } }, "/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/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" ] } }, "/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": { "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" }, "404": { "description": "User not found - the authenticated wallet is not associated with any user" } }, "summary": "Create space", "tags": [ "spaces" ] }, "get": { "description": "Retrieves all spaces that the authenticated user is a member of or has been invited to.", "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" }, "404": { "description": "User not found - the authenticated wallet is not associated with any user" } }, "summary": "Get user spaces", "tags": [ "spaces" ] } }, "/v1/spaces/create-with-user": { "post": { "description": "Creates a new space and automatically creates a user account if one does not exist for the authenticated wallet.", "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 and user 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", "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 or user 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": "User or 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": "User or 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": "Signer address not provided" }, "403": { "description": "Signer not authorized" }, "404": { "description": "Signer or space not found" }, "409": { "description": "Cannot remove last admin" } }, "summary": "Leave 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": "Signer not authorized" }, "404": { "description": "Signer, 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/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" ] } }, "/v1/owners/{ownerAddress}/safes": { "get": { "deprecated": true, "description": "Retrieves Safes owned by an address across all chains. This endpoint is deprecated, please use the chain-specific version instead.", "operationId": "ownersGetAllSafesByOwnerV1", "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", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SafeList" } } } } }, "summary": "Get all Safes by owner (deprecated)", "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" ] } }, "/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/{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" } } ], "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" ] } }, "/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/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" ] } } }, "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" ] }, "CreateAccountDto": { "type": "object", "properties": { "address": { "type": "string", "minLength": 3, "maxLength": 30 }, "name": { "type": "string" } }, "required": [ "address", "name" ] }, "Account": { "type": "object", "properties": { "id": { "type": "string" }, "groupId": { "type": "string", "nullable": true }, "address": { "type": "string" }, "name": { "type": "string" } }, "required": [ "id", "address", "name" ] }, "AccountDataType": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "type": "string", "nullable": true }, "isActive": { "type": "boolean" } }, "required": [ "id", "name", "isActive" ] }, "AccountDataSetting": { "type": "object", "properties": { "dataTypeId": { "type": "string" }, "enabled": { "type": "boolean" } }, "required": [ "dataTypeId", "enabled" ] }, "UpsertAccountDataSettingDto": { "type": "object", "properties": { "dataTypeId": { "type": "string" }, "enabled": { "type": "boolean" } }, "required": [ "dataTypeId", "enabled" ] }, "UpsertAccountDataSettingsDto": { "type": "object", "properties": { "accountDataSettings": { "type": "array", "items": { "$ref": "#/components/schemas/UpsertAccountDataSettingDto" } } }, "required": [ "accountDataSettings" ] }, "AddressBookItem": { "type": "object", "properties": { "name": { "type": "string" }, "address": { "type": "string" }, "chainIds": { "type": "array", "items": { "type": "string" } } }, "required": [ "name", "address", "chainIds" ] }, "AddressBook": { "type": "object", "properties": { "id": { "type": "string" }, "accountId": { "type": "string" }, "chainId": { "type": "string" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/AddressBookItem" } } }, "required": [ "id", "accountId", "chainId", "data" ] }, "CreateAddressBookItemDto": { "type": "object", "properties": { "name": { "type": "string", "minLength": 3, "maxLength": 30 }, "address": { "type": "string" } }, "required": [ "name", "address" ] }, "CounterfactualSafe": { "type": "object", "properties": { "chainId": { "type": "string" }, "creator": { "type": "string" }, "fallbackHandler": { "type": "string" }, "owners": { "type": "array", "items": { "type": "string" } }, "predictedAddress": { "type": "string" }, "saltNonce": { "type": "string" }, "singletonAddress": { "type": "string" }, "threshold": { "type": "number" } }, "required": [ "chainId", "creator", "fallbackHandler", "owners", "predictedAddress", "saltNonce", "singletonAddress", "threshold" ] }, "CreateCounterfactualSafeDto": { "type": "object", "properties": { "chainId": { "type": "string" }, "fallbackHandler": { "type": "string" }, "owners": { "type": "array", "items": { "type": "string" } }, "predictedAddress": { "type": "string" }, "saltNonce": { "type": "string" }, "singletonAddress": { "type": "string" }, "threshold": { "type": "number" } }, "required": [ "chainId", "fallbackHandler", "owners", "predictedAddress", "saltNonce", "singletonAddress", "threshold" ] }, "AuthNonce": { "type": "object", "properties": { "nonce": { "type": "string" } }, "required": [ "nonce" ] }, "SiweDto": { "type": "object", "properties": { "message": { "type": "string" }, "signature": { "type": "string" } }, "required": [ "message", "signature" ] }, "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" ] }, "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" ] }, "ContractAddresses": { "type": "object", "properties": { "safeSingletonAddress": { "type": "string", "nullable": true }, "safeProxyFactoryAddress": { "type": "string", "nullable": true }, "multiSendAddress": { "type": "string", "nullable": true }, "multiSendCallOnlyAddress": { "type": "string", "nullable": true }, "fallbackHandlerAddress": { "type": "string", "nullable": true }, "signMessageLibAddress": { "type": "string", "nullable": true }, "createCallAddress": { "type": "string", "nullable": true }, "simulateTxAccessorAddress": { "type": "string", "nullable": true }, "safeWebAuthnSignerFactoryAddress": { "type": "string", "nullable": true } } }, "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" }, "contractAddresses": { "$ref": "#/components/schemas/ContractAddresses" }, "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", "contractAddresses", "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": { "lastSync": { "type": "number" }, "synced": { "type": "boolean" } }, "required": [ "lastSync", "synced" ] }, "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" ] }, "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" ] }, "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" ] }, "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" ] }, "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" ] }, "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" ] }, "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" ] }, "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" ] }, "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" }, "lastUpdatedBy": { "type": "string" } }, "required": [ "name", "address", "chainIds", "createdBy", "lastUpdatedBy" ] }, "SpaceAddressBookDto": { "type": "object", "properties": { "spaceId": { "type": "string" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/SpaceAddressBookItemDto" } } }, "required": [ "spaceId", "data" ] }, "UpsertAddressBookItemsDto": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/components/schemas/AddressBookItem" } } }, "required": [ "items" ] }, "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" }, "status": { "type": "string", "enum": [ "PENDING", "ACTIVE" ] } }, "required": [ "id", "status" ] }, "MemberDto": { "type": "object", "properties": { "id": { "type": "number" }, "role": { "type": "string", "enum": [ "ADMIN", "MEMBER" ] }, "name": { "type": "string" }, "invitedBy": { "type": "string" }, "status": { "type": "string", "enum": [ "INVITED", "ACTIVE", "DECLINED" ] }, "createdAt": { "format": "date-time", "type": "string" }, "updatedAt": { "format": "date-time", "type": "string" }, "user": { "$ref": "#/components/schemas/UserDto" } }, "required": [ "id", "role", "name", "invitedBy", "status", "createdAt", "updatedAt", "user" ] }, "GetSpaceResponse": { "type": "object", "properties": { "id": { "type": "number" }, "name": { "type": "string" }, "status": { "type": "string", "enum": [ "ACTIVE" ] }, "members": { "type": "array", "items": { "$ref": "#/components/schemas/MemberDto" } } }, "required": [ "id", "name", "status", "members" ] }, "UpdateSpaceDto": { "type": "object", "properties": { "name": { "type": "string" }, "status": { "type": "string", "enum": [ "ACTIVE" ] } } }, "UpdateSpaceResponse": { "type": "object", "properties": { "id": { "type": "number" } }, "required": [ "id" ] }, "CreateSpaceSafeDto": { "type": "object", "properties": { "chainId": { "type": "string" }, "address": { "type": "string" } }, "required": [ "chainId", "address" ] }, "CreateSpaceSafesDto": { "type": "object", "properties": { "safes": { "type": "array", "items": { "$ref": "#/components/schemas/CreateSpaceSafeDto" } } }, "required": [ "safes" ] }, "GetSpaceSafeResponse": { "type": "object", "properties": { "safes": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" } }, "example": { "{chainId}": [ "0x..." ] } } }, "required": [ "safes" ] }, "DeleteSpaceSafeDto": { "type": "object", "properties": { "chainId": { "type": "string" }, "address": { "type": "string" } }, "required": [ "chainId", "address" ] }, "DeleteSpaceSafesDto": { "type": "object", "properties": { "safes": { "type": "array", "items": { "$ref": "#/components/schemas/DeleteSpaceSafeDto" } } }, "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" ] } }, "required": [ "id", "status" ] }, "Member": { "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/Member" } } }, "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" ] }, "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": "If specified, a gas buffer of 150k will be added on top of the expected gas usage for the transaction.\n This is for the \n Gelato Relay execution overhead, reducing the chance of the task cancelling before it is executed on-chain." } }, "required": [ "version", "to", "data" ] }, "Relay": { "type": "object", "properties": { "taskId": { "type": "string" } }, "required": [ "taskId" ] }, "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" } }, "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" }, "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", "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" } }, "required": [ "severity", "type", "title", "description" ] }, "ContractAnalysisDto": { "type": "object", "properties": { "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" } } } }, "CounterpartyAnalysisDto": { "type": "object", "properties": { "recipient": { "type": "object", "description": "Recipient analysis results mapped by address. Contains recipient interaction history and bridge analysis.type: Record
.", "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.", "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" } ] } } } }, "required": [ "recipient", "contract" ] }, "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", "FAILED" ] }, "title": { "type": "string", "description": "User-facing title of the finding" }, "description": { "type": "string", "description": "Detailed description explaining the finding and its implications" } }, "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" }, "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" ] }, "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" }, "issues": { "type": "object", "description": "A partial record of specific issues identified during threat analysis, grouped by severity.Record