---
title: "Update up to 100 posts with independent per-item results"
method: PATCH
path: "/posts/bulk"
---

# Update up to 100 posts with independent per-item results

`PATCH /posts/bulk`

## Request

- Base URL: `https://app.voteship.app/api/v1`
- URL: `https://app.voteship.app/api/v1/posts/bulk`
- Auth: HTTP bearer

HTTP 200 may contain mixed item statuses. Items run in order in independent transactions; failures do not roll back successes. Inspect every item. One batch consumes one rate-limit request. Invalid envelopes return 400.

## Request body

- object
  - `notify` boolean: Email post subscribers only on an actual status change. Defaults false. Audit records and webhooks still fire; external consumers control their own notifications.
  - `items` object[], required
    - `title` string
    - `description` string, nullable
    - `status` 'PENDING' | 'APPROVED' | 'IN_PROGRESS' | 'COMPLETE' | 'CLOSED' | 'ARCHIVED'
    - `tagIds` string[]
    - `metadata` object, nullable: Private context. Replaces the object; null clears it. Omitted from public responses; available to secret-key APIs and trusted admin webhooks.
    - `notify` boolean: Email post subscribers only on an actual status change. Defaults false. Audit records and webhooks still fire; external consumers control their own notifications.
    - `id` string, required

## Response `200`

Update up to 100 posts with independent per-item results

- object
  - `data` object[]
    - `index` integer, required
    - `id` string, nullable, required
    - `status` integer, required
    - `data` Post
      - `id` string
      - `projectId` string
      - `title` string
      - `description` string, nullable
      - `status` 'PENDING' | 'APPROVED' | 'IN_PROGRESS' | 'COMPLETE' | 'CLOSED' | 'ARCHIVED'
      - `voteCount` integer
      - `metadata` object, nullable: Private context. Replaces the object; null clears it. Omitted from public responses; available to secret-key APIs and trusted admin webhooks.
      - `createdAt` string, date-time
      - `updatedAt` string, date-time
    - `error` string
    - `error_code` string

## Other responses

- `400`: Validation error
- `401`: Secret API key required
- `404`: Entity not found in this project

---

[API](https://skmtc.dev/voteship/apis/voteship-api.md) · [All operations](https://skmtc.dev/voteship/apis/voteship-api/llms.txt) · [OpenAPI document](https://skmtc.dev/voteship/apis/voteship-api/revisions/51ab9e650f82?raw)
