Dynamic Waas API

The Waas API from Dynamic — 14 operation(s) for waas.

OpenAPI Specification

dynamic-xyz-waas-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Dashboard Allowlists Waas 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: Waas
paths:
  /environments/{environmentId}/waas/create:
    post:
      operationId: createWaasWallet
      description: Creates a new WAAS wallet for a user given an email or userId. If an email is provided and it is not associated with an existing user this call will also create a new user.
      summary: Create a new WAAS for a user given an identifier
      tags:
      - Waas
      security:
      - bearerAuth: []
      parameters:
      - $ref: '#/components/parameters/environmentId'
      requestBody:
        description: Pregenerate WAAS wallet for a user given an identifier
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateUserWaasWalletsRequest'
      responses:
        '200':
          description: Wallet already exists for the user
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserResponse'
        '201':
          description: Successfully created new wallet for the 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'
  /environments/{environmentId}/waas/authenticate:
    post:
      operationId: authenticateWaas
      tags:
      - Waas
      summary: Authenticate for WAAS using api key
      security:
      - bearerAuth: []
      parameters:
      - $ref: '#/components/parameters/environmentId'
      responses:
        '200':
          description: Successfully authenticated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasAuthenticateResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /environments/{environmentId}/waas/verifyApiKey:
    post:
      operationId: verifyApiKey
      tags:
      - Waas
      summary: Verify if an API key is valid for a specific environment
      description: Simple endpoint to verify if the provided API key (DYN_API_TOKEN) is valid and has access to the specified environment. Returns true if the token is verified, false otherwise.
      security:
      - bearerAuth: []
      parameters:
      - $ref: '#/components/parameters/environmentId'
      responses:
        '200':
          description: API key verification result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasVerifyApiKeyResponse'
        '400':
          description: Bad request - token is required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasVerifyApiKeyErrorResponse'
        '401':
          description: Unauthorized - invalid or expired token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasVerifyApiKeyErrorResponse'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /environments/{environmentId}/waas/{walletId}/delegatedAccess/signMessage:
    post:
      operationId: delegatedSignMessage
      tags:
      - Waas
      summary: Sign a message with a delegated waas account
      parameters:
      - $ref: '#/components/parameters/environmentId'
      - $ref: '#/components/parameters/walletId'
      requestBody:
        description: Delegate Sign Message Request
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WaasDelegateSignMessageRequest'
      responses:
        '200':
          description: Successfully created a room for delegated signing message ceremony
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpenRoomResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /environments/{environmentId}/waas/{walletId}/delegatedAccess:
    delete:
      operationId: deleteDelegatedAccess
      tags:
      - Waas
      summary: Revoke delegated access for a single wallet
      description: 'Allows developers to revoke their own delegated access for a specific wallet

        '
      parameters:
      - $ref: '#/components/parameters/environmentId'
      - $ref: '#/components/parameters/walletId'
      responses:
        '204':
          description: Delegated access successfully revoked
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /environments/{environmentId}/waas/delegatedAccess/revoke:
    post:
      operationId: revokeDelegatedAccess
      tags:
      - Waas
      summary: Revoke delegated access for one or more wallets
      description: 'Allows developers to revoke their own delegated access

        '
      parameters:
      - $ref: '#/components/parameters/environmentId'
      requestBody:
        description: Revoke Delegated Access Request
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RevokeDelegatedAccessRequest'
      responses:
        '200':
          description: Delegated access revocation processed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RevokeDelegatedAccessResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /environments/{environmentId}/waas/delegatedAccess/encryptionPublicKeys:
    get:
      operationId: getDelegatedAccessEncryptionPublicKeys
      tags:
      - Waas
      summary: Get delegated access encryption public keys for an environment
      description: 'Fetches the encryption public keys used for delegated access in a WAAS environment.

        By default, returns only the latest active key. Use the includeAll query parameter to get all keys.

        '
      parameters:
      - $ref: '#/components/parameters/environmentId'
      - name: includeAll
        in: query
        description: If true, returns all encryption public keys. Otherwise, returns only the latest active key.
        required: false
        schema:
          type: boolean
          default: false
      responses:
        '200':
          description: Encryption public keys fetched successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DelegatedAccessEncryptionPublicKeysUnifiedResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      operationId: createDelegatedCredentials
      tags:
      - Waas
      summary: Create credentials for waas wallet delegation
      parameters:
      - $ref: '#/components/parameters/environmentId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WaasDelegationCredentialsRequest'
      responses:
        '201':
          description: Credentials for waas wallet delegation created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasDelegationCredentialsResponse'
        '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'
  /environments/{environmentId}/waas/delegatedAccess/encryptionPublicKeys/{keyId}:
    get:
      operationId: getDelegatedAccessEncryptionPublicKeyById
      tags:
      - Waas
      summary: Get a specific delegated access encryption public key by ID
      parameters:
      - $ref: '#/components/parameters/environmentId'
      - name: keyId
        in: path
        description: The ID of the encryption public key
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Encryption public key fetched successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DelegatedAccessEncryptionPublicKeyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /environments/{environmentId}/waas/{walletId}:
    get:
      operationId: getWaasWalletByWalletId
      tags:
      - Waas
      summary: Get a specific WAAS wallet by walletId
      parameters:
      - $ref: '#/components/parameters/environmentId'
      - name: walletId
        in: path
        description: The ID of the WAAS wallet
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: WAAS wallet fetched successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasWalletResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /environments/{environmentId}/waas/{walletId}/keyShares/backup/locations:
    post:
      operationId: backupKeySharesToLocationsForPregen
      tags:
      - Waas
      summary: Create backup action for key shares using API token authentication
      description: 'Creates backup locations for wallet key shares. Requires API token authentication. Validates that the user belongs to the environment and that no client key shares exist for the wallet. This endpoint is intended for server-side integrations that need to backup key shares on behalf of users.

        '
      parameters:
      - $ref: '#/components/parameters/environmentId'
      - $ref: '#/components/parameters/walletId'
      requestBody:
        description: Backup locations request with userId
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BackupKeySharesToLocationsWithUserIdRequest'
      responses:
        '201':
          description: Backup action and event created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BackupKeySharesToLocationsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
      security:
      - bearerAuth: []
  /environments/{environmentId}/waas/policies:
    post:
      operationId: createWaasPolicy
      tags:
      - Waas
      summary: Create a new WAAS policy for an environment or add new rules to an existing policy
      parameters:
      - $ref: '#/components/parameters/environmentId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WaasPolicyCreateRequest'
      responses:
        '201':
          description: WAAS policy created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasPolicyResponse'
        '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'
    get:
      operationId: getWaasPolicy
      tags:
      - Waas
      summary: Get the WAAS policy for an environment
      parameters:
      - $ref: '#/components/parameters/environmentId'
      responses:
        '200':
          description: WAAS policy fetched successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasPolicyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      operationId: updateWaasPolicy
      tags:
      - Waas
      summary: Update the WAAS policy for an environment by ruleId
      parameters:
      - $ref: '#/components/parameters/environmentId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WaasPolicyUpdateRequest'
      responses:
        '200':
          description: WAAS policy updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasPolicyResponse'
        '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'
    delete:
      operationId: deleteWaasPolicy
      tags:
      - Waas
      summary: Delete a WAAS policy rule by ruleId
      parameters:
      - $ref: '#/components/parameters/environmentId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WaasPolicyDeleteRequest'
      responses:
        '200':
          description: WAAS policy rules deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasPolicyResponse'
        '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'
  /environments/{environmentId}/waas/{walletId}/signaturePolicy:
    post:
      operationId: createWaasSignaturePolicy
      tags:
      - Waas
      summary: Create a new WAAS signature policy for a wallet
      parameters:
      - $ref: '#/components/parameters/environmentId'
      - $ref: '#/components/parameters/walletId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WaasWalletSignaturePolicyTmpCreateRequest'
      responses:
        '201':
          description: WAAS signature policy created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasWalletSignaturePolicyTmpResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'
    get:
      operationId: getWaasSignaturePolicies
      tags:
      - Waas
      summary: Get all active WAAS signature policies for a wallet
      parameters:
      - $ref: '#/components/parameters/environmentId'
      - $ref: '#/components/parameters/walletId'
      responses:
        '200':
          description: WAAS signature policies fetched successfully
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WaasWalletSignaturePolicyTmpResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /environments/{environmentId}/waas/{walletId}/signaturePolicy/{policyId}:
    get:
      operationId: getWaasSignaturePolicyByWalletIdAndPolicyId
      tags:
      - Waas
      summary: Get a WAAS signature policy by walletId and policyId
      parameters:
      - $ref: '#/components/parameters/environmentId'
      - $ref: '#/components/parameters/walletId'
      - name: policyId
        in: path
        description: The ID of the signature policy for the wallet
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: WAAS signature policy fetched successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasWalletSignaturePolicyTmpResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    put:
      operationId: updateWaasSignaturePolicyByWalletIdAndPolicyId
      tags:
      - Waas
      summary: Update a WAAS signature policy by walletId and policyId
      parameters:
      - $ref: '#/components/parameters/environmentId'
      - $ref: '#/components/parameters/walletId'
      - name: policyId
        in: path
        description: The ID of the signature policy for the wallet
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/WaasWalletSignaturePolicyTmpCreateRequest'
      responses:
        '200':
          description: WAAS signature policy updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasWalletSignaturePolicyTmpResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      operationId: deleteWaasSignaturePolicyByWalletIdAndPolicyId
      tags:
      - Waas
      summary: Delete a WAAS signature policy by walletId and policyId
      parameters:
      - $ref: '#/components/parameters/environmentId'
      - $ref: '#/components/parameters/walletId'
      - name: policyId
        in: path
        description: The ID of the signature policy for the wallet
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: WAAS signature policy deleted successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WaasWalletSignaturePolicyTmpResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /sdk/{environmentId}/waas/delegatedAccess/encryptionPublicKey:
    get:
      operationId: getDelegatedAccessEncryptionPublicKey
      tags:
      - Waas
      summary: Get delegated access encryption public key for an environment
      description: 'Fetches the encryption public key used for delegated access in a WAAS environment.

        By default, returns only the latest active key.

        '
      parameters:
      - $ref: '#/components/parameters/environmentId'
      responses:
        '200':
          description: Encryption public key fetched successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DelegatedAccessEncryptionPublicKeyResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    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
    NonEmptyStringWith4096MaxLength:
      type: string
      maxLength: 4096
      description: A string with a max length of 4096 characters
    WaasVerifyApiKeyErrorResponse:
      type: object
      required:
      - message
      - verified
      properties:
        message:
          type: string
          description: Error message describing why verification failed
        verified:
          type: boolean
          description: Always false for error responses
    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
    WaasDelegationCredentialsRequest:
      type: object
      required:
      - publicKey
      properties:
        publicKey:
          $ref: '#/components/schemas/NonEmptyStringWith4096MaxLength'
        alg:
          $ref: '#/components/schemas/NonEmptyStringWith50MaxLength'
        type:
          $ref: '#/components/schemas/WaasDelegatedAccessEncryptionPublicKeyType'
    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
    WaasDelegationCredentialsResponse:
      type: object
      required:
      - publicKey
      - kid
      - alg
      - createdAt
      - updatedAt
      properties:
        publicKey:
          $ref: '#/components/schemas/NonEmptyStringWith4096MaxLength'
        kid:
          type: string
          description: Short identifier referenced in webhook envelopes so the developer knows which private key to use
          maxLength: 64
        alg:
          type: string
          enum:
          - RSA-OAEP-256
          - HYBRID-RSA-AES-256
          description: Algorithm for how this key is used
        type:
          $ref: '#/components/schemas/WaasDelegatedAccessEncryptionPublicKeyType'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    WaasPolicyResponse:
      type: object
      required:
      - policyId
      - projectEnvironmentId
      - createdAt
      - updatedAt
      - policyContent
      properties:
        message:
          type: string
          description: Message describing the operation result
        policyId:
          type: string
        projectEnvironmentId:
          $ref: '#/components/schemas/uuid'
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        policyContent:
          type: array
          items:
            $ref: '#/components/schemas/WaasPolicyRule'
    NonEmptyIsoCountryCode:
      type: string
      pattern: ^[a-zA-Z]{2,4}\d?$
      maxLength: 4
      example: US
    OpenRoomResponse:
      type: object
      required:
      - roomId
      properties:
        roomId:
          type: string
        serverKeygenIds:
          type: array
          items:
            $ref: '#/components/schemas/NonEmptyBase58StringWith100MaxLength'
        newServerKeygenIds:
          type: array
          items:
            $ref: '#/components/schemas/NonEmptyBase58StringWith100MaxLength'
        walletId:
          $ref: '#/components/schemas/uuid'
    WaasPolicyConstraintCondition:
      type: string
      enum:
      - equal
      - greater
      - less
      - greaterEqual
      - lessEqual
      - notEqual
      description: Comparison operator for argument validation
    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
    WaasPolicyDeleteRequest:
      type: object
      required:
      - ruleIdsToDelete
      properties:
        ruleIdsToDelete:
          type: array
          items:
            $ref: '#/components/schemas/uuid'
          description: Array of rule IDs to delete from the policy
    BackupKeySharesToLocationsWithUserIdRequest:
      type: object
      required:
      - userId
      - locations
      properties:
        userId:
          type: string
          format: uuid
          description: The ID of the user who owns the wallet
        locations:
          type: array
          items:
            type: object
            required:
            - location
            properties:
              location:
                $ref: '#/components/schemas/WaasBackupOptionsEnum'
              keygenId:
                $ref: '#/components/schemas/NonEmptyStringWith255MaxLength'
              thresholdSignatureScheme:
                $ref: '#/components/schemas/ThresholdSignatureScheme'
              externalKeyShareId:
                $ref: '#/components/schemas/NonEmptyString'
    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'
    UserResponse:
      type: object
      properties:
        user:
          $ref: '#/components/schemas/User'
    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
    SolanaPublicKey:
      type: string
      pattern: ^[1-9A-HJ-NP-Za-km-z]{43,44}$
      description: Valid 

# --- truncated at 32 KB (71 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/dynamic-xyz/refs/heads/main/openapi/dynamic-xyz-waas-api-openapi.yml