openapi: 3.1.0
info:
  title: Vezgo API
  description: >
    Welcome to Vezgo!

    This is the Vezgo API specification. See https://vezgo.com/docs/intro/ for a complete overview of Vezgo.
  version: 1.0.28
servers:
  - url: https://api.vezgo.com/v1
paths:
  /auth/token:
    post:
      summary: Get Authentication Token
      description: >-
        This endpoint returns the authentication token referred as
        <b>VEZGO_USER_TOKEN</b> in this doc.
      tags:
        - Authentication
      parameters:
        - name: loginName
          in: header
          required: true
          description: >-
            The user's unique identification from your system (could be the
            username, id, or email).
          schema:
            type: string
            examples:
              - userid01
              - user@example.dev
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                clientId:
                  type: string
                secret:
                  type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Token"
  /accounts:
    get:
      summary: Get accounts list
      description: This endpoint returns the list of a user's connected accounts.
      tags:
        - Account
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Account"
        "401":
          description: Unauthorized
      security:
        - VEZGO_USER_TOKEN: []
    post:
      summary: Add account
      description: >
        <b>Note: This endpoint is only useful for enterprise customers using direct API integration. If you are integrating with the Connect widget, this endpoint is not applicable. To get access to the Direct API, please contact the team.</b><br>Add a new user account for the authorized user. Each provider requires a
        different set of credentials. See the table below
        for the list of providers Wealthica currently supports, and the
        corresponding attributes that are required for the credentials object.


        Note: Adding an account will toggle an asynchronous first sync task.
        If the account returns a login failed on the first sync, it will be
        automatically removed to minimize the number of abandoned connections.
      tags:
        - Account
      operationId: addAccount
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - provider
                - credentials
              properties:
                name:
                  type: string
                  description: The account name.
                provider:
                  type: string
                  description: The provider name (`provider.name` from the `/providers` endpoint).
                credentials:
                  $ref: "#/components/schemas/AccountCredentials"
                sync_transactions:
                  type: boolean
                  description: >-
                    Whether or not to sync transactions for this account.

                    Defaults to true and only takes effect if the Vezgo client's
                    subscription plan has this feature.
                sync_nfts:
                  type: boolean
                  description: >-
                    Whether or not to sync NFTs for this account.

                    Only takes effect if the Vezgo client's subscription plan has this
                    feature.
                daily_sync:
                  type: boolean
                  description: >-
                    Whether or not to sync this account daily.

                    Defaults to true and only takes effect if the Vezgo client's
                    subscription plan has this feature.

      responses:
        '202':
          description: >
            The account has been succesfully added. An asynchronous first sync
            task has been scheduled. You can check for sync progress by doing
            repeated call to `/accounts/:id`, or better, by polling
            `/accounts/:id/poll` for changes.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Account"
        '400':
          description: Invalid parameters.
  /accounts/{account_id}:
    get:
      summary: Get an account
      description: This endpoint returns a specific account.
      tags:
        - Account
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Account"
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "404":
          description: Acccount does not exist
      security:
        - VEZGO_USER_TOKEN: []
    put:
      summary: Update account
      description: >
        <b>Note: This endpoint is only useful for enterprise customers using direct API integration. If you are integrating with the Connect widget, this endpoint is not applicable. To get access to the Direct API, please contact the team.</b><br>Update an existing account/connection. If `credentials` or `security_answer` is provided, a synchronization will be triggered.
      tags:
        - Account
      operationId: updateAccount
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                  description: The account name.
                credentials:
                  $ref: "#/components/schemas/AccountCredentials"
                security_answer:
                  type: string
                  description: >
                    Answer to the security question prompted by the provider
                    website.
                sync_transactions:
                  type: boolean
                  description: >-
                    Whether or not to sync transactions for this account.

                    Defaults to true and only takes effect if the Vezgo client's
                    subscription plan has this feature.
                sync_nfts:
                  type: boolean
                  description: >-
                    Whether or not to sync NFTs for this account.

                    Only takes effect if the Vezgo client's subscription plan has this
                    feature.
                daily_sync:
                  type: boolean
                  description: >-
                    Whether or not to sync this account daily.

                    Defaults to true and only takes effect if the Vezgo client's
                    subscription plan has this feature.
      responses:
        '202':
          description: >
            The account has been succesfully added. An asynchronous first sync
            task has been scheduled. You can check for sync progress by doing
            repeated call to `/accounts/:id`, or better, by polling
            `/accounts/:id/poll` for changes.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Account"
        '400':
          description: Invalid parameters.
    delete:
      summary: Remove an account
      description: Removes a specific account and all of its data from a user
      tags:
        - Account
      operationId: deleteAccount
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
      responses:
        "204":
          description: The account has been successfully removed.
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "404":
          description: Acccount does not exist
      security:
        - VEZGO_USER_TOKEN: []
  /accounts/{account_id}/poll:
    get:
      summary: Poll account for an update
      description: >-
        <b>Note: This endpoint is only useful for enterprise customers using direct API integration. If you are integrating with the Connect widget, this endpoint is not applicable. To get access to the Direct API, please contact the team.</b><br>Blocks (for max 30 seconds) listening for change to the account, and
        returns the updated version if any.
      tags:
        - Account
      operationId: pollAccount
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
        - name: v
          in: query
          schema:
            type: number
          description: >-
            Base version number of the account, which is usually the newest
            version number that the API client knows.


            If provided it will be used to compare with the latest version
            number on the server to determine if the account has been
            updated (its wallets have been retrieved, balances have been updated, or the
            sync has finished).


            Defaults to the version number at the start of the poll.
      responses:
        "200":
          description: >-
            There has been an update during the poll. The latest account object is
            returned in the response.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Account"
        "304":
          description: The account did not change during the poll.
        "400":
          description: Invalid ID supplied
        "404":
          description: Account not found
        "503":
          description: >-
            The poll timed out and no v was specified, or an internal error
            occurred.
      security:
        - VEZGO_USER_TOKEN: []
  /accounts/{account_id}/sync:
    post:
      summary: Sync an account
      description: >-
        This endpoint triggers an account sync. Vezgo automatically synchronizes
        all accounts with providers once daily. You can also trigger an account
        sync at any time to get the latest data.
      tags:
        - Account
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
      responses:
        "202":
          description: >-
            A sync has successfully started. The latest account object
            (typically with status `syncing`) will be returned along with this
            status code.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Account"
        "400":
          description: >-
            The request has been rejected. This usually happens when the account
            is disconnected (the last sync failed due to expired/revoked
            credentials), in which case the account must be reconnected first.
        "401":
          description: Unauthorized
        "404":
          description: Account does not exists
        "409":
          description: A sync is already in progress.
        "429":
          description: >-
            A sync request is tried before the cooldown period (Which is 2
            minutes per account by default). You will receive a `retry-after` response
            header indicating when to retry this request (in seconds).
      security:
        - VEZGO_USER_TOKEN: []
  /accounts/{account_id}/transactions:
    get:
      summary: Get transaction history
      description: >
        <p>Returns the transaction history for an account</p>
        <p>To fetch all transactions, we need to enable pagination and go page-by-page.</p>

        <p>First make a request with an empty last (<b>?last=</b>) for the first page. Then use the last transaction's ID from the first page to query the next page <b>?last=LAST_TRANSACTION_ID</b>, and so on.</p>
        <p>See example code at <a href="https://vezgo.com/docs/examples#get-all-transactions">https://vezgo.com/docs/examples#get-all-transactions</a></p>
        <b>Notes:</b>
        <ul>
        <li> The same <b>?from</b> param must be provided in all requests. </li>
        <li> If <b>?from</b> is not passed, it defaults to the start of the current year. If you want to get all transactions including previous years, pass a very old date. </li>
        <li> If <b>?limit</b> is not passed, it defaults to 100. Maximum value of ?limit allowed is 1000. </li>
        <li> <b>sort</b> can be only used when Pagination mode is not in use.</li>
        </ul><br>

        <P>Due to trade reconciliation, <b>?limit</b> doesn't guarantee the exact number of results to be returned. E.g. <b>?limit=10</b> might return 9 or fewer transactions, depending on how many times trade reconciliation happens within the 10 transactions queried from our DB.<br><br>
        Trade reconciliation is a process where 2 or more transactions that are originally part of a trade are combined into a single transaction_type: 'trade' transaction. This process is neccessary due to a current limitation in the Vezgo system, and will be removed in the next version of Vezgo API.<br><br>

        <b>IMPORTANT</b>: We have a hard limit of 6MB response size for transactions. If you are already passing <b>?limit</b> then it should be good. But if you are passing in a large <b>?from=&to=</b> range, or querying a very large account without passing in <b>?limit</b>, any request returning more than 6MB of response will be dropped.

        <p>By default, transactions are sorted by <b>transaction.initiated_at</b> in ascending order.</p>

        <p>When a last or limit is passed to the query, pagination mode is enabled. In this mode, transactions are sorted by their creation date (the date on which the transaction is added to the Vezgo system).</p>
      tags:
        - Transaction
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
        - name: ticker
          in: query
          schema:
            type: string
        - name: from
          in: query
          schema:
            type: string
        - name: to
          in: query
          schema:
            type: string
        - name: last
          in: query
          schema:
            type: string
        - name: limit
          in: query
          schema:
            type: number
        - name: wallet
          in: query
          schema:
            type: string
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc
        - name: exclude_fields
          in: query
          schema:
            type: string
          description: comma-separated list of fields to exclude from the response, for smaller response sizes.
        - name: types
          in: query
          schema:
            style: form
            explode: true
            type: array
            items:
              $ref: "#/components/schemas/TransactionType"
          description: comma-separated list of transaction types to filter by.

      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Transaction"
      security:
        - VEZGO_USER_TOKEN: []
  /accounts/{account_id}/transactions/{tx_id}:
    get:
      summary: Get a specific transaction
      description: Returns a specific transaction
      tags:
        - Transaction
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
        - name: tx_id
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Transaction"
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "404":
          description: Transaction does not exist
      security:
        - VEZGO_USER_TOKEN: []
  /accounts/{account_id}/orders:
    get:
      summary: Get order history
      description: >
        <p>Returns the order history for an account</p>
        <p><b>NOTE: Currently, orders are available for Binance only. Please reach us out to get this feature enabled for you.</b></p>
        <p>To fetch all orders, we need to enable pagination and go page-by-page.</p>

        <p>First make a request with an empty last (<b>?last=</b>) for the first page. Then use the last orders's ID from the first page to query the next page <b>?last=LAST_ORDER_ID</b>, and so on.</p>
        <p>See example code at <a href="https://vezgo.com/docs/examples#get-all-transactions">https://vezgo.com/docs/examples#get-all-transactions</a></p>
        <b>Notes:</b>
        <ul>
        <li> The same <b>?from</b> param must be provided in all requests. </li>
        <li> If <b>?from</b> is not passed, it defaults to the start of the current year. If you want to get all orders including previous years, pass a very old date. </li>
        <li> If <b>?limit</b> is not passed, it defaults to 100. Maximum value of ?limit allowed is 1000. </li>
        <li> <b>sort</b> can be only used when Pagination mode is not in use.</li>
        </ul><br>

        <p>By default, orders are sorted by <b>order.order_creation_time</b> in ascending order.</p>

        <p>When a last or limit is passed to the query, pagination mode is enabled. In this mode, orders are sorted by their creation date.</p>
      tags:
        - Order
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
        - name: from
          in: query
          schema:
            type: string
        - name: to
          in: query
          schema:
            type: string
        - name: last
          in: query
          schema:
            type: string
        - name: limit
          in: query
          schema:
            type: number
        - name: sort
          in: query
          schema:
            type: string
            enum:
              - asc
              - desc

      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Order"
      security:
        - VEZGO_USER_TOKEN: []
  /accounts/{account_id}/orders/{order_id}:
    get:
      summary: Get a specific transaction
      description: Returns a specific transaction
      tags:
        - Order
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
        - name: order_id
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Order"
        "400":
          description: Bad Request
        "401":
          description: Unauthorized
        "404":
          description: Order does not exist
      security:
        - VEZGO_USER_TOKEN: []
  /accounts/{account_id}/history:
    get:
      summary: Get balance history
      description: >
        This endpoint returns the balance history for an account.<br>
        By default, data for the current year is returned.<br>
        NOTE: An account's balance history starts from the date the account was first connected to Vezgo.
      tags:
        - Account
      parameters:
        - name: account_id
          in: path
          required: true
          schema:
            type: string
        - name: from
          in: query
          schema:
            type: string
        - name: to
          in: query
          schema:
            type: string
        - name: wallet
          in: query
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/HistoryEntry"
      security:
        - VEZGO_USER_TOKEN: []
  /providers:
    get:
      summary: Get list of all supported providers.
      tags:
        - Provider
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Provider"
  /providers/{name}:
    get:
      summary: Get provider by name.
      tags:
        - Provider
      parameters:
        - name: name
          in: path
          required: true
          schema:
            type: string
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/Provider"
  /wallet-connect/providers:
    get:
      summary: Get list of all wallet connect providers.
      description: >
        <b>Notes:</b>
        <ul>
        <li> All Wallet Connect providers must be pointed to <b>walletconnect</b> Vezgo provider. </li>
        <li> Wallet Connect providers should be displayed on the device, depending on the <b>mobile</b> or <b>desktop</b> flag</li>
        </ul>
      tags:
        - Provider
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/WalletConnectProvider"
  /users/me:
    delete:
      summary: Remove the Vezgo user
      description: Removes the Vezgo user associated with the user token, and all of the user's accounts.
      tags:
        - User
      operationId: deleteUser
      responses:
        "204":
          description: The removal request has been accepted. It takes a while to remove all data.
        "401":
          description: Unauthorized
      security:
        - VEZGO_USER_TOKEN: []
components:
  schemas:
    Auth:
      type: object
      properties:
        clienId:
          type: string
        secret:
          type: string
    Token:
      type: object
      properties:
        token:
          type: string
          description: Token to be sent in header for request to Vezgo API
    Account:
      type: object
      properties:
        id:
          type: string
          description: The Vezgo account identifier.
        name:
          type: [string, 'null']
          description: The Vezgo account provider name.
        resource_type:
          type: string
          description: Resource type for this object (which is `account`).
        blockchain:
          type: [string, 'null']
          description: >-
            (`wallet` accounts only) The blockchain holding the account. `null`
            for accounts coming from a cryptocurrency exchange. Not yet
            implemented, always `null` for now.
        created_at:
          type: integer
          format: int64
          description: The Vezgo account's creation date (milliseconds since Epoch).
        updated_at:
          type: integer
          format: int64
          description: The Vezgo account's last updated date (milliseconds since Epoch).
        status:
          $ref: "#/components/schemas/Status"
        status_details:
          $ref: "#/components/schemas/SyncStatusDetails"
        error:
          $ref: "#/components/schemas/SyncError"
        fiat_value:
          type: string
          description: Total fiat value of the account (string representation of a number).
        fiat_ticker:
          type: string
          description: The fiat currency in which the account's `fiat_value` is reported.
        provider:
          $ref: "#/components/schemas/Provider"
        wallets:
          type: array
          items:
            $ref: "#/components/schemas/Wallet"
        balances:
          type: array
          items:
            $ref: "#/components/schemas/Balance"
        v:
          type: string
          description: (Direct API integration) The account version number. Incremented every time the account is updated.
        authorized:
          type: boolean
          description: (Direct API integration) Whether the account authorization has been verified.
    AccountCredentials:
      type: object
      description: >-
        Credentials needed for connecting to the provider. The credentials
        object varies according to the provider. Check `provider.credentials`
        for the list of credential information required by the provider.
      properties:
        wallet:
          type: string
          description: |
            The wallet address.
        network:
          type: string
          description: |
            The network (`provider.name` from the `/providers` endpoint).
            Wallet providers (Metamask) use this information to determine
            which network the wallet address belongs to.

            This should be provided alongside `wallet`, and is optional.
        code:
          type: string
          description: |
            The authorization code returned from the provider website's
            oAuth process. This code is then used to get the access token for
            the synchronization of the account.

            This parameter is only required when connecting an account for
            providers that use oAuth such as Coinbase.

            If authorization code is provided in an Update Account request,
            it will trigger a synchronization for the account.
        username:
          type: string
          description: |
            The username of the account you have in the provider website.

            Vezgo securely stores and protects your username and password
            with asymmetric cryptography and strict policies.

            If `username` and `password` are provided in an Update Account
            request, they will trigger a synchronization for the account.
        password:
          type: string
          description: |
            The password of the account you have in the provider website.

            Vezgo securely stores and protects your username and password
            with asymmetric cryptography and strict policies.

            If `username` and `password` are provided in an Update Account
            request, they will trigger a synchronization for the account.
        user_id:
          type: string
          description: |
            The User ID in the provider website. Certain providers (Bitmart)
            ask for `user_id` along with `key` & `secret`.

            If `user_id`, `key` and `secret` are provided in an Update
            Account request, they will trigger a synchronization for the
            account.
        key:
          type: string
          description: |
            The key generated in the provider website. `key`, along with
            `secret` and sometimes `user_id`, is used for the synchronization
            process for certain providers.

            If `user_id`, `key` and `secret` are provided in an Update
            Account request, they will trigger a synchronization for the
            account.
        secret:
          type: string
          description: |
            The secret generated in the provider website. `secret`, along
            with `key` and sometimes `user_id`, is used for the
            synchronization process for certain providers.

            If `user_id`, `key` and `secret` are provided in an Update
            Account request, they will trigger a synchronization for the
            account.
    Status:
      type: string
      enum:
        - ok
        - error
        - syncing
        - retry
      description: The last sync status.
    SyncStatusDetails:
      type: object
      description: >-
        Detailed status of the last sync. May not exist until the first sync is completed.
      properties:
        wallets:
          type: string
          enum:
            - ok
            - error
            - syncing
            - retry
          description: |
            Status on fetching wallets for the last sync.
        balances:
          type: string
          enum:
            - ok
            - error
            - syncing
            - retry
          description: |
            Status on fetching balances for the last sync.
        transactions:
          type: string
          enum:
            - ok
            - error
            - syncing
            - retry
          description: |
            Status on fetching transactions for the last sync.
        date:
          type: integer
          format: int64
          description: The timestamp when `status_details` was last updated (milliseconds since Epoch).
    SyncError:
      type: object
      description: Sync error information
      required:
        - name
        - message
      properties:
        name:
          type: string
          enum:
            - LoginFailedError
            - SecurityQuestionError
            - TemporaryFailureError
            - UnknownConnectorError
            - UnhandledConnectorError
          description: >
            Name of the sync error.


            `LoginFailedError`: The provider has returned a login failed
            error. The credentials provided are either invalid or our session
            with the provider has expired. No more sync will be attempted
            until the credentials are updated.


            `SecurityQuestionError`: A security question (2FA) was returned from the
            provider website, waiting for answer. The question is stored in
            the sync error message, and possible answers (if any) are stored in
            the sync error options. Send a PUT request to /accounts/:id with
            the answer in security_answer to complete the account
            authorization.


            `TemporaryFailureError`: A temporary failure has occurred. Our
            system will automatically retry to sync the account. You can
            POST to /accounts/:id/sync to trigger a retry. An account
            staying in TemporaryFailureError for an extended period may indicate
            a problem with the provider and our support team will need to
            investigate.


            `UnknownConnectorError/UnhandledConnectorError`: Behave the same as
            TemporaryFailureError (temporary & account has been set to retry).
            These errors provide our team with more information to faster
            pinpoint the root cause of the issue.
        message:
          type: string
          description: The sync error message.
        options:
          type: array
          items:
            type: string
          description: >-
            (Optional, SecurityQuestionError only) List of answer options for the
            security question. For example when the provider is asking which of the
            user's phone numbers to send the 2FA verification code to.

            When this is provided, the client is supposed to call `PUT /accounts/:id`
            with one of the options as `security_answer`.
    Provider:
      type: object
      properties:
        resource_type:
          type: string
          description: Resource type for this object (which is "provider").
        name:
          type: string
          description: >-
            The provider's unique name that is used as identification within the
            Vezgo system.
        display_name:
          type: string
          description: The provider's human-friendly name, to be used for display purpose.
        logo:
          type: string
          description: The logo URL for the provider.
        auth_type:
          type: string
          description: The provider's authentication type.
          enum:
            - password
            - oauth
            - token
            - wallet
        available_scopes:
          type: array
          items:
            type: object
          description: >-
            The scopes of access allowed by the provider. Not fully implemented,
            scope objects (if available) contain only name for now.
        available_currencies:
          type: [array, 'null']
          items:
            type: string
          description: >-
            The list of currencies supported by the provider. Not yet
            implemented, always null for now.
        status:
          type: [string, 'null']
          description: >-
            The provider's service status. Not yet implemented, always `null` for
            now.
        is_beta:
          type: boolean
          description: >-
            Whether the Vezgo support for this provider is still beta. See
            https://vezgo.com/status for up-to-date development status on all
            providers.
        connect_notice:
          type: [string, 'null']
          description: Notes regarding the provider's connection process.
        credentials:
          type: array
          description: >-
            List of credential information requested by the provider, as an
            array of the following possible values.
          items:
            type: string
            enum:
              - username
              - password
              - key
              - secret
              - user_id
              - wallet
              - network
              - code
        client_id:
          type: string
          description: >-
            The Client ID to use to build oAuth authorize url. Only applicable to providers with `auth_type: 'oauth'`. See Direct API integration.
        authorize_url:
          type: string
          description: >-
            The base oAuth authorize url. Only applicable to providers with `auth_type: 'oauth'`. See Direct API integration.
        instructions:
          type: object
          properties:
            en:
              type: string
              description: Instructions in english
            fr:
              type: string
              description: Instructions in french
          description: Instructions about provider's connection process.
        misc:
          type: object
          description: Contains miscellaneous information about the provider.
          properties:
            chain_id:
              type: number
              description: (EVM providers only) the chain Id, as listed in https://chainlist.org/.
            password:
              type: object
              description: >-
                (Direct API integration) Optional information for the `password` credential. All types of credentials (`username`, `key`, `secret`, ...) might have this information, not just `password`. Example:

                `
                  {
                    "key": {
                      "label": {
                        "en": "Account Key",
                        "fr": "Account Key"
                      },
                      "pattern": "^account-"
                    }
                  }
                `
              properties:
                label:
                  type: object
                  description: Optional label to display in credentials form.
                  properties:
                    en:
                      type: string
                      description: Optional label in English.
                    fr:
                      type: string
                      description: Optional label in French.
                pattern:
                  type: string
                  description: (Regex string) Validation pattern for the credential property.
        features:
          type: object
          description: Supported features for this provider.
          properties:
            account:
              type: boolean
            positions:
              type: boolean
            transactions:
              type: boolean
            nfts:
              type: boolean
            streaming:
              type: boolean
        categories:
          type: array
          description: Provider categories.
          items:
            type: string
            enum:
              - exchange
              - blockchain
              - wallet
        supported_networks:
          type: array
          items:
            type: string
          description: >-
            List of values that can be set to `credentials.network` for wallet providers.
    WalletConnectProvider:
      type: object
      description: Get list of all wallet connect providers.
      properties:
        name:
          type: string
          description: The name of the wallet.
        logo:
          type: string
          format: uri
          description: URL of the wallet's logo.
        desktop:
          type: object
          properties:
            native:
              type: string
              description: Desktop native URL.
            universal:
              type: string
              nullable: true
              description: Desktop universal URL.
        mobile:
          type: object
          properties:
            native:
              type: string
              description: Mobile native URL.
            universal:
              type: string
              description: Mobile universal URL.
    Wallet:
      type: object
      properties:
        id:
          type: string
          description: Unique identifier for a wallet within an account.
        name:
          type: [string, 'null']
          description: Wallet name, for display purpose. Not always available.
        address:
          type: [string, 'null']
          description: The wallet address, for display purpose. Not always available.
        fiat_value:
          type: string
          description: The total fiat value of the wallet (string representation of a number).
        fiat_ticker:
          type: string
          description: The fiat currency in which `fiat_value` is reported.

    Balance:
      type: object
      properties:
        resource_type:
          type: string
          description: Resource type for this object (which is "balance").
        ticker:
          type: string
          description: Ticker symbol for the asset reported by this balance.
        ticker_address:
          type: string
          description: Address of the token, e.g. ERC20 token on an EVM-based connection.
        provider_ticker:
          type: string
          description: Ticker symbol for the asset, as reported by the account's provider. For staked assets, includes .staked suffix, e.g. ETH.staked.
        name:
          type: [string, 'null']
          description: The asset name.
        provider_ticker_name:
          type: string
          description: The asset name, as reported by the account's provider.
        asset_type:
          type: [string, 'null']
          description: The type of asset (e.g. crypto, cash_equivalent, staked, nft, other, etc).
        amount:
          type: string
          description: The current balance of the asset (string representation of a number).
        decimals:
          type: integer
          description: The number of decimal places for the asset's lowest denominator (e.g. 8 for Bitcoin).
        asset_is_verified:
          type: [boolean, 'null']
          description: Whether the asset's amount is verified. false means amount comes "as-is" from the provider without being processed by Vezgo (could be in a wrong format). NOTE - not yet implemented, always `null` for now.
        fiat_value:
          type: string
          description: The fiat value of the asset (string representation of a number).
        fiat_ticker:
          type: string
          description: The fiat currency in which fiat_value is reported.
        fiat_asset_is_verified:
          type: [boolean, 'null']
          description: Whether the asset's fiat_value is verified. false means fiat_value comes "as-is" from the provider without being processed by Vezgo (could be in a wrong format). NOTE - not yet implemented, always `null` for now.
        logo:
          type: [string, 'null']
          description: The logo URL for the asset if it's a cryptocurrency, or `null` if it's a fiat currency.
        updated_at:
          type: integer
          format: int64
          descriprtion: The balance's last updated date (milliseconds since Epoch).
        wallet:
          type: string
          description: ID of the wallet in which this balance is reported.
        misc:
          type: [object, 'null']
          description: Miscellaneous information for the balance. Non standardized and could be `null`. For NFTs, has metadata standardized object and origin_metadata, that is not standardized. For Options, has option_details as a standardized object.
    Transaction:
      type: object
      properties:
        id:
          type: string
          description: The Vezgo transaction identifier.
        resource_type:
          type: string
          description: Resource type for this object (which is "transaction").
        status:
          type: [string, 'null']
          description: The transaction status. Not yet implemented, always `null` for now.
        transaction_type:
          $ref: "#/components/schemas/TransactionType"
        transaction_subtype:
          $ref: "#/components/schemas/TransactionSubtype"
        transaction_hash:
          type: string
          description: The transaction hash from blockchain.
        realized_pnl:
          type: string
          description: Calculated after traders have closed their position (sold the cryptocurrency they hold).
        fiat_calculated_at:
          type: integer
          format: int64
          description: >-
            The date when fiat_values from the transaction parts were calculated
            (milliseconds since Epoch).
        initiated_at:
          type: integer
          format: int64
          description: >-
            The date when the transaction was initiated (milliseconds since
            Epoch).
        confirmed_at:
          type: [integer, 'null']
          format: int64
          description: >-
            The date when the transaction was confirmed (milliseconds since
            Epoch). Could be `null` if the transaction hasn't been confirmed.
        wallet:
          type: string
          description: ID of the wallet in which this transaction is reported.
        misc:
          $ref: "#/components/schemas/Misc"
        parts:
          type: array
          items:
            $ref: "#/components/schemas/TransactionPart"
        fees:
          type: array
          items:
            $ref: "#/components/schemas/TransactionFee"
    TransactionType:
      type: string
      enum:
        - deposit
        - withdrawal
        - trade
        - staking
        - unstaking
        - reward
        - bonus
        - other
      description: |
        The transaction type:
        * `deposit` - (Usually 1-part) transactions where the amount was sent to the account (direction: `received`).
        * `withdrawal` - (Usually 1-part) transactions where the amount was sent from the account (direction: `sent`).
        * `trade` - (Usually 2-part) transactions with both `sent` and `received` directions.
        * `staking` - (Usually 2-part) transactions with staking of a base asset (base asset is sent, staked asset is received).
        * `unstaking` - (Usually 2-part) transactions with unstaking of a staked asset (staked asset is sent, base asset is received).
        * `reward` - (Usually 1-part) transactions with earned reward (staking/learning/etc).
        * `bonus` - (Usually 1-part) transactions with bonus (airdrop/referral bonus/etc).
        * `other` - Other transactions not matching any of the above types.
    TransactionSubtype:
      type: [string, 'null']
      enum:
        - onchain_deposit
        - offchain_deposit
        - fiat_deposit
        - vault_deposit
        - transfer_in
        - receive_payment
        - onchain_withdrawal
        - offchain_withdrawal
        - fiat_withdrawal
        - vault_withdrawal
        - transfer_out
        - liquidation
        - send_payment
        - buy
        - sell
        - trade_crypto
        - trade_fiat
        - income_reward
        - interest_income
        - staking_reward
        - distribution
        - cashback
        - rebate
        - referral_bonus
        - refund
        - cancel
        - fees
        - spam
        - fork
        - mining
      description: |
        The subtype (more detailed type) of the transaction. Could be `null`.

        Subtypes of `deposit`:
        * `onchain_deposit` - Deposit of currency from within blockchain
        * `offchain_deposit` - Deposit of currency from outside the blockchain
        * `fiat_deposit` - Deposit of FIAT currency
        * `vault_deposit` - Deposit of currency into a vault
        * `transfer_in` - Deposit of currency through transfer
        * `receive_payment` - Receiving a payment

        Subtypes of `withdrawal`:
        * `onchain_withdrawal` - Withdrawal of currency from within blockchain
        * `offchain_withdrawal` - Withdrawal of currency from outside the blockchain
        * `fiat_withdrawal` - Withdrawal of FIAT currency
        * `vault_withdrawal` - Withdrawal of currency from a vault
        * `transfer_out` - Withdrawal of currency through transfer
        * `liquidation` - Withdrawal of assets due to liquidation
        * `send_payment` - Sending a payment

        Subtypes of `trade`:
        * `buy` - Buying crypto for FIAT currency
        * `sell` - Selling crypto for FIAT currency
        * `trade_crypto` - Trading crypto for crypto
        * `trade_fiat` - Trading FIAT currency for FIAT currency

        Subtypes of `reward`:
        * `income_reward` - Receiving income rewards
        * `interest_income` - Receiving interest
        * `staking_reward` - Earning rewards from staking

        Subtypes of `bonus`:
        * `distribution` - Receiving an airdrop/giveaway/free coin distribution
        * `cashback` - Receiving cash back
        * `rebate` - Receiving a rebate
        * `referral_bonus` - Earning a bonus through referral

        Subtypes of `other`:
        * `refund` - Receiving a refund/compensation
        * `cancel` - Cancelling a transaction
        * `fees` - Some extra fees
        * `spam` - Spam-related activity
        * `fork` - Occurrence of a blockchain fork
        * `mining` - Earning currency through mining
    Misc:
      type: object
      description: Miscellaneous information for the transaction.
      properties:
        origin_id:
          type: string
          description: >-
            Original transaction id if it comes from an exchange, or transaction
            hash if from a blockchain.
        origin_type:
          type: string
          description: Original transaction type as seen in the blockchain/exchange.
        is_swap:
          type: boolean
          description: Whether the transaction is a swap (supported for Ethereum-like connectors). Is added only for swap transactions (i.e. you won't see "isSwap" as false).
        failed:
          type: boolean
          description: Whether the transaction is failed (supported for Ethereum-like connectors). Is added only for failed transactions (i.e. you won't see "failed" as false).
        incomplete:
          type: array
          description: >-
            List of attributes that are incomplete and thus should not be
            trusted. This should be empty in most cases but if it isn't, it
            might be indicative of an error in our connector and should be
            reported to the Vezgo team.
          items:
            type: string
            enum:
              - fiat_value
              - amount
              - ticker
              - fees
    TransactionPart:
      type: object
      properties:
        id:
          type: string
          description: The Vezgo transaction part identifier. This field is optional.
        direction:
          type: string
          description: The financial direction for this transaction part.
          enum:
            - sent
            - received
        ticker:
          type: string
          description: Ticker symbol for the asset involved in this transaction part.
        provider_ticker:
          type: string
          description: >-
            Ticker symbol for the asset, as reported by the account's provider.
            For staked assets, includes .staked suffix, e.g. ETH.staked.
        ticker_address:
          type: string
          description: Address of the token, e.g. ERC20 token on an EVM-based connection.
        amount:
          type: string
          description: >-
            The asset amount involved in this transaction part (string
            representation of a number).
        asset_is_verified:
          type: [boolean, 'null']
          description: >-
            Whether the transaction's amount is verified. false means amount
            comes "as-is" from the provider without being processed by Vezgo
            (could be in a wrong format). Not yet implemented, always `null` for
            now.
        fiat_ticker:
          type: string
          description: The fiat currency in which fiat_value is reported.
        fiat_value:
          type: string
          description: >-
            The fiat value of the transaction part (string representation of a
            number).
        fiat_asset_is_verified:
          type: [boolean, 'null']
          description: >-
            Whether the transaction's fiat_value is verified. false means
            fiat_value comes "as-is" from the provider without being processed
            by Vezgo (could be in a wrong format).Not yet implemented, always
            `null` for now.
        to_address:
          type: [string, 'null']
          description: Address of the wallet that receives the asset
        from_address:
          type: [string, 'null']
          description: Address of the wallet that sends the asset
        other_parties:
          type: array
          items:
            type: string
          description: >-
            List of other cryptocurrency accounts (source addresses for received
            or recipient addresses for sent) involved in this transaction part.
    TransactionFee:
      type: object
      properties:
        id:
          type: string
          description: >-
            The Vezgo transaction fee identifier. If this is the same as a
            transaction part, it means the fee is applied to that part.
        resource_type:
          type: string
          description: Resource type for this object (which is `transaction_fee`).
        type:
          type: [string, 'null']
          description: >-
            The fee type (or source of fee) for the transaction. Not yet
            implemented, always `null` for now.
        ticker:
          type: string
          description: Ticker symbol for the asset charged in this transaction fee.
        provider_ticker:
          type: string
          description: Ticker symbol for the asset, as reported by the account's provider.
        amount:
          type: string
          description: >-
            The asset amount charged in this transaction fee (string
            representation of a number).
        asset_is_verified:
          type: [boolean, 'null']
          description: >-
            Whether the fee's amount is verified. false means amount comes
            "as-is" from the provider without being processed by Vezgo (could be
            in a wrong format). Not yet implemented, always `null` for now.
        fiat_value:
          type: string
          description: >-
            The fiat value of the transaction fee (string representation of a
            number).
        fiat_ticker:
          type: string
          description: The fiat currency in which fiat_value is reported.
        fiat_asset_is_verified:
          type: [boolean, 'null']
          description: >-
            Whether the fee's fiat_value is verified. false means fiat_value
            comes "as-is" from the provider without being processed by Vezgo
            (could be in a wrong format). Not yet implemented, always `null` for
            now.
    Order:
      type: object
      properties:
        id:
          type: string
          description: Vezgo order identifier.
        account:
          type: string
          description: The account ID of which order belongs to.
        wallet:
          type: string
          description: ID of the wallet in which this order is reported.
        type:
          type: string
          description: Type of order place.
        order_creation_time:
          type: number
          format: int64
          description: >-
            The date when the order was created (milliseconds since
            Epoch).
        order_id:
          type: string
          description: The order identifier from exchange.
        order_status:
          type: string
          description: The status of order.
        side:
          type: string
          description: Side of order.
        time_in_force:
          type: string
          description: Order time force type.
        base_ticker:
          type: string
          description: Base symbol of order
        quote_ticker:
          type: string
          description: Quote symbol of order
        order_quantity:
          type: number
          format: float
          description: Quantity at which order was placed
        order_price:
          type: number
          format: float
          description: Price at which order was placed
        filled_price:
          type: number
          format: float
          description: The price at which order is filled
        filled_quantity:
          type: number
          format: float
          description: Filled quantity
        average_execution_price:
          type: string
          description: Average price at which order is filled
        resource_type:
          type: string
          description: The resource type. Will always be `order`
        updated_at:
          type: number
          format: int64
          description: Last timestamp at which order was updated
        misc:
          $ref: "#/components/schemas/OrderMisc"
    OrderMisc:
      type: object
      description: Miscellaneous information for the order. These properties are optional and can or cannot be returned by a provider.
      properties:
        fee:
          type: string
          description: Fee for order
        fee_currency:
          type: string
          description: Curreny in which fees was paid
        trade_id:
          type: integer
          description: Identifier of trades on order filling
        client_order_id:
          type: string
          description: Client order Identifier
        stop_price:
          type: string
          description: Order stop loss price
        last_event_timestamp:
          type: number
          format: int64
          description: Last event received timestamp
        last_executed_price:
          type: string
          description: Last price at which order was executed
        last_executed_quanity:
          type: string
          description: Last quantity at which order executed
        trailing_time:
          type: integer
          format: int64
          description: Trailing time of order. Can be `null` when not returned from provider.
    HistoryEntry:
      type: object
      properties:
        id:
          type: string
          description: The Vezgo history entry identifier.
        date:
          type: integer
          format: int64
          description: >-
            The date when the history entry was recorded (milliseconds since
            Epoch).
        wallet:
          type: string
          description: ID of the account wallet recorded in this history entry.
        fiat_ticker:
          type: string
          description: >-
            Total fiat value of the account wallet at the recorded date (string
            representation of a number).
        fiat_value:
          type: string
          description: >-
            The fiat currency in which this history entry's fiat_value is
            reported.
  securitySchemes:
    VEZGO_USER_TOKEN:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Get VEZGO_USER_TOKEN token from <b>/auth/token</b> endpoint and
        autnehticate using `Bearer VEZGO_USER_TOKEN`
