---
title: "Bulk Restore"
method: POST
path: "/api/v1/exclusions/{project_id}/restore"
tags: ["exclusions"]
---

# Bulk Restore

`POST /api/v1/exclusions/{project_id}/restore`

Restore previously excluded rows.

## Request body

- BulkExclusionRequest — Bulk exclude/restore payload. ``feature_ids`` accepts sandbox UUIDs and legacy bigint-as-string ids alike; length caps match the ``row_exclusions.feature_id`` column so an oversized id is rejected at the boundary instead of raising mid-transaction. The list cap is the lockstep twin of the client's ``EXCLUSION_SELECTION_LIMIT`` (``resolveSelectedFeatureIds.ts``) — the UI never sends more, so anything larger is a runaway direct call, not a user action.
  - `feature_ids` string[], required
  - `source_layer_id` string, uuid, nullable

## Response `200`

Successful Response

- BulkExclusionResult — Outcome of one bulk exclusion mutation. ``excluded_count`` is the project's total excluded-row count after the write — the number the "Excluded (n)" surface renders.
  - `outcomes` RowExclusionOutcome[], required
    - `feature_id` string, required
    - `status` 'excluded' | 'already_excluded' | 'restored' | 'not_excluded', required
  - `excluded_count` integer, required

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/maia-analytics/apis/maia-api.md) · [All operations](https://skmtc.net/maia-analytics/apis/maia-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/maia-analytics/maia-api/versions/c5094ff58a23/schema)
