openapi: 3.1.0 info: title: API reference Download blocklist Scan transaction API version: '2022-06-01' description: The Blowfish API reference specification contact: name: Blowfish API Support email: contact@blowfish.xyz url: https://blowfish.xyz license: name: MIT License url: https://opensource.org/licenses/MIT servers: - url: https://free.api.blowfish.xyz description: API server for clients on the free plan - url: https://api.blowfish.xyz description: API server for all other clients (e.g., Enterprise) security: - ApiKeyAuth: [] tags: - name: Scan transaction description: Endpoints related to scanning blockchain transactions paths: /ethereum/v0/mainnet/scan/transaction: post: tags: - Scan transaction summary: EVM operationId: scan-transaction-evm description: 'Scan a Ethereum/Polygon transaction in order to receive recommended actions, tailored warnings and human-readable simulation results explaining what the transaction will do. ### Supported networks | Network | Base URL | | --- | --- | | Ethereum Mainnet | https://api.blowfish.xyz/ethereum/v0/mainnet/scan/transaction | | Goerli Testnet | https://api.blowfish.xyz/ethereum/v0/goerli/scan/transaction | | Polygon Mainnet | https://api.blowfish.xyz/polygon/v0/mainnet/scan/transaction | Note: The Ethereum and Polygon endpoints are equivalent when it comes to functionality as well as request and response formats. Note 2: If you are using a free, self-service API key from our Developer Portal, be sure to add the `free` subdomain (e.g., `https://free.api.blowfish.xyz`) to the above endpoints. ' security: - ApiKeyAuth: [] parameters: - name: language in: query description: The language to use in the returned human-readable warnings and simulation results schema: $ref: '#/components/schemas/Languages' - name: X-Api-Key in: header description: API Key required: true schema: $ref: '#/components/schemas/ApiKeyHeader' - name: X-Api-Version in: header description: Which version of the API to use schema: $ref: '#/components/schemas/ApiVersionHeader' - name: Content-Type in: header description: The expected return content type schema: $ref: '#/components/schemas/ContentType' requestBody: content: application/json: schema: type: object properties: txObject: type: object properties: from: type: string description: Hex-representation address of transaction signer example: '0xa725f1a12b69eb32a7aea885c826deffaad6e3f3' to: type: string description: Hex-representation address of transaction recipient example: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2' data: type: string description: Hex-representation of ABI encoded call data example: '0x095ea7b30000000000000000000000001d5071048370df50839c8879cdf5144ace4b3b3bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff' value: type: string description: String representation of Ether/Matic (in Wei) to send with the transaction example: '0' required: - from - to - data - value metadata: $ref: '#/components/schemas/RequestMetadata' userAccount: $ref: '#/components/schemas/EvmUserAccount' required: - txObject - userAccount - metadata responses: '200': description: Successful response content: application/json: schema: type: object properties: action: $ref: '#/components/schemas/ActionEnum' warnings: $ref: '#/components/schemas/Warning' simulationResults: type: object properties: expectedStateChanges: type: array items: type: object properties: humanReadableDiff: type: string example: Send 10000 USDT description: Computed explanation of the state change that can be directly presented to the end-user. While the API is still in development, we suggest integrators expose this in their signing UI if they encounter a `rawInfo.kind` they don't recognize. rawInfo: description: A machine-parsable state change object describing the state change. oneOf: - $ref: '#/components/schemas/EvmStateChangeErc20Transfer' - $ref: '#/components/schemas/EvmStateChangeErc20Approval' - $ref: '#/components/schemas/EvmStateChangeNativeAssetTransfer' - $ref: '#/components/schemas/EvmStateChangeErc721Transfer' - $ref: '#/components/schemas/EvmStateChangeErc721Approval' - $ref: '#/components/schemas/EvmStateChangeErc721ApprovalForAll' - $ref: '#/components/schemas/EvmStateChangeErc1155Transfer' - $ref: '#/components/schemas/EvmStateChangeErc1155ApprovalForAll' discriminator: propertyName: kind mapping: ERC20_TRANSFER: '#/components/schemas/EvmStateChangeErc20Transfer' ERC20_APPROVAL: '#/components/schemas/EvmStateChangeErc20Approval' NATIVE_ASSET_TRANSFER: '#/components/schemas/EvmStateChangeNativeAssetTransfer' ERC721_TRANSFER: '#/components/schemas/EvmStateChangeErc721Transfer' ERC721_APPROVAL: '#/components/schemas/EvmStateChangeErc721Approval' ERC721_APPROVAL_FOR_ALL: '#/components/schemas/EvmStateChangeErc721ApprovalForAll' ERC1155_TRANSFER: '#/components/schemas/EvmStateChangeErc1155Transfer' ERC1155_APPROVAL_FOR_ALL: '#/components/schemas/EvmStateChangeErc1155ApprovalForAll' error: description: A nullable error object which includes the parsed simulation error encountered (if any) oneOf: - $ref: '#/components/schemas/EvmTransactionRevertedError' - $ref: '#/components/schemas/EvmTransactionError' - $ref: '#/components/schemas/EvmSimulationFailedError' - $ref: '#/components/schemas/EvmUnknownError' - type: 'null' discriminator: propertyName: kind mapping: TRANSACTION_REVERTED: '#/components/schemas/EvmTransactionRevertedError' TRANSACTION_ERROR: '#/components/schemas/EvmTransactionError' SIMULATION_FAILED: '#/components/schemas/EvmSimulationFailedError' UNKNOWN_ERROR: '#/components/schemas/EvmUnknownError' gas: type: object description: An object that contains nullable fields with information about the estimated gas consumption of the simulated transaction properties: gasLimit: type: string example: '46220' description: A nullable field that if the simulation was successful contains the estimated upper limit of gas usage for this transaction. The gasLimit should be viewed as an upper bound of how much gas the transaction can use, not as an accurate estimate how much it will realistically consume when submitted on-chain. nullable: true examples: erc20_swap: summary: ERC20 Swap ETH for DAI value: action: NONE simulationResults: error: null gas: {} expectedStateChanges: - humanReadableDiff: Receive 1530.81307 DAI rawInfo: data: amount: after: '557039306766411381864245' before: '555508493698012633714742' contract: address: '0x6b175474e89094c44da98b954eedeac495271d0f' kind: ACCOUNT decimals: 18 name: Dai Stablecoin symbol: DAI asset: address: '0x6b175474e89094c44da98b954eedeac495271d0f' symbol: DAI name: Dai Stablecoin decimals: 18 verified: true lists: - COINGECKO - ZERION - ONE_INCH - UNISWAP - MY_CRYPTO_API - KLEROS_TOKENS imageUrl: https://d1ts37qlq4uz4s.cloudfront.net/evm__evm%3A%3Aethereum__evm%3A%3Aethereum%3A%3Amainnet__0x6b175474e89094c44da98b954eedeac495271d0f.png kind: ERC20_TRANSFER - humanReadableDiff: Send 1 ETH rawInfo: data: amount: after: '1182957389356504134754' before: '1183957389356504134754' contract: address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' kind: ACCOUNT decimals: 18 name: Ether symbol: ETH kind: NATIVE_ASSET_TRANSFER warnings: [] erc20_approval: summary: ERC20 Approval value: action: NONE simulationResults: error: null gas: {} expectedStateChanges: - humanReadableDiff: Approve to transfer up to 1000 USDT rawInfo: data: amount: after: '1000000000' before: '0' asset: address: '0xdac17f958d2ee523a2206206994597c13d831ec7' name: Tether USD decimals: 6 lists: - COINGECKO - ZERION - ONE_INCH - UNISWAP - MY_CRYPTO_API - KLEROS_TOKENS symbol: USDT verified: true imageUrl: https://d1ts37qlq4uz4s.cloudfront.net/evm__evm%3A%3Aethereum__evm%3A%3Aethereum%3A%3Amainnet__0xdac17f958d2ee523a2206206994597c13d831ec7.png contract: address: '0xdac17f958d2ee523a2206206994597c13d831ec7' kind: ACCOUNT decimals: 6 name: Tether USD owner: address: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045' kind: ACCOUNT spender: address: '0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45' kind: ACCOUNT symbol: USDT kind: ERC20_APPROVAL warnings: [] erc721_buy: summary: Buy an ERC721 NFT with ETH value: action: NONE simulationResults: error: null gas: {} expectedStateChanges: - humanReadableDiff: 'Receive PudgyPenguins #7238' rawInfo: data: amount: after: '1' before: '0' contract: address: '0xbd3531da5cf5857e7cfaa92426877b022e612cf8' kind: ACCOUNT metadata: rawImageUrl: https://ipfs.io/ipfs/QmNf1UsmdGaMbpatQ6toXSkzDpizaGmC9zfunCyoz1enD5/penguin/7238.png name: PudgyPenguins symbol: PPG tokenId: '7238' kind: ERC721_TRANSFER - humanReadableDiff: Send 3.181 ETH rawInfo: data: amount: after: '998426264937289938488' before: '1001607264937289938488' contract: address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' kind: ACCOUNT decimals: 18 name: Ether symbol: ETH kind: NATIVE_ASSET_TRANSFER warnings: [] erc721_approve_for_all: summary: ERC721 Approve For All value: action: WARN simulationResults: error: null gas: {} expectedStateChanges: - humanReadableDiff: Approve to transfer all your BoredApeYachtClub rawInfo: data: amount: after: '115792089237316195423570985008687907853269984665640564039457584007913129639935' before: '0' contract: address: '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d' kind: ACCOUNT name: BoredApeYachtClub owner: address: '0x38191ca1307ebf67ca1a7caf5346dbd91d882ca6' kind: ACCOUNT spender: address: '0x1e0049783f008a0085193e00003d00cd54003c71' kind: ACCOUNT symbol: BAYC kind: ERC721_APPROVAL_FOR_ALL warnings: - kind: UNLIMITED_ALLOWANCE_TO_NFTS message: You are allowing this website to withdraw funds from your account in the future severity: WARNING erc721_approve: summary: ERC721 Approve value: action: NONE simulationResults: error: null gas: {} expectedStateChanges: - humanReadableDiff: Approve to transfer BoredApeYachtClub rawInfo: data: amount: after: '1' before: '0' contract: address: '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d' kind: ACCOUNT metadata: rawImageUrl: ipfs://QmXFwVpxkRtfohxARE6f4gc5oRSVQ9iVU1fxzbj9AkJXx5 name: BoredApeYachtClub owner: address: '0xed2ab4948ba6a909a7751dec4f34f303eb8c7236' kind: ACCOUNT spender: address: '0x1e0049783f008a0085193e00003d00cd54003c71' kind: ACCOUNT symbol: BAYC tokenId: '6603' kind: ERC721_APPROVAL warnings: [] erc1155_buy: summary: Buy an ERC1155 token with ETH value: action: NONE simulationResults: error: null gas: {} expectedStateChanges: - humanReadableDiff: Send 0.033 ETH rawInfo: data: amount: after: '71057321770366572' before: '104057321770366572' contract: address: '0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee' kind: ACCOUNT decimals: 18 name: Ether symbol: ETH kind: NATIVE_ASSET_TRANSFER - humanReadableDiff: Receive Corgi rawInfo: data: amount: after: '1' before: '0' contract: address: '0x51e613727fdd2e0b91b51c3e5427e9440a7957e4' kind: ACCOUNT metadata: rawImageUrl: https://img.cryptocorgis.co/corgi/13014975 tokenId: '13014975' kind: ERC1155_TRANSFER warnings: [] erc1155_approve_for_all: summary: ERC1155 approve for all value: action: WARN simulationResults: error: null gas: {} expectedStateChanges: - humanReadableDiff: Approve to transfer all your Sandbox's ASSETs rawInfo: data: amount: after: '115792089237316195423570985008687907853269984665640564039457584007913129639935' before: '0' contract: address: '0xa342f5d851e866e18ff98f351f2c6637f4478db5' kind: ACCOUNT owner: address: '0xed2ab4948ba6a909a7751dec4f34f303eb8c7236' kind: ACCOUNT spender: address: '0x00000000006c3852cbef3e08e8df289169ede581' kind: ACCOUNT kind: ERC1155_APPROVAL_FOR_ALL - warnings: - kind: UNLIMITED_ALLOWANCE_TO_NFTS message: You are allowing this website to withdraw funds from your account in the future severity: WARNING '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequest' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Unauthorized' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/InternalServerError' /solana/v0/mainnet/scan/transactions: post: tags: - Scan transaction summary: Solana operationId: scan-transactions-solana description: 'Scan Solana transactions in order to receive recommended actions, tailored warnings and human-readable simulation results explaining what the transaction will do. The API will return a list of warnings and a list of human-readable simulation results. ### Supported networks | Network | Base URL | | --- | --- | | Mainnet | https://api.blowfish.xyz/solana/v0/mainnet/scan/transactions | | Testnet | https://api.blowfish.xyz/solana/v0/testnet/scan/transactions | | Devnet | https://api.blowfish.xyz/solana/v0/devnet/scan/transactions | Note: If you are using a free, self-service API key from our Developer Portal, be sure to add the `free` subdomain (e.g., `https://free.api.blowfish.xyz`) to the above endpoints. ' security: - ApiKeyAuth: [] parameters: - name: language in: query description: The language to use in the returned human-readable warnings and simulation results schema: $ref: '#/components/schemas/Languages' - name: X-Api-Key in: header description: API Key required: true schema: $ref: '#/components/schemas/ApiKeyHeader' - name: X-Api-Version in: header description: Which version of the API to use schema: $ref: '#/components/schemas/ApiVersionHeader' - name: Content-Type in: header description: The expected return content type schema: $ref: '#/components/schemas/ContentType' requestBody: required: true content: application/json: schema: type: object properties: transactions: type: array items: type: string example: GfoPPvWL5eSJssAoemjqUpE9nMVt5kWTNznPz1F1CKi5kcBY8tDBgLzpbdBnTQjHJgyutdXEHmkkmE3iM3y94LE5s3zZ8wq2sjMkgjpddAnTwY1TrGSk6yZNykT2Un1PKqwo2XMXBa5FR3BpKStBV4krbiFzT9UySLSysTBzw31caBCuvcsetdE7yYWXGXEGbRiCf3BCWFkrooKAHrzW7bSHmGdUuB2sip9wEcb7r3SjhzkkAK2tySVkrbvVB5c11oF6zDYVys7wpaGbjn2DsVPYo9gbGVQXHi4qgCBXTzCT8v8pZV9gh4FeMRWw5yzfuWtxw44aQ6EKz55cTUhBAVMUCEZQUrfJbx1NzEYod41n7GFHzEXTZyPCo5CnGmX8u2UhuLhx2n8ZNg6Mj1dH6PGRQnKtxAzwicfPJ9KahGjoNLNcki9gfdxURy56DY3YH3DDviLrKKjiEoTmZs8UiaSBwRjsLA5dhJ6G6LyC9bjertH1cpcDWSQhRfwBXHAvHNirLX8927WcCHoTAUWXKqB34YJu4cLPwTn5kUr4FMQgQBhvyaMDDzrH76bwSFS4oRmMqXtscyWXbdXJC1k8iiRHftqmZhg3bP3UydcXKBUQJi15A64kjpkGY7ChxdcuwgLzKnVNJGG897nUPsVmsVfZNwiVqVZ6QKv1z7yv4EGvbkhWStx9NFvv8JkHjUhL4vNo8o7TPNib21WeFLgmiAu7nrn25kkJLZ3XE6ZVceUEbywJCMdwMomPx2maxauRehuxSorkE3ngcj7mC88HEgPTBQiP2JRJxcFvQp1CsfErCs3F3uG79kEKJLzNoFbCL58s6JsH3rE69wcb5e47JztFmrmGp4p3mb2jYoUfj6AfCctky9MnB6jWTdyg2o7zUcr5f35Qwahgcsce95RgH9mcWKFLqu49RxpFUgnHiNaDG67YEGdDgu2YABYxv6tv7PEtCJqZH4VVbpu9TRQCCXkQv4Xj7j6ALmhbNoJBEHJHqTGhiNQvV5aibesnGG62epoPz36uNJZrt6GV53AeLig22HVtBRr1NE2wB6h9Ax6VX7KKrekKBMzUxeAjWbGERkCWuXdRjTrpDG3bbDCDgep8k9ZnDDQtNqSKJbbxZ1VJvMKgcgty5P4n4YTXTSFNQ9kE8VCikb9tpN6iRnUwD9GFRQfiR76QNZs5hU2hn8asGYFnRcEgjZV9cSwC6foKrV47uq9X2dPWZg56TpNhPb85fzbkN13LdFHcua3MTvWmSD4LZAFMF8QWqpb7b2YZZpc1sQvYc5gN856JwehDybMsB2EFepiBFQXTxwB2c9xbHjEf3RcWwe3LZiD8vvWLfGF2t7PzwDKbEREpsX8piN76GkCGiRjgkdehiXaLzjQ5nW3Fi8F2HjALRRjHJxfNQq4vH4B6Nwp7rruzqdY1j6cm3QagrgeXCmfSmRV6kaCMRRQYbVW6Ju4rMbLTWa7FAWCmR2rvmevmi1PmV8zhApVFbV9VHd2hTazrddBWXRAmTRBZEjyRqSkr3y45ecph1ae87Pi3quaEEhjFP9oSWTUs3ufHCW2XjLj description: Base58 or Base64 encoded Solana transactions to scan userAccount: type: string example: 5ufzDEwP2jKrvx78inuWNPrXRmR9AcXySqc2B3CRqR3G description: Base58-encoded account of signer of transactions metadata: $ref: '#/components/schemas/RequestMetadata' required: - transactions - userAccount - metadata responses: '200': description: Successful response content: application/json: schema: type: object properties: action: $ref: '#/components/schemas/ActionEnum' warnings: $ref: '#/components/schemas/Warning' simulationResults: type: object properties: isRecentBlockhashExpired: type: boolean example: false description: Whether all of the transaction's recentBlockhashes have expired expectedStateChanges: type: array description: An array of state changes one could expect if these transactions were submitted on-chain. Each state change represents a meaningful change to the end-user's assets or permissions on-chain. We reserve the right to add new state change types, so any handling logic custom to state change types should fallback gracefully to showing the end-user the `humanReadableDiff` of any unrecognized state change types. items: type: object properties: humanReadableDiff: type: string description: Computed explanation of the state change that can be directly presented to the end-user. While the API is still in development, we suggest integrators expose this in their signing UI since the list of state change kinds has not yet stabilized. example: Receive 0.05657 SOL suggestedColor: type: string description: Suggested text color when presenting the diff to end-users enum: - CREDIT - DEBIT example: CREDIT rawInfo: description: A machine-parsable state change object describing the state change. oneOf: - $ref: '#/components/schemas/SolanaStateChangeSolTransfer' - $ref: '#/components/schemas/SolanaStageChangeSplTransfer' - $ref: '#/components/schemas/SolanaStateChangeSplApproval' - $ref: '#/components/schemas/SolanaStateChangeSolStakeAuthorityChange' discriminator: propertyName: kind mapping: SOL_TRANSFER: '#/components/schemas/SolanaStateChangeSolTransfer' SPL_TRANSFER: '#/components/schemas/SolanaStageChangeSplTransfer' SPL_APPROVAL: '#/components/schemas/SolanaStateChangeSplApproval' SOL_STAKE_AUTHORITY_CHANGE: '#/components/schemas/SolanaStateChangeSolStakeAuthorityChange' error: type: object properties: kind: type: string description: A unique representation of the error kind. Currently maps to the screaming case of the SystemError enum values, TokenError and TransactionError enum values. example: INSUFFICIENT_FUNDS enum: - AN_ACCOUNT_WITH_THE_SAME_ADDRESS_ALREADY_EXISTS - ACCOUNT_DOES_NOT_HAVE_ENOUGH_SOL_TO_PERFORM_THE_OPERATION - CANNOT_ASSIGN_ACCOUNT_TO_THIS_PROGRAM_ID - CANNOT_ALLOCATE_ACCOUNT_DATA_OF_THIS_LENGTH - LENGTH_OF_REQUESTED_SEED_IS_TOO_LONG - PROVIDED_ADDRESS_DOES_NOT_MATCH_ADDRESSED_DERIVED_FROM_SEED - ADVANCING_STORED_NONCE_REQUIRES_A_POPULATED_RECENTBLOCKHASHES_SYSVAR - STORED_NONCE_IS_STILL_IN_RECENT_BLOCKHASHES - SPECIFIED_NONCE_DOES_NOT_MATCH_STORED_NONCE - LAMPORT_BALANCE_BELOW_RENT-EXEMPT_THRESHOLD - INSUFFICIENT_FUNDS - INVALID_MINT - ACCOUNT_NOT_ASSOCIATED_WITH_THIS_MINT - OWNER_DOES_NOT_MATCH - FIXED_SUPPLY - ALREADY_IN_USE - INVALID_NUMBER_OF_PROVIDED_SIGNERS - INVALID_NUMBER_OF_REQUIRED_SIGNERS - STATE_IS_UNINITIALIZED - INSTRUCTION_DOES_NOT_SUPPORT_NATIVE_TOKENS - NON-NATIVE_ACCOUNT_CAN_ONLY_BE_CLOSED_IF_ITS_BALANCE_IS_ZERO - INVALID_INSTRUCTION - STATE_IS_INVALID_FOR_REQUESTED_OPERATION - OPERATION_OVERFLOWED - ACCOUNT_DOES_NOT_SUPPORT_SPECIFIED_AUTHORITY_TYPE - THIS_TOKEN_MINT_CANNOT_FREEZE_ACCOUNTS - ACCOUNT_IS_FROZEN - THE_PROVIDED_DECIMALS_VALUE_DIFFERENT_FROM_THE_MINT_DECIMALS - INSTRUCTION_DOES_NOT_SUPPORT_NON-NATIVE_TOKENS - ACCOUNT_IN_USE - ACCOUNT_LOADED_TWICE - ATTEMPT_TO_DEBIT_AN_ACCOUNT_BUT_FOUND_NO_RECORD_OF_A_PRIOR_CREDIT. - ATTEMPT_TO_LOAD_A_PROGRAM_THAT_DOES_NOT_EXIST - INSUFFICIENT_FUNDS_FOR_FEE - THIS_ACCOUNT_MAY_NOT_BE_USED_TO_PAY_TRANSACTION_FEES - THIS_TRANSACTION_HAS_ALREADY_BEEN_PROCESSED - BLOCKHASH_NOT_FOUND - ERROR_PROCESSING_INSTRUCTION_{0}:_{1} - LOADER_CALL_CHAIN_IS_TOO_DEEP - TRANSACTION_REQUIRES_A_FEE_BUT_HAS_NO_SIGNATURE_PRESENT - TRANSACTION_CONTAINS_AN_INVALID_ACCOUNT_REFERENCE - TRANSACTION_DID_NOT_PASS_SIGNATURE_VERIFICATION - THIS_PROGRAM_MAY_NOT_BE_USED_FOR_EXECUTING_INSTRUCTIONS - TRANSACTION_FAILED_TO_SANITIZE_ACCOUNTS_OFFSETS_CORRECTLY - TRANSACTIONS_ARE_CURRENTLY_DISABLED_DUE_TO_CLUSTER_MAINTENANCE - TRANSACTION_PROCESSING_LEFT_AN_ACCOUNT_WITH_AN_OUTSTANDING_BORROWED_REFERENCE - TRANSACTION_WOULD_EXCEED_MAX_BLOCK_COST_LIMIT - TRANSACTION_VERSION_IS_UNSUPPORTED - TRANSACTION_LOADS_A_WRITABLE_ACCOUNT_THAT_CANNOT_BE_WRITTEN - TRANSACTION_WOULD_EXCEED_MAX_ACCOUNT_LIMIT_WITHIN_THE_BLOCK - TRANSACTION_WOULD_EXCEED_ACCOUNT_DATA_LIMIT_WITHIN_THE_BLOCK - TRANSACTION_LOCKED_TOO_MANY_ACCOUNTS - TRANSACTION_LOADS_AN_ADDRESS_TABLE_ACCOUNT_THAT_DOESN'T_EXIST - TRANSACTION_LOADS_AN_ADDRESS_TABLE_ACCOUNT_WITH_AN_INVALID_OWNER - TRANSACTION_LOADS_AN_ADDRESS_TABLE_ACCOUNT_WITH_INVALID_DATA - TRANSACTION_ADDRESS_TABLE_LOOKUP_USES_AN_INVALID_INDEX - TRANSACTION_LEAVES_AN_ACCOUNT_WITH_A_LOWER_BALANCE_THAN_RENT-EXEMPT_MINIMUM - TRANSACTION_WOULD_EXCEED_MAX_VOTE_COST_LIMIT - TRANSACTION_WOULD_EXCEED_TOTAL_ACCOUNT_DATA_LIMIT - TRANSACTION_CONTAINS_A_DUPLICATE_INSTRUCTION_({0})_THAT_IS_NOT_ALLOWED humanReadableError: type: string example: You don't have enough tokens for this transaction description: Human readable version of the error description: A nullable error object which includes the parsed simulation error encountered (if any) nullable: true raw: type: object description: Raw results of the simulation properties: err: type: string description: Program instruction error causing the failure example: BlockhashNotFound nullable: true logs: type: array description: Program logs generated during execution items: type: string example: Program ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL invoke [1] accounts: type: array description: Account state post-simulation or null values on failure items: anyOf: - type: object properties: lamports: type: integer format: int32 example: 143685268 data: type: array items: type: string example: [] owner: type: string example: '11111111111111111111111111111111' executable: type: boolean rentEpoch: type: integer format: int32 example: 322 - type: string enum: - 'null' unitsConsumed: type: integer format: int32 example: 148013 returnData: type: object nullable: true properties: programId: type: string description: the program that generated the return data, as base-58 encoded Pubkey example: TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA data: type: array description: The return data itself, as base-64 encoded binary data and it's encoding as the second element items: type: string example: AQAAANVgbnOWDT3H5I2/oye32/palPUEeT1S5fbKj2WqgpTuAQAAAAAAAAAAAQEAAADVYG5zlg09x+SNv6Mnt9v6WpT1BHk9UuX2yo9lqoKU7g== example: - AQAAANVgbnOWDT3H5I2/oye32/palPUEeT1S5fbKj2WqgpTuAQAAAAAAAAAAAQEAAADVYG5zlg09x+SNv6Mnt9v6WpT1BHk9UuX2yo9lqoKU7g== - base64 status: type: string enum: - CHECKS_PASSED - SUSPECTED_MALICIOUS - KNOWN_MALICIOUS example: CHECKS_PASSED deprecated: true description: An enum value describing whether a program in the proposed transactions was either a known or suspected malicious program. Deprecated. Use `action` instead. examples: stateChanges: summary: State changes value: status: CHECKS_PASSED action: NONE warnings: [] simulationResults: isRecentBlockhashExpired: false expectedStateChanges: - humanReadableDiff: Receive 0.05657 SOL suggestedColor: CREDIT rawInfo: kind: SOL_TRANSFER data: symbol: SOL name: Solana Native Token decimals: 9 diff: sign: PLUS digits: 56573477 - humanReadableDiff: Send 2 USDT suggestedColor: DEBIT rawInfo: kind: SPL_TRANSFER data: symbol: USDT name: USDT mint: Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB decimals: 6 diff: sign: MINUS digits: 2000000 - humanReadableDiff: Approve to transfer Phantom QA NFT rawInfo: kind: SPL_APPROVAL data: delegate: CL38BiCb5fs3qGnKKSusaJdY24aFUUZ6vkvkujrmah83 mint: 4ERKJVpwqS6Kcj115YSAjqU4WYV3YCDiYHPS72eQTY6p symbol: PHANTOMQA name: Phantom QA NFT decimals: 0 diff: sign: PLUS digits: 1525878906250000000 supply: 1 metaplexTokenStandard: non_fungible - humanReadableDiff: Unapprove from transferring up to 0.00132 USDC rawInfo: kind: SPL_APPROVAL data: delegate: FCRBwXC5vrzHi2Vxgn3L2NB2KKFuRhiHBjioC47sSm2o mint: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v symbol: USDC name: USD Coin decimals: 6 diff: sign: MINUS digits: 1321 supply: 5034964468128435 metaplexTokenStandard: unknown - humanReadableDiff: Transfer control over your SOL staking account (2AG3be..p2vFQS) suggestedColor: DEBIT rawInfo: kind: SOL_STAKE_AUTHORITY_CHANGE data: stakeAccount: 2AG3beWwvyvEMLfwJcQS9DKMV62C3UWTTf8d7gp2vFQS currAuthorities: staker: J58MrVr9qJPzJJS8RPQUDfaFirN3PiVHXU48zr95FY48 withdrawer: J58MrVr9qJPzJJS8RPQUDfaFirN3PiVHXU48zr95FY48 futureAuthorities: staker: EpochxXNkmM2akxBTuCEizW1oWyzgrPZ1CVZ3GpD7Egm withdrawer: EpochxXNkmM2akxBTuCEizW1oWyzgrPZ1CVZ3GpD7Egm symbol: SOL name: Solana Native Token decimals: 9 solStaked: 228895995552 error: null raw: err: null logs: [] accounts: [] unitsConsumed: 148013 warnings: summary: Warnings value: action: BLOCK warnings: - severity: CRITICAL kind: TRUSTED_BLOCKLIST_DOMAIN message: This transaction originates from a known malicious domain. - severity: CRITICAL kind: KNOWN_MALICIOUS message: We believe this transaction is malicious and unsafe to sign. Approving may lead to loss of funds. - severity: CRITICAL kind: SET_OWNER_AUTHORITY message: This transaction changes the owner of your SPL tokens. This allows the new owner to transfer the tokens without your permission. - severity: WARNING kind: DANGLING_APPROVAL message: You are allowing this website to withdraw funds from your account in the future - severity: WARNING kind: SUSPECTED_MALICIOUS message: We suspect this transaction is malicious. Approving may lead to loss of funds. simulationResults: isRecentBlockhashExpired: false expectedStateChanges: [] error: null raw: err: null logs: [] accounts: [] unitsConsumed: 148013 '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/BadRequest' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Unauthorized' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/InternalServerError' components: schemas: EvmStateChangeErc721Transfer: type: object description: ERC721 NFT transfers properties: kind: type: string description: What kind of state change this object is enum: - ERC721_TRANSFER example: ERC721_TRANSFER data: type: object properties: amount: $ref: '#/components/schemas/EvmAmount' contract: $ref: '#/components/schemas/EvmAddressInfo' metadata: $ref: '#/components/schemas/EvmNftMetadata' name: $ref: '#/components/schemas/EvmName' symbol: $ref: '#/components/schemas/EvmSymbol' tokenId: $ref: '#/components/schemas/EvmErc721TokenId' assetPrice: description: The NFT collection's $-value floor price $ref: '#/components/schemas/LegacyAssetPrice' description: Data associated with the state change SolanaStateChangeSplApproval: type: object description: Approval request to transfer user's tokens properties: kind: type: string description: What kind of state change this object is enum: - SPL_APPROVAL example: SPL_APPROVAL data: type: object properties: delegate: type: string description: Who will be able to transfer the user's tokens on their behalf example: 3kQJyZKC4tdQy3nqCqFiLDT2V7dzG65vSKtkUGCht5L3 mint: type: string description: The SPL token mint program address example: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v symbol: type: string description: SPL token symbol example: USDC name: type: string description: SPL token name example: USD Coin decimals: type: integer description: SPL token decimals example: 13 diff: $ref: '#/components/schemas/Diff' supply: type: integer description: Total supply of the token example: 1000000000000000000 metaplexTokenStandard: description: The Metaplex token standard for this asset if any $ref: '#/components/schemas/MetaplexTokenStandard' assetPrice: description: The $-value price of the asset $ref: '#/components/schemas/LegacyAssetPrice' EvmStateChangeErc1155Transfer: type: object description: ERC1155 transfers properties: kind: type: string description: What kind of state change this object is enum: - ERC1155_TRANSFER example: ERC1155_TRANSFER data: type: object properties: amount: $ref: '#/components/schemas/EvmAmount' contract: $ref: '#/components/schemas/EvmAddressInfo' metadata: $ref: '#/components/schemas/EvmNftMetadata' tokenId: $ref: '#/components/schemas/EvmErc1155TokenId' assetPrice: description: The NFT collection's $-value floor price $ref: '#/components/schemas/LegacyAssetPrice' description: Data associated with the state change EvmStateChangeErc20Approval: type: object description: Approval request to transfer user's ERC20 tokens properties: kind: type: string description: What kind of state change this object is enum: - ERC20_APPROVAL example: ERC20_APPROVAL data: type: object properties: contract: $ref: '#/components/schemas/EvmAddressInfo' owner: description: The owner of the ERC20 tokens $ref: '#/components/schemas/EvmAddressInfo' spender: description: The entity that will be allowed to spend them if the approval is granted $ref: '#/components/schemas/EvmAddressInfo' amount: $ref: '#/components/schemas/EvmAmount' asset: $ref: '#/components/schemas/EvmAsset' description: Data associated with the state change Warning: type: array description: An array of warnings generated from scanning the transactions. All these warnings won't be returned in a single response (some are mutually exclusive) but it is advisable that your UI can display multiple warnings. Warnings are returned sorted by severity, so if you can only show a user one warning, show them the one at the 0th index. items: type: object properties: severity: type: string description: warning severity level. We suggest a yellow message if "WARNING", and a red message if "CRITICAL". enum: - CRITICAL - WARNING example: WARNING kind: type: string description: Warning kind. Can be used to override specific warnings with your own custom versions. We reserve the right to add new warnings as the need arises, so your UI should likewise defer to the supplied message if the kind isn't recognized by your code. enum: - SUSPECTED_MALICIOUS - KNOWN_MALICIOUS - TRANSFERRING_ERC20_TO_OWN_CONTRACT - UNLIMITED_ALLOWANCE_TO_NFTS - BULK_APPROVALS_REQUEST - SET_OWNER_AUTHORITY - TRUSTED_BLOCKLIST_DOMAIN - SEMI_TRUSTED_BLOCKLIST_DOMAIN - DANGLING_APPROVAL - TRADE_FOR_NOTHING - PERMIT_UNLIMITED_ALLOWANCE - PERMIT_NO_EXPIRATION - ETH_SIGN_TX_HASH - OBFUSCATED_CODE - DEVTOOLS_DISABLED - BLOCKLISTED_DOMAIN_CROSS_ORIGIN - WHITELISTED_DOMAIN_CROSS_ORIGIN - TOO_MANY_TRANSACTIONS - NON_ASCII_URL - COMPROMISED_AUTHORITY_UPGRADE - POISONED_ADDRESS - APPROVAL_TO_E_O_A - COPY_CAT_DOMAIN example: SUSPECTED_MALICIOUS message: type: string description: human-readable message to present to the end-user example: 'Domain found on blocklists maintained by/: Blowfish. This website is very likely to be a scam.' EvmStateChangeErc721ApprovalForAll: type: object description: Approval request for all owned ERC721 NFTs in a collection properties: kind: type: string description: What kind of state change this object is enum: - ERC721_APPROVAL_FOR_ALL example: ERC721_APPROVAL_FOR_ALL data: type: object properties: amount: $ref: '#/components/schemas/EvmAmount' contract: $ref: '#/components/schemas/EvmAddressInfo' name: $ref: '#/components/schemas/EvmName' owner: $ref: '#/components/schemas/EvmAddressInfo' spender: $ref: '#/components/schemas/EvmAddressInfo' symbol: $ref: '#/components/schemas/EvmSymbol' assetPrice: description: The NFT collection's $-value floor price $ref: '#/components/schemas/LegacyAssetPrice' description: Data associated with the state change ApiKeyHeader: description: API key type: string default: 4daa1e3b-87e6-40b2-8883-758feb6a8e46 example: e79e18b4-8ffa-4fab-9e2e-f24057644f93 EvmSymbol: type: string example: USDT EvmErc721TokenId: type: string nullable: true example: '100' description: The ID of the ERC721 token. It can temporarily be null in some edge cases where we are unable to parse it InternalServerError: type: object properties: error: type: string enum: - Internal Server Error example: Internal Server Error ContentType: description: Expected response content type type: string default: application/json example: application/json Languages: type: string default: en example: en description: Specify the desired language for the returned warning messages and human-readable simulation results. If unknown, defaults to English. enum: - am - ar - ar-SA - ar-EG - ar-DZ - ar-MA - ar-IQ - ar-JO - ar-KW - ar-LB - ar-LY - ar-OM - ar-QA - ar-SY - ar-TN - ar-AE - ar-YE - bn - fr - fr-BE - fr-CA - fr-FR - fr-LU - fr-CH - de - de-AT - de-DE - de-LI - de-LU - de-CH - en - en-US - en-GB - en-CA - en-AU - en-NZ - en-ZA - en-IE - en-IN - en-SG - en-JM - en-BZ - en-TT - en-PH - it - it-IT - it-CH - ms - ms-BN - ms-MY - pt - pt-BR - pt-PT - ru - ru-RU - es - es-AR - es-BO - es-CL - es-CO - es-CR - es-CU - es-DO - es-EC - es-SV - es-GQ - es-GT - es-HN - es-MX - es-NI - es-PA - es-PY - es-PE - es-PH - es-PR - es-ES - es-US - es-UY - es-VE - sw - tr - tr-TR - fil - gu_IN - ha - hi - id - ig - ja - ko - my - pa - ta - th - vi - yo - zh_CN - zh_TW EvmStateChangeErc1155ApprovalForAll: type: object description: Approval request for all owned ERC1155 assets properties: kind: type: string description: What kind of state change this object is enum: - ERC1155_APPROVAL_FOR_ALL example: ERC1155_APPROVAL_FOR_ALL data: type: object properties: amount: $ref: '#/components/schemas/EvmAmount' contract: $ref: '#/components/schemas/EvmAddressInfo' owner: description: The owner of the ERC1155 tokens $ref: '#/components/schemas/EvmAddressInfo' spender: description: The entity that will be allowed to transfer all the owner's tokens of the given ERC1155 contract if the approval is granted $ref: '#/components/schemas/EvmAddressInfo' assetPrice: description: The NFT collection's $-value floor price $ref: '#/components/schemas/LegacyAssetPrice' description: Data associated with the state change EvmErc1155TokenId: type: string nullable: true example: '100' description: The ID of the ERC1155 token SolanaStageChangeSplTransfer: type: object description: SPL token transfer properties: kind: type: string description: What kind of state change this object is enum: - SPL_TRANSFER example: SPL_TRANSFER data: type: object properties: symbol: type: string description: SPL token symbol example: USDC name: type: string description: SPL token name example: USD Coin mint: type: string description: The SPL token mint program address example: EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v decimals: type: integer description: SPL token decimals example: 13 diff: $ref: '#/components/schemas/Diff' assetPrice: description: The $-value price of the asset $ref: '#/components/schemas/LegacyAssetPrice' MetaplexTokenStandard: type: string enum: - non_fungible - fungible_asset - fungible - non_fungible_edition - unknown example: fungible EvmStateChangeErc721Approval: type: object description: Approval request for a specific token in an ERC721 collection properties: kind: type: string description: What kind of state change this object is enum: - ERC721_APPROVAL example: ERC721_APPROVAL data: type: object properties: amount: $ref: '#/components/schemas/EvmAmount' contract: $ref: '#/components/schemas/EvmAddressInfo' metadata: $ref: '#/components/schemas/EvmNftMetadata' name: $ref: '#/components/schemas/EvmName' owner: $ref: '#/components/schemas/EvmAddressInfo' spender: $ref: '#/components/schemas/EvmAddressInfo' symbol: $ref: '#/components/schemas/EvmSymbol' tokenId: $ref: '#/components/schemas/EvmErc721TokenId' assetPrice: description: The NFT collection's $-value floor price $ref: '#/components/schemas/LegacyAssetPrice' description: Data associated with the state change SolanaStateChangeSolTransfer: type: object description: Solana native token transfer properties: kind: type: string description: What kind of state change this object is enum: - SOL_TRANSFER example: SOL_TRANSFER data: type: object description: Machine-parseable data relevant to this state change kind properties: symbol: type: string description: Symbol of the Solana native token example: SOL name: type: string description: Name of the Solana native token example: Solana Native Token decimals: type: integer description: Decimals of the Solana native token example: 9 diff: $ref: '#/components/schemas/Diff' assetPrice: description: The $-value price of the asset $ref: '#/components/schemas/LegacyAssetPrice' SolanaStateChangeSolStakeAuthorityChange: type: object description: Transferring control over a user's SOL staking account properties: kind: type: string description: What kind of state change this object is enum: - SOL_STAKE_AUTHORITY_CHANGE example: SOL_STAKE_AUTHORITY_CHANGE data: type: object properties: stakeAccount: type: string description: The stake account address example: 2AG3beWwvyvEMLfwJcQS9DKMV62C3UWTTf8d7gp2vFQS currAuthorities: type: object description: Current authorities with control over the staking account properties: staker: type: string description: Authority who can make staking changes example: J58MrVr9qJPzJJS8RPQUDfaFirN3PiVHXU48zr95FY48 withdrawer: type: string description: Authority who can withdraw the funds from the staking account example: J58MrVr9qJPzJJS8RPQUDfaFirN3PiVHXU48zr95FY48 futureAuthorities: type: object description: Future authorities who will have control over the staking account properties: staker: type: string description: Authority who can make staking changes example: EpochxXNkmM2akxBTuCEizW1oWyzgrPZ1CVZ3GpD7Egm withdrawer: type: string description: Authority who can withdraw the funds from the staking account example: EpochxXNkmM2akxBTuCEizW1oWyzgrPZ1CVZ3GpD7Egm symbol: type: string description: Symbol of the Solana native token example: SOL name: type: string description: Name of the Solana native token example: Solana Native Token decimals: type: integer description: Decimals of the Solana native token example: 9 solStaked: type: integer description: Amount of SOL staked by this account example: 1000000000000 EvmTransactionError: type: object properties: kind: type: string enum: - INVALID_TRANSACTION example: INVALID_TRANSACTION humanReadableError: type: string description: Human readable explanation of the error example: Transaction error (LackOfFundForGasLimit) error_type: type: string example: LackOfFundForGasLimit description: For all the errors during the execution that do not have a revert reason. Like InvalidOpcode or LackOfFundForGasLimit. Unauthorized: type: object properties: error: type: string description: The error that caused the 401 example: 'Unauthorized: invalid X-API-KEY header value' EvmNftMetadata: type: object properties: rawImageUrl: type: string format: uri example: https://d1ts37qlq4uz4s.cloudfront.net/evm__evm%3A%3Aethereum__evm%3A%3Aethereum%3A%3Amainnet__0x6b175474e89094c44da98b954eedeac495271d0f.png description: Metadata associated with the NFT LegacyAssetPrice: type: object properties: source: type: string enum: - Simplehash - Defillama - Coingecko example: Coingecko last_updated_at: type: number example: 1679331222 dollar_value_per_token: type: number format: float example: 0.2784 Diff: type: object properties: sign: type: string description: Whether the amount is positive or negative enum: - PLUS - MINUS example: PLUS digits: type: integer example: 500000 EvmUserAccount: type: string description: A hex-representation of the user account who is being asked to sign the supplied transaction. In most cases this will be the same as the from property in the txObject example: '0xc1e42f862d202b4a0ed552c1145735ee088f6ccf' RequestMetadata: type: object properties: origin: type: string description: DApp domain proposing these transactions example: https://uniswap.org required: - origin EvmAddressInfo: type: object properties: address: type: string example: '0xdac17f958d2ee523a2206206994597c13d831ec7' description: The blockchain address kind: type: string enum: - ACCOUNT example: ACCOUNT description: The type of address EvmDecimals: type: integer example: 6 EvmAsset: type: object properties: address: type: string example: '0xdac17f958d2ee523a2206206994597c13d831ec7' description: The contract address of the asset symbol: type: string example: USDT description: The symbol of the asset name: type: string example: Tether USD description: The name of the asset decimals: type: integer example: 6 description: The number of decimal places used by the asset verified: type: boolean example: true description: Whether the asset is verified as safe lists: type: array items: type: string enum: - COINGECKO - ZERION - ONE_INCH - UNISWAP - MY_CRYPTO_API - KLEROS_TOKENS - POLYGON_POPULAR_TOKENS - EVM_NATIVE example: COINGECKO description: The trusted token lists on which this asset is listed imageUrl: type: string description: The URL of the asset's image nullable: true example: https://d1ts37qlq4uz4s.cloudfront.net/evm__evm%3A%3Aethereum__evm%3A%3Aethereum%3A%3Amainnet__0x6b175474e89094c44da98b954eedeac495271d0f.png price: description: $-value price of the asset. Floor price of the collection if asset is an NFT. $ref: '#/components/schemas/AssetPrice' EvmUnknownError: type: object properties: kind: type: string enum: - UNKNOWN_ERROR example: UNKNOWN_ERROR humanReadableError: type: string example: Unable to simulate transaction description: Human readable explanation of the error EvmSimulationFailedError: type: object properties: kind: type: string enum: - SIMULATION_FAILED example: SIMULATION_FAILED humanReadableError: type: string description: Human readable explanation of the error example: Transaction simulation failed reason: type: string description: Internal reason for the simulation failure example: Example reason EvmTransactionRevertedError: type: object properties: kind: type: string enum: - INVALID_TRANSACTION example: INVALID_TRANSACTION humanReadableError: type: string description: Human readable explanation of the error example: Transaction reverted (Token does not exist) revert_reason: type: string example: 'execution reverted: Too little received' description: Why the transaction reverted EvmAmount: type: object properties: after: type: string example: '5000000000' description: The value of the amount after the state change occurs before: type: string example: '15000000000' description: The value of the amount before the state change occurs AssetPrice: type: object properties: source: type: string enum: - Simplehash - Defillama - Coingecko example: Coingecko updatedAt: type: number example: 1679331222 dollarValuePerToken: type: number format: float example: 0.2784 ActionEnum: type: string enum: - NONE - BLOCK - WARN description: "An enum value specifying the suggested action for a wallet to take.\nPossible values:\n - `BLOCK`: Show the user a block screen instead of the signing UI since this is highly likely to be a malicious transaction. We suggest still having a greyed out link allowing the user to proceed if they really think they know better\n - `WARN`: Show the user the supplied warnings.\n - `NONE`: Show the signing UI without modification.\n" example: WARN EvmStateChangeErc20Transfer: type: object description: ERC20 token transfers properties: kind: type: string description: What kind of state change this object is enum: - ERC20_TRANSFER example: ERC20_TRANSFER data: type: object properties: contract: $ref: '#/components/schemas/EvmAddressInfo' amount: $ref: '#/components/schemas/EvmAmount' asset: $ref: '#/components/schemas/EvmAsset' description: Data associated with the state change EvmStateChangeNativeAssetTransfer: type: object description: ETH transfers properties: kind: type: string description: What kind of state change this object is enum: - NATIVE_ASSET_TRANSFER example: NATIVE_ASSET_TRANSFER data: type: object properties: contract: $ref: '#/components/schemas/EvmAddressInfo' decimals: $ref: '#/components/schemas/EvmDecimals' amount: $ref: '#/components/schemas/EvmAmount' symbol: $ref: '#/components/schemas/EvmSymbol' name: $ref: '#/components/schemas/EvmName' description: Data associated with the state change EvmName: type: string example: Tether USD BadRequest: type: object properties: error: type: string description: The error that caused the 400 example: No transactions to simulate ApiVersionHeader: type: string description: API version like 2022-06-01 default: '2022-06-01' example: '2022-06-01' securitySchemes: ApiKeyAuth: type: apiKey in: header name: X-Api-Key