> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cosmos.network/llms.txt
> Use this file to discover all available pages before exploring further.

# Proposal (v1)

> gRPC: `cosmos.gov.v1.Query/Proposal` ([reference](/sdk/next/api-reference/grpc/gov#proposal-v1))

Proposal queries proposal details based on ProposalID.



## OpenAPI

````yaml /sdk/next/api-reference/rest/openapi.yaml get /cosmos/gov/v1/proposals/{proposalId}
openapi: 3.0.0
info:
  title: Cosmos SDK REST API
  description: >-
    HTTP bindings for the gRPC query services of the standard Cosmos SDK
    modules, documenting Cosmos SDK v0.55 (unreleased).


    Generated from cosmos/cosmos-sdk at commit
    c1126e4e5460571378bf9bd9c49cce476b0791e2 on ref `main`.


    A chain exposes only the modules its application registers, so it may serve
    a subset of these routes alongside routes of its own.
  version: v0.55 (unreleased)
servers:
  - url: https://cosmos-rest.publicnode.com
    description: >-
      Community-run public endpoint serving Cosmos Hub. Not operated by the
      Cosmos SDK team, and running a different SDK version than these pages
      document. Endpoints for modules the chain does not include return 501.
  - url: http://localhost:1317
    description: Your own node. Requires api.enable in app.toml.
security: []
tags:
  - name: auth
  - name: authz
  - name: bank
  - name: base
  - name: consensus
  - name: distribution
  - name: epochs
  - name: evidence
  - name: feegrant
  - name: gov
  - name: mint
  - name: slashing
  - name: staking
  - name: tx
  - name: upgrade
paths:
  /cosmos/gov/v1/proposals/{proposalId}:
    get:
      tags:
        - gov
      summary: Proposal (v1)
      description: >-
        gRPC: `cosmos.gov.v1.Query/Proposal`
        ([reference](/sdk/next/api-reference/grpc/gov#proposal-v1))


        Proposal queries proposal details based on ProposalID.
      operationId: gov_v1_Proposal
      parameters:
        - name: proposalId
          description: proposal_id defines the unique id of the proposal.
          in: path
          required: true
          schema:
            type: string
            format: uint64
      responses:
        '200':
          description: A successful response.
          content:
            '*/*':
              schema:
                type: object
                properties:
                  proposal:
                    description: proposal is the requested governance proposal.
                    type: object
                    properties:
                      id:
                        type: string
                        format: uint64
                        description: id defines the unique id of the proposal.
                      messages:
                        type: array
                        items:
                          type: object
                          properties:
                            '@type':
                              type: string
                              description: >-
                                A URL/resource name that uniquely identifies the
                                type of the serialized

                                protocol buffer message. This string must
                                contain at least

                                one "/" character. The last segment of the URL's
                                path must represent

                                the fully qualified name of the type (as in

                                `path/google.protobuf.Duration`). The name
                                should be in a canonical form

                                (e.g., leading "." is not accepted).


                                In practice, teams usually precompile into the
                                binary all types that they

                                expect it to use in the context of Any. However,
                                for URLs which use the

                                scheme `http`, `https`, or no scheme, one can
                                optionally set up a type

                                server that maps type URLs to message
                                definitions as follows:


                                * If no scheme is provided, `https` is assumed.

                                * An HTTP GET on the URL must yield a
                                [google.protobuf.Type][]
                                  value in binary format, or produce an error.
                                * Applications are allowed to cache lookup
                                results based on the
                                  URL, or have them precompiled into a binary to avoid any
                                  lookup. Therefore, binary compatibility needs to be preserved
                                  on changes to types. (Use versioned type names to manage
                                  breaking changes.)

                                Note: this functionality is not currently
                                available in the official

                                protobuf release, and it is not used for type
                                URLs beginning with

                                type.googleapis.com. As of May 2023, there are
                                no widely used type server

                                implementations and no plans to implement one.


                                Schemes other than `http`, `https` (or the empty
                                scheme) might be

                                used with implementation specific semantics.
                          additionalProperties: {}
                          description: >-
                            `Any` contains an arbitrary serialized protocol
                            buffer message along with a

                            URL that describes the type of the serialized
                            message.


                            Protobuf library provides support to pack/unpack Any
                            values in the form

                            of utility functions or additional generated methods
                            of the Any type.


                            Example 1: Pack and unpack a message in C++.

                                Foo foo = ...;
                                Any any;
                                any.PackFrom(foo);
                                ...
                                if (any.UnpackTo(&foo)) {
                                  ...
                                }

                            Example 2: Pack and unpack a message in Java.

                                Foo foo = ...;
                                Any any = Any.pack(foo);
                                ...
                                if (any.is(Foo.class)) {
                                  foo = any.unpack(Foo.class);
                                }
                                // or ...
                                if (any.isSameTypeAs(Foo.getDefaultInstance())) {
                                  foo = any.unpack(Foo.getDefaultInstance());
                                }

                             Example 3: Pack and unpack a message in Python.

                                foo = Foo(...)
                                any = Any()
                                any.Pack(foo)
                                ...
                                if any.Is(Foo.DESCRIPTOR):
                                  any.Unpack(foo)
                                  ...

                             Example 4: Pack and unpack a message in Go

                                 foo := &pb.Foo{...}
                                 any, err := anypb.New(foo)
                                 if err != nil {
                                   ...
                                 }
                                 ...
                                 foo := &pb.Foo{}
                                 if err := any.UnmarshalTo(foo); err != nil {
                                   ...
                                 }

                            The pack methods provided by protobuf library will
                            by default use

                            'type.googleapis.com/full.type.name' as the type URL
                            and the unpack

                            methods only use the fully qualified type name after
                            the last '/'

                            in the type URL, for example "foo.bar.com/x/y.z"
                            will yield type

                            name "y.z".


                            JSON

                            ====

                            The JSON representation of an `Any` value uses the
                            regular

                            representation of the deserialized, embedded
                            message, with an

                            additional field `@type` which contains the type
                            URL. Example:

                                package google.profile;
                                message Person {
                                  string first_name = 1;
                                  string last_name = 2;
                                }

                                {
                                  "@type": "type.googleapis.com/google.profile.Person",
                                  "firstName": <string>,
                                  "lastName": <string>
                                }

                            If the embedded message type is well-known and has a
                            custom JSON

                            representation, that representation will be embedded
                            adding a field

                            `value` which holds the custom JSON in addition to
                            the `@type`

                            field. Example (for message
                            [google.protobuf.Duration][]):

                                {
                                  "@type": "type.googleapis.com/google.protobuf.Duration",
                                  "value": "1.212s"
                                }
                        description: >-
                          messages are the arbitrary messages to be executed if
                          the proposal passes.
                        nullable: true
                      status:
                        description: status defines the proposal status.
                        type: string
                        enum:
                          - PROPOSAL_STATUS_UNSPECIFIED
                          - PROPOSAL_STATUS_DEPOSIT_PERIOD
                          - PROPOSAL_STATUS_VOTING_PERIOD
                          - PROPOSAL_STATUS_PASSED
                          - PROPOSAL_STATUS_REJECTED
                          - PROPOSAL_STATUS_FAILED
                        default: PROPOSAL_STATUS_UNSPECIFIED
                        nullable: true
                      final_tally_result:
                        description: >-
                          final_tally_result is the final tally result of the
                          proposal. When

                          querying a proposal via gRPC, this field is not
                          populated until the

                          proposal's voting period has ended.
                        type: object
                        properties:
                          yes_count:
                            type: string
                            description: >-
                              yes_count is the number of yes votes on a
                              proposal.
                          abstain_count:
                            type: string
                            description: >-
                              abstain_count is the number of abstain votes on a
                              proposal.
                          no_count:
                            type: string
                            description: no_count is the number of no votes on a proposal.
                          no_with_veto_count:
                            type: string
                            description: >-
                              no_with_veto_count is the number of no with veto
                              votes on a proposal.
                        nullable: true
                        additionalProperties: false
                      submit_time:
                        type: string
                        format: date-time
                        description: submit_time is the time of proposal submission.
                        nullable: true
                      deposit_end_time:
                        type: string
                        format: date-time
                        description: deposit_end_time is the end time for deposition.
                        nullable: true
                      total_deposit:
                        type: array
                        items:
                          type: object
                          properties:
                            denom:
                              type: string
                            amount:
                              type: string
                          description: >-
                            Coin defines a token with a denomination and an
                            amount.


                            NOTE: The amount field is an Int which implements
                            the custom method

                            signatures required by gogoproto.
                          additionalProperties: false
                        description: total_deposit is the total deposit on the proposal.
                        nullable: true
                      voting_start_time:
                        type: string
                        format: date-time
                        description: >-
                          voting_start_time is the starting time to vote on a
                          proposal.
                        nullable: true
                      voting_end_time:
                        type: string
                        format: date-time
                        description: >-
                          voting_end_time is the end time of voting on a
                          proposal.
                        nullable: true
                      metadata:
                        type: string
                        title: >-
                          metadata is any arbitrary metadata attached to the
                          proposal.

                          the recommended format of the metadata is to be found
                          here:

                          https://docs.cosmos.network/v0.47/modules/gov#proposal-3
                      title:
                        type: string
                        title: title is the title of the proposal
                      summary:
                        type: string
                        title: summary is a short summary of the proposal
                      proposer:
                        type: string
                        title: proposer is the address of the proposal submitter
                      expedited:
                        type: boolean
                        title: expedited defines if the proposal is expedited
                      failed_reason:
                        type: string
                        title: >-
                          failed_reason defines the reason why the proposal
                          failed
                    nullable: true
                description: >-
                  QueryProposalResponse is the response type for the
                  Query/Proposal RPC method.
                additionalProperties: false
        default:
          description: An unexpected error response.
          content:
            '*/*':
              schema:
                type: object
                properties:
                  code:
                    type: integer
                    format: int32
                  message:
                    type: string
                  details:
                    type: array
                    items:
                      type: object
                      properties:
                        '@type':
                          type: string
                          description: >-
                            A URL/resource name that uniquely identifies the
                            type of the serialized

                            protocol buffer message. This string must contain at
                            least

                            one "/" character. The last segment of the URL's
                            path must represent

                            the fully qualified name of the type (as in

                            `path/google.protobuf.Duration`). The name should be
                            in a canonical form

                            (e.g., leading "." is not accepted).


                            In practice, teams usually precompile into the
                            binary all types that they

                            expect it to use in the context of Any. However, for
                            URLs which use the

                            scheme `http`, `https`, or no scheme, one can
                            optionally set up a type

                            server that maps type URLs to message definitions as
                            follows:


                            * If no scheme is provided, `https` is assumed.

                            * An HTTP GET on the URL must yield a
                            [google.protobuf.Type][]
                              value in binary format, or produce an error.
                            * Applications are allowed to cache lookup results
                            based on the
                              URL, or have them precompiled into a binary to avoid any
                              lookup. Therefore, binary compatibility needs to be preserved
                              on changes to types. (Use versioned type names to manage
                              breaking changes.)

                            Note: this functionality is not currently available
                            in the official

                            protobuf release, and it is not used for type URLs
                            beginning with

                            type.googleapis.com. As of May 2023, there are no
                            widely used type server

                            implementations and no plans to implement one.


                            Schemes other than `http`, `https` (or the empty
                            scheme) might be

                            used with implementation specific semantics.
                      additionalProperties: {}
                      description: >-
                        `Any` contains an arbitrary serialized protocol buffer
                        message along with a

                        URL that describes the type of the serialized message.


                        Protobuf library provides support to pack/unpack Any
                        values in the form

                        of utility functions or additional generated methods of
                        the Any type.


                        Example 1: Pack and unpack a message in C++.

                            Foo foo = ...;
                            Any any;
                            any.PackFrom(foo);
                            ...
                            if (any.UnpackTo(&foo)) {
                              ...
                            }

                        Example 2: Pack and unpack a message in Java.

                            Foo foo = ...;
                            Any any = Any.pack(foo);
                            ...
                            if (any.is(Foo.class)) {
                              foo = any.unpack(Foo.class);
                            }
                            // or ...
                            if (any.isSameTypeAs(Foo.getDefaultInstance())) {
                              foo = any.unpack(Foo.getDefaultInstance());
                            }

                         Example 3: Pack and unpack a message in Python.

                            foo = Foo(...)
                            any = Any()
                            any.Pack(foo)
                            ...
                            if any.Is(Foo.DESCRIPTOR):
                              any.Unpack(foo)
                              ...

                         Example 4: Pack and unpack a message in Go

                             foo := &pb.Foo{...}
                             any, err := anypb.New(foo)
                             if err != nil {
                               ...
                             }
                             ...
                             foo := &pb.Foo{}
                             if err := any.UnmarshalTo(foo); err != nil {
                               ...
                             }

                        The pack methods provided by protobuf library will by
                        default use

                        'type.googleapis.com/full.type.name' as the type URL and
                        the unpack

                        methods only use the fully qualified type name after the
                        last '/'

                        in the type URL, for example "foo.bar.com/x/y.z" will
                        yield type

                        name "y.z".


                        JSON

                        ====

                        The JSON representation of an `Any` value uses the
                        regular

                        representation of the deserialized, embedded message,
                        with an

                        additional field `@type` which contains the type URL.
                        Example:

                            package google.profile;
                            message Person {
                              string first_name = 1;
                              string last_name = 2;
                            }

                            {
                              "@type": "type.googleapis.com/google.profile.Person",
                              "firstName": <string>,
                              "lastName": <string>
                            }

                        If the embedded message type is well-known and has a
                        custom JSON

                        representation, that representation will be embedded
                        adding a field

                        `value` which holds the custom JSON in addition to the
                        `@type`

                        field. Example (for message
                        [google.protobuf.Duration][]):

                            {
                              "@type": "type.googleapis.com/google.protobuf.Duration",
                              "value": "1.212s"
                            }

````