curl --request POST \
--url https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"message": "<string>",
"approvalQuorum": {
"intent": {
"intentId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountId": "95b11417-f18f-457f-8804-68e361f9164f",
"accountAddress": "0xbF394748301603f18d953C90F0b087CBEC0E1834",
"actionType": "waasSigningQuorumApprove",
"initiatorUserId": "95b11417-f18f-457f-8804-68e361f9164f",
"createdAt": "<string>",
"operation": {
"kind": "<string>",
"chainName": "<string>",
"message": "<string>",
"payload": "<string>"
},
"completeBy": "<string>"
},
"intentSignature": "<string>",
"initiatorProof": "<string>"
},
"context": {
"evmUserOperation": {
"chainId": 123,
"entryPoint": "<string>",
"operation": {
"authorization": {
"address": "<string>",
"chainId": 123,
"nonce": 123,
"r": "<string>",
"s": "<string>",
"v": "<string>",
"yParity": 123
},
"callData": "<string>",
"callGasLimit": "<string>",
"factory": "<string>",
"factoryData": "<string>",
"maxFeePerGas": "<string>",
"maxPriorityFeePerGas": "<string>",
"nonce": "<string>",
"paymaster": "<string>",
"paymasterData": "<string>",
"paymasterPostOpGasLimit": "<string>",
"paymasterVerificationGasLimit": "<string>",
"preVerificationGas": "<string>",
"sender": "<string>",
"signature": "<string>",
"verificationGasLimit": "<string>"
}
},
"evmMessage": "<string>",
"svmMessage": "<string>",
"suiMessage": "<string>",
"stellarMessage": "<string>",
"aleoMessage": "<string>",
"domain": "https://app.xyz.com"
}
}
'import requests
url = "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals"
payload = {
"message": "<string>",
"approvalQuorum": {
"intent": {
"intentId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountId": "95b11417-f18f-457f-8804-68e361f9164f",
"accountAddress": "0xbF394748301603f18d953C90F0b087CBEC0E1834",
"actionType": "waasSigningQuorumApprove",
"initiatorUserId": "95b11417-f18f-457f-8804-68e361f9164f",
"createdAt": "<string>",
"operation": {
"kind": "<string>",
"chainName": "<string>",
"message": "<string>",
"payload": "<string>"
},
"completeBy": "<string>"
},
"intentSignature": "<string>",
"initiatorProof": "<string>"
},
"context": {
"evmUserOperation": {
"chainId": 123,
"entryPoint": "<string>",
"operation": {
"authorization": {
"address": "<string>",
"chainId": 123,
"nonce": 123,
"r": "<string>",
"s": "<string>",
"v": "<string>",
"yParity": 123
},
"callData": "<string>",
"callGasLimit": "<string>",
"factory": "<string>",
"factoryData": "<string>",
"maxFeePerGas": "<string>",
"maxPriorityFeePerGas": "<string>",
"nonce": "<string>",
"paymaster": "<string>",
"paymasterData": "<string>",
"paymasterPostOpGasLimit": "<string>",
"paymasterVerificationGasLimit": "<string>",
"preVerificationGas": "<string>",
"sender": "<string>",
"signature": "<string>",
"verificationGasLimit": "<string>"
}
},
"evmMessage": "<string>",
"svmMessage": "<string>",
"suiMessage": "<string>",
"stellarMessage": "<string>",
"aleoMessage": "<string>",
"domain": "https://app.xyz.com"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
message: '<string>',
approvalQuorum: {
intent: {
intentId: '95b11417-f18f-457f-8804-68e361f9164f',
businessAccountId: '95b11417-f18f-457f-8804-68e361f9164f',
accountAddress: '0xbF394748301603f18d953C90F0b087CBEC0E1834',
actionType: 'waasSigningQuorumApprove',
initiatorUserId: '95b11417-f18f-457f-8804-68e361f9164f',
createdAt: '<string>',
operation: {
kind: '<string>',
chainName: '<string>',
message: '<string>',
payload: '<string>'
},
completeBy: '<string>'
},
intentSignature: '<string>',
initiatorProof: '<string>'
},
context: {
evmUserOperation: {
chainId: 123,
entryPoint: '<string>',
operation: {
authorization: {
address: '<string>',
chainId: 123,
nonce: 123,
r: '<string>',
s: '<string>',
v: '<string>',
yParity: 123
},
callData: '<string>',
callGasLimit: '<string>',
factory: '<string>',
factoryData: '<string>',
maxFeePerGas: '<string>',
maxPriorityFeePerGas: '<string>',
nonce: '<string>',
paymaster: '<string>',
paymasterData: '<string>',
paymasterPostOpGasLimit: '<string>',
paymasterVerificationGasLimit: '<string>',
preVerificationGas: '<string>',
sender: '<string>',
signature: '<string>',
verificationGasLimit: '<string>'
}
},
evmMessage: '<string>',
svmMessage: '<string>',
suiMessage: '<string>',
stellarMessage: '<string>',
aleoMessage: '<string>',
domain: 'https://app.xyz.com'
}
})
};
fetch('https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'message' => '<string>',
'approvalQuorum' => [
'intent' => [
'intentId' => '95b11417-f18f-457f-8804-68e361f9164f',
'businessAccountId' => '95b11417-f18f-457f-8804-68e361f9164f',
'accountAddress' => '0xbF394748301603f18d953C90F0b087CBEC0E1834',
'actionType' => 'waasSigningQuorumApprove',
'initiatorUserId' => '95b11417-f18f-457f-8804-68e361f9164f',
'createdAt' => '<string>',
'operation' => [
'kind' => '<string>',
'chainName' => '<string>',
'message' => '<string>',
'payload' => '<string>'
],
'completeBy' => '<string>'
],
'intentSignature' => '<string>',
'initiatorProof' => '<string>'
],
'context' => [
'evmUserOperation' => [
'chainId' => 123,
'entryPoint' => '<string>',
'operation' => [
'authorization' => [
'address' => '<string>',
'chainId' => 123,
'nonce' => 123,
'r' => '<string>',
's' => '<string>',
'v' => '<string>',
'yParity' => 123
],
'callData' => '<string>',
'callGasLimit' => '<string>',
'factory' => '<string>',
'factoryData' => '<string>',
'maxFeePerGas' => '<string>',
'maxPriorityFeePerGas' => '<string>',
'nonce' => '<string>',
'paymaster' => '<string>',
'paymasterData' => '<string>',
'paymasterPostOpGasLimit' => '<string>',
'paymasterVerificationGasLimit' => '<string>',
'preVerificationGas' => '<string>',
'sender' => '<string>',
'signature' => '<string>',
'verificationGasLimit' => '<string>'
]
],
'evmMessage' => '<string>',
'svmMessage' => '<string>',
'suiMessage' => '<string>',
'stellarMessage' => '<string>',
'aleoMessage' => '<string>',
'domain' => 'https://app.xyz.com'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals"
payload := strings.NewReader("{\n \"message\": \"<string>\",\n \"approvalQuorum\": {\n \"intent\": {\n \"intentId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"businessAccountId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"accountAddress\": \"0xbF394748301603f18d953C90F0b087CBEC0E1834\",\n \"actionType\": \"waasSigningQuorumApprove\",\n \"initiatorUserId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"createdAt\": \"<string>\",\n \"operation\": {\n \"kind\": \"<string>\",\n \"chainName\": \"<string>\",\n \"message\": \"<string>\",\n \"payload\": \"<string>\"\n },\n \"completeBy\": \"<string>\"\n },\n \"intentSignature\": \"<string>\",\n \"initiatorProof\": \"<string>\"\n },\n \"context\": {\n \"evmUserOperation\": {\n \"chainId\": 123,\n \"entryPoint\": \"<string>\",\n \"operation\": {\n \"authorization\": {\n \"address\": \"<string>\",\n \"chainId\": 123,\n \"nonce\": 123,\n \"r\": \"<string>\",\n \"s\": \"<string>\",\n \"v\": \"<string>\",\n \"yParity\": 123\n },\n \"callData\": \"<string>\",\n \"callGasLimit\": \"<string>\",\n \"factory\": \"<string>\",\n \"factoryData\": \"<string>\",\n \"maxFeePerGas\": \"<string>\",\n \"maxPriorityFeePerGas\": \"<string>\",\n \"nonce\": \"<string>\",\n \"paymaster\": \"<string>\",\n \"paymasterData\": \"<string>\",\n \"paymasterPostOpGasLimit\": \"<string>\",\n \"paymasterVerificationGasLimit\": \"<string>\",\n \"preVerificationGas\": \"<string>\",\n \"sender\": \"<string>\",\n \"signature\": \"<string>\",\n \"verificationGasLimit\": \"<string>\"\n }\n },\n \"evmMessage\": \"<string>\",\n \"svmMessage\": \"<string>\",\n \"suiMessage\": \"<string>\",\n \"stellarMessage\": \"<string>\",\n \"aleoMessage\": \"<string>\",\n \"domain\": \"https://app.xyz.com\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"message\": \"<string>\",\n \"approvalQuorum\": {\n \"intent\": {\n \"intentId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"businessAccountId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"accountAddress\": \"0xbF394748301603f18d953C90F0b087CBEC0E1834\",\n \"actionType\": \"waasSigningQuorumApprove\",\n \"initiatorUserId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"createdAt\": \"<string>\",\n \"operation\": {\n \"kind\": \"<string>\",\n \"chainName\": \"<string>\",\n \"message\": \"<string>\",\n \"payload\": \"<string>\"\n },\n \"completeBy\": \"<string>\"\n },\n \"intentSignature\": \"<string>\",\n \"initiatorProof\": \"<string>\"\n },\n \"context\": {\n \"evmUserOperation\": {\n \"chainId\": 123,\n \"entryPoint\": \"<string>\",\n \"operation\": {\n \"authorization\": {\n \"address\": \"<string>\",\n \"chainId\": 123,\n \"nonce\": 123,\n \"r\": \"<string>\",\n \"s\": \"<string>\",\n \"v\": \"<string>\",\n \"yParity\": 123\n },\n \"callData\": \"<string>\",\n \"callGasLimit\": \"<string>\",\n \"factory\": \"<string>\",\n \"factoryData\": \"<string>\",\n \"maxFeePerGas\": \"<string>\",\n \"maxPriorityFeePerGas\": \"<string>\",\n \"nonce\": \"<string>\",\n \"paymaster\": \"<string>\",\n \"paymasterData\": \"<string>\",\n \"paymasterPostOpGasLimit\": \"<string>\",\n \"paymasterVerificationGasLimit\": \"<string>\",\n \"preVerificationGas\": \"<string>\",\n \"sender\": \"<string>\",\n \"signature\": \"<string>\",\n \"verificationGasLimit\": \"<string>\"\n }\n },\n \"evmMessage\": \"<string>\",\n \"svmMessage\": \"<string>\",\n \"suiMessage\": \"<string>\",\n \"stellarMessage\": \"<string>\",\n \"aleoMessage\": \"<string>\",\n \"domain\": \"https://app.xyz.com\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"message\": \"<string>\",\n \"approvalQuorum\": {\n \"intent\": {\n \"intentId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"businessAccountId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"accountAddress\": \"0xbF394748301603f18d953C90F0b087CBEC0E1834\",\n \"actionType\": \"waasSigningQuorumApprove\",\n \"initiatorUserId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"createdAt\": \"<string>\",\n \"operation\": {\n \"kind\": \"<string>\",\n \"chainName\": \"<string>\",\n \"message\": \"<string>\",\n \"payload\": \"<string>\"\n },\n \"completeBy\": \"<string>\"\n },\n \"intentSignature\": \"<string>\",\n \"initiatorProof\": \"<string>\"\n },\n \"context\": {\n \"evmUserOperation\": {\n \"chainId\": 123,\n \"entryPoint\": \"<string>\",\n \"operation\": {\n \"authorization\": {\n \"address\": \"<string>\",\n \"chainId\": 123,\n \"nonce\": 123,\n \"r\": \"<string>\",\n \"s\": \"<string>\",\n \"v\": \"<string>\",\n \"yParity\": 123\n },\n \"callData\": \"<string>\",\n \"callGasLimit\": \"<string>\",\n \"factory\": \"<string>\",\n \"factoryData\": \"<string>\",\n \"maxFeePerGas\": \"<string>\",\n \"maxPriorityFeePerGas\": \"<string>\",\n \"nonce\": \"<string>\",\n \"paymaster\": \"<string>\",\n \"paymasterData\": \"<string>\",\n \"paymasterPostOpGasLimit\": \"<string>\",\n \"paymasterVerificationGasLimit\": \"<string>\",\n \"preVerificationGas\": \"<string>\",\n \"sender\": \"<string>\",\n \"signature\": \"<string>\",\n \"verificationGasLimit\": \"<string>\"\n }\n },\n \"evmMessage\": \"<string>\",\n \"svmMessage\": \"<string>\",\n \"suiMessage\": \"<string>\",\n \"stellarMessage\": \"<string>\",\n \"aleoMessage\": \"<string>\",\n \"domain\": \"https://app.xyz.com\"\n }\n}"
response = http.request(request)
puts response.read_body{
"proposalId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"intent": {
"intentId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountId": "95b11417-f18f-457f-8804-68e361f9164f",
"accountAddress": "0xbF394748301603f18d953C90F0b087CBEC0E1834",
"actionType": "waasSigningQuorumApprove",
"initiatorUserId": "95b11417-f18f-457f-8804-68e361f9164f",
"createdAt": "<string>",
"operation": {
"kind": "<string>",
"chainName": "<string>",
"message": "<string>",
"payload": "<string>"
},
"completeBy": "<string>",
"limits": {
"maxGas": "<string>",
"maxFeePerGas": "<string>",
"maxPriorityFeePerGas": "<string>",
"maxTotalFee": "<string>"
},
"lifetime": {
"refreshable": "blockhash"
}
},
"approvalRequirement": {
"requirementId": "<string>",
"required": 123,
"approved": 123,
"satisfied": true,
"unmetMandatoryRoles": [
"<string>"
],
"eligibleApproverRoles": [
"<string>"
],
"mandatoryApproverRoles": [
"<string>"
]
}
}{
"error": "<string>",
"code": "exchange_currency_unsupported"
}{
"error": "No jwt provided!"
}{
"error": "Not Found",
"code": "not_found"
}{
"error": "Conflict: invalid state transition"
}{
"error": "Resources already exists for this Object",
"code": "email_cannot_be_null",
"payload": {
"email": "joe@email.com",
"loginProvider": "emailOnly",
"embeddedWalletName": "<string>",
"embeddedSocialSigninProvider": "emailOnly",
"mergeConflicts": {
"fromUser": {
"id": "95b11417-f18f-457f-8804-68e361f9164f",
"projectEnvironmentId": "95b11417-f18f-457f-8804-68e361f9164f",
"verifiedCredentials": [
{
"id": "95b11417-f18f-457f-8804-68e361f9164f-zerodev",
"format": "blockchain",
"signInEnabled": true,
"address": "0xbF394748301603f18d953C90F0b087CBEC0E1834",
"chain": "<string>",
"refId": "95b11417-f18f-457f-8804-68e361f9164f",
"signerRefId": "95b11417-f18f-457f-8804-68e361f9164f",
"email": "jsmith@example.com",
"name_service": {
"avatar": "<string>",
"name": "<string>"
},
"public_identifier": "<string>",
"wallet_name": "<string>",
"wallet_provider": "browserExtension",
"wallet_properties": {
"turnkeySubOrganizationId": "95b11417-f18f-457f-8804-68e361f9164f",
"turnkeyPrivateKeyId": "95b11417-f18f-457f-8804-68e361f9164f",
"turnkeyHDWalletId": "95b11417-f18f-457f-8804-68e361f9164f",
"isAuthenticatorAttached": true,
"turnkeyUserId": "95b11417-f18f-457f-8804-68e361f9164f",
"isSessionKeyCompatible": true,
"version": "V1",
"ecdsaProviderType": "zerodev_signer_to_ecdsa",
"entryPointVersion": "v6",
"kernelVersion": "v2_4"
},
"business_account_properties": {
"businessAccountId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountCreatedAt": "2023-11-07T05:31:56Z",
"businessAccountSignerId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountSignerType": "endUser",
"businessAccountMemberRole": "cfo",
"businessAccountName": "<string>",
"businessAccountExternalRef": "<string>"
},
"oauth_provider": "emailOnly",
"oauth_username": "<string>",
"oauth_display_name": "<string>",
"oauth_account_id": "<string>",
"phoneNumber": "9171113333",
"phoneCountryCode": "1",
"isoCountryCode": "US",
"oauth_account_photos": [
"<string>"
],
"oauth_emails": [
"<string>"
],
"oauth_metadata": {},
"previous_users": [
"95b11417-f18f-457f-8804-68e361f9164f"
],
"embedded_wallet_id": "<string>",
"wallet_additional_addresses": [
{
"address": "<string>",
"type": "ordinals",
"publicKey": "<string>",
"network": "<string>"
}
],
"lastSelectedAt": "2023-11-07T05:31:56Z",
"verifiedAt": "2023-11-07T05:31:56Z"
}
],
"lastVerifiedCredentialId": "95b11417-f18f-457f-8804-68e361f9164f-zerodev",
"sessionId": "95b11417-f18f-457f-8804-68e361f9164f",
"alias": "An example name",
"country": "US",
"email": "jsmith@example.com",
"firstName": "An example name",
"jobTitle": "An example name",
"lastName": "An example name",
"phoneNumber": "<string>",
"policiesConsent": true,
"tShirtSize": "An example name",
"team": "An example name",
"username": "An example name",
"firstVisit": "2023-11-07T05:31:56Z",
"lastVisit": "2023-11-07T05:31:56Z",
"newUser": true,
"metadata": {},
"mfaBackupCodeAcknowledgement": "pending",
"btcWallet": "<string>",
"kdaWallet": "<string>",
"ltcWallet": "<string>",
"ckbWallet": "<string>",
"kasWallet": "<string>",
"dogeWallet": "<string>",
"emailNotification": true,
"discordNotification": true,
"newsletterNotification": true,
"lists": [
"<string>"
],
"scope": "superuser marketing operations",
"missingFields": [
{
"name": "<string>",
"required": true,
"enabled": true,
"unique": true,
"verify": true,
"type": "standard",
"validationRules": {
"unique": true,
"regex": "^0x",
"validOptions": [
{
"label": "small"
},
{
"label": "medium"
},
{
"label": "large"
}
],
"checkboxText": "Agree to the terms and conditions"
},
"validationType": "text",
"label": "<string>",
"position": 123
}
]
},
"conflicts": [
{
"field": {
"name": "<string>",
"required": true,
"enabled": true,
"unique": true,
"verify": true,
"type": "standard",
"validationRules": {
"unique": true,
"regex": "^0x",
"validOptions": [
{
"label": "small"
},
{
"label": "medium"
},
{
"label": "large"
}
],
"checkboxText": "Agree to the terms and conditions"
},
"validationType": "text",
"label": "<string>",
"position": 123
},
"fromUser": {
"userId": "95b11417-f18f-457f-8804-68e361f9164f",
"value": "An example name"
},
"currentUser": {
"userId": "95b11417-f18f-457f-8804-68e361f9164f",
"value": "An example name"
}
}
]
},
"intent": {},
"additionalMessages": [
"<string>"
]
},
"retryAfterSeconds": 600
}{
"error": "Internal Server Error"
}SDK — propose a signing-quorum transaction for a business-account wallet
Opens a signMessage proposal for the wallet’s caller-signed intent without running the sign.
curl --request POST \
--url https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"message": "<string>",
"approvalQuorum": {
"intent": {
"intentId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountId": "95b11417-f18f-457f-8804-68e361f9164f",
"accountAddress": "0xbF394748301603f18d953C90F0b087CBEC0E1834",
"actionType": "waasSigningQuorumApprove",
"initiatorUserId": "95b11417-f18f-457f-8804-68e361f9164f",
"createdAt": "<string>",
"operation": {
"kind": "<string>",
"chainName": "<string>",
"message": "<string>",
"payload": "<string>"
},
"completeBy": "<string>"
},
"intentSignature": "<string>",
"initiatorProof": "<string>"
},
"context": {
"evmUserOperation": {
"chainId": 123,
"entryPoint": "<string>",
"operation": {
"authorization": {
"address": "<string>",
"chainId": 123,
"nonce": 123,
"r": "<string>",
"s": "<string>",
"v": "<string>",
"yParity": 123
},
"callData": "<string>",
"callGasLimit": "<string>",
"factory": "<string>",
"factoryData": "<string>",
"maxFeePerGas": "<string>",
"maxPriorityFeePerGas": "<string>",
"nonce": "<string>",
"paymaster": "<string>",
"paymasterData": "<string>",
"paymasterPostOpGasLimit": "<string>",
"paymasterVerificationGasLimit": "<string>",
"preVerificationGas": "<string>",
"sender": "<string>",
"signature": "<string>",
"verificationGasLimit": "<string>"
}
},
"evmMessage": "<string>",
"svmMessage": "<string>",
"suiMessage": "<string>",
"stellarMessage": "<string>",
"aleoMessage": "<string>",
"domain": "https://app.xyz.com"
}
}
'import requests
url = "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals"
payload = {
"message": "<string>",
"approvalQuorum": {
"intent": {
"intentId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountId": "95b11417-f18f-457f-8804-68e361f9164f",
"accountAddress": "0xbF394748301603f18d953C90F0b087CBEC0E1834",
"actionType": "waasSigningQuorumApprove",
"initiatorUserId": "95b11417-f18f-457f-8804-68e361f9164f",
"createdAt": "<string>",
"operation": {
"kind": "<string>",
"chainName": "<string>",
"message": "<string>",
"payload": "<string>"
},
"completeBy": "<string>"
},
"intentSignature": "<string>",
"initiatorProof": "<string>"
},
"context": {
"evmUserOperation": {
"chainId": 123,
"entryPoint": "<string>",
"operation": {
"authorization": {
"address": "<string>",
"chainId": 123,
"nonce": 123,
"r": "<string>",
"s": "<string>",
"v": "<string>",
"yParity": 123
},
"callData": "<string>",
"callGasLimit": "<string>",
"factory": "<string>",
"factoryData": "<string>",
"maxFeePerGas": "<string>",
"maxPriorityFeePerGas": "<string>",
"nonce": "<string>",
"paymaster": "<string>",
"paymasterData": "<string>",
"paymasterPostOpGasLimit": "<string>",
"paymasterVerificationGasLimit": "<string>",
"preVerificationGas": "<string>",
"sender": "<string>",
"signature": "<string>",
"verificationGasLimit": "<string>"
}
},
"evmMessage": "<string>",
"svmMessage": "<string>",
"suiMessage": "<string>",
"stellarMessage": "<string>",
"aleoMessage": "<string>",
"domain": "https://app.xyz.com"
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
message: '<string>',
approvalQuorum: {
intent: {
intentId: '95b11417-f18f-457f-8804-68e361f9164f',
businessAccountId: '95b11417-f18f-457f-8804-68e361f9164f',
accountAddress: '0xbF394748301603f18d953C90F0b087CBEC0E1834',
actionType: 'waasSigningQuorumApprove',
initiatorUserId: '95b11417-f18f-457f-8804-68e361f9164f',
createdAt: '<string>',
operation: {
kind: '<string>',
chainName: '<string>',
message: '<string>',
payload: '<string>'
},
completeBy: '<string>'
},
intentSignature: '<string>',
initiatorProof: '<string>'
},
context: {
evmUserOperation: {
chainId: 123,
entryPoint: '<string>',
operation: {
authorization: {
address: '<string>',
chainId: 123,
nonce: 123,
r: '<string>',
s: '<string>',
v: '<string>',
yParity: 123
},
callData: '<string>',
callGasLimit: '<string>',
factory: '<string>',
factoryData: '<string>',
maxFeePerGas: '<string>',
maxPriorityFeePerGas: '<string>',
nonce: '<string>',
paymaster: '<string>',
paymasterData: '<string>',
paymasterPostOpGasLimit: '<string>',
paymasterVerificationGasLimit: '<string>',
preVerificationGas: '<string>',
sender: '<string>',
signature: '<string>',
verificationGasLimit: '<string>'
}
},
evmMessage: '<string>',
svmMessage: '<string>',
suiMessage: '<string>',
stellarMessage: '<string>',
aleoMessage: '<string>',
domain: 'https://app.xyz.com'
}
})
};
fetch('https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'message' => '<string>',
'approvalQuorum' => [
'intent' => [
'intentId' => '95b11417-f18f-457f-8804-68e361f9164f',
'businessAccountId' => '95b11417-f18f-457f-8804-68e361f9164f',
'accountAddress' => '0xbF394748301603f18d953C90F0b087CBEC0E1834',
'actionType' => 'waasSigningQuorumApprove',
'initiatorUserId' => '95b11417-f18f-457f-8804-68e361f9164f',
'createdAt' => '<string>',
'operation' => [
'kind' => '<string>',
'chainName' => '<string>',
'message' => '<string>',
'payload' => '<string>'
],
'completeBy' => '<string>'
],
'intentSignature' => '<string>',
'initiatorProof' => '<string>'
],
'context' => [
'evmUserOperation' => [
'chainId' => 123,
'entryPoint' => '<string>',
'operation' => [
'authorization' => [
'address' => '<string>',
'chainId' => 123,
'nonce' => 123,
'r' => '<string>',
's' => '<string>',
'v' => '<string>',
'yParity' => 123
],
'callData' => '<string>',
'callGasLimit' => '<string>',
'factory' => '<string>',
'factoryData' => '<string>',
'maxFeePerGas' => '<string>',
'maxPriorityFeePerGas' => '<string>',
'nonce' => '<string>',
'paymaster' => '<string>',
'paymasterData' => '<string>',
'paymasterPostOpGasLimit' => '<string>',
'paymasterVerificationGasLimit' => '<string>',
'preVerificationGas' => '<string>',
'sender' => '<string>',
'signature' => '<string>',
'verificationGasLimit' => '<string>'
]
],
'evmMessage' => '<string>',
'svmMessage' => '<string>',
'suiMessage' => '<string>',
'stellarMessage' => '<string>',
'aleoMessage' => '<string>',
'domain' => 'https://app.xyz.com'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals"
payload := strings.NewReader("{\n \"message\": \"<string>\",\n \"approvalQuorum\": {\n \"intent\": {\n \"intentId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"businessAccountId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"accountAddress\": \"0xbF394748301603f18d953C90F0b087CBEC0E1834\",\n \"actionType\": \"waasSigningQuorumApprove\",\n \"initiatorUserId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"createdAt\": \"<string>\",\n \"operation\": {\n \"kind\": \"<string>\",\n \"chainName\": \"<string>\",\n \"message\": \"<string>\",\n \"payload\": \"<string>\"\n },\n \"completeBy\": \"<string>\"\n },\n \"intentSignature\": \"<string>\",\n \"initiatorProof\": \"<string>\"\n },\n \"context\": {\n \"evmUserOperation\": {\n \"chainId\": 123,\n \"entryPoint\": \"<string>\",\n \"operation\": {\n \"authorization\": {\n \"address\": \"<string>\",\n \"chainId\": 123,\n \"nonce\": 123,\n \"r\": \"<string>\",\n \"s\": \"<string>\",\n \"v\": \"<string>\",\n \"yParity\": 123\n },\n \"callData\": \"<string>\",\n \"callGasLimit\": \"<string>\",\n \"factory\": \"<string>\",\n \"factoryData\": \"<string>\",\n \"maxFeePerGas\": \"<string>\",\n \"maxPriorityFeePerGas\": \"<string>\",\n \"nonce\": \"<string>\",\n \"paymaster\": \"<string>\",\n \"paymasterData\": \"<string>\",\n \"paymasterPostOpGasLimit\": \"<string>\",\n \"paymasterVerificationGasLimit\": \"<string>\",\n \"preVerificationGas\": \"<string>\",\n \"sender\": \"<string>\",\n \"signature\": \"<string>\",\n \"verificationGasLimit\": \"<string>\"\n }\n },\n \"evmMessage\": \"<string>\",\n \"svmMessage\": \"<string>\",\n \"suiMessage\": \"<string>\",\n \"stellarMessage\": \"<string>\",\n \"aleoMessage\": \"<string>\",\n \"domain\": \"https://app.xyz.com\"\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"message\": \"<string>\",\n \"approvalQuorum\": {\n \"intent\": {\n \"intentId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"businessAccountId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"accountAddress\": \"0xbF394748301603f18d953C90F0b087CBEC0E1834\",\n \"actionType\": \"waasSigningQuorumApprove\",\n \"initiatorUserId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"createdAt\": \"<string>\",\n \"operation\": {\n \"kind\": \"<string>\",\n \"chainName\": \"<string>\",\n \"message\": \"<string>\",\n \"payload\": \"<string>\"\n },\n \"completeBy\": \"<string>\"\n },\n \"intentSignature\": \"<string>\",\n \"initiatorProof\": \"<string>\"\n },\n \"context\": {\n \"evmUserOperation\": {\n \"chainId\": 123,\n \"entryPoint\": \"<string>\",\n \"operation\": {\n \"authorization\": {\n \"address\": \"<string>\",\n \"chainId\": 123,\n \"nonce\": 123,\n \"r\": \"<string>\",\n \"s\": \"<string>\",\n \"v\": \"<string>\",\n \"yParity\": 123\n },\n \"callData\": \"<string>\",\n \"callGasLimit\": \"<string>\",\n \"factory\": \"<string>\",\n \"factoryData\": \"<string>\",\n \"maxFeePerGas\": \"<string>\",\n \"maxPriorityFeePerGas\": \"<string>\",\n \"nonce\": \"<string>\",\n \"paymaster\": \"<string>\",\n \"paymasterData\": \"<string>\",\n \"paymasterPostOpGasLimit\": \"<string>\",\n \"paymasterVerificationGasLimit\": \"<string>\",\n \"preVerificationGas\": \"<string>\",\n \"sender\": \"<string>\",\n \"signature\": \"<string>\",\n \"verificationGasLimit\": \"<string>\"\n }\n },\n \"evmMessage\": \"<string>\",\n \"svmMessage\": \"<string>\",\n \"suiMessage\": \"<string>\",\n \"stellarMessage\": \"<string>\",\n \"aleoMessage\": \"<string>\",\n \"domain\": \"https://app.xyz.com\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.dynamicauth.com/api/v0/sdk/{environmentId}/businessAccounts/{businessAccountId}/wallets/{walletId}/signingProposals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"message\": \"<string>\",\n \"approvalQuorum\": {\n \"intent\": {\n \"intentId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"businessAccountId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"accountAddress\": \"0xbF394748301603f18d953C90F0b087CBEC0E1834\",\n \"actionType\": \"waasSigningQuorumApprove\",\n \"initiatorUserId\": \"95b11417-f18f-457f-8804-68e361f9164f\",\n \"createdAt\": \"<string>\",\n \"operation\": {\n \"kind\": \"<string>\",\n \"chainName\": \"<string>\",\n \"message\": \"<string>\",\n \"payload\": \"<string>\"\n },\n \"completeBy\": \"<string>\"\n },\n \"intentSignature\": \"<string>\",\n \"initiatorProof\": \"<string>\"\n },\n \"context\": {\n \"evmUserOperation\": {\n \"chainId\": 123,\n \"entryPoint\": \"<string>\",\n \"operation\": {\n \"authorization\": {\n \"address\": \"<string>\",\n \"chainId\": 123,\n \"nonce\": 123,\n \"r\": \"<string>\",\n \"s\": \"<string>\",\n \"v\": \"<string>\",\n \"yParity\": 123\n },\n \"callData\": \"<string>\",\n \"callGasLimit\": \"<string>\",\n \"factory\": \"<string>\",\n \"factoryData\": \"<string>\",\n \"maxFeePerGas\": \"<string>\",\n \"maxPriorityFeePerGas\": \"<string>\",\n \"nonce\": \"<string>\",\n \"paymaster\": \"<string>\",\n \"paymasterData\": \"<string>\",\n \"paymasterPostOpGasLimit\": \"<string>\",\n \"paymasterVerificationGasLimit\": \"<string>\",\n \"preVerificationGas\": \"<string>\",\n \"sender\": \"<string>\",\n \"signature\": \"<string>\",\n \"verificationGasLimit\": \"<string>\"\n }\n },\n \"evmMessage\": \"<string>\",\n \"svmMessage\": \"<string>\",\n \"suiMessage\": \"<string>\",\n \"stellarMessage\": \"<string>\",\n \"aleoMessage\": \"<string>\",\n \"domain\": \"https://app.xyz.com\"\n }\n}"
response = http.request(request)
puts response.read_body{
"proposalId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"intent": {
"intentId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountId": "95b11417-f18f-457f-8804-68e361f9164f",
"accountAddress": "0xbF394748301603f18d953C90F0b087CBEC0E1834",
"actionType": "waasSigningQuorumApprove",
"initiatorUserId": "95b11417-f18f-457f-8804-68e361f9164f",
"createdAt": "<string>",
"operation": {
"kind": "<string>",
"chainName": "<string>",
"message": "<string>",
"payload": "<string>"
},
"completeBy": "<string>",
"limits": {
"maxGas": "<string>",
"maxFeePerGas": "<string>",
"maxPriorityFeePerGas": "<string>",
"maxTotalFee": "<string>"
},
"lifetime": {
"refreshable": "blockhash"
}
},
"approvalRequirement": {
"requirementId": "<string>",
"required": 123,
"approved": 123,
"satisfied": true,
"unmetMandatoryRoles": [
"<string>"
],
"eligibleApproverRoles": [
"<string>"
],
"mandatoryApproverRoles": [
"<string>"
]
}
}{
"error": "<string>",
"code": "exchange_currency_unsupported"
}{
"error": "No jwt provided!"
}{
"error": "Not Found",
"code": "not_found"
}{
"error": "Conflict: invalid state transition"
}{
"error": "Resources already exists for this Object",
"code": "email_cannot_be_null",
"payload": {
"email": "joe@email.com",
"loginProvider": "emailOnly",
"embeddedWalletName": "<string>",
"embeddedSocialSigninProvider": "emailOnly",
"mergeConflicts": {
"fromUser": {
"id": "95b11417-f18f-457f-8804-68e361f9164f",
"projectEnvironmentId": "95b11417-f18f-457f-8804-68e361f9164f",
"verifiedCredentials": [
{
"id": "95b11417-f18f-457f-8804-68e361f9164f-zerodev",
"format": "blockchain",
"signInEnabled": true,
"address": "0xbF394748301603f18d953C90F0b087CBEC0E1834",
"chain": "<string>",
"refId": "95b11417-f18f-457f-8804-68e361f9164f",
"signerRefId": "95b11417-f18f-457f-8804-68e361f9164f",
"email": "jsmith@example.com",
"name_service": {
"avatar": "<string>",
"name": "<string>"
},
"public_identifier": "<string>",
"wallet_name": "<string>",
"wallet_provider": "browserExtension",
"wallet_properties": {
"turnkeySubOrganizationId": "95b11417-f18f-457f-8804-68e361f9164f",
"turnkeyPrivateKeyId": "95b11417-f18f-457f-8804-68e361f9164f",
"turnkeyHDWalletId": "95b11417-f18f-457f-8804-68e361f9164f",
"isAuthenticatorAttached": true,
"turnkeyUserId": "95b11417-f18f-457f-8804-68e361f9164f",
"isSessionKeyCompatible": true,
"version": "V1",
"ecdsaProviderType": "zerodev_signer_to_ecdsa",
"entryPointVersion": "v6",
"kernelVersion": "v2_4"
},
"business_account_properties": {
"businessAccountId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountCreatedAt": "2023-11-07T05:31:56Z",
"businessAccountSignerId": "95b11417-f18f-457f-8804-68e361f9164f",
"businessAccountSignerType": "endUser",
"businessAccountMemberRole": "cfo",
"businessAccountName": "<string>",
"businessAccountExternalRef": "<string>"
},
"oauth_provider": "emailOnly",
"oauth_username": "<string>",
"oauth_display_name": "<string>",
"oauth_account_id": "<string>",
"phoneNumber": "9171113333",
"phoneCountryCode": "1",
"isoCountryCode": "US",
"oauth_account_photos": [
"<string>"
],
"oauth_emails": [
"<string>"
],
"oauth_metadata": {},
"previous_users": [
"95b11417-f18f-457f-8804-68e361f9164f"
],
"embedded_wallet_id": "<string>",
"wallet_additional_addresses": [
{
"address": "<string>",
"type": "ordinals",
"publicKey": "<string>",
"network": "<string>"
}
],
"lastSelectedAt": "2023-11-07T05:31:56Z",
"verifiedAt": "2023-11-07T05:31:56Z"
}
],
"lastVerifiedCredentialId": "95b11417-f18f-457f-8804-68e361f9164f-zerodev",
"sessionId": "95b11417-f18f-457f-8804-68e361f9164f",
"alias": "An example name",
"country": "US",
"email": "jsmith@example.com",
"firstName": "An example name",
"jobTitle": "An example name",
"lastName": "An example name",
"phoneNumber": "<string>",
"policiesConsent": true,
"tShirtSize": "An example name",
"team": "An example name",
"username": "An example name",
"firstVisit": "2023-11-07T05:31:56Z",
"lastVisit": "2023-11-07T05:31:56Z",
"newUser": true,
"metadata": {},
"mfaBackupCodeAcknowledgement": "pending",
"btcWallet": "<string>",
"kdaWallet": "<string>",
"ltcWallet": "<string>",
"ckbWallet": "<string>",
"kasWallet": "<string>",
"dogeWallet": "<string>",
"emailNotification": true,
"discordNotification": true,
"newsletterNotification": true,
"lists": [
"<string>"
],
"scope": "superuser marketing operations",
"missingFields": [
{
"name": "<string>",
"required": true,
"enabled": true,
"unique": true,
"verify": true,
"type": "standard",
"validationRules": {
"unique": true,
"regex": "^0x",
"validOptions": [
{
"label": "small"
},
{
"label": "medium"
},
{
"label": "large"
}
],
"checkboxText": "Agree to the terms and conditions"
},
"validationType": "text",
"label": "<string>",
"position": 123
}
]
},
"conflicts": [
{
"field": {
"name": "<string>",
"required": true,
"enabled": true,
"unique": true,
"verify": true,
"type": "standard",
"validationRules": {
"unique": true,
"regex": "^0x",
"validOptions": [
{
"label": "small"
},
{
"label": "medium"
},
{
"label": "large"
}
],
"checkboxText": "Agree to the terms and conditions"
},
"validationType": "text",
"label": "<string>",
"position": 123
},
"fromUser": {
"userId": "95b11417-f18f-457f-8804-68e361f9164f",
"value": "An example name"
},
"currentUser": {
"userId": "95b11417-f18f-457f-8804-68e361f9164f",
"value": "An example name"
}
}
]
},
"intent": {},
"additionalMessages": [
"<string>"
]
},
"retryAfterSeconds": 600
}{
"error": "Internal Server Error"
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
ID of the environment
36^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"95b11417-f18f-457f-8804-68e361f9164f"
ID of the business account
36^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"95b11417-f18f-457f-8804-68e361f9164f"
36^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"95b11417-f18f-457f-8804-68e361f9164f"
Body
SDK proposeSigning body. message, context and chain describe the operation being proposed — the same fields the eventual signMessage call carries — while approvalQuorum holds the caller-signed intent over it.
A string with a max length of 204800 characters
204800EVM, MIDNIGHT, SVM, SUI, BTC, TON, STELLAR, TEMPO, ALEO, TRON The Initiator's own signed Intent over the operation being proposed — the same bundle a governed sign carries in approvalQuorum, except proposing always needs the signature: there is no stored proposal to redeem yet. initiatorProof is issued server-side while the caller's token is live and is never sent by the client.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Response
The opened proposal and what its approvals still need
The signMessage proposal opened for the proposed intent — or the identical open one a retry found — with the requirement its approvals must satisfy. intent is the stored signed intent verbatim: approvers sign THESE bytes, never a re-derived copy.
The proposal collecting approvals.
The client-created signed Intent. The enclave checks its operation against the request's current signing context and MPC message.
Show child attributes
Show child attributes
One signing-quorum requirement as wallet-service reports it, plus the approvals already counted toward it on the proposal. The role fields are absent when wallet-service did not report them — never re-derive them client-side.
Show child attributes
Show child attributes