Schematic · Capability

Schematic API — plans

Schematic API — plans. 17 operations. Lead operation: Update company plans. Self-contained Naftiko capability covering one Schematic business surface.

Run with Naftiko Schematicplans

What You Can Do

PUT
Updatecompanyplans — Update company plans
/v1/company-plans/{company-plan-id}
GET
Listcustomplanbillings — List custom plan billings
/v1/custom-plan-billings
PUT
Retrycustomplanbilling — Retry custom plan billing
/v1/custom-plan-billings/{custom-plan-billing-id}/retry
POST
Createcustomplan — Create custom plan
/v1/custom-plans
GET
Listplans — List plans
/v1/plans
POST
Createplan — Create plan
/v1/plans
POST
Upsertplanforbillingproduct — Upsert plan for billing product
/v1/plans/billing-linked
GET
Listbillingproductmatchcompanies — List billing product match companies
/v1/plans/billing-product-match-companies
GET
Countbillingproductmatchcompanies — Count billing product match companies
/v1/plans/billing-product-match-companies/count
GET
Countplans — Count plans
/v1/plans/count
GET
Listplanissues — List plan issues
/v1/plans/issues
DELETE
Deleteplanversion — Delete plan version
/v1/plans/version/{plan-id}
PUT
Publishplanversion — Publish plan version
/v1/plans/version/{plan-id}/publish
GET
Getplan — Get plan
/v1/plans/{plan-id}
PUT
Updateplan — Update plan
/v1/plans/{plan-id}
DELETE
Deleteplan — Delete plan
/v1/plans/{plan-id}
PUT
Upsertbillingproductplan — Upsert billing product plan
/v1/plans/{plan-id}/billing-products

MCP Tools

update-company-plans

Update company plans

idempotent
list-custom-plan-billings

List custom plan billings

read-only idempotent
retry-custom-plan-billing

Retry custom plan billing

idempotent
create-custom-plan

Create custom plan

list-plans

List plans

read-only idempotent
create-plan

Create plan

upsert-plan-billing-product

Upsert plan for billing product

list-billing-product-match-companies

List billing product match companies

read-only idempotent
count-billing-product-match-companies

Count billing product match companies

read-only idempotent
count-plans

Count plans

read-only idempotent
list-plan-issues

List plan issues

read-only idempotent
delete-plan-version

Delete plan version

idempotent
publish-plan-version

Publish plan version

idempotent
get-plan

Get plan

read-only idempotent
update-plan

Update plan

idempotent
delete-plan

Delete plan

idempotent
upsert-billing-product-plan

Upsert billing product plan

idempotent

Capability Spec

schematic-plans.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Schematic API — plans
  description: 'Schematic API — plans. 17 operations. Lead operation: Update company plans. Self-contained Naftiko capability
    covering one Schematic business surface.'
  tags:
  - Schematic
  - plans
  created: '2026-05-19'
  modified: '2026-05-19'
binds:
- namespace: env
  keys:
    SCHEMATIC_API_KEY: SCHEMATIC_API_KEY
capability:
  consumes:
  - type: http
    namespace: schematic-plans
    baseUri: https://api.schematichq.com
    description: Schematic API — plans business capability. Self-contained, no shared references.
    resources:
    - name: company-plans-company_plan_id
      path: /company-plans/{company_plan_id}
      operations:
      - name: updatecompanyplans
        method: PUT
        description: Update company plans
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: company_plan_id
          in: path
          type: string
          description: company_plan_id
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: custom-plan-billings
      path: /custom-plan-billings
      operations:
      - name: listcustomplanbillings
        method: GET
        description: List custom plan billings
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: company_id
          in: query
          type: string
          description: Filter by company ID
        - name: plan_id
          in: query
          type: string
          description: Filter by plan ID
        - name: status
          in: query
          type: string
          description: Filter by billing status
        - name: statuses
          in: query
          type: array
          description: Filter by multiple billing statuses
        - name: limit
          in: query
          type: integer
          description: Page limit (default 100)
        - name: offset
          in: query
          type: integer
          description: Page offset (default 0)
    - name: custom-plan-billings-custom_plan_billing_id-retry
      path: /custom-plan-billings/{custom_plan_billing_id}/retry
      operations:
      - name: retrycustomplanbilling
        method: PUT
        description: Retry custom plan billing
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: custom_plan_billing_id
          in: path
          type: string
          description: custom_plan_billing_id
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: custom-plans
      path: /custom-plans
      operations:
      - name: createcustomplan
        method: POST
        description: Create custom plan
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: plans
      path: /plans
      operations:
      - name: listplans
        method: GET
        description: List plans
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: company_id
          in: query
          type: string
        - name: exclude_company_scoped
          in: query
          type: boolean
          description: Exclude plans that are scoped to a company (custom plans assigned to a company)
        - name: for_fallback_plan
          in: query
          type: boolean
          description: Filter for plans valid as fallback plans (not linked to billing)
        - name: for_initial_plan
          in: query
          type: boolean
          description: Filter for plans valid as initial plans (not linked to billing, free, or auto-cancelling trial)
        - name: for_trial_expiry_plan
          in: query
          type: boolean
          description: Filter for plans valid as trial expiry plans (not linked to billing or free)
        - name: has_product_id
          in: query
          type: boolean
          description: Filter out plans that do not have a billing product ID
        - name: ids
          in: query
          type: array
        - name: include_draft_versions
          in: query
          type: boolean
          description: Include billing settings from draft versions for plans which have draft version
        - name: plan_type
          in: query
          type: string
          description: Filter by plan type
        - name: q
          in: query
          type: string
        - name: scoped_to_company_id
          in: query
          type: string
          description: Filter plans scoped to a specific company (custom plans)
        - name: without_entitlement_for
          in: query
          type: string
          description: Filter out plans that already have a plan entitlement for the specified feature ID
        - name: without_paid_product_id
          in: query
          type: boolean
          description: Filter out plans that have a paid billing product ID
        - name: limit
          in: query
          type: integer
          description: Page limit (default 100)
        - name: offset
          in: query
          type: integer
          description: Page offset (default 0)
      - name: createplan
        method: POST
        description: Create plan
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: plans-billing-linked
      path: /plans/billing-linked
      operations:
      - name: upsertplanforbillingproduct
        method: POST
        description: Upsert plan for billing product
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: plans-billing-product-match-companies
      path: /plans/billing-product-match-companies
      operations:
      - name: listbillingproductmatchcompanies
        method: GET
        description: List billing product match companies
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: plan_id
          in: query
          type: string
          description: The plan ID to find billing product match companies for
          required: true
        - name: q
          in: query
          type: string
          description: Search for companies by name, keys or string traits
        - name: limit
          in: query
          type: integer
          description: Page limit (default 100)
        - name: offset
          in: query
          type: integer
          description: Page offset (default 0)
    - name: plans-billing-product-match-companies-count
      path: /plans/billing-product-match-companies/count
      operations:
      - name: countbillingproductmatchcompanies
        method: GET
        description: Count billing product match companies
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: plan_id
          in: query
          type: string
          description: The plan ID to find billing product match companies for
          required: true
        - name: q
          in: query
          type: string
          description: Search for companies by name, keys or string traits
        - name: limit
          in: query
          type: integer
          description: Page limit (default 100)
        - name: offset
          in: query
          type: integer
          description: Page offset (default 0)
    - name: plans-count
      path: /plans/count
      operations:
      - name: countplans
        method: GET
        description: Count plans
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: company_id
          in: query
          type: string
        - name: exclude_company_scoped
          in: query
          type: boolean
          description: Exclude plans that are scoped to a company (custom plans assigned to a company)
        - name: for_fallback_plan
          in: query
          type: boolean
          description: Filter for plans valid as fallback plans (not linked to billing)
        - name: for_initial_plan
          in: query
          type: boolean
          description: Filter for plans valid as initial plans (not linked to billing, free, or auto-cancelling trial)
        - name: for_trial_expiry_plan
          in: query
          type: boolean
          description: Filter for plans valid as trial expiry plans (not linked to billing or free)
        - name: has_product_id
          in: query
          type: boolean
          description: Filter out plans that do not have a billing product ID
        - name: ids
          in: query
          type: array
        - name: include_draft_versions
          in: query
          type: boolean
          description: Include billing settings from draft versions for plans which have draft version
        - name: plan_type
          in: query
          type: string
          description: Filter by plan type
        - name: q
          in: query
          type: string
        - name: scoped_to_company_id
          in: query
          type: string
          description: Filter plans scoped to a specific company (custom plans)
        - name: without_entitlement_for
          in: query
          type: string
          description: Filter out plans that already have a plan entitlement for the specified feature ID
        - name: without_paid_product_id
          in: query
          type: boolean
          description: Filter out plans that have a paid billing product ID
        - name: limit
          in: query
          type: integer
          description: Page limit (default 100)
        - name: offset
          in: query
          type: integer
          description: Page offset (default 0)
    - name: plans-issues
      path: /plans/issues
      operations:
      - name: listplanissues
        method: GET
        description: List plan issues
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: plan_id
          in: query
          type: string
          required: true
        - name: plan_version_id
          in: query
          type: string
    - name: plans-version-plan_id
      path: /plans/version/{plan_id}
      operations:
      - name: deleteplanversion
        method: DELETE
        description: Delete plan version
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: plan_id
          in: path
          type: string
          description: plan_id
          required: true
        - name: promote_archived_version
          in: query
          type: boolean
    - name: plans-version-plan_id-publish
      path: /plans/version/{plan_id}/publish
      operations:
      - name: publishplanversion
        method: PUT
        description: Publish plan version
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: plan_id
          in: path
          type: string
          description: plan_id
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    - name: plans-plan_id
      path: /plans/{plan_id}
      operations:
      - name: getplan
        method: GET
        description: Get plan
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: plan_id
          in: path
          type: string
          description: plan_id
          required: true
        - name: plan_version_id
          in: query
          type: string
          description: Fetch billing settings for a specific plan version
      - name: updateplan
        method: PUT
        description: Update plan
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: plan_id
          in: path
          type: string
          description: plan_id
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
      - name: deleteplan
        method: DELETE
        description: Delete plan
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: plan_id
          in: path
          type: string
          description: plan_id
          required: true
    - name: plans-plan_id-billing_products
      path: /plans/{plan_id}/billing_products
      operations:
      - name: upsertbillingproductplan
        method: PUT
        description: Upsert billing product plan
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.
        inputParameters:
        - name: plan_id
          in: path
          type: string
          description: plan_id
          required: true
        - name: body
          in: body
          type: object
          description: Request body (JSON).
          required: true
    authentication:
      type: apikey
      key: X-Schematic-Api-Key
      value: '{{env.SCHEMATIC_API_KEY}}'
      placement: header
  exposes:
  - type: rest
    namespace: schematic-plans-rest
    port: 8080
    description: REST adapter for Schematic API — plans. One Spectral-compliant resource per consumed operation, prefixed
      with /v1.
    resources:
    - path: /v1/company-plans/{company-plan-id}
      name: company-plans-company-plan-id
      description: REST surface for company-plans-company_plan_id.
      operations:
      - method: PUT
        name: updatecompanyplans
        description: Update company plans
        call: schematic-plans.updatecompanyplans
        with:
          company_plan_id: rest.company_plan_id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/custom-plan-billings
      name: custom-plan-billings
      description: REST surface for custom-plan-billings.
      operations:
      - method: GET
        name: listcustomplanbillings
        description: List custom plan billings
        call: schematic-plans.listcustomplanbillings
        with:
          company_id: rest.company_id
          plan_id: rest.plan_id
          status: rest.status
          statuses: rest.statuses
          limit: rest.limit
          offset: rest.offset
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/custom-plan-billings/{custom-plan-billing-id}/retry
      name: custom-plan-billings-custom-plan-billing-id-retry
      description: REST surface for custom-plan-billings-custom_plan_billing_id-retry.
      operations:
      - method: PUT
        name: retrycustomplanbilling
        description: Retry custom plan billing
        call: schematic-plans.retrycustomplanbilling
        with:
          custom_plan_billing_id: rest.custom_plan_billing_id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/custom-plans
      name: custom-plans
      description: REST surface for custom-plans.
      operations:
      - method: POST
        name: createcustomplan
        description: Create custom plan
        call: schematic-plans.createcustomplan
        with:
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/plans
      name: plans
      description: REST surface for plans.
      operations:
      - method: GET
        name: listplans
        description: List plans
        call: schematic-plans.listplans
        with:
          company_id: rest.company_id
          exclude_company_scoped: rest.exclude_company_scoped
          for_fallback_plan: rest.for_fallback_plan
          for_initial_plan: rest.for_initial_plan
          for_trial_expiry_plan: rest.for_trial_expiry_plan
          has_product_id: rest.has_product_id
          ids: rest.ids
          include_draft_versions: rest.include_draft_versions
          plan_type: rest.plan_type
          q: rest.q
          scoped_to_company_id: rest.scoped_to_company_id
          without_entitlement_for: rest.without_entitlement_for
          without_paid_product_id: rest.without_paid_product_id
          limit: rest.limit
          offset: rest.offset
        outputParameters:
        - type: object
          mapping: $.
      - method: POST
        name: createplan
        description: Create plan
        call: schematic-plans.createplan
        with:
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/plans/billing-linked
      name: plans-billing-linked
      description: REST surface for plans-billing-linked.
      operations:
      - method: POST
        name: upsertplanforbillingproduct
        description: Upsert plan for billing product
        call: schematic-plans.upsertplanforbillingproduct
        with:
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/plans/billing-product-match-companies
      name: plans-billing-product-match-companies
      description: REST surface for plans-billing-product-match-companies.
      operations:
      - method: GET
        name: listbillingproductmatchcompanies
        description: List billing product match companies
        call: schematic-plans.listbillingproductmatchcompanies
        with:
          plan_id: rest.plan_id
          q: rest.q
          limit: rest.limit
          offset: rest.offset
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/plans/billing-product-match-companies/count
      name: plans-billing-product-match-companies-count
      description: REST surface for plans-billing-product-match-companies-count.
      operations:
      - method: GET
        name: countbillingproductmatchcompanies
        description: Count billing product match companies
        call: schematic-plans.countbillingproductmatchcompanies
        with:
          plan_id: rest.plan_id
          q: rest.q
          limit: rest.limit
          offset: rest.offset
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/plans/count
      name: plans-count
      description: REST surface for plans-count.
      operations:
      - method: GET
        name: countplans
        description: Count plans
        call: schematic-plans.countplans
        with:
          company_id: rest.company_id
          exclude_company_scoped: rest.exclude_company_scoped
          for_fallback_plan: rest.for_fallback_plan
          for_initial_plan: rest.for_initial_plan
          for_trial_expiry_plan: rest.for_trial_expiry_plan
          has_product_id: rest.has_product_id
          ids: rest.ids
          include_draft_versions: rest.include_draft_versions
          plan_type: rest.plan_type
          q: rest.q
          scoped_to_company_id: rest.scoped_to_company_id
          without_entitlement_for: rest.without_entitlement_for
          without_paid_product_id: rest.without_paid_product_id
          limit: rest.limit
          offset: rest.offset
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/plans/issues
      name: plans-issues
      description: REST surface for plans-issues.
      operations:
      - method: GET
        name: listplanissues
        description: List plan issues
        call: schematic-plans.listplanissues
        with:
          plan_id: rest.plan_id
          plan_version_id: rest.plan_version_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/plans/version/{plan-id}
      name: plans-version-plan-id
      description: REST surface for plans-version-plan_id.
      operations:
      - method: DELETE
        name: deleteplanversion
        description: Delete plan version
        call: schematic-plans.deleteplanversion
        with:
          plan_id: rest.plan_id
          promote_archived_version: rest.promote_archived_version
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/plans/version/{plan-id}/publish
      name: plans-version-plan-id-publish
      description: REST surface for plans-version-plan_id-publish.
      operations:
      - method: PUT
        name: publishplanversion
        description: Publish plan version
        call: schematic-plans.publishplanversion
        with:
          plan_id: rest.plan_id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/plans/{plan-id}
      name: plans-plan-id
      description: REST surface for plans-plan_id.
      operations:
      - method: GET
        name: getplan
        description: Get plan
        call: schematic-plans.getplan
        with:
          plan_id: rest.plan_id
          plan_version_id: rest.plan_version_id
        outputParameters:
        - type: object
          mapping: $.
      - method: PUT
        name: updateplan
        description: Update plan
        call: schematic-plans.updateplan
        with:
          plan_id: rest.plan_id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
      - method: DELETE
        name: deleteplan
        description: Delete plan
        call: schematic-plans.deleteplan
        with:
          plan_id: rest.plan_id
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/plans/{plan-id}/billing-products
      name: plans-plan-id-billing-products
      description: REST surface for plans-plan_id-billing_products.
      operations:
      - method: PUT
        name: upsertbillingproductplan
        description: Upsert billing product plan
        call: schematic-plans.upsertbillingproductplan
        with:
          plan_id: rest.plan_id
          body: rest.body
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    namespace: schematic-plans-mcp
    port: 9090
    transport: http
    description: MCP adapter for Schematic API — plans. One tool per consumed operation, routed inline through this capability's
      consumes block.
    tools:
    - name: update-company-plans
      description: Update company plans
      hints:
        readOnly: false
        destructive: false
        idempotent: true
      call: schematic-plans.updatecompanyplans
      with:
        company_plan_id: tools.company_plan_id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: list-custom-plan-billings
      description: List custom plan billings
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: schematic-plans.listcustomplanbillings
      with:
        company_id: tools.company_id
        plan_id: tools.plan_id
        status: tools.status
        statuses: tools.statuses
        limit: tools.limit
        offset: tools.offset
      outputParameters:
      - type: object
        mapping: $.
    - name: retry-custom-plan-billing
      description: Retry custom plan billing
      hints:
        readOnly: false
        destructive: false
        idempotent: true
      call: schematic-plans.retrycustomplanbilling
      with:
        custom_plan_billing_id: tools.custom_plan_billing_id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: create-custom-plan
      description: Create custom plan
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: schematic-plans.createcustomplan
      with:
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: list-plans
      description: List plans
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: schematic-plans.listplans
      with:
        company_id: tools.company_id
        exclude_company_scoped: tools.exclude_company_scoped
        for_fallback_plan: tools.for_fallback_plan
        for_initial_plan: tools.for_initial_plan
        for_trial_expiry_plan: tools.for_trial_expiry_plan
        has_product_id: tools.has_product_id
        ids: tools.ids
        include_draft_versions: tools.include_draft_versions
        plan_type: tools.plan_type
        q: tools.q
        scoped_to_company_id: tools.scoped_to_company_id
        without_entitlement_for: tools.without_entitlement_for
        without_paid_product_id: tools.without_paid_product_id
        limit: tools.limit
        offset: tools.offset
      outputParameters:
      - type: object
        mapping: $.
    - name: create-plan
      description: Create plan
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: schematic-plans.createplan
      with:
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: upsert-plan-billing-product
      description: Upsert plan for billing product
      hints:
        readOnly: false
        destructive: false
        idempotent: false
      call: schematic-plans.upsertplanforbillingproduct
      with:
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: list-billing-product-match-companies
      description: List billing product match companies
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: schematic-plans.listbillingproductmatchcompanies
      with:
        plan_id: tools.plan_id
        q: tools.q
        limit: tools.limit
        offset: tools.offset
      outputParameters:
      - type: object
        mapping: $.
    - name: count-billing-product-match-companies
      description: Count billing product match companies
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: schematic-plans.countbillingproductmatchcompanies
      with:
        plan_id: tools.plan_id
        q: tools.q
        limit: tools.limit
        offset: tools.offset
      outputParameters:
      - type: object
        mapping: $.
    - name: count-plans
      description: Count plans
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: schematic-plans.countplans
      with:
        company_id: tools.company_id
        exclude_company_scoped: tools.exclude_company_scoped
        for_fallback_plan: tools.for_fallback_plan
        for_initial_plan: tools.for_initial_plan
        for_trial_expiry_plan: tools.for_trial_expiry_plan
        has_product_id: tools.has_product_id
        ids: tools.ids
        include_draft_versions: tools.include_draft_versions
        plan_type: tools.plan_type
        q: tools.q
        scoped_to_company_id: tools.scoped_to_company_id
        without_entitlement_for: tools.without_entitlement_for
        without_paid_product_id: tools.without_paid_product_id
        limit: tools.limit
        offset: tools.offset
      outputParameters:
      - type: object
        mapping: $.
    - name: list-plan-issues
      description: List plan issues
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: schematic-plans.listplanissues
      with:
        plan_id: tools.plan_id
        plan_version_id: tools.plan_version_id
      outputParameters:
      - type: object
        mapping: $.
    - name: delete-plan-version
      description: Delete plan version
      hints:
        readOnly: false
        destructive: true
        idempotent: true
      call: schematic-plans.deleteplanversion
      with:
        plan_id: tools.plan_id
        promote_archived_version: tools.promote_archived_version
      outputParameters:
      - type: object
        mapping: $.
    - name: publish-plan-version
      description: Publish plan version
      hints:
        readOnly: false
        destructive: false
        idempotent: true
      call: schematic-plans.publishplanversion
      with:
        plan_id: tools.plan_id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: get-plan
      description: Get plan
      hints:
        readOnly: true
        destructive: false
        idempotent: true
      call: schematic-plans.getplan
      with:
        plan_id: tools.plan_id
        plan_version_id: tools.plan_version_id
      outputParameters:
      - type: object
        mapping: $.
    - name: update-plan
      description: Update plan
      hints:
        readOnly: false
        destructive: false
        idempotent: true
      call: schematic-plans.updateplan
      with:
        plan_id: tools.plan_id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.
    - name: delete-plan
      description: Delete plan
      hints:
        readOnly: false
        destructive: true
        idempotent: true
      call: schematic-plans.deleteplan
      with:
        plan_id: tools.plan_id
      outputParameters:
      - type: object
        mapping: $.
    - name: upsert-billing-product-plan
      description: Upsert billing product plan
      hints:
        readOnly: false
        destructive: false
        idempotent: true
      call: schematic-plans.upsertbillingproductplan
      with:
        plan_id: tools.plan_id
        body: tools.body
      outputParameters:
      - type: object
        mapping: $.