B.R.M Chronographes Public API

The public API from B.R.M Chronographes — 13 operation(s) for public.

Operations 13

GET /api/public/status Public Status #
GET /api/public/catalogue Public Catalogue #
GET /api/public/catalogue/{reference} Public Product Detail #
GET /api/public/collections Public Collections #
GET /api/public/configurator/options/{collection} Public Configurator Options #
POST /api/public/configurator/price Public Configurator Price #
GET /api/public/verify/{serial} Public Verify Serial #
POST /api/public/sync-translations Sync Translations #
GET /api/public/product-image/{ps_id} Public Product Image #
GET /api/public/product/{slug} Public Product Page #
GET /api/public/boutiques Public Boutiques #
POST /api/public/rocket-lead Rocket Lead #
POST /api/public/mesure Mesure #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/brm-chronographes-com:brm-chronographes-com-public-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

brm-chronographes-com-public-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: BRM Hub Public API
  version: 1.0.0
tags:
- name: Public
paths:
  /api/public/status:
    get:
      tags:
      - Public
      summary: Public Status
      operationId: public_status_api_public_status_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
  /api/public/catalogue:
    get:
      tags:
      - Public
      summary: Public Catalogue
      description: Full BRM watch catalogue. English by default, ?lang=fr for French.
      operationId: public_catalogue_api_public_catalogue_get
      parameters:
      - name: lang
        in: query
        required: false
        schema:
          type: string
          description: 'Language: en (default), fr'
          default: en
          title: Lang
        description: 'Language: en (default), fr'
      - name: collection
        in: query
        required: false
        schema:
          type: string
          description: Filter by collection (e.g. V6, DDF12, GP)
          default: ''
          title: Collection
        description: Filter by collection (e.g. V6, DDF12, GP)
      - name: search
        in: query
        required: false
        schema:
          type: string
          description: Search in name, reference, description
          default: ''
          title: Search
        description: Search in name, reference, description
      - name: min_price
        in: query
        required: false
        schema:
          type: number
          description: Minimum price TTC (EUR)
          default: 0
          title: Min Price
        description: Minimum price TTC (EUR)
      - name: max_price
        in: query
        required: false
        schema:
          type: number
          description: Maximum price TTC (EUR, 0 = no limit)
          default: 0
          title: Max Price
        description: Maximum price TTC (EUR, 0 = no limit)
      - name: in_stock
        in: query
        required: false
        schema:
          type: boolean
          description: Only products in stock
          default: false
          title: In Stock
        description: Only products in stock
      - name: sort
        in: query
        required: false
        schema:
          type: string
          description: 'Sort: name, price_asc, price_desc, collection'
          default: name
          title: Sort
        description: 'Sort: name, price_asc, price_desc, collection'
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          description: Max results (max 100)
          default: 50
          title: Limit
        description: Max results (max 100)
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          description: Offset for pagination
          default: 0
          title: Offset
        description: Offset for pagination
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/public/catalogue/{reference}:
    get:
      tags:
      - Public
      summary: Public Product Detail
      description: Full product detail with all specifications, images and description.
      operationId: public_product_detail_api_public_catalogue__reference__get
      parameters:
      - name: reference
        in: path
        required: true
        schema:
          type: string
          title: Reference
      - name: lang
        in: query
        required: false
        schema:
          type: string
          default: en
          title: Lang
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/public/collections:
    get:
      tags:
      - Public
      summary: Public Collections
      description: List all BRM collections with descriptions and price ranges.
      operationId: public_collections_api_public_collections_get
      parameters:
      - name: lang
        in: query
        required: false
        schema:
          type: string
          default: en
          title: Lang
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/public/configurator/options/{collection}:
    get:
      tags:
      - Public
      summary: Public Configurator Options
      description: Options réelles du configurateur pour une collection ou un modèle.
      operationId: public_configurator_options_api_public_configurator_options__collection__get
      parameters:
      - name: collection
        in: path
        required: true
        schema:
          type: string
          title: Collection
      - name: lang
        in: query
        required: false
        schema:
          type: string
          default: en
          title: Lang
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/public/configurator/price:
    post:
      tags:
      - Public
      summary: Public Configurator Price
      description: Prix d'une configuration, calculé par le vrai moteur du configurateur.
      operationId: public_configurator_price_api_public_configurator_price_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PriceRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/public/verify/{serial}:
    get:
      tags:
      - Public
      summary: Public Verify Serial
      description: 'Verify BRM serial number: authenticity + theft status. No customer data exposed.'
      operationId: public_verify_serial_api_public_verify__serial__get
      parameters:
      - name: serial
        in: path
        required: true
        schema:
          type: string
          title: Serial
      - name: lang
        in: query
        required: false
        schema:
          type: string
          default: en
          title: Lang
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/public/sync-translations:
    post:
      tags:
      - Public
      summary: Sync Translations
      description: 'Sync product translations from PrestaShop for a given language.

        Admin auth required via Bearer token.


        L''autorisation passe par `require_admin` : le rôle est relu en base (et le compte

        doit être actif), jamais pris dans le claim du jeton. L''ancien contrôle inline

        appelait `auth_service.verify_token`, qui n''existe pas — l''ImportError était avalé

        par un `except Exception` et l''endpoint répondait 401 en permanence.'
      operationId: sync_translations_api_public_sync_translations_post
      security:
      - HTTPBearer: []
      parameters:
      - name: target_lang
        in: query
        required: false
        schema:
          type: string
          description: 'Language to sync: en, ja, it'
          default: en
          title: Target Lang
        description: 'Language to sync: en, ja, it'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/public/product-image/{ps_id}:
    get:
      tags:
      - Public
      summary: Public Product Image
      description: Proxy image produit PrestaShop (évite le hotlink blocking).
      operationId: public_product_image_api_public_product_image__ps_id__get
      parameters:
      - name: ps_id
        in: path
        required: true
        schema:
          type: integer
          title: Ps Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/public/product/{slug}:
    get:
      tags:
      - Public
      summary: Public Product Page
      description: Page produit publique par référence ou ps_id.
      operationId: public_product_page_api_public_product__slug__get
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
          title: Slug
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/public/boutiques:
    get:
      tags:
      - Public
      summary: Public Boutiques
      description: 'Public store locator: list of active retailers with location data.

        Used by /boutiques map page on the hub frontend.'
      operationId: public_boutiques_api_public_boutiques_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
  /api/public/rocket-lead:
    post:
      tags:
      - Public
      summary: Rocket Lead
      description: 'Capture lead depuis la landing Rocket IA.


        Stocke en base + notifie F.H. via Slack DM + email.

        Public, pas d''auth, rate-limited via la limite globale (slowapi).'
      operationId: rocket_lead_api_public_rocket_lead_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RocketLead'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/public/mesure:
    post:
      tags:
      - Public
      summary: Mesure
      description: 'Relaie UN événement de mesure à Meta. Public, sans authentification.


        Rend toujours 200 : une mesure qui échoue ne doit jamais faire échouer une

        page, ni révéler à un curieux si le jeton est bon.'
      operationId: mesure_api_public_mesure_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MesureEvenement'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    PriceRequest:
      properties:
        collection:
          type: string
          maxLength: 80
          title: Collection
          default: ''
        model_ref:
          type: string
          maxLength: 80
          title: Model Ref
          default: ''
        options:
          anyOf:
          - additionalProperties:
              type: string
            type: object
          - items:
              type: string
            type: array
          - type: 'null'
          title: Options
        accessories:
          anyOf:
          - additionalProperties:
              type: integer
            type: object
          - type: 'null'
          title: Accessories
        country:
          anyOf:
          - type: string
            maxLength: 60
          - type: 'null'
          title: Country
        lang:
          type: string
          maxLength: 5
          title: Lang
          default: en
      type: object
      title: PriceRequest
      description: '`options` : les `option_id` du configurateur (voir

        /api/public/configurator/options/{collection}), en liste ou — forme

        historique — en dictionnaire catégorie → option_id. `country` (facultatif)

        ajoute le prix du pays de livraison.'
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    MesureEvenement:
      properties:
        event_name:
          type: string
          title: Event Name
        event_id:
          type: string
          title: Event Id
        event_source_url:
          anyOf:
          - type: string
          - type: 'null'
          title: Event Source Url
        fbp:
          anyOf:
          - type: string
          - type: 'null'
          title: Fbp
        fbc:
          anyOf:
          - type: string
          - type: 'null'
          title: Fbc
        custom_data:
          anyOf:
          - type: object
          - type: 'null'
          title: Custom Data
        consent:
          type: boolean
          title: Consent
          default: false
      type: object
      required:
      - event_name
      - event_id
      title: MesureEvenement
    RocketLead:
      properties:
        name:
          type: string
          maxLength: 120
          minLength: 2
          title: Name
        email:
          type: string
          format: email
          title: Email
        company:
          anyOf:
          - type: string
            maxLength: 160
          - type: 'null'
          title: Company
        team_size:
          anyOf:
          - type: string
            maxLength: 20
          - type: 'null'
          title: Team Size
        challenge:
          anyOf:
          - type: string
            maxLength: 2000
          - type: 'null'
          title: Challenge
      type: object
      required:
      - name
      - email
      title: RocketLead
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer