OK Capsule Clients API

Routes to manage clients

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-clients-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-clients-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 Clients 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: Clients
  description: Routes to manage clients
paths:
  /v2/clients:
    post:
      tags:
      - Clients
      security:
      - bearerAuth:
        - clients/write
      summary: Creates a client.
      operationId: createClient
      description: Creates a client record.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
              - business_name
              properties:
                business_name:
                  type: string
                  example: Incorporated Company, LLC.
                display_name:
                  type: string
                  example: My Company
                is_test_account:
                  type: boolean
                  example: false
                is_international_shipping_enabled:
                  type: boolean
                  example: false
                onboarding_stage:
                  type:
                  - string
                  - 'null'
                  enum:
                  - signup
                  - verification
                  - introduction
                  - brand
                  - contacts
                  - addresses
                  - payment
                  - install_shopify
                  - formulary
                  - solution_packs
                  - pamphlet
                  - labels
                  - packet
                  - product_spec
                  - terms
                  - sla_rules
                  - test_order
                  - complete
                  - login
                  - confirmation_redirect
                  example: signup
                service_level:
                  type: string
                  enum:
                  - Starter
                  - Professional
                  - Enterprise
                  default: Starter
                  example: Starter
                contract_type:
                  type: string
                  enum:
                  - T&C
                  - MSA
                  default: T&C
                  example: T&C
                admin_user:
                  type: object
                  required:
                  - name
                  - email
                  properties:
                    name:
                      type: string
                      example: Example Tester
                    email:
                      type: string
                      format: email
                      example: user@example.com
                    phone_number:
                      type: string
                      example: '+16175551212'
                    locale:
                      type: string
                      pattern: ^[a-z]*-[A-Z]{2}$
                      example: en-US
                address:
                  type: object
                  description: Optional initial address for the client
                  properties:
                    is_default:
                      type: boolean
                      example: true
                    address_type:
                      type: string
                      enum:
                      - shipping
                      - billing
                      - legal
                      - return
                      example: billing
                    addressed_to:
                      type: string
                      maxLength: 35
                    address1:
                      type: string
                      maxLength: 100
                      example: 742 Evergreen Terrace
                    address2:
                      type: string
                      maxLength: 100
                    city:
                      type: string
                      maxLength: 50
                      example: Springfield
                    province_name:
                      type: string
                      maxLength: 30
                    country_name:
                      type: string
                      example: United States
                    postal_code:
                      type: string
                      maxLength: 10
                    phone_number:
                      type: string
                      maxLength: 15
                is_brand_remap_enabled:
                  type: boolean
                  default: false
                  example: false
                  description: When enabled, allows brand remapping for this client's products.
                status:
                  type: string
                  enum:
                  - Active
                  - Inactive
                  - Onboarding
                  default: Onboarding
                  x-internal: true
                  description: Internal use only - defaults to Onboarding.
                user_type:
                  type: string
                  enum:
                  - client
                  - internal
                  x-internal: true
                  description: Internal use only.
                max_user_count:
                  type: integer
                  minimum: 1
                  example: 5
                  x-internal: true
                  description: Internal use only - filtered out for client users.
                crm_account_id:
                  type: string
                  example: ABCDabcd123
                  x-internal: true
                  description: Internal use only - filtered out for client users.
            examples:
              ClientFullSample:
                $ref: '#/components/examples/ClientFullSample'
              ClientRequiredSample:
                $ref: '#/components/examples/ClientRequiredSample'
      responses:
        '201':
          description: Returns a created Client object.
          content:
            application/json:
              schema:
                type: object
                properties:
                  client:
                    $ref: '#/components/schemas/Client'
                  admin_user:
                    $ref: '#/components/schemas/User'
        '422':
          $ref: '#/components/responses/422ValidationError'
        default:
          $ref: '#/components/responses/UnknownError'
    get:
      tags:
      - Clients
      security:
      - bearerAuth:
        - clients/read
      summary: List all clients.
      operationId: listClients
      description: "List all clients a user has access to.\n\nFilterable fields:\n * status\n * business_name\n * display_name\n * crm_id\n\nSortable fields:\n* display_name\n* business_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:
                required:
                - clients
                properties:
                  clients:
                    type: array
                    items:
                      $ref: '#/components/schemas/Client'
        default:
          $ref: '#/components/responses/UnknownError'
  /v2/clients/{id}:
    get:
      tags:
      - Clients
      security:
      - bearerAuth:
        - clients/read
      summary: Retrieve a client.
      operationId: getClient
      description: Retrieves a client by id.
      parameters:
      - $ref: '#/components/parameters/IdParameter'
      responses:
        '200':
          description: Returns the Client object for a valid identifier.
          content:
            application/json:
              schema:
                type: object
                properties:
                  client:
                    $ref: '#/components/schemas/Client'
        default:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
          description: Error response.
    put:
      tags:
      - Clients
      security:
      - bearerAuth:
        - clients/write
      summary: Update a client.
      operationId: updateClient
      description: Update Client object.
      parameters:
      - $ref: '#/components/parameters/IdParameter'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                business_name:
                  type: string
                  example: Incorporated Company, LLC.
                display_name:
                  type: string
                  example: My Company
                crm_account_id:
                  type: string
                  example: ABCDabcd123
                  x-internal: true
                  description: Internal use only - filtered out for client users.
                status:
                  type: string
                  enum:
                  - Active
                  - Inactive
                  - Onboarding
                  example: Active
                  x-internal: true
                  description: Internal use only - filtered out for client users.
                onboarding_stage:
                  type:
                  - string
                  - 'null'
                  enum:
                  - signup
                  - verification
                  - introduction
                  - brand
                  - contacts
                  - addresses
                  - payment
                  - install_shopify
                  - formulary
                  - solution_packs
                  - pamphlet
                  - labels
                  - packet
                  - product_spec
                  - terms
                  - sla_rules
                  - test_order
                  - complete
                  - login
                  - confirmation_redirect
                  - billing_address
                  - packaging
                  - product_customization
                  - categories
                  - creating_drafts
                  - shipping_tracking
                  example: signup
                max_user_count:
                  type: integer
                  minimum: 0
                  example: 5
                  x-internal: true
                  description: Internal use only - filtered out for client users.
                is_test_account:
                  type: boolean
                  example: false
                is_international_shipping_enabled:
                  type: boolean
                  example: false
                tax_id:
                  type: string
                  example: 001-999-874
                business_contact_firstname:
                  type: string
                  example: John
                business_contact_lastname:
                  type: string
                  example: Doe
                business_contact_email:
                  type: string
                  format: email
                  example: johndoe@email.com
                billing_contact_firstname:
                  type: string
                  example: Jane
                billing_contact_lastname:
                  type: string
                  example: Smith
                billing_contact_address_id:
                  type: string
                  format: uuid
                  example: dc6fcff9-0464-4c03-9bb9-e90812361a66
                service_level:
                  type: string
                  enum:
                  - Starter
                  - Professional
                  - Enterprise
                  example: Starter
                contract_type:
                  type: string
                  enum:
                  - T&C
                  - MSA
                  example: T&C
                stripe_customer_id:
                  type: string
                  example: cus_abc123
                payment_session_id:
                  type:
                  - string
                  - 'null'
                  example: pi_abc123
                is_brand_remap_enabled:
                  type: boolean
                  example: false
                  description: When enabled, allows brand remapping for this client's products.
      responses:
        '200':
          description: Returns the updated client.
          content:
            application/json:
              schema:
                type: object
                properties:
                  client:
                    $ref: '#/components/schemas/Client'
        '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:
      - Clients
      security:
      - bearerAuth:
        - clients/write
      summary: Delete a client.
      operationId: deleteClient
      description: Delete a Client object.
      parameters:
      - $ref: '#/components/parameters/IdParameter'
      responses:
        '204':
          description: Confirms deletion of a client.
        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
  examples:
    ClientRequiredSample:
      summary: Create client with only required fields.
      value:
        business_name: Incorporated Company, LLC
    ClientFullSample:
      summary: Create client with all the fields.
      value:
        business_name: Incorporated Company, LLC
        display_name: My Company
        is_test_account: false
        admin_user:
          name: Example Tester
          email: user@example.com
          phone_number: '16175551212'
          locale: en-US
  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:
    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
    Client:
      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
          required:
          - id
          - status
          - business_name
          properties:
            id:
              type: string
              readOnly: true
              format: uuid
              example: d290f1ee-6c54-4b01-90e6-d701748f0851
            status:
              type: string
              enum:
              - Active
              - Inactive
              - Onboarding
              example: Active
            onboarding_stage:
              type:
              - string
              - 'null'
              enum:
              - signup
              - verification
              - introduction
              - brand
              - contacts
              - addresses
              - payment
              - install_shopify
              - formulary
              - solution_packs
              - pamphlet
              - labels
              - packet
              - product_spec
              - terms
              - sla_rules
              - test_order
              - complete
              - login
              - confirmation_redirect
              - billing_address
              - packaging
              - product_customization
              - categories
              - creating_drafts
              - shipping_tracking
              example: signup
            business_name:
              type: string
              example: Incorporated Company, LLC
            display_name:
              type: string
              example: My Company
            tax_id:
              type: string
              example: 001-999-874
            business_contact_firstname:
              type: string
              example: John
            business_contact_lastname:
              type: string
              example: Doe
            business_contact_email:
              type: string
              example: johndoe@email.com
            billing_contact_firstname:
              type: string
              example: Jane
            billing_contact_lastname:
              type: string
              example: Smith
            billing_contact_address_id:
              type: string
              format: uuid
              example: dc6fcff9-0464-4c03-9bb9-e90812361a66
            is_test_account:
              type: boolean
              example: false
            is_international_shipping_enabled:
              type: boolean
              example: false
            max_user_count:
              type: integer
              example: 5
            service_level:
              type: string
              enum:
              - Starter
              - Professional
              - Enterprise
              example: Starter
            contract_type:
              type: string
              enum:
              - T&C
              - MSA
              example: T&C
            stripe_customer_id:
              type: string
              example: cus_abc123
            payment_session_id:
              type: string
              example: ps_abc123
            is_brand_remap_enabled:
              type: boolean
              default: false
              example: false
              description: When enabled, allows brand remapping for this client's products.
            crm_account_id:
              type: string
              x-internal: true
              description: Internal use only.
              example: ABCDabcd123
            crm_id:
              type: string
              x-internal: true
              description: Internal use only.
              example: ABCDE12587AHSNNHS
      - 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'
    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
    User:
      allOf:
      - type: object
        required:
        - id
        - client_id
        properties:
          id:
            type: string
            format: uuid
            readOnly: true
            example: d290f1ee-6c54-4b01-90e6-d701748f0851
          client_id:
            type:
            - string
            - 'null'
            format: uuid
            example: d290f1ee-6c54-4b01-90e6-d701748f0851
          user_type:
            type: string
            enum:
            - client
            - internal
            example: client
          name:
            type: string
            example: John Doe
          username:
            type: string
            format: uuid
            readOnly: true
            example: 087078ea-4b50-4a46-bb4d-322cf17db3ca
            description: Same as id (Cognito sub)
          email:
            type: string
            format: email
            example: user@example.com
          locale:
            type:
            - string
            - 'null'
            example: en-US
          roles:
            type: array
            items:
              type: string
              enum:
              - Client_Admin
              - Client_Manager
              - Client_Developer
              - Client_User
              - Internal_Admin
              - Internal_Manager
              - Internal_Developer
              - Internal_User
            example:
            - Client_Manager
            - Client_Developer
          phone_number:
            type:
            - string
            - 'null'
            format: E.164
            example: 12133734253
          last_login:
            type:
            - string
            - 'null'
            format: date-time
            readOnly: true
            example: '2023-06-29T11:12:28Z'
      - 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