> ## Documentation Index
> Fetch the complete documentation index at: https://developers.scoutworks.app/llms.txt
> Use this file to discover all available pages before exploring further.

# List the badges your group can award

> Every built-in badge and your group’s own custom badges, with their section, stage and requirements. Each requirement has a stable id, the same one a badge record’s `requirements` uses. A built-in badge’s `key` (for example `badge_001`) and its requirement ids do not change between releases.



## OpenAPI

````yaml /api-reference/openapi.json get /badge-catalogue
openapi: 3.1.0
info:
  title: Scoutworks public API
  version: 1.10.0
  description: >-
    Read your Scout group’s data from your own tools: spreadsheets, scripts,
    Zapier or n8n, and keep its task boards up to date. Every request is scoped
    to the group that owns the key.


    **Authentication.** Send a group API key as a Bearer token. Keys are created
    by a group admin and shown once.


    **Scopes.** Each operation names the scope it needs. Area scopes
    (`members:read`, `events:read`, `badges:read`, `waiting-list:read`,
    `tasks:read`) open an area; a `.contacts` scope adds dates of birth and
    parent details to that area’s responses. `tasks:write` is the one scope that
    changes data: it adds and updates tasks, as the admin who created the key.
    Fields a key may not see are left out, not sent as null. Health, bank
    details and free-text notes are never available.


    **Pagination.** Lists return `{ data, nextCursor }`. Pass `nextCursor` back
    as `?cursor=`, with the same filters, until it is null. `limit` is 1 to 200.


    **Errors.** Every error is `{ error: { code, message } }`. Branch on `code`;
    `message` is for people and may change.


    **Compatibility.** We aim to change v1 only by addition: new endpoints, new
    optional parameters, new response fields and new enum values. Ignore fields
    you do not know and treat an unknown enum value as “other”. We will try to
    warn you before a breaking change, but one can still happen without notice,
    so check responses and fail loudly on an error. Changes are listed in the
    changelog at https://developers.scoutworks.app/changelog.


    **Rate limits.** 120 requests a minute per key. `RateLimit-*` headers report
    what is left.
servers:
  - url: https://api.scoutworks.app/api/v1
    description: Live
  - url: https://api-demo.scoutworks.app/api/v1
    description: Demo (sample data, reset weekly)
security:
  - bearerAuth: []
tags:
  - name: Keys
    description: Check a key and see what it can reach.
  - name: Members
    description: Young people in the group.
  - name: Sections
    description: The group’s sections and units, and their ids.
  - name: Events
    description: Meetings, trips and camps, and who is going.
  - name: Badges
    description: Badge progress and awards.
  - name: Waiting list
    description: Applications waiting for a place.
paths:
  /badge-catalogue:
    get:
      tags:
        - Badges
      summary: List the badges your group can award
      description: >-
        Every built-in badge and your group’s own custom badges, with their
        section, stage and requirements. Each requirement has a stable id, the
        same one a badge record’s `requirements` uses. A built-in badge’s `key`
        (for example `badge_001`) and its requirement ids do not change between
        releases.
      operationId: listBadgeCatalogue
      parameters:
        - name: cursor
          in: query
          required: false
          description: >-
            Opaque. Pass the `nextCursor` of the previous page, with the same
            filters, to get the next one. Do not build or parse it.
          schema:
            type: string
            minLength: 1
            maxLength: 512
        - name: limit
          in: query
          required: false
          description: Page size, 1 to 200. Defaults to 50.
          schema:
            default: 50
            type: integer
            minimum: 1
            maximum: 200
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V1BadgeDefinitionPage'
          headers:
            RateLimit-Limit:
              description: Requests allowed in the current window.
              schema:
                type: integer
            RateLimit-Remaining:
              description: Requests left in the current window.
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the window resets.
              schema:
                type: integer
        '400':
          description: >-
            A query parameter, cursor or request body is not acceptable
            (`invalid_request`).
          headers:
            RateLimit-Limit:
              description: Requests allowed in the current window.
              schema:
                type: integer
            RateLimit-Remaining:
              description: Requests left in the current window.
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the window resets.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V1Error'
        '401':
          description: >-
            No API key, or one that is unknown, revoked or expired
            (`invalid_api_key`).
          headers:
            RateLimit-Limit:
              description: Requests allowed in the current window.
              schema:
                type: integer
            RateLimit-Remaining:
              description: Requests left in the current window.
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the window resets.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V1Error'
        '403':
          description: The key lacks the scope this operation needs (`insufficient_scope`).
          headers:
            RateLimit-Limit:
              description: Requests allowed in the current window.
              schema:
                type: integer
            RateLimit-Remaining:
              description: Requests left in the current window.
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the window resets.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V1Error'
        '429':
          description: Too many requests; wait `retryAfter` seconds (`rate_limited`).
          headers:
            RateLimit-Limit:
              description: Requests allowed in the current window.
              schema:
                type: integer
            RateLimit-Remaining:
              description: Requests left in the current window.
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the window resets.
              schema:
                type: integer
            Retry-After:
              description: Seconds to wait before trying again.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V1Error'
        '500':
          description: Our fault; quote `errorRef` to support (`internal_error`).
          headers:
            RateLimit-Limit:
              description: Requests allowed in the current window.
              schema:
                type: integer
            RateLimit-Remaining:
              description: Requests left in the current window.
              schema:
                type: integer
            RateLimit-Reset:
              description: Seconds until the window resets.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V1Error'
      security:
        - bearerAuth:
            - badges:read
components:
  schemas:
    V1BadgeDefinitionPage:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/V1BadgeDefinition'
        nextCursor:
          description: Pass as `?cursor=` for the next page. Null on the last. Opaque.
          type:
            - string
            - 'null'
      required:
        - data
        - nextCursor
    V1Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - invalid_api_key
                - insufficient_scope
                - invalid_request
                - subscription_required
                - not_found
                - conflict
                - rate_limited
                - internal_error
            message:
              type: string
          required:
            - code
            - message
        errorRef:
          description: 'On a 500: a reference to quote to Scoutworks support.'
          type: string
        retryAfter:
          description: 'On a 429: seconds to wait before trying again.'
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
      required:
        - error
    V1BadgeDefinition:
      type: object
      properties:
        id:
          type: string
          description: >-
            A built-in badge: its catalogue key, for example `badge_001`. A
            custom badge: a UUID. It does not change.
        key:
          description: >-
            The catalogue key of a built-in badge, for example `badge_001`, to
            map to another system such as OSM. Null for a custom badge. It does
            not change between releases.
          type:
            - string
            - 'null'
        name:
          type: string
        category:
          type: string
          enum:
            - challenge_awards
            - activity_badges
            - staged_activity_badges
            - core_badges
        type:
          type: string
          enum:
            - activity
            - challenge_award
            - top_award
            - staged_activity
            - joining_in
            - leadership
            - moving_on
            - youshape
            - earth_tribe
            - patrol
        sections:
          type: array
          items:
            type: string
            enum:
              - squirrels
              - beavers
              - cubs
              - scouts
              - explorers
              - network
          description: >-
            The sections that can earn it. Empty when every section can. A
            custom badge can be open to several.
        stage:
          anyOf:
            - type: integer
              minimum: -9007199254740991
              maximum: 9007199254740991
            - type: 'null'
          description: For a staged activity badge, its stage, 1 first. Null otherwise.
        series:
          description: >-
            For a staged activity badge, the name its stages share, for example
            "Air Activities". Null otherwise.
          type:
            - string
            - 'null'
        requirements:
          type: array
          items:
            $ref: '#/components/schemas/V1BadgeRequirement'
          description: >-
            Every requirement, in the order the badge lists them. How many of
            them a young person needs is in the badge’s published rules.
      required:
        - id
        - key
        - name
        - category
        - type
        - sections
        - stage
        - series
        - requirements
    V1BadgeRequirement:
      type: object
      properties:
        id:
          type: string
          description: >-
            Stable. A built-in badge: the id from its definition, for example
            `requirement_056` — the same id a badge record’s `requirements`
            carries. A custom badge: the id of its requirement. It does not
            change between releases.
        description:
          description: >-
            The published wording of a built-in badge’s requirement. Null for a
            custom badge: its wording is typed by a leader and stays in
            Scoutworks.
          type:
            - string
            - 'null'
      required:
        - id
        - description
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        A group API key, sent as `Authorization: Bearer sw_live_…`. Keys from
        staging and the demo start `sw_test_` instead. A group admin creates
        keys in Settings → Integrations → API keys.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.