Zinnia Product Service API

Product configuration and reference data service - product definitions, features, eligibility rules and related metadata for insurance and financial offerings, so partners can configure, present and integrate products across new business and servicing workflows.

Operations 4

POST /product/v1/products #
GET /product/v1/products #
GET /product/v2/products/{productId} Get product by ID #
POST /product/v2/products/search Search for products by criteria #

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

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

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

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

OpenAPI Specification

zinnia-product-service-openapi.yml Raw ↑
openapi: 3.0.0
paths:
  /product/v1/products:
    post:
      operationId: CreateProduct
      summary: ''
      description: Create Product
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductDataModel'
      responses:
        '400':
          description: Bad Request – validation error or duplicate key
        '401':
          description: Unauthorized – missing or invalid token
        '403':
          description: Forbidden – insufficient permissions
        '500':
          description: Internal Server Error
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductModelDB'
      tags:
      - Product
      security:
      - Auth0: []
    get:
      operationId: QueryProduct
      summary: ''
      description: Query and retrieve products with optional filtering. Always returns an array of products, even when no
        products match the criteria (returns empty array) or when only a single product is found.
      parameters:
      - name: carrier
        required: true
        in: query
        description: carrier name
        schema:
          type: string
      - name: carrierProductId
        required: false
        in: query
        description: carrier product id
        schema:
          type: string
      - name: productId
        required: false
        in: query
        description: product id
        schema:
          type: string
      - name: productType
        required: false
        in: query
        description: product type
        schema:
          type: string
      - name: offset
        required: false
        in: query
        description: offset
        schema:
          type: number
      - name: limit
        required: false
        in: query
        description: limit
        schema:
          type: number
      responses:
        '200':
          description: Array of products matching the search criteria. Returns empty array if no products found, single-item
            array if one product found, or multiple products if many match.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProductModelDB'
        '400':
          description: Bad Request – validation error or missing required parameter
        '401':
          description: Unauthorized – missing or invalid token
        '403':
          description: Forbidden – insufficient permissions or carrier missing
        '500':
          description: Internal Server Error
      tags:
      - Product
      security:
      - Auth0: []
  /product/v2/products/{productId}:
    get:
      operationId: getProductById
      summary: Get product by ID
      description: Retrieves a single product by its UUID
      parameters:
      - name: productId
        required: true
        in: path
        description: Unique product identifier (UUID)
        schema:
          type: string
      responses:
        '200':
          description: Product found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductV2Model'
        '400':
          description: Bad request - Invalid ProductId
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Product not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Product V2
      security:
      - Auth0: []
  /product/v2/products/search:
    post:
      operationId: searchProducts
      summary: Search for products by criteria
      description: When searching for products, each separate field combines in a logical AND grouping
      parameters:
      - name: orderBy
        required: false
        in: query
        description: Field to order by
        schema:
          example: productName
          type: string
      - name: orderByDirection
        required: false
        in: query
        description: Order direction
        schema:
          example: DESC
          enum:
          - ASC
          - DESC
          type: string
      - name: limit
        required: false
        in: query
        description: Number of results to return (max 1000)
        schema:
          minimum: 10
          example: 10
          type: number
      - name: offset
        required: false
        in: query
        description: Index to start page search at
        schema:
          minimum: 0
          example: 0
          type: number
      requestBody:
        required: false
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProductSearchRequestDto'
      responses:
        '200':
          description: Paginated search results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedProductsResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      tags:
      - Product V2
      security:
      - Auth0: []
info:
  title: Zinnia Product Service
  description: Product API
  version: 0.1.0
  contact: {}
tags:
- name: Product
  description: ''
servers:
- url: https://uat.api.zinnia.io
components:
  securitySchemes:
    Auth0:
      type: openIdConnect
      openIdConnectUrl: https://login.uat.zinnia.com/.well-known/openid-configuration
      x-kong-security-openid-connect:
        config:
          run_on_preflight: true
          scopes_claim:
          - https://uat.api.zinnia.io/permissions
          audience_claim:
          - aud
          audience_required:
          - https://uat.api.zinnia.io
          auth_methods:
          - bearer
          scopes: []
        enabled: true
        protocols:
        - grpc
        - grpcs
        - http
        - https
  schemas:
    ProductDataModel:
      type: object
      properties:
        productId:
          type: string
          description: Zinnia generated unique ID generated to uniquely identify the product in our product master database
          example: UUID
        carrierProductId:
          type: string
          description: Carrier generated unique ID, which may be used to communicate across integrations.
          example: EVGL-PROD-001
        productMarketingName:
          type: string
          description: Carrier generated marketing name for the product
          example: Everglades Term Life
          enum:
          - Everglades Term Life
          - Everglades Return of Premium Term
          - Everglades Index Universal Life
        carrier:
          type: string
          description: Unique carrier key used in enterprise APIs
          example: EVGL
        productLine:
          type: string
          description: Product line category
          example: LIFE
          enum:
          - LIFE
          - ANNUITY
        productType:
          type: string
          description: Product type category
          example: TERM
          enum:
          - INDEX_UNIVERSAL_LIFE
          - UNIVERSAL_LIFE
          - TERM
        planCode:
          type: string
          description: Plan code for the product (multiple can exist for a single product)
          example: EVGUL001
        termLength:
          type: array
          description: Term length in years
          example:
          - 10
          - 20
          - 30
          items:
            type: number
            enum:
            - 1
            - 5
            - 10
            - 15
            - 20
            - 25
            - 30
            - 35
            - 40
        availableToSell:
          type: boolean
          description: Indicates if the product is available to sell
          example: true
    ProductModelDB:
      type: object
      properties:
        productId:
          type: string
          description: Zinnia generated unique ID generated to uniquely identify the product in our product master database
          example: UUID
        carrierProductId:
          type: string
          description: Carrier generated unique ID, which may be used to communicate across integrations.
          example: EVGL-PROD-001
        productMarketingName:
          type: string
          description: Carrier generated marketing name for the product
          example: Everglades Term Life
          enum:
          - Everglades Term Life
          - Everglades Return of Premium Term
          - Everglades Index Universal Life
        carrier:
          type: string
          description: Unique carrier key used in enterprise APIs
          example: EVGL
        productLine:
          type: string
          description: Product line category
          example: LIFE
          enum:
          - LIFE
          - ANNUITY
        productType:
          type: string
          description: Product type category
          example: TERM
          enum:
          - INDEX_UNIVERSAL_LIFE
          - UNIVERSAL_LIFE
          - TERM
        planCode:
          type: string
          description: Plan code for the product (multiple can exist for a single product)
          example: EVGUL001
        termLength:
          type: array
          description: Term length in years
          example:
          - 10
          - 20
          - 30
          items:
            type: number
            enum:
            - 1
            - 5
            - 10
            - 15
            - 20
            - 25
            - 30
            - 35
            - 40
        availableToSell:
          type: boolean
          description: Indicates if the product is available to sell
          example: true
        id:
          type: string
          description: Database generated unique ID
    Distributor:
      type: object
      properties:
        distributorCode:
          type: string
          description: Unique distributor code
          example: EVGL
        distributorName:
          type: string
          description: Distributor name
          example: Everglades Distribution
        startDate:
          type: string
          description: Start date of distributor authorization
          example: '2025-01-01'
        endDate:
          type: string
          description: End date of distributor authorization
          example: '2099-01-01'
      required:
      - distributorCode
      - distributorName
      - startDate
      - endDate
    StateAvailability:
      type: object
      properties:
        availableToSell:
          type: boolean
          description: Indicates whether the product is available to sell in this state
          example: true
        startDate:
          type: string
          description: Start date of state availability (inclusive)
          example: '2025-01-01'
        endDate:
          type: string
          description: End date of state availability
          example: '2099-01-01'
        abbreviation:
          type: string
          description: Two-letter state abbreviation
          example: NY
          minLength: 2
          maxLength: 2
        name:
          type: string
          description: Full state name
          example: New York
    ProductV2Model:
      type: object
      properties:
        id:
          type: string
          description: System-generated unique identifier (UUID)
          example: 7b9f2b65-1b4a-4f4c-9d9d-6a7f5b6d9b1a
        carrierCode:
          type: string
          description: Unique carrier code
          example: EVGL
        carrierName:
          type: string
          description: Carrier name
          example: Everglades
        cusip:
          type: string
          description: CUSIP identifier (9 characters)
          example: 1234567AB
          nullable: true
        productName:
          type: string
          description: Primary product name
          example: Term Life 20
        marketingName:
          type: string
          description: Marketing name for the product
          example: Everglades Term 20
        legalName:
          type: string
          description: Full legal name of the product
          example: Everglades Term Life Insurance – 20 Year Level Premium
        version:
          type: string
          description: Version identifier
          example: '1.0'
        versionStartDate:
          type: string
          description: Version start date
          example: '2025-01-01'
        versionEndDate:
          type: string
          description: Version end date
          example: '2099-01-01'
        line:
          type: string
          description: Product line classification
          enum:
          - LIFE
          - ANNUITY
          example: LIFE
        type:
          type: string
          description: Product type
          enum:
          - TERM
          - UNIVERSAL_LIFE
          example: TERM
        planCode:
          type: string
          description: Plan code
          example: EVGUL001
        availableToSell:
          type: boolean
          description: Whether the product is available to sell at product level
          example: true
        distributors:
          description: List of distributors authorized to sell this product
          nullable: true
          type: array
          items:
            $ref: '#/components/schemas/Distributor'
        stateAvailability:
          description: State-level availability records
          type: array
          items:
            $ref: '#/components/schemas/StateAvailability'
      required:
      - id
      - carrierCode
      - carrierName
      - productName
      - marketingName
      - legalName
      - version
      - versionStartDate
      - versionEndDate
      - line
      - type
      - planCode
      - availableToSell
      - stateAvailability
    ErrorResponse:
      type: object
      properties:
        message:
          type: string
          description: Human-readable error description
          example: Invalid orderByDirection. Must be "ASC" or "DESC".
        timestamp:
          type: string
          description: ISO 8601 formatted timestamp of the error occurrence
          example: '2025-12-09T16:03:00Z'
      required:
      - message
      - timestamp
    ProductSearchRequestDto:
      type: object
      properties:
        distributorCodes:
          description: Distributor codes to include (logical OR)
          example:
          - EVGL
          type: array
          items:
            type: string
        distributorNames:
          description: Distributor names to match (logical OR, case-insensitive)
          type: array
          items:
            type: string
        distributorEffectiveOn:
          type: string
          description: Date on which distributor must be effective
          example: '2025-01-15'
        carrierCodes:
          description: Carrier codes to include (logical OR)
          example:
          - EVGL
          type: array
          items:
            type: string
        carrierNames:
          description: Carrier names to match (logical OR, case-insensitive)
          type: array
          items:
            type: string
        cusips:
          description: CUSIPs to match exactly (logical OR)
          type: array
          items:
            type: string
        planCodes:
          description: Plan codes to include (logical OR)
          example:
          - EVGUL001
          type: array
          items:
            type: string
        productNames:
          description: Product names to match (logical OR)
          type: array
          items:
            type: string
        marketingNames:
          description: Marketing names to match (logical OR)
          type: array
          items:
            type: string
        legalNames:
          description: Legal names to match (logical OR)
          type: array
          items:
            type: string
        types:
          type: array
          description: Product types to include (logical OR)
          example:
          - TERM
          items:
            type: string
            enum:
            - TERM
            - UNIVERSAL_LIFE
        line:
          type: string
          description: Product line to filter by
          enum:
          - LIFE
          - ANNUITY
        versionEffectiveOn:
          type: string
          description: Returns products whose version is effective on this date
          example: '2025-01-15'
        states:
          description: Two-letter state abbreviations to filter by (logical OR)
          example:
          - NY
          - FL
          type: array
          items:
            type: string
        stateEffectiveOn:
          type: string
          description: Date on which state availability must be effective
          example: '2025-01-15'
        stateAvailableToSell:
          type: boolean
          description: State-level availability filter
        availableToSell:
          type: boolean
          description: Product-level availability filter
    PaginatedProductsResponse:
      type: object
      properties:
        count:
          type: number
          description: Total number of records matching the search
          example: 121
        next:
          type: string
          description: URL to the next page, if any
          example: /product/v2/products/search?offset=10&limit=10
          nullable: true
        previous:
          type: string
          description: URL to the previous page, if any
          example: ''
          nullable: true
        results:
          description: Array of products matching the search criteria
          type: array
          items:
            $ref: '#/components/schemas/ProductV2Model'
      required:
      - count
      - next
      - previous
      - results