---
title: "GET /api/v1/users/{user_id}/badges"
method: GET
path: "/api/v1/users/{user_id}/badges"
tags: ["users"]
---

# GET /api/v1/users/{user_id}/badges

`GET /api/v1/users/{user_id}/badges`

## Request

- Base URL: `https://prices.openfoodfacts.org` (the document declares no server; this is the origin it was published from)
- URL: `https://prices.openfoodfacts.org/api/v1/users/{user_id}/badges`
- Auth: none declared

## Path parameters

- `user_id` string, required

## Query parameters

- `page` integer
- `size` integer

## Response `200`

- PaginatedUserBadgeList
  - `items` UserBadge[], required
    - `id` integer, required
    - `badge` Badge, required
      - `id` integer, required
      - `name` string, required
      - `description` string, nullable
      - `image_url` string, uri, nullable
      - `metric` 'price_count' | 'price_in_proof_not_owned_count' | 'proof_count' | 'proof_type_price_tag_count' | 'proof_type_receipt_count' | 'proof_type_gdpr_request_count' | 'proof_type_shop_import_count' | 'location_count' | 'location_type_osm_city_count' | 'location_type_osm_country_count' | 'currency_count' | 'year_count' | 'challenge_count', required: * `price_count` - price_count * `price_in_proof_not_owned_count` - price_in_proof_not_owned_count * `proof_count` - proof_count * `proof_type_price_tag_count` - proof_type_price_tag_count * `proof_type_receipt_count` - proof_type_receipt_count * `proof_type_gdpr_request_count` - proof_type_gdpr_request_count * `proof_type_shop_import_count` - proof_type_shop_import_count * `location_count` - location_count * `location_type_osm_city_count` - location_type_osm_city_count * `location_type_osm_country_count` - location_type_osm_country_count * `currency_count` - currency_count * `year_count` - year_count * `challenge_count` - challenge_count
      - `threshold` integer, required
      - `user_count` integer
      - `created` string, date-time
      - `updated` string, date-time, required
    - `achieved_at` string, date-time
    - `user` string, required
  - `page` integer, required: Current page number
  - `pages` integer, required: Total number of pages
  - `size` integer, required: Number of items per page
  - `total` integer, required: Total number of items

## Changes

- **2026-08-22** `2315a270e4e6`: 7 warning
  - added the new `currency_count` enum value to the `items/items/badge/allOf[#/components/schemas/Badge]/metric` response property for the response status `200`
  - added the new `location_type_osm_city_count` enum value to the `items/items/badge/allOf[#/components/schemas/Badge]/metric` response property for the response status `200`
  - added the new `price_in_proof_not_owned_count` enum value to the `items/items/badge/allOf[#/components/schemas/Badge]/metric` response property for the response status `200`
  - added the new `proof_type_gdpr_request_count` enum value to the `items/items/badge/allOf[#/components/schemas/Badge]/metric` response property for the response status `200`
  - …3 more
- **2026-07-13** `f1bb01adae9b`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/openfoodfacts/apis/open-food-facts-open-prices-rest-api/changes/api/v1/users/:user_id/badges/get.md)

---

[API](https://skmtc.dev/openfoodfacts/apis/open-food-facts-open-prices-rest-api.md) - [All operations](https://skmtc.dev/openfoodfacts/apis/open-food-facts-open-prices-rest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/openfoodfacts/apis/open-food-facts-open-prices-rest-api/revisions/d7c5d8b4c32e?raw)
