---
title: "Upsert billing subscription"
method: POST
path: "/billing/subscription/upsert"
tags: ["billing"]
---

# Upsert billing subscription

`POST /billing/subscription/upsert`

## Request body

- CreateBillingSubscriptionRequestBody
  - `application_id` string, nullable
  - `cancel_at` integer, nullable
  - `cancel_at_period_end` boolean, required
  - `company_id` string, nullable
  - `currency` string, required
  - `customer_external_id` string, required
  - `default_payment_method_external_id` string, nullable
  - `default_payment_method_id` string, nullable
  - `discounts` BillingSubscriptionDiscount[], required
    - `coupon_external_id` string, required
    - `customer_facing_code` string, nullable
    - `ended_at` string, date-time, nullable
    - `external_id` string, required
    - `is_active` boolean, required
    - `promo_code_external_id` string, nullable
    - `started_at` string, date-time, required
  - `expired_at` string, date-time, required
  - `interval` string, nullable
  - `metadata` object, nullable
  - `period_end` integer, nullable
  - `period_start` integer, nullable
  - `product_external_ids` BillingProductPricing[], required
    - `billing_threshold` integer, nullable
    - `currency` string, required
    - `interval` string, required
    - `meter_id` string, nullable
    - `package_size` integer, nullable
    - `price` integer, required
    - `price_decimal` string, nullable
    - `price_external_id` string, required
    - `product_external_id` string, required
    - `quantity` integer, required
    - `subscription_item_external_id` string, nullable
    - `usage_type` 'licensed' | 'metered', required
  - `provider_type` 'metronome' | 'orb' | 'schematic' | 'stripe'
  - `status` string, nullable
  - `subscription_external_id` string, required
  - `total_price` integer, required
  - `trial_end` integer, nullable
  - `trial_end_setting` 'cancel' | 'subscribe'

## Response `201`

Created

- object
  - `data` BillingSubscriptionResponseData, required
    - `application_id` string, nullable
    - `cancel_at` integer, nullable
    - `cancel_at_period_end` boolean, required
    - `company_id` string, nullable
    - `created_at` string, date-time, required
    - `currency` string, required
    - `customer_external_id` string, required
    - `default_payment_method_id` string, nullable
    - `expired_at` string, date-time, nullable
    - `id` string, required
    - `interval` string, required
    - `metadata` object
    - `period_end` integer, required
    - `period_start` integer, required
    - `provider_type` 'metronome' | 'orb' | 'schematic' | 'stripe', required
    - `status` string, required
    - `subscription_external_id` string, required
    - `total_price` integer, required
    - `trial_end` integer, nullable
    - `trial_end_setting` 'cancel' | 'subscribe'
  - `params` object, required — Input parameters

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `500` — Server error

---

[API](https://skmtc.net/schematichq/apis/schematic-api.md) · [All operations](https://skmtc.net/schematichq/apis/schematic-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/schematichq/schematic-api/revisions/419cb5147b52/schema)
