Skip to main content
POST
/
2
/
pm
/
deploy
/
submit
Submit Safe deploy signature
curl --request POST \
  --url https://demo-api.mobula.io/api/2/pm/deploy/submit \
  --header 'Content-Type: application/json' \
  --data '
{
  "address": "<string>",
  "signature": "<string>"
}
'
{
  "data": {
    "to": "<string>",
    "calldata": "<string>",
    "chainId": 123,
    "safeAddress": "<string>"
  },
  "hostname": "<string>",
  "took": 123
}

Request Body

address
string
required
The wallet address deploying the Safe account.
signature
string
required
The EIP-712 signature from signing the typed data returned by Account Deploy Build.

Response

data
object
Transaction calldata for Safe deployment.
hostname
string
Server node identifier.
took
number
Request processing time in milliseconds.

Usage Example

curl -X POST "https://api.mobula.io/api/2/pm/deploy/submit" \
  -H "Content-Type: application/json" \
  -d '{
    "address": "0xYourWalletAddress",
    "signature": "0xabc123..."
  }'

Integration Example

// 1. Build deploy typed data
const buildRes = await fetch('https://api.mobula.io/api/2/pm/deploy/build', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ address: walletAddress })
});
const { data: typedData } = await buildRes.json();

// 2. Sign the typed data
const signature = await walletClient.signTypedData(typedData);

// 3. Get deployment calldata
const submitRes = await fetch('https://api.mobula.io/api/2/pm/deploy/submit', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ address: walletAddress, signature })
});
const { data: deployTx } = await submitRes.json();

// 4. Send the deployment transaction on Polygon
const txHash = await walletClient.sendTransaction({
  to: deployTx.to,
  data: deployTx.calldata,
  chain: polygon
});

Body

application/json
address
string
required
signature
string
required

Response

200 - application/json

Deploy submit result

data
object
hostname
string
took
number