---
title: "Many comps lookups in one request (one call per query)"
method: POST
path: "/api/v1/comps/batch"
---

# Many comps lookups in one request (one call per query)

`POST /api/v1/comps/batch`

## Request

- Base URL: `https://bidprowl.com`
- URL: `https://bidprowl.com/api/v1/comps/batch`
- Auth: HTTP bearer

Each query is answered exactly as GET /api/v1/comps would answer it. A string query resolves as a listing id, a tracked item slug, a category slug, or free text naming a tracked item ("2015 Ford F150" resolves to ford-f-150); an object takes GET's own params. Max 25 queries (100 on Pro+). Each query costs one call, charged all or nothing up front: a batch that would cross the monthly quota is refused with 429 and charges nothing. Per-item failures (unknown item, item-level comps on a free key) come back inside `data` with their own status and code.

## Request body

- object
  - `queries` union[], required
    - union
      - string
      - object
        - `listing_id` string, uuid
        - `item` string
        - `category` string
        - `state` string
  - `state` string: Default state for item and category queries

## Response `200`

One result per query, in order

- object
  - `data` object[]
    - `query` unknown
    - `resolved` object
    - `status` integer
    - `data` object: As GET /api/v1/comps returns it
    - `code` string
    - `error` string
    - `upgrade` string
  - `count` integer
  - `calls_charged` integer

## Other responses

- `400`: Malformed body or too many queries.
- `401`: Missing, invalid or revoked API key.
- `429`: Per-minute burst limit or monthly quota exhausted. Read Retry-After, and RateLimit-* to self-throttle before you get here.
- `503`: The endpoint is at its concurrency cap. Nothing was charged; retry after Retry-After seconds.

---

[API](https://skmtc.dev/bidprowl/apis/bidprowl-api.md) · [All operations](https://skmtc.dev/bidprowl/apis/bidprowl-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bidprowl/apis/bidprowl-api/revisions/5cf442eea08b?raw)
