SDK
Get the environment's settings
Rest API
GlobalWallets
NameServices
- GETGet the name service for the environment and chain
- POSTCreate a new name service for the environment and chain
- DELdelete the name service for the environment and chain
- POSTGet the unsigned chain-specific message needed to be signed by the wallet owner using the wallet private key
- PUTEnable name service for this environment and chain
- PUTDisabled name service for this environment and chain
TestAccount
CustomHostnames
Exports
Gates
Settings
Organizations
Projects
Custom Networks
Chainalysis
Environments
Sessions
Wallets
- POSTCreates a new embedded wallet for a user given an identifier
- POSTCreates a new embedded wallet. This API is meant to be called from a frame server.
- GETGet wallets by user (deprecated - use /environments/{environmentId}/users/{userId}/wallets instead)
- POSTCreates a new wallet for the user (deprecated - use /environments/{environmentId}/users/{userId}/wallets instead)
- GETGet wallets by user
- POSTCreates a new wallet for the user. Note that if the user already has an embedded wallet linked, this call will fail.
- GETGet a wallet using the ID (deprecated - use /environments/{environmentId}/wallets/{walletId} instead)
- DELDelete wallet (deprecated - use /environments/{environmentId}/wallets/{walletId} instead)
- GETGet a wallet using the ID
- DELDelete wallet
Users
- GETGet a user by Id (deprecated - use /environments/{environmentId}/users/{userId} instead)
- PUTUpdate a user (deprecated - use /environments/{environmentId}/users/{userId} instead)
- DELDelete user (deprecated - use /environments/{environmentId}/users/{userId} instead)
- GETGet a user by Id
- PUTUpdate a user
- DELDelete user
- GETGet the access token for a user OAuth account
- GETGet all users for an environment
- POSTCreates a new user
- POSTRevoke sessions by user ID
- POSTRevoke sessions by user ID
- POSTCreates many new users
Members
MfaSettings
Invites
Origins
UserApiTokens
Tokens
Allowlists
- GETGet all allowlists for a environment
- POSTCreate new allowlist for a environment
- GETGet allowlist by id
- PUTUpdate the outcome, scope, or name of an allowlist entry by ID
- DELDelete an allowlist
- PUTEnable the allowlist
- PUTDisable the allow list
- GETGet all entries for an allowlist
- POSTCreate a new entry for an allowlist
- DELDelete an allowlist entry
SDK Views
Webhooks
- GETGet the Webhooks for an environment
- POSTCreates a new Webhooks for the project environment
- GETGet the Webhook for an environment
- PUTUpdate the Webhook for an environment
- DELDelete the Webhook for an environment
- GETGet the Messages for an webhook
- GETGet the Message deliveries for a webhook
- POSTRedeliver message for an webhook
SDK
- GETGet exchangerates
- GETCheck user field uniqueness
- POSTInitialize oauth auth sequence
- GETCheck that session is valid
- POSTScan a URL for potential malicious activity
- POSTSimulate a Solana transaction
- POSTSimulate an EVM transaction
- POSTSimulate an EVM AA UserOp
- POSTEndpoint to sign-in using a token issued by an external auth provider
- POSTAdd fees to a Solana transaction
- POST[DEPRECATED] Please use /externalAuth/signin instead
- GETGet auth token for given embedded wallet type
- GETReturn the passcode for the pregenerated embedded wallet of the authenticated user
- PUTUpdate wallet in a multi-wallet selection
- PUTClaim a pregenerated embedded wallet
- GETReturn the backup key for the embedded wallet of the authenticated user
- POSTUpdate V1 embedded wallet to V2
- GETGet sdk healthcheck
- POSTEndpoint to refresh the JWT auth token using the current valid JWT auth token in the authorization header
- GETGet signin email provider
- GETGet redirect URL for Oauth provider login. This will return a string that the SDK can manipulate before redirecting the browser to.
- GETGet redirect URL for Oauth provider login
- GETOauth provider redirect endpoint
- GETRedirect URL for sign-in with coinbase
- POSTOauth provider redirect endpoint for apple ID
- GETOauth provider authorization endpoint
- POSTOauth provider verify endpoint
- POSTFarcaster provider SignIn endpoint
- POSTFarcaster provider Verify endpoint
- POSTOauth provider SignIn endpoint
- POSTReturns the authorization code or error retuned by oauth provider
- GETCreate nonce for authentication flow
- POSTPublish events for SDK
- GETGet the environment's settings
- POSTUpdate SDK settings for a specific environment
- POSTLink wallet to user
- POSTMerge users with conflict resolutions
- POSTVerify wallet transfer
- POSTRevoke a session
- POSTunlink wallet from user
- POSTprefetch information for wallet address
- POSTCreate a visit
- POSTVerify payload and return JWT
- GETFetch user profile for the current authenticated user
- PUTUpdate a user's fields
- DELHard delete a user
- PUTUpdate a user's Turnkey recovery email
- GETGets passkey data associated with a user
- PUTUpdate a passkey's info
- GETGet the current user's MFA Devices
- GETGet the current user's MFA by device id
- PUTUpdate a device
- DELDelete a device (if not default device)
- GETRegister a new TOTP MFA device and get Totp Secret
- POSTVerify TOTP MFA device
- POSTUpgrade JWT scope with valid MFA session
- GETRegister a new Passkey MFA device
- POSTVerify Passkey MFA device
- GETAuth Passkey MFA device
- POSTUpgrade JWT scope with valid MFA session
- POSTUpgrade JWT scope with valid MFA session
- GETGet recovery codes
- POSTGenerate new recovery codes for user
- POSTAfter successful verification allow to merge two owned accounts
- POSTCreate one or more new embedded wallets for a user
- DELDeletes the embedded wallets for a user
- GETGenerates the turnkey request body for a user's delete wallets request
- POSTAdd a wallet account to a user's existing Turnkey HD wallet
- GETGenerates the turnkey request body for a user's create wallet account request
- POSTInitialize the email authentication process for a user's embedded wallet
- PUTCompletes the passkey recovery process for a user's passkey embedded wallet
- POSTInitialize the passkey recovery process for a user's passkey embedded wallet
- POSTRegisters a session key for an embedded wallet
- GETRequests an export of an embedded wallet
- GETFind the configuration for the enabled networks associated to an environment
- GETConfiguration for enabled onramps
- POSTInitialize email verification process
- POSTInitialize sms verification process
- POSTSend new code for sms verification
- POSTVerify sms verification request
- POSTVerify an sms and sign in user
- POSTVerify email verification request
- POSTVerify an email and sign in user
- POSTSend new code for email verification
- GETFind jwks for public key
- GETGet sdk exchangerates
- GETGet the token balances for an account
- GETGet HTML with rendered Telegram login widget
- POSTHandle Telegram authentication
- POSTTelegram provider SignIn endpoint
- POSTTelegram provider check auth
- POSTTelegram provider Verify endpoint
- POSTCreate a new waas account
- POSTRefresh keyshares
- POSTImport an existing private key to create a waas account
- POSTExport private Key of a waas account
- POSTSign a message with a waas account
- POSTBackup multiple keyShares for a waaS wallet
- POSTBackup multiple keyShares for a waaS wallet to Google Drive
- POSTRecover multiple keyShares
- POSTReshare secret shares and update the threshold
- GETGet the global wallet settings for the environment
- GETGet the access token for a user OAuth account
Custom Fields
DeeplinkUrls
SDK
Get the environment's settings
GET
/
sdk
/
{environmentId}
/
settings
curl --request GET \
--url https://app.dynamicauth.com/api/v0/sdk/{environmentId}/settings
{
"environmentName": "sandbox",
"chains": [
{
"name": "<string>",
"enabled": true,
"networks": [
{
"networkId": "1",
"chainName": "Ethereum Mainnet",
"enabled": true,
"rpcUrl": "<string>",
"iconUrl": "<string>",
"type": "custom"
}
]
}
],
"customFields": [
{
"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
}
],
"kyc": [
{
"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
}
],
"design": {
"modal": {
"border": "<string>",
"brand": "<string>",
"primaryColor": "<string>",
"radius": 123,
"theme": "<string>",
"view": "<string>",
"template": "<string>",
"displayOrder": [
"<string>"
],
"emailOnly": true,
"showWalletsButton": true,
"emailSubmitButtonInsideInput": true,
"splitEmailAndSocial": true,
"socialAboveEmail": true
},
"button": {
"background": "<string>",
"fontColor": "<string>",
"paddingHeight": 123,
"paddingWidth": 123,
"radius": 123
},
"widget": {
"backgroundColor": "<string>",
"border": "<string>",
"radius": 123,
"textColor": "<string>",
"theme": "<string>"
}
},
"general": {
"displayName": "An example name",
"supportEmail": "jsmith@example.com",
"supportText": "<string>",
"appLogo": "<string>",
"imageUserNotInAccessList": "<string>",
"imageUserInAccessList": "<string>",
"supportUrls": {
"slack": "https://dynamic.xyz",
"twitter": "https://dynamic.xyz"
},
"collectUserDataWelcomeHeader": "<string>",
"collectUserDataWelcomeMessage": "<string>",
"skipOptionalKYCFieldDuringOnboarding": true,
"emailCompanyName": "An example name"
},
"privacy": {
"collectIp": true
},
"providers": [
{
"id": "95b11417-f18f-457f-8804-68e361f9164f",
"provider": "emailOnly",
"enabledAt": "2023-11-07T05:31:56Z",
"clientId": "<string>",
"clientSecret": "<string>",
"providerProjectId": "<string>",
"authorizationUrl": "<string>",
"redirectUrl": "<string>",
"defaultChainId": 123,
"defaultChain": "eip155:1",
"keyExportUrl": "<string>",
"termsAcceptedByUser": {
"termsUrl": "<string>",
"email": "jsmith@example.com",
"userId": "95b11417-f18f-457f-8804-68e361f9164f",
"createdAt": "2023-11-07T05:31:56Z"
},
"scopes": "<string>",
"baseAuthUrl": "<string>",
"appleKeyId": "<string>",
"appleTeamId": "<string>",
"shopifyStore": "<string>",
"accountSid": "<string>",
"twilioNumber": "<string>",
"enabledCountries": [
{
"isoCountryCode": "US",
"phoneCountryCode": "An example name"
}
],
"entryPointVersion": "v6",
"kernelVersion": "v2_4",
"multichainAccountAbstractionProviders": [
{
"clientId": "<string>",
"chain": "<string>",
"default": true
}
],
"ecdsaProviderType": "zerodev_signer_to_ecdsa",
"createNewAccounts": true,
"enableKernelV3Migration": true,
"enableEIP7702": true
}
],
"sdk": {
"nameService": {
"evm": {
"domain": "<string>"
}
},
"featureFlags": {
"connectOnlyMultiAsset": true
},
"emailSignIn": {
"signInProvider": "dynamic"
},
"socialSignIn": {
"signInProvider": "dynamic",
"providers": [
{
"provider": "apple",
"enabled": true
}
]
},
"multiWallet": true,
"multiWalletUnlinkDisabled": true,
"mobile": {
"deeplinkUrlsEnabled": true
},
"confirmWalletTransfers": true,
"onrampFunding": true,
"passkeyEmbeddedWalletEnabled": true,
"automaticEmbeddedWalletCreation": true,
"passkeyEmbeddedWalletRecoveryEnabled": true,
"embeddedWalletSecurityMethods": [
"passkey"
],
"embeddedWallets": {
"automaticEmbeddedWalletCreation": true,
"automaticEmbeddedWalletCreationForExternal": true,
"showEmbeddedWalletActionsUI": true,
"emailRecoveryEnabled": true,
"forceAuthenticatorAtSignup": true,
"allowSkippingAuthenticatorAtSignup": true,
"sessionKeyDuration": {
"amount": 123,
"unit": "days"
},
"supportedSecurityMethods": {
"passkey": {
"isDefault": true,
"isEnabled": true,
"isPermanentAuthenticator": true,
"listPosition": 123
},
"email": {
"isDefault": true,
"isEnabled": true,
"isPermanentAuthenticator": true,
"listPosition": 123
},
"password": {
"isDefault": true,
"isEnabled": true,
"isPermanentAuthenticator": true,
"listPosition": 123
}
},
"chainConfigurations": [
{
"name": "<string>",
"enabled": true,
"primary": true
}
],
"domainEnabledByProvider": true,
"defaultWalletVersion": "V1",
"promptForKeyExport": true,
"transactionSimulation": true
},
"waas": {
"passcodeRequired": true,
"onSignUp": {
"promptBackupOptions": true,
"promptClientShareExport": true
},
"backupOptions": [
"googleDrive"
]
},
"walletConnect": {
"projectId": "<string>",
"v2Enabled": true,
"walletProjectId": "<string>"
},
"confirmEmailProviderForVerify": true,
"displayDynamicMessaging": true,
"hideNetworkInDynamicWidget": true,
"preventOrphanedAccounts": true,
"views": [
{
"type": "login",
"sections": [
{
"type": "email",
"label": "<string>",
"numOfItemsToDisplay": 123,
"defaultItem": "<string>",
"alignment": "center"
}
]
}
],
"accountAbstraction": {
"allWallets": true,
"allUsers": true,
"separateSmartWalletAndSigner": true
},
"blockEmailSubaddresses": true,
"enableMultiAsset": true,
"showFiat": true,
"disabledWalletConnectors": [
"metamask"
],
"funding": {
"onramps": [
"banxa"
],
"externalWallets": {
"enabled": true,
"minAmount": {
"amount": "<string>",
"currency": "<string>"
},
"defaultSettings": {
"chainSettings": [
{
"chain": "ETH",
"token": {
"value": "<string>",
"rule": "recommended"
}
}
]
}
}
}
},
"security": {
"jwtDuration": {
"amount": 123,
"unit": "days"
},
"hCaptcha": {
"enabled": true,
"secretKey": "<string>",
"siteKey": "<string>"
},
"mfa": {
"enabled": true,
"required": true,
"availableMethods": [
"totp"
]
},
"auth": {
"storage": [
"localstorage"
]
},
"externalAuth": {
"enabled": true,
"iss": "An example name",
"aud": "An example name",
"jwksUrl": "<string>",
"cookieName": "An example name"
}
},
"networks": [
{
"chainName": "<string>",
"networks": [
{
"lcdUrl": "https://lcd.osmosis.zone",
"chainName": "Ethereum Mainnet",
"key": "ethereum",
"name": "Ethereum Mainnet",
"shortName": "ETH",
"isTestnet": false,
"chain": "ETH",
"chainId": "1",
"nameService": {
"registry": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"
},
"networkId": "1",
"iconUrls": [
"<string>"
],
"nativeCurrency": {
"decimals": "18",
"name": "Ether",
"symbol": "ETH",
"denom": "uatom",
"iconUrl": "<string>",
"pricingProviderTokenId": "<string>"
},
"rpcUrls": [
"https://mainnet.infura.io/v3/"
],
"privateCustomerRpcUrls": [
"https://mainnet.infura.io/v3/"
],
"blockExplorerUrls": [
"https://etherscan.io/"
],
"vanityName": "Ethereum",
"bech32Prefix": "cosmos",
"genesisHash": "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"cluster": "mainnet, devnet, etc"
}
]
}
]
}
Path Parameters
ID of the environment
Required string length:
36
Example:
"95b11417-f18f-457f-8804-68e361f9164f"
Query Parameters
The version of the SDK that is making the request
Response
200
application/json
Project settings response
The response is of type object
.
Was this page helpful?
curl --request GET \
--url https://app.dynamicauth.com/api/v0/sdk/{environmentId}/settings
{
"environmentName": "sandbox",
"chains": [
{
"name": "<string>",
"enabled": true,
"networks": [
{
"networkId": "1",
"chainName": "Ethereum Mainnet",
"enabled": true,
"rpcUrl": "<string>",
"iconUrl": "<string>",
"type": "custom"
}
]
}
],
"customFields": [
{
"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
}
],
"kyc": [
{
"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
}
],
"design": {
"modal": {
"border": "<string>",
"brand": "<string>",
"primaryColor": "<string>",
"radius": 123,
"theme": "<string>",
"view": "<string>",
"template": "<string>",
"displayOrder": [
"<string>"
],
"emailOnly": true,
"showWalletsButton": true,
"emailSubmitButtonInsideInput": true,
"splitEmailAndSocial": true,
"socialAboveEmail": true
},
"button": {
"background": "<string>",
"fontColor": "<string>",
"paddingHeight": 123,
"paddingWidth": 123,
"radius": 123
},
"widget": {
"backgroundColor": "<string>",
"border": "<string>",
"radius": 123,
"textColor": "<string>",
"theme": "<string>"
}
},
"general": {
"displayName": "An example name",
"supportEmail": "jsmith@example.com",
"supportText": "<string>",
"appLogo": "<string>",
"imageUserNotInAccessList": "<string>",
"imageUserInAccessList": "<string>",
"supportUrls": {
"slack": "https://dynamic.xyz",
"twitter": "https://dynamic.xyz"
},
"collectUserDataWelcomeHeader": "<string>",
"collectUserDataWelcomeMessage": "<string>",
"skipOptionalKYCFieldDuringOnboarding": true,
"emailCompanyName": "An example name"
},
"privacy": {
"collectIp": true
},
"providers": [
{
"id": "95b11417-f18f-457f-8804-68e361f9164f",
"provider": "emailOnly",
"enabledAt": "2023-11-07T05:31:56Z",
"clientId": "<string>",
"clientSecret": "<string>",
"providerProjectId": "<string>",
"authorizationUrl": "<string>",
"redirectUrl": "<string>",
"defaultChainId": 123,
"defaultChain": "eip155:1",
"keyExportUrl": "<string>",
"termsAcceptedByUser": {
"termsUrl": "<string>",
"email": "jsmith@example.com",
"userId": "95b11417-f18f-457f-8804-68e361f9164f",
"createdAt": "2023-11-07T05:31:56Z"
},
"scopes": "<string>",
"baseAuthUrl": "<string>",
"appleKeyId": "<string>",
"appleTeamId": "<string>",
"shopifyStore": "<string>",
"accountSid": "<string>",
"twilioNumber": "<string>",
"enabledCountries": [
{
"isoCountryCode": "US",
"phoneCountryCode": "An example name"
}
],
"entryPointVersion": "v6",
"kernelVersion": "v2_4",
"multichainAccountAbstractionProviders": [
{
"clientId": "<string>",
"chain": "<string>",
"default": true
}
],
"ecdsaProviderType": "zerodev_signer_to_ecdsa",
"createNewAccounts": true,
"enableKernelV3Migration": true,
"enableEIP7702": true
}
],
"sdk": {
"nameService": {
"evm": {
"domain": "<string>"
}
},
"featureFlags": {
"connectOnlyMultiAsset": true
},
"emailSignIn": {
"signInProvider": "dynamic"
},
"socialSignIn": {
"signInProvider": "dynamic",
"providers": [
{
"provider": "apple",
"enabled": true
}
]
},
"multiWallet": true,
"multiWalletUnlinkDisabled": true,
"mobile": {
"deeplinkUrlsEnabled": true
},
"confirmWalletTransfers": true,
"onrampFunding": true,
"passkeyEmbeddedWalletEnabled": true,
"automaticEmbeddedWalletCreation": true,
"passkeyEmbeddedWalletRecoveryEnabled": true,
"embeddedWalletSecurityMethods": [
"passkey"
],
"embeddedWallets": {
"automaticEmbeddedWalletCreation": true,
"automaticEmbeddedWalletCreationForExternal": true,
"showEmbeddedWalletActionsUI": true,
"emailRecoveryEnabled": true,
"forceAuthenticatorAtSignup": true,
"allowSkippingAuthenticatorAtSignup": true,
"sessionKeyDuration": {
"amount": 123,
"unit": "days"
},
"supportedSecurityMethods": {
"passkey": {
"isDefault": true,
"isEnabled": true,
"isPermanentAuthenticator": true,
"listPosition": 123
},
"email": {
"isDefault": true,
"isEnabled": true,
"isPermanentAuthenticator": true,
"listPosition": 123
},
"password": {
"isDefault": true,
"isEnabled": true,
"isPermanentAuthenticator": true,
"listPosition": 123
}
},
"chainConfigurations": [
{
"name": "<string>",
"enabled": true,
"primary": true
}
],
"domainEnabledByProvider": true,
"defaultWalletVersion": "V1",
"promptForKeyExport": true,
"transactionSimulation": true
},
"waas": {
"passcodeRequired": true,
"onSignUp": {
"promptBackupOptions": true,
"promptClientShareExport": true
},
"backupOptions": [
"googleDrive"
]
},
"walletConnect": {
"projectId": "<string>",
"v2Enabled": true,
"walletProjectId": "<string>"
},
"confirmEmailProviderForVerify": true,
"displayDynamicMessaging": true,
"hideNetworkInDynamicWidget": true,
"preventOrphanedAccounts": true,
"views": [
{
"type": "login",
"sections": [
{
"type": "email",
"label": "<string>",
"numOfItemsToDisplay": 123,
"defaultItem": "<string>",
"alignment": "center"
}
]
}
],
"accountAbstraction": {
"allWallets": true,
"allUsers": true,
"separateSmartWalletAndSigner": true
},
"blockEmailSubaddresses": true,
"enableMultiAsset": true,
"showFiat": true,
"disabledWalletConnectors": [
"metamask"
],
"funding": {
"onramps": [
"banxa"
],
"externalWallets": {
"enabled": true,
"minAmount": {
"amount": "<string>",
"currency": "<string>"
},
"defaultSettings": {
"chainSettings": [
{
"chain": "ETH",
"token": {
"value": "<string>",
"rule": "recommended"
}
}
]
}
}
}
},
"security": {
"jwtDuration": {
"amount": 123,
"unit": "days"
},
"hCaptcha": {
"enabled": true,
"secretKey": "<string>",
"siteKey": "<string>"
},
"mfa": {
"enabled": true,
"required": true,
"availableMethods": [
"totp"
]
},
"auth": {
"storage": [
"localstorage"
]
},
"externalAuth": {
"enabled": true,
"iss": "An example name",
"aud": "An example name",
"jwksUrl": "<string>",
"cookieName": "An example name"
}
},
"networks": [
{
"chainName": "<string>",
"networks": [
{
"lcdUrl": "https://lcd.osmosis.zone",
"chainName": "Ethereum Mainnet",
"key": "ethereum",
"name": "Ethereum Mainnet",
"shortName": "ETH",
"isTestnet": false,
"chain": "ETH",
"chainId": "1",
"nameService": {
"registry": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"
},
"networkId": "1",
"iconUrls": [
"<string>"
],
"nativeCurrency": {
"decimals": "18",
"name": "Ether",
"symbol": "ETH",
"denom": "uatom",
"iconUrl": "<string>",
"pricingProviderTokenId": "<string>"
},
"rpcUrls": [
"https://mainnet.infura.io/v3/"
],
"privateCustomerRpcUrls": [
"https://mainnet.infura.io/v3/"
],
"blockExplorerUrls": [
"https://etherscan.io/"
],
"vanityName": "Ethereum",
"bech32Prefix": "cosmos",
"genesisHash": "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"cluster": "mainnet, devnet, etc"
}
]
}
]
}