---
title: "Run App Query Batch"
method: POST
path: "/api/v1/apps/{app_id}/query/batch"
tags: ["apps-query"]
---

# Run App Query Batch

`POST /api/v1/apps/{app_id}/query/batch`

Run several guarded SELECTs against the app's bound entities in one
request with bounded, cancellation-aware DuckDB execution.

App-level failures (missing / not ready) return 404 / 409. Per-query
failures (bad SQL, DuckDB errors) are isolated into each result's
``error`` field with HTTP 200 — one broken widget never blanks the page.

## Path parameters

- `app_id` string, uuid, required

## Request body

- AppQueryBatchRequest — Body for POST /api/v1/apps/{app_id}/query/batch. Coordinates every query in one bounded execution lifecycle instead of N independent requests. Pure-Parquet staging/prod batches may fan out across the configured DuckDB pool; DuckLake and local batches use one connection to avoid duplicate materialization. Per-query errors are isolated — a failing query returns its ``error`` field without aborting the rest.
  - `queries` AppQueryBatchItem[], required
    - `id` string, required
    - `sql` string, required
    - `limit` integer, nullable

## Response `200`

Successful Response

- AppQueryBatchResponse
  - `results` AppQueryBatchItemResult[], required
    - `id` string, required
    - `columns` string[], required
    - `rows` object[], required
    - `total_rows` integer, required
    - `truncated` boolean, required
    - `error` string, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/netter/apis/dmi-backend.md) · [All operations](https://skmtc.net/netter/apis/dmi-backend/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/netter/dmi-backend/versions/a59877bf911b/schema)
