Schematic components API

The components API from Schematic — 4 operation(s) for components.

Documentation

Specifications

SDKs

Schemas & Data

Other Resources

OpenAPI Specification

schematic-components-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  title: Schematic accesstokens components API
  version: '0.1'
  description: Schematic API
  x-rules-engine-schema-version: v97288f60
servers:
- url: https://api.schematichq.com
security:
- ApiKeyAuth: []
tags:
- name: components
paths:
  /components:
    get:
      operationId: listComponents
      summary: List components
      tags:
      - components
      parameters:
      - name: q
        in: query
        schema:
          type: string
          maxLength: 512
      - name: limit
        in: query
        description: Page limit (default 100)
        schema:
          type: integer
          description: Page limit (default 100)
          format: int64
          example: '100'
      - name: offset
        in: query
        description: Page offset (default 0)
        schema:
          type: integer
          description: Page offset (default 0)
          format: int64
          example: '0'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/ComponentResponseData'
                    title: ListComponentsResponseData
                    maxItems: 250
                  params:
                    type: object
                    description: Input parameters
                    properties:
                      limit:
                        type: integer
                        description: Page limit (default 100)
                        format: int64
                        example: '100'
                      offset:
                        type: integer
                        description: Page offset (default 0)
                        format: int64
                        example: '0'
                      q:
                        type: string
                        maxLength: 512
                    title: ListComponentsParams
                required:
                - data
                - params
                title: ListComponentsResponse
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
    post:
      operationId: createComponent
      summary: Create component
      tags:
      - components
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateComponentRequestBody'
        required: true
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/ComponentResponseData'
                  params:
                    type: object
                    description: Input parameters
                    title: CreateComponentParams
                required:
                - data
                - params
                title: CreateComponentResponse
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
  /components/{component_id}:
    get:
      operationId: getComponent
      summary: Get component
      tags:
      - components
      parameters:
      - name: component_id
        in: path
        description: component_id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/ComponentResponseData'
                  params:
                    type: object
                    description: Input parameters
                    title: GetComponentParams
                required:
                - data
                - params
                title: GetComponentResponse
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
    put:
      operationId: updateComponent
      summary: Update component
      tags:
      - components
      parameters:
      - name: component_id
        in: path
        description: component_id
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateComponentRequestBody'
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/ComponentResponseData'
                  params:
                    type: object
                    description: Input parameters
                    title: UpdateComponentParams
                required:
                - data
                - params
                title: UpdateComponentResponse
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
    delete:
      operationId: deleteComponent
      summary: Delete component
      tags:
      - components
      parameters:
      - name: component_id
        in: path
        description: component_id
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/DeleteResponse'
                  params:
                    type: object
                    description: Input parameters
                    title: DeleteComponentParams
                required:
                - data
                - params
                title: DeleteComponentResponse
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
  /components/count:
    get:
      operationId: countComponents
      summary: Count components
      tags:
      - components
      parameters:
      - name: q
        in: query
        schema:
          type: string
          maxLength: 512
      - name: limit
        in: query
        description: Page limit (default 100)
        schema:
          type: integer
          description: Page limit (default 100)
          format: int64
          example: '100'
      - name: offset
        in: query
        description: Page offset (default 0)
        schema:
          type: integer
          description: Page offset (default 0)
          format: int64
          example: '0'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/CountResponse'
                  params:
                    type: object
                    description: Input parameters
                    properties:
                      limit:
                        type: integer
                        description: Page limit (default 100)
                        format: int64
                        example: '100'
                      offset:
                        type: integer
                        description: Page offset (default 0)
                        format: int64
                        example: '0'
                      q:
                        type: string
                        maxLength: 512
                    title: CountComponentsParams
                required:
                - data
                - params
                title: CountComponentsResponse
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
  /components/preview-data:
    get:
      operationId: previewComponentData
      summary: Preview component data
      tags:
      - components
      parameters:
      - name: company_id
        in: query
        schema:
          type: string
      - name: component_id
        in: query
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/ComponentPreviewResponseData'
                  params:
                    type: object
                    description: Input parameters
                    properties:
                      company_id:
                        type: string
                      component_id:
                        type: string
                    title: PreviewComponentDataParams
                required:
                - data
                - params
                title: PreviewComponentDataResponse
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '500':
          $ref: '#/components/responses/ServerError'
components:
  responses:
    Forbidden:
      description: Forbidden
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    Unauthorized:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    ServerError:
      description: Server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
    NotFound:
      description: Not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiError'
  schemas:
    CreditCurrencyPriceResponseData:
      type: object
      properties:
        currency:
          type: string
        price:
          $ref: '#/components/schemas/BillingPriceResponseData'
      required:
      - currency
      title: CreditCurrencyPriceResponseData
    BillingPriceView:
      type: object
      properties:
        billing_scheme:
          $ref: '#/components/schemas/BillingPriceScheme'
        created_at:
          type: string
          format: date-time
        currency:
          type: string
        id:
          type: string
        interval:
          $ref: '#/components/schemas/BillingProductPriceInterval'
        is_active:
          type: boolean
        meter_event_name:
          type: string
          nullable: true
        meter_event_payload_key:
          type: string
          nullable: true
        meter_id:
          type: string
          nullable: true
        nickname:
          type: string
          nullable: true
        package_size:
          type: integer
          format: int64
        price:
          type: integer
          format: int64
        price_decimal:
          type: string
          nullable: true
        price_external_id:
          type: string
        price_id:
          type: string
        price_tier:
          type: array
          items:
            $ref: '#/components/schemas/BillingProductPriceTierResponseData'
          maxItems: 100
        product_external_id:
          type: string
        product_id:
          type: string
        product_name:
          type: string
        provider_type:
          $ref: '#/components/schemas/BillingProviderType'
        tiers_mode:
          allOf:
          - $ref: '#/components/schemas/BillingTiersMode'
          nullable: true
        updated_at:
          type: string
          format: date-time
        usage_type:
          $ref: '#/components/schemas/BillingPriceUsageType'
      required:
      - id
      - billing_scheme
      - created_at
      - currency
      - interval
      - is_active
      - package_size
      - price
      - price_external_id
      - product_external_id
      - provider_type
      - updated_at
      - usage_type
      - price_id
      - product_id
      - product_name
      - price_tier
      title: BillingPriceView
    ComponentCapabilities:
      type: object
      properties:
        badge_visibility:
          type: boolean
        checkout:
          type: boolean
      required:
      - checkout
      - badge_visibility
      title: ComponentCapabilities
    BillingProductForSubscriptionResponseData:
      type: object
      properties:
        billing_scheme:
          $ref: '#/components/schemas/BillingPriceScheme'
        billing_threshold:
          type: integer
          format: int64
          nullable: true
        created_at:
          type: string
          format: date-time
        currency:
          type: string
        environment_id:
          type: string
        external_id:
          type: string
        id:
          type: string
        interval:
          type: string
        meter_id:
          type: string
          nullable: true
        name:
          type: string
        package_size:
          type: integer
          format: int64
        price:
          type: integer
          format: int64
        price_decimal:
          type: string
          nullable: true
        price_external_id:
          type: string
        price_id:
          type: string
        price_tier:
          type: array
          items:
            $ref: '#/components/schemas/BillingProductPriceTierResponseData'
          maxItems: 100
        provider_type:
          $ref: '#/components/schemas/BillingProviderType'
        quantity:
          type: number
        subscription_id:
          type: string
        subscription_item_external_id:
          type: string
          nullable: true
        updated_at:
          type: string
          format: date-time
        usage_type:
          $ref: '#/components/schemas/BillingPriceUsageType'
      required:
      - id
      - created_at
      - currency
      - environment_id
      - external_id
      - interval
      - name
      - package_size
      - price
      - price_external_id
      - price_id
      - price_tier
      - provider_type
      - quantity
      - billing_scheme
      - subscription_id
      - updated_at
      - usage_type
      title: BillingProductForSubscriptionResponseData
    BillingPlanCreditGrantResetStart:
      type: string
      enum:
      - billing_period
      - first_of_month
    CompanyPlanInvalidReason:
      type: string
      enum:
      - downgrade_not_permitted
      - feature_usage_exceeded
    BillingProductPriceResponseData:
      type: object
      properties:
        billing_scheme:
          $ref: '#/components/schemas/BillingPriceScheme'
        created_at:
          type: string
          format: date-time
        currency:
          type: string
        id:
          type: string
        interval:
          $ref: '#/components/schemas/BillingProductPriceInterval'
        is_active:
          type: boolean
        meter_id:
          type: string
          nullable: true
        nickname:
          type: string
          nullable: true
        package_size:
          type: integer
          format: int64
        price:
          type: integer
          format: int64
        price_decimal:
          type: string
          nullable: true
        price_external_id:
          type: string
        product_external_id:
          type: string
        provider_type:
          $ref: '#/components/schemas/BillingProviderType'
        tiers_mode:
          allOf:
          - $ref: '#/components/schemas/BillingTiersMode'
          nullable: true
        updated_at:
          type: string
          format: date-time
        usage_type:
          $ref: '#/components/schemas/BillingPriceUsageType'
      required:
      - id
      - billing_scheme
      - created_at
      - currency
      - interval
      - is_active
      - package_size
      - price
      - price_external_id
      - product_external_id
      - provider_type
      - updated_at
      - usage_type
      title: BillingProductPriceResponseData
    FeatureUsageDetailResponseData:
      type: object
      properties:
        features:
          type: array
          items:
            $ref: '#/components/schemas/FeatureUsageResponseData'
          maxItems: 1000
      required:
      - features
      title: FeatureUsageDetailResponseData
    CompanyDetailResponseData:
      type: object
      properties:
        add_ons:
          type: array
          items:
            $ref: '#/components/schemas/CompanyPlanWithBillingSubView'
          maxItems: 1000
        billing_credit_balances:
          additionalProperties:
            type: number
          type: object
          nullable: true
        billing_subscription:
          $ref: '#/components/schemas/BillingSubscriptionView'
        billing_subscriptions:
          type: array
          items:
            $ref: '#/components/schemas/BillingSubscriptionView'
          maxItems: 1000
        created_at:
          type: string
          format: date-time
        custom_plan_billings:
          type: array
          items:
            $ref: '#/components/schemas/CustomPlanBillingResponseData'
          maxItems: 1000
        default_payment_method:
          $ref: '#/components/schemas/PaymentMethodResponseData'
        entitlements:
          type: array
          items:
            $ref: '#/components/schemas/FeatureEntitlement'
          maxItems: 1000
        entity_traits:
          type: array
          items:
            $ref: '#/components/schemas/EntityTraitDetailResponseData'
          maxItems: 1000
        environment_id:
          type: string
        id:
          type: string
        keys:
          type: array
          items:
            $ref: '#/components/schemas/EntityKeyDetailResponseData'
          maxItems: 1000
        last_seen_at:
          type: string
          format: date-time
          nullable: true
        logo_url:
          type: string
          nullable: true
        metrics:
          type: array
          items:
            $ref: '#/components/schemas/CompanyEventPeriodMetricsResponseData'
          maxItems: 1000
        name:
          type: string
        payment_methods:
          type: array
          items:
            $ref: '#/components/schemas/PaymentMethodResponseData'
          maxItems: 1000
        plan:
          $ref: '#/components/schemas/CompanyPlanWithBillingSubView'
        plans:
          type: array
          items:
            $ref: '#/components/schemas/GenericPreviewObject'
          maxItems: 1000
        rules:
          type: array
          items:
            $ref: '#/components/schemas/Rule'
          maxItems: 1000
        scheduled_downgrade:
          $ref: '#/components/schemas/ScheduledDowngradeResponseData'
        traits:
          type: object
          description: A map of trait names to trait values
        updated_at:
          type: string
          format: date-time
        user_count:
          type: integer
          format: int64
      required:
      - created_at
      - environment_id
      - id
      - name
      - updated_at
      - add_ons
      - billing_subscriptions
      - custom_plan_billings
      - entitlements
      - entity_traits
      - keys
      - metrics
      - payment_methods
      - plans
      - rules
      - user_count
      title: CompanyDetailResponseData
    CompanyOverrideNoteResponseData:
      type: object
      properties:
        created_at:
          type: string
          format: date-time
        external_user_id:
          type: string
        external_user_name:
          type: string
        id:
          type: string
        note:
          type: string
        updated_at:
          type: string
          format: date-time
      required:
      - id
      - external_user_id
      - external_user_name
      - note
      - created_at
      - updated_at
      title: CompanyOverrideNoteResponseData
    BillingCreditGrantReason:
      type: string
      enum:
      - adjustment
      - billing_credit_auto_topup
      - free
      - plan
      - purchased
    BillingPlanCreditGrantResetType:
      type: string
      enum:
      - no_reset
      - plan_period
    EventSummaryResponseData:
      type: object
      properties:
        company_count:
          type: integer
          format: int64
        environment_id:
          type: string
        event_count:
          type: integer
          format: int64
        event_subtype:
          type: string
        last_seen_at:
          type: string
          format: date-time
          nullable: true
        user_count:
          type: integer
          format: int64
      required:
      - company_count
      - environment_id
      - event_count
      - event_subtype
      - user_count
      title: EventSummaryResponseData
    BillingCreditBurnStrategy:
      type: string
      enum:
      - expiration_priority
      - first_in_first_out
      - last_in_first_out
      - plan_first_then_credit_bundles_first_in_first_out
    PlanCurrencyPricesResponseData:
      type: object
      properties:
        currency:
          type: string
        monthly_price:
          $ref: '#/components/schemas/BillingPriceResponseData'
        one_time_price:
          $ref: '#/components/schemas/BillingPriceResponseData'
        yearly_price:
          $ref: '#/components/schemas/BillingPriceResponseData'
      required:
      - currency
      title: PlanCurrencyPricesResponseData
    BillingPriceResponseData:
      type: object
      properties:
        currency:
          type: string
        external_price_id:
          type: string
        id:
          type: string
        interval:
          $ref: '#/components/schemas/BillingProductPriceInterval'
        nickname:
          type: string
          nullable: true
        price:
          type: integer
          format: int64
        price_decimal:
          type: string
          nullable: true
        provider_type:
          $ref: '#/components/schemas/BillingProviderType'
        scheme:
          $ref: '#/components/schemas/BillingPriceScheme'
      required:
      - currency
      - external_price_id
      - id
      - interval
      - price
      - provider_type
      - scheme
      title: BillingPriceResponseData
    CustomPlanBillingResponseData:
      type: object
      properties:
        activation_strategy:
          $ref: '#/components/schemas/CustomPlanActivationStrategy'
        company_id:
          type: string
        created_at:
          type: string
          format: date-time
        days_until_due:
          type: integer
          format: int64
        id:
          type: string
        paid_at:
          type: string
          format: date-time
          nullable: true
        plan_id:
          type: string
        published_at:
          type: string
          format: date-time
          nullable: true
        status:
          $ref: '#/components/schemas/CustomPlanBillingStatus'
        stripe_invoice_url:
          type: string
          nullable: true
        updated_at:
          type: string
          format: date-time
      required:
      - activation_strategy
      - company_id
      - created_at
      - days_until_due
      - id
      - plan_id
      - status
      - updated_at
      title: CustomPlanBillingResponseData
    CompanyEventPeriodMetricsResponseData:
      type: object
      properties:
        account_id:
          type: string
        captured_at_max:
          type: string
          format: date-time
        captured_at_min:
          type: string
          format: date-time
        company_id:
          type: string
        created_at:
          type: string
          format: date-time
        environment_id:
          type: string
        event_subtype:
          type: string
        month_reset:
          $ref: '#/components/schemas/MetricPeriodMonthReset'
        period:
          $ref: '#/components/schemas/MetricPeriod'
        valid_until:
          type: string
          format: date-time
          nullable: true
        value:
          type: integer
          format: int64
      required:
      - account_id
      - captured_at_max
      - captured_at_min
      - company_id
      - created_at
      - environment_id
      - event_subtype
      - month_reset
      - period
      - value
      title: CompanyEventPeriodMetricsResponseData
    CompanyPlanDetailResponseData:
      type: object
      properties:
        active_version:
          $ref: '#/components/schemas/PlanVersionResponseData'
        audience_type:
          type: string
          nullable: true
          deprecated: true
        billing_linked_resource:
          $ref: '#/components/schemas/BillingLinkedResourceResponseData'
        billing_product:
          $ref: '#/components/schemas/BillingProductDetailResponseData'
        charge_type:
          $ref: '#/components/schemas/ChargeType'
        company_can_trial:
          type: boolean
        company_count:
          type: integer
          format: int64
        company_id:
          type: string
          nullable: true
        company_name:
          type: string
          nullable: true
        compatible_plan_ids:
          type: array
          items:
            type: string
          maxItems: 1000
        controlled_by:
          $ref: '#/components/schemas/BillingProviderType'
        copied_from_plan_id:
          type: string
          nullable: true
        created_at:
          type: string
          format: date-time
        currency_prices:
          type: array
          items:
            $ref: '#/components/schemas/PlanCurrencyPricesResponseData'
          maxItems: 1000
        current:
          type: boolean
        custom:
          type: boolean
        custom_plan_config:
          $ref: '#/components/schemas/CustomPlanConfig'
        description:
          type: string
        draft_version:
          $ref: '#/components/schemas/PlanVersionResponseData'
        entitlements:
          type: array
          items:
            $ref: '#/components/schemas/PlanEntitlementResponseData'
          maxItems: 1000
        features:
          type: array
          items:
            $ref: '#/components/schemas/FeatureInPlanResponseData'
          maxItems: 1000
        icon:
          $ref: '#/components/schemas/PlanIcon'
        id:
          type: string
        included_credit_grants:
          type: array
          items:
            $ref: '#/components/schemas/PlanCreditGrantView'
          maxItems: 1000
        invalid_reason:
          allOf:
          - $ref: '#/components/schemas/CompanyPlanInvalidReason'
          nullable: true
        is_custom:
          type: boolean
        is_default:
          type: boolean
          deprecated: true
        is_free:
          type: boolean
        is_trialable:
          type: boolean
        monthly_price:
          $ref: '#/components/schemas/BillingPriceResponseData'
        name:
          type: string
        one_time_price:
          $ref: '#/components/schemas/BillingPriceResponseData'
        plan_type:
          $ref: '#/components/schemas/PlanType'
        trial_days:
          type: integer
          format: int64
          nullable: true
        updated_at:
          type: string
          format: date-time
        usage_violations:
          type: array
          items:
            $ref: '#/components/schemas/FeatureUsageResponseData'
          maxItems: 1000
        valid:
          type: boolean
        versions:
          type: array
          items:
            $ref: '#/components/schemas/PlanVersionResponseData'
          maxItems: 1000
        yearly_price:
          $ref: '#/components/schemas/BillingPriceResponseData'
      required:
      - created_at
      - description
      - icon
      - id
      - name
      - plan_type
      - updated_at
      - charge_type
      - company_count
      - controlled_by
      - currency_prices
      - features
      - is_default
      - is_free
      - is_trialable
      - versions
      - is_custom
      - entitlements
      - compatible_plan_ids
      - company_can_trial
      - current
      - custom
      - included_credit_grants
      - usage_violations
      - valid
      title: CompanyPlanDetailResponseData
    FeatureEntitlement:
      type: object
      properties:
        allocation:
          type: integer
          description: If the company has a numeric entitlement for this feature, the allocated amount
          format: int64
          nullable: true
        credit_id:
          type: string
          description: If the company has a credit-based entitlement for this feature, the ID of the credit
          nullable: true
        credit_remaining:
          type: number
          description: If the company has a credit-based entitlement for this feature, the remaining credit amount
          nullable: true
        credit_total:
          type: number
          description: If the company has a credit-based entitlement for this feature, the total credit amount
          nullable: true
        credit_used:
          type: number
          description: If the company has a credit-based entitlement for this feature, the amount of credit used
          nullable: true
        event_name:
          type: string
          description: If the feature is event-based, the name of the event tracked for usage
          nullable: true
        feature_id:
          type: string
          description: The ID of the feature
        feature_key:
          type: string
          description: The key of the flag associated with the feature
        metric_period:
          allOf:
          - $ref: '#/components/schemas/MetricPeriod'
          description: For event-based feature entitlements, the period over which usage is tracked
          nullable: true
        metric_reset_at:
          type: string
          description: For event-based feature entitlements, when the usage period will reset
          format: date-time
          nullable: true
        month_reset:
          allOf:
          - $ref: '#/components/schemas/MetricPeriodMonthReset'
          description: For event-based feature entitlements that have a monthly period, whether that monthly reset is based on the calendar month or a billing cycle
          nullable: true
        soft_limit:
          type: integer
          description: For usage-based pricing, the soft limit for overage charges or the next tier boundary
          format: int64
          nullable: true
        usage:
          type: integer
          description: If the company has a numeric entitlement for this feature, the current usage amount
          format: int64
          nullable: true
        value_type:
          allOf:
          - $ref: '#/components/schemas/EntitlementValueType'
          description: The type of the entitlement value
      required:
      - feature_id
      - feature_key


# --- truncated at 32 KB (103 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/schematic/refs/heads/main/openapi/schematic-components-api-openapi.yml