Endpoints Used
GET /partner/v1/governance/{mint}POST /partner/v1/governance/votesPOST /partner/v1/governance/proposals/settlePOST /partner/v1/governance/proposals/update-content
Reading a Token’s Governance
404 governance_not_found.
The
viewerVotes array contains the connected user’s own votes, derived from the access token rather than from a caller-supplied address. You can use it to show that a user has already voted without making a second request and without requesting a scope.What the Config Parameters Mean
Four parameters determine whether a proposal can pass, and we recommend surfacing them in your UI before a user commits tokens to a vote.
Basis points are hundredths of a percent, so
6600 is 66% and 1500 is 15%.
A proposal must clear both participation thresholds as well as the approval threshold. This means a change with overwhelming support can still fail for lack of turnout, which is the outcome most worth explaining to users.
The Mutability Window
Every token launches with a finite window during which its metadata can be changed at all. AftermutableUntilUnix passes, metadata locks permanently whether or not anyone votes.
- The window can be extended once by proposal. A second attempt returns
mutability_already_extended. - Extensions are capped, and an over-long request returns
mutability_extension_exceeds_cap. - Holders can end the window early by passing a finalize-metadata proposal.
- Individual fields lock independently, so check the
*Lockedflags before offering an edit.
Voting
Voting requires thegovernance:vote scope.
cURL
votes/withdraw after settlement.
A second vote on the same proposal returns already_voted. To change a vote, cancel the existing one first.
See Voting endpoints for cancel, withdraw, and settle.
Settling
Voting coming to an end does not apply the result. Someone has to callproposals/settle, which computes the outcome and executes the action if the proposal passed. The operation is permissionless, so any token holder with governance:vote can crank it, including yours.
Until a proposal is settled, bonds and locked vote tokens remain locked. If your product surfaces governance, settling closed proposals on your users’ behalf is a genuinely useful thing to offer.
Proposing
Proposing requires thegovernance:propose scope. Creating a proposal locks a bond from the user’s wallet, sized at proposalBondBps of supply, which is reclaimed with bonds/withdraw after settlement.
Only one proposal can be active per governance at a time, and a second returns active_proposal_exists.
Changing Metadata
Theproposals/update-content endpoint is the only multipart endpoint in the Partner API, because it can carry a new image. Send only the fields you want to change, since omitted fields are left alone and empty strings clear text fields.
cURL
Validation failures on
website, twitter, and telegram currently surface as 500 internal rather than 400, and they are permanent rather than transient. We recommend validating these three fields on your own side before submitting. See Error Handling.Write Responses
All governance writes respond in the same shape, with identifiers included where they apply.update-content endpoint additionally returns metadataUri and imageUri for the newly pinned content.