---
title: "Replace Dashboard Bindings"
method: PUT
path: "/api/v1/dashboards/{dashboard_id}/bindings"
tags: ["dashboard-bindings"]
---

# Replace Dashboard Bindings

`PUT /api/v1/dashboards/{dashboard_id}/bindings`

Set the bound set to exactly ``database_ids``.

Replace, not patch — the editor is a multi-select. Every id must be a
live database of this company AND readable by the CALLER (F2); a
foreign, suppressed, or inaccessible id is a 400 rather than a silently
dropped binding, so a mistake is visible. The accessibility check is not
optional: the `dashboard -> database` DATA_FLOW edge derives from this
binding table, so skipping it would let an EDITOR mint themselves VIEWER
on any database in the company just by binding it.

## Path parameters

- `dashboard_id` string, uuid, required

## Request body

- DashboardBindingsUpdate
  - `database_ids` string[], required

## Response `200`

Successful Response

- DashboardBindingRead[]
  - `database_id` string, uuid, required
  - `name` string, required
  - `display_name` string, required
  - `row_count` integer, required

## Other responses

- `422` — Validation Error

## Changes

> 39 revisions in range; 1 not diffed.

- **2026-09-03** `307ede8c429b` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/netter/apis/dmi-backend/changes/api/v1/dashboards/:dashboard_id/bindings/put.md)

---

[API](https://skmtc.dev/netter/apis/dmi-backend.md) · [All operations](https://skmtc.dev/netter/apis/dmi-backend/llms.txt) · [OpenAPI document](https://skmtc.dev/netter/apis/dmi-backend/revisions/cd6ce639770f?raw)
