Image Voting Vote Endpoint

Route

POST /wp-json/extrachill/v1/image-voting/vote

Purpose

Cast a vote in an image voting block instance. This endpoint allows visitors to vote on images in polls embedded in posts, returning updated vote totals.

Permission

  • POST: Public (no authentication required, anonymous voting supported)

POST Request

{
  "post_id": 42,
  "instance_id": "img_voting_block_1",
  "image_id": "option_2"
}

Request Parameters

Parameter Type Required Notes
post_id integer Yes WordPress post ID containing the image voting block
instance_id string Yes Unique identifier for this specific block instance (generated by block)
image_id string Yes ID of the image option being voted for

POST Response

{
  "voted": true,
  "vote_totals": {
    "option_1": 45,
    "option_2": 67,
    "option_3": 23
  }
}

The response includes the vote status and updated totals for all options in the voting instance.

Error Codes

Code Status Description
invalid_post_id 400 Post ID is invalid or missing
invalid_instance_id 400 Instance ID is invalid or missing
invalid_image_id 400 Image ID is invalid or missing
post_not_found 404 Post with given ID does not exist
block_not_found 404 Image voting block instance not found in post
database_error 500 Failed to record vote

Implementation Notes

  • Votes are stored anonymously by default (IP address or session ID, depending on configuration)
  • One vote per visitor per instance (duplicate votes overwrite previous votes from same source)
  • Vote counts are returned immediately after vote is recorded
  • The voting data is stored persistently and survives page refreshes
  • Voting is enabled on all sites in the network without authentication

Related Endpoints

  • GET /blog/image-voting/vote-count/{post_id}/{instance_id} – Retrieve current vote counts without voting

Usage Examples

Cast a Vote

curl -X POST "http://site.local/wp-json/extrachill/v1/image-voting/vote" 
  -H "Content-Type: application/json" 
  -d '{
    "post_id": 42,
    "instance_id": "img_voting_block_1",
    "image_id": "option_2"
  }'

Vote on Different Image

curl -X POST "http://site.local/wp-json/extrachill/v1/image-voting/vote" 
  -H "Content-Type: application/json" 
  -d '{
    "post_id": 42,
    "instance_id": "img_voting_block_1",
    "image_id": "option_3"
  }'

Frontend Integration

The ExtraChill Blog "Image Voting" block calls this endpoint when a visitor clicks an image option, updating the vote display in real-time without page reload.

Vote Persistence

  • Votes are attributed to the visitor (typically by IP or session)
  • Changing vote for same block instance updates the previous vote (one vote per visitor per instance)
  • Vote data persists across browser sessions
  • Voting history is not exposed to prevent gaming the voting system