openapi: 3.0.1 info: title: Dashboard Allowlists Users API description: Dashboard API documentation version: 1.0.0 servers: - url: https://app.dynamicauth.com/api/v0 - url: https://app.dynamic.xyz/api/v0 - url: http://localhost:3333/api/v0 tags: - name: Users paths: /users/{userId}: put: deprecated: true operationId: updateUserLegacy tags: - Users summary: Update a user (deprecated - use /environments/{environmentId}/users/{userId} instead) parameters: - $ref: '#/components/parameters/userId' requestBody: description: User new fields data content: application/json: schema: $ref: '#/components/schemas/InternalUpdatableUserFields' required: true responses: '200': description: Successful response of a user content: application/json: schema: $ref: '#/components/schemas/UserResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] get: deprecated: true operationId: getUserLegacy tags: - Users summary: Get a user by Id (deprecated - use /environments/{environmentId}/users/{userId} instead) parameters: - $ref: '#/components/parameters/userId' responses: '200': description: Successful response of a user content: application/json: schema: $ref: '#/components/schemas/UserResponse' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': description: Not found '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] delete: deprecated: true operationId: deleteUserLegacy tags: - Users summary: Delete user (deprecated - use /environments/{environmentId}/users/{userId} instead) parameters: - $ref: '#/components/parameters/userId' responses: '204': description: successful operation '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': description: Not found '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] /environments/{environmentId}/users/{userId}: put: operationId: updateUser tags: - Users summary: Update a user parameters: - $ref: '#/components/parameters/environmentId' - $ref: '#/components/parameters/userId' requestBody: description: User new fields data content: application/json: schema: $ref: '#/components/schemas/InternalUpdatableUserFields' required: true responses: '200': description: Successful response of a user content: application/json: schema: $ref: '#/components/schemas/UserResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] get: operationId: getUser tags: - Users summary: Get a user by Id parameters: - $ref: '#/components/parameters/environmentId' - $ref: '#/components/parameters/userId' responses: '200': description: Successful response of a user content: application/json: schema: $ref: '#/components/schemas/UserResponse' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': description: Not found '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] delete: operationId: deleteUser tags: - Users summary: Delete user parameters: - $ref: '#/components/parameters/environmentId' - $ref: '#/components/parameters/userId' responses: '204': description: successful operation '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': description: Not found '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] /oauthAccounts/{oauthAccountId}/accessToken: get: operationId: getUserOauthAccessToken tags: - Users summary: Get the access token for a user OAuth account parameters: - $ref: '#/components/parameters/oauthAccountId' responses: '200': description: Successful response content: application/json: schema: $ref: '#/components/schemas/UserOauthAccessTokenResponse' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': description: Not found '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] /environments/{environmentId}/users: post: operationId: createUser summary: Creates a new user tags: - Users parameters: - $ref: '#/components/parameters/environmentId' requestBody: description: User new fields data content: application/json: schema: $ref: '#/components/schemas/InternalBulkUpdateUserFields' required: true responses: '201': description: Successfully created new user content: application/json: schema: $ref: '#/components/schemas/UserResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] get: operationId: getEnvironmentUsers tags: - Users summary: Get all users for an environment parameters: - $ref: '#/components/parameters/environmentId' - in: query name: filter required: false style: form schema: $ref: '#/components/schemas/UserSearchFilterParams' - in: query name: orderBy required: false schema: $ref: '#/components/schemas/orderBy' - in: query name: offset schema: type: integer minimum: 0 default: 0 description: The number of items to skip before starting to collect the result set required: false - in: query name: limit schema: type: integer minimum: 1 maximum: 100 default: 20 description: The numbers of items to return required: false - in: query name: includeSessions required: false schema: type: boolean description: When true, we will return the most recent list of sessions for each user in the list. responses: '200': description: List of users content: application/json: schema: $ref: '#/components/schemas/UsersResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] /users/{userId}/sessions/revoke: post: deprecated: true operationId: revokeUserSessionsLegacy description: This endpoint is deprecated. Use /environments/{environmentId}/users/{userId}/sessions/revoke instead. summary: Revoke sessions by user ID tags: - Users parameters: - $ref: '#/components/parameters/userId' responses: '204': description: Successful empty response '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/ForbiddenWithErrorAndPayload' '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] /environments/{environmentId}/users/{userId}/sessions/revoke: post: operationId: revokeUserSessions summary: Revoke sessions by user ID tags: - Users parameters: - $ref: '#/components/parameters/environmentId' - $ref: '#/components/parameters/userId' responses: '204': description: Successful empty response '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/ForbiddenWithErrorAndPayload' '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] /environments/{environmentId}/users/{userId}/sessions: get: operationId: getUserSessions summary: Get all sessions for a user by user ID tags: - Users parameters: - $ref: '#/components/parameters/environmentId' - $ref: '#/components/parameters/userId' - in: query name: limit schema: type: integer minimum: 1 maximum: 100 default: 100 description: The number of sessions to return required: false - in: query name: offset schema: type: integer minimum: 0 default: 0 description: The number of sessions to skip before starting to collect the result set required: false - in: query name: revoked schema: type: boolean description: Filter sessions by revoked status. If true, only revoked sessions are returned. If false, only non-revoked sessions are returned. If not provided, all sessions are returned. required: false responses: '200': description: Successful response with list of sessions content: application/json: schema: $ref: '#/components/schemas/SessionsResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/ForbiddenWithErrorAndPayload' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] /environments/{environmentId}/users/bulk: post: operationId: bulkCreateUser summary: Creates many new users tags: - Users parameters: - $ref: '#/components/parameters/environmentId' - name: upsert in: query required: false description: Update user data if user already exists schema: type: boolean requestBody: description: User new fields data content: application/json: schema: type: array items: $ref: '#/components/schemas/InternalUserFields' minItems: 1 maxItems: 50 required: true responses: '201': description: Successfully completed bulk user request content: application/json: schema: $ref: '#/components/schemas/BulkUserCreateResponse' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '422': $ref: '#/components/responses/UnprocessableEntity' '500': $ref: '#/components/responses/InternalServerError' security: - bearerAuth: [] components: schemas: UserOauthAccessTokenResponse: type: object required: - accessToken properties: accessToken: type: string UnprocessableEntity: type: object properties: error: type: string example: Resources already exists for this Object code: $ref: '#/components/schemas/UnprocessableEntityErrorCode' payload: $ref: '#/components/schemas/UnprocessableEntityErrorPayload' required: - error ProjectSettingsKyc: type: object properties: name: type: string required: type: boolean enabled: type: boolean unique: type: boolean verify: type: boolean type: $ref: '#/components/schemas/KycFieldType' validationRules: $ref: '#/components/schemas/CustomFieldValidationRules' validationType: $ref: '#/components/schemas/CustomFieldType' label: type: string position: type: number required: - name - required - enabled - unique - verify ThresholdSignatureScheme: type: string enum: - TWO_OF_TWO - TWO_OF_THREE - THREE_OF_FIVE OptionalNullableNonEmptyStringWith255MaxLength: type: string pattern: ^$|^(?=\S)[\p{L}\p{N} _.,:!?&%@\/+-]+(?<=\S)$ example: An example name nullable: true maxLength: 255 ChainalysisCheck: type: object properties: id: $ref: '#/components/schemas/uuid' createdAt: type: string format: date-time result: $ref: '#/components/schemas/ChainalysisCheckResultEnum' walletPublicKey: $ref: '#/components/schemas/WalletPublicKey' response: type: string required: - id - createdAt - result - walletPublicKey - response NotFound: type: object required: - error - code properties: error: type: string example: Not Found code: type: string example: not_found WaasWalletSettings: type: object properties: hasDeniedDelegatedAccess: type: boolean shouldRefreshOnNextSignOn: type: boolean reshareOnNextSignOn: $ref: '#/components/schemas/ThresholdSignatureScheme' revokeOnNextSignOn: type: boolean InternalUserFields: allOf: - $ref: '#/components/schemas/InternalUpdatableUserFields' - type: object properties: emailVerifiedAt: type: string format: date-time description: When provided, the user email will be marked as verified in our system and the user will be allowed to sign in with that email. When social is enabled and the social provider has a verified email, we will automatically associate that social with the existing user. email: $ref: '#/components/schemas/updatableEmailOrEmptyString' wallets: type: array items: $ref: '#/components/schemas/CreateWalletRequest' oauthAccounts: type: array items: $ref: '#/components/schemas/CreateUserOauthRequest' emailOrEmptyString: type: string pattern: ^$|(^([!#-'*+\/-9=?A-Z^-~-]+(\.[!#-'*+\/-9=?A-Z^-~-]+)*|"([]!#-[^-~ \t]|([\t -~]))+")@([!#-'*+\/-9=?A-Z^-~-]+(\.[!#-'*+\/-9=?A-Z^-~-]+)*|[\t -Z^-~]*)$) example: hello-world@foobar.com maxLength: 255 WalletKeyShareInfo: type: object required: - id - backupLocation - passwordEncrypted properties: id: $ref: '#/components/schemas/uuid' backupLocation: type: string passwordEncrypted: type: boolean externalKeyShareId: $ref: '#/components/schemas/uuid' User: allOf: - $ref: '#/components/schemas/BaseUser' - type: object properties: walletPublicKey: type: string wallet: type: string chain: $ref: '#/components/schemas/ChainEnum' createdAt: type: string format: date-time updatedAt: type: string format: date-time sessions: type: array items: $ref: '#/components/schemas/Session' wallets: type: array items: $ref: '#/components/schemas/Wallet' chainalysisChecks: type: array items: $ref: '#/components/schemas/ChainalysisCheck' oauthAccounts: type: array items: $ref: '#/components/schemas/oAuthAccount' mfaDevices: type: array items: $ref: '#/components/schemas/MFADevice' ecdsaValidatorOptions: type: string enum: - zerodev_signer_to_ecdsa - zerodev_multi_chain UnprocessableEntityErrorPayload: type: object description: Contains information which the integrating client of this API can use to tailor an experience to a customer to fix the underlying issue that triggered this error. properties: email: type: string format: email example: joe@email.com loginProvider: $ref: '#/components/schemas/ProviderEnum' embeddedWalletName: type: string embeddedSocialSigninProvider: $ref: '#/components/schemas/ProviderEnum' mergeConflicts: $ref: '#/components/schemas/MergeConflicts' additionalMessages: type: array items: type: string JwtVerifiedCredentialFormatEnum: type: string enum: - blockchain - email - oauth - passkey - phoneNumber - externalUser MergeUserConflict: type: object description: Contains a merge conflict between two users with different values for the same user field data required: - field - fromUser - currentUser properties: field: $ref: '#/components/schemas/ProjectSettingsKyc' fromUser: $ref: '#/components/schemas/MergeUser' currentUser: $ref: '#/components/schemas/MergeUser' UserSearchFilterParams: type: object properties: filterValue: type: string filterColumn: $ref: '#/components/schemas/UserFilterableFieldsEnum' filterSocialProvider: $ref: '#/components/schemas/ProviderEnum' chain: $ref: '#/components/schemas/ChainEnum' CreateUserOauthRequest: type: object required: - provider - accountId properties: provider: $ref: '#/components/schemas/ProviderEnum' accountId: $ref: '#/components/schemas/NonEmptyStringWith255MaxLength' emails: type: array items: $ref: '#/components/schemas/emailOrEmptyString' displayName: $ref: '#/components/schemas/OptionalNonEmptyStringWith255MaxLength' username: $ref: '#/components/schemas/OptionalNonEmptyStringWith255MaxLength' photos: type: array items: type: string profile: type: object ForbiddenWithErrorAndPayload: type: object properties: error: $ref: '#/components/schemas/ErrorMessageWithCode' payload: $ref: '#/components/schemas/ForbiddenErrorPayload' BulkUserCreateResponse: type: object properties: created: type: array items: $ref: '#/components/schemas/User' updated: type: array items: $ref: '#/components/schemas/User' failed: type: array items: type: object properties: user: $ref: '#/components/schemas/User' error: type: string example: Resources already exists for this Object code: $ref: '#/components/schemas/UnprocessableEntityErrorCode' total: type: integer UserResponse: type: object properties: user: $ref: '#/components/schemas/User' UserFilterableFieldsEnum: type: string enum: - all - id - walletPublicKey - email - alias - firstName - lastName - phoneNumber - jobTitle - wallet - username - accountId InternalServerError: type: object properties: error: type: string example: Internal Server Error oAuthAccount: type: object properties: id: $ref: '#/components/schemas/uuid' provider: $ref: '#/components/schemas/ProviderEnum' accountUsername: type: string btcWalletString: type: string description: BTC wallet address pattern: ^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,59}$ example: 3FZbgi29cpjq2GjdwV8eyHuJJnkLtktZc5 nullable: true ProviderEnum: type: string description: The 'turnkey' value is deprecated and will be removed in a future version. enum: - emailOnly - magicLink - apple - bitbucket - coinbasesocial - discord - epicgames - facebook - farcaster - github - gitlab - google - instagram - linkedin - microsoft - twitch - twitter - blocto - banxa - coinbaseOnramp - cryptoDotCom - dynamic - alchemy - zerodev - telegram - turnkey - coinbaseWaas - sms - spotify - tiktok - line - steam - shopify - zksync - kraken - blockaid - passkey - okta - sendgrid - resend MfaBackupCodeAcknowledgement: type: string nullable: true enum: - pending - complete KycFieldType: type: string enum: - standard - custom NameServiceData: type: object properties: avatar: type: string name: type: string ltcWalletString: type: string description: LTC wallet address pattern: ^[LM3][a-km-zA-HJ-NP-Z1-9]{26,53}$ example: LUttH43tQ4x4qniCKr1Rqo8ESeXFPdv9ax nullable: true InternalUpdatableUserFields: type: object description: User fields that can be updated on dashboard or through the rest API which do not involve any uniqueness checks or further verification properties: alias: $ref: '#/components/schemas/OptionalNonEmptyStringWith255MaxLength' firstName: $ref: '#/components/schemas/OptionalNonEmptyStringWith255MaxLength' lastName: $ref: '#/components/schemas/OptionalNonEmptyStringWith255MaxLength' jobTitle: $ref: '#/components/schemas/OptionalNonEmptyStringWith255MaxLength' phoneNumber: $ref: '#/components/schemas/OptionalNonEmptyStringWith255MaxLength' metadata: type: object mfaBackupCodeAcknowledgement: $ref: '#/components/schemas/MfaBackupCodeAcknowledgement' tShirtSize: $ref: '#/components/schemas/OptionalNonEmptyStringWith255MaxLength' team: $ref: '#/components/schemas/OptionalNonEmptyStringWith255MaxLength' policiesConsent: type: boolean country: $ref: '#/components/schemas/CountryCode' username: $ref: '#/components/schemas/Username' btcWallet: $ref: '#/components/schemas/btcWalletString' kdaWallet: $ref: '#/components/schemas/kdaWalletString' ltcWallet: $ref: '#/components/schemas/ltcWalletString' ckbWallet: $ref: '#/components/schemas/ckbWalletString' kasWallet: $ref: '#/components/schemas/kasWalletString' dogeWallet: $ref: '#/components/schemas/dogeWalletString' emailNotification: type: boolean discordNotification: type: boolean newsletterNotification: type: boolean MergeConflicts: type: object description: Contains information needed for the SDK to surface merge conflicts when attempting to merge information from one user to another required: - fromUser - conflicts properties: fromUser: $ref: '#/components/schemas/SdkUser' conflicts: type: array items: $ref: '#/components/schemas/MergeUserConflict' InternalBulkUpdateUserFields: allOf: - $ref: '#/components/schemas/InternalUpdatableUserFields' - type: object properties: id: $ref: '#/components/schemas/uuid' emailVerifiedAt: type: string format: date-time description: When provided, the user email will be marked as verified in our system and the user will be allowed to sign in with that email. When social is enabled and the social provider has a verified email, we will automatically associate that social with the existing user. email: $ref: '#/components/schemas/updatableEmailOrEmptyString' wallets: type: array items: $ref: '#/components/schemas/CreateWalletRequest' oauthAccounts: type: array items: $ref: '#/components/schemas/CreateUserOauthRequest' WalletProperties: anyOf: - $ref: '#/components/schemas/TurnkeyWalletProperties' - $ref: '#/components/schemas/HardwareWalletProperties' - $ref: '#/components/schemas/CoinbaseMpcWalletProperties' - $ref: '#/components/schemas/SmartWalletProperties' - $ref: '#/components/schemas/WaasWalletProperties' MFADevice: type: object properties: type: $ref: '#/components/schemas/MFADeviceType' verified: type: boolean description: Whether or not the user has a verified this MFA Device id: $ref: '#/components/schemas/uuid' createdAt: type: string format: date-time description: The date and time the MFA device was created verifiedAt: type: string format: date-time description: The date and time the MFA device was verified nullable: true default: type: boolean description: Whether or not this is the default MFA device for the user alias: type: string description: The optional alias for the MFA device NonEmptyStringWith255MaxLengthAndSpecialChars: type: string pattern: ^(?=\S)[\p{L}\p{N}a-zA-Z _.,:!?&%@\/+\-'()\[\]*]+(?<=\S)$ maxLength: 255 example: An example name EmbeddedWalletVersionEnum: type: string enum: - V1 - V2 - V3 CountryCode: type: string nullable: true description: Standard ISO 3166-1 alpha-2 two-letter country code pattern: ^[A-Z]{2}$ example: US maxLength: 255 CoinbaseMpcWalletProperties: type: object properties: claimed: type: boolean description: Dynamic pregenerated this wallet and stored the passcode source: $ref: '#/components/schemas/PasswordSourceTypeEnum' Username: type: string nullable: true description: Alphanumeric with slugs and underscores username pattern: ^$|^[\p{L}\p{N}_-]{3,20}$ example: johndoe maxLength: 255 ckbWalletString: type: string description: CKB wallet address pattern: ^(ckb1q|ckt1q)[0-9a-z]{25,111}$ example: ckt1q9876543210abcdefghijklmnopqrstuvwxyz nullable: true CreateWalletRequest: required: - publicWalletAddress - chain - walletName - walletProvider type: object properties: publicWalletAddress: $ref: '#/components/schemas/WalletPublicKey' chain: $ref: '#/components/schemas/ChainEnum' walletName: $ref: '#/components/schemas/NonEmptyStringWith255MaxLength' walletProvider: $ref: '#/components/schemas/WalletProviderEnum' additionalWalletAddresses: type: array items: $ref: '#/components/schemas/WalletAdditionalAddress' Unauthorized: type: object properties: error: type: string example: No jwt provided! dogeWalletString: type: string description: DOGE wallet address pattern: ^D[a-zA-Z0-9_.-]{33}$ example: DPcy35vmuk8GXcfu1vgFFEeij3BuYYJQKB nullable: true SmartWalletProperties: type: object properties: entryPointVersion: $ref: '#/components/schemas/ProviderEntryPointVersionEnum' kernelVersion: $ref: '#/components/schemas/ProviderKernelVersionEnum' ecdsaProviderType: $ref: '#/components/schemas/ecdsaValidatorOptions' ChainEnum: type: string enum: - ETH - EVM - FLOW - SOL - ALGO - STARK - COSMOS - BTC - ECLIPSE - SUI - SPARK - TRON - APTOS - TON - STELLAR UsersResponse: type: object properties: count: type: integer users: type: array items: $ref: '#/components/schemas/User' ForbiddenErrorPayload: type: object properties: walletPublicKey: $ref: '#/components/schemas/WalletPublicKey' email: type: string format: email updatableEmailOrEmptyString: type: string description: If email is trusted and verified, please provide a emailVerifiedAt timestamp. This will ensure that a user signing in with this email can access the correctly-created user account. pattern: ^$|(^([!#-'*+\/-9=?A-Z^-~-]+(\.[!#-'*+\/-9=?A-Z^-~-]+)*|"([]!#-[^-~ \t]|([\t -~]))+")@([!#-'*+\/-9=?A-Z^-~-]+(\.[!#-'*+\/-9=?A-Z^-~-]+)*|[\t -Z^-~]*)$) example: hello-world@foobar.com maxLength: 255 PasswordSourceTypeEnum: type: string enum: - dynamic - user WalletAdditionalAddress: type: object description: An additional address associated with a wallet. required: - address - type properties: address: type: string description: An address associated with a wallet. publicKey: type: string description: The public key associated with the address. type: $ref: '#/components/schemas/WalletAddressType' SessionsResponse: type: object required: - sessions properties: sessions: type: array items: $ref: '#/components/schemas/Session' HardwareWalletEnum: type: string enum: - ledger SdkUser: allOf: - $ref: '#/components/schemas/BaseUser' - type: object required: - verifiedCredentials MFADeviceType: type: string enum: - totp - passkey - email TurnkeyWalletProperties: deprecated: true type: object properties: turnkeySubOrganizationId: allOf: - $ref: '#/components/schemas/uuid' deprecated: true turnkeyPrivateKeyId: allOf: - $ref: '#/components/schemas/uuid' deprecated: true turnkeyHDWalletId: allOf: - $ref: '#/components/schemas/uuid' deprecated: true isAuthenticatorAttached: type: boolean description: Whether or not the wallet has an authenticator (passkey, api key, etc) attached to it. turnkeyUserId: allOf: - $ref: '#/components/schemas/uuid' deprecated: true isSessionKeyCompatible: type: boolean version: $ref: '#/components/schemas/EmbeddedWalletVersionEnum' ecdsaProviderType: $ref: '#/components/schemas/ecdsaValidatorOptions' entryPointVersion: $ref: '#/components/schemas/ProviderEntryPointVersionEnum' kernelVersion: $ref: '#/components/schemas/ProviderKernelVersionEnum' Forbidden: type: object properties: error: type: string example: Access Forbidden kasWalletString: type: string description: KAS wallet address pattern: ^kaspa:[1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz]{56,}$ example: kaspa:qrelgny7sr3vahq69yykxx36m65gvmhryxrlwngfzgu8xkdslum2yxjp3ap8m nullable: true MergeUser: type: object description: Contains the current field value for the user. required: - userId - value properties: userId: $ref: '#/components/schemas/uuid' value: $ref: '#/components/schemas/NonEmptyStringWith255MaxLength' Session: type: object properties: id: $ref: '#/components/schemas/uuid' createdAt: type: string format: date-time ipAddress: type: string nullable: true userAgent: type: string nullable: true revokedAt: type: string format: date-time nullable: true UnprocessableEntityErrorCode: type: string enum: - email_cannot_be_null - exchange_cannot_be_enabled - transfer_amount_too_small - transfer_address_not_whitelisted - invalid_scopes - unknown_transfer_error - transfer_mfa_required - transfer_mfa_failed - invalid_transfer_funds - invalid_transfer_currency - invalid_exchange_provider - invalid_transfer_network - invalid_email - email_already_exists - allowlist_already_exists - allowlist_entry_already_exists - reassign_wallet_error - reassign_wallet_confirm - members_cannot_delete_themself - username_already_exists - wrong_email_verification_token - wrong_sms_verification_token - invalid_email_verification - invalid_sms_verification - invalid_verification - invalid_position - too_many_sms_verification_attempts - too_many_email_verification_attempts - too_many_verification_attempts - organization_name_already_exists - project_name_already_exists - wallet_not_deployed - email_verification_required - phone_verification_required - invite_address_required - provider_not_available - forbidden_unlink_request - invalid_unlink_request - too_many_api_tokens - lock_timeout - lock_too_many_attempts - nft_token_gating_not_supported_for_chain - empty_chain_name - no_enabled_email_provider - no_enabled_sms_provider - invalid_key_export_url - invalid_dynamic_props - too_many_requests - too_many_organizations_for_user - too_many_projects_for_organization - email_associated_with_different_provider - user_has_already_account_with_email - user_has_already_account_with_phone_number - other_verify_failure - email_tied_to_embedded_wallet - invalid_invite - social_account_already_exists - invalid_email_address - invalid_gate - conflicting_embedded_wallet_providers - invalid_user - invalid_cors_origins - invalid_mobile_deeplink_urls - unauthorized_mobile_deeplink_url - invalid_private_key_format - invalid_embedded_wallet_settings - wallet_not_support_passkey - recovery_email_unavailable_or_invalid - connect_error - invalid_wallet_name - invalid_wallet_address - email_recovery_disabled - no_compatible_wallet_service_enabled - missing_aa_project_id - linked_embedded_wallet - invalid_mpc_environment - invalid_regex - repeated_options - missing_phone_number_or_email - duplicate_exists - mfa_device_not_found - mfa_invalid_code - mfa_invalid_request - invalid_phone - gate_exists - invalid_embedded_wallet_chains_configuration - merge_accounts_confirmation - merge_accounts_invalid - invalid_wallet_id - unable_to_fetch_balances - cannot_switch_to_unique - custom_field_data_not_unique - metadata_size_exceeded - invalid_custom_hostname - blocked_user_cannot_transfer_wallet - feature_not_enabled_in_suborg - invalid_username - invalid_external_auth - invalid_chain_address_match - invalid_update - cannot_delete_last_project - no_hd_wallet_found - wallet_account_exists_for_chain - too_many_embedded_wallets_for_user - too_many_embedded_wallets_per_chain_for_user - invalid_session_public_key - custom_field_not_unique - invalid_aa_project_configuration - no_v1_embedded_wallet_found - embedded_wallet_address_already_linked - key_share_already_backed_up - invalid_key_shares_length - wallet_service_connection_error - no_global_wallet_found - invalid_metadata_value - max_passkeys_per_user - passkey_not_found - cannot_delete_passkey_linked_to_embedded_wallet - cannot_delete_last_sign_in_verified_credential WaasWalletProperties: type: object properties: keyShares: type: array items: $ref: '#/components/schemas/WalletKeyShareInfo' thresholdSignatureScheme: $ref: '#/components/schemas/ThresholdSignatureScheme' derivationPath: type: string description: The derivation path for the wallet settings: $ref: '#/components/schemas/WaasWalletSettings' version: $ref: '#/components/schemas/EmbeddedWalletVersionEnum' JwtVerifiedCredential: type: object required: - id - format - signInEnabled properties: address: $ref: '#/components/schemas/WalletPublicKey' chain: type: string refId: $ref: '#/components/schemas/uuid' signerRefId: $ref: '#/components/schemas/uuid' email: type: string format: email id: $ref: '#/components/schemas/uuid' name_service: $ref: '#/components/schemas/NameServiceData' public_identifier: description: This is used to publicly identify a verified credential in a human-friendly way. For example, this will be the email address if credential format=email. type: string wallet_name: type: string wallet_provider: $ref: '#/components/schemas/WalletProviderEnum' wallet_properties: $ref: '#/components/schemas/WalletProperties' format: $ref: '#/components/schemas/JwtVerifiedCredentialFormatEnum' oauth_provider: $ref: '#/components/schemas/ProviderEnum' oauth_username: type: string oauth_display_name: type: string nullable: true oauth_account_id: type: string nullable: true phoneNumber: description: This field contains the phone number in the country. This could also contain the area code within a country. example: '9171113333' type: string phoneCountryCode: description: This field contains the phone international country code. See https://countrycode.org/ example: '1' type: string isoCountryCode: description: ISO-3166 two-character country code. See https://en.wikipedia.org/wiki/List_of_ISO_3166_country_codes example: US type: string oauth_account_photos: type: array items: type: string oauth_emails: type: array items: type: string oauth_metadata: type: object description: This object contains JSON metadata for a social-based verified credential. It may contain data about the user that does not fit into the other structured fields, and could include arbitrary fields about the user from the oauth provider's API. previous_users: description: This will only be provided in the responses for GET /users/{userId}.Previous user IDs that owned this verified credential and was tranfered to the current user ID. type: array items: $ref: '#/components/schemas/uuid' embedded_wallet_id: type: string nullable: true wallet_additional_addresses: type: array items: $ref: '#/components/schemas/WalletAdditionalAddress' lastSelectedAt: description: This timestamp indicates the last time this verified wallet was either connected to the user account or selected to become the primary wallet on the account. type: string format: date-time signInEnabled: type: boolean description: This indicates if the user can sign in with this credential verifiedAt: type: string format: date-time description: This timestamp indicates the last time this verified credential was verified. orderBy: type: string description: $COLUMN_NAME-asc|desc pattern: ^[A-Za-z]*-(asc|desc)$ example: something-asc CustomFieldValidationRules: type: object properties: unique: type: boolean description: If this field must be unique for every user in the environment regex: type: string maxLength: 255 description: The regex pattern that the text field must match example: ^0x validOptions: type: array items: $ref: '#/components/schemas/CustomFieldValidValue' description: The dropdown options for the select field example: - label: small - label: medium - label: large checkboxText: type: string maxLength: 255 description: The text that will be displayed for the checkbox field example: Agree to the terms and conditions description: Optional validation rules for the custom field WalletProviderEnum: type: string enum: - browserExtension - custodialService - walletConnect - qrCode - deepLink - embeddedWallet - smartContractWallet BaseUser: type: object required: - id - projectEnvironmentId properties: id: $ref: '#/components/schemas/uuid' projectEnvironmentId: $ref: '#/components/schemas/uuid' verifiedCredentials: type: array items: $ref: '#/components/schemas/JwtVerifiedCredential' lastVerifiedCredentialId: $ref: '#/components/schemas/uuid' sessionId: $ref: '#/components/schemas/uuid' alias: $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength' country: $ref: '#/components/schemas/CountryCode' email: type: string format: email nullable: true maxLength: 255 firstName: $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength' jobTitle: $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength' lastName: $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength' phoneNumber: type: string nullable: true maxLength: 255 policiesConsent: type: boolean nullable: true tShirtSize: $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength' team: $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength' username: $ref: '#/components/schemas/OptionalNullableNonEmptyStringWith255MaxLength' firstVisit: type: string format: date-time lastVisit: type: string format: date-time newUser: type: boolean metadata: type: object mfaBackupCodeAcknowledgement: $ref: '#/components/schemas/MfaBackupCodeAcknowledgement' btcWallet: type: string nullable: true kdaWallet: type: string nullable: true ltcWallet: type: string nullable: true ckbWallet: type: string nullable: true kasWallet: type: string nullable: true dogeWallet: type: string nullable: true emailNotification: type: boolean nullable: true discordNotification: type: boolean nullable: true newsletterNotification: type: boolean nullable: true lists: type: array description: Access lists evaluated by Dynamic when considering access for the user. items: type: string scope: type: string description: 'A whitespace-separate list of permissions associated with the JWT token issued. This conforms to the JWT standard for scope claims: https://datatracker.ietf.org/doc/html/rfc8693#section-4.2' example: superuser marketing operations missingFields: type: array items: $ref: '#/components/schemas/ProjectSettingsKyc' WalletPublicKey: type: string pattern: ^[A-Za-z0-9]{18,100}$ description: Valid blockchain wallet address, must be an alphanumeric string without any special characters example: '0xbF394748301603f18d953C90F0b087CBEC0E1834' maxLength: 255 ProviderEntryPointVersionEnum: type: string enum: - v6 - v7 CustomFieldType: type: string enum: - text - checkbox - select ProviderKernelVersionEnum: type: string enum: - v2_4 - v3_0 - v3_1 - v3_2 - v3_3 NonEmptyString: type: string pattern: ^(?=\S)[\p{L}\p{N}a-zA-Z _.,:!?&%@\/+\-'|]+(?<=\S)$ example: An example name ErrorMessageWithCode: type: object properties: code: type: string message: type: string uuid: type: string pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ minLength: 36 maxLength: 36 example: 95b11417-f18f-457f-8804-68e361f9164f kdaWalletString: type: string description: KDA wallet address pattern: ^k:[0-9a-fA-F]{64}$ example: k:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF nullable: true ChainalysisCheckResultEnum: type: string enum: - OK - BLOCKED - FAILED Wallet: type: object properties: id: $ref: '#/components/schemas/uuid' name: $ref: '#/components/schemas/NonEmptyString' chain: $ref: '#/components/schemas/ChainEnum' publicKey: $ref: '#/components/schemas/WalletPublicKey' provider: $ref: '#/components/schemas/WalletProviderEnum' properties: $ref: '#/components/schemas/WalletProperties' lastSelectedAt: type: string nullable: true required: - id - name - chain - publicKey - provider NonEmptyStringWith255MaxLength: type: string pattern: ^(?=\S)[\p{L}\p{N}a-zA-Z _.,:!?&%@\/+\-'|]+(?<=\S)$ maxLength: 255 example: An example name CustomFieldValidValue: type: object required: - label properties: label: $ref: '#/components/schemas/NonEmptyStringWith255MaxLengthAndSpecialChars' key: $ref: '#/components/schemas/NonEmptyStringWith255MaxLengthAndSpecialChars' WalletAddressType: type: string enum: - ordinals - payment - cosmos - evm - ton BadRequest: type: object properties: error: type: string OptionalNonEmptyStringWith255MaxLength: type: string pattern: ^$|^(?=\S)[\p{L}\p{N}a-zA-Z _.,:!?&%@\/+\-'|]+(?<=\S)$ example: An example name maxLength: 255 HardwareWalletProperties: type: object properties: hardwareWallet: $ref: '#/components/schemas/HardwareWalletEnum' responses: Unauthorized: description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Unauthorized' UnprocessableEntity: description: Unprocessable Entity content: application/json: schema: $ref: '#/components/schemas/UnprocessableEntity' InternalServerError: description: Internal Server Error content: application/json: schema: $ref: '#/components/schemas/InternalServerError' BadRequest: description: Bad Request content: application/json: schema: $ref: '#/components/schemas/BadRequest' NotFound: description: Not Found content: application/json: schema: $ref: '#/components/schemas/NotFound' Forbidden: description: Forbidden content: application/json: schema: $ref: '#/components/schemas/Forbidden' ForbiddenWithErrorAndPayload: description: Forbidden content: application/json: schema: $ref: '#/components/schemas/ForbiddenWithErrorAndPayload' parameters: oauthAccountId: in: path name: oauthAccountId schema: $ref: '#/components/schemas/uuid' required: true description: UUID of a user oauth account environmentId: in: path name: environmentId required: true description: ID of the environment schema: $ref: '#/components/schemas/uuid' userId: in: path name: userId schema: $ref: '#/components/schemas/uuid' required: true description: UUID of the user securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT