Safe Transaction Service API Reference


The Safe Transaction Service API Reference is a collection of endpoints that allow to keep track of Safe transactions.

This service is available on multiple networks, at different endpoints.

Contracts

List Contracts


Returns the list of known smart contracts with their ABI’s

Query Parameters

ordering
string

Which field to use when ordering the results.

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

results - required
address - required
string

name - required
string

displayName - required
string

logoUri - required
string

contractAbi - required
abi - required
[]

description - required
string

relevance - required
integer

trustedForDelegateCall - required
boolean


Did this API route run successfully?
GET
/api/v1/contracts/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/contracts/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_31
{
_31
"count": 16233,
_31
"next": "https://safe-transaction-sepolia.safe.global/api/v1/contracts/?limit=2&offset=3",
_31
"previous": null,
_31
"results": [
_31
{
_31
"address": "0x0000000000000000000000000000000000000000",
_31
"name": "MetaMultiSigWallet",
_31
"displayName": "",
_31
"logoUri": null,
_31
"contractAbi": {
_31
"abi": [],
_31
"description": "MetaMultiSigWallet",
_31
"relevance": 100
_31
},
_31
"trustedForDelegateCall": false
_31
},
_31
{
_31
"address": "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC",
_31
"name": "Seaport",
_31
"displayName": "",
_31
"logoUri": null,
_31
"contractAbi": {
_31
"abi": [],
_31
"description": "Seaport",
_31
"relevance": 100
_31
},
_31
"trustedForDelegateCall": false
_31
}
_31
]
_31
}


Get Specific Contract


Returns the relevant information of a known smart contract

Responses

200 OK - object

application/json

Success
address - required
string

name - required
string

displayName - required
string

logoUri - required
string

contractAbi - required
abi - required
[]

description - required
string

relevance - required
integer

trustedForDelegateCall - required
boolean


Did this API route run successfully?
GET
/api/v1/contracts/{address}/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/contracts/0xcd2E72aEBe2A203b84f46DEEC948E6465dB51c75/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_12
{
_12
"address": "0x00000000000000ADc04C56Bf30aC9d3c0aAF14dC",
_12
"name": "Seaport",
_12
"displayName": "",
_12
"logoUri": null,
_12
"contractAbi": {
_12
"abi": [],
_12
"description": "Seaport",
_12
"relevance": 100
_12
},
_12
"trustedForDelegateCall": false
_12
}


Data-decoder

Get Decoded Data


Returns the decoded data using the Safe Transaction Service internal ABI information given the transaction data as a 0x prefixed hexadecimal string. If the address of the receiving contract is provided, the decoded data will be more accurate, as in case of an ABI collision the Safe Transaction Service would know which ABI to use.

Responses

200 Decoded data - object

application/json

Success
data - required
string

to
string | null



code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
POST
/api/v1/data-decoder/

Sample Request

Try it on Swagger
TypeScript
curl

_11
import SafeApiKit from '@safe-global/api-kit'
_11
_11
const apiKit = new SafeApiKit({
_11
chainId: 11155111n
_11
})
_11
_11
const data = await apiKit.decodeData(
_11
'0xa9059cbb0000000000000000000000005298a93734c3d979ef1f23f78ebb871879a21f220000000000000000000000000000000000000000000000008ac7230489e80000'
_11
)
_11
_11
console.log(data)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_15
{
_15
"method": "transfer",
_15
"parameters": [
_15
{
_15
"name": "to",
_15
"type": "address",
_15
"value": "0x5298A93734C3D979eF1f23F78eBB871879A21F22"
_15
},
_15
{
_15
"name": "value",
_15
"type": "uint256",
_15
"value": "10000000000000000000"
_15
}
_15
]
_15
}


Delegates

List Delegates


Returns a list with all the delegates

Query Parameters

safe
string | null

delegate
string

delegator
string

label
string

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

results - required
safe - required
string

delegate - required
string

delegator - required
string

label - required
string

expiryDate - required
string



Did this API route run successfully?
GET
/api/v2/delegates/

Sample Request

Try it on Swagger
TypeScript
curl

_11
import SafeApiKit from '@safe-global/api-kit'
_11
_11
const apiKit = new SafeApiKit({
_11
chainId: 11155111n
_11
})
_11
_11
const delegates = await apiKit.getSafeDelegates({
_11
safeAddress: '0xb53a6b6f67847cff94fdb94b90345cb45a2c7301'
_11
})
_11
_11
console.log(delegates)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_13
{
_13
"count": 1,
_13
"next": null,
_13
"previous": null,
_13
"results": [
_13
{
_13
"safe": "0x5298A93734C3D979eF1f23F78eBB871879A21F22",
_13
"delegate": "0xe8A11B18DA0C02ce6304347D8E0DA66C50dEf739",
_13
"delegator": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_13
"label": "Sample Delegator 2"
_13
}
_13
]
_13
}


Create Delegate


Adds a new Safe delegate with a custom label. Calls with same delegate but different label or signer will update the label or delegator if a different one is provided. To generate the signature, the following EIP712 data hash needs to be signed:

_23
{
_23
"types": {
_23
"EIP712Domain": [
_23
{"name": "name", "type": "string"},
_23
{"name": "version", "type": "string"},
_23
{"name": "chainId", "type": "uint256"},
_23
],
_23
"Delegate": [
_23
{"name": "delegateAddress", "type": "address"},
_23
{"name": "totp", "type": "uint256"},
_23
],
_23
},
_23
"primaryType": "Delegate",
_23
"domain": {
_23
"name": "Safe Transaction Service",
_23
"version": "1.0",
_23
"chainId": chain_id,
_23
},
_23
"message": {
_23
"delegateAddress": delegate_address,
_23
"totp": totp,
_23
},
_23
}


For the signature we use TOTP with T0=0 and Tx=3600. TOTP is calculated by taking the Unix UTC epoch time (no milliseconds) and dividing by 3600 (natural division, no decimals).

Responses



Did this API route run successfully?
POST
/api/v2/delegates/

Sample Request

Try it on Swagger
TypeScript
curl

_25
import SafeApiKit from '@safe-global/api-kit'
_25
import { ethers } from 'ethers' // Ethers v6
_25
_25
const apiKit = new SafeApiKit({
_25
chainId: 11155111n
_25
})
_25
_25
const provider = new ethers.JsonRpcProvider(
_25
'https://eth-sepolia.public.blastapi.io'
_25
)
_25
_25
const signer = new ethers.Wallet(
_25
'0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
_25
provider
_25
)
_25
_25
const response = await apiKit.addSafeDelegate({
_25
safeAddress: '0x5298a93734c3d979ef1f23f78ebb871879a21f22',
_25
delegateAddress: '0x3A16E3090e32DDeD2250E862B9d5610BEF13e93d',
_25
delegatorAddress: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
_25
label: 'Your label',
_25
signer
_25
})
_25
_25
console.log(response)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_10
Empty Response


Delete Delegate


Removes every delegate/delegator pair found associated with a given delegate address. The signature is built the same way as for adding a delegate, but in this case the signer can be either the delegator (owner) or the delegate itself. Check POST /delegates/ to learn more.

Responses





Did this API route run successfully?
DELETE
/api/v2/delegates/{delegate_address}/

Sample Request

Try it on Swagger
TypeScript
curl

_23
import SafeApiKit from '@safe-global/api-kit'
_23
import { ethers } from 'ethers' // Ethers v6
_23
_23
const apiKit = new SafeApiKit({
_23
chainId: 11155111n
_23
})
_23
_23
const provider = new ethers.JsonRpcProvider(
_23
'https://eth-sepolia.public.blastapi.io'
_23
)
_23
_23
const signer = new ethers.Wallet(
_23
'0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
_23
provider
_23
)
_23
_23
const response = await apiKit.removeSafeDelegate({
_23
delegateAddress: '0x3A16E3090e32DDeD2250E862B9d5610BEF13e93d',
_23
delegatorAddress: '0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266',
_23
signer
_23
})
_23
_23
console.log(response)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_10
Empty Response


Messages

Get Message


Returns detailed information on a message associated with a given message hash

Responses

200 OK - object

application/json

Success
created - required
string

modified - required
string

safe - required
string

messageHash - required
string

message - required

proposedBy - required
string

safeAppId - required
integer

confirmations - required

Filters confirmations queryset :param obj: SafeMessage instance :return: Serialized queryset

preparedSignature - required
string | null

Prepared signature sorted :param obj: SafeMessage instance :return: Serialized queryset

origin - required
string


Did this API route run successfully?
GET
/api/v1/messages/{message_hash}/

Sample Request

Try it on Swagger
TypeScript
curl

_12
import SafeApiKit from '@safe-global/api-kit'
_12
_12
const apiKit = new SafeApiKit({
_12
chainId: 11155111n
_12
})
_12
_12
const messageHash =
_12
'0x950cfe6090e742b709ab5f662c10c8b4e06d403a2f8c4654d86af45d93fa3777'
_12
_12
const message = await apiKit.getMessage(messageHash)
_12
_12
console.log(message)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_19
{
_19
"created": "2024-07-29T16:59:00.807652Z",
_19
"modified": "2024-07-29T16:59:00.807652Z",
_19
"safe": "0x5298A93734C3D979eF1f23F78eBB871879A21F22",
_19
"messageHash": "0x950cfe6090e742b709ab5f662c10c8b4e06d403a2f8c4654d86af45d93fa3777",
_19
"message": "string message",
_19
"proposedBy": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_19
"safeAppId": null,
_19
"confirmations": [
_19
{
_19
"created": "2024-07-29T16:59:00.843249Z",
_19
"modified": "2024-07-29T16:59:00.843249Z",
_19
"owner": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_19
"signature": "0x5f12f647a876c1966cfbb785d78add0e504cdd0b56b9e21ac93a566d883f80af0192226678ffbe04b35efd23265f1b516a0b0920c679b13d9a5290af0c4b87931f",
_19
"signatureType": "ETH_SIGN"
_19
}
_19
],
_19
"preparedSignature": "0x5f12f647a876c1966cfbb785d78add0e504cdd0b56b9e21ac93a566d883f80af0192226678ffbe04b35efd23265f1b516a0b0920c679b13d9a5290af0c4b87931f"
_19
}


Sign Message


Adds the signature of a message given its message hash

Responses


Did this API route run successfully?
POST
/api/v1/messages/{message_hash}/signatures/

Sample Request

Try it on Swagger
TypeScript
curl

_25
import Safe from '@safe-global/protocol-kit'
_25
import SafeApiKit from '@safe-global/api-kit'
_25
_25
const protocolKit = await Safe.init({
_25
provider: 'https://eth-sepolia.public.blastapi.io',
_25
signer: '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
_25
safeAddress: '0x5298a93734c3d979ef1f23f78ebb871879a21f22'
_25
})
_25
_25
const apiKit = new SafeApiKit({
_25
chainId: 11155111n
_25
})
_25
_25
const messageHash =
_25
'0xdd8c1417bf85842b6181288b1d2da439175c39dcef149097833dd25aef918d79'
_25
const rawMessage = 'string message'
_25
const safeMessage = protocolKit.createMessage(rawMessage)
_25
const signedMessage = await protocolKit.signMessage(safeMessage, 'eth_sign')
_25
_25
const result = await apiKit.addMessageSignature(
_25
messageHash,
_25
signedMessage.encodedSignatures()
_25
)
_25
_25
console.log(result)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_10
Empty Response


List Messages


Returns the list of messages for a given Safe account

Query Parameters

ordering
string

Which field to use when ordering the results.

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

results - required
created - required
string

modified - required
string

safe - required
string

messageHash - required
string

message - required

proposedBy - required
string

safeAppId - required
integer

confirmations - required

Filters confirmations queryset :param obj: SafeMessage instance :return: Serialized queryset

preparedSignature - required
string | null

Prepared signature sorted :param obj: SafeMessage instance :return: Serialized queryset

origin - required
string


Did this API route run successfully?
GET
/api/v1/safes/{address}/messages/

Sample Request

Try it on Swagger
TypeScript
curl

_11
import SafeApiKit from '@safe-global/api-kit'
_11
_11
const apiKit = new SafeApiKit({
_11
chainId: 11155111n
_11
})
_11
_11
const safeAddress = '0x5298a93734c3d979ef1f23f78ebb871879a21f22'
_11
_11
const messages = await apiKit.getMessages(safeAddress)
_11
_11
console.log(messages)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_26
{
_26
"count": 1,
_26
"next": null,
_26
"previous": null,
_26
"results": [
_26
{
_26
"created": "2024-07-29T16:59:00.807652Z",
_26
"modified": "2024-07-29T16:59:00.807652Z",
_26
"safe": "0x5298A93734C3D979eF1f23F78eBB871879A21F22",
_26
"messageHash": "0x950cfe6090e742b709ab5f662c10c8b4e06d403a2f8c4654d86af45d93fa3777",
_26
"message": "string message",
_26
"proposedBy": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_26
"safeAppId": null,
_26
"confirmations": [
_26
{
_26
"created": "2024-07-29T16:59:00.843249Z",
_26
"modified": "2024-07-29T16:59:00.843249Z",
_26
"owner": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_26
"signature": "0x5f12f647a876c1966cfbb785d78add0e504cdd0b56b9e21ac93a566d883f80af0192226678ffbe04b35efd23265f1b516a0b0920c679b13d9a5290af0c4b87931f",
_26
"signatureType": "ETH_SIGN"
_26
}
_26
],
_26
"preparedSignature": "0x5f12f647a876c1966cfbb785d78add0e504cdd0b56b9e21ac93a566d883f80af0192226678ffbe04b35efd23265f1b516a0b0920c679b13d9a5290af0c4b87931f"
_26
}
_26
]
_26
}


Create Signed Message


Adds a new message for a given Safe account. Message can be:

- A string, so EIP191 will be used to get the hash.

- An EIP712 object.

Hash will be calculated from the provided message. Sending a raw hash will not be accepted, service needs to derive it itself.

Responses


Did this API route run successfully?
POST
/api/v1/safes/{address}/messages/

Sample Request

Try it on Swagger
TypeScript
curl

_28
import Safe from '@safe-global/protocol-kit'
_28
import SafeApiKit from '@safe-global/api-kit'
_28
_28
const safeAddress = '0x5298a93734c3d979ef1f23f78ebb871879a21f22'
_28
_28
const protocolKit = await Safe.init({
_28
provider: 'https://eth-sepolia.public.blastapi.io',
_28
signer: '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
_28
safeAddress
_28
})
_28
_28
const apiKit = new SafeApiKit({
_28
chainId: 11155111n
_28
})
_28
_28
const rawMessage = '1: string message'
_28
const safeMessage = protocolKit.createMessage(rawMessage)
_28
const signedMessage = await protocolKit.signMessage(safeMessage, 'eth_sign')
_28
_28
console.log({
_28
message: rawMessage,
_28
signature: signedMessage.encodedSignatures()
_28
})
_28
_28
apiKit.addMessage(safeAddress, {
_28
message: rawMessage,
_28
signature: signedMessage.encodedSignatures()
_28
})

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_10
Empty Response


Transactions

Get Module Transaction


Returns a transaction executed from a module given its associated module transaction ID

Responses

200 OK - object

application/json

Success
created - required
string

executionDate - required
string

blockNumber - required
integer

isSuccessful - required
boolean

transactionHash - required
string

safe - required
string

module - required
string

to - required
string

value - required
string

data - required
string | null

operation - required
integer

* `0` - CALL * `1` - DELEGATE_CALL * `2` - CREATE

dataDecoded - required

moduleTransactionId - required
string

Internally calculated parameter to uniquely identify a moduleTransaction `ModuleTransactionId = i+tx_hash+trace_address`


code - required
integer

message - required
string

arguments - required
[]



Did this API route run successfully?
GET
/api/v1/module-transaction/{module_transaction_id}/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/module-transaction/0x3b3b57b3 \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_15
{
_15
"created": "2024-07-24T20:54:48Z",
_15
"executionDate": "2024-07-24T20:54:48Z",
_15
"blockNumber": 6369595,
_15
"isSuccessful": true,
_15
"transactionHash": "0x4c8bc3a9f32eed6b4cb8225d6884e9c7006d6740b0a6896cee7b254aa037920e",
_15
"safe": "0x5298A93734C3D979eF1f23F78eBB871879A21F22",
_15
"module": "0x9085149079b87E32178669097bc82D341CB65678",
_15
"to": "0x3A16E3090e32DDeD2250E862B9d5610BEF13e93d",
_15
"value": "10000000000",
_15
"data": "0x00",
_15
"operation": 0,
_15
"dataDecoded": null,
_15
"moduleTransactionId": "i4c8bc3a9f32eed6b4cb8225d6884e9c7006d6740b0a6896cee7b254aa037920e0,0"
_15
}


Get Multisig Transaction


Returns a multi-signature transaction given its Safe transaction hash

Responses

200 OK - object

application/json

Success
safe - required
string

to - required
string

value - required
string

data
string | null

operation - required
integer

gasToken
string | null

safeTxGas - required
integer

baseGas - required
integer

gasPrice - required
string

refundReceiver
string | null

nonce - required
integer

executionDate - required
string

submissionDate - required
string

modified - required
string

blockNumber - required
integer | null

transactionHash - required
string

safeTxHash - required
string

proposer - required
string

proposedByDelegate - required
string | null

executor - required
string | null

isExecuted - required
boolean

isSuccessful - required
boolean | null

ethGasPrice - required
string | null

maxFeePerGas - required
string | null

maxPriorityFeePerGas - required
string | null

gasUsed - required
integer | null

fee - required
integer | null

origin - required
string

dataDecoded - required

confirmationsRequired - required
integer

confirmations - required

Filters confirmations queryset :param obj: MultisigConfirmation instance :return: Serialized queryset

trusted - required
boolean

signatures
string | null


Did this API route run successfully?
GET
/api/v1/multisig-transactions/{safe_tx_hash}/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/multisig-transactions/0xa059b4571d8e6cf551eea796f9d86a414083bdc3d5d5be88486589a7b6214be2/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_49
{
_49
"safe": "0x5298A93734C3D979eF1f23F78eBB871879A21F22",
_49
"to": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
_49
"value": "50000000000000",
_49
"data": null,
_49
"operation": 0,
_49
"gasToken": "0x0000000000000000000000000000000000000000",
_49
"safeTxGas": 0,
_49
"baseGas": 0,
_49
"gasPrice": "0",
_49
"refundReceiver": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_49
"nonce": 0,
_49
"executionDate": null,
_49
"submissionDate": "2024-06-26T14:57:15.429517Z",
_49
"modified": "2024-06-28T14:18:04.121072Z",
_49
"blockNumber": null,
_49
"transactionHash": null,
_49
"safeTxHash": "0x897cab0528ffa8cbe10ee533e636d1a42b9e8d42f8dccb9af9006804d02d2027",
_49
"proposer": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_49
"executor": null,
_49
"isExecuted": false,
_49
"isSuccessful": null,
_49
"ethGasPrice": null,
_49
"maxFeePerGas": null,
_49
"maxPriorityFeePerGas": null,
_49
"gasUsed": null,
_49
"fee": null,
_49
"origin": "{}",
_49
"dataDecoded": null,
_49
"confirmationsRequired": 2,
_49
"confirmations": [
_49
{
_49
"owner": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_49
"submissionDate": "2024-06-26T14:57:15.504003Z",
_49
"transactionHash": null,
_49
"signature": "0xec2c1cf656d997f92247ddf59f30ce718de990ec4f8d4670a37d3d3594862f0d49ad2c553daa2ff937c50d45e9ca6a815f826d29603f8c5c818cb698ddc2383a20",
_49
"signatureType": "ETH_SIGN"
_49
},
_49
{
_49
"owner": "0x3A16E3090e32DDeD2250E862B9d5610BEF13e93d",
_49
"submissionDate": "2024-06-28T14:18:04.121072Z",
_49
"transactionHash": null,
_49
"signature": "0xfc32b5fdfa8517b44bd45c5d1e09ed898325e109e6b889fbf1584c158dcbe71b2de4a1e8d43b5d396c1da03381cbc3f8358295192d19ded2c12dda90227308b720",
_49
"signatureType": "ETH_SIGN"
_49
}
_49
],
_49
"trusted": true,
_49
"signatures": null
_49
}


Delete Queued Multisig Transaction


Removes the queued but not executed multi-signature transaction associated with the given Safe tansaction hash. Only the proposer or the delegate who proposed the transaction can delete it. If the transaction was proposed by a delegate, it must still be a valid delegate for the transaction proposer. An EOA is required to sign the following EIP-712 data:

_25
{
_25
"types": {
_25
"EIP712Domain": [
_25
{"name": "name", "type": "string"},
_25
{"name": "version", "type": "string"},
_25
{"name": "chainId", "type": "uint256"},
_25
{"name": "verifyingContract", "type": "address"},
_25
],
_25
"DeleteRequest": [
_25
{"name": "safeTxHash", "type": "bytes32"},
_25
{"name": "totp", "type": "uint256"},
_25
],
_25
},
_25
"primaryType": "DeleteRequest",
_25
"domain": {
_25
"name": "Safe Transaction Service",
_25
"version": "1.0",
_25
"chainId": chain_id,
_25
"verifyingContract": safe_address,
_25
},
_25
"message": {
_25
"safeTxHash": safe_tx_hash,
_25
"totp": totp,
_25
},
_25
}


totp parameter is calculated with T0=0 and Tx=3600. totp is calculated by taking the Unix UTC epoch time (no milliseconds) and dividing by 3600 (natural division, no decimals)

Responses




Did this API route run successfully?
DELETE
/api/v1/multisig-transactions/{safe_tx_hash}/

Sample Request

Try it on Swagger

_10
curl -X DELETE https://safe-transaction-sepolia.safe.global/api/api/v1/multisig-transactions/0xa059b4571d8e6cf551eea796f9d86a414083bdc3d5d5be88486589a7b6214be2/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \
_10
-d '{}'

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_10
Empty Response


List Multisig Confirmations


Returns the list of confirmations for the multi-signature transaction associated with the given Safe transaction hash

Query Parameters

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

owner - required
string

submissionDate - required
string

transactionHash - required
string

signature - required
string

signatureType - required
string



Did this API route run successfully?
GET
/api/v1/multisig-transactions/{safe_tx_hash}/confirmations/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/multisig-transactions/0xa059b4571d8e6cf551eea796f9d86a414083bdc3d5d5be88486589a7b6214be2/confirmations/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_14
{
_14
"count": 1,
_14
"next": null,
_14
"previous": null,
_14
"results": [
_14
{
_14
"owner": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_14
"submissionDate": "2024-06-26T14:57:15.504003Z",
_14
"transactionHash": null,
_14
"signature": "0xec2c1cf656d997f92247ddf59f30ce718de990ec4f8d4670a37d3d3594862f0d49ad2c553daa2ff937c50d45e9ca6a815f826d29603f8c5c818cb698ddc2383a20",
_14
"signatureType": "ETH_SIGN"
_14
}
_14
]
_14
}


Confirm Multisig Transaction


Adds a new confirmation to the pending multi-signature transaction associated with the given Safe transaction hash. Multiple signatures can be submitted at once. This endpoint does not support the use of delegates to make transactions trusted.

Responses




Did this API route run successfully?
POST
/api/v1/multisig-transactions/{safe_tx_hash}/confirmations/

Sample Request

Try it on Swagger

_10
curl -X POST https://safe-transaction-sepolia.safe.global/api/api/v1/multisig-transactions/0xa059b4571d8e6cf551eea796f9d86a414083bdc3d5d5be88486589a7b6214be2/confirmations/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \
_10
-d '{}'

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_10
{
_10
"signature": "0xfc32b5fdfa8517b44bd45c5d1e09ed898325e109e6b889fbf1584c158dcbe71b2de4a1e8d43b5d396c1da03381cbc3f8358295192d19ded2c12dda90227308b720"
_10
}


List Transactions


Returns all the executed transactions for a given Safe address. The list has different structures depending on the transaction type:

- Multisig Transactions for a Safe. tx_type=MULTISIG_TRANSACTION.

- Module Transactions for a Safe. tx_type=MODULE_TRANSACTION

- Incoming Transfers of Ether/ERC20 Tokens/ERC721 Tokens. tx_type=ETHEREUM_TRANSACTION Ordering_fields: ["timestamp"] eg: -timestamp (default one) or timestamp

Note: This endpoint has a bug that will be fixed in next versions of the endpoint. Pagination is done using the Transaction Hash, and due to that the number of relevant transactions with the same Transaction Hash cannot be known beforehand. So if there are only 2 transactions with the same Transaction Hash, count of the endpoint will be 1 but there will be 2 transactions in the list.

Query Parameters

ordering
string

Which field to use when ordering the results.

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 A list with every element with the structure of one of these transactiontypes - object

application/json

Success
count - required
integer

next
string

previous
string

results - required
created - required
string

executionDate - required
string

blockNumber - required
integer

isSuccessful - required
boolean

transactionHash - required
string

safe - required
string

module - required
string

to - required
string

value - required
string

data - required
string | null

operation - required
integer

* `0` - CALL * `1` - DELEGATE_CALL * `2` - CREATE

dataDecoded - required

moduleTransactionId - required
string

Internally calculated parameter to uniquely identify a moduleTransaction `ModuleTransactionId = i+tx_hash+trace_address`

transfers - required
type - required
string

Sometimes ERC20/721 `Transfer` events look the same, if token info is available better use that information to check :param obj: :return: `TransferType` as a string

executionDate - required
string

blockNumber - required
integer

transactionHash - required
string

to - required
string

value - required
string | null

tokenId - required
string | null

tokenAddress
string | null

transferId - required
string

Internally calculated parameter to uniquely identify a transfer Token transfers are calculated as `transferId = e+tx_hash+log_index` Ether transfers are calculated as `transferId = i+tx_hash+trace_address`

tokenInfo - required
type - required
string

address - required
string

name - required
string

symbol - required
string

decimals - required
integer

logoUri - required
string

trusted - required
boolean

from - required
string

txType - required
string

safe - required
string

to - required
string

value - required
string

data
string | null

operation - required
integer

gasToken
string | null

safeTxGas - required
integer

baseGas - required
integer

gasPrice - required
string

refundReceiver
string | null

nonce - required
integer

executionDate - required
string

submissionDate - required
string

modified - required
string

blockNumber - required
integer | null

transactionHash - required
string

safeTxHash - required
string

proposer - required
string

proposedByDelegate - required
string | null

executor - required
string | null

isExecuted - required
boolean

isSuccessful - required
boolean | null

ethGasPrice - required
string | null

maxFeePerGas - required
string | null

maxPriorityFeePerGas - required
string | null

gasUsed - required
integer | null

fee - required
integer | null

origin - required
string

dataDecoded - required

confirmationsRequired - required
integer

confirmations - required

Filters confirmations queryset :param obj: MultisigConfirmation instance :return: Serialized queryset

trusted - required
boolean

signatures
string | null

transfers - required
type - required
string

Sometimes ERC20/721 `Transfer` events look the same, if token info is available better use that information to check :param obj: :return: `TransferType` as a string

executionDate - required
string

blockNumber - required
integer

transactionHash - required
string

to - required
string

value - required
string | null

tokenId - required
string | null

tokenAddress
string | null

transferId - required
string

Internally calculated parameter to uniquely identify a transfer Token transfers are calculated as `transferId = e+tx_hash+log_index` Ether transfers are calculated as `transferId = i+tx_hash+trace_address`

tokenInfo - required
type - required
string

address - required
string

name - required
string

symbol - required
string

decimals - required
integer

logoUri - required
string

trusted - required
boolean

from - required
string

txType - required
string

executionDate - required
string

to - required
string | null

data - required
string

txHash - required
string

blockNumber - required
integer | null

transfers - required
type - required
string

Sometimes ERC20/721 `Transfer` events look the same, if token info is available better use that information to check :param obj: :return: `TransferType` as a string

executionDate - required
string

blockNumber - required
integer

transactionHash - required
string

to - required
string

value - required
string | null

tokenId - required
string | null

tokenAddress
string | null

transferId - required
string

Internally calculated parameter to uniquely identify a transfer Token transfers are calculated as `transferId = e+tx_hash+log_index` Ether transfers are calculated as `transferId = i+tx_hash+trace_address`

tokenInfo - required
type - required
string

address - required
string

name - required
string

symbol - required
string

decimals - required
integer

logoUri - required
string

trusted - required
boolean

from - required
string

txType - required
string

from - required
string


code - required
integer

message - required
string

arguments - required
[]


code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
GET
/api/v1/safes/{address}/all-transactions/

Sample Request

Try it on Swagger
TypeScript
curl

_11
import SafeApiKit from '@safe-global/api-kit'
_11
_11
const apiKit = new SafeApiKit({
_11
chainId: 11155111n
_11
})
_11
_11
const transactions = await apiKit.getAllTransactions(
_11
'0x5298a93734c3d979ef1f23f78ebb871879a21f22'
_11
)
_11
_11
console.log(transactions)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_72
{
_72
"count": 1,
_72
"next": null,
_72
"previous": null,
_72
"results": [
_72
{
_72
"safe": "0x5298A93734C3D979eF1f23F78eBB871879A21F22",
_72
"to": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
_72
"value": "50000000000000",
_72
"data": null,
_72
"operation": 0,
_72
"gasToken": "0x0000000000000000000000000000000000000000",
_72
"safeTxGas": 0,
_72
"baseGas": 0,
_72
"gasPrice": "0",
_72
"refundReceiver": "0x0000000000000000000000000000000000000000",
_72
"nonce": 0,
_72
"executionDate": "2024-06-26T15:41:48Z",
_72
"submissionDate": "2024-06-26T15:18:33.817634Z",
_72
"modified": "2024-06-26T15:41:49.400858Z",
_72
"blockNumber": 6191662,
_72
"transactionHash": "0x2ecba24115d057bb74c1885b2a16a38b3929992fd52ed69dc8d0df24f765da96",
_72
"safeTxHash": "0xfc01da65f3a1dea769f4ad9067d41c5477a2ec5316d6b54165de212cd1681992",
_72
"proposer": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_72
"executor": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_72
"isExecuted": true,
_72
"isSuccessful": true,
_72
"ethGasPrice": "61733665357",
_72
"maxFeePerGas": "131260008170",
_72
"maxPriorityFeePerGas": "1000000000",
_72
"gasUsed": 91398,
_72
"fee": "5642333546299086",
_72
"origin": "{}",
_72
"dataDecoded": null,
_72
"confirmationsRequired": 2,
_72
"confirmations": [
_72
{
_72
"owner": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_72
"submissionDate": "2024-06-26T15:18:33.901378Z",
_72
"transactionHash": null,
_72
"signature": "0x331d8584f5514c1cf1cfe1edd873228e428dafc0c78c5480c34c9868e9075d9622d8334d052037b1566241c8d0ecfbdb02c99b59a9e06d97974e1eaa55f502811f",
_72
"signatureType": "ETH_SIGN"
_72
},
_72
{
_72
"owner": "0x3A16E3090e32DDeD2250E862B9d5610BEF13e93d",
_72
"submissionDate": "2024-06-26T15:27:29.512252Z",
_72
"transactionHash": null,
_72
"signature": "0xd26842f2bd17eeed83a0f9fb010efc1716ed982e62cc05fe61a314827c226d534ddab07482795521b20c32d764ddc4d3fc602c3113b4c540c420e72b923b92c91f",
_72
"signatureType": "ETH_SIGN"
_72
}
_72
],
_72
"trusted": true,
_72
"signatures": "0xd26842f2bd17eeed83a0f9fb010efc1716ed982e62cc05fe61a314827c226d534ddab07482795521b20c32d764ddc4d3fc602c3113b4c540c420e72b923b92c91f331d8584f5514c1cf1cfe1edd873228e428dafc0c78c5480c34c9868e9075d9622d8334d052037b1566241c8d0ecfbdb02c99b59a9e06d97974e1eaa55f502811f",
_72
"transfers": [
_72
{
_72
"type": "ETHER_TRANSFER",
_72
"executionDate": "2024-06-26T15:41:48Z",
_72
"blockNumber": 6191662,
_72
"transactionHash": "0x2ecba24115d057bb74c1885b2a16a38b3929992fd52ed69dc8d0df24f765da96",
_72
"to": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
_72
"value": "50000000000000",
_72
"tokenId": null,
_72
"tokenAddress": null,
_72
"transferId": "i2ecba24115d057bb74c1885b2a16a38b3929992fd52ed69dc8d0df24f765da960,0",
_72
"tokenInfo": null,
_72
"from": "0x5298A93734C3D979eF1f23F78eBB871879A21F22"
_72
}
_72
],
_72
"txType": "MULTISIG_TRANSACTION"
_72
}
_72
]
_72
}


List Incoming Transfers


Returns incoming ether/tokens transfers for a Safe. Only 1000 newest transfers will be returned.

Query Parameters

_from
string

block_number
number

block_number__gt
number

block_number__lt
number

execution_date__gte
string

execution_date__lte
string

execution_date__gt
string

execution_date__lt
string

to
string

token_address
string

transaction_hash
string

value
number

value__gt
number

value__lt
number

erc20
boolean

erc721
boolean

ether
boolean

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

results - required
type - required
string

Sometimes ERC20/721 `Transfer` events look the same, if token info is available better use that information to check :param obj: :return: `TransferType` as a string

executionDate - required
string

blockNumber - required
integer

transactionHash - required
string

to - required
string

value - required
string | null

tokenId - required
string | null

tokenAddress
string | null

transferId - required
string

Internally calculated parameter to uniquely identify a transfer Token transfers are calculated as `transferId = e+tx_hash+log_index` Ether transfers are calculated as `transferId = i+tx_hash+trace_address`

tokenInfo - required
type - required
string

address - required
string

name - required
string

symbol - required
string

decimals - required
integer

logoUri - required
string

trusted - required
boolean

from - required
string


code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
GET
/api/v1/safes/{address}/incoming-transfers/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/safes/0xcd2E72aEBe2A203b84f46DEEC948E6465dB51c75/incoming-transfers/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_20
{
_20
"count": 1,
_20
"next": null,
_20
"previous": null,
_20
"results": [
_20
{
_20
"type": "ETHER_TRANSFER",
_20
"executionDate": "2024-06-25T11:19:00Z",
_20
"blockNumber": 6183150,
_20
"transactionHash": "0x28fd99978fe7a05160f8da40311cb2e796f17d23f7a3eaea243d4a7f2f636924",
_20
"to": "0x5298A93734C3D979eF1f23F78eBB871879A21F22",
_20
"value": "10000000000000000",
_20
"tokenId": null,
_20
"tokenAddress": null,
_20
"transferId": "i28fd99978fe7a05160f8da40311cb2e796f17d23f7a3eaea243d4a7f2f636924",
_20
"tokenInfo": null,
_20
"from": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2"
_20
}
_20
]
_20
}


List a Safe's Module Transactions


Returns all the transactions executed from modules given a Safe address

Query Parameters

safe
string

module
string

to
string

operation
integer

* `0` - CALL * `1` - DELEGATE_CALL * `2` - CREATE

failed
boolean

block_number
number

block_number__gt
number

block_number__lt
number

transaction_hash
string

ordering
string

Which field to use when ordering the results.

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

results - required
created - required
string

executionDate - required
string

blockNumber - required
integer

isSuccessful - required
boolean

transactionHash - required
string

safe - required
string

module - required
string

to - required
string

value - required
string

data - required
string | null

operation - required
integer

* `0` - CALL * `1` - DELEGATE_CALL * `2` - CREATE

dataDecoded - required

moduleTransactionId - required
string

Internally calculated parameter to uniquely identify a moduleTransaction `ModuleTransactionId = i+tx_hash+trace_address`


code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
GET
/api/v1/safes/{address}/module-transactions/

Sample Request

Try it on Swagger
TypeScript
curl

_11
import SafeApiKit from '@safe-global/api-kit'
_11
_11
const apiKit = new SafeApiKit({
_11
chainId: 11155111n
_11
})
_11
_11
const moduleTransactions = await apiKit.getModuleTransactions(
_11
'0x5298a93734c3d979ef1f23f78ebb871879a21f22'
_11
)
_11
_11
console.log(moduleTransactions)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_22
{
_22
"count": 1,
_22
"next": null,
_22
"previous": null,
_22
"results": [
_22
{
_22
"created": "2024-07-24T20:54:48Z",
_22
"executionDate": "2024-07-24T20:54:48Z",
_22
"blockNumber": 6369595,
_22
"isSuccessful": true,
_22
"transactionHash": "0x4c8bc3a9f32eed6b4cb8225d6884e9c7006d6740b0a6896cee7b254aa037920e",
_22
"safe": "0x5298A93734C3D979eF1f23F78eBB871879A21F22",
_22
"module": "0x9085149079b87E32178669097bc82D341CB65678",
_22
"to": "0x3A16E3090e32DDeD2250E862B9d5610BEF13e93d",
_22
"value": "10000000000",
_22
"data": "0x00",
_22
"operation": 0,
_22
"dataDecoded": null,
_22
"moduleTransactionId": "i4c8bc3a9f32eed6b4cb8225d6884e9c7006d6740b0a6896cee7b254aa037920e0,0"
_22
}
_22
]
_22
}


List a Safe's Multisig Transactions


Returns all the multi-signature transactions for a given Safe address. By default, only trusted multisig transactions are returned.

Query Parameters

failed
boolean

modified__lt
string

modified__gt
string

modified__lte
string

modified__gte
string

nonce__lt
number

nonce__gt
number

nonce__lte
number

nonce__gte
number

nonce
number

safe_tx_hash
string

to
string

value__lt
number

value__gt
number

value
number

executed
boolean

has_confirmations
boolean

trusted
boolean

execution_date__gte
string

execution_date__lte
string

submission_date__gte
string

submission_date__lte
string

transaction_hash
string | null

ordering
string

Which field to use when ordering the results.

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

safe - required
string

to - required
string

value - required
string

data
string | null

operation - required
integer

gasToken
string | null

safeTxGas - required
integer

baseGas - required
integer

gasPrice - required
string

refundReceiver
string | null

nonce - required
integer

executionDate - required
string

submissionDate - required
string

modified - required
string

blockNumber - required
integer | null

transactionHash - required
string

safeTxHash - required
string

proposer - required
string

proposedByDelegate - required
string | null

executor - required
string | null

isExecuted - required
boolean

isSuccessful - required
boolean | null

ethGasPrice - required
string | null

maxFeePerGas - required
string | null

maxPriorityFeePerGas - required
string | null

gasUsed - required
integer | null

fee - required
integer | null

origin - required
string

dataDecoded - required

confirmationsRequired - required
integer

confirmations - required

Filters confirmations queryset :param obj: MultisigConfirmation instance :return: Serialized queryset

trusted - required
boolean

signatures
string | null



code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
GET
/api/v1/safes/{address}/multisig-transactions/

Sample Request

Try it on Swagger
TypeScript
curl

_11
import SafeApiKit from '@safe-global/api-kit'
_11
_11
const apiKit = new SafeApiKit({
_11
chainId: 11155111n
_11
})
_11
_11
const multisigTransactions = await apiKit.getMultisigTransactions(
_11
'0x5298a93734c3d979ef1f23f78ebb871879a21f22'
_11
)
_11
_11
console.log(multisigTransactions)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_57
{
_57
"count": 1,
_57
"next": null,
_57
"previous": null,
_57
"results": [
_57
{
_57
"safe": "0x5298A93734C3D979eF1f23F78eBB871879A21F22",
_57
"to": "0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045",
_57
"value": "50000000000000",
_57
"data": null,
_57
"operation": 0,
_57
"gasToken": "0x0000000000000000000000000000000000000000",
_57
"safeTxGas": 0,
_57
"baseGas": 0,
_57
"gasPrice": "0",
_57
"refundReceiver": "0x0000000000000000000000000000000000000000",
_57
"nonce": 0,
_57
"executionDate": "2024-06-26T15:41:48Z",
_57
"submissionDate": "2024-06-26T15:18:33.817634Z",
_57
"modified": "2024-06-26T15:41:49.400858Z",
_57
"blockNumber": 6191662,
_57
"transactionHash": "0x2ecba24115d057bb74c1885b2a16a38b3929992fd52ed69dc8d0df24f765da96",
_57
"safeTxHash": "0xfc01da65f3a1dea769f4ad9067d41c5477a2ec5316d6b54165de212cd1681992",
_57
"proposer": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_57
"executor": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_57
"isExecuted": true,
_57
"isSuccessful": true,
_57
"ethGasPrice": "61733665357",
_57
"maxFeePerGas": "131260008170",
_57
"maxPriorityFeePerGas": "1000000000",
_57
"gasUsed": 91398,
_57
"fee": "5642333546299086",
_57
"origin": "{}",
_57
"dataDecoded": null,
_57
"confirmationsRequired": 2,
_57
"confirmations": [
_57
{
_57
"owner": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_57
"submissionDate": "2024-06-26T15:18:33.901378Z",
_57
"transactionHash": null,
_57
"signature": "0x331d8584f5514c1cf1cfe1edd873228e428dafc0c78c5480c34c9868e9075d9622d8334d052037b1566241c8d0ecfbdb02c99b59a9e06d97974e1eaa55f502811f",
_57
"signatureType": "ETH_SIGN"
_57
},
_57
{
_57
"owner": "0x3A16E3090e32DDeD2250E862B9d5610BEF13e93d",
_57
"submissionDate": "2024-06-26T15:27:29.512252Z",
_57
"transactionHash": null,
_57
"signature": "0xd26842f2bd17eeed83a0f9fb010efc1716ed982e62cc05fe61a314827c226d534ddab07482795521b20c32d764ddc4d3fc602c3113b4c540c420e72b923b92c91f",
_57
"signatureType": "ETH_SIGN"
_57
}
_57
],
_57
"trusted": true,
_57
"signatures": "0xd26842f2bd17eeed83a0f9fb010efc1716ed982e62cc05fe61a314827c226d534ddab07482795521b20c32d764ddc4d3fc602c3113b4c540c420e72b923b92c91f331d8584f5514c1cf1cfe1edd873228e428dafc0c78c5480c34c9868e9075d9622d8334d052037b1566241c8d0ecfbdb02c99b59a9e06d97974e1eaa55f502811f"
_57
}
_57
],
_57
"countUniqueNonce": 1
_57
}


Create Multisig Transaction


Creates a multi-signature transaction for a given Safe account with its confirmations and retrieves all the information related.

Responses

201 Created or signature updated - object

application/json

Success
safe - required
string

to - required
string

value - required
integer

data
string | null

operation - required
integer

gasToken
string | null

safeTxGas - required
integer

baseGas - required
integer

gasPrice - required
integer

refundReceiver
string | null

nonce - required
integer

contractTransactionHash - required
string

sender - required
string

signature
string | null

origin
string | null



code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
POST
/api/v1/safes/{address}/multisig-transactions/

Sample Request

Try it on Swagger
TypeScript
curl

_21
import SafeApiKit from '@safe-global/api-kit'
_21
_21
const apiKit = new SafeApiKit({
_21
chainId: 11155111n
_21
})
_21
_21
const safeAddress = '0x5298a93734c3d979ef1f23f78ebb871879a21f22'
_21
_21
const safeTransaction = {
_21
to: safeAddress,
_21
value: '0',
_21
data: '0x',
_21
operation: 0 // 0 = call, 1 = delegate call
_21
}
_21
_21
const estimateTx = await apiKit.estimateSafeTransaction(
_21
safeAddress,
_21
safeTransaction
_21
)
_21
_21
console.log(estimateTx)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_10
{
_10
"safeTxGas": "45683"
_10
}


Estimate Gas Costs for a Multisig Transaction


Returns the estimated safeTxGas for a given Safe address and multi-signature transaction

Responses

200 OK - object

application/json

Success
safeTxGas - required
string




code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
POST
/api/v1/safes/{address}/multisig-transactions/estimations/

Sample Request

Try it on Swagger

_10
curl -X POST https://safe-transaction-sepolia.safe.global/api/api/v1/safes/0xcd2E72aEBe2A203b84f46DEEC948E6465dB51c75/multisig-transactions/estimations/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \
_10
-d '{}'

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_10
{
_10
"safeTxGas": "42806"
_10
}


List Transfers


Returns the list of token transfers for a given Safe address. Only 1000 newest transfers will be returned.

Query Parameters

_from
string

block_number
number

block_number__gt
number

block_number__lt
number

execution_date__gte
string

execution_date__lte
string

execution_date__gt
string

execution_date__lt
string

to
string

token_address
string

transaction_hash
string

value
number

value__gt
number

value__lt
number

erc20
boolean

erc721
boolean

ether
boolean

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

results - required
type - required
string

Sometimes ERC20/721 `Transfer` events look the same, if token info is available better use that information to check :param obj: :return: `TransferType` as a string

executionDate - required
string

blockNumber - required
integer

transactionHash - required
string

to - required
string

value - required
string | null

tokenId - required
string | null

tokenAddress
string | null

transferId - required
string

Internally calculated parameter to uniquely identify a transfer Token transfers are calculated as `transferId = e+tx_hash+log_index` Ether transfers are calculated as `transferId = i+tx_hash+trace_address`

tokenInfo - required
type - required
string

address - required
string

name - required
string

symbol - required
string

decimals - required
integer

logoUri - required
string

trusted - required
boolean

from - required
string


code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
GET
/api/v1/safes/{address}/transfers/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/safes/0xcd2E72aEBe2A203b84f46DEEC948E6465dB51c75/transfers/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_20
{
_20
"count": 1,
_20
"next": null,
_20
"previous": null,
_20
"results": [
_20
{
_20
"type": "ETHER_TRANSFER",
_20
"executionDate": "2024-07-24T20:54:48Z",
_20
"blockNumber": 6369595,
_20
"transactionHash": "0x4c8bc3a9f32eed6b4cb8225d6884e9c7006d6740b0a6896cee7b254aa037920e",
_20
"to": "0x3A16E3090e32DDeD2250E862B9d5610BEF13e93d",
_20
"value": "10000000000",
_20
"tokenId": null,
_20
"tokenAddress": null,
_20
"transferId": "i4c8bc3a9f32eed6b4cb8225d6884e9c7006d6740b0a6896cee7b254aa037920e0,0,0",
_20
"tokenInfo": null,
_20
"from": "0x5298A93734C3D979eF1f23F78eBB871879A21F22"
_20
}
_20
]
_20
}


Get Transfer


Returns a token transfer associated with the given transfer ID

Responses

200 OK - object

application/json

Success
type - required
string

Sometimes ERC20/721 `Transfer` events look the same, if token info is available better use that information to check :param obj: :return: `TransferType` as a string

executionDate - required
string

blockNumber - required
integer

transactionHash - required
string

to - required
string

value - required
string | null

tokenId - required
string | null

tokenAddress
string | null

transferId - required
string

Internally calculated parameter to uniquely identify a transfer Token transfers are calculated as `transferId = e+tx_hash+log_index` Ether transfers are calculated as `transferId = i+tx_hash+trace_address`

tokenInfo - required
type - required
string

address - required
string

name - required
string

symbol - required
string

decimals - required
integer

logoUri - required
string

trusted - required
boolean

from - required
string




Did this API route run successfully?
GET
/api/v1/transfer/{transfer_id}/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/transfer/3b3b57b3 \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_13
{
_13
"type": "ETHER_TRANSFER",
_13
"executionDate": "2024-07-24T20:54:48Z",
_13
"blockNumber": 6369595,
_13
"transactionHash": "0x4c8bc3a9f32eed6b4cb8225d6884e9c7006d6740b0a6896cee7b254aa037920e",
_13
"to": "0x3A16E3090e32DDeD2250E862B9d5610BEF13e93d",
_13
"value": "10000000000",
_13
"tokenId": null,
_13
"tokenAddress": null,
_13
"transferId": "i4c8bc3a9f32eed6b4cb8225d6884e9c7006d6740b0a6896cee7b254aa037920e0,0,0",
_13
"tokenInfo": null,
_13
"from": "0x5298A93734C3D979eF1f23F78eBB871879A21F22"
_13
}


Modules

List Safes that use a Specific Module


Returns the list of Safes that have the provided module enabled

Responses

200 OK - object

application/json

Success
safes - required
[]


code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
GET
/api/v1/modules/{address}/safes/

Sample Request

Try it on Swagger
TypeScript
curl

_11
import SafeApiKit from '@safe-global/api-kit'
_11
_11
const apiKit = new SafeApiKit({
_11
chainId: 11155111n
_11
})
_11
_11
const safes = await apiKit.getSafesByModule(
_11
'0xB4F5e59987549a2586976e8957962dBD54a26FD0'
_11
)
_11
_11
console.log(safes)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_10
{
_10
"safes": ["0x5298A93734C3D979eF1f23F78eBB871879A21F22"]
_10
}


Owners

List Safes from a Specific Owner


Returns the list of Safe accounts that have the given address as their owner

Responses

200 OK - object

application/json

Success
safes - required
[]


code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
GET
/api/v1/owners/{address}/safes/

Sample Request

Try it on Swagger
TypeScript
curl

_11
import SafeApiKit from '@safe-global/api-kit'
_11
_11
const apiKit = new SafeApiKit({
_11
chainId: 11155111n
_11
})
_11
_11
const safes = await apiKit.getSafesByOwner(
_11
'0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2'
_11
)
_11
_11
console.log(safes)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_13
{
_13
"safes": [
_13
"0xd0540ECBB3010E5f8d780B62Af3aB936fB6C0c75",
_13
"0x44eBdc9aCE42d6742a3df2813CB437834e6F05B0",
_13
"0x25D641a9eE275CE94b64bE1227e610b77e776522",
_13
"0xeFEe5E6394a02eE0ba61731Da014eE8aE8BcDe83",
_13
"0xCfF743C4445eAd58105a793B34eB02125e830dB0",
_13
"0x27000f745b020bD386D7712A4ca32AF7a2E3A7Fe",
_13
"0xb53a6B6f67847cfF94fDb94B90345cB45a2c7301",
_13
"0x1f01FC62f168099493705bDF7A05b539946832bc",
_13
"0x5298A93734C3D979eF1f23F78eBB871879A21F22"
_13
]
_13
}


4337

Get Safe Operation


Returns a SafeOperation given its Safe operation hash

Responses

200 OK - object

application/json

Success
created - required
string

modified - required
string

safeOperationHash - required
string

validAfter - required
string

validUntil - required
string

moduleAddress - required
string

confirmations - required

Filters confirmations queryset :param obj: SafeOperation instance :return: Serialized queryset

preparedSignature - required
string

userOperation - required


Did this API route run successfully?
GET
/api/v1/safe-operations/{safe_operation_hash}/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/safe-operations/0x597ba36c626a32a4fcc9f23a4b25605ee30b46584918d6b6442387161dc3c51b/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_35
{
_35
"created": "2024-07-22T10:00:18.892702Z",
_35
"modified": "2024-07-22T10:00:18.892702Z",
_35
"safeOperationHash": "0xb59828b1d3b0363641e3bb4d72dd63565d1062a40c6d05469caa0218ce8e0445",
_35
"validAfter": null,
_35
"validUntil": null,
_35
"moduleAddress": "0xa581c4A4DB7175302464fF3C06380BC3270b4037",
_35
"confirmations": [
_35
{
_35
"created": "2024-07-22T10:00:18.898708Z",
_35
"modified": "2024-07-22T10:00:18.898708Z",
_35
"owner": "0x608Cf2e3412c6BDA14E6D8A0a7D27c4240FeD6F1",
_35
"signature": "0x000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f",
_35
"signatureType": "CONTRACT_SIGNATURE"
_35
}
_35
],
_35
"preparedSignature": "0x000000000000000000000000000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f",
_35
"userOperation": {
_35
"ethereumTxHash": "0xfe7bc7fcab04ad689e1c5fcca7ad5345481fddc462880655a9a39b827da7b4ac",
_35
"sender": "0x125eb8CcAC85EA322C3859648509823CA05aD7e5",
_35
"userOperationHash": "0x3545a04aa1d10b74164af413253ab0881c86ebe219e166207b3175923202bbc7",
_35
"nonce": 0,
_35
"initCode": "0x4e1dcf7ad4e460cfd30791ccc4f9c8a4f820ec671688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c7620000000000000000000000000000000000000000000000000000000000000060ad27de2a410652abce96ea0fdfc30c2f0fd35952b78f554667111999a28ff3380000000000000000000000000000000000000000000000000000000000000344b63e800d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000038869bf66a61cf6bdb996a6ae40d5853fd43b5260000000000000000000000000000000000000000000000000000000000000140000000000000000000000000a581c4a4db7175302464ff3c06380bc3270b40370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f100000000000000000000000000000000000000000000000000000000000001c48d80ff0a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000172018ecd4ec46d4d2a6b64fe960b3d64e8b94b2234eb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000648d0dc49f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a581c4a4db7175302464ff3c06380bc3270b403701608cf2e3412c6bda14e6d8a0a7d27c4240fed6f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640dd9692f4255f6101637c8b43bf63660ffba39cab522b053094b2a07535d7d848ce5efca9aae34aabaee7600328bb0fb5f6a6c5214c8db9303f824f52f2fca42f2b342ce000000000000000000000000ca89cba4813d5b40aec6e57a30d0eeb500d6531b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
_35
"callData": "0x7bb3742800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
_35
"callGasLimit": 198268,
_35
"verificationGasLimit": 3867576,
_35
"preVerificationGas": 110646,
_35
"maxFeePerGas": 36776375378,
_35
"maxPriorityFeePerGas": 199436407,
_35
"paymaster": "0xDFF7FA1077Bce740a6a212b3995990682c0Ba66d",
_35
"paymasterData": "0x00000000000000000000000000000000000000000000000000000000669e2fe1000000000000000000000000000000000000000000000000000000000000000037a31ba85cc6a4753d5fb73e475ddf22c9ab9a9ce405fdff217c03bff161bc893e7658160bd3cabaefad55b2d5751713484b8b90ef54d85e356916b4fede3dc11b",
_35
"signature": "0x000000000000000000000000000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f",
_35
"entryPoint": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"
_35
}
_35
}


Get the list of confirmations for a multisig transaction


Get the list of confirmations for a multisig transaction

Query Parameters

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

created - required
string

modified - required
string

owner - required
string

signature - required
string

signatureType - required
string



Did this API route run successfully?
GET
/api/v1/safe-operations/{safe_operation_hash}/confirmations/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/safe-operations/0x597ba36c626a32a4fcc9f23a4b25605ee30b46584918d6b6442387161dc3c51b/confirmations/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_14
{
_14
"count": 1,
_14
"next": null,
_14
"previous": null,
_14
"results": [
_14
{
_14
"created": "2024-07-22T10:00:18.898708Z",
_14
"modified": "2024-07-22T10:00:18.898708Z",
_14
"owner": "0x608Cf2e3412c6BDA14E6D8A0a7D27c4240FeD6F1",
_14
"signature": "0x000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f",
_14
"signatureType": "CONTRACT_SIGNATURE"
_14
}
_14
]
_14
}


Add a confirmation for a transaction


Add a confirmation for a transaction. More than one signature can be used. This endpoint does not support the use of delegates to make a transaction trusted.

Responses




Did this API route run successfully?
POST
/api/v1/safe-operations/{safe_operation_hash}/confirmations/

Sample Request

Try it on Swagger

_10
curl -X POST https://safe-transaction-sepolia.safe.global/api/api/v1/safe-operations/0x597ba36c626a32a4fcc9f23a4b25605ee30b46584918d6b6442387161dc3c51b/confirmations/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \
_10
-d '{}'

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_10
Empty Response


List Safe Operations


Returns the list of SafeOperations for a given Safe account

Query Parameters

modified__lt
string

modified__gt
string

modified__lte
string

modified__gte
string

valid_after__lt
string

valid_after__gt
string

valid_after__lte
string

valid_after__gte
string

valid_until__lt
string

valid_until__gt
string

valid_until__lte
string

valid_until__gte
string

module_address
string

executed
boolean

has_confirmations
boolean

execution_date__gte
string

execution_date__lte
string

submission_date__gte
string

submission_date__lte
string

transaction_hash
string | null

ordering
string

Which field to use when ordering the results.

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

created - required
string

modified - required
string

safeOperationHash - required
string

validAfter - required
string

validUntil - required
string

moduleAddress - required
string

confirmations - required

Filters confirmations queryset :param obj: SafeOperation instance :return: Serialized queryset

preparedSignature - required
string

userOperation - required


Did this API route run successfully?
GET
/api/v1/safes/{address}/safe-operations/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/safes/0xcd2E72aEBe2A203b84f46DEEC948E6465dB51c75/safe-operations/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_42
{
_42
"count": 1,
_42
"next": null,
_42
"previous": null,
_42
"results": [
_42
{
_42
"created": "2024-07-22T10:00:18.892702Z",
_42
"modified": "2024-07-22T10:00:18.892702Z",
_42
"safeOperationHash": "0xb59828b1d3b0363641e3bb4d72dd63565d1062a40c6d05469caa0218ce8e0445",
_42
"validAfter": null,
_42
"validUntil": null,
_42
"moduleAddress": "0xa581c4A4DB7175302464fF3C06380BC3270b4037",
_42
"confirmations": [
_42
{
_42
"created": "2024-07-22T10:00:18.898708Z",
_42
"modified": "2024-07-22T10:00:18.898708Z",
_42
"owner": "0x608Cf2e3412c6BDA14E6D8A0a7D27c4240FeD6F1",
_42
"signature": "0x000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f",
_42
"signatureType": "CONTRACT_SIGNATURE"
_42
}
_42
],
_42
"preparedSignature": "0x000000000000000000000000000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f",
_42
"userOperation": {
_42
"ethereumTxHash": "0xfe7bc7fcab04ad689e1c5fcca7ad5345481fddc462880655a9a39b827da7b4ac",
_42
"sender": "0x125eb8CcAC85EA322C3859648509823CA05aD7e5",
_42
"userOperationHash": "0x3545a04aa1d10b74164af413253ab0881c86ebe219e166207b3175923202bbc7",
_42
"nonce": 0,
_42
"initCode": "0x4e1dcf7ad4e460cfd30791ccc4f9c8a4f820ec671688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c7620000000000000000000000000000000000000000000000000000000000000060ad27de2a410652abce96ea0fdfc30c2f0fd35952b78f554667111999a28ff3380000000000000000000000000000000000000000000000000000000000000344b63e800d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000038869bf66a61cf6bdb996a6ae40d5853fd43b5260000000000000000000000000000000000000000000000000000000000000140000000000000000000000000a581c4a4db7175302464ff3c06380bc3270b40370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f100000000000000000000000000000000000000000000000000000000000001c48d80ff0a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000172018ecd4ec46d4d2a6b64fe960b3d64e8b94b2234eb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000648d0dc49f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a581c4a4db7175302464ff3c06380bc3270b403701608cf2e3412c6bda14e6d8a0a7d27c4240fed6f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640dd9692f4255f6101637c8b43bf63660ffba39cab522b053094b2a07535d7d848ce5efca9aae34aabaee7600328bb0fb5f6a6c5214c8db9303f824f52f2fca42f2b342ce000000000000000000000000ca89cba4813d5b40aec6e57a30d0eeb500d6531b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
_42
"callData": "0x7bb3742800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
_42
"callGasLimit": 198268,
_42
"verificationGasLimit": 3867576,
_42
"preVerificationGas": 110646,
_42
"maxFeePerGas": 36776375378,
_42
"maxPriorityFeePerGas": 199436407,
_42
"paymaster": "0xDFF7FA1077Bce740a6a212b3995990682c0Ba66d",
_42
"paymasterData": "0x00000000000000000000000000000000000000000000000000000000669e2fe1000000000000000000000000000000000000000000000000000000000000000037a31ba85cc6a4753d5fb73e475ddf22c9ab9a9ce405fdff217c03bff161bc893e7658160bd3cabaefad55b2d5751713484b8b90ef54d85e356916b4fede3dc11b",
_42
"signature": "0x000000000000000000000000000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f",
_42
"entryPoint": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789"
_42
}
_42
}
_42
]
_42
}


Create Safe Operation


Adds a new SafeOperation for a given Safe account

Responses


Did this API route run successfully?
POST
/api/v1/safes/{address}/safe-operations/

Sample Request

Try it on Swagger

_10
curl -X POST https://safe-transaction-sepolia.safe.global/api/api/v1/safes/0xcd2E72aEBe2A203b84f46DEEC948E6465dB51c75/safe-operations/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \
_10
-d '{}'

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_10
Empty Response


List User Operations


Returns the list of UserOperations for a given Safe account

Query Parameters

ordering
string

Which field to use when ordering the results.

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

ethereumTxHash - required
string

sender - required
string

userOperationHash - required
string

nonce - required
integer

initCode - required
string | null

callData - required
string | null

callGasLimit - required
integer

verificationGasLimit - required
integer

preVerificationGas - required
integer

maxFeePerGas - required
integer

maxPriorityFeePerGas - required
integer

paymaster - required
string | null

paymasterData - required
string | null

signature - required
string

entryPoint - required
string

safeOperation - required


Did this API route run successfully?
GET
/api/v1/safes/{address}/user-operations/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/safes/0xcd2E72aEBe2A203b84f46DEEC948E6465dB51c75/user-operations/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_42
{
_42
"count": 1,
_42
"next": null,
_42
"previous": null,
_42
"results": [
_42
{
_42
"ethereumTxHash": "0xfe7bc7fcab04ad689e1c5fcca7ad5345481fddc462880655a9a39b827da7b4ac",
_42
"sender": "0x125eb8CcAC85EA322C3859648509823CA05aD7e5",
_42
"userOperationHash": "0x3545a04aa1d10b74164af413253ab0881c86ebe219e166207b3175923202bbc7",
_42
"nonce": 0,
_42
"initCode": "0x4e1dcf7ad4e460cfd30791ccc4f9c8a4f820ec671688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c7620000000000000000000000000000000000000000000000000000000000000060ad27de2a410652abce96ea0fdfc30c2f0fd35952b78f554667111999a28ff3380000000000000000000000000000000000000000000000000000000000000344b63e800d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000038869bf66a61cf6bdb996a6ae40d5853fd43b5260000000000000000000000000000000000000000000000000000000000000140000000000000000000000000a581c4a4db7175302464ff3c06380bc3270b40370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f100000000000000000000000000000000000000000000000000000000000001c48d80ff0a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000172018ecd4ec46d4d2a6b64fe960b3d64e8b94b2234eb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000648d0dc49f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a581c4a4db7175302464ff3c06380bc3270b403701608cf2e3412c6bda14e6d8a0a7d27c4240fed6f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640dd9692f4255f6101637c8b43bf63660ffba39cab522b053094b2a07535d7d848ce5efca9aae34aabaee7600328bb0fb5f6a6c5214c8db9303f824f52f2fca42f2b342ce000000000000000000000000ca89cba4813d5b40aec6e57a30d0eeb500d6531b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
_42
"callData": "0x7bb3742800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
_42
"callGasLimit": 198268,
_42
"verificationGasLimit": 3867576,
_42
"preVerificationGas": 110646,
_42
"maxFeePerGas": 36776375378,
_42
"maxPriorityFeePerGas": 199436407,
_42
"paymaster": "0xDFF7FA1077Bce740a6a212b3995990682c0Ba66d",
_42
"paymasterData": "0x00000000000000000000000000000000000000000000000000000000669e2fe1000000000000000000000000000000000000000000000000000000000000000037a31ba85cc6a4753d5fb73e475ddf22c9ab9a9ce405fdff217c03bff161bc893e7658160bd3cabaefad55b2d5751713484b8b90ef54d85e356916b4fede3dc11b",
_42
"signature": "0x000000000000000000000000000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f",
_42
"entryPoint": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
_42
"safeOperation": {
_42
"created": "2024-07-22T10:00:18.892702Z",
_42
"modified": "2024-07-22T10:00:18.892702Z",
_42
"safeOperationHash": "0xb59828b1d3b0363641e3bb4d72dd63565d1062a40c6d05469caa0218ce8e0445",
_42
"validAfter": null,
_42
"validUntil": null,
_42
"moduleAddress": "0xa581c4A4DB7175302464fF3C06380BC3270b4037",
_42
"confirmations": [
_42
{
_42
"created": "2024-07-22T10:00:18.898708Z",
_42
"modified": "2024-07-22T10:00:18.898708Z",
_42
"owner": "0x608Cf2e3412c6BDA14E6D8A0a7D27c4240FeD6F1",
_42
"signature": "0x000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f",
_42
"signatureType": "CONTRACT_SIGNATURE"
_42
}
_42
],
_42
"preparedSignature": "0x000000000000000000000000000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f"
_42
}
_42
}
_42
]
_42
}


Get User Operation


Returns a UserOperation given its user operation hash

Responses

200 OK - object

application/json

Success
ethereumTxHash - required
string

sender - required
string

userOperationHash - required
string

nonce - required
integer

initCode - required
string | null

callData - required
string | null

callGasLimit - required
integer

verificationGasLimit - required
integer

preVerificationGas - required
integer

maxFeePerGas - required
integer

maxPriorityFeePerGas - required
integer

paymaster - required
string | null

paymasterData - required
string | null

signature - required
string

entryPoint - required
string

safeOperation - required


Did this API route run successfully?
GET
/api/v1/user-operations/{user_operation_hash}/

Sample Request

Try it on Swagger
TypeScript
curl

_19
import { Safe4337Pack } from '@safe-global/relay-kit'
_19
_19
const safe4337Pack = await Safe4337Pack.init({
_19
provider: 'https://eth-sepolia.public.blastapi.io',
_19
signer: '0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80',
_19
bundlerUrl: `https://api.pimlico.io/v1/sepolia/rpc?apikey=${PIMLICO_API_KEY}`,
_19
options: {
_19
safeAddress: '0x97566B1eCaCd321736F183117C26ACe1b72F4a1b'
_19
}
_19
})
_19
_19
const userOperationHash =
_19
'0x7bf502ad622e62823c971d800033e82e5670fcdd1c19437555fb2d8b7eefd644'
_19
_19
const userOperation = await safe4337Pack.getUserOperationByHash(
_19
userOperationHash
_19
)
_19
_19
console.log(userOperation)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_35
{
_35
"ethereumTxHash": "0xfe7bc7fcab04ad689e1c5fcca7ad5345481fddc462880655a9a39b827da7b4ac",
_35
"sender": "0x125eb8CcAC85EA322C3859648509823CA05aD7e5",
_35
"userOperationHash": "0x3545a04aa1d10b74164af413253ab0881c86ebe219e166207b3175923202bbc7",
_35
"nonce": 0,
_35
"initCode": "0x4e1dcf7ad4e460cfd30791ccc4f9c8a4f820ec671688f0b900000000000000000000000029fcb43b46531bca003ddc8fcb67ffe91900c7620000000000000000000000000000000000000000000000000000000000000060ad27de2a410652abce96ea0fdfc30c2f0fd35952b78f554667111999a28ff3380000000000000000000000000000000000000000000000000000000000000344b63e800d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000100000000000000000000000038869bf66a61cf6bdb996a6ae40d5853fd43b5260000000000000000000000000000000000000000000000000000000000000140000000000000000000000000a581c4a4db7175302464ff3c06380bc3270b40370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f100000000000000000000000000000000000000000000000000000000000001c48d80ff0a00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000172018ecd4ec46d4d2a6b64fe960b3d64e8b94b2234eb000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000648d0dc49f00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000001000000000000000000000000a581c4a4db7175302464ff3c06380bc3270b403701608cf2e3412c6bda14e6d8a0a7d27c4240fed6f1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640dd9692f4255f6101637c8b43bf63660ffba39cab522b053094b2a07535d7d848ce5efca9aae34aabaee7600328bb0fb5f6a6c5214c8db9303f824f52f2fca42f2b342ce000000000000000000000000ca89cba4813d5b40aec6e57a30d0eeb500d6531b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
_35
"callData": "0x7bb3742800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
_35
"callGasLimit": 198268,
_35
"verificationGasLimit": 3867576,
_35
"preVerificationGas": 110646,
_35
"maxFeePerGas": 36776375378,
_35
"maxPriorityFeePerGas": 199436407,
_35
"paymaster": "0xDFF7FA1077Bce740a6a212b3995990682c0Ba66d",
_35
"paymasterData": "0x00000000000000000000000000000000000000000000000000000000669e2fe1000000000000000000000000000000000000000000000000000000000000000037a31ba85cc6a4753d5fb73e475ddf22c9ab9a9ce405fdff217c03bff161bc893e7658160bd3cabaefad55b2d5751713484b8b90ef54d85e356916b4fede3dc11b",
_35
"signature": "0x000000000000000000000000000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f",
_35
"entryPoint": "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789",
_35
"safeOperation": {
_35
"created": "2024-07-22T10:00:18.892702Z",
_35
"modified": "2024-07-22T10:00:18.892702Z",
_35
"safeOperationHash": "0xb59828b1d3b0363641e3bb4d72dd63565d1062a40c6d05469caa0218ce8e0445",
_35
"validAfter": null,
_35
"validUntil": null,
_35
"moduleAddress": "0xa581c4A4DB7175302464fF3C06380BC3270b4037",
_35
"confirmations": [
_35
{
_35
"created": "2024-07-22T10:00:18.898708Z",
_35
"modified": "2024-07-22T10:00:18.898708Z",
_35
"owner": "0x608Cf2e3412c6BDA14E6D8A0a7D27c4240FeD6F1",
_35
"signature": "0x000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f",
_35
"signatureType": "CONTRACT_SIGNATURE"
_35
}
_35
],
_35
"preparedSignature": "0x000000000000000000000000000000000000000000000000608cf2e3412c6bda14e6d8a0a7d27c4240fed6f10000000000000000000000000000000000000000000000000000000000000041000000000000000000000000000000000000000000000000000000000000000140000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000e053c4ce48756bae15e3454ad75ee8d4ba9764ea37ed561b216701c3630c0521774f94a8b7351780daa4a241792f52089af776e0898185318053201a92865b08d0000000000000000000000000000000000000000000000000000000000000002549960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97631d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000034226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303030222c2263726f73734f726967696e223a66616c736500000000000000000000001f"
_35
}
_35
}


Safes

Get Safe Status


Returns detailed information of a given Safe account

Responses

200 OK - object

application/json

Success
address - required
string

nonce - required
integer

threshold - required
integer

owners - required
[]

masterCopy - required
string

modules - required
[]

fallbackHandler - required
string

guard - required
string

version - required
string | null




Did this API route run successfully?
GET
/api/v1/safes/{address}/

Sample Request

Try it on Swagger
TypeScript
curl

_11
import SafeApiKit from '@safe-global/api-kit'
_11
_11
const apiKit = new SafeApiKit({
_11
chainId: 11155111n
_11
})
_11
_11
const safeInfo = await apiKit.getSafeInfo(
_11
'0x5298A93734C3D979eF1f23F78eBB871879A21F22'
_11
)
_11
_11
console.log(safeInfo)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_18
{
_18
"address": "0x5298A93734C3D979eF1f23F78eBB871879A21F22",
_18
"nonce": 6,
_18
"threshold": 2,
_18
"owners": [
_18
"0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_18
"0x3A16E3090e32DDeD2250E862B9d5610BEF13e93d"
_18
],
_18
"masterCopy": "0xfb1bffC9d739B8D520DaF37dF666da4C687191EA",
_18
"modules": [
_18
"0x9085149079b87E32178669097bc82D341CB65678",
_18
"0xFBbFe0716F25045975f193cccBDbE2a995840657",
_18
"0xB4F5e59987549a2586976e8957962dBD54a26FD0"
_18
],
_18
"fallbackHandler": "0x017062a1dE2FE6b99BE3d9d37841FeD19F573804",
_18
"guard": "0x0000000000000000000000000000000000000000",
_18
"version": "1.3.0+L2"
_18
}


List a Safe's Balances (Deprecated)


Get balance for Ether and ERC20 tokens of a given Safe account

Query Parameters

trusted
boolean

If `True` just trusted tokens will be returned

exclude_spam
boolean

If `True` spam tokens will not be returned

Responses

200 OK - array

application/json

Success
tokenAddress
string

name - required
string

symbol - required
string

decimals - required
integer

logoUri - required
string

balance
string




Did this API route run successfully?
GET
/api/v1/safes/{address}/balances/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/safes/0xcd2E72aEBe2A203b84f46DEEC948E6465dB51c75/balances/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_19
[
_19
// Native coin (Sepolia ETH):
_19
{
_19
"tokenAddress": null,
_19
"token": null,
_19
"balance": "9899990000000000"
_19
},
_19
// ERC20 token:
_19
{
_19
"tokenAddress": "0x0D5b70467E61125b242E70831aEd15D7C12E3F0D",
_19
"token": {
_19
"name": "SampleToken",
_19
"symbol": "ST",
_19
"decimals": 18,
_19
"logoUri": "https://safe-transaction-assets.safe.global/tokens/logos/0x0D5b70467E61125b242E70831aEd15D7C12E3F0D.png"
_19
},
_19
"balance": "10000000000000000000"
_19
}
_19
]


Get Safe Creation Status


Returns detailed information on the Safe creation transaction of a given Safe.

Note: When event indexing is being used and multiple Safes are deployed in the same transaction the result might not be accurate due to the indexer not knowing which events belong to which Safe deployment.

Responses

200 OK - object

application/json

Success
created - required
string

creator - required
string

transactionHash - required
string

factoryAddress - required
string

masterCopy - required
string | null

setupData - required
string | null

saltNonce - required
string | null

dataDecoded - required

userOperation - required





Did this API route run successfully?
GET
/api/v1/safes/{address}/creation/

Sample Request

Try it on Swagger
TypeScript
curl

_11
import SafeApiKit from '@safe-global/api-kit'
_11
_11
const apiKit = new SafeApiKit({
_11
chainId: 11155111n
_11
})
_11
_11
const safeCreationInfo = await apiKit.getSafeCreationInfo(
_11
'0x5298A93734C3D979eF1f23F78eBB871879A21F22'
_11
)
_11
_11
console.log(safeCreationInfo)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_57
{
_57
"created": "2024-06-25T11:18:48Z",
_57
"creator": "0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_57
"transactionHash": "0x6404e0298423c092cc1ce486f3f72172a1c0f2f28a9b29f69e605ea825360ac5",
_57
"factoryAddress": "0xC22834581EbC8527d974F8a1c97E1bEA4EF910BC",
_57
"masterCopy": "0xfb1bffC9d739B8D520DaF37dF666da4C687191EA",
_57
"setupData": "0xb63e800d0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000160000000000000000000000000017062a1de2fe6b99be3d9d37841fed19f5738040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000a6d3debaab2b8093e69109f23a75501f864f74e20000000000000000000000003a16e3090e32dded2250e862b9d5610bef13e93d0000000000000000000000000000000000000000000000000000000000000000",
_57
"dataDecoded": {
_57
"method": "setup",
_57
"parameters": [
_57
{
_57
"name": "_owners",
_57
"type": "address[]",
_57
"value": [
_57
"0xa6d3DEBAAB2B8093e69109f23A75501F864F74e2",
_57
"0x3A16E3090e32DDeD2250E862B9d5610BEF13e93d"
_57
]
_57
},
_57
{
_57
"name": "_threshold",
_57
"type": "uint256",
_57
"value": "2"
_57
},
_57
{
_57
"name": "to",
_57
"type": "address",
_57
"value": "0x0000000000000000000000000000000000000000"
_57
},
_57
{
_57
"name": "data",
_57
"type": "bytes",
_57
"value": "0x"
_57
},
_57
{
_57
"name": "fallbackHandler",
_57
"type": "address",
_57
"value": "0x017062a1dE2FE6b99BE3d9d37841FeD19F573804"
_57
},
_57
{
_57
"name": "paymentToken",
_57
"type": "address",
_57
"value": "0x0000000000000000000000000000000000000000"
_57
},
_57
{
_57
"name": "payment",
_57
"type": "uint256",
_57
"value": "0"
_57
},
_57
{
_57
"name": "paymentReceiver",
_57
"type": "address",
_57
"value": "0x0000000000000000000000000000000000000000"
_57
}
_57
]
_57
},
_57
"userOperation": null
_57
}


Get Safe Balances


Get paginated balances for Ether and ERC20 tokens. The maximum limit allowed is 200.

Query Parameters

trusted
boolean

If `True` just trusted tokens will be returned

exclude_spam
boolean

If `True` spam tokens will not be returned

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

results - required
address - required
string

tokenName - required
string

tokenSymbol - required
string

logoUri - required
string

id - required
string

uri - required
string

name - required
string

description - required
string

imageUri - required
string

metadata - required



code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
GET
/api/v2/safes/{address}/balances/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v2/safes/0xcd2E72aEBe2A203b84f46DEEC948E6465dB51c75/balances/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_19
[
_19
// Native coin (Sepolia ETH):
_19
{
_19
"tokenAddress": null,
_19
"token": null,
_19
"balance": "9899990000000000"
_19
},
_19
// ERC20 token:
_19
{
_19
"tokenAddress": "0x0D5b70467E61125b242E70831aEd15D7C12E3F0D",
_19
"token": {
_19
"name": "SampleToken",
_19
"symbol": "ST",
_19
"decimals": 18,
_19
"logoUri": "https://safe-transaction-assets.safe.global/tokens/logos/0x0D5b70467E61125b242E70831aEd15D7C12E3F0D.png"
_19
},
_19
"balance": "10000000000000000000"
_19
}
_19
]


List Collectibles


Get paginated collectibles (ERC721 tokens) and information about them of a given Safe account. The maximum limit allowed is 10.

Query Parameters

trusted
boolean

If `True` just trusted tokens will be returned

exclude_spam
boolean

If `True` spam tokens will not be returned

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

results - required
address - required
string

tokenName - required
string

tokenSymbol - required
string

logoUri - required
string

id - required
string

uri - required
string

name - required
string

description - required
string

imageUri - required
string

metadata - required



code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
GET
/api/v2/safes/{address}/collectibles/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v2/safes/0xcd2E72aEBe2A203b84f46DEEC948E6465dB51c75/collectibles/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_19
{
_19
"count": 1,
_19
"next": null,
_19
"previous": null,
_19
"results": [
_19
{
_19
"address": "0xa0D601bc48Bae6D64bB19d325f8A6618A4da9490",
_19
"tokenName": "SampleNft",
_19
"tokenSymbol": "SN",
_19
"logoUri": "https://safe-transaction-assets.safe.global/tokens/logos/0xa0D601bc48Bae6D64bB19d325f8A6618A4da9490.png",
_19
"id": "1",
_19
"uri": null,
_19
"name": null,
_19
"description": null,
_19
"imageUri": null,
_19
"metadata": {}
_19
}
_19
]
_19
}


Tokens

List Tokens


Returns the list of tokens supported in the Safe Transaction Service

Query Parameters

name
string

address
string

symbol
string

decimals__lt
integer

decimals__gt
integer

decimals
integer

search
string

A search term.

ordering
string

Which field to use when ordering the results.

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

results - required
type - required
string

address - required
string

name - required
string

symbol - required
string

decimals - required
integer

logoUri - required
string

trusted - required
boolean


Did this API route run successfully?
GET
/api/v1/tokens/

Sample Request

Try it on Swagger
TypeScript
curl

_10
import SafeApiKit from '@safe-global/api-kit'
_10
_10
const apiKit = new SafeApiKit({
_10
chainId: 11155111n
_10
})
_10
_10
const tokenList = await apiKit.getTokenList()
_10
_10
console.log(tokenList)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_17
{
_17
"count": 1846,
_17
"next": "https://safe-transaction-sepolia.safe.global/api/v1/tokens/?limit=10&offset=10",
_17
"previous": null,
_17
"results": [
_17
{
_17
"type": "ERC20",
_17
"address": "0x687e43D0aB3248bDfebFE3E8f9F1AB2B9FcE982d",
_17
"name": "0x5555.com",
_17
"symbol": "0x5555.com",
_17
"decimals": 18,
_17
"logoUri": "https://safe-transaction-assets.safe.global/tokens/logos/0x687e43D0aB3248bDfebFE3E8f9F1AB2B9FcE982d.png",
_17
"trusted": false
_17
}
_17
// ...
_17
]
_17
}


Get a Specific Token's Information


Returns detailed information on a given token supported in the Safe Transaction Service

Responses

200 OK - object

application/json

Success
type - required
string

address - required
string

name - required
string

symbol - required
string

decimals - required
integer

logoUri - required
string

trusted - required
boolean


code - required
integer

message - required
string

arguments - required
[]


Did this API route run successfully?
GET
/api/v1/tokens/{address}/

Sample Request

Try it on Swagger
TypeScript
curl

_11
import SafeApiKit from '@safe-global/api-kit'
_11
_11
const apiKit = new SafeApiKit({
_11
chainId: 11155111n
_11
})
_11
_11
const token = await apiKit.getToken(
_11
'0x687e43D0aB3248bDfebFE3E8f9F1AB2B9FcE982d'
_11
)
_11
_11
console.log(token)

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Sample Response


_10
{
_10
"type": "ERC20",
_10
"address": "0x687e43D0aB3248bDfebFE3E8f9F1AB2B9FcE982d",
_10
"name": "0x5555.com",
_10
"symbol": "0x5555.com",
_10
"decimals": 18,
_10
"logoUri": "https://safe-transaction-assets.safe.global/tokens/logos/0x687e43D0aB3248bDfebFE3E8f9F1AB2B9FcE982d.png",
_10
"trusted": false
_10
}


/api/v1/tokens/lists/ - GET


Returns the list of tokens supported in the Safe Transaction Service

Query Parameters

limit
integer

Number of results to return per page.

offset
integer

The initial index from which to return the results.

Responses

200 OK - object

application/json

Success
count - required
integer

next
string

previous
string

results - required
url - required
string

description - required
string


Did this API route run successfully?
GET
/api/v1/tokens/lists/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v1/tokens/lists/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Analytics

/api/v2/analytics/multisig-transactions/by-origin/ - GET


undefined

Responses


Did this API route run successfully?
GET
/api/v2/analytics/multisig-transactions/by-origin/

Sample Request

Try it on Swagger

_10
curl -X GET https://safe-transaction-sepolia.safe.global/api/api/v2/analytics/multisig-transactions/by-origin/ \
_10
-H "Accept: application/json" \
_10
-H "content-type: application/json" \

This snippet shows a sample request on Ethereum Sepolia. Please click here to copy the base URL for Mainnet and update it in your request.

Was this page helpful?