---
title: "AI Content Drop Batch and Bulk Operations | AI Content Drop"
description: "Quote many models or read many objects in a single AI Content Drop API request instead of looping one call at a time."
canonical: "https://aicontentdrop.com/docs/batch"
source: "https://aicontentdrop.com/docs/batch"
---

# AI Content Drop Batch and Bulk Operations

An agent acting on many items should not loop one HTTP call at a time. Two endpoints take an array.

## Quote many models at once

`POST /v1/models/cost` takes up to 50 model/quantity pairs and prices them together. Errors are per item, so one unknown model id does not fail the batch.

```bash
curl -sX POST https://aicontentdrop.com/v1/models/cost \
  -H "Content-Type: application/json" \
  -d '{"items":[{"model_id":"kling_3_0","quantity":4},{"model_id":"veo_3_fast","quantity":2}]}'
```

```json
{
  "count": 2,
  "credits_total": 118,
  "items": [
    { "model_id": "kling_3_0", "credits_each": 22, "quantity": 4, "credits_total": 88 },
    { "model_id": "veo_3_fast", "credits_each": 15, "quantity": 2, "credits_total": 30 }
  ]
}
```

## Run several reads in one request

`POST /v1/batch` takes a list of operations and returns a list of results in the same order. Each entry names a `method` and a `path` from the read surface.

```bash
curl -sX POST https://aicontentdrop.com/v1/batch \
  -H "Content-Type: application/json" \
  -d '{"operations":[
        {"id":"models","method":"GET","path":"/v1/models?type=image"},
        {"id":"quote","method":"GET","path":"/v1/models/kling_3_0/cost?quantity=3"}
      ]}'
```

```json
{
  "count": 2,
  "results": [
    { "id": "models", "status": 200, "body": { "count": 12, "models": [] } },
    { "id": "quote",  "status": 200, "body": { "credits_total": 66 } }
  ]
}
```

Rules, and the reason for each:

- **Reads only.** Generation is never batched here. A partial failure inside a batch of money-spending calls is ambiguous in exactly the way that costs someone credits they cannot account for; generation gets one request and one `Idempotency-Key` each.
- **Maximum 20 operations** per request.
- **Per-item status.** An operation that fails carries its own `status` and `error`; the envelope is still 200.
- **No credential required** for the read paths it accepts, the same as calling them individually.

## In GraphQL

Batching is native: ask for several connections in one query. Batched *transports* (an array of operations in one POST) are refused — the query language already solves that problem. See [the GraphQL docs](https://aicontentdrop.com/docs/graphql).
