---
title: "Run a status action on many accounting entries"
method: POST
path: "/v2/accounting/entries/bulk"
---

# Run a status action on many accounting entries

`POST /v2/accounting/entries/bulk`

## Request

- Base URL: `https://api.slash.com`
- URL: `https://api.slash.com/v2/accounting/entries/bulk`
- Auth: API key in header `X-API-Key`

Run one action (`mark_ready`, `mark_in_review`, `sync` or `archive`) on up to 100 entries. Each entry gets its own result, so one that can't move doesn't stop the rest.

## Request body

- object
  - `action` 'mark_ready' | 'mark_in_review' | 'archive' | 'sync', required: The move to make. `sync` is only available on connections with a platform to post to; a CSV connection returns `connection_not_syncable` per entry.
  - `entryIds` string[], required: The entries to move, 1 to 100 ids. Repeated ids are collapsed; ids the credential cannot see come back as `not_found`.

## Response `200`

The outcome for every requested entry.

- AccountingEntryBulkResult: The outcome of one status action run over a batch of entries. Every entry is decided on its own, so a batch can be partly applied: `results` is in the order the ids were given, and the counts summarize it.
  - `results` object[], required: One result per requested entry, in request order.
    - `entryId` string, required: The entry this result is for.
    - `status` 'updated' | 'unchanged' | 'failed', required: `updated` when the entry moved, `unchanged` when it was already there, `failed` when it could not move.
    - `error` object: Why the entry could not move. Only set when `status` is `failed`.
      - `code` 'not_found' | 'bill_payment_entry_read_only' | 'entry_sync_in_progress' | 'connection_not_syncable' | 'entry_not_ready', required: The code the single-entry action returns for the same condition: `not_found` when no entry with that id is visible to the credential, otherwise why the entry cannot make this move.
      - `message` string, required: The reason, in the same words the single-entry routes use.
  - `updated` integer, required: How many entries moved.
  - `unchanged` integer, required: How many entries were already in the target state.
  - `failed` integer, required: How many entries could not move.

## Other responses

- `400`: - `invalid_request (request shape)` — The body, query, or headers failed validation, or a required header is missing. `details` has one entry per failing location, keyed by JSON pointer or header name.
- `401`: - `unauthorized` — API key authentication is missing or invalid.
- `403`: - `forbidden` — The credential is not permitted to perform this action on the resource. When the resource is a field of the request, `details` names that `field` and the `id` it received. - `forbidden (legal entity)` — The credential is not permitted to act for the selected legal entity. - `not_available` — Public API v2 is not yet available. Use [Public API v1](https://docs.slash.com/introduction) in the meantime. - `user_api_key_required` — The API key is scoped to a legal entity rather than a user. Every v2 request needs a user API key, created under Settings → API keys in the Slash dashboard, together with the `x-legal-entity` header.
- `429`: The request exceeded the applicable rate limit. The response body is plain text, not the error object; clients must not depend on its wording.
- `500`: - `internal` — Slash could not complete the request. Quote `referenceId` when contacting Slash support.

## Changes

- **2026-10-16** `8b5d371ffeea`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/slashfi/apis/slash-public-api/changes/v2/accounting/entries/bulk/post.md)

---

[API](https://skmtc.dev/slashfi/apis/slash-public-api.md) - [All operations](https://skmtc.dev/slashfi/apis/slash-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/slashfi/apis/slash-public-api/revisions/eaed2d63c9e2?raw)
