Stotles Public API

REST API giving programmatic access to UK and Ireland public sector procurement data — notices, buyers, suppliers and framework agreements — as JSON over HTTPS. Eight read-only operations across four resources, each with a cursor-paginated /search and a by-UUID lookup. Notices carry the full procurement lifecycle (forward-plan pipeline through open tender to awarded and expired contract) with lots, contracts, awarded suppliers, CPV classification codes and estimated values. Filterable by keyword, CPV code, buyer, supplier, framework, stage, value band and four independent date ranges. Authenticated with a static x-api-key header issued by a Stotles Customer Success Manager. RFC 9457 problem+json errors, opaque-cursor pagination, and a published additive-only versioning contract.

Documentation

Specifications

Other Resources

OpenAPI Specification

stotles-public-api-openapi.yml Raw ↑
# Stotles Public API — harvested verbatim from https://api.stotles.com/v1/openapi.json on 2026-08-14 (HTTP 200).
# Rendered from the provider's JSON to YAML without modification. Pristine JSON: openapi/_original/stotles-public-api-openapi.json
openapi: 3.1.0
paths:
  /v1/notices/search:
    get:
      description: Search and filter procurement notices. Every parameter is optional, so filters can
        stand alone without a keyword. Results are ranked by relevance unless `sort` is set, and paginated
        with `next_cursor`.
      operationId: searchNotices
      parameters:
      - name: query
        required: false
        in: query
        description: Free-text keyword search over the notice (each 2–500 characters). Repeatable; multiple
          values are combined per `query_operator`.
        schema:
          maxItems: 50
          type: array
          items:
            type: string
            minLength: 2
            maxLength: 500
        style: form
        explode: true
      - name: query_operator
        required: false
        in: query
        description: 'How multiple `query` keywords combine: match all (`and`) or any (`or`). Default
          `or`.'
        schema:
          default: or
          type: string
          enum:
          - and
          - or
      - name: country_code
        required: false
        in: query
        description: Filter to notices in these ISO 3166-1 alpha-2 countries. Repeatable.
        schema:
          maxItems: 100
          type: array
          items:
            type: string
            pattern: ^[A-Za-z]{2}$
        style: form
        explode: true
      - name: cpv_code
        required: false
        in: query
        description: Filter to notices classified under these CPV codes. Repeatable.
        schema:
          maxItems: 100
          type: array
          items:
            type: string
            minLength: 1
        style: form
        explode: true
      - name: buyer_id
        required: false
        in: query
        description: Filter to notices involving these buyers (by id). Repeatable.
        schema:
          maxItems: 100
          type: array
          items:
            type: string
            format: uuid
        style: form
        explode: true
      - name: supplier_id
        required: false
        in: query
        description: Filter to notices awarded to these suppliers (by id). Repeatable.
        schema:
          maxItems: 100
          type: array
          items:
            type: string
            format: uuid
        style: form
        explode: true
      - name: stage
        required: false
        in: query
        description: Filter to notices in these stages. Repeatable.
        schema:
          maxItems: 10
          type: array
          items:
            type: string
            enum:
            - pipeline
            - pre_tender
            - stale_pre_tender
            - open_tender
            - closed_tender
            - canceled_tender
            - unknown_tender
            - awarded_contract
            - expired_contract
            - canceled_award
            description: The notice's procurement stage.
            x-enumDescriptions:
              pipeline: An early signal that a procurement is coming — spotted in a buyer's forward plan
                or contract pipeline, before any formal notice. No tender documents exist yet.
              pre_tender: The buyer has published a formal early-market notice (e.g. a planning or prior-information
                notice). The tender is not open yet.
              stale_pre_tender: A pre-tender notice that has aged well past the point where a tender would
                normally have followed. Treat it as unlikely to progress.
              open_tender: Accepting bids — the submission deadline (`close_date`) has not passed.
              closed_tender: The submission deadline has passed and the buyer has not published an award
                yet.
              canceled_tender: The buyer withdrew or abandoned the procurement before awarding it.
              unknown_tender: A tender notice whose deadline could not be determined from the source,
                so we can't say whether it is still open.
              awarded_contract: A contract has been awarded. See `contracts` for the suppliers and awarded
                values.
              expired_contract: The awarded contract has passed the end of its known term. Note that this
                is derived from the contract record, so an `expired_contract` can still carry a **future**
                `expiry_date` — don't infer timing from the stage.
              canceled_award: An award that was later cancelled or annulled.
        style: form
        explode: true
      - name: framework_id
        required: false
        in: query
        description: Filter to notices related to these frameworks (by id) — a framework agreement or
          a call-off against it. Repeatable.
        schema:
          maxItems: 100
          type: array
          items:
            type: string
            format: uuid
        style: form
        explode: true
      - name: framework_activity
        required: false
        in: query
        description: Narrow by framework relationship (agreement vs call-off).
        schema:
          type: string
          enum:
          - only_framework_agreements
          - only_call_offs
          - exclude_framework_agreements
          - exclude_all
          x-enumDescriptions:
            only_framework_agreements: Only notices that establish a framework agreement, excluding the
              call-offs made under one.
            only_call_offs: Only notices that are call-offs (individual awards) under an existing framework.
            exclude_framework_agreements: Everything except the notices that establish a framework — keeps
              call-offs and non-framework procurements.
            exclude_all: Only procurements unrelated to any framework.
      - name: publish_date_gte
        required: false
        in: query
        description: Only notices published on or after this date (inclusive).
        schema:
          format: date
          type: string
      - name: publish_date_lte
        required: false
        in: query
        description: Only notices published on or before this date (inclusive).
        schema:
          format: date
          type: string
      - name: close_date_gte
        required: false
        in: query
        description: Only notices whose tender close date is on or after this date (inclusive).
        schema:
          format: date
          type: string
      - name: close_date_lte
        required: false
        in: query
        description: Only notices whose tender close date is on or before this date (inclusive).
        schema:
          format: date
          type: string
      - name: expiry_date_gte
        required: false
        in: query
        description: Only notices whose contract expiry date is on or after this date (inclusive).
        schema:
          format: date
          type: string
      - name: expiry_date_lte
        required: false
        in: query
        description: Only notices whose contract expiry date is on or before this date (inclusive).
        schema:
          format: date
          type: string
      - name: award_date_gte
        required: false
        in: query
        description: Only notices whose award date is on or after this date (inclusive).
        schema:
          format: date
          type: string
      - name: award_date_lte
        required: false
        in: query
        description: Only notices whose award date is on or before this date (inclusive).
        schema:
          format: date
          type: string
      - name: value_gte
        required: false
        in: query
        description: Only notices whose estimated value is greater than or equal to this amount, in the
          notice's own currency (values are not currency-normalized). Excludes notices with no value.
        schema:
          minimum: 1
          type: number
      - name: value_lte
        required: false
        in: query
        description: Only notices whose estimated value is less than or equal to this amount, in the notice's
          own currency (values are not currency-normalized). Excludes notices with no value.
        schema:
          minimum: 1
          type: number
      - name: sort
        required: false
        in: query
        description: Sort field. Omitted = relevance ranking. For date sorts (close/award/expiry, often
          null), notices missing that date sort last in both directions.
        schema:
          type: string
          enum:
          - publish_date
          - close_date
          - award_date
          - expiry_date
          - value
      - name: order
        required: false
        in: query
        description: Sort direction (default desc). Applies when `sort` is set.
        schema:
          default: desc
          type: string
          enum:
          - asc
          - desc
      - name: limit
        required: false
        in: query
        description: Maximum results per page (1–50, default 20). Ignored when `cursor` is set.
        schema:
          minimum: 1
          maximum: 50
          default: 20
          type: integer
      - name: cursor
        required: false
        in: query
        description: Opaque pagination cursor from a previous response's `next_cursor`. Carries the page
          and page size, so `limit` is ignored when it is present.
        schema:
          type: string
      responses:
        '200':
          description: A page of matching notices.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NoticeSearchResponseDto'
              example:
                items:
                - id: 8f14e45f-ea0d-4a3b-9c2e-1d7b6a5c4e30
                  title: Managed Cyber Security Operations Centre (SOC) Services
                  description: The Authority is seeking a supplier to deliver a managed Security Operations
                    Centre, including 24/7 monitoring, threat intelligence and incident response, for
                    an initial term of three years with an optional two-year extension.
                  country_code: GB
                  stage: open_tender
                  source_url: https://www.find-tender.service.gov.uk/Notice/012345-2026
                  publish_date: '2026-07-14'
                  close_date: '2026-08-29'
                  award_date: null
                  expiry_date: null
                  value:
                    amount: 4500000
                    currency: GBP
                  buyers:
                  - id: 3c6e0b8a-9c15-4f2d-8b7a-2e5d1c9f4a60
                    name: Department for Work and Pensions
                  cpv_codes:
                  - code: '72500000'
                    name: Computer-related services
                  - code: '79710000'
                    name: Security services
                  framework: null
                  lots:
                  - id: '1'
                    title: Lot 1 — Monitoring and detection
                    description: 24/7 SOC monitoring, alert triage and detection engineering.
                    value:
                      amount: 3000000
                      currency: GBP
                    cpv_codes:
                    - code: '72500000'
                      name: Computer-related services
                    contract_period:
                      start_date: '2026-11-01'
                      end_date: '2029-10-31'
                      max_extent_date: '2031-10-31'
                  - id: '2'
                    title: Lot 2 — Incident response retainer
                    description: On-call incident response and forensic investigation.
                    value:
                      amount: 1500000
                      currency: GBP
                    cpv_codes:
                    - code: '79710000'
                      name: Security services
                    contract_period:
                      start_date: '2026-11-01'
                      end_date: '2029-10-31'
                      max_extent_date: null
                  contracts: []
                next_cursor: eyJwYWdlIjoyLCJsaW1pdCI6MjB9
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      summary: Search notices by keyword
      tags:
      - Notices
      x-codeSamples:
      - lang: cURL
        label: curl
        source: "curl -G https://api.stotles.com/v1/notices/search \\\n  -H \"x-api-key: $STOTLES_API_KEY\"\
          \ \\\n  --data-urlencode \"query=cyber security\" \\\n  -d \"stage=open_tender\" \\\n  -d \"\
          country_code=GB\" \\\n  -d \"limit=20\""
  /v1/notices/{id}:
    get:
      description: Fetch a single notice, including its lots and any awarded contracts. The `id` is the
        same identifier returned by notice search and by the `buyer_id`/`supplier_id` filters.
      operationId: getNotice
      parameters:
      - name: id
        required: true
        in: path
        description: The notice's unique identifier.
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: The notice.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NoticeResponseDto'
              example:
                id: 8f14e45f-ea0d-4a3b-9c2e-1d7b6a5c4e30
                title: Managed Cyber Security Operations Centre (SOC) Services
                description: The Authority is seeking a supplier to deliver a managed Security Operations
                  Centre, including 24/7 monitoring, threat intelligence and incident response, for an
                  initial term of three years with an optional two-year extension.
                country_code: GB
                stage: open_tender
                source_url: https://www.find-tender.service.gov.uk/Notice/012345-2026
                publish_date: '2026-07-14'
                close_date: '2026-08-29'
                award_date: null
                expiry_date: null
                value:
                  amount: 4500000
                  currency: GBP
                buyers:
                - id: 3c6e0b8a-9c15-4f2d-8b7a-2e5d1c9f4a60
                  name: Department for Work and Pensions
                cpv_codes:
                - code: '72500000'
                  name: Computer-related services
                - code: '79710000'
                  name: Security services
                framework: null
                lots:
                - id: '1'
                  title: Lot 1 — Monitoring and detection
                  description: 24/7 SOC monitoring, alert triage and detection engineering.
                  value:
                    amount: 3000000
                    currency: GBP
                  cpv_codes:
                  - code: '72500000'
                    name: Computer-related services
                  contract_period:
                    start_date: '2026-11-01'
                    end_date: '2029-10-31'
                    max_extent_date: '2031-10-31'
                - id: '2'
                  title: Lot 2 — Incident response retainer
                  description: On-call incident response and forensic investigation.
                  value:
                    amount: 1500000
                    currency: GBP
                  cpv_codes:
                  - code: '79710000'
                    name: Security services
                  contract_period:
                    start_date: '2026-11-01'
                    end_date: '2029-10-31'
                    max_extent_date: null
                contracts: []
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      summary: Get a notice by id
      tags:
      - Notices
      x-codeSamples:
      - lang: cURL
        label: curl
        source: "curl https://api.stotles.com/v1/notices/8f14e45f-ea0d-4a3b-9c2e-1d7b6a5c4e30 \\\n  -H\
          \ \"x-api-key: $STOTLES_API_KEY\""
  /v1/buyers/search:
    get:
      description: Find public sector buyers by name, optionally narrowed by country or by where they
        sit in the buyer-type taxonomy. Each result is the full buyer profile — the same shape as `GET
        /v1/buyers/{id}`.
      operationId: searchBuyers
      parameters:
      - name: query
        required: true
        in: query
        description: Free-text search over the buyer name (2–200 characters).
        schema:
          minLength: 2
          maxLength: 200
          type: string
      - name: country_code
        required: false
        in: query
        description: Filter to buyers in these ISO 3166-1 alpha-2 countries. Repeatable.
        schema:
          maxItems: 100
          type: array
          items:
            type: string
            pattern: ^[A-Za-z]{2}$
        style: form
        explode: true
      - name: type
        required: false
        in: query
        description: Filter to buyers of these types. Repeatable.
        schema:
          maxItems: 23
          type: array
          items:
            type: string
            enum:
            - ministerial_department
            - non_ministerial_department
            - agencies_and_non_departmental_bodies
            - other_central
            - devolved_department
            - local_authority
            - purchasing_organization
            - parish_council
            - other_local_organization
            - central_healthcare_organizations
            - nhs_trusts
            - nhs_ccg_stp_ics
            - other_healthcare
            - police
            - fire
            - ambulance
            - other_blue_light
            - schools
            - higher_and_further_education
            - other_education
            - housing_associations
            - other_public_sector
            - utilities
        style: form
        explode: true
      - name: type_group
        required: false
        in: query
        description: Filter to buyers in these type groups — matches any type within a group. Repeatable.
        schema:
          maxItems: 6
          type: array
          items:
            type: string
            enum:
            - central
            - local
            - healthcare
            - blue_light
            - education
            - other
        style: form
        explode: true
      - name: limit
        required: false
        in: query
        description: Maximum results per page (1–50, default 20). Ignored when `cursor` is set.
        schema:
          minimum: 1
          maximum: 50
          default: 20
          type: integer
      - name: cursor
        required: false
        in: query
        description: Opaque pagination cursor from a previous response's `next_cursor`. Carries the page
          and page size, so `limit` is ignored when it is present.
        schema:
          type: string
      responses:
        '200':
          description: A page of matching buyers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuyerSearchResponseDto'
              example:
                items:
                - id: 3c6e0b8a-9c15-4f2d-8b7a-2e5d1c9f4a60
                  name: Department for Work and Pensions
                  location:
                    country_code: GB
                    locality: London
                  employee_count_band: 20000+
                  website_url: https://www.gov.uk/government/organisations/department-for-work-pensions
                  types:
                  - id: ministerial_department
                    name: Ministerial department
                    group:
                      id: central
                      name: Central government
                - id: 5a1f2c7d-4b8e-4c1a-9f3d-6e2b8a4c7d19
                  name: Leeds City Council
                  location:
                    country_code: GB
                    locality: Leeds
                  employee_count_band: 10000-19999
                  website_url: https://www.leeds.gov.uk
                  types:
                  - id: local_authority
                    name: Local authority
                    group:
                      id: local
                      name: Local government
                next_cursor: eyJwYWdlIjoyLCJsaW1pdCI6MjB9
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      summary: Search buyers by name
      tags:
      - Buyers
      x-codeSamples:
      - lang: cURL
        label: curl
        source: "curl -G https://api.stotles.com/v1/buyers/search \\\n  -H \"x-api-key: $STOTLES_API_KEY\"\
          \ \\\n  --data-urlencode \"query=city council\" \\\n  -d \"type_group=local\" \\\n  -d \"country_code=GB\""
  /v1/buyers/{id}:
    get:
      description: Fetch a single buyer, including its location and what kind of public sector body it
        is. Use the `id` as the `buyer_id` filter on notice search to see what it has been procuring.
      operationId: getBuyer
      parameters:
      - name: id
        required: true
        in: path
        description: The buyer's unique identifier.
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: The buyer.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuyerResponseDto'
              example:
                id: 3c6e0b8a-9c15-4f2d-8b7a-2e5d1c9f4a60
                name: Department for Work and Pensions
                location:
                  country_code: GB
                  locality: London
                employee_count_band: 20000+
                website_url: https://www.gov.uk/government/organisations/department-for-work-pensions
                types:
                - id: ministerial_department
                  name: Ministerial department
                  group:
                    id: central
                    name: Central government
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      summary: Get a buyer by id
      tags:
      - Buyers
      x-codeSamples:
      - lang: cURL
        label: curl
        source: "curl https://api.stotles.com/v1/buyers/3c6e0b8a-9c15-4f2d-8b7a-2e5d1c9f4a60 \\\n  -H\
          \ \"x-api-key: $STOTLES_API_KEY\""
  /v1/suppliers/search:
    get:
      description: Find suppliers that bid for or win public sector contracts, ranked by relevance to
        the query. `award_count` reflects the awards we have indexed for the supplier.
      operationId: searchSuppliers
      parameters:
      - name: query
        required: true
        in: query
        description: Free-text search over the supplier name (2–200 characters).
        schema:
          minLength: 2
          maxLength: 200
          type: string
      - name: country_code
        required: false
        in: query
        description: Filter to suppliers in these ISO 3166-1 alpha-2 countries. Repeatable.
        schema:
          maxItems: 100
          type: array
          items:
            type: string
            pattern: ^[A-Za-z]{2}$
        style: form
        explode: true
      - name: limit
        required: false
        in: query
        description: Maximum results per page (1–50, default 20). Ignored when `cursor` is set.
        schema:
          minimum: 1
          maximum: 50
          default: 20
          type: integer
      - name: cursor
        required: false
        in: query
        description: Opaque pagination cursor from a previous response's `next_cursor`. Carries the page
          and page size, so `limit` is ignored when it is present.
        schema:
          type: string
      responses:
        '200':
          description: A page of matching suppliers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupplierSearchResponseDto'
              example:
                items:
                - id: b2d4f6a8-1c3e-4d5f-8a9b-0c1d2e3f4a5b
                  name: Northbridge Digital Services Ltd
                  location:
                    country_code: GB
                  award_count: 37
                - id: c3e5a7b9-2d4f-4e6a-9b0c-1d2e3f4a5b6c
                  name: Northbridge Consulting Group Ltd
                  location:
                    country_code: GB
                  award_count: 4
                next_cursor: null
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      summary: Search suppliers by name
      tags:
      - Suppliers
      x-codeSamples:
      - lang: cURL
        label: curl
        source: "curl -G https://api.stotles.com/v1/suppliers/search \\\n  -H \"x-api-key: $STOTLES_API_KEY\"\
          \ \\\n  --data-urlencode \"query=northbridge digital\""
  /v1/suppliers/{id}:
    get:
      description: Fetch a single supplier. Use the `id` as the `supplier_id` filter on notice search
        to see the contracts it has been awarded.
      operationId: getSupplier
      parameters:
      - name: id
        required: true
        in: path
        description: The supplier's unique identifier.
        schema:
          format: uuid
          type: string
      responses:
        '200':
          description: The supplier.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupplierDto'
              example:
                id: b2d4f6a8-1c3e-4d5f-8a9b-0c1d2e3f4a5b
                name: Northbridge Digital Services Ltd
                location:
                  country_code: GB
                award_count: 37
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/Unauthenticated'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
      summary: Get a supplier by id
      tags:
      - Suppliers
      x-codeSamples:
      - lang: cURL
        label: curl
        source: "curl https://api.stotles.com/v1/suppliers/b2d4f6a8-1c3e-4d5f-8a9b-0c1d2e3f4a5b \\\n \
          \ -H \"x-api-key: $STOTLES_API_KEY\""
  /v1/frameworks/search:
    get:
      description: Search and filter framework agreements and dynamic purchasing systems. Every parameter
        is optional. Use a framework's `id` as the `framework_id` filter on notice search to find the
        call-offs made under it.
      operationId: searchFrameworks
      parameters:
      - name: query
        required: false
        in: query
        description: Free-text search over the framework name (2–500 characters).
        schema:
          minLength: 2
          maxLength: 500
          type: string
      - name: stage
        required: false
        in: query
        description: Filter to frameworks in these procurement stages. Repeatable.
        schema:
          maxItems: 10
          type: array
          items:
            type: string
            enum:
            - stale
            - upcoming
            - tendering
            - closed
            - awarded
            - live
            - expired
            - canceled
            x-enumDescriptions:
              stale: Announced, but aged past the point where tendering would normally have started. Treat
                it as unlikely to progress.
              upcoming: Announced or planned. Suppliers cannot apply yet.
              tendering: Open for suppliers to apply to be appointed to the framework.
              closed: The application deadline has passed; the buyer has not yet announced which suppliers
                were appointed.
              awarded: Suppliers have been appointed, but the agreement isn't available to buy from yet
                (typically its start date is in the future).
              live: In force — buyers can run call-offs against it, and appointed suppliers can win work.
              expired: Past its end date. No new call-offs are expected.
              canceled: Withdrawn or abandoned before it came into force.
        style: form
        explode: true
      - name: start_date_gte
        required: false
        in: query
        description: Only frameworks whose contract start date is on or after this date (inclusive).
        schema:
          format: date
          type: string
      - name: start_date_lte
        required: false
        in: query
        description: Only frameworks whose contract start date is on or before this date (inclusive).
        schema:
          format: date
          type: string
      - name: end_date_gte
        required: false
        in: query
        description: Only frameworks whose contract end date is on or after this date (inclusive).
        schema:
          format: date
          type: string
      - name: end_date_lte
        required: false
        in: query
        description: Only frameworks whose contract end date is on or before this date (inclusive).
        schema:
          format: date
          type: string
      - name: sort
        required: false
        in: query
        description: Sort field. Omitted = relevance ranking.
        schema:
          type: string
          enum:
          - title
          - start_date
          - end_date
          - stage
          - value
      - name: order
        required: false
        in: query
        description: Sort direction (default desc). Applies when `sort` is set.
        schema:
          default: desc
          type: string
          enum:
          - asc
          - desc
      - name: limit
        required: false
        in: query
        description: Maximum results per page (1–50, default 20). Ignored when `cursor` is set.
        schema:
          minimum: 1
          maximum: 50
          default: 20
          type: integer
      - name: cursor
        required: false
        in: query
        description: Opaque pagination cursor from a previous response's `next_cursor`. Carries the page
          and page size, so `limit` is ignored when it is present.
        schema:
          type: string
      responses:
        '200':
          description: A page of matching framework agreements.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FrameworkSearchResponseDto'
              example:
                items:
                - id: 7d9b1f3a-5c2e-4a8b-9d0f-3e6c1a4b7d92
                  title: Technology Products & Associated Services 2
                  description: An agreement for the supply of hardware, software and associated services
                    to public sector buyers, divided into lots covering devices, networking and audio-visual
                    equipment.
                  service_provider:
                    id: e1a3c5b7-9d2f-4b6a-8c0e-5f7a9b1c3d40
                    name: Crown Commercial Service
                  stage: live
                  procedure_type: framework
                  value:
                    amount: 1200000000
                    currency: GBP
                  start_dat

# --- truncated at 32 KB (90 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/stotles/refs/heads/main/openapi/stotles-public-api-openapi.yml