OK Capsule Products API

Routes to manage 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-products-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-products-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 Products 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: Products
  description: Routes to manage client products
paths:
  /v2/products:
    post:
      tags:
      - Products
      security:
      - bearerAuth:
        - products/write
      summary: Creates a client product.
      operationId: createProduct
      description: Creates a client product.
      parameters:
      - in: query
        name: q
        description: For internal users only. Use Query DSL *query_string* syntax to send client id.
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - product_line_id
              - okc_product_id
              - product_name
              - active
              - price_per_pill
              - short_description
              properties:
                okc_product_id:
                  type: string
                  format: uuid
                  example: d290f1ee-6c54-4b01-90e6-d701748f0851
                product_line_id:
                  type: string
                  format: uuid
                  example: d290f1ee-6c54-4b01-90e6-d701748f0851
                client_custom_product_id:
                  type: string
                client_sku:
                  type: string
                client_upc:
                  type: string
                name:
                  type:
                  - string
                  - 'null'
                  description: Internal name for the client product (optional).
                active:
                  type: boolean
                price_per_pill:
                  type: number
                  description: Required for validation but filtered out for client users (internal use only).
                serving_size:
                  type: integer
                time_of_administration:
                  type: string
                long_description:
                  type: string
                product_name:
                  type: string
                  maxLength: 27
                short_description:
                  type: string
                key_points:
                  type: string
                  example: Supports immune health
                custom_text_1:
                  type: string
                  example: Custom field 1
                custom_text_2:
                  type: string
                  example: Custom field 2
                custom_text_3:
                  type: string
                  example: Custom field 3
                inventory_available:
                  type: number
                  description: Available inventory count
                  example: 1000
                sfp_version:
                  type: string
                  example: v2
                  maxLength: 5
                packaging_asset_group_id:
                  type: string
                  format: uuid
                  example: c6de9100-e8b2-4032-80e2-3743deda83d2
                  x-internal: true
                  description: This field is for internal use only.
                protocol_id:
                  type: string
                  format: uuid
                  example: f4e5d6c7-b8a9-0c1d-2e3f-4a5b6c7d8e9f
                product_assembly_type:
                  type: string
                  enum:
                  - PRODUCT
                  - ASSEMBLY
                  - SET
                  example: PRODUCT
                price_per_unit:
                  type:
                  - number
                  - 'null'
                  format: decimal
                  example: 1.25
                  description: Price per individual unit of this product.
                is_standalone_kit:
                  type: boolean
                  default: false
                  example: false
                  description: Indicates this client product is a standalone kit.
                crm_id:
                  type: string
                  x-internal: true
                  description: This field is for internal use only.
            examples:
              PartialSample:
                $ref: '#/components/examples/ProductFullSample'
              CompleteSample:
                $ref: '#/components/examples/ProductSample'
      responses:
        '201':
          description: Returns a created product.
          content:
            application/json:
              schema:
                type: object
                properties:
                  products:
                    $ref: '#/components/schemas/Product'
        '422':
          $ref: '#/components/responses/422ValidationError'
        default:
          $ref: '#/components/responses/UnknownError'
    get:
      tags:
      - Products
      security:
      - bearerAuth:
        - products/read
      summary: List products.
      operationId: listProducts
      description: "List products.\n  \nFilterable fields:\n* client_custom_product_id\n* client_sku\n* client_upc\n* name\n* active\n* product_name\n* product_assembly_type\n* crm_id\n* okcProduct.product_family\n\nSortable fields:\n* product_name\n"
      parameters:
      - $ref: '#/components/parameters/LimitParameters'
      - $ref: '#/components/parameters/CursorParameters'
      - $ref: '#/components/parameters/SortByParameters'
      - $ref: '#/components/parameters/QueryParameters'
      responses:
        '200':
          description: search results matching criteria
          content:
            application/json:
              schema:
                type: object
                properties:
                  products:
                    type: array
                    items:
                      $ref: '#/components/schemas/Product'
        default:
          $ref: '#/components/responses/UnknownError'
  /v2/products/count:
    get:
      tags:
      - Products
      security:
      - bearerAuth:
        - products/read
      summary: Count of all products
      operationId: getProductTotalCount
      description: "Count of all products.\n          \n  Filterable fields:\n  * client_custom_product_id\n  * client_sku\n  * client_upc\n  * name\n  * active\n  * product_name\n  * product_assembly_type\n  * crm_id\n  * okcProduct.product_family\n"
      parameters:
      - $ref: '#/components/parameters/QueryParameters'
      responses:
        '200':
          description: Search results matching criteria
          content:
            application/json:
              schema:
                type: object
                $ref: '#/components/schemas/Count'
        default:
          $ref: '#/components/responses/UnknownError'
  /v2/products/{id}:
    get:
      tags:
      - Products
      security:
      - bearerAuth:
        - products/read
      summary: Retrieve a product.
      operationId: getProduct
      description: Retrieve a product.
      parameters:
      - $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 a product for a valid identifier.
          content:
            application/json:
              schema:
                type: object
                properties:
                  product:
                    $ref: '#/components/schemas/Product'
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
          description: Error response.
    put:
      tags:
      - Products
      security:
      - bearerAuth:
        - products/write
      summary: Update a product.
      operationId: updateProduct
      description: Update a product.
      parameters:
      - $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
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                okc_product_id:
                  type: string
                  format: uuid
                  example: d290f1ee-6c54-4b01-90e6-d701748f0851
                product_line_id:
                  type: string
                  format: uuid
                  example: d290f1ee-6c54-4b01-90e6-d701748f0851
                client_custom_product_id:
                  type: string
                client_sku:
                  type: string
                client_upc:
                  type: string
                name:
                  type:
                  - string
                  - 'null'
                  description: Internal name for the client product (optional).
                active:
                  type: boolean
                price_per_pill:
                  type: number
                  description: Filtered out for client users (internal use only).
                serving_size:
                  type: integer
                time_of_administration:
                  type: string
                long_description:
                  type: string
                product_name:
                  type: string
                  maxLength: 27
                short_description:
                  type: string
                key_points:
                  type: string
                  example: Supports immune health
                custom_text_1:
                  type: string
                  example: Custom field 1
                custom_text_2:
                  type: string
                  example: Custom field 2
                custom_text_3:
                  type: string
                  example: Custom field 3
                inventory_available:
                  type: number
                  description: Available inventory count
                  example: 1000
                sfp_version:
                  type: string
                  example: v2
                  maxLength: 5
                packaging_asset_group_id:
                  type: string
                  format: uuid
                  example: c6de9100-e8b2-4032-80e2-3743deda83d2
                  x-internal: true
                  description: This field is for internal use only.
                protocol_id:
                  type: string
                  format: uuid
                  example: f4e5d6c7-b8a9-0c1d-2e3f-4a5b6c7d8e9f
                product_assembly_type:
                  type: string
                  enum:
                  - PRODUCT
                  - ASSEMBLY
                  - SET
                  example: PRODUCT
                price_per_unit:
                  type:
                  - number
                  - 'null'
                  format: decimal
                  example: 1.25
                  description: Price per individual unit of this product.
                is_standalone_kit:
                  type: boolean
                  example: false
                  description: Indicates this client product is a standalone kit.
                crm_id:
                  type: string
                  x-internal: true
                  description: This field is for internal use only.
      responses:
        '200':
          description: Returns the updated product.
          content:
            application/json:
              schema:
                type: object
                properties:
                  product:
                    $ref: '#/components/schemas/Product'
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
          description: Validation error response.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
          description: Error response.
    delete:
      tags:
      - Products
      security:
      - bearerAuth:
        - products/write
      summary: Delete a product.
      operationId: deleteProduct
      description: Delete a a product.
      parameters:
      - $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 a product.
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
          description: Error response.
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:
    Product:
      allOf:
      - allOf:
        - 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'
        - type: object
          properties:
            id:
              type: string
              format: uuid
              example: d290f1ee-6c54-4b01-90e6-d701748f0851
            client_id:
              type: string
              format: uuid
              example: d290f1ee-6c54-4b01-90e6-d701748f0851
            okc_product_id:
              type: string
              format: uuid
              example: d290f1ee-6c54-4b01-90e6-d701748f0851
            product_line_id:
              type: string
              format: uuid
              example: d290f1ee-6c54-4b01-90e6-d701748f0851
            client_custom_product_id:
              type: string
            client_sku:
              type: string
            client_upc:
              type: string
            name:
              type: string
            active:
              type: boolean
            price_per_pill:
              type: number
            serving_size:
              type: integer
            time_of_administration:
              type: string
            long_description:
              type: string
            product_name:
              type: string
              maxLength: 27
            short_description:
              type: string
            key_points:
              type: string
              example: Supports immune health
            custom_text_1:
              type: string
              example: Custom field 1
            custom_text_2:
              type: string
              example: Custom field 2
            custom_text_3:
              type: string
              example: Custom field 3
            price_per_unit:
              type:
              - number
              - 'null'
              format: decimal
              example: 1.25
              description: Price per individual unit of this product.
            is_standalone_kit:
              type: boolean
              default: false
              example: false
              description: Indicates this client product is a standalone kit.
            product_assembly_type:
              type: string
              enum:
              - PRODUCT
              - ASSEMBLY
              - SET
            sfp_version:
              type: string
              example: v2
              maxLength: 5
            packaging_asset_group_id:
              type: string
              format: uuid
              example: c6de9100-e8b2-4032-80e2-3743deda83d2
            protocol_id:
              type: string
              format: uuid
              example: f4e5d6c7-b8a9-0c1d-2e3f-4a5b6c7d8e9f
            crm_id:
              type: string
              x-internal: true
              description: Internal use only.
              example: ABCDE12587AHSNNHS
            okc_product:
              type:
              - object
              - 'null'
              properties:
                id:
                  type: string
                  format: uuid
                  example: d290f1ee-6c54-4b01-90e6-d701748f0851
                product_family:
                  type: string
                  example: Supplement - Standard
                supplement_category:
                  type: string
                  example: Vitamins
      - 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'
    ValidationError:
      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
    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
    Count:
      allOf:
      - type: object
        properties:
          count:
            type: number
            example: 8
  examples:
    ProductFullSample:
      summary: Creates a client product.
      value:
        product_line_id: a079ccd0-e612-4a0c-9342-c169e18adb4f
        okc_product_id: c43097d6-ca98-41c7-9188-fb61afd807e5
        client_custom_product_id: client-product-1234
        long_description: 'Lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi '
        product_name: Calcium
        time_of_administration: Morning
        client_sku: sku001
        client_upc: upc001
        active: true
        price_per_pill: 0.5
        serving_size: 1
        short_description: This is a short description of Product A.
        crm_id: ABCD58996POI
        packaging_asset_group_id: c6de9100-e8b2-4032-80e2-3743deda83d2
        sfp_version: v2
    ProductSample:
      summary: Creates a client product with only required fields.
      value:
        product_line_id: a079ccd0-e612-4a0c-9342-c169e18adb4f
        okc_product_id: c43097d6-ca98-41c7-9188-fb61afd807e5
        product_name: Calcium
        active: true
        price_per_pill: 0.5
        short_description: This is a short description of Product A.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT