Bootic Customers API

Shop customers. Includes customer authentication and password-reset flows.

Operations 21

GET /customer_tags List customer tags #
GET /shops/{shop_id}/customer_tags List customer tags #
GET /contact_groups List contact groups (flat) #
POST /contact_groups Create a contact group (flat) #
GET /shops/{shop_id}/customer_groups List contact groups (legacy shop-nested) #
POST /shops/{shop_id}/customer_groups Create a contact group (legacy shop-nested) #
GET /contact_groups/{id} Get a contact group #
PUT /contact_groups/{id} Update a contact group #
DELETE /contact_groups/{id} Delete a contact group #
GET /contact_groups/{id}/contacts List contacts in a group #
GET /customers List customers #
POST /customers Create a customer #
GET /customers/{id} Get a customer #
PUT /customers/{id} Update a customer #
GET /customers/{id}/last_ordered_products Get last ordered products #
POST /customers/{id}/activations Start contact activation #
POST /customers/{id}/phone_validations Start phone validation #
DELETE /customers/{id}/activation Demote a contact #
POST /customers/sessions Authenticate a customer #
POST /customers/reset_password Request a password reset #
PUT /customers/activations/{token} Activate a customer account #

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/bootic-customers-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

bootic-customers-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Bolder API v2 Customers API
  version: '2.0'
  description: '## Getting Started


    The Bolder API provides programmatic access to your Bolder Shop data through a

    hypermedia-driven REST interface.'
  contact:
    name: Bolder API Support
    url: https://www.onbolder.com
servers:
- url: https://api.onbolder.com/v2
  description: Production
security:
- bearerAuth: []
tags:
- name: Customers
  description: Shop customers. Includes customer authentication and password-reset flows.
paths:
  /customer_tags:
    get:
      tags:
      - Customers
      summary: List customer tags
      description: 'Returns customer tags across the account.

        Optionally filter by `shop_id` or `seller_id` query parameter.'
      operationId: listCustomerTags
      parameters:
      - name: shop_id
        in: query
        schema:
          type: integer
        description: Filter by shop ID
      - name: seller_id
        in: query
        schema:
          type: integer
        description: Filter by seller ID
      - name: page
        in: query
        schema:
          type: integer
          default: 1
      - name: per_page
        in: query
        schema:
          type: integer
          default: 50
      responses:
        '200':
          description: Customer tags list
  /shops/{shop_id}/customer_tags:
    parameters:
    - name: shop_id
      in: path
      required: true
      schema:
        type: integer
      example: 1
    get:
      tags:
      - Customers
      summary: List customer tags
      description: Returns all tags currently applied to customers in this shop.
      operationId: listContactTags
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  \"https://api.onbolder.com/v2/shops/1/customer_tags\"\n"
      responses:
        '200':
          description: Customer tags list
          content:
            application/json:
              example:
                _class:
                - results
                - tags
                _embedded:
                  items:
                  - name: vip
                  - name: newsletter
  /contact_groups:
    get:
      tags:
      - Customers
      summary: List contact groups (flat)
      description: Returns customer groups (segments). Optionally filter by `shop_id` or `seller_id`; without either, returns groups across all of the account's sellers.
      operationId: listContactGroupsFlat
      parameters:
      - name: shop_id
        in: query
        schema:
          type: integer
      - name: seller_id
        in: query
        schema:
          type: integer
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  \"https://api.onbolder.com/v2/contact_groups?seller_id=5\"\n"
      responses:
        '200':
          description: Contact groups list
          content:
            application/json:
              example:
                _class:
                - results
                - contactGroups
                total_items: 2
                _embedded:
                  items:
                  - id: 1
                    name: VIP Customers
                    customers_count: 42
    post:
      tags:
      - Customers
      summary: Create a contact group (flat)
      description: '`seller_id` is required in the body.'
      operationId: createContactGroupFlat
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -X POST \\\n  -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"seller_id\":5,\"name\":\"VIP Customers\"}' \\\n  \"https://api.onbolder.com/v2/contact_groups\"\n"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - name
              - seller_id
              properties:
                seller_id:
                  type: integer
                name:
                  type: string
                cart_requirements_list_id:
                  type: integer
                price_list_id:
                  type: integer
                allow_local_pickup:
                  type: boolean
                allow_shipping:
                  type: boolean
            example:
              seller_id: 5
              name: VIP Customers
      responses:
        '201':
          description: Contact group created
        '422':
          description: Validation error
  /shops/{shop_id}/customer_groups:
    parameters:
    - name: shop_id
      in: path
      required: true
      schema:
        type: integer
      example: 1
    get:
      tags:
      - Customers
      summary: List contact groups (legacy shop-nested)
      description: Returns customer groups (segments) for the shop.
      operationId: listContactGroups
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  \"https://api.onbolder.com/v2/shops/1/customer_groups\"\n"
      responses:
        '200':
          description: Contact groups list
          content:
            application/json:
              example:
                _class:
                - results
                - contactGroups
                total_items: 2
                _embedded:
                  items:
                  - id: 1
                    name: VIP Customers
                    customers_count: 42
                    allow_local_pickup: true
                    allow_shipping: true
                    allow_signups: false
    post:
      tags:
      - Customers
      summary: Create a contact group (legacy shop-nested)
      description: Creates a customer group for the shop.
      operationId: createContactGroup
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -X POST \\\n  -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"VIP Customers\"}' \\\n  \"https://api.onbolder.com/v2/shops/1/customer_groups\"\n"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - name
              properties:
                name:
                  type: string
                cart_requirements_list_id:
                  type: integer
                price_list_id:
                  type: integer
                allow_local_pickup:
                  type: boolean
                allow_shipping:
                  type: boolean
            example:
              name: VIP Customers
      responses:
        '201':
          description: Contact group created
        '422':
          description: Validation error
  /contact_groups/{id}:
    parameters:
    - name: id
      in: path
      required: true
      schema:
        type: integer
      example: 1
    get:
      tags:
      - Customers
      summary: Get a contact group
      operationId: getContactGroup
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  \"https://api.onbolder.com/v2/contact_groups/1\"\n"
      responses:
        '200':
          description: Contact group entity
          content:
            application/json:
              example:
                id: 1
                name: VIP Customers
                customers_count: 42
        '403':
          description: Access denied
        '404':
          description: Not found
    put:
      tags:
      - Customers
      summary: Update a contact group
      operationId: updateContactGroup
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -X PUT \\\n  -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\":\"Premium Customers\"}' \\\n  \"https://api.onbolder.com/v2/contact_groups/1\"\n"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                cart_requirements_list_id:
                  type: integer
                price_list_id:
                  type: integer
                allow_local_pickup:
                  type: boolean
                allow_shipping:
                  type: boolean
            example:
              name: Premium Customers
      responses:
        '200':
          description: Contact group updated
        '403':
          description: Access denied
    delete:
      tags:
      - Customers
      summary: Delete a contact group
      operationId: deleteContactGroup
      responses:
        '204':
          description: Contact group deleted
        '403':
          description: Access denied
  /contact_groups/{id}/contacts:
    parameters:
    - name: id
      in: path
      required: true
      schema:
        type: integer
      example: 1
    get:
      tags:
      - Customers
      summary: List contacts in a group
      description: Returns all contacts belonging to this contact group.
      operationId: listContactGroupContacts
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  \"https://api.onbolder.com/v2/contact_groups/1/contacts\"\n"
      responses:
        '200':
          description: Contacts in this group
          content:
            application/json:
              example:
                _class:
                - results
                - customers
                total_items: 42
                _embedded:
                  items:
                  - id: 3001
                    email: jane@example.com
                    name: Jane Smith
  /customers:
    get:
      tags:
      - Customers
      summary: List customers
      description: 'Returns customers for a shop, or for a whole seller across all of its shops.


        `shop_id` and `seller_id` are both optional. If the token covers exactly

        one shop, that shop is auto-resolved and results are scoped to it. If the

        token covers multiple shops belonging to a single seller, omitting both

        params returns customers across all of that seller''s shops. A token

        covering multiple sellers (or a god token) must pass `shop_id` or

        `seller_id` explicitly — there is no "all sellers" search.'
      operationId: listCustomers
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "# List all customers for a shop\ncurl -s -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  \"https://api.onbolder.com/v2/customers?shop_id=1\"\n\n# List customers across all of a seller's shops\ncurl -s -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  \"https://api.onbolder.com/v2/customers?seller_id=1\"\n\n# Search by name or email\ncurl -s -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  \"https://api.onbolder.com/v2/customers?shop_id=1&q=jane\"\n"
      parameters:
      - name: shop_id
        in: query
        required: false
        schema:
          type: integer
        description: 'ID of the shop whose contacts to list. Optional if the token covers exactly one shop, or if `seller_id` is given instead.

          '
        example: 1
      - name: seller_id
        in: query
        required: false
        schema:
          type: integer
        description: 'ID of the seller whose contacts to list, across all of its shops. Only needed when `shop_id` is omitted and the token covers more than one shop or seller.

          '
        example: 1
      - name: q
        in: query
        schema:
          type: string
        description: Full-text search across name and email.
        example: jane
      - name: customer_status
        in: query
        schema:
          type: string
          enum:
          - public
          - private
          - pending
        description: Filter by customer account status.
        example: private
      - name: tags
        in: query
        schema:
          type: string
        description: Comma-separated tag names.
      - name: opt_in
        in: query
        schema:
          type: boolean
      - name: page
        in: query
        schema:
          type: integer
          default: 1
          minimum: 1
        example: 1
      - name: per_page
        in: query
        schema:
          type: integer
          default: 20
          minimum: 1
          maximum: 200
        example: 20
      - name: created_on_gte
        in: query
        schema:
          type: string
          format: date-time
        description: Contacts created on or after this ISO 8601 timestamp.
        example: '2024-01-01T00:00:00Z'
      - name: created_on_lte
        in: query
        schema:
          type: string
          format: date-time
        description: Contacts created on or before this ISO 8601 timestamp.
        example: '2024-12-31T23:59:59Z'
      - name: sort
        in: query
        schema:
          type: string
          enum:
          - created_on_asc
          - created_on_desc
          - name_asc
          - name_desc
          default: created_on_desc
        description: Sort order for results.
        example: created_on_desc
      responses:
        '200':
          description: Paginated list of contacts
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactList'
              example:
                _class:
                - results
                - customers
                total_items: 1
                per_page: 20
                page: 1
                _links:
                  self:
                    href: https://api.onbolder.com/v2/customers?shop_id=1
                  customers:authenticate:
                    href: https://api.onbolder.com/v2/customers/sessions
                    method: post
                  customers:reset_password:
                    href: https://api.onbolder.com/v2/customers/reset_password
                    method: post
                _embedded:
                  items:
                  - id: 3001
                    shop_id: 1
                    email: jane@example.com
                    name: Jane Smith
                    customer_status: private
                    phone_validated: false
                    created_on: '2024-03-10T11:00:00Z'
                    _links:
                      self:
                        href: https://api.onbolder.com/v2/customers/3001
                      orders:
                        href: https://api.onbolder.com/v2/orders?shop_id=1&contact_email=jane@example.com
        '403':
          description: Access denied
        '422':
          description: '`shop_id` or `seller_id` required — the token covers more than one shop and more than one seller (or is a god token), so neither can be auto-resolved.

            '
    post:
      tags:
      - Customers
      summary: Create a customer
      description: If a contact with the given `email` already exists for this shop, it is updated rather than duplicated.
      operationId: createCustomer
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -X POST \\\n  -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"shop_id\":1,\"email\":\"newcustomer@example.com\",\"name\":\"Jane Smith\"}' \\\n  \"https://api.onbolder.com/v2/customers\"\n"
      requestBody:
        required: true
        content:
          application/json:
            schema:
              allOf:
              - $ref: '#/components/schemas/ContactInput'
              - type: object
                required:
                - shop_id
                properties:
                  shop_id:
                    type: integer
            example:
              shop_id: 1
              email: newcustomer@example.com
              name: Jane Smith
      responses:
        '201':
          description: Customer created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
              example:
                id: 3001
                shop_id: 1
                email: newcustomer@example.com
                name: Jane Smith
                customer_status: public
                phone_validated: false
                created_on: '2024-06-20T14:00:00Z'
                _links:
                  self:
                    href: https://api.onbolder.com/v2/customers/3001
                  orders:
                    href: https://api.onbolder.com/v2/orders?shop_id=1&contact_email=newcustomer@example.com
        '422':
          description: Validation error
  /customers/{id}:
    parameters:
    - name: id
      in: path
      required: true
      schema:
        type: integer
    get:
      tags:
      - Customers
      summary: Get a customer
      operationId: getCustomer
      x-codeSamples:
      - lang: Shell
        label: cURL
        source: "curl -s -H \"Authorization: Bearer $BOLDER_TOKEN\" \\\n  \"https://api.onbolder.com/v2/customers/3001\"\n"
      responses:
        '200':
          description: Customer entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
              example:
                id: 3001
                shop_id: 1
                email: jane@example.com
                name: Jane Smith
                customer_status: private
                phone_number: '+15551234567'
                phone_validated: true
                created_on: '2024-03-10T11:00:00Z'
                _links:
                  self:
                    href: https://api.onbolder.com/v2/customers/3001
                  orders:
                    href: https://api.onbolder.com/v2/orders?shop_id=1&contact_email=jane@example.com
                  customers:update:
                    href: https://api.onbolder.com/v2/customers/3001
                    method: put
        '403':
          description: Access denied
        '404':
          description: Customer not found
    put:
      tags:
      - Customers
      summary: Update a customer
      operationId: updateCustomer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactInput'
            example:
              name: Janet Smith-Jones
              phone_number: '+15559876543'
      responses:
        '200':
          description: Customer updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
              example:
                id: 3001
                email: jane@example.com
                name: Janet Smith-Jones
                phone_number: '+15559876543'
                _links:
                  self:
                    href: https://api.onbolder.com/v2/customers/3001
  /customers/{id}/last_ordered_products:
    get:
      tags:
      - Customers
      summary: Get last ordered products
      operationId: getCustomerLastOrderedProducts
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: Last ordered products
  /customers/{id}/activations:
    post:
      tags:
      - Customers
      summary: Start contact activation
      operationId: startContactActivation
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
      responses:
        '201':
          description: Activation started
  /customers/{id}/phone_validations:
    post:
      tags:
      - Customers
      summary: Start phone validation
      operationId: startPhoneValidation
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
      responses:
        '201':
          description: Phone validation started
  /customers/{id}/activation:
    delete:
      tags:
      - Customers
      summary: Demote a contact
      operationId: demoteContact
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: integer
      responses:
        '204':
          description: Contact demoted
  /customers/sessions:
    post:
      tags:
      - Customers
      summary: Authenticate a customer
      description: 'Validates email + password credentials for a shop''s customer account.

        Returns the contact entity with a session token on success.

        Requires a Bearer token with `customers.write` scope (the same token used for

        all v2 requests) and `shop_id` in the request body.'
      operationId: authenticateCustomer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - email
              - password
              - shop_id
              properties:
                shop_id:
                  type: integer
                  description: ID of the shop the customer belongs to.
                email:
                  type: string
                password:
                  type: string
            example:
              shop_id: 1
              email: jane@example.com
              password: s3cr3tpassword
      responses:
        '200':
          description: Authentication successful
          content:
            application/json:
              example:
                id: 3001
                email: jane@example.com
                name: Jane Smith
                customer_status: private
                token: eyJhbGciOiJIUzI1NiJ9...
                _links:
                  self:
                    href: https://api.onbolder.com/v2/customers/3001
        '422':
          description: Invalid credentials
  /customers/reset_password:
    post:
      tags:
      - Customers
      summary: Request a password reset
      description: 'Sends a password-reset email to the customer''s address.

        Returns 200 even if the email is not found, to avoid user enumeration.

        Use the 422 response only for missing `shop_id`.'
      operationId: resetCustomerPassword
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - email
              - shop_id
              properties:
                shop_id:
                  type: integer
                email:
                  type: string
            example:
              shop_id: 1
              email: jane@example.com
      responses:
        '200':
          description: Reset email sent (or silently ignored if not found)
          content:
            application/json:
              example:
                message: If that email is registered, a reset link has been sent.
        '422':
          description: '`shop_id` required'
  /customers/activations/{token}:
    put:
      tags:
      - Customers
      summary: Activate a customer account
      description: 'Completes the customer account activation flow by setting the initial

        password. The `token` is sent to the customer''s email after the

        merchant triggers `customers:start_activation`.'
      operationId: activateCustomer
      parameters:
      - name: token
        in: path
        required: true
        schema:
          type: string
        description: Activation token from the email link.
        example: abc123def456ghi789
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - password
              properties:
                password:
                  type: string
                  description: The new password for the account (min 8 chars).
            example:
              password: newSecureP@ss1
      responses:
        '200':
          description: Account activated
          content:
            application/json:
              example:
                id: 3001
                email: jane@example.com
                status: private
                _links:
                  self:
                    href: https://api.onbolder.com/v2/customers/3001
        '422':
          description: Invalid or expired token
components:
  schemas:
    Contact:
      type: object
      properties:
        _links:
          $ref: '#/components/schemas/HalLinks'
        id:
          type: integer
        shop_id:
          type: integer
        email:
          type: string
        name:
          type: string
          description: Full name (first and last)
        phone_number:
          type: string
        phone_validated:
          type: boolean
        validation_method:
          type: string
        company_name:
          type: string
        company_id_number:
          type: string
          description: Company tax/ID number (RUT, DNI, etc.), formatted
        company_activity_code:
          type: string
        customer_status:
          type: string
          enum:
          - public
          - private
          - pending
          description: Customer account status.
        opt_in:
          type: boolean
          description: Whether the contact has opted in to marketing emails.
        source:
          type: string
        last_logged_on:
          type: string
          format: date-time
        last_ip_address:
          type: string
        has_password:
          type: boolean
        total_spent:
          type: integer
          description: In cents
        available_orders_count:
          type: integer
        salesperson_id:
          type: integer
        favorite_product_ids:
          type: array
          items:
            type: integer
        used_promotion_ids:
          type: array
          items:
            type: integer
        tags:
          type: array
          items:
            type: string
        created_on:
          type: string
          format: date-time
        updated_on:
          type: string
          format: date-time
        _embedded:
          type: object
          properties:
            contact_group:
              type: object
              description: Present when the contact belongs to a group
            addresses:
              type: array
              items:
                $ref: '#/components/schemas/Address'
    Pagination:
      type: object
      properties:
        total_items:
          type: integer
          example: 42
        per_page:
          type: integer
          example: 20
        page:
          type: integer
          example: 1
    Address:
      type: object
      properties:
        street:
          type: string
        street_2:
          type: string
        locality_name:
          type: string
        region_name:
          type: string
        country_name:
          type: string
        postal_code:
          type: string
    ContactList:
      allOf:
      - $ref: '#/components/schemas/Pagination'
      - type: object
        properties:
          _links:
            $ref: '#/components/schemas/HalLinks'
          _class:
            type: array
            items:
              type: string
            example:
            - results
            - customers
          _embedded:
            type: object
            properties:
              contacts:
                type: array
                items:
                  $ref: '#/components/schemas/Contact'
    HalLinks:
      type: object
      additionalProperties:
        oneOf:
        - $ref: '#/components/schemas/HalLink'
        - type: array
          items:
            $ref: '#/components/schemas/HalLink'
    ContactInput:
      type: object
      required:
      - email
      - name
      description: 'Input schema for creating or updating a contact. On create, `email` and `name` are required. On update (PUT), all fields are optional. If a contact with the given `email` already exists, it is updated rather than duplicated.

        '
      properties:
        email:
          type: string
          format: email
          description: Contact email address. Used as the unique identifier for find-or-create.
        name:
          type: string
          description: Full name (first and last).
        phone_number:
          type: string
        company_name:
          type: string
          description: Company name. Creates or finds a company record automatically.
        company_id_number:
          type: string
          description: Company tax/ID number (RUT, DNI, etc.), stored with the company record.
        tags:
          type: array
          items:
            type: string
          description: Tag names. Replaces all existing tags.
        opt_in:
          type: boolean
          description: Whether the contact accepts marketing emails/newsletters.
        contact_group_id:
          type: integer
          description: Contact group ID to assign this contact to.
        salesperson_id:
          type: string
          description: Shop admin user ID
        source:
          type: string
          enum:
          - signup-form
          - register-form
          - contact-form
          - checkout
          description: Origin of the contact record. Defaults to `API` if omitted on create.
        custom_data:
          type: array
          description: Custom field values for this contact.
          items:
            type: object
            properties:
              key:
                type: string
                description: Field key (slug)
              field_id:
                type: integer
                description: Field definition ID (optional alternative to key)
              value:
                description: Field value
    HalLink:
      type: object
      required:
      - href
      properties:
        href:
          type: string
        templated:
          type: boolean
        method:
          type: string
          enum:
          - get
          - post
          - put
          - patch
          - delete
        title:
          type: string
        type:
          type: string
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
    oauth2:
      type: oauth2
      flows:
        clientCredentials:
          tokenUrl: https://auth.onbolder.com/oauth/token
          scopes:
            products.read: View products, variants and collections
            products.write: Create and update products
            orders.read: View orders
            orders.write: Create and update orders
            customers.read: View customer profiles
            customers.write: Update customer profiles
            shops.read: View shop configuration
            shops.write: Update shop configuration
            hub.read: View content (posts, pages)
            hub.write: Create and update content
            store.read: View themes and assets
            store.write: Manage themes and assets
            sellers.read: View seller information
            batches.read: View batch job status
            batches.write: Create and run batch jobs
        authorizationCode:
          authorizationUrl: https://auth.onbolder.com/oauth/authorize
          tokenUrl: https://auth.onbolder.com/oauth/token
          scopes:
            products.read: View products, variants and collections
            products.write: Create and update products
            orders.read: View orders
            orders.write: Create and update orders
            customers.read: View customer profiles
            customers.write: Update customer profiles
            shops.read: View shop configuration
            shops.write: Update shop configuration
            hub.read: View content (posts, pages)
            hub.write: Create and update content
            store.read: View themes and assets
            store.write: Manage themes and assets
            sellers.read: View seller information
            batches.read: View batch job status
            batches.write: Create and run batch jobs