naftiko: 1.0.0-alpha2 info: label: Schematic API — billing description: 'Schematic API — billing. 20 operations. Lead operation: List coupons. Self-contained Naftiko capability covering one Schematic business surface.' tags: - Schematic - billing created: '2026-05-19' modified: '2026-05-19' binds: - namespace: env keys: SCHEMATIC_API_KEY: SCHEMATIC_API_KEY capability: consumes: - type: http namespace: schematic-billing baseUri: https://api.schematichq.com description: Schematic API — billing business capability. Self-contained, no shared references. resources: - name: billing-coupons path: /billing/coupons operations: - name: listcoupons method: GET description: List coupons outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: is_active in: query type: boolean - name: q in: query type: string - name: limit in: query type: integer description: Page limit (default 100) - name: offset in: query type: integer description: Page offset (default 0) - name: upsertbillingcoupon method: POST description: Upsert billing coupon outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: billing-customer-upsert path: /billing/customer/upsert operations: - name: upsertbillingcustomer method: POST description: Upsert billing customer outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: billing-customers path: /billing/customers operations: - name: listcustomerswithsubscriptions method: GET description: List customers with subscriptions outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: company_ids in: query type: array - name: name in: query type: string - name: provider_type in: query type: string - name: q in: query type: string - name: limit in: query type: integer description: Page limit (default 100) - name: offset in: query type: integer description: Page offset (default 0) - name: billing-customers-count path: /billing/customers/count operations: - name: countcustomers method: GET description: Count customers outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: company_ids in: query type: array - name: name in: query type: string - name: provider_type in: query type: string - name: q in: query type: string - name: limit in: query type: integer description: Page limit (default 100) - name: offset in: query type: integer description: Page offset (default 0) - name: billing-invoices path: /billing/invoices operations: - name: listinvoices method: GET description: List invoices outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: company_id in: query type: string - name: customer_external_id in: query type: string required: true - name: subscription_external_id in: query type: string required: true - name: limit in: query type: integer description: Page limit (default 100) - name: offset in: query type: integer description: Page offset (default 0) - name: upsertinvoice method: POST description: Upsert invoice outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: billing-meter path: /billing/meter operations: - name: listmeters method: GET description: List meters outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: display_name in: query type: string - name: limit in: query type: integer description: Page limit (default 100) - name: offset in: query type: integer description: Page offset (default 0) - name: billing-meter-upsert path: /billing/meter/upsert operations: - name: upsertbillingmeter method: POST description: Upsert billing meter outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: billing-payment-methods path: /billing/payment-methods operations: - name: listpaymentmethods method: GET description: List payment methods outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: company_id in: query type: string - name: customer_external_id in: query type: string required: true - name: limit in: query type: integer description: Page limit (default 100) - name: offset in: query type: integer description: Page offset (default 0) - name: upsertpaymentmethod method: POST description: Upsert payment method outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: billing-price path: /billing/price operations: - name: listbillingprices method: GET description: List billing prices outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: currency in: query type: string description: Filter for prices in a specific currency (e.g. usd, eur) - name: for_initial_plan in: query type: boolean description: Filter for prices valid for initial plans (free prices only) - name: for_trial_expiry_plan in: query type: boolean description: Filter for prices valid for trial expiry plans (free prices only) - name: ids in: query type: array - name: interval in: query type: string - name: is_active in: query type: boolean description: Filter for active prices on active products (defaults to true if not specified) - name: price in: query type: integer - name: product_id in: query type: string - name: product_ids in: query type: array - name: provider_type in: query type: string - name: q in: query type: string - name: tiers_mode in: query type: string - name: usage_type in: query type: string - name: with_meter in: query type: boolean description: Filter for prices with a meter - name: limit in: query type: integer description: Page limit (default 100) - name: offset in: query type: integer description: Page offset (default 0) - name: billing-price-upsert path: /billing/price/upsert operations: - name: upsertbillingprice method: POST description: Upsert billing price outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: billing-product-prices path: /billing/product/prices operations: - name: listbillingproductprices method: GET description: List billing product prices outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: currency in: query type: string description: Filter for prices in a specific currency (e.g. usd, eur) - name: for_initial_plan in: query type: boolean description: Filter for prices valid for initial plans (free prices only) - name: for_trial_expiry_plan in: query type: boolean description: Filter for prices valid for trial expiry plans (free prices only) - name: ids in: query type: array - name: interval in: query type: string - name: is_active in: query type: boolean description: Filter for active prices on active products (defaults to true if not specified) - name: price in: query type: integer - name: product_id in: query type: string - name: product_ids in: query type: array - name: provider_type in: query type: string - name: q in: query type: string - name: tiers_mode in: query type: string - name: usage_type in: query type: string - name: with_meter in: query type: boolean description: Filter for prices with a meter - name: limit in: query type: integer description: Page limit (default 100) - name: offset in: query type: integer description: Page offset (default 0) - name: billing-product-prices-billing_id path: /billing/product/prices/{billing_id} operations: - name: deleteproductprice method: DELETE description: Delete product price outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: billing_id in: path type: string description: billing_id required: true - name: billing-product-upsert path: /billing/product/upsert operations: - name: upsertbillingproduct method: POST description: Upsert billing product outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: body in: body type: object description: Request body (JSON). required: true - name: billing-product-billing_id path: /billing/product/{billing_id} operations: - name: deletebillingproduct method: DELETE description: Delete billing product outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: billing_id in: path type: string description: billing_id required: true - name: billing-products path: /billing/products operations: - name: listbillingproducts method: GET description: List billing products outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: ids in: query type: array - name: is_active in: query type: boolean description: Filter products that are active. Defaults to true if not specified - name: name in: query type: string - name: price_usage_type in: query type: string - name: provider_type in: query type: string - name: q in: query type: string - name: recurring_charges_only in: query type: boolean description: Filter to products that have at least one recurring price - name: with_one_time_charges in: query type: boolean description: Filter products that are one time charges - name: with_prices_only in: query type: boolean description: Filter products that have prices - name: with_zero_price in: query type: boolean description: Filter products that have zero price for free subscription type - name: without_linked_to_plan in: query type: boolean description: Filter products that are not linked to any plan - name: limit in: query type: integer description: Page limit (default 100) - name: offset in: query type: integer description: Page offset (default 0) - name: billing-products-count path: /billing/products/count operations: - name: countbillingproducts method: GET description: Count billing products outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: ids in: query type: array - name: is_active in: query type: boolean description: Filter products that are active. Defaults to true if not specified - name: name in: query type: string - name: price_usage_type in: query type: string - name: provider_type in: query type: string - name: q in: query type: string - name: recurring_charges_only in: query type: boolean description: Filter to products that have at least one recurring price - name: with_one_time_charges in: query type: boolean description: Filter products that are one time charges - name: with_prices_only in: query type: boolean description: Filter products that have prices - name: with_zero_price in: query type: boolean description: Filter products that have zero price for free subscription type - name: without_linked_to_plan in: query type: boolean description: Filter products that are not linked to any plan - name: limit in: query type: integer description: Page limit (default 100) - name: offset in: query type: integer description: Page offset (default 0) - name: billing-subscription-upsert path: /billing/subscription/upsert operations: - name: upsertbillingsubscription method: POST description: Upsert billing subscription outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - 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-billing-rest port: 8080 description: REST adapter for Schematic API — billing. One Spectral-compliant resource per consumed operation, prefixed with /v1. resources: - path: /v1/billing/coupons name: billing-coupons description: REST surface for billing-coupons. operations: - method: GET name: listcoupons description: List coupons call: schematic-billing.listcoupons with: is_active: rest.is_active q: rest.q limit: rest.limit offset: rest.offset outputParameters: - type: object mapping: $. - method: POST name: upsertbillingcoupon description: Upsert billing coupon call: schematic-billing.upsertbillingcoupon with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/billing/customer/upsert name: billing-customer-upsert description: REST surface for billing-customer-upsert. operations: - method: POST name: upsertbillingcustomer description: Upsert billing customer call: schematic-billing.upsertbillingcustomer with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/billing/customers name: billing-customers description: REST surface for billing-customers. operations: - method: GET name: listcustomerswithsubscriptions description: List customers with subscriptions call: schematic-billing.listcustomerswithsubscriptions with: company_ids: rest.company_ids name: rest.name provider_type: rest.provider_type q: rest.q limit: rest.limit offset: rest.offset outputParameters: - type: object mapping: $. - path: /v1/billing/customers/count name: billing-customers-count description: REST surface for billing-customers-count. operations: - method: GET name: countcustomers description: Count customers call: schematic-billing.countcustomers with: company_ids: rest.company_ids name: rest.name provider_type: rest.provider_type q: rest.q limit: rest.limit offset: rest.offset outputParameters: - type: object mapping: $. - path: /v1/billing/invoices name: billing-invoices description: REST surface for billing-invoices. operations: - method: GET name: listinvoices description: List invoices call: schematic-billing.listinvoices with: company_id: rest.company_id customer_external_id: rest.customer_external_id subscription_external_id: rest.subscription_external_id limit: rest.limit offset: rest.offset outputParameters: - type: object mapping: $. - method: POST name: upsertinvoice description: Upsert invoice call: schematic-billing.upsertinvoice with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/billing/meter name: billing-meter description: REST surface for billing-meter. operations: - method: GET name: listmeters description: List meters call: schematic-billing.listmeters with: display_name: rest.display_name limit: rest.limit offset: rest.offset outputParameters: - type: object mapping: $. - path: /v1/billing/meter/upsert name: billing-meter-upsert description: REST surface for billing-meter-upsert. operations: - method: POST name: upsertbillingmeter description: Upsert billing meter call: schematic-billing.upsertbillingmeter with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/billing/payment-methods name: billing-payment-methods description: REST surface for billing-payment-methods. operations: - method: GET name: listpaymentmethods description: List payment methods call: schematic-billing.listpaymentmethods with: company_id: rest.company_id customer_external_id: rest.customer_external_id limit: rest.limit offset: rest.offset outputParameters: - type: object mapping: $. - method: POST name: upsertpaymentmethod description: Upsert payment method call: schematic-billing.upsertpaymentmethod with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/billing/price name: billing-price description: REST surface for billing-price. operations: - method: GET name: listbillingprices description: List billing prices call: schematic-billing.listbillingprices with: currency: rest.currency for_initial_plan: rest.for_initial_plan for_trial_expiry_plan: rest.for_trial_expiry_plan ids: rest.ids interval: rest.interval is_active: rest.is_active price: rest.price product_id: rest.product_id product_ids: rest.product_ids provider_type: rest.provider_type q: rest.q tiers_mode: rest.tiers_mode usage_type: rest.usage_type with_meter: rest.with_meter limit: rest.limit offset: rest.offset outputParameters: - type: object mapping: $. - path: /v1/billing/price/upsert name: billing-price-upsert description: REST surface for billing-price-upsert. operations: - method: POST name: upsertbillingprice description: Upsert billing price call: schematic-billing.upsertbillingprice with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/billing/product/prices name: billing-product-prices description: REST surface for billing-product-prices. operations: - method: GET name: listbillingproductprices description: List billing product prices call: schematic-billing.listbillingproductprices with: currency: rest.currency for_initial_plan: rest.for_initial_plan for_trial_expiry_plan: rest.for_trial_expiry_plan ids: rest.ids interval: rest.interval is_active: rest.is_active price: rest.price product_id: rest.product_id product_ids: rest.product_ids provider_type: rest.provider_type q: rest.q tiers_mode: rest.tiers_mode usage_type: rest.usage_type with_meter: rest.with_meter limit: rest.limit offset: rest.offset outputParameters: - type: object mapping: $. - path: /v1/billing/product/prices/{billing-id} name: billing-product-prices-billing-id description: REST surface for billing-product-prices-billing_id. operations: - method: DELETE name: deleteproductprice description: Delete product price call: schematic-billing.deleteproductprice with: billing_id: rest.billing_id outputParameters: - type: object mapping: $. - path: /v1/billing/product/upsert name: billing-product-upsert description: REST surface for billing-product-upsert. operations: - method: POST name: upsertbillingproduct description: Upsert billing product call: schematic-billing.upsertbillingproduct with: body: rest.body outputParameters: - type: object mapping: $. - path: /v1/billing/product/{billing-id} name: billing-product-billing-id description: REST surface for billing-product-billing_id. operations: - method: DELETE name: deletebillingproduct description: Delete billing product call: schematic-billing.deletebillingproduct with: billing_id: rest.billing_id outputParameters: - type: object mapping: $. - path: /v1/billing/products name: billing-products description: REST surface for billing-products. operations: - method: GET name: listbillingproducts description: List billing products call: schematic-billing.listbillingproducts with: ids: rest.ids is_active: rest.is_active name: rest.name price_usage_type: rest.price_usage_type provider_type: rest.provider_type q: rest.q recurring_charges_only: rest.recurring_charges_only with_one_time_charges: rest.with_one_time_charges with_prices_only: rest.with_prices_only with_zero_price: rest.with_zero_price without_linked_to_plan: rest.without_linked_to_plan limit: rest.limit offset: rest.offset outputParameters: - type: object mapping: $. - path: /v1/billing/products/count name: billing-products-count description: REST surface for billing-products-count. operations: - method: GET name: countbillingproducts description: Count billing products call: schematic-billing.countbillingproducts with: ids: rest.ids is_active: rest.is_active name: rest.name price_usage_type: rest.price_usage_type provider_type: rest.provider_type q: rest.q recurring_charges_only: rest.recurring_charges_only with_one_time_charges: rest.with_one_time_charges with_prices_only: rest.with_prices_only with_zero_price: rest.with_zero_price without_linked_to_plan: rest.without_linked_to_plan limit: rest.limit offset: rest.offset outputParameters: - type: object mapping: $. - path: /v1/billing/subscription/upsert name: billing-subscription-upsert description: REST surface for billing-subscription-upsert. operations: - method: POST name: upsertbillingsubscription description: Upsert billing subscription call: schematic-billing.upsertbillingsubscription with: body: rest.body outputParameters: - type: object mapping: $. - type: mcp namespace: schematic-billing-mcp port: 9090 transport: http description: MCP adapter for Schematic API — billing. One tool per consumed operation, routed inline through this capability's consumes block. tools: - name: list-coupons description: List coupons hints: readOnly: true destructive: false idempotent: true call: schematic-billing.listcoupons with: is_active: tools.is_active q: tools.q limit: tools.limit offset: tools.offset outputParameters: - type: object mapping: $. - name: upsert-billing-coupon description: Upsert billing coupon hints: readOnly: false destructive: false idempotent: false call: schematic-billing.upsertbillingcoupon with: body: tools.body outputParameters: - type: object mapping: $. - name: upsert-billing-customer description: Upsert billing customer hints: readOnly: false destructive: false idempotent: false call: schematic-billing.upsertbillingcustomer with: body: tools.body outputParameters: - type: object mapping: $. - name: list-customers-subscriptions description: List customers with subscriptions hints: readOnly: true destructive: false idempotent: true call: schematic-billing.listcustomerswithsubscriptions with: company_ids: tools.company_ids name: tools.name provider_type: tools.provider_type q: tools.q limit: tools.limit offset: tools.offset outputParameters: - type: object mapping: $. - name: count-customers description: Count customers hints: readOnly: true destructive: false idempotent: true call: schematic-billing.countcustomers with: company_ids: tools.company_ids name: tools.name provider_type: tools.provider_type q: tools.q limit: tools.limit offset: tools.offset outputParameters: - type: object mapping: $. - name: list-invoices description: List invoices hints: readOnly: true destructive: false idempotent: true call: schematic-billing.listinvoices with: company_id: tools.company_id customer_external_id: tools.customer_external_id subscription_external_id: tools.subscription_external_id limit: tools.limit offset: tools.offset outputParameters: - type: object mapping: $. - name: upsert-invoice description: Upsert invoice hints: readOnly: false destructive: false idempotent: false call: schematic-billing.upsertinvoice with: body: tools.body outputParameters: - type: object mapping: $. - name: list-meters description: List meters hints: readOnly: true destructive: false idempotent: true call: schematic-billing.listmeters with: display_name: tools.display_name limit: tools.limit offset: tools.offset outputParameters: - type: object mapping: $. - name: upsert-billing-meter description: Upsert billing meter hints: readOnly: false destructive: false idempotent: false call: schematic-billing.upsertbillingmeter with: body: tools.body outputParameters: - type: object mapping: $. - name: list-payment-methods description: List payment methods hints: readOnly: true destructive: false idempotent: true call: schematic-billing.listpaymentmethods with: company_id: tools.company_id customer_external_id: tools.customer_external_id limit: tools.limit offset: tools.offset outputParameters: - type: object mapping: $. - name: upsert-payment-method description: Upsert payment method hints: readOnly: false destructive: false idempotent: false call: schematic-billing.upsertpaymentmethod with: body: tools.body outputParameters: - type: object mapping: $. - name: list-billing-prices description: List billing prices hints: readOnly: true destructive: false idempotent: true call: schematic-billing.listbillingprices with: currency: tools.currency for_initial_plan: tools.for_initial_plan for_trial_expiry_plan: tools.for_trial_expiry_plan ids: tools.ids interval: tools.interval is_active: tools.is_active price: tools.price product_id: tools.product_id product_ids: tools.product_ids provider_type: tools.provider_type q: tools.q tiers_mode: tools.tiers_mode usage_type: tools.usage_type with_meter: tools.with_meter limit: tools.limit offset: tools.offset outputParameters: - type: object mapping: $. - name: upsert-billing-price description: Upsert billing price hints: readOnly: false destructive: false idempotent: false call: schematic-billing.upsertbillingprice with: body: tools.body outputParameters: - type: object mapping: $. - name: list-billing-product-prices description: List billing product prices hints: readOnly: true destructive: false idempotent: true call: schematic-billing.listbillingproductprices with: currency: tools.currency for_initial_plan: tools.for_initial_plan for_trial_expiry_plan: tools.for_trial_expiry_plan ids: tools.ids interval: tools.interval is_active: tools.is_active price: tools.price product_id: tools.product_id product_ids: tools.product_ids provider_type: tools.provider_type q: tools.q tiers_mode: tools.tiers_mode usage_type: tools.usage_type with_meter: tools.with_meter limit: tools.limit offset: tools.offset outputParameters: - type: object mapping: $. - name: delete-product-price description: Delete product price hints: readOnly: false destructive: true idempotent: true call: schematic-billing.deleteproductprice with: billing_id: tools.billing_id outputParameters: - type: object mapping: $. - name: upsert-billing-product description: Upsert billing product hints: readOnly: false destructive: false idempotent: false call: schematic-billing.upsertbillingproduct with: body: tools.body outputParameters: - type: object mapping: $. - name: delete-billing-product description: Delete billing product hints: readOnly: false destructive: true idempotent: true call: schematic-billing.deletebillingproduct with: billing_id: tools.billing_id outputParameters: - type: object mapping: $. - name: list-billing-products description: List billing products hints: readOnly: true destructive: false idempotent: true call: schematic-billing.listbillingproducts with: ids: tools.ids is_active: tools.is_active name: tools.name price_usage_type: tools.price_usage_type provider_type: tools.provider_type q: tools.q recurring_charges_only: tools.recurring_charges_only with_one_time_charges: tools.with_one_time_charges with_prices_only: tools.with_prices_only with_zero_price: tools.with_zero_price without_linked_to_plan: tools.without_linked_to_plan limit: tools.limit offset: tools.offset outputParameters: - type: object mapping: $. - name: count-billing-products description: Count billing products hints: readOnly: true destructive: false idempotent: true call: schematic-billing.countbillingproducts with: ids: tools.ids is_active: tools.is_active name: tools.name price_usage_type: tools.price_usage_type provider_type: tools.provider_type q: tools.q recurring_charges_only: tools.recurring_charges_only with_one_time_charges: tools.with_one_time_charges with_prices_only: tools.with_prices_only with_zero_price: tools.with_zero_price without_linked_to_plan: tools.without_linked_to_plan limit: tools.limit offset: tools.offset outputParameters: - type: object mapping: $. - name: upsert-billing-subscription description: Upsert billing subscription hints: readOnly: false destructive: false idempotent: false call: schematic-billing.upsertbillingsubscription with: body: tools.body outputParameters: - type: object mapping: $.