Bem

Bem Collections API

Collections are named groups of embedded items used by Enrich functions for semantic search. Each collection is referenced by a `collectionName`, which supports dot notation for hierarchical paths (e.g. `customers.premium.vip`). Names must contain only letters, digits, underscores, and dots, and each segment must start with a letter or underscore. ## Items Items carry either a string or a JSON object in their `data` field. When items are added or updated, their `data` is embedded asynchronously — `POST /v3/collections/items` and `PUT /v3/collections/items` return immediately with a `pending` status and an `eventID` that can be correlated with webhook notifications once processing completes. ## Listing and hierarchy Use `GET /v3/collections` with `parentCollectionName` to list collections under a path, or `collectionNameSearch` for a case-insensitive substring match. `GET /v3/collections/items` retrieves a specific collection's items; pass `includeSubcollections=true` to fold in items from all descendant collections. ## Token counting Use `POST /v3/collections/token-count` to check whether texts fit within the embedding model's 8,192-token-per-text limit before submitting them for embedding.

OpenAPI Specification

bem-collections-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Bem Buckets Collections API
  version: 1.0.0
  description: "Buckets are named partitions of the knowledge graph within an\naccount+environment. Entities, mentions, and relations are scoped to a\nbucket so a single account+environment can host multiple isolated graphs\n— for example one per data source or workspace.\n\nEvery account+environment has exactly one **default** bucket, used by\nunscoped flows. The default bucket can be renamed but never deleted.\n\nUse these endpoints to create, list, fetch, rename, and delete buckets:\n\n- **`POST /v3/buckets`** creates a non-default bucket.\n- **`GET /v3/buckets`** lists buckets with cursor pagination\n  (`startingAfter` / `endingBefore` over `bucketID`).\n- **`PATCH /v3/buckets/{bucketID}`** updates `name` and/or `description`.\n- **`DELETE /v3/buckets/{bucketID}`** soft-deletes a bucket. A non-empty\n  bucket is rejected with `409 Conflict` unless `?cascade=true` is\n  passed; the default bucket can never be deleted."
servers:
- url: https://api.bem.ai
  description: US Region API
  variables: {}
- url: https://api.eu1.bem.ai
  description: EU Region API
  variables: {}
security:
- API Key: []
tags:
- name: Collections
  description: 'Collections are named groups of embedded items used by Enrich functions for semantic search.


    Each collection is referenced by a `collectionName`, which supports dot notation for

    hierarchical paths (e.g. `customers.premium.vip`). Names must contain only letters,

    digits, underscores, and dots, and each segment must start with a letter or underscore.


    ## Items


    Items carry either a string or a JSON object in their `data` field. When items are added

    or updated, their `data` is embedded asynchronously — `POST /v3/collections/items` and

    `PUT /v3/collections/items` return immediately with a `pending` status and an `eventID`

    that can be correlated with webhook notifications once processing completes.


    ## Listing and hierarchy


    Use `GET /v3/collections` with `parentCollectionName` to list collections under a path,

    or `collectionNameSearch` for a case-insensitive substring match. `GET /v3/collections/items`

    retrieves a specific collection''s items; pass `includeSubcollections=true` to fold in items

    from all descendant collections.


    ## Token counting


    Use `POST /v3/collections/token-count` to check whether texts fit within the embedding

    model''s 8,192-token-per-text limit before submitting them for embedding.'
paths:
  /v3/collections:
    delete:
      operationId: v3-delete-collection
      summary: Delete a Collection
      parameters:
      - name: collectionName
        in: query
        required: true
        description: 'The name/path of the collection to delete. Must use only letters, digits, underscores, and dots.

          Each segment must start with a letter or underscore.'
        schema:
          type: string
      responses:
        '200':
          description: The request has succeeded.
        '404':
          description: The server cannot find the requested resource.
      tags:
      - Collections
    get:
      operationId: v3-list-collections
      summary: List Collections
      parameters:
      - name: parentCollectionName
        in: query
        required: false
        description: 'Optional filter to list only collections under a specific parent collection path.

          For example, "customers" will return "customers", "customers.premium", "customers.premium.vip", etc.'
        schema:
          type: string
      - name: collectionNameSearch
        in: query
        required: false
        description: 'Optional substring search filter for collection names (case-insensitive).

          For example, "premium" will match "customers.premium", "products.premium", etc.'
        schema:
          type: string
      - name: page
        in: query
        required: false
        description: Page number for pagination
        schema:
          type: integer
          minimum: 1
          default: 1
      - name: limit
        in: query
        required: false
        description: Number of collections per page
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 50
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListCollectionsResponseV3'
      tags:
      - Collections
    post:
      operationId: v3-create-collection
      summary: Create a Collection
      parameters: []
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CollectionResponseV3'
              examples:
                The created collection:
                  summary: The created collection
                  value:
                    collectionID: cl_2N6gH8ZKCmvb6BnFcGqhKJ98VzP
                    collectionName: product_catalog
                    itemCount: 0
                    createdAt: '2024-10-20T15:30:00Z'
                    updatedAt: '2024-10-20T15:30:00Z'
      tags:
      - Collections
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCollectionRequestV3'
            examples:
              Create empty collection:
                summary: Create empty collection
                value:
                  collectionName: product_catalog
  /v3/collections/items:
    delete:
      operationId: v3-delete-collection-item
      summary: Delete an item from a Collection
      parameters:
      - name: collectionName
        in: query
        required: true
        description: 'The name/path of the collection. Must use only letters, digits, underscores, and dots.

          Each segment must start with a letter or underscore.'
        schema:
          type: string
      - name: collectionItemID
        in: query
        required: true
        description: The unique identifier of the item to delete
        schema:
          type: string
      responses:
        '204':
          description: There is no content to send for this request, but the headers may be useful.
        '404':
          description: The server cannot find the requested resource.
      tags:
      - Collections
    get:
      operationId: v3-get-collection
      summary: Get a Collection
      parameters:
      - name: collectionName
        in: query
        required: true
        description: 'The name/path of the collection. Must use only letters, digits, underscores, and dots.

          Each segment must start with a letter or underscore.'
        schema:
          type: string
      - name: page
        in: query
        required: false
        description: Page number for pagination
        schema:
          type: integer
          minimum: 1
          default: 1
      - name: limit
        in: query
        required: false
        description: Number of items per page
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 50
      - name: includeSubcollections
        in: query
        required: false
        description: 'When true, includes items from all subcollections under the specified collection path.

          For example, querying "customers" with this flag will return items from "customers",

          "customers.premium", "customers.premium.vip", etc.'
        schema:
          type: boolean
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CollectionResponseV3'
        '404':
          description: The server cannot find the requested resource.
      tags:
      - Collections
    post:
      operationId: v3-add-collection-items
      summary: Add new items to a Collection
      parameters: []
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AddCollectionItemsResponseV3'
              example:
                status: pending
                message: Collection items are being processed asynchronously
                eventID: evt_2N6gH8ZKCmvb6BnFcGqhKJ98VzP
        '400':
          description: The server could not understand the request due to invalid syntax.
        '404':
          description: The server cannot find the requested resource.
        '500':
          description: Server error
      tags:
      - Collections
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AddCollectionItemsRequestV3'
            examples:
              Add new items (objects):
                summary: Add new items (objects)
                value:
                  collectionName: product_catalog
                  items:
                  - data:
                      sku: SKU-11111
                      name: Deluxe Component
                      category: Hardware
                      price: 299.99
                  - data:
                      sku: SKU-22222
                      name: Standard Part
                      category: Tools
                      price: 49.99
              Add new items (strings):
                summary: Add new items (strings)
                value:
                  collectionName: product_catalog
                  items:
                  - data: 'SKU-12345: Industrial Widget'
                  - data: 'SKU-67890: Premium Gear'
    put:
      operationId: v3-update-collection-items
      summary: Update existing items in a Collection
      parameters: []
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateCollectionItemsResponseV3'
              example:
                status: pending
                message: Collection items are being updated asynchronously
                eventID: evt_3M7hI9ALDnwc7CoGdHriLK09WaQ
        '400':
          description: The server could not understand the request due to invalid syntax.
        '404':
          description: The server cannot find the requested resource.
        '500':
          description: Server error
      tags:
      - Collections
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCollectionItemsRequestV3'
            examples:
              Update existing items:
                summary: Update existing items
                value:
                  collectionName: product_catalog
                  items:
                  - collectionItemID: clitm_2N6gH8ZKCmvb6BnFcGqhKJ98VzP
                    data: 'SKU-12345: Updated Industrial Widget - Premium Edition'
                  - collectionItemID: clitm_3M7hI9ALDnwc7CoGdHriLK09WaQ
                    data:
                      sku: SKU-67890
                      name: Updated Premium Gear
                      category: Hardware
                      price: 399.99
  /v3/collections/token-count:
    post:
      operationId: v3-count-tokens
      summary: Count tokens for texts
      description: 'Count the number of tokens in the provided texts using the BGE M3 tokenizer.

        This is useful for checking if texts will fit within the embedding model''s token limit

        (8,192 tokens per text) before sending them for embedding.'
      parameters: []
      responses:
        '200':
          description: The request has succeeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CountTokensResponseV3'
        '400':
          description: The server could not understand the request due to invalid syntax.
        '500':
          description: Server error
      tags:
      - Collections
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CountTokensRequestV3'
components:
  schemas:
    CountTokensRequestV3:
      type: object
      required:
      - texts
      properties:
        texts:
          type: array
          items:
            type: string
          description: One or more texts to tokenize.
      description: Request body for counting tokens against the embedding tokenizer.
    AddCollectionItemsResponseV3:
      type: object
      required:
      - status
      - message
      - eventID
      properties:
        status:
          type: string
          enum:
          - pending
          description: Processing status
        message:
          type: string
          description: Status message
        eventID:
          type: string
          description: Event ID for tracking this operation. Use this to correlate with webhook notifications.
        addedCount:
          type: integer
          description: Number of new items added (only present in synchronous mode, deprecated)
        items:
          type: array
          items:
            $ref: '#/components/schemas/CollectionItemV3'
          description: Array of items that were added (only present in synchronous mode, deprecated)
      description: Response after queuing items for async processing
    CollectionItemV3:
      type: object
      required:
      - collectionItemID
      - data
      - createdAt
      - updatedAt
      properties:
        collectionItemID:
          type: string
          description: Unique identifier for the item
        data:
          oneOf:
          - type: string
          - type: object
            unevaluatedProperties: {}
          description: The data stored in this item
        createdAt:
          type: string
          format: date-time
          description: When the item was created
        updatedAt:
          type: string
          format: date-time
          description: When the item was last updated
      description: A single item in a collection
    CollectionMetadataV3:
      type: object
      required:
      - collectionID
      - collectionName
      - itemCount
      - createdAt
      properties:
        collectionID:
          type: string
          description: Unique identifier for the collection
        collectionName:
          type: string
          description: The collection name/path. Only letters, digits, underscores, and dots are allowed.
        itemCount:
          type: integer
          description: Number of items in the collection
        createdAt:
          type: string
          format: date-time
          description: When the collection was created
        updatedAt:
          type: string
          format: date-time
          description: When the collection was last updated
      description: Collection metadata without items
    CountTokensResponseV3:
      type: object
      properties:
        token_counts:
          type: array
          items:
            $ref: '#/components/schemas/CountTokensItemV3'
          description: Per-text tokenization results in the same order as the request.
        total_tokens:
          type: integer
          description: Sum of `token_count` across all texts.
        max_token_limit:
          type: integer
          description: Maximum tokens allowed per text by the embedding model.
        texts_exceeding_limit:
          type: integer
          description: Number of input texts that exceed `max_token_limit`.
      description: Response for the token count endpoint.
    CollectionItemUpdateV3:
      type: object
      required:
      - collectionItemID
      - data
      properties:
        collectionItemID:
          type: string
          description: Unique identifier for the item to update
        data:
          oneOf:
          - type: string
          - type: object
            unevaluatedProperties: {}
          description: The updated data to be embedded and stored (string or JSON object)
      description: Data for updating an existing item in a collection
    CreateCollectionRequestV3:
      type: object
      required:
      - collectionName
      properties:
        collectionName:
          type: string
          description: 'Unique name/path for the collection. Supports dot notation for hierarchical paths.


            - Only letters (a-z, A-Z), digits (0-9), underscores (_), and dots (.) are allowed

            - Each segment (between dots) must start with a letter or underscore (not a digit)

            - Segments cannot consist only of digits

            - Each segment must be 1-256 characters

            - No leading, trailing, or consecutive dots

            - Invalid names are rejected with a 400 Bad Request error


            **Valid Examples:**

            - ''product_catalog''

            - ''orders.line_items.sku''

            - ''customer_data''

            - ''price_v2''


            **Invalid Examples:**

            - ''product-catalog'' (contains hyphen)

            - ''123items'' (starts with digit)

            - ''items..data'' (consecutive dots)

            - ''order#123'' (contains invalid character #)'
      description: Request to create a new collection
    UpdateCollectionItemsRequestV3:
      type: object
      required:
      - collectionName
      - items
      properties:
        collectionName:
          type: string
          description: 'The name/path of the collection. Must use only letters, digits, underscores, and dots.

            Each segment must start with a letter or underscore.'
        items:
          type: array
          items:
            $ref: '#/components/schemas/CollectionItemUpdateV3'
          minItems: 1
          maxItems: 100
          description: Array of items to update (maximum 100 items per request)
      description: Request to update existing items in a collection
    ListCollectionsResponseV3:
      type: object
      required:
      - collections
      - page
      - limit
      - totalCount
      - totalPages
      properties:
        collections:
          type: array
          items:
            $ref: '#/components/schemas/CollectionMetadataV3'
          description: List of collections
        page:
          type: integer
          description: Current page number
        limit:
          type: integer
          description: Number of collections per page
        totalCount:
          type: integer
          description: Total number of collections
        totalPages:
          type: integer
          description: Total number of pages
      description: Response for listing collections
    AddCollectionItemsRequestV3:
      type: object
      required:
      - collectionName
      - items
      properties:
        collectionName:
          type: string
          description: 'The name/path of the collection. Must use only letters, digits, underscores, and dots.

            Each segment must start with a letter or underscore.'
        items:
          type: array
          items:
            $ref: '#/components/schemas/CollectionItemInputV3'
          minItems: 1
          maxItems: 100
          description: Array of items to add (maximum 100 items per request)
      description: Request to add new items to a collection
    CountTokensItemV3:
      type: object
      properties:
        index:
          type: integer
          description: Zero-based position of this entry in the request `texts` array.
        token_count:
          type: integer
          description: Number of tokens produced by the tokenizer.
        exceeds_limit:
          type: boolean
          description: True if `token_count` exceeds the embedding model's per-text limit.
        char_count:
          type: integer
          description: Character count of the input text.
      description: Per-text token count result.
    UpdateCollectionItemsResponseV3:
      type: object
      required:
      - status
      - message
      - eventID
      properties:
        status:
          type: string
          enum:
          - pending
          description: Processing status
        message:
          type: string
          description: Status message
        eventID:
          type: string
          description: Event ID for tracking this operation. Use this to correlate with webhook notifications.
        updatedCount:
          type: integer
          description: Number of items updated (only present in synchronous mode, deprecated)
        items:
          type: array
          items:
            $ref: '#/components/schemas/CollectionItemV3'
          description: Array of items that were updated (only present in synchronous mode, deprecated)
      description: Response after queuing items for async update
    CollectionItemInputV3:
      type: object
      required:
      - data
      properties:
        data:
          oneOf:
          - type: string
          - type: object
            unevaluatedProperties: {}
          description: The data to be embedded and stored (string or JSON object)
      description: Data for creating a new item in a collection
    CollectionResponseV3:
      type: object
      required:
      - collectionID
      - collectionName
      - itemCount
      - createdAt
      properties:
        collectionID:
          type: string
          description: Unique identifier for the collection
        collectionName:
          type: string
          description: The collection name/path. Only letters, digits, underscores, and dots are allowed.
        itemCount:
          type: integer
          description: Number of items in the collection
        items:
          type: array
          items:
            $ref: '#/components/schemas/CollectionItemV3'
          description: List of items in the collection (when fetching collection details)
        page:
          type: integer
          description: Current page number
        limit:
          type: integer
          description: Number of items per page
        totalPages:
          type: integer
          description: Total number of pages
        createdAt:
          type: string
          format: date-time
          description: When the collection was created
        updatedAt:
          type: string
          format: date-time
          description: When the collection was last updated
      description: Collection details
  securitySchemes:
    API Key:
      type: apiKey
      in: header
      name: x-api-key
      description: Authenticate using API Key in request header