---
title: "Tender Awards Summary"
method: GET
path: "/api/v1/tender_awards/summary"
tags: ["tender_awards"]
---

# Tender Awards Summary

`GET /api/v1/tender_awards/summary`

## Request

- Base URL: `https://statsmapped.com`
- URL: `https://statsmapped.com/api/v1/tender_awards/summary`
- Auth: none declared

One filtered set, grouped one way, with its own real total -- the JSON-API
twin of the aggregate tables `/ireland/tender-awards/overview` and its per-
authority/per-category pages already render as HTML. Reuses the identical
`_build_tender_awards_where()`/aggregate-function pair every one of those pages
calls, so this can never disagree with what a reader sees on the site itself.

Same rate limit as GET /api/v1/tender_awards (TENDER_SEARCH_RATE_LIMIT) -- the
same table, the same abuse surface, no reason for a separate, looser budget.

## Query parameters

- `group_by` string, required: One of ['cpv_category', 'competition_type', 'threshold_level', 'contract_type', 'local_authority']. Never 'supplier' — awarded_supplier is excluded from this endpoint entirely; see supplier= on GET /api/v1/tender_awards for the gated, per-row alternative.
- `cpv_code` string, nullable: Same as GET /api/v1/tender_awards.
- `authority` string, nullable: Same as GET /api/v1/tender_awards.
- `local_authority_id` string, nullable: Same as GET /api/v1/tender_awards.
- `date_from` string, date, nullable: award_published_date >= this.
- `date_to` string, date, nullable: award_published_date <= this.
- `value_min` number, nullable
- `value_max` number, nullable
- `single_bid_only` boolean
- `limit` integer: Max breakdown rows returned.

## Response `200`

Successful Response

- TenderAwardsSummaryResponse
  - `country` string
  - `group_by` string, required
  - `total_count` integer, required
  - `total_value` number, required
  - `unit` string, required
  - `earliest_award_date` string, nullable
  - `breakdown` TenderAwardsSummaryRow[], required
    - `country` string
    - `key` string, required
    - `label` string, required
    - `value` number, required
    - `count` integer, required
    - `median` number, nullable
  - `group_count` integer, required

## Other responses

- `400`: Bad request
- `401`: Missing or invalid credentials
- `403`: Not authorized for this request
- `404`: Not found
- `422`: Validation error
- `429`: Rate limited

---

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