Schematic · Capability
Schematic API — plans
Schematic API — plans. 17 operations. Lead operation: Update company plans. Self-contained Naftiko capability covering one Schematic business surface.
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
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: $.