swagger: '2.0'
info:
  version: '1.1.0'
  title: Light client daemon to interface with Cosmos baseserver via REST
  description: Specification for the LCD provided by `gaiacli advanced rest-server`


securityDefinitions:
  kms:
    type: basic

paths:
  /version:
    get:
      summary: Version of the light client daemon
      description: Get the version of the LCD running locally to compare against expected
      responses:
        200:
          description: Plaintext version i.e. "v0.5.0"
  /node_version:
    get:
      summary: Version of the connected node
      description: Get the version of the SDK running on the connected node to compare against expected
      responses:
        200:
          description: Plaintext version i.e. "v0.5.0"
  /node_info:
    get:
      description: Only the node info. Block information can be queried via /block/latest
      summary: The propertied of the connected node
      produces:
        - application/json
      responses:
        200:
          description: Node status
          schema:
            type: object
            properties:
              pub_key:
                $ref: '#/definitions/PubKey'
              moniker:
                type: string
                example: 159.89.198.221
              network:
                type: string
                example: gaia-2
              remote_addr:
                type: string
              listen_addr:
                type: string
                example: 192.168.56.1:26656
              version:
                description: Tendermint version
                type: string
                example: 0.15.0
              other:
                description: more information on versions
                type: array
                items:
                  type: string
  /syncing:
    get:
      summary: Syncing state of node
      description: Get if the node is currently syning with other nodes
      responses:
        200:
          description: '"true" or "false"'

  /keys:
    get:
      summary: List of accounts stored locally
      produces:
        - application/json
      responses:
        200:
          description: Array of accounts
          schema:
            type: array
            items:
              $ref: '#/definitions/Account'
    post:
      summary: Create a new account locally
      consumes:
        - application/json
      parameters:
        - in: body
          name: account
          description: The account to create
          schema:
            type: object
            required:
              - name
              - password
              - seed
            properties:
              name:
                type: string
              password:
                type: string
              seed:
                type: string
      responses:
        200:
          description: Returns address of the account created
  /keys/seed:
    get:
      summary: Create a new seed to create a new account with
      produces:
        - application/json
      responses:
        200:
          description: 16 word Seed
          schema:
            type: string
  /keys/{name}:
    parameters:
      - in: path
        name: name
        description: Account name
        required: true
        type: string
    get:
      summary: Get a certain locally stored account
      produces:
        - application/json
      responses:
        200:
          description: Locally stored account
          schema:
            $ref: "#/definitions/Account"
        404:
          description: Account is not available
    put:
      summary: Update the password for this account in the KMS
      consumes:
        - application/json
      parameters:
      - in: body
        name: account
        description: The new and old password
        schema:
          type: object
          required:
            - new_password
            - old_password
          properties:
            new_password:
              type: string
            old_password:
              type: string
      responses:
        200:
          description: Updated password
        401:
          description: Password is wrong
        404:
          description: Account is not available
    delete:
      summary: Remove an account
      consumes:
        - application/json
      parameters:
      - in: body
        name: account
        description: The password of the account to remove from the KMS
        schema:
          type: object
          required:
            - password
          properties:
            password:
              type: string
      responses:
        200:
          description: Removed account
        401:
          description: Password is wrong
        404:
          description: Account is not available
# /accounts/send:
  #   post:
  #     summary: Send coins (build -> sign -> send)
  #     security:
  #       - sign: []
  #     requestBody:
  #       content:
  #         application/json:
  #           schema:
  #             type: object
  #             properties:
  #               fees:
  #                 $ref: "#/definitions/Coins"
  #               outputs:
  #                 type: array
  #                 items:
  #                   type: object
  #                   properties:
  #                     pub_key:
  #                       $ref: "#/definitions/PubKey"
  #                     amount:
  #                       type: array
  #                       items:
  #                         $ref: "#/definitions/Coins"
  #     responses:
  #       202:
  #         description: Tx was send and will probably be added to the next block
  #       400:
  #         description: The Tx was malformated

  /accounts/{address}:
    parameters:
      - in: path
        name: address
        description: Account address in bech32 format
        required: true
        type: string
    get:
      summary: Get the account balances
      produces:
        - application/json
      responses:
        200:
          description: Account balances
          schema:
            $ref: "#/definitions/Balance"
        204:
          description: There is no data for the requested account. This is not a 404 as the account might exist, just does not hold data.
  /accounts/{address}/send:
    parameters:
      - in: path
        name: address
        description: Account address in bech32 format
        required: true
        type: string
    post:
      summary: Send coins (build -> sign -> send)
      security:
        - kms: []
      consumes:
        - application/json
      parameters:
      - in: body
        name: account
        description: The password of the account to remove from the KMS
        schema:
          type: object
          properties:
            name:
              type: string
            password:
              type: string
            amount:
              type: array
              items:
                $ref: "#/definitions/Coins"
            chain_id:
              type: string
            squence:
              type: number
      responses:
        202:
          description: Tx was send and will probably be added to the next block
        400:
          description: The Tx was malformated
  /blocks/latest:
    get:
      summary: Get the latest block
      produces:
        - application/json
      responses:
        200:
          description: The latest block
          schema:
            $ref: "#/definitions/Block"
  /blocks/{height}:
    parameters:
      - in: path
        name: height
        description: Block height
        required: true
        type: number
    get:
      summary: Get a block at a certain height
      produces:
        - application/json
      responses:
        200:
          description: The block at a specific height
          schema:
            $ref: "#/definitions/Block"
        404:
          description: Block at height is not available
  /validatorsets/latest:
    get:
      summary: Get the latest validator set
      produces:
        - application/json
      responses:
        200:
          description: The validator set at the latest block height
          schema:
            type: object
            properties:
              block_height:
                type: number
              validators:
                type: array
                items:
                  $ref: "#/definitions/Validator"
  /validatorsets/{height}:
    parameters:
      - in: path
        name: height
        description: Block height
        required: true
        type: number
    get:
      summary: Get a validator set a certain height
      produces:
        - application/json
      responses:
        200:
          description: The validator set at a specific block height
          schema:
            type: object
            properties:
              block_height:
                type: number
              validators:
                type: array
                items:
                  $ref: "#/definitions/Validator"
        404:
          description: Block at height not available
  # /txs:
  #   parameters:
  #     - in: query
  #       name: tag
  #       schema:
  #         type: string
  #         example: "coin.sender=EE5F3404034C524501629B56E0DDC38FAD651F04"
  #       required: true
  #     - in: query
  #       name: page
  #       description: Pagination page
  #       schema:
  #         type: number
  #         default: 0
  #     - in: query
  #       name: size
  #       description: Pagination size
  #       schema:
  #         type: number
  #         default: 50
  #   get:
  #     summary: Query Tx
  #     responses:
  #       200:
  #         description: All Tx matching the provided tags
  #         content:
  #           application/json:
  #             schema:
  #               type: array
  #               items:
  #                 $ref: "#/definitions/Tx"
  #       404:
  #         description: Pagination is out of bounds
  # /txs/sign:
  #   post:
  #     summary: Sign a Tx
  #     description: Sign a Tx providing locally stored account and according password
  #     security:
  #       - sign: []
  #     requestBody:
  #       content:
  #         application/json:
  #           schema:
  #             $ref: "#/definitions/TxBuild"
  #     responses:
  #       200:
  #         description: The signed Tx
  #         content:
  #           application/json:
  #             schema:
  #               $ref: "#/definitions/TxSigned"
  #       401:
  #         description: Account name and/or password where wrong
  # /txs/broadcast:
  #   post:
  #     summary: Send signed Tx
  #     requestBody:
  #       content:
  #         application/json:
  #           schema:
  #             $ref: "#/definitions/TxSigned"
  #     responses:
  #       202:
  #         description: Tx was send and will probably be added to the next block
  #       400:
  #         description: The Tx was malformated
  /txs/{hash}:
    parameters:
      - in: path
        name: hash
        description: Tx hash
        required: true
        type: string
    get:
      summary: Get a Tx by hash
      produces:
        - application/json
      responses:
        200:
          description: Tx with the provided hash
          schema:
            $ref: "#/definitions/Tx"
        404:
          description: Tx not available for provided hash
  # /delegates:
  #   parameters:
  #     - in: query
  #       name: delegator
  #       description: Query for all delegates a delegator has stake with
  #       schema:
  #         $ref: "#/definitions/Address"
  #   get:
  #     summary: Get a list of canidates/delegates/validators (optionally filtered by delegator)
  #     responses:
  #       200:
  #         description: List of delegates, filtered by provided delegator address
  #         content:
  #           application/json:
  #             schema:
  #               type: array
  #               items:
  #                 $ref: "#/definitions/Delegate"
  # /delegates/bond:
  #   post:
  #     summary: Bond atoms (build -> sign -> send)
  #     security:
  #       - sign: []
  #     requestBody:
  #       content:
  #         application/json:
  #           schema:
  #             type: array
  #             items:
  #               type: object
  #               properties:
  #                 amount:
  #                   $ref: "#/definitions/Coins"
  #                 pub_key:
  #                   $ref: "#/definitions/PubKey"
  #     responses:
  #       202:
  #         description: Tx was send and will probably be added to the next block
  #       400:
  #         description: The Tx was malformated
  # /delegates/unbond:
  #   post:
  #     summary: Unbond atoms (build -> sign -> send)
  #     security:
  #       - sign: []
  #     requestBody:
  #       content:
  #         application/json:
  #           schema:
  #             type: array
  #             items:
  #               type: object
  #               properties:
  #                 amount:
  #                   $ref: "#/definitions/Coins"
  #                 pub_key:
  #                   $ref: "#/definitions/PubKey"
  #     responses:
  #       202:
  #         description: Tx was send and will probably be added to the next block
  #       400:
  #         description: The Tx was malformated
  # /delegates/{pubkey}:
  #   parameters:
  #     - in: path
  #       name: pubkey
  #       description: Pubkey of a delegate
  #       required: true
  #       schema:
  #         type: string
  #         example: 81B11E717789600CC192B26F452A983DF13B985EE75ABD9DD9E68D7BA007A958
  #   get:
  #     summary: Get a certain canidate/delegate/validator
  #     responses:
  #       200:
  #         description: Delegate for specified pub_key
  #         content:
  #           application/json:
  #             schema:
  #               $ref: "#/definitions/Delegate"
  #       404:
  #         description: No delegate found for provided pub_key
  # /delegates/{pubkey}/bond:
  #   parameters:
  #     - in: path
  #       name: pubkey
  #       description: Pubkey of a delegate
  #       required: true
  #       schema:
  #         type: string
  #         example: 81B11E717789600CC192B26F452A983DF13B985EE75ABD9DD9E68D7BA007A958
  #   post:
  #     summary: Bond atoms (build -> sign -> send)
  #     security:
  #       - sign: []
  #     requestBody:
  #       content:
  #         application/json:
  #           schema:
  #             type: object
  #             properties:
  #               amount:
  #                 $ref: "#/definitions/Coins"
  #     responses:
  #       202:
  #         description: Tx was send and will probably be added to the next block
  #       400:
  #         description: The Tx was malformated
  # /delegates/{pubkey}/unbond:
  #   parameters:
  #     - in: path
  #       name: pubkey
  #       description: Pubkey of a delegate
  #       required: true
  #       schema:
  #         type: string
  #         example: 81B11E717789600CC192B26F452A983DF13B985EE75ABD9DD9E68D7BA007A958
  #   post:
  #     summary: Unbond atoms  (build -> sign -> send)
  #     security:
  #       - sign: []
  #     requestBody:
  #       content:
  #         application/json:
  #           schema:
  #             type: object
  #             properties:
  #               amount:
  #                 $ref: "#/definitions/Coins"
  #     responses:
  #       202:
  #         description: Tx was send and will probably be added to the next block
  #       400:
  #         description: The Tx was malformated

definitions:
  Address:
    type: string
    description: bech32 encoded addres
    example: cosmosaccaddr:zgnkwr7eyyv643dllwfpdwensmgdtz89yu73zq
  ValidatorAddress:
    type: string
    description: bech32 encoded addres
    example: cosmosvaladdr:zgnkwr7eyyv643dllwfpdwensmgdtz89yu73zq
  PubKey:
    type: string
    description: bech32 encoded public key
    example: cosmosaccpub:zgnkwr7eyyv643dllwfpdwensmgdtz89yu73zq
  ValidatorPubKey:
    type: string
    description: bech32 encoded public key
    example: cosmosvalpub:zgnkwr7eyyv643dllwfpdwensmgdtz89yu73zq
  Coins:
    type: object
    properties:
      denom:
        type: string
        example: steak
      amount:
        type: number
        example: 50
  Hash:
    type: string
    example: EE5F3404034C524501629B56E0DDC38FAD651F04
  Tx:
    type: object
    properties:
      type:
        type: string
        enum:
          - stake/delegate
      data:
        type: object
  TxChain:
    type: object
    properties:
      type:
        type: string
        default: chain/tx
      data:
        type: object
        properties:
          chain_id:
            type: string
            example: gaia-2
          expires_at:
            type: number
            example: 0
          tx:
            type: object
            properties:
              type:
                type: string
                default: nonce
              data:
                type: object
                properties:
                  sequence:
                    type: number
                    example: 0
                  signers:
                    type: array
                    items:
                      type: object
                      properties:
                        chain:
                          type: string
                          example: ''
                        app:
                          type: string
                          default: sigs
                        addr:
                          $ref: "#/definitions/Address"
                  tx:
                    $ref: "#/definitions/Tx"
  TxBuild:
    type: object
    properties:
      type:
        type: string
        default: sigs/one
      data:
        type: object
        properties:
          tx:
            $ref: "#/definitions/Tx"
          signature:
            type: object
            properties:
              Sig:
                type: string
                default: ''
              Pubkey:
                type: string
                default: ''
  TxSigned:
    type: object
    properties:
      type:
        type: string
        default: sigs/one
      data:
        type: object
        properties:
          tx:
            $ref: "#/definitions/Tx"
          signature:
            type: object
            properties:
              Sig:
                type: string
                example: 81B11E717789600CC192B26F452A983DF13B985EE75ABD9DD9E68D7BA007A958
              Pubkey:
                $ref: "#/definitions/PubKey"
  Account:
    type: object
    properties:
      name:
        type: string
        example: Main Account
      address:
        $ref: "#/definitions/Address"
      pub_key:
        $ref: "#/definitions/PubKey"
  Balance:
    type: object
    properties:
      height:
        type: number
        example: 123456
      coins:
        type: array
        items:
          $ref: "#/definitions/Coins"
      credit:
        type: array
        items:
          type: object
  BlockID:
    type: object
    properties:
      hash:
        $ref: "#/definitions/Hash"
      parts:
        type: object
        properties:
          total:
            type: number
            example: 0
          hash:
            $ref: "#/definitions/Hash"
  Block:
    type: object
    properties:
      header:
        type: object
        properties:
          chain_id:
            type: string
            example: gaia-2
          height:
            type: number
            example: 1
          time:
            type: string
            example: '2017-12-30T05:53:09.287+01:00'
          num_txs:
            type: number
            example: 0
          last_block_id:
            $ref: "#/definitions/BlockID"
          total_txs:
            type: number
            example: 35
          last_commit_hash:
            $ref: "#/definitions/Hash"
          data_hash:
            $ref: "#/definitions/Hash"
          validators_hash:
            $ref: "#/definitions/Hash"
          consensus_hash:
            $ref: "#/definitions/Hash"
          app_hash:
            $ref: "#/definitions/Hash"
          last_results_hash:
            $ref: "#/definitions/Hash"
          evidence_hash:
            $ref: "#/definitions/Hash"
      txs:
        type: array
        items:
          $ref: "#/definitions/Tx"
      evidence:
        type: array
        items:
          type: object
      last_commit:
        type: object
        properties:
          blockID:
            $ref: "#/definitions/BlockID"
          precommits:
            type: array
            items:
              type: object
  Validator:
    type: object
    properties:
      address:
        $ref: '#/definitions/ValidatorAddress'
      pub_key:
        $ref: "#/definitions/ValidatorPubKey"
      power:
        type: number
        example: 1000
      accum:
        type: number
        example: 1000
# Added by API Auto Mocking Plugin
host: virtserver.swaggerhub.com
basePath: /faboweb1/Cosmos-LCD-2/1.0.0
schemes:
 - https
