OK Capsule Product Sets API

Routes to manage client product sets (a set is a client product composed of other client products)

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/ok-capsule-product-sets-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 email required.

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

OpenAPI Specification

ok-capsule-product-sets-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: '## Overview


    The OK Capsule API enables you to programmatically create supplement orders, manage consumers, and track shipments. It is a REST API that accepts JSON requests, returns JSON responses, and uses standard HTTP methods and status codes.


    **All requests must be made over HTTPS.**


    📚 **Additional Resources:** [Getting Started Guide](https://docs.okcapsule.app/docs/getting-started) | [Recipes & Examples](https://docs.okcapsule.app/docs/category/recipes)


    ## Getting Started


    > **New to OK Capsule API?** Account and brand setup must be completed before contacting OK Capsule about API credentials. If you have not set up your account and brand yet, start with the [Getting Started Guide](https://docs.okcapsule.app/docs/getting-started) before proceeding.


    1. **Set up your account** - Your OK Capsule account must be created and active

    2. **Set up your brand** - At least one Product Line must be configured in your account

    3. **Contact OK Capsule about API credentials** - Reach out to your OK Capsule representative once account and brand setup are complete

    4. **Authenticate** - POST to `/v2/authentication/token` to get an access token

    5. **List products** - GET `/v2/products` to see available supplements

    6. **Create an order** - POST to `/v2/orders` with consumer and product details

    7. **Track fulfillment** - Monitor order status and shipping via `/v2/orders` and `/v2/fulfillments`


    ## Environments


    | Environment | Purpose | Notes |

    |-------------|---------|-------|

    | **Production** | Live orders | Real fulfillment and shipping |

    | **Stage** | Testing | Test data only, no real shipments |


    ⚠️ Users and data are environment-specific. Stage credentials do not work in Production.


    ## Core Concepts


    | Term | Route | Description |

    |------|-------|-------------|

    | **Client** | `/v2/clients` | Your organization (business partner submitting orders) |

    | **Consumer** | `/v2/consumers` | Your end customer who receives supplements |

    | **Product** | `/v2/products` | A client-specific instance of an OKC Product with custom branding |

    | **Order** | `/v2/orders` | A request to fulfill supplements for a consumer |

    | **Order Line** | — | A set of pouches within an order (e.g., 30-day supply) |

    | **Pouch** | — | An individual daily packet of supplements |

    | **Fulfillment** | `/v2/fulfillments` | Shipping, tracking, and delivery information for an order |

    | **Assembly** | `/v2/assemblies` | A client''s predefined bundle of products (commonly called a "pack") |

    | **Product Line** | `/v2/product-lines` | A client''s marketing brand (appears on packaging) |

    | **OKC Product** | — | A supplement in the OK Capsule master catalog (what OKC purchases from vendors) |

    | **User** | `/v2/users` | An authorized person who accesses the API or portal |

    | **Contact** | `/v2/contacts` | A person associated with a client, managed for communication purposes |'
  version: 2.0.0
  title: OKC core API V2 Product Sets API
  contact:
    name: Engineering Department, OKCapsule
    email: lukas@okcapsule.com
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
servers:
- description: Production environment
  url: https://na1-prod.okcapsule.app
- description: Stage/Testing environment
  url: https://na1-stage.okcapsule.app
tags:
- name: Product Sets
  description: Routes to manage client product sets (a set is a client product composed of other client products)
paths:
  /v2/product-sets:
    post:
      tags:
      - Product Sets
      security:
      - bearerAuth:
        - products/write
      summary: Create a product set
      operationId: createClientProductSet
      description: Creates a new client product set with its member items. All `client_product_id` values must already exist.
      parameters:
      - in: query
        name: q
        description: For internal users only. Use Query DSL *query_string* syntax to send client id.
        schema:
          type: string
      requestBody:
        description: Product set to create
        content:
          application/json:
            schema:
              type: object
              required:
              - client_set_id
              - set_items
              properties:
                client_set_id:
                  type: string
                  format: uuid
                  description: The client product UUID that acts as the parent set.
                  example: d290f1ee-6c54-4b01-90e6-d701748f0851
                created_by:
                  type:
                  - string
                  - 'null'
                  format: uuid
                  example: d290f1ee-6c54-4b01-90e6-d701748f0851
                updated_by:
                  type:
                  - string
                  - 'null'
                  format: uuid
                  example: d290f1ee-6c54-4b01-90e6-d701748f0851
                set_items:
                  type: array
                  description: List of client products to include in the set.
                  items:
                    type: object
                    required:
                    - client_product_id
                    - quantity
                    properties:
                      client_product_id:
                        type: string
                        format: uuid
                        description: The client product UUID to add to the set.
                        example: a1b2c3d4-1234-5678-90ab-cdef01234567
                      quantity:
                        type: number
                        description: Quantity of this product in the set.
                        example: 2
      responses:
        '200':
          description: Returns the created product set with its items.
          content:
            application/json:
              schema:
                type: object
                properties:
                  client_set_id:
                    type: string
                    format: uuid
                    example: d290f1ee-6c54-4b01-90e6-d701748f0851
                  set_items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ClientProductSetItem'
        '422':
          $ref: '#/components/responses/422ValidationError'
        default:
          $ref: '#/components/responses/UnknownError'
  /v2/product-sets/search:
    post:
      tags:
      - Product Sets
      security:
      - bearerAuth:
        - products/read
      summary: Search product sets
      operationId: searchClientProductSets
      description: 'Returns all product sets matching the given query.


        Filterable fields:

        * client_set_id

        * client_product_id

        '
      parameters:
      - $ref: '#/components/parameters/LimitParameters'
      - $ref: '#/components/parameters/CursorParameters'
      - $ref: '#/components/parameters/SortByParameters'
      - $ref: '#/components/parameters/QueryParameters'
      requestBody:
        description: Query filters
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: List of product sets matching the query.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    client_set_id:
                      type: string
                      format: uuid
                      example: d290f1ee-6c54-4b01-90e6-d701748f0851
                    set_items:
                      type: array
                      items:
                        $ref: '#/components/schemas/ClientProductSetItem'
        default:
          $ref: '#/components/responses/UnknownError'
  /v2/product-sets/{client_set_id}:
    get:
      tags:
      - Product Sets
      security:
      - bearerAuth:
        - products/read
      summary: Get a product set
      operationId: getClientProductSet
      description: Returns the product set and all its member items for the given client product id.
      parameters:
      - name: client_set_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: UUID of the client product acting as the set.
        example: d290f1ee-6c54-4b01-90e6-d701748f0851
      - in: query
        name: q
        description: For internal users only. Use Query DSL *query_string* syntax to send client id.
        schema:
          type: string
      responses:
        '200':
          description: Returns the product set with its items.
          content:
            application/json:
              schema:
                type: object
                properties:
                  client_set_id:
                    type: string
                    format: uuid
                    example: d290f1ee-6c54-4b01-90e6-d701748f0851
                  set_items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ClientProductSetItem'
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
          description: Client product not found.
        default:
          $ref: '#/components/responses/UnknownError'
    put:
      tags:
      - Product Sets
      security:
      - bearerAuth:
        - products/write
      summary: Update a product set
      operationId: updateClientProductSet
      description: Add, update, or remove items from an existing product set in a single request.
      parameters:
      - name: client_set_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: UUID of the client product acting as the set.
        example: d290f1ee-6c54-4b01-90e6-d701748f0851
      - in: query
        name: q
        description: For internal users only. Use Query DSL *query_string* syntax to send client id.
        schema:
          type: string
      requestBody:
        description: Items to add, update, or delete within the set.
        content:
          application/json:
            schema:
              type: object
              properties:
                created_by:
                  type:
                  - string
                  - 'null'
                  format: uuid
                  example: d290f1ee-6c54-4b01-90e6-d701748f0851
                updated_by:
                  type:
                  - string
                  - 'null'
                  format: uuid
                  example: d290f1ee-6c54-4b01-90e6-d701748f0851
                items_to_add:
                  type: array
                  description: New client products to add to the set.
                  items:
                    type: object
                    required:
                    - client_product_id
                    - quantity
                    properties:
                      client_product_id:
                        type: string
                        format: uuid
                        example: a1b2c3d4-1234-5678-90ab-cdef01234567
                      quantity:
                        type: number
                        example: 1
                items_to_update:
                  type: array
                  description: Existing set items to update (must include the item id).
                  items:
                    type: object
                    required:
                    - id
                    properties:
                      id:
                        type: string
                        format: uuid
                        description: The set item UUID to update.
                        example: d290f1ee-6c54-4b01-90e6-d701748f0851
                      client_product_id:
                        type: string
                        format: uuid
                        example: a1b2c3d4-1234-5678-90ab-cdef01234567
                      quantity:
                        type: number
                        example: 3
                items_to_delete:
                  type: array
                  description: UUIDs of set items to remove from the set.
                  items:
                    type: string
                    format: uuid
                    example: d290f1ee-6c54-4b01-90e6-d701748f0851
      responses:
        '200':
          description: Returns the updated product set with all current items.
          content:
            application/json:
              schema:
                type: object
                properties:
                  client_set_id:
                    type: string
                    format: uuid
                    example: d290f1ee-6c54-4b01-90e6-d701748f0851
                  set_items:
                    type: array
                    items:
                      $ref: '#/components/schemas/ClientProductSetItem'
        '422':
          $ref: '#/components/responses/422ValidationError'
        default:
          $ref: '#/components/responses/UnknownError'
    delete:
      tags:
      - Product Sets
      security:
      - bearerAuth:
        - products/write
      summary: Delete all items in a product set
      operationId: deleteClientProductSet
      description: Soft-deletes all set items belonging to the given client product set.
      parameters:
      - name: client_set_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: UUID of the client product acting as the set.
        example: d290f1ee-6c54-4b01-90e6-d701748f0851
      - in: query
        name: q
        description: For internal users only. Use Query DSL *query_string* syntax to send client id.
        schema:
          type: string
      responses:
        '204':
          description: Confirms deletion of all set items.
        default:
          $ref: '#/components/responses/UnknownError'
  /v2/product-sets/{client_set_id}/items/{id}:
    get:
      tags:
      - Product Sets
      security:
      - bearerAuth:
        - products/read
      summary: Get a single set item
      operationId: getClientProductSetItem
      description: Returns a single client product set item by its id.
      parameters:
      - name: client_set_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: UUID of the parent client product set.
        example: d290f1ee-6c54-4b01-90e6-d701748f0851
      - $ref: '#/components/parameters/IdParameter'
      - in: query
        name: q
        description: For internal users only. Use Query DSL *query_string* syntax to send client id.
        schema:
          type: string
      responses:
        '200':
          description: Returns the set item.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClientProductSetItem'
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
          description: Set item not found.
        default:
          $ref: '#/components/responses/UnknownError'
    delete:
      tags:
      - Product Sets
      security:
      - bearerAuth:
        - products/write
      summary: Delete a single set item
      operationId: deleteClientProductSetItem
      description: Soft-deletes a single client product set item by its id.
      parameters:
      - name: client_set_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: UUID of the parent client product set.
        example: d290f1ee-6c54-4b01-90e6-d701748f0851
      - $ref: '#/components/parameters/IdParameter'
      - in: query
        name: q
        description: For internal users only. Use Query DSL *query_string* syntax to send client id.
        schema:
          type: string
      responses:
        '204':
          description: Confirms deletion of the set item.
        default:
          $ref: '#/components/responses/UnknownError'
components:
  parameters:
    SortByParameters:
      in: query
      name: sort_by
      description: Sort values by a specific property. See available sort by values in the table.
      schema:
        type: string
    QueryParameters:
      in: query
      name: q
      description: Use Query DSL *query_string* syntax
      schema:
        type: string
    LimitParameters:
      in: query
      name: limit
      description: Number of results to return. Default 50, max 250.
      required: false
      schema:
        type: integer
        minimum: 1
        maximum: 250
    CursorParameters:
      in: query
      name: cursor
      description: Return results before/after a specific record.
      schema:
        type: string
    IdParameter:
      in: path
      name: id
      required: true
      schema:
        type: string
        minimum: 1
  responses:
    422ValidationError:
      description: Validation error response.
      content:
        application/json:
          schema:
            type: object
            title: Validation Error
            required:
            - message
            - errors
            description: A validation error response from the OK Capsule API (Joi validation)
            properties:
              message:
                description: A human-readable message indicating a validation error occurred.
                maxLength: 40000
                type: string
                example: Validation error
              errors:
                description: An array of validation errors from Joi schema validation
                type: array
                items:
                  type: object
                  required:
                  - message
                  - type
                  properties:
                    message:
                      description: A human-readable message providing more details about the validation error.
                      type: string
                      example: '''business_name'' is required'
                    type:
                      description: The Joi validation type that failed.
                      type: string
                      example: any.required
    UnknownError:
      description: Error response.
      content:
        application/json:
          schema:
            title: Error Model
            description: An error response from the OK Capsule API
            type: object
            properties:
              error:
                title: Error Model Content
                type: object
                description: Error details object
                required:
                - message
                properties:
                  errorCode:
                    description: For some errors that could be handled programmatically, a short string indicating the error code.
                    maxLength: 5000
                    type: string
                    example: RESOURCE_NOT_FOUND
                  message:
                    description: A human-readable message providing more details about the error.
                    maxLength: 40000
                    type: string
                    example: The requested resource was not found
              message:
                description: Top-level error message (present in some error responses)
                type: string
                example: Internal Server Error
            required:
            - error
  schemas:
    ErrorModel:
      title: Error Model
      description: An error response from the OK Capsule API
      type: object
      properties:
        error:
          title: Error Model Content
          type: object
          description: Error details object
          required:
          - message
          properties:
            errorCode:
              description: For some errors that could be handled programmatically, a short string indicating the error code.
              maxLength: 5000
              type: string
              example: RESOURCE_NOT_FOUND
            message:
              description: A human-readable message providing more details about the error.
              maxLength: 40000
              type: string
              example: The requested resource was not found
        message:
          description: Top-level error message (present in some error responses)
          type: string
          example: Internal Server Error
      required:
      - error
    ClientProductSetItem:
      allOf:
      - type: object
        properties:
          id:
            type: string
            format: uuid
            example: d290f1ee-6c54-4b01-90e6-d701748f0851
          client_set_id:
            type: string
            format: uuid
            description: The client product that acts as the parent set.
            example: d290f1ee-6c54-4b01-90e6-d701748f0851
          client_product_id:
            type: string
            format: uuid
            description: The client product that is a member of this set.
            example: a1b2c3d4-1234-5678-90ab-cdef01234567
          quantity:
            type: number
            format: decimal
            description: Quantity of the client product in the set.
            example: 2
          created_by:
            type:
            - string
            - 'null'
            format: uuid
            example: d290f1ee-6c54-4b01-90e6-d701748f0851
          updated_by:
            type:
            - string
            - 'null'
            format: uuid
            example: d290f1ee-6c54-4b01-90e6-d701748f0851
      - type: object
        required:
        - created_at
        - updated_at
        properties:
          created_at:
            type: string
            format: date-time
            readOnly: true
            example: '2023-03-20T09:12:28Z'
          updated_at:
            type: string
            format: date-time
            readOnly: true
            example: '2023-03-20T09:12:28Z'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT