Skip to main content
POST
/
accounts
/
{address}
/
proposals
/
{proposal_address}
/
vote
Vote on a proposal
curl --request POST \
  --url https://grid.squads.xyz/api/grid/v1/accounts/{address}/proposals/{proposal_address}/vote \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --header 'x-grid-environment: <x-grid-environment>' \
  --data '
{
  "action": "approve",
  "signers": [
    "<string>"
  ]
}
'
{
  "data": {
    "transaction": "<string>",
    "signers": [
      "<string>"
    ]
  },
  "metadata": {
    "request_id": "<string>",
    "timestamp": "2023-11-07T05:31:56Z"
  }
}
Submits votes on an existing proposal. Multiple signers can vote in a single request.

Vote Actions

The available action depends on the proposal’s current status:
StatusAvailable Actions
Activeapprove, reject
Approvedcancel

Reject vs Cancel

reject and cancel are not interchangeable—they operate at different lifecycle stages.
reject — Block a proposal during voting (status: Active)
  • Use when you disagree with the proposed action
  • Prevents the proposal from reaching approval
cancel — Stop an already-approved proposal (status: Approved)
  • Use when circumstances have changed after approval
  • Prevents execution of an approved proposal
Active → approve/reject → Approved → cancel → Cancelled
                ↓                       ↓
           Rejected                  Executed

Automatic Duplicate Filtering

The API filters out signers who have already voted with the same action. If all requested signers have already voted, the API returns an error.
// If signerA already approved, only signerB is included
const response = await grid.vote(accountAddress, proposalAddress, {
  signers: [signerA, signerB],
  action: "approve"
});
// response.signers = [signerB]

Permission Requirements

All signers must have CAN_VOTE permission (mask includes value 2).

Authorizations

Authorization
string
header
required

Your Grid API key from the Grid Dashboard

Headers

x-grid-environment
string
required

Target Solana environment

Path Parameters

address
string
required

Smart account address

proposal_address
string
required

Proposal address

Body

application/json
action
enum<string>
required
Available options:
approve,
reject,
cancel
signers
string[]

Response

Vote successfully submitted

data
object
required
metadata
object
required