diff --git a/.fern/metadata.json b/.fern/metadata.json
index 532f6c1..ec92118 100644
--- a/.fern/metadata.json
+++ b/.fern/metadata.json
@@ -23,6 +23,6 @@
}
]
},
- "originGitCommit": "efe71642022d9d3303fd78c648e5b2539192230e",
- "sdkVersion": "1.2.2"
+ "originGitCommit": "a5724e8dfeba2338da634f270044ac597694f772",
+ "sdkVersion": "1.2.3"
}
\ No newline at end of file
diff --git a/poetry.lock b/poetry.lock
index 921b844..bda43d0 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -240,14 +240,14 @@ files = [
[[package]]
name = "certifi"
-version = "2026.4.22"
+version = "2026.5.20"
description = "Python package for providing Mozilla's CA Bundle."
optional = false
python-versions = ">=3.7"
groups = ["main"]
files = [
- {file = "certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a"},
- {file = "certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580"},
+ {file = "certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897"},
+ {file = "certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d"},
]
[[package]]
@@ -1072,15 +1072,15 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0"
[[package]]
name = "pyjwt"
-version = "2.12.1"
+version = "2.13.0"
description = "JSON Web Token implementation in Python"
optional = false
python-versions = ">=3.9"
groups = ["dev"]
markers = "python_version >= \"3.10\""
files = [
- {file = "pyjwt-2.12.1-py3-none-any.whl", hash = "sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c"},
- {file = "pyjwt-2.12.1.tar.gz", hash = "sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b"},
+ {file = "pyjwt-2.13.0-py3-none-any.whl", hash = "sha256:66adcc2aff09b3f1bbd95fc1e1577df8ac8723c978552fd43304c8a290ac5728"},
+ {file = "pyjwt-2.13.0.tar.gz", hash = "sha256:41571c89ca91598c79e8ef18a2d07367d4810fbbd6f637794879baf1b7703423"},
]
[package.dependencies]
@@ -1088,9 +1088,6 @@ typing_extensions = {version = ">=4.0", markers = "python_version < \"3.11\""}
[package.extras]
crypto = ["cryptography (>=3.4.0)"]
-dev = ["coverage[toml] (==7.10.7)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=8.4.2,<9.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"]
-docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"]
-tests = ["coverage[toml] (==7.10.7)", "pytest (>=8.4.2,<9.0.0)"]
[[package]]
name = "pytest"
diff --git a/reference.md b/reference.md
index 631a8ae..13ed0d6 100644
--- a/reference.md
+++ b/reference.md
@@ -143,6 +143,94 @@ client.accounts.get_account_member(
+
+
+
+
+client.accounts.count_account_members(...) -> CountAccountMembersResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.accounts.count_account_members(
+ ids=[
+ "ids"
+ ],
+ q="q",
+ limit=1000000,
+ offset=1000000,
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**ids:** `typing.Optional[typing.Union[str, typing.Sequence[str]]]`
+
+
+
+
+
+-
+
+**q:** `typing.Optional[str]` — Search filter
+
+
+
+
+
+-
+
+**limit:** `typing.Optional[int]` — Page limit (default 100)
+
+
+
+
+
+-
+
+**offset:** `typing.Optional[int]` — Page offset (default 0)
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
@@ -1675,7 +1763,7 @@ client.billing.list_customers_with_subscriptions(
"company_ids"
],
name="name",
- provider_type="orb",
+ provider_type="metronome",
q="q",
limit=1000000,
offset=1000000,
@@ -1781,7 +1869,7 @@ client.billing.count_customers(
"company_ids"
],
name="name",
- provider_type="orb",
+ provider_type="metronome",
q="q",
limit=1000000,
offset=1000000,
@@ -2519,6 +2607,65 @@ client.billing.upsert_payment_method(
+
+
+
+
+client.billing.delete_payment_method_by_external_id(...) -> DeletePaymentMethodByExternalIdResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.billing.delete_payment_method_by_external_id(
+ billing_id="billing_id",
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**billing_id:** `str` — billing_id
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
@@ -2558,7 +2705,7 @@ client.billing.list_billing_prices(
product_ids=[
"product_ids"
],
- provider_type="orb",
+ provider_type="metronome",
q="q",
tiers_mode="graduated",
usage_type="licensed",
@@ -3015,7 +3162,7 @@ client.billing.list_billing_product_prices(
product_ids=[
"product_ids"
],
- provider_type="orb",
+ provider_type="metronome",
q="q",
tiers_mode="graduated",
usage_type="licensed",
@@ -3357,7 +3504,7 @@ client.billing.list_billing_products(
is_active=True,
name="name",
price_usage_type="licensed",
- provider_type="orb",
+ provider_type="metronome",
q="q",
recurring_charges_only=True,
with_one_time_charges=True,
@@ -3526,7 +3673,7 @@ client.billing.count_billing_products(
is_active=True,
name="name",
price_usage_type="licensed",
- provider_type="orb",
+ provider_type="metronome",
q="q",
recurring_charges_only=True,
with_one_time_charges=True,
@@ -5767,7 +5914,7 @@ client.credits.list_grants_for_credit(
-client.credits.get_enriched_credit_ledger(...) -> GetEnrichedCreditLedgerResponse
+client.credits.acquire_credit_lease(...) -> AcquireCreditLeaseResponse
-
@@ -5788,15 +5935,10 @@ client = Schematic(
environment=SchematicEnvironment.DEFAULT,
)
-client.credits.get_enriched_credit_ledger(
+client.credits.acquire_credit_lease(
company_id="company_id",
- billing_credit_id="billing_credit_id",
- feature_id="feature_id",
- period="daily",
- start_time="start_time",
- end_time="end_time",
- limit=1000000,
- offset=1000000,
+ credit_type_id="credit_type_id",
+ requested_amount=1.1,
)
```
@@ -5821,39 +5963,7 @@ client.credits.get_enriched_credit_ledger(
-
-**period:** `CreditLedgerPeriod`
-
-
-
-
-
--
-
-**billing_credit_id:** `typing.Optional[str]`
-
-
-
-
-
--
-
-**feature_id:** `typing.Optional[str]`
-
-
-
-
-
--
-
-**start_time:** `typing.Optional[str]`
-
-
-
-
-
--
-
-**end_time:** `typing.Optional[str]`
+**credit_type_id:** `str`
@@ -5861,7 +5971,7 @@ client.credits.get_enriched_credit_ledger(
-
-**limit:** `typing.Optional[int]` — Page limit (default 100)
+**requested_amount:** `float`
@@ -5869,7 +5979,7 @@ client.credits.get_enriched_credit_ledger(
-
-**offset:** `typing.Optional[int]` — Page offset (default 0)
+**expires_at:** `typing.Optional[datetime.datetime]`
@@ -5889,7 +5999,7 @@ client.credits.get_enriched_credit_ledger(
-client.credits.count_credit_ledger(...) -> CountCreditLedgerResponse
+client.credits.extend_credit_lease(...) -> ExtendCreditLeaseResponse
-
@@ -5910,15 +6020,9 @@ client = Schematic(
environment=SchematicEnvironment.DEFAULT,
)
-client.credits.count_credit_ledger(
- company_id="company_id",
- billing_credit_id="billing_credit_id",
- feature_id="feature_id",
- period="daily",
- start_time="start_time",
- end_time="end_time",
- limit=1000000,
- offset=1000000,
+client.credits.extend_credit_lease(
+ lease_id="lease_id",
+ additional_amount=1.1,
)
```
@@ -5935,7 +6039,7 @@ client.credits.count_credit_ledger(
-
-**company_id:** `str`
+**lease_id:** `str` — lease_id
@@ -5943,7 +6047,7 @@ client.credits.count_credit_ledger(
-
-**period:** `CreditLedgerPeriod`
+**additional_amount:** `float`
@@ -5951,7 +6055,7 @@ client.credits.count_credit_ledger(
-
-**billing_credit_id:** `typing.Optional[str]`
+**expires_at:** `typing.Optional[datetime.datetime]`
@@ -5959,31 +6063,61 @@ client.credits.count_credit_ledger(
-
-**feature_id:** `typing.Optional[str]`
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
-
--
-**start_time:** `typing.Optional[str]`
-
+
+client.credits.release_credit_lease(...) -> ReleaseCreditLeaseResponse
-
-**end_time:** `typing.Optional[str]`
-
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.credits.release_credit_lease(
+ lease_id="lease_id",
+ request={
+ "key": "value"
+ },
+)
+
+```
+
+
+#### ⚙️ Parameters
+
-
-**limit:** `typing.Optional[int]` — Page limit (default 100)
+
+-
+
+**lease_id:** `str` — lease_id
@@ -5991,7 +6125,7 @@ client.credits.count_credit_ledger(
-
-**offset:** `typing.Optional[int]` — Page offset (default 0)
+**request:** `ReleaseCreditLeaseRequestBody`
@@ -6011,7 +6145,7 @@ client.credits.count_credit_ledger(
-client.credits.list_billing_plan_credit_grants(...) -> ListBillingPlanCreditGrantsResponse
+client.credits.get_enriched_credit_ledger(...) -> GetEnrichedCreditLedgerResponse
-
@@ -6032,16 +6166,260 @@ client = Schematic(
environment=SchematicEnvironment.DEFAULT,
)
-client.credits.list_billing_plan_credit_grants(
- credit_id="credit_id",
- ids=[
- "ids"
- ],
- plan_id="plan_id",
- plan_ids=[
- "plan_ids"
- ],
- plan_version_id="plan_version_id",
+client.credits.get_enriched_credit_ledger(
+ company_id="company_id",
+ billing_credit_id="billing_credit_id",
+ feature_id="feature_id",
+ period="daily",
+ start_time="start_time",
+ end_time="end_time",
+ limit=1000000,
+ offset=1000000,
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**company_id:** `str`
+
+
+
+
+
+-
+
+**period:** `CreditLedgerPeriod`
+
+
+
+
+
+-
+
+**billing_credit_id:** `typing.Optional[str]`
+
+
+
+
+
+-
+
+**feature_id:** `typing.Optional[str]`
+
+
+
+
+
+-
+
+**start_time:** `typing.Optional[str]`
+
+
+
+
+
+-
+
+**end_time:** `typing.Optional[str]`
+
+
+
+
+
+-
+
+**limit:** `typing.Optional[int]` — Page limit (default 100)
+
+
+
+
+
+-
+
+**offset:** `typing.Optional[int]` — Page offset (default 0)
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
+
+
+
+
+client.credits.count_credit_ledger(...) -> CountCreditLedgerResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.credits.count_credit_ledger(
+ company_id="company_id",
+ billing_credit_id="billing_credit_id",
+ feature_id="feature_id",
+ period="daily",
+ start_time="start_time",
+ end_time="end_time",
+ limit=1000000,
+ offset=1000000,
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**company_id:** `str`
+
+
+
+
+
+-
+
+**period:** `CreditLedgerPeriod`
+
+
+
+
+
+-
+
+**billing_credit_id:** `typing.Optional[str]`
+
+
+
+
+
+-
+
+**feature_id:** `typing.Optional[str]`
+
+
+
+
+
+-
+
+**start_time:** `typing.Optional[str]`
+
+
+
+
+
+-
+
+**end_time:** `typing.Optional[str]`
+
+
+
+
+
+-
+
+**limit:** `typing.Optional[int]` — Page limit (default 100)
+
+
+
+
+
+-
+
+**offset:** `typing.Optional[int]` — Page offset (default 0)
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
+
+
+
+
+client.credits.list_billing_plan_credit_grants(...) -> ListBillingPlanCreditGrantsResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.credits.list_billing_plan_credit_grants(
+ credit_id="credit_id",
+ ids=[
+ "ids"
+ ],
+ plan_id="plan_id",
+ plan_ids=[
+ "plan_ids"
+ ],
+ plan_version_id="plan_version_id",
plan_version_ids=[
"plan_version_ids"
],
@@ -6784,7 +7162,7 @@ client.credits.count_credit_event_ledger(
-
```python
-from schematic import Schematic, UpdateAddOnRequestBody, UpdateAutoTopupOverrideRequestBody, UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody
+from schematic import Schematic, UpdateAddOnRequestBody, UpdateAutoTopupOverrideRequestBody, UpdateCreditBundleRequestBody, CheckoutFieldValue, UpdatePayInAdvanceRequestBody
from schematic.environment import SchematicEnvironment
client = Schematic(
@@ -6811,6 +7189,12 @@ client.checkout.internal(
quantity=1000000,
)
],
+ custom_field_values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
new_plan_id="new_plan_id",
new_price_id="new_price_id",
pay_in_advance=[
@@ -6936,7 +7320,7 @@ client.checkout.get_checkout_data(
-
```python
-from schematic import Schematic, UpdateAddOnRequestBody, UpdateAutoTopupOverrideRequestBody, UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody
+from schematic import Schematic, UpdateAddOnRequestBody, UpdateAutoTopupOverrideRequestBody, UpdateCreditBundleRequestBody, CheckoutFieldValue, UpdatePayInAdvanceRequestBody
from schematic.environment import SchematicEnvironment
client = Schematic(
@@ -6963,6 +7347,12 @@ client.checkout.preview_checkout_internal(
quantity=1000000,
)
],
+ custom_field_values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
new_plan_id="new_plan_id",
new_price_id="new_price_id",
pay_in_advance=[
@@ -7021,7 +7411,7 @@ client.checkout.preview_checkout_internal(
-
```python
-from schematic import Schematic, PlanSelection, UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody
+from schematic import Schematic, PlanSelection, UpdateCreditBundleRequestBody, CheckoutFieldValue, UpdatePayInAdvanceRequestBody
from schematic.environment import SchematicEnvironment
client = Schematic(
@@ -7042,6 +7432,12 @@ client.checkout.manage_plan(
quantity=1000000,
)
],
+ custom_field_values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
pay_in_advance_entitlements=[
UpdatePayInAdvanceRequestBody(
price_id="price_id",
@@ -7097,7 +7493,7 @@ client.checkout.manage_plan(
-
```python
-from schematic import Schematic, PlanSelection, UpdateCreditBundleRequestBody, UpdatePayInAdvanceRequestBody
+from schematic import Schematic, PlanSelection, UpdateCreditBundleRequestBody, CheckoutFieldValue, UpdatePayInAdvanceRequestBody
from schematic.environment import SchematicEnvironment
client = Schematic(
@@ -7118,6 +7514,12 @@ client.checkout.preview_manage_plan(
quantity=1000000,
)
],
+ custom_field_values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
pay_in_advance_entitlements=[
UpdatePayInAdvanceRequestBody(
price_id="price_id",
@@ -7338,6 +7740,9 @@ client.companies.list_companies(
"plan_ids"
],
plan_version_id="plan_version_id",
+ plan_version_ids=[
+ "plan_version_ids"
+ ],
q="q",
sort_order_column="sort_order_column",
sort_order_direction="asc",
@@ -7426,6 +7831,14 @@ client.companies.list_companies(
-
+**plan_version_ids:** `typing.Optional[typing.Union[str, typing.Sequence[str]]]` — Filter companies by one or more plan version IDs (each ID starts with plvr_). Takes precedence over plan_version_id when set.
+
+
+
+
+
+-
+
**q:** `typing.Optional[str]` — Search for companies by name, keys or string traits
@@ -7766,6 +8179,9 @@ client.companies.count_companies(
"plan_ids"
],
plan_version_id="plan_version_id",
+ plan_version_ids=[
+ "plan_version_ids"
+ ],
q="q",
sort_order_column="sort_order_column",
sort_order_direction="asc",
@@ -7854,6 +8270,14 @@ client.companies.count_companies(
-
+**plan_version_ids:** `typing.Optional[typing.Union[str, typing.Sequence[str]]]` — Filter companies by one or more plan version IDs (each ID starts with plvr_). Takes precedence over plan_version_id when set.
+
+
+
+
+
+-
+
**q:** `typing.Optional[str]` — Search for companies by name, keys or string traits
@@ -11312,7 +11736,7 @@ client.entitlements.list_feature_usage(
"feature_ids"
],
include_usage_aggregation=True,
- managed_by="orb",
+ managed_by="metronome",
q="q",
without_negative_entitlements=True,
limit=1000000,
@@ -11540,7 +11964,7 @@ client.entitlements.count_feature_usage(
"feature_ids"
],
include_usage_aggregation=True,
- managed_by="orb",
+ managed_by="metronome",
q="q",
without_negative_entitlements=True,
limit=1000000,
@@ -12207,6 +12631,14 @@ client.entitlements.create_plan_entitlement(
-
+**usage_quantity:** `typing.Optional[int]` — The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
+
+
+
+
+-
+
**value_bool:** `typing.Optional[bool]`
@@ -12542,7 +12974,15 @@ client.entitlements.update_plan_entitlement(
-
-**soft_limit:** `typing.Optional[int]`
+**soft_limit:** `typing.Optional[int]`
+
+
+
+
+
+-
+
+**tier_mode:** `typing.Optional[BillingTiersMode]`
@@ -12550,7 +12990,7 @@ client.entitlements.update_plan_entitlement(
-
-**tier_mode:** `typing.Optional[BillingTiersMode]`
+**usage_quantity:** `typing.Optional[int]` — The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
@@ -12715,7 +13155,7 @@ client = Schematic(
)
client.entitlements.upsert_plan_entitlement_for_billing_product(
- billing_provider="orb",
+ billing_provider="metronome",
external_resource_id="external_resource_id",
feature_id="feature_id",
plan_id="plan_id",
@@ -12944,6 +13384,14 @@ client.entitlements.upsert_plan_entitlement_for_billing_product(
-
+**usage_quantity:** `typing.Optional[int]` — The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
+
+
+
+
+-
+
**value_bool:** `typing.Optional[bool]`
@@ -13487,6 +13935,76 @@ client.plans.list_custom_plan_billings(
+
+
+
+
+client.plans.mark_custom_plan_billing_paid(...) -> MarkCustomPlanBillingPaidResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.plans.mark_custom_plan_billing_paid(
+ custom_plan_billing_id="custom_plan_billing_id",
+ request={
+ "key": "value"
+ },
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**custom_plan_billing_id:** `str` — custom_plan_billing_id
+
+
+
+
+
+-
+
+**request:** `MarkCustomPlanBillingPaidRequestBody`
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
@@ -13718,6 +14236,7 @@ client.plans.list_plans(
plan_type="plan",
q="q",
scoped_to_company_id="scoped_to_company_id",
+ with_entitlements=True,
without_entitlement_for="without_entitlement_for",
without_paid_product_id=True,
limit=1000000,
@@ -13834,6 +14353,14 @@ client.plans.list_plans(
-
+**with_entitlements:** `typing.Optional[bool]` — Include each plan's entitlements in the response
+
+
+
+
+
+-
+
**without_entitlement_for:** `typing.Optional[str]` — Filter out plans that already have a plan entitlement for the specified feature ID
@@ -14225,7 +14752,7 @@ client = Schematic(
)
client.plans.upsert_plan_for_billing_product(
- billing_provider="orb",
+ billing_provider="metronome",
description="description",
external_resource_id="external_resource_id",
name="name",
@@ -14522,6 +15049,7 @@ client.plans.count_plans(
plan_type="plan",
q="q",
scoped_to_company_id="scoped_to_company_id",
+ with_entitlements=True,
without_entitlement_for="without_entitlement_for",
without_paid_product_id=True,
limit=1000000,
@@ -14638,6 +15166,14 @@ client.plans.count_plans(
-
+**with_entitlements:** `typing.Optional[bool]` — Include each plan's entitlements in the response
+
+
+
+
+
+-
+
**without_entitlement_for:** `typing.Optional[str]` — Filter out plans that already have a plan entitlement for the specified feature ID
@@ -16338,7 +16874,7 @@ client.features.list_features(
ids=[
"ids"
],
- managed_by="orb",
+ managed_by="metronome",
plan_version_id="plan_version_id",
q="q",
without_company_override_for="without_company_override_for",
@@ -16881,7 +17417,7 @@ client = Schematic(
)
client.features.upsert_feature_for_billing_product(
- billing_provider="orb",
+ billing_provider="metronome",
description="description",
external_resource_id="external_resource_id",
feature_type="boolean",
@@ -17047,7 +17583,7 @@ client.features.count_features(
ids=[
"ids"
],
- managed_by="orb",
+ managed_by="metronome",
plan_version_id="plan_version_id",
q="q",
without_company_override_for="without_company_override_for",
@@ -18538,6 +19074,65 @@ client.integrationsapi.get_integration_webhook_url(
+
+
+
+
+client.integrationsapi.install_integration(...) -> InstallIntegrationResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.integrationsapi.install_integration(
+ type="clerk",
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**request:** `InstallIntegrationRequestBody`
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
@@ -18589,15 +19184,123 @@ client.integrationsapi.start_data_import(
-
-**company_matching_criteria:** `typing.Optional[CompanyMatchingCriteria]`
-
-
-
-
+**company_matching_criteria:** `typing.Optional[CompanyMatchingCriteria]`
+
+
+
+
+
+-
+
+**company_matching_field:** `typing.Optional[str]`
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
+
+
+
+
+client.integrationsapi.load_sample_data_set() -> LoadSampleDataSetResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.integrationsapi.load_sample_data_set()
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
+
+
+
+
+client.integrationsapi.assume_stripe_installed(...) -> AssumeStripeInstalledResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.integrationsapi.assume_stripe_installed(
+ type="clerk",
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
-
-**company_matching_field:** `typing.Optional[str]`
+**request:** `InstallIntegrationRequestBody`
@@ -18617,7 +19320,7 @@ client.integrationsapi.start_data_import(
-client.integrationsapi.load_sample_data_set_v_2() -> LoadSampleDataSetV2Response
+client.integrationsapi.install_stripe(...) -> InstallStripeResponse
-
@@ -18638,7 +19341,9 @@ client = Schematic(
environment=SchematicEnvironment.DEFAULT,
)
-client.integrationsapi.load_sample_data_set_v_2()
+client.integrationsapi.install_stripe(
+ type="clerk",
+)
```
@@ -18654,6 +19359,14 @@ client.integrationsapi.load_sample_data_set_v_2()
-
+**request:** `InstallIntegrationRequestBody`
+
+
+
+
+
+-
+
**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
@@ -19007,6 +19720,14 @@ client.plangroups.create_plan_group(
-
+**custom_checkout_fields:** `typing.Optional[typing.List[CheckoutFieldInput]]`
+
+
+
+
+
+-
+
**custom_plan_config:** `typing.Optional[CustomPlanConfig]`
@@ -19354,6 +20075,14 @@ client.plangroups.update_plan_group(
-
+**custom_checkout_fields:** `typing.Optional[typing.List[CheckoutFieldInput]]`
+
+
+
+
+
+-
+
**custom_plan_config:** `typing.Optional[CustomPlanConfig]`
@@ -19562,6 +20291,65 @@ client.planmigrations.list_company_migrations(
+
+
+
+
+client.planmigrations.retry_company_migration(...) -> RetryCompanyMigrationResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.planmigrations.retry_company_migration(
+ plan_version_company_migration_id="plan_version_company_migration_id",
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**plan_version_company_migration_id:** `str` — plan_version_company_migration_id
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
@@ -19743,6 +20531,125 @@ client.planmigrations.list_migrations(
+
+
+
+
+client.planmigrations.create_migration(...) -> CreateMigrationResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.planmigrations.create_migration(
+ company_ids=[
+ "company_ids"
+ ],
+ excluded_company_ids=[
+ "excluded_company_ids"
+ ],
+ plan_id="plan_id",
+ plan_version_id_to="plan_version_id_to",
+ plan_version_ids_from=[
+ "plan_version_ids_from"
+ ],
+ strategy="immediate",
+ target_plan_type="plan",
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**company_ids:** `typing.List[str]`
+
+
+
+
+
+-
+
+**excluded_company_ids:** `typing.List[str]`
+
+
+
+
+
+-
+
+**plan_id:** `str`
+
+
+
+
+
+-
+
+**plan_version_id_to:** `str`
+
+
+
+
+
+-
+
+**plan_version_ids_from:** `typing.List[str]`
+
+
+
+
+
+-
+
+**strategy:** `PlanVersionMigrationStrategy`
+
+
+
+
+
+-
+
+**target_plan_type:** `PlanType`
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
@@ -19802,6 +20709,76 @@ client.planmigrations.get_migration(
+
+
+
+
+client.planmigrations.retry_migration(...) -> RetryMigrationResponse
+
+-
+
+#### 🔌 Usage
+
+
+-
+
+
+-
+
+```python
+from schematic import Schematic
+from schematic.environment import SchematicEnvironment
+
+client = Schematic(
+ api_key="",
+ environment=SchematicEnvironment.DEFAULT,
+)
+
+client.planmigrations.retry_migration(
+ plan_version_migration_id="plan_version_migration_id",
+ error_codes=[
+ "ambiguous_subscription_item"
+ ],
+)
+
+```
+
+
+
+
+
+#### ⚙️ Parameters
+
+
+-
+
+
+-
+
+**plan_version_migration_id:** `str` — plan_version_migration_id
+
+
+
+
+
+-
+
+**error_codes:** `typing.List[MigrationErrorCode]`
+
+
+
+
+
+-
+
+**request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
+
+
+
+
+
+
+
diff --git a/src/schematic/__init__.py b/src/schematic/__init__.py
index 5866425..26025d0 100644
--- a/src/schematic/__init__.py
+++ b/src/schematic/__init__.py
@@ -31,6 +31,7 @@
BillingCreditGrantReason,
BillingCreditGrantResponseData,
BillingCreditGrantZeroedOutReason,
+ BillingCreditLedgerAuthority,
BillingCreditLedgerResponseData,
BillingCreditResponseData,
BillingCreditRolloverPolicy,
@@ -57,6 +58,7 @@
BillingProductPricing,
BillingProductResponseData,
BillingProviderType,
+ BillingStrategy,
BillingSubscriptionDiscount,
BillingSubscriptionDiscountView,
BillingSubscriptionResponseData,
@@ -73,6 +75,10 @@
CheckFlagsBulkResponseData,
CheckFlagsResponseData,
CheckoutDataResponseData,
+ CheckoutFieldInput,
+ CheckoutFieldResponseData,
+ CheckoutFieldValue,
+ CheckoutFieldWithValue,
CheckoutSettingsResponseData,
CheckoutSubscription,
ClerkIntegrationConfig,
@@ -139,6 +145,7 @@
CreditGrantDetail,
CreditGrantExpiryRequestBody,
CreditGrantSortOrder,
+ CreditLeaseResponseData,
CreditLedgerEnrichedEntryResponseData,
CreditLedgerPeriod,
CreditTransferResponseData,
@@ -146,6 +153,7 @@
CreditTriggerConfig,
CreditUsage,
CreditUsageAggregation,
+ CreditUsageReason,
CreditsAutoTopupCompanySummary,
CreditsAutoTopupCreditSummary,
CreditsAutoTopupHardFailure,
@@ -216,11 +224,16 @@
FlagView,
GenericPreviewObject,
InsightsSummaryResponseData,
+ InstallIntegrationRequestBody,
IntegrationCapabilities,
IntegrationConfig,
IntegrationConfig_Clerk,
+ IntegrationConfig_Metronome,
IntegrationConfig_Orb,
IntegrationConfig_Stripe,
+ IntegrationConfig_Workos,
+ IntegrationInstallConfig,
+ IntegrationInstallResponseData,
IntegrationResponseData,
IntegrationState,
IntegrationType,
@@ -237,9 +250,12 @@
ManagePlanPreviewResponseResponseData,
ManagePlanRequest,
ManagePlanResponseResponseData,
+ MarkCustomPlanBillingPaidRequestBody,
MeterRequestBody,
MetricPeriod,
MetricPeriodMonthReset,
+ MetronomeIntegrationConfig,
+ MigrationErrorCode,
MrrResponseData,
OrbIntegrationConfig,
OrderedPlansInGroup,
@@ -268,6 +284,7 @@
PlanGrowthResponseData,
PlanIcon,
PlanIssueResponseData,
+ PlanPriceCadence,
PlanResponseData,
PlanSelection,
PlanSnapshotView,
@@ -292,6 +309,7 @@
QuickstartResp,
RawEventBatchResponseData,
RawEventResponseData,
+ ReleaseCreditLeaseRequestBody,
Rule,
RuleConditionDetailResponseData,
RuleConditionGroupDetailResponseData,
@@ -373,6 +391,7 @@
WebhookStatus,
WebhookUrl,
WhoAmIResponseData,
+ WorkOsIntegrationConfig,
)
from .errors import BadRequestError, ForbiddenError, InternalServerError, NotFoundError, UnauthorizedError
from . import (
@@ -399,6 +418,8 @@
)
from .accesstokens import IssueTemporaryAccessTokenResponse
from .accounts import (
+ CountAccountMembersParams,
+ CountAccountMembersResponse,
CountApiKeysParams,
CountApiKeysResponse,
CountAuditLogsParams,
@@ -430,6 +451,7 @@
CountCustomersParams,
CountCustomersResponse,
DeleteBillingProductResponse,
+ DeletePaymentMethodByExternalIdResponse,
DeleteProductPriceResponse,
ListBillingPricesParams,
ListBillingPricesResponse,
@@ -535,6 +557,7 @@
)
from .componentspublic import GetPublicPlansResponse
from .credits import (
+ AcquireCreditLeaseResponse,
CountBillingCreditsGrantsParams,
CountBillingCreditsGrantsResponse,
CountBillingCreditsParams,
@@ -555,6 +578,7 @@
DeleteBillingPlanCreditGrantParams,
DeleteBillingPlanCreditGrantResponse,
DeleteCreditBundleResponse,
+ ExtendCreditLeaseResponse,
GetCreditBundleResponse,
GetEnrichedCreditLedgerParams,
GetEnrichedCreditLedgerResponse,
@@ -575,6 +599,7 @@
ListCreditEventLedgerResponse,
ListGrantsForCreditParams,
ListGrantsForCreditResponse,
+ ReleaseCreditLeaseResponse,
SoftDeleteBillingCreditResponse,
UpdateBillingCreditResponse,
UpdateBillingPlanCreditGrantResponse,
@@ -666,10 +691,13 @@
GetTopFeaturesByUsageResponse,
)
from .integrationsapi import (
+ AssumeStripeInstalledResponse,
GetIntegrationWebhookUrlResponse,
+ InstallIntegrationResponse,
+ InstallStripeResponse,
ListIntegrationsParams,
ListIntegrationsResponse,
- LoadSampleDataSetV2Response,
+ LoadSampleDataSetResponse,
RunIntegrationResponse,
StartDataImportResponse,
UninstallIntegrationResponse,
@@ -681,11 +709,14 @@
CountCompanyMigrationsResponse,
CountMigrationsParams,
CountMigrationsResponse,
+ CreateMigrationResponse,
GetMigrationResponse,
ListCompanyMigrationsParams,
ListCompanyMigrationsResponse,
ListMigrationsParams,
ListMigrationsResponse,
+ RetryCompanyMigrationResponse,
+ RetryMigrationResponse,
)
from .plans import (
CountBillingProductMatchCompaniesParams,
@@ -707,6 +738,7 @@
ListPlanIssuesResponse,
ListPlansParams,
ListPlansResponse,
+ MarkCustomPlanBillingPaidResponse,
PublishPlanVersionResponse,
RetryCustomPlanBillingResponse,
UpdateCompanyPlansResponse,
@@ -741,6 +773,7 @@
"AccountMemberPermission": ".types",
"AccountMemberResponseData": ".types",
"AccountMemberRole": ".types",
+ "AcquireCreditLeaseResponse": ".credits",
"ActivityEntryResponseData": ".types",
"ActivityResponseResponseData": ".types",
"ActorType": ".types",
@@ -749,6 +782,7 @@
"ApiKeyIntegrationResponseData": ".types",
"ApiKeyResponseData": ".types",
"ApiKeyScope": ".types",
+ "AssumeStripeInstalledResponse": ".integrationsapi",
"AsyncSchematic": ".client",
"AsyncSchematicConfig": ".client",
"AuditLogListResponseData": ".types",
@@ -765,6 +799,7 @@
"BillingCreditGrantReason": ".types",
"BillingCreditGrantResponseData": ".types",
"BillingCreditGrantZeroedOutReason": ".types",
+ "BillingCreditLedgerAuthority": ".types",
"BillingCreditLedgerResponseData": ".types",
"BillingCreditResponseData": ".types",
"BillingCreditRolloverPolicy": ".types",
@@ -791,6 +826,7 @@
"BillingProductPricing": ".types",
"BillingProductResponseData": ".types",
"BillingProviderType": ".types",
+ "BillingStrategy": ".types",
"BillingSubscriptionDiscount": ".types",
"BillingSubscriptionDiscountView": ".types",
"BillingSubscriptionResponseData": ".types",
@@ -811,6 +847,10 @@
"CheckFlagsResponse": ".features",
"CheckFlagsResponseData": ".types",
"CheckoutDataResponseData": ".types",
+ "CheckoutFieldInput": ".types",
+ "CheckoutFieldResponseData": ".types",
+ "CheckoutFieldValue": ".types",
+ "CheckoutFieldWithValue": ".types",
"CheckoutInternalResponse": ".checkout",
"CheckoutSettingsResponseData": ".types",
"CheckoutSubscription": ".types",
@@ -849,6 +889,8 @@
"ConditionResponseData": ".types",
"ConditionType": ".types",
"ConditionView": ".types",
+ "CountAccountMembersParams": ".accounts",
+ "CountAccountMembersResponse": ".accounts",
"CountApiKeysParams": ".accounts",
"CountApiKeysResponse": ".accounts",
"CountAuditLogsParams": ".accounts",
@@ -933,6 +975,7 @@
"CreateFeatureResponse": ".features",
"CreateFlagRequestBody": ".types",
"CreateFlagResponse": ".features",
+ "CreateMigrationResponse": ".planmigrations",
"CreateOrUpdateConditionGroupRequestBody": ".types",
"CreateOrUpdateConditionRequestBody": ".types",
"CreateOrUpdateFlagRequestBody": ".types",
@@ -960,6 +1003,7 @@
"CreditGrantDetail": ".types",
"CreditGrantExpiryRequestBody": ".types",
"CreditGrantSortOrder": ".types",
+ "CreditLeaseResponseData": ".types",
"CreditLedgerEnrichedEntryResponseData": ".types",
"CreditLedgerPeriod": ".types",
"CreditTransferResponseData": ".types",
@@ -967,6 +1011,7 @@
"CreditTriggerConfig": ".types",
"CreditUsage": ".types",
"CreditUsageAggregation": ".types",
+ "CreditUsageReason": ".types",
"CreditsAutoTopupCompanySummary": ".types",
"CreditsAutoTopupCreditSummary": ".types",
"CreditsAutoTopupHardFailure": ".types",
@@ -998,6 +1043,7 @@
"DeleteEnvironmentResponse": ".accounts",
"DeleteFeatureResponse": ".features",
"DeleteFlagResponse": ".features",
+ "DeletePaymentMethodByExternalIdResponse": ".billing",
"DeletePlanEntitlementResponse": ".entitlements",
"DeletePlanResponse": ".plans",
"DeletePlanVersionParams": ".plans",
@@ -1039,6 +1085,7 @@
"EventStatus": ".types",
"EventSummaryResponseData": ".types",
"EventType": ".types",
+ "ExtendCreditLeaseResponse": ".credits",
"FeatureCompanyResponseData": ".types",
"FeatureCompanyUserResponseData": ".types",
"FeatureDetailResponseData": ".types",
@@ -1118,11 +1165,18 @@
"GetWhoAmIResponse": ".accounts",
"GrantBillingCreditsToCompanyResponse": ".credits",
"InsightsSummaryResponseData": ".types",
+ "InstallIntegrationRequestBody": ".types",
+ "InstallIntegrationResponse": ".integrationsapi",
+ "InstallStripeResponse": ".integrationsapi",
"IntegrationCapabilities": ".types",
"IntegrationConfig": ".types",
"IntegrationConfig_Clerk": ".types",
+ "IntegrationConfig_Metronome": ".types",
"IntegrationConfig_Orb": ".types",
"IntegrationConfig_Stripe": ".types",
+ "IntegrationConfig_Workos": ".types",
+ "IntegrationInstallConfig": ".types",
+ "IntegrationInstallResponseData": ".types",
"IntegrationResponseData": ".types",
"IntegrationState": ".types",
"IntegrationType": ".types",
@@ -1228,7 +1282,7 @@
"ListWebhookEventsResponse": ".webhooks",
"ListWebhooksParams": ".webhooks",
"ListWebhooksResponse": ".webhooks",
- "LoadSampleDataSetV2Response": ".integrationsapi",
+ "LoadSampleDataSetResponse": ".integrationsapi",
"LocalCache": ".client",
"LookupCompanyParams": ".companies",
"LookupCompanyResponse": ".companies",
@@ -1238,9 +1292,13 @@
"ManagePlanRequest": ".types",
"ManagePlanResponse": ".checkout",
"ManagePlanResponseResponseData": ".types",
+ "MarkCustomPlanBillingPaidRequestBody": ".types",
+ "MarkCustomPlanBillingPaidResponse": ".plans",
"MeterRequestBody": ".types",
"MetricPeriod": ".types",
"MetricPeriodMonthReset": ".types",
+ "MetronomeIntegrationConfig": ".types",
+ "MigrationErrorCode": ".types",
"MrrResponseData": ".types",
"NotFoundError": ".errors",
"OrbIntegrationConfig": ".types",
@@ -1270,6 +1328,7 @@
"PlanGrowthResponseData": ".types",
"PlanIcon": ".types",
"PlanIssueResponseData": ".types",
+ "PlanPriceCadence": ".types",
"PlanResponseData": ".types",
"PlanSelection": ".types",
"PlanSnapshotView": ".types",
@@ -1300,7 +1359,11 @@
"QuickstartResponse": ".accounts",
"RawEventBatchResponseData": ".types",
"RawEventResponseData": ".types",
+ "ReleaseCreditLeaseRequestBody": ".types",
+ "ReleaseCreditLeaseResponse": ".credits",
+ "RetryCompanyMigrationResponse": ".planmigrations",
"RetryCustomPlanBillingResponse": ".plans",
+ "RetryMigrationResponse": ".planmigrations",
"Rule": ".types",
"RuleConditionDetailResponseData": ".types",
"RuleConditionGroupDetailResponseData": ".types",
@@ -1426,6 +1489,7 @@
"WebhookStatus": ".types",
"WebhookUrl": ".types",
"WhoAmIResponseData": ".types",
+ "WorkOsIntegrationConfig": ".types",
"ZeroOutGrantResponse": ".credits",
"__version__": ".version",
"accesstokens": ".accesstokens",
@@ -1476,6 +1540,7 @@ def __dir__():
"AccountMemberPermission",
"AccountMemberResponseData",
"AccountMemberRole",
+ "AcquireCreditLeaseResponse",
"ActivityEntryResponseData",
"ActivityResponseResponseData",
"ActorType",
@@ -1484,6 +1549,7 @@ def __dir__():
"ApiKeyIntegrationResponseData",
"ApiKeyResponseData",
"ApiKeyScope",
+ "AssumeStripeInstalledResponse",
"AsyncSchematic",
"AsyncSchematicConfig",
"AuditLogListResponseData",
@@ -1500,6 +1566,7 @@ def __dir__():
"BillingCreditGrantReason",
"BillingCreditGrantResponseData",
"BillingCreditGrantZeroedOutReason",
+ "BillingCreditLedgerAuthority",
"BillingCreditLedgerResponseData",
"BillingCreditResponseData",
"BillingCreditRolloverPolicy",
@@ -1526,6 +1593,7 @@ def __dir__():
"BillingProductPricing",
"BillingProductResponseData",
"BillingProviderType",
+ "BillingStrategy",
"BillingSubscriptionDiscount",
"BillingSubscriptionDiscountView",
"BillingSubscriptionResponseData",
@@ -1546,6 +1614,10 @@ def __dir__():
"CheckFlagsResponse",
"CheckFlagsResponseData",
"CheckoutDataResponseData",
+ "CheckoutFieldInput",
+ "CheckoutFieldResponseData",
+ "CheckoutFieldValue",
+ "CheckoutFieldWithValue",
"CheckoutInternalResponse",
"CheckoutSettingsResponseData",
"CheckoutSubscription",
@@ -1584,6 +1656,8 @@ def __dir__():
"ConditionResponseData",
"ConditionType",
"ConditionView",
+ "CountAccountMembersParams",
+ "CountAccountMembersResponse",
"CountApiKeysParams",
"CountApiKeysResponse",
"CountAuditLogsParams",
@@ -1668,6 +1742,7 @@ def __dir__():
"CreateFeatureResponse",
"CreateFlagRequestBody",
"CreateFlagResponse",
+ "CreateMigrationResponse",
"CreateOrUpdateConditionGroupRequestBody",
"CreateOrUpdateConditionRequestBody",
"CreateOrUpdateFlagRequestBody",
@@ -1695,6 +1770,7 @@ def __dir__():
"CreditGrantDetail",
"CreditGrantExpiryRequestBody",
"CreditGrantSortOrder",
+ "CreditLeaseResponseData",
"CreditLedgerEnrichedEntryResponseData",
"CreditLedgerPeriod",
"CreditTransferResponseData",
@@ -1702,6 +1778,7 @@ def __dir__():
"CreditTriggerConfig",
"CreditUsage",
"CreditUsageAggregation",
+ "CreditUsageReason",
"CreditsAutoTopupCompanySummary",
"CreditsAutoTopupCreditSummary",
"CreditsAutoTopupHardFailure",
@@ -1733,6 +1810,7 @@ def __dir__():
"DeleteEnvironmentResponse",
"DeleteFeatureResponse",
"DeleteFlagResponse",
+ "DeletePaymentMethodByExternalIdResponse",
"DeletePlanEntitlementResponse",
"DeletePlanResponse",
"DeletePlanVersionParams",
@@ -1774,6 +1852,7 @@ def __dir__():
"EventStatus",
"EventSummaryResponseData",
"EventType",
+ "ExtendCreditLeaseResponse",
"FeatureCompanyResponseData",
"FeatureCompanyUserResponseData",
"FeatureDetailResponseData",
@@ -1853,11 +1932,18 @@ def __dir__():
"GetWhoAmIResponse",
"GrantBillingCreditsToCompanyResponse",
"InsightsSummaryResponseData",
+ "InstallIntegrationRequestBody",
+ "InstallIntegrationResponse",
+ "InstallStripeResponse",
"IntegrationCapabilities",
"IntegrationConfig",
"IntegrationConfig_Clerk",
+ "IntegrationConfig_Metronome",
"IntegrationConfig_Orb",
"IntegrationConfig_Stripe",
+ "IntegrationConfig_Workos",
+ "IntegrationInstallConfig",
+ "IntegrationInstallResponseData",
"IntegrationResponseData",
"IntegrationState",
"IntegrationType",
@@ -1963,7 +2049,7 @@ def __dir__():
"ListWebhookEventsResponse",
"ListWebhooksParams",
"ListWebhooksResponse",
- "LoadSampleDataSetV2Response",
+ "LoadSampleDataSetResponse",
"LocalCache",
"LookupCompanyParams",
"LookupCompanyResponse",
@@ -1973,9 +2059,13 @@ def __dir__():
"ManagePlanRequest",
"ManagePlanResponse",
"ManagePlanResponseResponseData",
+ "MarkCustomPlanBillingPaidRequestBody",
+ "MarkCustomPlanBillingPaidResponse",
"MeterRequestBody",
"MetricPeriod",
"MetricPeriodMonthReset",
+ "MetronomeIntegrationConfig",
+ "MigrationErrorCode",
"MrrResponseData",
"NotFoundError",
"OrbIntegrationConfig",
@@ -2005,6 +2095,7 @@ def __dir__():
"PlanGrowthResponseData",
"PlanIcon",
"PlanIssueResponseData",
+ "PlanPriceCadence",
"PlanResponseData",
"PlanSelection",
"PlanSnapshotView",
@@ -2035,7 +2126,11 @@ def __dir__():
"QuickstartResponse",
"RawEventBatchResponseData",
"RawEventResponseData",
+ "ReleaseCreditLeaseRequestBody",
+ "ReleaseCreditLeaseResponse",
+ "RetryCompanyMigrationResponse",
"RetryCustomPlanBillingResponse",
+ "RetryMigrationResponse",
"Rule",
"RuleConditionDetailResponseData",
"RuleConditionGroupDetailResponseData",
@@ -2161,6 +2256,7 @@ def __dir__():
"WebhookStatus",
"WebhookUrl",
"WhoAmIResponseData",
+ "WorkOsIntegrationConfig",
"ZeroOutGrantResponse",
"__version__",
"accesstokens",
diff --git a/src/schematic/accounts/__init__.py b/src/schematic/accounts/__init__.py
index d380c01..28b75c7 100644
--- a/src/schematic/accounts/__init__.py
+++ b/src/schematic/accounts/__init__.py
@@ -7,6 +7,8 @@
if typing.TYPE_CHECKING:
from .types import (
+ CountAccountMembersParams,
+ CountAccountMembersResponse,
CountApiKeysParams,
CountApiKeysResponse,
CountAuditLogsParams,
@@ -33,6 +35,8 @@
UpdateEnvironmentResponse,
)
_dynamic_imports: typing.Dict[str, str] = {
+ "CountAccountMembersParams": ".types",
+ "CountAccountMembersResponse": ".types",
"CountApiKeysParams": ".types",
"CountApiKeysResponse": ".types",
"CountAuditLogsParams": ".types",
@@ -82,6 +86,8 @@ def __dir__():
__all__ = [
+ "CountAccountMembersParams",
+ "CountAccountMembersResponse",
"CountApiKeysParams",
"CountApiKeysResponse",
"CountAuditLogsParams",
diff --git a/src/schematic/accounts/client.py b/src/schematic/accounts/client.py
index 81deb27..c5b1b33 100644
--- a/src/schematic/accounts/client.py
+++ b/src/schematic/accounts/client.py
@@ -8,6 +8,7 @@
from ..types.actor_type import ActorType
from ..types.environment_type import EnvironmentType
from .raw_client import AsyncRawAccountsClient, RawAccountsClient
+from .types.count_account_members_response import CountAccountMembersResponse
from .types.count_api_keys_response import CountApiKeysResponse
from .types.count_audit_logs_response import CountAuditLogsResponse
from .types.create_api_key_response import CreateApiKeyResponse
@@ -127,6 +128,56 @@ def get_account_member(
_response = self._raw_client.get_account_member(account_member_id, request_options=request_options)
return _response.data
+ def count_account_members(
+ self,
+ *,
+ ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
+ q: typing.Optional[str] = None,
+ limit: typing.Optional[int] = None,
+ offset: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CountAccountMembersResponse:
+ """
+ Parameters
+ ----------
+ ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+
+ q : typing.Optional[str]
+ Search filter
+
+ limit : typing.Optional[int]
+ Page limit (default 100)
+
+ offset : typing.Optional[int]
+ Page offset (default 0)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CountAccountMembersResponse
+ OK
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.accounts.count_account_members(
+ ids=["ids"],
+ q="q",
+ limit=1000000,
+ offset=1000000,
+ )
+ """
+ _response = self._raw_client.count_account_members(
+ ids=ids, q=q, limit=limit, offset=offset, request_options=request_options
+ )
+ return _response.data
+
def list_api_keys(
self,
*,
@@ -909,6 +960,64 @@ async def main() -> None:
_response = await self._raw_client.get_account_member(account_member_id, request_options=request_options)
return _response.data
+ async def count_account_members(
+ self,
+ *,
+ ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
+ q: typing.Optional[str] = None,
+ limit: typing.Optional[int] = None,
+ offset: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CountAccountMembersResponse:
+ """
+ Parameters
+ ----------
+ ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+
+ q : typing.Optional[str]
+ Search filter
+
+ limit : typing.Optional[int]
+ Page limit (default 100)
+
+ offset : typing.Optional[int]
+ Page offset (default 0)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CountAccountMembersResponse
+ OK
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.accounts.count_account_members(
+ ids=["ids"],
+ q="q",
+ limit=1000000,
+ offset=1000000,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.count_account_members(
+ ids=ids, q=q, limit=limit, offset=offset, request_options=request_options
+ )
+ return _response.data
+
async def list_api_keys(
self,
*,
diff --git a/src/schematic/accounts/raw_client.py b/src/schematic/accounts/raw_client.py
index c3e179a..8e3bf7d 100644
--- a/src/schematic/accounts/raw_client.py
+++ b/src/schematic/accounts/raw_client.py
@@ -20,6 +20,7 @@
from ..types.actor_type import ActorType
from ..types.api_error import ApiError as types_api_error_ApiError
from ..types.environment_type import EnvironmentType
+from .types.count_account_members_response import CountAccountMembersResponse
from .types.count_api_keys_response import CountApiKeysResponse
from .types.count_audit_logs_response import CountAuditLogsResponse
from .types.create_api_key_response import CreateApiKeyResponse
@@ -257,6 +258,126 @@ def get_account_member(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
+ def count_account_members(
+ self,
+ *,
+ ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
+ q: typing.Optional[str] = None,
+ limit: typing.Optional[int] = None,
+ offset: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CountAccountMembersResponse]:
+ """
+ Parameters
+ ----------
+ ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+
+ q : typing.Optional[str]
+ Search filter
+
+ limit : typing.Optional[int]
+ Page limit (default 100)
+
+ offset : typing.Optional[int]
+ Page offset (default 0)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CountAccountMembersResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "account-members/count",
+ method="GET",
+ params={
+ "ids": ids,
+ "q": q,
+ "limit": limit,
+ "offset": offset,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CountAccountMembersResponse,
+ parse_obj_as(
+ type_=CountAccountMembersResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
def list_api_keys(
self,
*,
@@ -2200,6 +2321,126 @@ async def get_account_member(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
+ async def count_account_members(
+ self,
+ *,
+ ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
+ q: typing.Optional[str] = None,
+ limit: typing.Optional[int] = None,
+ offset: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CountAccountMembersResponse]:
+ """
+ Parameters
+ ----------
+ ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+
+ q : typing.Optional[str]
+ Search filter
+
+ limit : typing.Optional[int]
+ Page limit (default 100)
+
+ offset : typing.Optional[int]
+ Page offset (default 0)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CountAccountMembersResponse]
+ OK
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "account-members/count",
+ method="GET",
+ params={
+ "ids": ids,
+ "q": q,
+ "limit": limit,
+ "offset": offset,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CountAccountMembersResponse,
+ parse_obj_as(
+ type_=CountAccountMembersResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
async def list_api_keys(
self,
*,
diff --git a/src/schematic/accounts/types/__init__.py b/src/schematic/accounts/types/__init__.py
index 37ba51a..69f8120 100644
--- a/src/schematic/accounts/types/__init__.py
+++ b/src/schematic/accounts/types/__init__.py
@@ -6,6 +6,8 @@
from importlib import import_module
if typing.TYPE_CHECKING:
+ from .count_account_members_params import CountAccountMembersParams
+ from .count_account_members_response import CountAccountMembersResponse
from .count_api_keys_params import CountApiKeysParams
from .count_api_keys_response import CountApiKeysResponse
from .count_audit_logs_params import CountAuditLogsParams
@@ -31,6 +33,8 @@
from .update_api_key_response import UpdateApiKeyResponse
from .update_environment_response import UpdateEnvironmentResponse
_dynamic_imports: typing.Dict[str, str] = {
+ "CountAccountMembersParams": ".count_account_members_params",
+ "CountAccountMembersResponse": ".count_account_members_response",
"CountApiKeysParams": ".count_api_keys_params",
"CountApiKeysResponse": ".count_api_keys_response",
"CountAuditLogsParams": ".count_audit_logs_params",
@@ -80,6 +84,8 @@ def __dir__():
__all__ = [
+ "CountAccountMembersParams",
+ "CountAccountMembersResponse",
"CountApiKeysParams",
"CountApiKeysResponse",
"CountAuditLogsParams",
diff --git a/src/schematic/accounts/types/count_account_members_params.py b/src/schematic/accounts/types/count_account_members_params.py
new file mode 100644
index 0000000..90d9e1a
--- /dev/null
+++ b/src/schematic/accounts/types/count_account_members_params.py
@@ -0,0 +1,37 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CountAccountMembersParams(UniversalBaseModel):
+ """
+ Input parameters
+ """
+
+ ids: typing.Optional[typing.List[str]] = None
+ limit: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Page limit (default 100)
+ """
+
+ offset: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Page offset (default 0)
+ """
+
+ q: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Search filter
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/accounts/types/count_account_members_response.py b/src/schematic/accounts/types/count_account_members_response.py
new file mode 100644
index 0000000..f480029
--- /dev/null
+++ b/src/schematic/accounts/types/count_account_members_response.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.count_response import CountResponse
+from .count_account_members_params import CountAccountMembersParams
+
+
+class CountAccountMembersResponse(UniversalBaseModel):
+ data: CountResponse
+ params: CountAccountMembersParams = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/billing/__init__.py b/src/schematic/billing/__init__.py
index 2d1e46a..e983952 100644
--- a/src/schematic/billing/__init__.py
+++ b/src/schematic/billing/__init__.py
@@ -12,6 +12,7 @@
CountCustomersParams,
CountCustomersResponse,
DeleteBillingProductResponse,
+ DeletePaymentMethodByExternalIdResponse,
DeleteProductPriceResponse,
ListBillingPricesParams,
ListBillingPricesResponse,
@@ -44,6 +45,7 @@
"CountCustomersParams": ".types",
"CountCustomersResponse": ".types",
"DeleteBillingProductResponse": ".types",
+ "DeletePaymentMethodByExternalIdResponse": ".types",
"DeleteProductPriceResponse": ".types",
"ListBillingPricesParams": ".types",
"ListBillingPricesResponse": ".types",
@@ -99,6 +101,7 @@ def __dir__():
"CountCustomersParams",
"CountCustomersResponse",
"DeleteBillingProductResponse",
+ "DeletePaymentMethodByExternalIdResponse",
"DeleteProductPriceResponse",
"ListBillingPricesParams",
"ListBillingPricesResponse",
diff --git a/src/schematic/billing/client.py b/src/schematic/billing/client.py
index 62b9e19..eb242ec 100644
--- a/src/schematic/billing/client.py
+++ b/src/schematic/billing/client.py
@@ -18,6 +18,7 @@
from .types.count_billing_products_response import CountBillingProductsResponse
from .types.count_customers_response import CountCustomersResponse
from .types.delete_billing_product_response import DeleteBillingProductResponse
+from .types.delete_payment_method_by_external_id_response import DeletePaymentMethodByExternalIdResponse
from .types.delete_product_price_response import DeleteProductPriceResponse
from .types.list_billing_prices_response import ListBillingPricesResponse
from .types.list_billing_product_prices_response import ListBillingProductPricesResponse
@@ -288,7 +289,7 @@ def list_customers_with_subscriptions(
client.billing.list_customers_with_subscriptions(
company_ids=["company_ids"],
name="name",
- provider_type="orb",
+ provider_type="metronome",
q="q",
limit=1000000,
offset=1000000,
@@ -351,7 +352,7 @@ def count_customers(
client.billing.count_customers(
company_ids=["company_ids"],
name="name",
- provider_type="orb",
+ provider_type="metronome",
q="q",
limit=1000000,
offset=1000000,
@@ -751,6 +752,37 @@ def upsert_payment_method(
)
return _response.data
+ def delete_payment_method_by_external_id(
+ self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> DeletePaymentMethodByExternalIdResponse:
+ """
+ Parameters
+ ----------
+ billing_id : str
+ billing_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ DeletePaymentMethodByExternalIdResponse
+ OK
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.billing.delete_payment_method_by_external_id(
+ billing_id="billing_id",
+ )
+ """
+ _response = self._raw_client.delete_payment_method_by_external_id(billing_id, request_options=request_options)
+ return _response.data
+
def list_billing_prices(
self,
*,
@@ -839,7 +871,7 @@ def list_billing_prices(
price=1000000,
product_id="product_id",
product_ids=["product_ids"],
- provider_type="orb",
+ provider_type="metronome",
q="q",
tiers_mode="graduated",
usage_type="licensed",
@@ -1101,7 +1133,7 @@ def list_billing_product_prices(
price=1000000,
product_id="product_id",
product_ids=["product_ids"],
- provider_type="orb",
+ provider_type="metronome",
q="q",
tiers_mode="graduated",
usage_type="licensed",
@@ -1290,7 +1322,7 @@ def list_billing_products(
is_active=True,
name="name",
price_usage_type="licensed",
- provider_type="orb",
+ provider_type="metronome",
q="q",
recurring_charges_only=True,
with_one_time_charges=True,
@@ -1394,7 +1426,7 @@ def count_billing_products(
is_active=True,
name="name",
price_usage_type="licensed",
- provider_type="orb",
+ provider_type="metronome",
q="q",
recurring_charges_only=True,
with_one_time_charges=True,
@@ -1847,7 +1879,7 @@ async def main() -> None:
await client.billing.list_customers_with_subscriptions(
company_ids=["company_ids"],
name="name",
- provider_type="orb",
+ provider_type="metronome",
q="q",
limit=1000000,
offset=1000000,
@@ -1918,7 +1950,7 @@ async def main() -> None:
await client.billing.count_customers(
company_ids=["company_ids"],
name="name",
- provider_type="orb",
+ provider_type="metronome",
q="q",
limit=1000000,
offset=1000000,
@@ -2369,6 +2401,47 @@ async def main() -> None:
)
return _response.data
+ async def delete_payment_method_by_external_id(
+ self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> DeletePaymentMethodByExternalIdResponse:
+ """
+ Parameters
+ ----------
+ billing_id : str
+ billing_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ DeletePaymentMethodByExternalIdResponse
+ OK
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.billing.delete_payment_method_by_external_id(
+ billing_id="billing_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.delete_payment_method_by_external_id(
+ billing_id, request_options=request_options
+ )
+ return _response.data
+
async def list_billing_prices(
self,
*,
@@ -2462,7 +2535,7 @@ async def main() -> None:
price=1000000,
product_id="product_id",
product_ids=["product_ids"],
- provider_type="orb",
+ provider_type="metronome",
q="q",
tiers_mode="graduated",
usage_type="licensed",
@@ -2748,7 +2821,7 @@ async def main() -> None:
price=1000000,
product_id="product_id",
product_ids=["product_ids"],
- provider_type="orb",
+ provider_type="metronome",
q="q",
tiers_mode="graduated",
usage_type="licensed",
@@ -2961,7 +3034,7 @@ async def main() -> None:
is_active=True,
name="name",
price_usage_type="licensed",
- provider_type="orb",
+ provider_type="metronome",
q="q",
recurring_charges_only=True,
with_one_time_charges=True,
@@ -3073,7 +3146,7 @@ async def main() -> None:
is_active=True,
name="name",
price_usage_type="licensed",
- provider_type="orb",
+ provider_type="metronome",
q="q",
recurring_charges_only=True,
with_one_time_charges=True,
diff --git a/src/schematic/billing/raw_client.py b/src/schematic/billing/raw_client.py
index 03f0ae3..16f4a44 100644
--- a/src/schematic/billing/raw_client.py
+++ b/src/schematic/billing/raw_client.py
@@ -30,6 +30,7 @@
from .types.count_billing_products_response import CountBillingProductsResponse
from .types.count_customers_response import CountCustomersResponse
from .types.delete_billing_product_response import DeleteBillingProductResponse
+from .types.delete_payment_method_by_external_id_response import DeletePaymentMethodByExternalIdResponse
from .types.delete_product_price_response import DeleteProductPriceResponse
from .types.list_billing_prices_response import ListBillingPricesResponse
from .types.list_billing_product_prices_response import ListBillingProductPricesResponse
@@ -1496,6 +1497,106 @@ def upsert_payment_method(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
+ def delete_payment_method_by_external_id(
+ self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[DeletePaymentMethodByExternalIdResponse]:
+ """
+ Parameters
+ ----------
+ billing_id : str
+ billing_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[DeletePaymentMethodByExternalIdResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"billing/payment-methods/{jsonable_encoder(billing_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ DeletePaymentMethodByExternalIdResponse,
+ parse_obj_as(
+ type_=DeletePaymentMethodByExternalIdResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
def list_billing_prices(
self,
*,
@@ -4297,6 +4398,106 @@ async def upsert_payment_method(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
+ async def delete_payment_method_by_external_id(
+ self, billing_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[DeletePaymentMethodByExternalIdResponse]:
+ """
+ Parameters
+ ----------
+ billing_id : str
+ billing_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[DeletePaymentMethodByExternalIdResponse]
+ OK
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"billing/payment-methods/{jsonable_encoder(billing_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ DeletePaymentMethodByExternalIdResponse,
+ parse_obj_as(
+ type_=DeletePaymentMethodByExternalIdResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
async def list_billing_prices(
self,
*,
diff --git a/src/schematic/billing/types/__init__.py b/src/schematic/billing/types/__init__.py
index 7bd5220..6752589 100644
--- a/src/schematic/billing/types/__init__.py
+++ b/src/schematic/billing/types/__init__.py
@@ -11,6 +11,7 @@
from .count_customers_params import CountCustomersParams
from .count_customers_response import CountCustomersResponse
from .delete_billing_product_response import DeleteBillingProductResponse
+ from .delete_payment_method_by_external_id_response import DeletePaymentMethodByExternalIdResponse
from .delete_product_price_response import DeleteProductPriceResponse
from .list_billing_prices_params import ListBillingPricesParams
from .list_billing_prices_response import ListBillingPricesResponse
@@ -42,6 +43,7 @@
"CountCustomersParams": ".count_customers_params",
"CountCustomersResponse": ".count_customers_response",
"DeleteBillingProductResponse": ".delete_billing_product_response",
+ "DeletePaymentMethodByExternalIdResponse": ".delete_payment_method_by_external_id_response",
"DeleteProductPriceResponse": ".delete_product_price_response",
"ListBillingPricesParams": ".list_billing_prices_params",
"ListBillingPricesResponse": ".list_billing_prices_response",
@@ -97,6 +99,7 @@ def __dir__():
"CountCustomersParams",
"CountCustomersResponse",
"DeleteBillingProductResponse",
+ "DeletePaymentMethodByExternalIdResponse",
"DeleteProductPriceResponse",
"ListBillingPricesParams",
"ListBillingPricesResponse",
diff --git a/src/schematic/billing/types/delete_payment_method_by_external_id_response.py b/src/schematic/billing/types/delete_payment_method_by_external_id_response.py
new file mode 100644
index 0000000..0d7454b
--- /dev/null
+++ b/src/schematic/billing/types/delete_payment_method_by_external_id_response.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.delete_response import DeleteResponse
+
+
+class DeletePaymentMethodByExternalIdResponse(UniversalBaseModel):
+ data: DeleteResponse
+ params: typing.Dict[str, typing.Any] = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/checkout/client.py b/src/schematic/checkout/client.py
index 1fbed9e..9217485 100644
--- a/src/schematic/checkout/client.py
+++ b/src/schematic/checkout/client.py
@@ -5,6 +5,7 @@
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.request_options import RequestOptions
+from ..types.checkout_field_value import CheckoutFieldValue
from ..types.plan_selection import PlanSelection
from ..types.update_add_on_request_body import UpdateAddOnRequestBody
from ..types.update_auto_topup_override_request_body import UpdateAutoTopupOverrideRequestBody
@@ -45,6 +46,7 @@ def internal(
auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
new_plan_id: str,
new_price_id: str,
pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody],
@@ -65,6 +67,8 @@ def internal(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
new_plan_id : str
new_price_id : str
@@ -90,6 +94,7 @@ def internal(
Examples
--------
from schematic import (
+ CheckoutFieldValue,
Schematic,
UpdateAddOnRequestBody,
UpdateAutoTopupOverrideRequestBody,
@@ -119,6 +124,12 @@ def internal(
quantity=1000000,
)
],
+ custom_field_values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
new_plan_id="new_plan_id",
new_price_id="new_price_id",
pay_in_advance=[
@@ -135,6 +146,7 @@ def internal(
auto_topup_overrides=auto_topup_overrides,
company_id=company_id,
credit_bundles=credit_bundles,
+ custom_field_values=custom_field_values,
new_plan_id=new_plan_id,
new_price_id=new_price_id,
pay_in_advance=pay_in_advance,
@@ -191,6 +203,7 @@ def preview_checkout_internal(
auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
new_plan_id: str,
new_price_id: str,
pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody],
@@ -211,6 +224,8 @@ def preview_checkout_internal(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
new_plan_id : str
new_price_id : str
@@ -236,6 +251,7 @@ def preview_checkout_internal(
Examples
--------
from schematic import (
+ CheckoutFieldValue,
Schematic,
UpdateAddOnRequestBody,
UpdateAutoTopupOverrideRequestBody,
@@ -265,6 +281,12 @@ def preview_checkout_internal(
quantity=1000000,
)
],
+ custom_field_values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
new_plan_id="new_plan_id",
new_price_id="new_price_id",
pay_in_advance=[
@@ -281,6 +303,7 @@ def preview_checkout_internal(
auto_topup_overrides=auto_topup_overrides,
company_id=company_id,
credit_bundles=credit_bundles,
+ custom_field_values=custom_field_values,
new_plan_id=new_plan_id,
new_price_id=new_price_id,
pay_in_advance=pay_in_advance,
@@ -298,6 +321,7 @@ def manage_plan(
add_on_selections: typing.Sequence[PlanSelection],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
pay_in_advance_entitlements: typing.Sequence[UpdatePayInAdvanceRequestBody],
base_plan_id: typing.Optional[str] = OMIT,
base_plan_price_id: typing.Optional[str] = OMIT,
@@ -319,6 +343,8 @@ def manage_plan(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
pay_in_advance_entitlements : typing.Sequence[UpdatePayInAdvanceRequestBody]
base_plan_id : typing.Optional[str]
@@ -352,6 +378,7 @@ def manage_plan(
Examples
--------
from schematic import (
+ CheckoutFieldValue,
PlanSelection,
Schematic,
UpdateCreditBundleRequestBody,
@@ -374,6 +401,12 @@ def manage_plan(
quantity=1000000,
)
],
+ custom_field_values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
pay_in_advance_entitlements=[
UpdatePayInAdvanceRequestBody(
price_id="price_id",
@@ -386,6 +419,7 @@ def manage_plan(
add_on_selections=add_on_selections,
company_id=company_id,
credit_bundles=credit_bundles,
+ custom_field_values=custom_field_values,
pay_in_advance_entitlements=pay_in_advance_entitlements,
base_plan_id=base_plan_id,
base_plan_price_id=base_plan_price_id,
@@ -406,6 +440,7 @@ def preview_manage_plan(
add_on_selections: typing.Sequence[PlanSelection],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
pay_in_advance_entitlements: typing.Sequence[UpdatePayInAdvanceRequestBody],
base_plan_id: typing.Optional[str] = OMIT,
base_plan_price_id: typing.Optional[str] = OMIT,
@@ -427,6 +462,8 @@ def preview_manage_plan(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
pay_in_advance_entitlements : typing.Sequence[UpdatePayInAdvanceRequestBody]
base_plan_id : typing.Optional[str]
@@ -460,6 +497,7 @@ def preview_manage_plan(
Examples
--------
from schematic import (
+ CheckoutFieldValue,
PlanSelection,
Schematic,
UpdateCreditBundleRequestBody,
@@ -482,6 +520,12 @@ def preview_manage_plan(
quantity=1000000,
)
],
+ custom_field_values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
pay_in_advance_entitlements=[
UpdatePayInAdvanceRequestBody(
price_id="price_id",
@@ -494,6 +538,7 @@ def preview_manage_plan(
add_on_selections=add_on_selections,
company_id=company_id,
credit_bundles=credit_bundles,
+ custom_field_values=custom_field_values,
pay_in_advance_entitlements=pay_in_advance_entitlements,
base_plan_id=base_plan_id,
base_plan_price_id=base_plan_price_id,
@@ -616,6 +661,7 @@ async def internal(
auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
new_plan_id: str,
new_price_id: str,
pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody],
@@ -636,6 +682,8 @@ async def internal(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
new_plan_id : str
new_price_id : str
@@ -664,6 +712,7 @@ async def internal(
from schematic import (
AsyncSchematic,
+ CheckoutFieldValue,
UpdateAddOnRequestBody,
UpdateAutoTopupOverrideRequestBody,
UpdateCreditBundleRequestBody,
@@ -695,6 +744,12 @@ async def main() -> None:
quantity=1000000,
)
],
+ custom_field_values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
new_plan_id="new_plan_id",
new_price_id="new_price_id",
pay_in_advance=[
@@ -714,6 +769,7 @@ async def main() -> None:
auto_topup_overrides=auto_topup_overrides,
company_id=company_id,
credit_bundles=credit_bundles,
+ custom_field_values=custom_field_values,
new_plan_id=new_plan_id,
new_price_id=new_price_id,
pay_in_advance=pay_in_advance,
@@ -778,6 +834,7 @@ async def preview_checkout_internal(
auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
new_plan_id: str,
new_price_id: str,
pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody],
@@ -798,6 +855,8 @@ async def preview_checkout_internal(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
new_plan_id : str
new_price_id : str
@@ -826,6 +885,7 @@ async def preview_checkout_internal(
from schematic import (
AsyncSchematic,
+ CheckoutFieldValue,
UpdateAddOnRequestBody,
UpdateAutoTopupOverrideRequestBody,
UpdateCreditBundleRequestBody,
@@ -857,6 +917,12 @@ async def main() -> None:
quantity=1000000,
)
],
+ custom_field_values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
new_plan_id="new_plan_id",
new_price_id="new_price_id",
pay_in_advance=[
@@ -876,6 +942,7 @@ async def main() -> None:
auto_topup_overrides=auto_topup_overrides,
company_id=company_id,
credit_bundles=credit_bundles,
+ custom_field_values=custom_field_values,
new_plan_id=new_plan_id,
new_price_id=new_price_id,
pay_in_advance=pay_in_advance,
@@ -893,6 +960,7 @@ async def manage_plan(
add_on_selections: typing.Sequence[PlanSelection],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
pay_in_advance_entitlements: typing.Sequence[UpdatePayInAdvanceRequestBody],
base_plan_id: typing.Optional[str] = OMIT,
base_plan_price_id: typing.Optional[str] = OMIT,
@@ -914,6 +982,8 @@ async def manage_plan(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
pay_in_advance_entitlements : typing.Sequence[UpdatePayInAdvanceRequestBody]
base_plan_id : typing.Optional[str]
@@ -950,6 +1020,7 @@ async def manage_plan(
from schematic import (
AsyncSchematic,
+ CheckoutFieldValue,
PlanSelection,
UpdateCreditBundleRequestBody,
UpdatePayInAdvanceRequestBody,
@@ -974,6 +1045,12 @@ async def main() -> None:
quantity=1000000,
)
],
+ custom_field_values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
pay_in_advance_entitlements=[
UpdatePayInAdvanceRequestBody(
price_id="price_id",
@@ -989,6 +1066,7 @@ async def main() -> None:
add_on_selections=add_on_selections,
company_id=company_id,
credit_bundles=credit_bundles,
+ custom_field_values=custom_field_values,
pay_in_advance_entitlements=pay_in_advance_entitlements,
base_plan_id=base_plan_id,
base_plan_price_id=base_plan_price_id,
@@ -1009,6 +1087,7 @@ async def preview_manage_plan(
add_on_selections: typing.Sequence[PlanSelection],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
pay_in_advance_entitlements: typing.Sequence[UpdatePayInAdvanceRequestBody],
base_plan_id: typing.Optional[str] = OMIT,
base_plan_price_id: typing.Optional[str] = OMIT,
@@ -1030,6 +1109,8 @@ async def preview_manage_plan(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
pay_in_advance_entitlements : typing.Sequence[UpdatePayInAdvanceRequestBody]
base_plan_id : typing.Optional[str]
@@ -1066,6 +1147,7 @@ async def preview_manage_plan(
from schematic import (
AsyncSchematic,
+ CheckoutFieldValue,
PlanSelection,
UpdateCreditBundleRequestBody,
UpdatePayInAdvanceRequestBody,
@@ -1090,6 +1172,12 @@ async def main() -> None:
quantity=1000000,
)
],
+ custom_field_values=[
+ CheckoutFieldValue(
+ id="id",
+ value="value",
+ )
+ ],
pay_in_advance_entitlements=[
UpdatePayInAdvanceRequestBody(
price_id="price_id",
@@ -1105,6 +1193,7 @@ async def main() -> None:
add_on_selections=add_on_selections,
company_id=company_id,
credit_bundles=credit_bundles,
+ custom_field_values=custom_field_values,
pay_in_advance_entitlements=pay_in_advance_entitlements,
base_plan_id=base_plan_id,
base_plan_price_id=base_plan_price_id,
diff --git a/src/schematic/checkout/raw_client.py b/src/schematic/checkout/raw_client.py
index 0134955..ed3556d 100644
--- a/src/schematic/checkout/raw_client.py
+++ b/src/schematic/checkout/raw_client.py
@@ -18,6 +18,7 @@
from ..errors.not_found_error import NotFoundError
from ..errors.unauthorized_error import UnauthorizedError
from ..types.api_error import ApiError as types_api_error_ApiError
+from ..types.checkout_field_value import CheckoutFieldValue
from ..types.plan_selection import PlanSelection
from ..types.update_add_on_request_body import UpdateAddOnRequestBody
from ..types.update_auto_topup_override_request_body import UpdateAutoTopupOverrideRequestBody
@@ -47,6 +48,7 @@ def internal(
auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
new_plan_id: str,
new_price_id: str,
pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody],
@@ -67,6 +69,8 @@ def internal(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
new_plan_id : str
new_price_id : str
@@ -106,6 +110,9 @@ def internal(
"credit_bundles": convert_and_respect_annotation_metadata(
object_=credit_bundles, annotation=typing.Sequence[UpdateCreditBundleRequestBody], direction="write"
),
+ "custom_field_values": convert_and_respect_annotation_metadata(
+ object_=custom_field_values, annotation=typing.Sequence[CheckoutFieldValue], direction="write"
+ ),
"new_plan_id": new_plan_id,
"new_price_id": new_price_id,
"pay_in_advance": convert_and_respect_annotation_metadata(
@@ -319,6 +326,7 @@ def preview_checkout_internal(
auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
new_plan_id: str,
new_price_id: str,
pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody],
@@ -339,6 +347,8 @@ def preview_checkout_internal(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
new_plan_id : str
new_price_id : str
@@ -378,6 +388,9 @@ def preview_checkout_internal(
"credit_bundles": convert_and_respect_annotation_metadata(
object_=credit_bundles, annotation=typing.Sequence[UpdateCreditBundleRequestBody], direction="write"
),
+ "custom_field_values": convert_and_respect_annotation_metadata(
+ object_=custom_field_values, annotation=typing.Sequence[CheckoutFieldValue], direction="write"
+ ),
"new_plan_id": new_plan_id,
"new_price_id": new_price_id,
"pay_in_advance": convert_and_respect_annotation_metadata(
@@ -477,6 +490,7 @@ def manage_plan(
add_on_selections: typing.Sequence[PlanSelection],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
pay_in_advance_entitlements: typing.Sequence[UpdatePayInAdvanceRequestBody],
base_plan_id: typing.Optional[str] = OMIT,
base_plan_price_id: typing.Optional[str] = OMIT,
@@ -498,6 +512,8 @@ def manage_plan(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
pay_in_advance_entitlements : typing.Sequence[UpdatePayInAdvanceRequestBody]
base_plan_id : typing.Optional[str]
@@ -544,6 +560,9 @@ def manage_plan(
"credit_bundles": convert_and_respect_annotation_metadata(
object_=credit_bundles, annotation=typing.Sequence[UpdateCreditBundleRequestBody], direction="write"
),
+ "custom_field_values": convert_and_respect_annotation_metadata(
+ object_=custom_field_values, annotation=typing.Sequence[CheckoutFieldValue], direction="write"
+ ),
"pay_in_advance_entitlements": convert_and_respect_annotation_metadata(
object_=pay_in_advance_entitlements,
annotation=typing.Sequence[UpdatePayInAdvanceRequestBody],
@@ -644,6 +663,7 @@ def preview_manage_plan(
add_on_selections: typing.Sequence[PlanSelection],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
pay_in_advance_entitlements: typing.Sequence[UpdatePayInAdvanceRequestBody],
base_plan_id: typing.Optional[str] = OMIT,
base_plan_price_id: typing.Optional[str] = OMIT,
@@ -665,6 +685,8 @@ def preview_manage_plan(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
pay_in_advance_entitlements : typing.Sequence[UpdatePayInAdvanceRequestBody]
base_plan_id : typing.Optional[str]
@@ -711,6 +733,9 @@ def preview_manage_plan(
"credit_bundles": convert_and_respect_annotation_metadata(
object_=credit_bundles, annotation=typing.Sequence[UpdateCreditBundleRequestBody], direction="write"
),
+ "custom_field_values": convert_and_respect_annotation_metadata(
+ object_=custom_field_values, annotation=typing.Sequence[CheckoutFieldValue], direction="write"
+ ),
"pay_in_advance_entitlements": convert_and_respect_annotation_metadata(
object_=pay_in_advance_entitlements,
annotation=typing.Sequence[UpdatePayInAdvanceRequestBody],
@@ -1049,6 +1074,7 @@ async def internal(
auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
new_plan_id: str,
new_price_id: str,
pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody],
@@ -1069,6 +1095,8 @@ async def internal(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
new_plan_id : str
new_price_id : str
@@ -1108,6 +1136,9 @@ async def internal(
"credit_bundles": convert_and_respect_annotation_metadata(
object_=credit_bundles, annotation=typing.Sequence[UpdateCreditBundleRequestBody], direction="write"
),
+ "custom_field_values": convert_and_respect_annotation_metadata(
+ object_=custom_field_values, annotation=typing.Sequence[CheckoutFieldValue], direction="write"
+ ),
"new_plan_id": new_plan_id,
"new_price_id": new_price_id,
"pay_in_advance": convert_and_respect_annotation_metadata(
@@ -1321,6 +1352,7 @@ async def preview_checkout_internal(
auto_topup_overrides: typing.Sequence[UpdateAutoTopupOverrideRequestBody],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
new_plan_id: str,
new_price_id: str,
pay_in_advance: typing.Sequence[UpdatePayInAdvanceRequestBody],
@@ -1341,6 +1373,8 @@ async def preview_checkout_internal(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
new_plan_id : str
new_price_id : str
@@ -1380,6 +1414,9 @@ async def preview_checkout_internal(
"credit_bundles": convert_and_respect_annotation_metadata(
object_=credit_bundles, annotation=typing.Sequence[UpdateCreditBundleRequestBody], direction="write"
),
+ "custom_field_values": convert_and_respect_annotation_metadata(
+ object_=custom_field_values, annotation=typing.Sequence[CheckoutFieldValue], direction="write"
+ ),
"new_plan_id": new_plan_id,
"new_price_id": new_price_id,
"pay_in_advance": convert_and_respect_annotation_metadata(
@@ -1479,6 +1516,7 @@ async def manage_plan(
add_on_selections: typing.Sequence[PlanSelection],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
pay_in_advance_entitlements: typing.Sequence[UpdatePayInAdvanceRequestBody],
base_plan_id: typing.Optional[str] = OMIT,
base_plan_price_id: typing.Optional[str] = OMIT,
@@ -1500,6 +1538,8 @@ async def manage_plan(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
pay_in_advance_entitlements : typing.Sequence[UpdatePayInAdvanceRequestBody]
base_plan_id : typing.Optional[str]
@@ -1546,6 +1586,9 @@ async def manage_plan(
"credit_bundles": convert_and_respect_annotation_metadata(
object_=credit_bundles, annotation=typing.Sequence[UpdateCreditBundleRequestBody], direction="write"
),
+ "custom_field_values": convert_and_respect_annotation_metadata(
+ object_=custom_field_values, annotation=typing.Sequence[CheckoutFieldValue], direction="write"
+ ),
"pay_in_advance_entitlements": convert_and_respect_annotation_metadata(
object_=pay_in_advance_entitlements,
annotation=typing.Sequence[UpdatePayInAdvanceRequestBody],
@@ -1646,6 +1689,7 @@ async def preview_manage_plan(
add_on_selections: typing.Sequence[PlanSelection],
company_id: str,
credit_bundles: typing.Sequence[UpdateCreditBundleRequestBody],
+ custom_field_values: typing.Sequence[CheckoutFieldValue],
pay_in_advance_entitlements: typing.Sequence[UpdatePayInAdvanceRequestBody],
base_plan_id: typing.Optional[str] = OMIT,
base_plan_price_id: typing.Optional[str] = OMIT,
@@ -1667,6 +1711,8 @@ async def preview_manage_plan(
credit_bundles : typing.Sequence[UpdateCreditBundleRequestBody]
+ custom_field_values : typing.Sequence[CheckoutFieldValue]
+
pay_in_advance_entitlements : typing.Sequence[UpdatePayInAdvanceRequestBody]
base_plan_id : typing.Optional[str]
@@ -1713,6 +1759,9 @@ async def preview_manage_plan(
"credit_bundles": convert_and_respect_annotation_metadata(
object_=credit_bundles, annotation=typing.Sequence[UpdateCreditBundleRequestBody], direction="write"
),
+ "custom_field_values": convert_and_respect_annotation_metadata(
+ object_=custom_field_values, annotation=typing.Sequence[CheckoutFieldValue], direction="write"
+ ),
"pay_in_advance_entitlements": convert_and_respect_annotation_metadata(
object_=pay_in_advance_entitlements,
annotation=typing.Sequence[UpdatePayInAdvanceRequestBody],
diff --git a/src/schematic/companies/client.py b/src/schematic/companies/client.py
index f9ef3e7..81ca507 100644
--- a/src/schematic/companies/client.py
+++ b/src/schematic/companies/client.py
@@ -80,6 +80,7 @@ def list_companies(
plan_id: typing.Optional[str] = None,
plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
plan_version_id: typing.Optional[str] = None,
+ plan_version_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
q: typing.Optional[str] = None,
sort_order_column: typing.Optional[str] = None,
sort_order_direction: typing.Optional[SortDirection] = None,
@@ -120,6 +121,9 @@ def list_companies(
plan_version_id : typing.Optional[str]
Filter companies by plan version ID (starts with plvr_)
+ plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ Filter companies by one or more plan version IDs (each ID starts with plvr_). Takes precedence over plan_version_id when set.
+
q : typing.Optional[str]
Search for companies by name, keys or string traits
@@ -179,6 +183,7 @@ def list_companies(
plan_id="plan_id",
plan_ids=["plan_ids"],
plan_version_id="plan_version_id",
+ plan_version_ids=["plan_version_ids"],
q="q",
sort_order_column="sort_order_column",
sort_order_direction="asc",
@@ -201,6 +206,7 @@ def list_companies(
plan_id=plan_id,
plan_ids=plan_ids,
plan_version_id=plan_version_id,
+ plan_version_ids=plan_version_ids,
q=q,
sort_order_column=sort_order_column,
sort_order_direction=sort_order_direction,
@@ -365,6 +371,7 @@ def count_companies(
plan_id: typing.Optional[str] = None,
plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
plan_version_id: typing.Optional[str] = None,
+ plan_version_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
q: typing.Optional[str] = None,
sort_order_column: typing.Optional[str] = None,
sort_order_direction: typing.Optional[SortDirection] = None,
@@ -405,6 +412,9 @@ def count_companies(
plan_version_id : typing.Optional[str]
Filter companies by plan version ID (starts with plvr_)
+ plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ Filter companies by one or more plan version IDs (each ID starts with plvr_). Takes precedence over plan_version_id when set.
+
q : typing.Optional[str]
Search for companies by name, keys or string traits
@@ -464,6 +474,7 @@ def count_companies(
plan_id="plan_id",
plan_ids=["plan_ids"],
plan_version_id="plan_version_id",
+ plan_version_ids=["plan_version_ids"],
q="q",
sort_order_column="sort_order_column",
sort_order_direction="asc",
@@ -486,6 +497,7 @@ def count_companies(
plan_id=plan_id,
plan_ids=plan_ids,
plan_version_id=plan_version_id,
+ plan_version_ids=plan_version_ids,
q=q,
sort_order_column=sort_order_column,
sort_order_direction=sort_order_direction,
@@ -2068,6 +2080,7 @@ async def list_companies(
plan_id: typing.Optional[str] = None,
plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
plan_version_id: typing.Optional[str] = None,
+ plan_version_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
q: typing.Optional[str] = None,
sort_order_column: typing.Optional[str] = None,
sort_order_direction: typing.Optional[SortDirection] = None,
@@ -2108,6 +2121,9 @@ async def list_companies(
plan_version_id : typing.Optional[str]
Filter companies by plan version ID (starts with plvr_)
+ plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ Filter companies by one or more plan version IDs (each ID starts with plvr_). Takes precedence over plan_version_id when set.
+
q : typing.Optional[str]
Search for companies by name, keys or string traits
@@ -2172,6 +2188,7 @@ async def main() -> None:
plan_id="plan_id",
plan_ids=["plan_ids"],
plan_version_id="plan_version_id",
+ plan_version_ids=["plan_version_ids"],
q="q",
sort_order_column="sort_order_column",
sort_order_direction="asc",
@@ -2197,6 +2214,7 @@ async def main() -> None:
plan_id=plan_id,
plan_ids=plan_ids,
plan_version_id=plan_version_id,
+ plan_version_ids=plan_version_ids,
q=q,
sort_order_column=sort_order_column,
sort_order_direction=sort_order_direction,
@@ -2385,6 +2403,7 @@ async def count_companies(
plan_id: typing.Optional[str] = None,
plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
plan_version_id: typing.Optional[str] = None,
+ plan_version_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
q: typing.Optional[str] = None,
sort_order_column: typing.Optional[str] = None,
sort_order_direction: typing.Optional[SortDirection] = None,
@@ -2425,6 +2444,9 @@ async def count_companies(
plan_version_id : typing.Optional[str]
Filter companies by plan version ID (starts with plvr_)
+ plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ Filter companies by one or more plan version IDs (each ID starts with plvr_). Takes precedence over plan_version_id when set.
+
q : typing.Optional[str]
Search for companies by name, keys or string traits
@@ -2489,6 +2511,7 @@ async def main() -> None:
plan_id="plan_id",
plan_ids=["plan_ids"],
plan_version_id="plan_version_id",
+ plan_version_ids=["plan_version_ids"],
q="q",
sort_order_column="sort_order_column",
sort_order_direction="asc",
@@ -2514,6 +2537,7 @@ async def main() -> None:
plan_id=plan_id,
plan_ids=plan_ids,
plan_version_id=plan_version_id,
+ plan_version_ids=plan_version_ids,
q=q,
sort_order_column=sort_order_column,
sort_order_direction=sort_order_direction,
diff --git a/src/schematic/companies/raw_client.py b/src/schematic/companies/raw_client.py
index 4e14395..1da3685 100644
--- a/src/schematic/companies/raw_client.py
+++ b/src/schematic/companies/raw_client.py
@@ -82,6 +82,7 @@ def list_companies(
plan_id: typing.Optional[str] = None,
plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
plan_version_id: typing.Optional[str] = None,
+ plan_version_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
q: typing.Optional[str] = None,
sort_order_column: typing.Optional[str] = None,
sort_order_direction: typing.Optional[SortDirection] = None,
@@ -122,6 +123,9 @@ def list_companies(
plan_version_id : typing.Optional[str]
Filter companies by plan version ID (starts with plvr_)
+ plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ Filter companies by one or more plan version IDs (each ID starts with plvr_). Takes precedence over plan_version_id when set.
+
q : typing.Optional[str]
Search for companies by name, keys or string traits
@@ -177,6 +181,7 @@ def list_companies(
"plan_id": plan_id,
"plan_ids": plan_ids,
"plan_version_id": plan_version_id,
+ "plan_version_ids": plan_version_ids,
"q": q,
"sort_order_column": sort_order_column,
"sort_order_direction": sort_order_direction,
@@ -618,6 +623,7 @@ def count_companies(
plan_id: typing.Optional[str] = None,
plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
plan_version_id: typing.Optional[str] = None,
+ plan_version_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
q: typing.Optional[str] = None,
sort_order_column: typing.Optional[str] = None,
sort_order_direction: typing.Optional[SortDirection] = None,
@@ -658,6 +664,9 @@ def count_companies(
plan_version_id : typing.Optional[str]
Filter companies by plan version ID (starts with plvr_)
+ plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ Filter companies by one or more plan version IDs (each ID starts with plvr_). Takes precedence over plan_version_id when set.
+
q : typing.Optional[str]
Search for companies by name, keys or string traits
@@ -713,6 +722,7 @@ def count_companies(
"plan_id": plan_id,
"plan_ids": plan_ids,
"plan_version_id": plan_version_id,
+ "plan_version_ids": plan_version_ids,
"q": q,
"sort_order_column": sort_order_column,
"sort_order_direction": sort_order_direction,
@@ -4457,6 +4467,7 @@ async def list_companies(
plan_id: typing.Optional[str] = None,
plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
plan_version_id: typing.Optional[str] = None,
+ plan_version_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
q: typing.Optional[str] = None,
sort_order_column: typing.Optional[str] = None,
sort_order_direction: typing.Optional[SortDirection] = None,
@@ -4497,6 +4508,9 @@ async def list_companies(
plan_version_id : typing.Optional[str]
Filter companies by plan version ID (starts with plvr_)
+ plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ Filter companies by one or more plan version IDs (each ID starts with plvr_). Takes precedence over plan_version_id when set.
+
q : typing.Optional[str]
Search for companies by name, keys or string traits
@@ -4552,6 +4566,7 @@ async def list_companies(
"plan_id": plan_id,
"plan_ids": plan_ids,
"plan_version_id": plan_version_id,
+ "plan_version_ids": plan_version_ids,
"q": q,
"sort_order_column": sort_order_column,
"sort_order_direction": sort_order_direction,
@@ -4993,6 +5008,7 @@ async def count_companies(
plan_id: typing.Optional[str] = None,
plan_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
plan_version_id: typing.Optional[str] = None,
+ plan_version_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
q: typing.Optional[str] = None,
sort_order_column: typing.Optional[str] = None,
sort_order_direction: typing.Optional[SortDirection] = None,
@@ -5033,6 +5049,9 @@ async def count_companies(
plan_version_id : typing.Optional[str]
Filter companies by plan version ID (starts with plvr_)
+ plan_version_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ Filter companies by one or more plan version IDs (each ID starts with plvr_). Takes precedence over plan_version_id when set.
+
q : typing.Optional[str]
Search for companies by name, keys or string traits
@@ -5088,6 +5107,7 @@ async def count_companies(
"plan_id": plan_id,
"plan_ids": plan_ids,
"plan_version_id": plan_version_id,
+ "plan_version_ids": plan_version_ids,
"q": q,
"sort_order_column": sort_order_column,
"sort_order_direction": sort_order_direction,
diff --git a/src/schematic/companies/types/count_companies_params.py b/src/schematic/companies/types/count_companies_params.py
index 047ea93..8a38f08 100644
--- a/src/schematic/companies/types/count_companies_params.py
+++ b/src/schematic/companies/types/count_companies_params.py
@@ -59,6 +59,11 @@ class CountCompaniesParams(UniversalBaseModel):
Filter companies by plan version ID (starts with plvr_)
"""
+ plan_version_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Filter companies by one or more plan version IDs (each ID starts with plvr_). Takes precedence over plan_version_id when set.
+ """
+
q: typing.Optional[str] = pydantic.Field(default=None)
"""
Search for companies by name, keys or string traits
diff --git a/src/schematic/companies/types/list_companies_params.py b/src/schematic/companies/types/list_companies_params.py
index b244c97..3693cde 100644
--- a/src/schematic/companies/types/list_companies_params.py
+++ b/src/schematic/companies/types/list_companies_params.py
@@ -59,6 +59,11 @@ class ListCompaniesParams(UniversalBaseModel):
Filter companies by plan version ID (starts with plvr_)
"""
+ plan_version_ids: typing.Optional[typing.List[str]] = pydantic.Field(default=None)
+ """
+ Filter companies by one or more plan version IDs (each ID starts with plvr_). Takes precedence over plan_version_id when set.
+ """
+
q: typing.Optional[str] = pydantic.Field(default=None)
"""
Search for companies by name, keys or string traits
diff --git a/src/schematic/core/client_wrapper.py b/src/schematic/core/client_wrapper.py
index a9df43a..25d1e4d 100644
--- a/src/schematic/core/client_wrapper.py
+++ b/src/schematic/core/client_wrapper.py
@@ -27,12 +27,12 @@ def get_headers(self) -> typing.Dict[str, str]:
import platform
headers: typing.Dict[str, str] = {
- "User-Agent": "schematichq/1.2.2",
+ "User-Agent": "schematichq/1.2.3",
"X-Fern-Language": "Python",
"X-Fern-Runtime": f"python/{platform.python_version()}",
"X-Fern-Platform": f"{platform.system().lower()}/{platform.release()}",
"X-Fern-SDK-Name": "schematichq",
- "X-Fern-SDK-Version": "1.2.2",
+ "X-Fern-SDK-Version": "1.2.3",
**(self.get_custom_headers() or {}),
}
headers["X-Schematic-Api-Key"] = self.api_key
diff --git a/src/schematic/credits/__init__.py b/src/schematic/credits/__init__.py
index 67a9887..9661479 100644
--- a/src/schematic/credits/__init__.py
+++ b/src/schematic/credits/__init__.py
@@ -7,6 +7,7 @@
if typing.TYPE_CHECKING:
from .types import (
+ AcquireCreditLeaseResponse,
CountBillingCreditsGrantsParams,
CountBillingCreditsGrantsResponse,
CountBillingCreditsParams,
@@ -27,6 +28,7 @@
DeleteBillingPlanCreditGrantParams,
DeleteBillingPlanCreditGrantResponse,
DeleteCreditBundleResponse,
+ ExtendCreditLeaseResponse,
GetCreditBundleResponse,
GetEnrichedCreditLedgerParams,
GetEnrichedCreditLedgerResponse,
@@ -47,6 +49,7 @@
ListCreditEventLedgerResponse,
ListGrantsForCreditParams,
ListGrantsForCreditResponse,
+ ReleaseCreditLeaseResponse,
SoftDeleteBillingCreditResponse,
UpdateBillingCreditResponse,
UpdateBillingPlanCreditGrantResponse,
@@ -54,6 +57,7 @@
ZeroOutGrantResponse,
)
_dynamic_imports: typing.Dict[str, str] = {
+ "AcquireCreditLeaseResponse": ".types",
"CountBillingCreditsGrantsParams": ".types",
"CountBillingCreditsGrantsResponse": ".types",
"CountBillingCreditsParams": ".types",
@@ -74,6 +78,7 @@
"DeleteBillingPlanCreditGrantParams": ".types",
"DeleteBillingPlanCreditGrantResponse": ".types",
"DeleteCreditBundleResponse": ".types",
+ "ExtendCreditLeaseResponse": ".types",
"GetCreditBundleResponse": ".types",
"GetEnrichedCreditLedgerParams": ".types",
"GetEnrichedCreditLedgerResponse": ".types",
@@ -94,6 +99,7 @@
"ListCreditEventLedgerResponse": ".types",
"ListGrantsForCreditParams": ".types",
"ListGrantsForCreditResponse": ".types",
+ "ReleaseCreditLeaseResponse": ".types",
"SoftDeleteBillingCreditResponse": ".types",
"UpdateBillingCreditResponse": ".types",
"UpdateBillingPlanCreditGrantResponse": ".types",
@@ -124,6 +130,7 @@ def __dir__():
__all__ = [
+ "AcquireCreditLeaseResponse",
"CountBillingCreditsGrantsParams",
"CountBillingCreditsGrantsResponse",
"CountBillingCreditsParams",
@@ -144,6 +151,7 @@ def __dir__():
"DeleteBillingPlanCreditGrantParams",
"DeleteBillingPlanCreditGrantResponse",
"DeleteCreditBundleResponse",
+ "ExtendCreditLeaseResponse",
"GetCreditBundleResponse",
"GetEnrichedCreditLedgerParams",
"GetEnrichedCreditLedgerResponse",
@@ -164,6 +172,7 @@ def __dir__():
"ListCreditEventLedgerResponse",
"ListGrantsForCreditParams",
"ListGrantsForCreditResponse",
+ "ReleaseCreditLeaseResponse",
"SoftDeleteBillingCreditResponse",
"UpdateBillingCreditResponse",
"UpdateBillingPlanCreditGrantResponse",
diff --git a/src/schematic/credits/client.py b/src/schematic/credits/client.py
index 8cc0234..641e3f2 100644
--- a/src/schematic/credits/client.py
+++ b/src/schematic/credits/client.py
@@ -22,8 +22,10 @@
from ..types.credit_event_type import CreditEventType
from ..types.credit_grant_sort_order import CreditGrantSortOrder
from ..types.credit_ledger_period import CreditLedgerPeriod
+from ..types.release_credit_lease_request_body import ReleaseCreditLeaseRequestBody
from ..types.sort_direction import SortDirection
from .raw_client import AsyncRawCreditsClient, RawCreditsClient
+from .types.acquire_credit_lease_response import AcquireCreditLeaseResponse
from .types.count_billing_credits_grants_response import CountBillingCreditsGrantsResponse
from .types.count_billing_credits_response import CountBillingCreditsResponse
from .types.count_billing_plan_credit_grants_response import CountBillingPlanCreditGrantsResponse
@@ -36,6 +38,7 @@
from .types.create_credit_bundle_response import CreateCreditBundleResponse
from .types.delete_billing_plan_credit_grant_response import DeleteBillingPlanCreditGrantResponse
from .types.delete_credit_bundle_response import DeleteCreditBundleResponse
+from .types.extend_credit_lease_response import ExtendCreditLeaseResponse
from .types.get_credit_bundle_response import GetCreditBundleResponse
from .types.get_enriched_credit_ledger_response import GetEnrichedCreditLedgerResponse
from .types.get_single_billing_credit_response import GetSingleBillingCreditResponse
@@ -48,6 +51,7 @@
from .types.list_credit_bundles_response import ListCreditBundlesResponse
from .types.list_credit_event_ledger_response import ListCreditEventLedgerResponse
from .types.list_grants_for_credit_response import ListGrantsForCreditResponse
+from .types.release_credit_lease_response import ReleaseCreditLeaseResponse
from .types.soft_delete_billing_credit_response import SoftDeleteBillingCreditResponse
from .types.update_billing_credit_response import UpdateBillingCreditResponse
from .types.update_billing_plan_credit_grant_response import UpdateBillingPlanCreditGrantResponse
@@ -1106,6 +1110,137 @@ def list_grants_for_credit(
)
return _response.data
+ def acquire_credit_lease(
+ self,
+ *,
+ company_id: str,
+ credit_type_id: str,
+ requested_amount: float,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AcquireCreditLeaseResponse:
+ """
+ Parameters
+ ----------
+ company_id : str
+
+ credit_type_id : str
+
+ requested_amount : float
+
+ expires_at : typing.Optional[dt.datetime]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AcquireCreditLeaseResponse
+ Created
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.credits.acquire_credit_lease(
+ company_id="company_id",
+ credit_type_id="credit_type_id",
+ requested_amount=1.1,
+ )
+ """
+ _response = self._raw_client.acquire_credit_lease(
+ company_id=company_id,
+ credit_type_id=credit_type_id,
+ requested_amount=requested_amount,
+ expires_at=expires_at,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def extend_credit_lease(
+ self,
+ lease_id: str,
+ *,
+ additional_amount: float,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ExtendCreditLeaseResponse:
+ """
+ Parameters
+ ----------
+ lease_id : str
+ lease_id
+
+ additional_amount : float
+
+ expires_at : typing.Optional[dt.datetime]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ExtendCreditLeaseResponse
+ OK
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.credits.extend_credit_lease(
+ lease_id="lease_id",
+ additional_amount=1.1,
+ )
+ """
+ _response = self._raw_client.extend_credit_lease(
+ lease_id, additional_amount=additional_amount, expires_at=expires_at, request_options=request_options
+ )
+ return _response.data
+
+ def release_credit_lease(
+ self,
+ lease_id: str,
+ *,
+ request: ReleaseCreditLeaseRequestBody,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ReleaseCreditLeaseResponse:
+ """
+ Parameters
+ ----------
+ lease_id : str
+ lease_id
+
+ request : ReleaseCreditLeaseRequestBody
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ReleaseCreditLeaseResponse
+ OK
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.credits.release_credit_lease(
+ lease_id="lease_id",
+ request={"key": "value"},
+ )
+ """
+ _response = self._raw_client.release_credit_lease(lease_id, request=request, request_options=request_options)
+ return _response.data
+
def get_enriched_credit_ledger(
self,
*,
@@ -1348,6 +1483,7 @@ def create_billing_plan_credit_grant(
expiry_unit_count: typing.Optional[int] = OMIT,
plan_version_id: typing.Optional[str] = OMIT,
reset_type: typing.Optional[BillingPlanCreditGrantResetType] = OMIT,
+ rollover_percentage: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> CreateBillingPlanCreditGrantResponse:
"""
@@ -1393,6 +1529,9 @@ def create_billing_plan_credit_grant(
reset_type : typing.Optional[BillingPlanCreditGrantResetType]
+ rollover_percentage : typing.Optional[int]
+ Percentage of unused credits that carry over when this grant resets. Only applies when reset_type is plan_period. Rolled-over credits expire at the next reset and are not rolled again. Defaults to 0.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -1437,6 +1576,7 @@ def create_billing_plan_credit_grant(
expiry_unit_count=expiry_unit_count,
plan_version_id=plan_version_id,
reset_type=reset_type,
+ rollover_percentage=rollover_percentage,
request_options=request_options,
)
return _response.data
@@ -1495,6 +1635,7 @@ def update_billing_plan_credit_grant(
expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT,
expiry_unit_count: typing.Optional[int] = OMIT,
reset_type: typing.Optional[BillingPlanCreditGrantResetType] = OMIT,
+ rollover_percentage: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> UpdateBillingPlanCreditGrantResponse:
"""
@@ -1537,6 +1678,9 @@ def update_billing_plan_credit_grant(
reset_type : typing.Optional[BillingPlanCreditGrantResetType]
+ rollover_percentage : typing.Optional[int]
+ Percentage of unused credits that carry over when this grant resets. Only applies when reset_type is plan_period. Rolled-over credits expire at the next reset and are not rolled again.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -1577,6 +1721,7 @@ def update_billing_plan_credit_grant(
expiry_unit=expiry_unit,
expiry_unit_count=expiry_unit_count,
reset_type=reset_type,
+ rollover_percentage=rollover_percentage,
request_options=request_options,
)
return _response.data
@@ -3041,6 +3186,163 @@ async def main() -> None:
)
return _response.data
+ async def acquire_credit_lease(
+ self,
+ *,
+ company_id: str,
+ credit_type_id: str,
+ requested_amount: float,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AcquireCreditLeaseResponse:
+ """
+ Parameters
+ ----------
+ company_id : str
+
+ credit_type_id : str
+
+ requested_amount : float
+
+ expires_at : typing.Optional[dt.datetime]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AcquireCreditLeaseResponse
+ Created
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.credits.acquire_credit_lease(
+ company_id="company_id",
+ credit_type_id="credit_type_id",
+ requested_amount=1.1,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.acquire_credit_lease(
+ company_id=company_id,
+ credit_type_id=credit_type_id,
+ requested_amount=requested_amount,
+ expires_at=expires_at,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def extend_credit_lease(
+ self,
+ lease_id: str,
+ *,
+ additional_amount: float,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ExtendCreditLeaseResponse:
+ """
+ Parameters
+ ----------
+ lease_id : str
+ lease_id
+
+ additional_amount : float
+
+ expires_at : typing.Optional[dt.datetime]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ExtendCreditLeaseResponse
+ OK
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.credits.extend_credit_lease(
+ lease_id="lease_id",
+ additional_amount=1.1,
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.extend_credit_lease(
+ lease_id, additional_amount=additional_amount, expires_at=expires_at, request_options=request_options
+ )
+ return _response.data
+
+ async def release_credit_lease(
+ self,
+ lease_id: str,
+ *,
+ request: ReleaseCreditLeaseRequestBody,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> ReleaseCreditLeaseResponse:
+ """
+ Parameters
+ ----------
+ lease_id : str
+ lease_id
+
+ request : ReleaseCreditLeaseRequestBody
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ ReleaseCreditLeaseResponse
+ OK
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.credits.release_credit_lease(
+ lease_id="lease_id",
+ request={"key": "value"},
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.release_credit_lease(
+ lease_id, request=request, request_options=request_options
+ )
+ return _response.data
+
async def get_enriched_credit_ledger(
self,
*,
@@ -3307,6 +3609,7 @@ async def create_billing_plan_credit_grant(
expiry_unit_count: typing.Optional[int] = OMIT,
plan_version_id: typing.Optional[str] = OMIT,
reset_type: typing.Optional[BillingPlanCreditGrantResetType] = OMIT,
+ rollover_percentage: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> CreateBillingPlanCreditGrantResponse:
"""
@@ -3352,6 +3655,9 @@ async def create_billing_plan_credit_grant(
reset_type : typing.Optional[BillingPlanCreditGrantResetType]
+ rollover_percentage : typing.Optional[int]
+ Percentage of unused credits that carry over when this grant resets. Only applies when reset_type is plan_period. Rolled-over credits expire at the next reset and are not rolled again. Defaults to 0.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -3404,6 +3710,7 @@ async def main() -> None:
expiry_unit_count=expiry_unit_count,
plan_version_id=plan_version_id,
reset_type=reset_type,
+ rollover_percentage=rollover_percentage,
request_options=request_options,
)
return _response.data
@@ -3470,6 +3777,7 @@ async def update_billing_plan_credit_grant(
expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT,
expiry_unit_count: typing.Optional[int] = OMIT,
reset_type: typing.Optional[BillingPlanCreditGrantResetType] = OMIT,
+ rollover_percentage: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> UpdateBillingPlanCreditGrantResponse:
"""
@@ -3512,6 +3820,9 @@ async def update_billing_plan_credit_grant(
reset_type : typing.Optional[BillingPlanCreditGrantResetType]
+ rollover_percentage : typing.Optional[int]
+ Percentage of unused credits that carry over when this grant resets. Only applies when reset_type is plan_period. Rolled-over credits expire at the next reset and are not rolled again.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -3560,6 +3871,7 @@ async def main() -> None:
expiry_unit=expiry_unit,
expiry_unit_count=expiry_unit_count,
reset_type=reset_type,
+ rollover_percentage=rollover_percentage,
request_options=request_options,
)
return _response.data
diff --git a/src/schematic/credits/raw_client.py b/src/schematic/credits/raw_client.py
index e745709..6814dab 100644
--- a/src/schematic/credits/raw_client.py
+++ b/src/schematic/credits/raw_client.py
@@ -35,7 +35,9 @@
from ..types.credit_event_type import CreditEventType
from ..types.credit_grant_sort_order import CreditGrantSortOrder
from ..types.credit_ledger_period import CreditLedgerPeriod
+from ..types.release_credit_lease_request_body import ReleaseCreditLeaseRequestBody
from ..types.sort_direction import SortDirection
+from .types.acquire_credit_lease_response import AcquireCreditLeaseResponse
from .types.count_billing_credits_grants_response import CountBillingCreditsGrantsResponse
from .types.count_billing_credits_response import CountBillingCreditsResponse
from .types.count_billing_plan_credit_grants_response import CountBillingPlanCreditGrantsResponse
@@ -48,6 +50,7 @@
from .types.create_credit_bundle_response import CreateCreditBundleResponse
from .types.delete_billing_plan_credit_grant_response import DeleteBillingPlanCreditGrantResponse
from .types.delete_credit_bundle_response import DeleteCreditBundleResponse
+from .types.extend_credit_lease_response import ExtendCreditLeaseResponse
from .types.get_credit_bundle_response import GetCreditBundleResponse
from .types.get_enriched_credit_ledger_response import GetEnrichedCreditLedgerResponse
from .types.get_single_billing_credit_response import GetSingleBillingCreditResponse
@@ -60,6 +63,7 @@
from .types.list_credit_bundles_response import ListCreditBundlesResponse
from .types.list_credit_event_ledger_response import ListCreditEventLedgerResponse
from .types.list_grants_for_credit_response import ListGrantsForCreditResponse
+from .types.release_credit_lease_response import ReleaseCreditLeaseResponse
from .types.soft_delete_billing_credit_response import SoftDeleteBillingCreditResponse
from .types.update_billing_credit_response import UpdateBillingCreditResponse
from .types.update_billing_plan_credit_grant_response import UpdateBillingPlanCreditGrantResponse
@@ -2425,6 +2429,355 @@ def list_grants_for_credit(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
+ def acquire_credit_lease(
+ self,
+ *,
+ company_id: str,
+ credit_type_id: str,
+ requested_amount: float,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[AcquireCreditLeaseResponse]:
+ """
+ Parameters
+ ----------
+ company_id : str
+
+ credit_type_id : str
+
+ requested_amount : float
+
+ expires_at : typing.Optional[dt.datetime]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[AcquireCreditLeaseResponse]
+ Created
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "billing/credits/lease",
+ method="POST",
+ json={
+ "company_id": company_id,
+ "credit_type_id": credit_type_id,
+ "expires_at": expires_at,
+ "requested_amount": requested_amount,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ AcquireCreditLeaseResponse,
+ parse_obj_as(
+ type_=AcquireCreditLeaseResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ def extend_credit_lease(
+ self,
+ lease_id: str,
+ *,
+ additional_amount: float,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[ExtendCreditLeaseResponse]:
+ """
+ Parameters
+ ----------
+ lease_id : str
+ lease_id
+
+ additional_amount : float
+
+ expires_at : typing.Optional[dt.datetime]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ExtendCreditLeaseResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"billing/credits/lease/{jsonable_encoder(lease_id)}/extend",
+ method="PUT",
+ json={
+ "additional_amount": additional_amount,
+ "expires_at": expires_at,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ExtendCreditLeaseResponse,
+ parse_obj_as(
+ type_=ExtendCreditLeaseResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ def release_credit_lease(
+ self,
+ lease_id: str,
+ *,
+ request: ReleaseCreditLeaseRequestBody,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[ReleaseCreditLeaseResponse]:
+ """
+ Parameters
+ ----------
+ lease_id : str
+ lease_id
+
+ request : ReleaseCreditLeaseRequestBody
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ReleaseCreditLeaseResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"billing/credits/lease/{jsonable_encoder(lease_id)}/release",
+ method="PUT",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ReleaseCreditLeaseResponse,
+ parse_obj_as(
+ type_=ReleaseCreditLeaseResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
def get_enriched_credit_ledger(
self,
*,
@@ -2853,6 +3206,7 @@ def create_billing_plan_credit_grant(
expiry_unit_count: typing.Optional[int] = OMIT,
plan_version_id: typing.Optional[str] = OMIT,
reset_type: typing.Optional[BillingPlanCreditGrantResetType] = OMIT,
+ rollover_percentage: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> HttpResponse[CreateBillingPlanCreditGrantResponse]:
"""
@@ -2898,6 +3252,9 @@ def create_billing_plan_credit_grant(
reset_type : typing.Optional[BillingPlanCreditGrantResetType]
+ rollover_percentage : typing.Optional[int]
+ Percentage of unused credits that carry over when this grant resets. Only applies when reset_type is plan_period. Rolled-over credits expire at the next reset and are not rolled again. Defaults to 0.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -2930,6 +3287,7 @@ def create_billing_plan_credit_grant(
"reset_cadence": reset_cadence,
"reset_start": reset_start,
"reset_type": reset_type,
+ "rollover_percentage": rollover_percentage,
},
headers={
"content-type": "application/json",
@@ -3125,6 +3483,7 @@ def update_billing_plan_credit_grant(
expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT,
expiry_unit_count: typing.Optional[int] = OMIT,
reset_type: typing.Optional[BillingPlanCreditGrantResetType] = OMIT,
+ rollover_percentage: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> HttpResponse[UpdateBillingPlanCreditGrantResponse]:
"""
@@ -3167,6 +3526,9 @@ def update_billing_plan_credit_grant(
reset_type : typing.Optional[BillingPlanCreditGrantResetType]
+ rollover_percentage : typing.Optional[int]
+ Percentage of unused credits that carry over when this grant resets. Only applies when reset_type is plan_period. Rolled-over credits expire at the next reset and are not rolled again.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -3196,6 +3558,7 @@ def update_billing_plan_credit_grant(
"reset_cadence": reset_cadence,
"reset_start": reset_start,
"reset_type": reset_type,
+ "rollover_percentage": rollover_percentage,
},
headers={
"content-type": "application/json",
@@ -3919,10 +4282,260 @@ async def list_billing_credits(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def create_billing_credit(
+ async def create_billing_credit(
+ self,
+ *,
+ currency: str,
+ description: str,
+ name: str,
+ burn_strategy: typing.Optional[BillingCreditBurnStrategy] = OMIT,
+ currency_prices: typing.Optional[typing.Sequence[CreditCurrencyPriceRequestBody]] = OMIT,
+ default_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT,
+ default_expiry_unit_count: typing.Optional[int] = OMIT,
+ default_rollover_policy: typing.Optional[BillingCreditRolloverPolicy] = OMIT,
+ icon: typing.Optional[str] = OMIT,
+ per_unit_price: typing.Optional[int] = OMIT,
+ per_unit_price_decimal: typing.Optional[str] = OMIT,
+ plural_name: typing.Optional[str] = OMIT,
+ singular_name: typing.Optional[str] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateBillingCreditResponse]:
+ """
+ Parameters
+ ----------
+ currency : str
+
+ description : str
+
+ name : str
+
+ burn_strategy : typing.Optional[BillingCreditBurnStrategy]
+
+ currency_prices : typing.Optional[typing.Sequence[CreditCurrencyPriceRequestBody]]
+
+ default_expiry_unit : typing.Optional[BillingCreditExpiryUnit]
+
+ default_expiry_unit_count : typing.Optional[int]
+
+ default_rollover_policy : typing.Optional[BillingCreditRolloverPolicy]
+
+ icon : typing.Optional[str]
+
+ per_unit_price : typing.Optional[int]
+
+ per_unit_price_decimal : typing.Optional[str]
+
+ plural_name : typing.Optional[str]
+
+ singular_name : typing.Optional[str]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[CreateBillingCreditResponse]
+ Created
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "billing/credits",
+ method="POST",
+ json={
+ "burn_strategy": burn_strategy,
+ "currency": currency,
+ "currency_prices": convert_and_respect_annotation_metadata(
+ object_=currency_prices,
+ annotation=typing.Sequence[CreditCurrencyPriceRequestBody],
+ direction="write",
+ ),
+ "default_expiry_unit": default_expiry_unit,
+ "default_expiry_unit_count": default_expiry_unit_count,
+ "default_rollover_policy": default_rollover_policy,
+ "description": description,
+ "icon": icon,
+ "name": name,
+ "per_unit_price": per_unit_price,
+ "per_unit_price_decimal": per_unit_price_decimal,
+ "plural_name": plural_name,
+ "singular_name": singular_name,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateBillingCreditResponse,
+ parse_obj_as(
+ type_=CreateBillingCreditResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ async def get_single_billing_credit(
+ self, credit_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetSingleBillingCreditResponse]:
+ """
+ Parameters
+ ----------
+ credit_id : str
+ credit_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[GetSingleBillingCreditResponse]
+ OK
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"billing/credits/{jsonable_encoder(credit_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetSingleBillingCreditResponse,
+ parse_obj_as(
+ type_=GetSingleBillingCreditResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ async def update_billing_credit(
self,
+ credit_id: str,
*,
- currency: str,
description: str,
name: str,
burn_strategy: typing.Optional[BillingCreditBurnStrategy] = OMIT,
@@ -3936,11 +4549,12 @@ async def create_billing_credit(
plural_name: typing.Optional[str] = OMIT,
singular_name: typing.Optional[str] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[CreateBillingCreditResponse]:
+ ) -> AsyncHttpResponse[UpdateBillingCreditResponse]:
"""
Parameters
----------
- currency : str
+ credit_id : str
+ credit_id
description : str
@@ -3971,15 +4585,14 @@ async def create_billing_credit(
Returns
-------
- AsyncHttpResponse[CreateBillingCreditResponse]
- Created
+ AsyncHttpResponse[UpdateBillingCreditResponse]
+ OK
"""
_response = await self._client_wrapper.httpx_client.request(
- "billing/credits",
- method="POST",
+ f"billing/credits/{jsonable_encoder(credit_id)}",
+ method="PUT",
json={
"burn_strategy": burn_strategy,
- "currency": currency,
"currency_prices": convert_and_respect_annotation_metadata(
object_=currency_prices,
annotation=typing.Sequence[CreditCurrencyPriceRequestBody],
@@ -4005,9 +4618,9 @@ async def create_billing_credit(
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- CreateBillingCreditResponse,
+ UpdateBillingCreditResponse,
parse_obj_as(
- type_=CreateBillingCreditResponse, # type: ignore
+ type_=UpdateBillingCreditResponse, # type: ignore
object_=_response.json(),
),
)
@@ -4080,9 +4693,9 @@ async def create_billing_credit(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def get_single_billing_credit(
+ async def soft_delete_billing_credit(
self, credit_id: str, *, request_options: typing.Optional[RequestOptions] = None
- ) -> AsyncHttpResponse[GetSingleBillingCreditResponse]:
+ ) -> AsyncHttpResponse[SoftDeleteBillingCreditResponse]:
"""
Parameters
----------
@@ -4094,24 +4707,137 @@ async def get_single_billing_credit(
Returns
-------
- AsyncHttpResponse[GetSingleBillingCreditResponse]
+ AsyncHttpResponse[SoftDeleteBillingCreditResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
f"billing/credits/{jsonable_encoder(credit_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ SoftDeleteBillingCreditResponse,
+ parse_obj_as(
+ type_=SoftDeleteBillingCreditResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ async def list_company_credit_balances(
+ self, *, company_id: str, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[ListCompanyCreditBalancesResponse]:
+ """
+ Parameters
+ ----------
+ company_id : str
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[ListCompanyCreditBalancesResponse]
+ OK
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ "billing/credits/balance",
method="GET",
+ params={
+ "company_id": company_id,
+ },
request_options=request_options,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- GetSingleBillingCreditResponse,
+ ListCompanyCreditBalancesResponse,
parse_obj_as(
- type_=GetSingleBillingCreditResponse, # type: ignore
+ type_=ListCompanyCreditBalancesResponse, # type: ignore
object_=_response.json(),
),
)
return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
if _response.status_code == 401:
raise UnauthorizedError(
headers=dict(_response.headers),
@@ -4169,95 +4895,61 @@ async def get_single_billing_credit(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def update_billing_credit(
+ async def list_credit_bundles(
self,
- credit_id: str,
*,
- description: str,
- name: str,
- burn_strategy: typing.Optional[BillingCreditBurnStrategy] = OMIT,
- currency_prices: typing.Optional[typing.Sequence[CreditCurrencyPriceRequestBody]] = OMIT,
- default_expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT,
- default_expiry_unit_count: typing.Optional[int] = OMIT,
- default_rollover_policy: typing.Optional[BillingCreditRolloverPolicy] = OMIT,
- icon: typing.Optional[str] = OMIT,
- per_unit_price: typing.Optional[int] = OMIT,
- per_unit_price_decimal: typing.Optional[str] = OMIT,
- plural_name: typing.Optional[str] = OMIT,
- singular_name: typing.Optional[str] = OMIT,
+ ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
+ credit_id: typing.Optional[str] = None,
+ status: typing.Optional[BillingCreditBundleStatus] = None,
+ bundle_type: typing.Optional[BillingCreditBundleType] = None,
+ limit: typing.Optional[int] = None,
+ offset: typing.Optional[int] = None,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[UpdateBillingCreditResponse]:
+ ) -> AsyncHttpResponse[ListCreditBundlesResponse]:
"""
Parameters
----------
- credit_id : str
- credit_id
-
- description : str
-
- name : str
-
- burn_strategy : typing.Optional[BillingCreditBurnStrategy]
-
- currency_prices : typing.Optional[typing.Sequence[CreditCurrencyPriceRequestBody]]
-
- default_expiry_unit : typing.Optional[BillingCreditExpiryUnit]
-
- default_expiry_unit_count : typing.Optional[int]
-
- default_rollover_policy : typing.Optional[BillingCreditRolloverPolicy]
+ ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
- icon : typing.Optional[str]
+ credit_id : typing.Optional[str]
- per_unit_price : typing.Optional[int]
+ status : typing.Optional[BillingCreditBundleStatus]
- per_unit_price_decimal : typing.Optional[str]
+ bundle_type : typing.Optional[BillingCreditBundleType]
- plural_name : typing.Optional[str]
+ limit : typing.Optional[int]
+ Page limit (default 100)
- singular_name : typing.Optional[str]
+ offset : typing.Optional[int]
+ Page offset (default 0)
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[UpdateBillingCreditResponse]
+ AsyncHttpResponse[ListCreditBundlesResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- f"billing/credits/{jsonable_encoder(credit_id)}",
- method="PUT",
- json={
- "burn_strategy": burn_strategy,
- "currency_prices": convert_and_respect_annotation_metadata(
- object_=currency_prices,
- annotation=typing.Sequence[CreditCurrencyPriceRequestBody],
- direction="write",
- ),
- "default_expiry_unit": default_expiry_unit,
- "default_expiry_unit_count": default_expiry_unit_count,
- "default_rollover_policy": default_rollover_policy,
- "description": description,
- "icon": icon,
- "name": name,
- "per_unit_price": per_unit_price,
- "per_unit_price_decimal": per_unit_price_decimal,
- "plural_name": plural_name,
- "singular_name": singular_name,
- },
- headers={
- "content-type": "application/json",
+ "billing/credits/bundles",
+ method="GET",
+ params={
+ "ids": ids,
+ "credit_id": credit_id,
+ "status": status,
+ "bundle_type": bundle_type,
+ "limit": limit,
+ "offset": offset,
},
request_options=request_options,
- omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- UpdateBillingCreditResponse,
+ ListCreditBundlesResponse,
parse_obj_as(
- type_=UpdateBillingCreditResponse, # type: ignore
+ type_=ListCreditBundlesResponse, # type: ignore
object_=_response.json(),
),
)
@@ -4330,34 +5022,91 @@ async def update_billing_credit(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def soft_delete_billing_credit(
- self, credit_id: str, *, request_options: typing.Optional[RequestOptions] = None
- ) -> AsyncHttpResponse[SoftDeleteBillingCreditResponse]:
+ async def create_credit_bundle(
+ self,
+ *,
+ bundle_name: str,
+ credit_id: str,
+ currency: str,
+ price_per_unit: int,
+ bundle_type: typing.Optional[BillingCreditBundleType] = OMIT,
+ currency_prices: typing.Optional[typing.Sequence[CreditBundleCurrencyPriceRequestBody]] = OMIT,
+ expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT,
+ expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT,
+ expiry_unit_count: typing.Optional[int] = OMIT,
+ price_per_unit_decimal: typing.Optional[str] = OMIT,
+ quantity: typing.Optional[int] = OMIT,
+ status: typing.Optional[BillingCreditBundleStatus] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CreateCreditBundleResponse]:
"""
Parameters
----------
+ bundle_name : str
+
credit_id : str
- credit_id
+
+ currency : str
+
+ price_per_unit : int
+
+ bundle_type : typing.Optional[BillingCreditBundleType]
+
+ currency_prices : typing.Optional[typing.Sequence[CreditBundleCurrencyPriceRequestBody]]
+
+ expiry_type : typing.Optional[BillingCreditExpiryType]
+
+ expiry_unit : typing.Optional[BillingCreditExpiryUnit]
+
+ expiry_unit_count : typing.Optional[int]
+
+ price_per_unit_decimal : typing.Optional[str]
+
+ quantity : typing.Optional[int]
+
+ status : typing.Optional[BillingCreditBundleStatus]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[SoftDeleteBillingCreditResponse]
- OK
+ AsyncHttpResponse[CreateCreditBundleResponse]
+ Created
"""
_response = await self._client_wrapper.httpx_client.request(
- f"billing/credits/{jsonable_encoder(credit_id)}",
- method="DELETE",
+ "billing/credits/bundles",
+ method="POST",
+ json={
+ "bundle_name": bundle_name,
+ "bundle_type": bundle_type,
+ "credit_id": credit_id,
+ "currency": currency,
+ "currency_prices": convert_and_respect_annotation_metadata(
+ object_=currency_prices,
+ annotation=typing.Sequence[CreditBundleCurrencyPriceRequestBody],
+ direction="write",
+ ),
+ "expiry_type": expiry_type,
+ "expiry_unit": expiry_unit,
+ "expiry_unit_count": expiry_unit_count,
+ "price_per_unit": price_per_unit,
+ "price_per_unit_decimal": price_per_unit_decimal,
+ "quantity": quantity,
+ "status": status,
+ },
+ headers={
+ "content-type": "application/json",
+ },
request_options=request_options,
+ omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- SoftDeleteBillingCreditResponse,
+ CreateCreditBundleResponse,
parse_obj_as(
- type_=SoftDeleteBillingCreditResponse, # type: ignore
+ type_=CreateCreditBundleResponse, # type: ignore
object_=_response.json(),
),
)
@@ -4430,51 +5179,38 @@ async def soft_delete_billing_credit(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def list_company_credit_balances(
- self, *, company_id: str, request_options: typing.Optional[RequestOptions] = None
- ) -> AsyncHttpResponse[ListCompanyCreditBalancesResponse]:
+ async def get_credit_bundle(
+ self, bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetCreditBundleResponse]:
"""
Parameters
----------
- company_id : str
+ bundle_id : str
+ bundle_id
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[ListCompanyCreditBalancesResponse]
+ AsyncHttpResponse[GetCreditBundleResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- "billing/credits/balance",
+ f"billing/credits/bundles/{jsonable_encoder(bundle_id)}",
method="GET",
- params={
- "company_id": company_id,
- },
request_options=request_options,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- ListCompanyCreditBalancesResponse,
+ GetCreditBundleResponse,
parse_obj_as(
- type_=ListCompanyCreditBalancesResponse, # type: ignore
+ type_=GetCreditBundleResponse, # type: ignore
object_=_response.json(),
),
)
return AsyncHttpResponse(response=_response, data=_data)
- if _response.status_code == 400:
- raise BadRequestError(
- headers=dict(_response.headers),
- body=typing.cast(
- types_api_error_ApiError,
- parse_obj_as(
- type_=types_api_error_ApiError, # type: ignore
- object_=_response.json(),
- ),
- ),
- )
if _response.status_code == 401:
raise UnauthorizedError(
headers=dict(_response.headers),
@@ -4532,61 +5268,83 @@ async def list_company_credit_balances(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def list_credit_bundles(
+ async def update_credit_bundle_details(
self,
+ bundle_id: str,
*,
- ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
- credit_id: typing.Optional[str] = None,
- status: typing.Optional[BillingCreditBundleStatus] = None,
- bundle_type: typing.Optional[BillingCreditBundleType] = None,
- limit: typing.Optional[int] = None,
- offset: typing.Optional[int] = None,
+ bundle_name: str,
+ price_per_unit: int,
+ currency_prices: typing.Optional[typing.Sequence[CreditBundleCurrencyPriceRequestBody]] = OMIT,
+ expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT,
+ expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT,
+ expiry_unit_count: typing.Optional[int] = OMIT,
+ price_per_unit_decimal: typing.Optional[str] = OMIT,
+ quantity: typing.Optional[int] = OMIT,
+ status: typing.Optional[BillingCreditBundleStatus] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[ListCreditBundlesResponse]:
+ ) -> AsyncHttpResponse[UpdateCreditBundleDetailsResponse]:
"""
Parameters
----------
- ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ bundle_id : str
+ bundle_id
- credit_id : typing.Optional[str]
+ bundle_name : str
- status : typing.Optional[BillingCreditBundleStatus]
+ price_per_unit : int
- bundle_type : typing.Optional[BillingCreditBundleType]
+ currency_prices : typing.Optional[typing.Sequence[CreditBundleCurrencyPriceRequestBody]]
- limit : typing.Optional[int]
- Page limit (default 100)
+ expiry_type : typing.Optional[BillingCreditExpiryType]
- offset : typing.Optional[int]
- Page offset (default 0)
+ expiry_unit : typing.Optional[BillingCreditExpiryUnit]
+
+ expiry_unit_count : typing.Optional[int]
+
+ price_per_unit_decimal : typing.Optional[str]
+
+ quantity : typing.Optional[int]
+
+ status : typing.Optional[BillingCreditBundleStatus]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[ListCreditBundlesResponse]
+ AsyncHttpResponse[UpdateCreditBundleDetailsResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- "billing/credits/bundles",
- method="GET",
- params={
- "ids": ids,
- "credit_id": credit_id,
+ f"billing/credits/bundles/{jsonable_encoder(bundle_id)}",
+ method="PUT",
+ json={
+ "bundle_name": bundle_name,
+ "currency_prices": convert_and_respect_annotation_metadata(
+ object_=currency_prices,
+ annotation=typing.Sequence[CreditBundleCurrencyPriceRequestBody],
+ direction="write",
+ ),
+ "expiry_type": expiry_type,
+ "expiry_unit": expiry_unit,
+ "expiry_unit_count": expiry_unit_count,
+ "price_per_unit": price_per_unit,
+ "price_per_unit_decimal": price_per_unit_decimal,
+ "quantity": quantity,
"status": status,
- "bundle_type": bundle_type,
- "limit": limit,
- "offset": offset,
+ },
+ headers={
+ "content-type": "application/json",
},
request_options=request_options,
+ omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- ListCreditBundlesResponse,
+ UpdateCreditBundleDetailsResponse,
parse_obj_as(
- type_=ListCreditBundlesResponse, # type: ignore
+ type_=UpdateCreditBundleDetailsResponse, # type: ignore
object_=_response.json(),
),
)
@@ -4659,91 +5417,34 @@ async def list_credit_bundles(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def create_credit_bundle(
- self,
- *,
- bundle_name: str,
- credit_id: str,
- currency: str,
- price_per_unit: int,
- bundle_type: typing.Optional[BillingCreditBundleType] = OMIT,
- currency_prices: typing.Optional[typing.Sequence[CreditBundleCurrencyPriceRequestBody]] = OMIT,
- expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT,
- expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT,
- expiry_unit_count: typing.Optional[int] = OMIT,
- price_per_unit_decimal: typing.Optional[str] = OMIT,
- quantity: typing.Optional[int] = OMIT,
- status: typing.Optional[BillingCreditBundleStatus] = OMIT,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[CreateCreditBundleResponse]:
+ async def delete_credit_bundle(
+ self, bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[DeleteCreditBundleResponse]:
"""
Parameters
----------
- bundle_name : str
-
- credit_id : str
-
- currency : str
-
- price_per_unit : int
-
- bundle_type : typing.Optional[BillingCreditBundleType]
-
- currency_prices : typing.Optional[typing.Sequence[CreditBundleCurrencyPriceRequestBody]]
-
- expiry_type : typing.Optional[BillingCreditExpiryType]
-
- expiry_unit : typing.Optional[BillingCreditExpiryUnit]
-
- expiry_unit_count : typing.Optional[int]
-
- price_per_unit_decimal : typing.Optional[str]
-
- quantity : typing.Optional[int]
-
- status : typing.Optional[BillingCreditBundleStatus]
+ bundle_id : str
+ bundle_id
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[CreateCreditBundleResponse]
- Created
+ AsyncHttpResponse[DeleteCreditBundleResponse]
+ OK
"""
_response = await self._client_wrapper.httpx_client.request(
- "billing/credits/bundles",
- method="POST",
- json={
- "bundle_name": bundle_name,
- "bundle_type": bundle_type,
- "credit_id": credit_id,
- "currency": currency,
- "currency_prices": convert_and_respect_annotation_metadata(
- object_=currency_prices,
- annotation=typing.Sequence[CreditBundleCurrencyPriceRequestBody],
- direction="write",
- ),
- "expiry_type": expiry_type,
- "expiry_unit": expiry_unit,
- "expiry_unit_count": expiry_unit_count,
- "price_per_unit": price_per_unit,
- "price_per_unit_decimal": price_per_unit_decimal,
- "quantity": quantity,
- "status": status,
- },
- headers={
- "content-type": "application/json",
- },
+ f"billing/credits/bundles/{jsonable_encoder(bundle_id)}",
+ method="DELETE",
request_options=request_options,
- omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- CreateCreditBundleResponse,
+ DeleteCreditBundleResponse,
parse_obj_as(
- type_=CreateCreditBundleResponse, # type: ignore
+ type_=DeleteCreditBundleResponse, # type: ignore
object_=_response.json(),
),
)
@@ -4816,38 +5517,76 @@ async def create_credit_bundle(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def get_credit_bundle(
- self, bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None
- ) -> AsyncHttpResponse[GetCreditBundleResponse]:
+ async def count_credit_bundles(
+ self,
+ *,
+ ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
+ credit_id: typing.Optional[str] = None,
+ status: typing.Optional[BillingCreditBundleStatus] = None,
+ bundle_type: typing.Optional[BillingCreditBundleType] = None,
+ limit: typing.Optional[int] = None,
+ offset: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[CountCreditBundlesResponse]:
"""
Parameters
----------
- bundle_id : str
- bundle_id
+ ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+
+ credit_id : typing.Optional[str]
+
+ status : typing.Optional[BillingCreditBundleStatus]
+
+ bundle_type : typing.Optional[BillingCreditBundleType]
+
+ limit : typing.Optional[int]
+ Page limit (default 100)
+
+ offset : typing.Optional[int]
+ Page offset (default 0)
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[GetCreditBundleResponse]
+ AsyncHttpResponse[CountCreditBundlesResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- f"billing/credits/bundles/{jsonable_encoder(bundle_id)}",
+ "billing/credits/bundles/count",
method="GET",
+ params={
+ "ids": ids,
+ "credit_id": credit_id,
+ "status": status,
+ "bundle_type": bundle_type,
+ "limit": limit,
+ "offset": offset,
+ },
request_options=request_options,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- GetCreditBundleResponse,
+ CountCreditBundlesResponse,
parse_obj_as(
- type_=GetCreditBundleResponse, # type: ignore
+ type_=CountCreditBundlesResponse, # type: ignore
object_=_response.json(),
),
)
return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
if _response.status_code == 401:
raise UnauthorizedError(
headers=dict(_response.headers),
@@ -4905,83 +5644,53 @@ async def get_credit_bundle(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def update_credit_bundle_details(
+ async def count_billing_credits(
self,
- bundle_id: str,
*,
- bundle_name: str,
- price_per_unit: int,
- currency_prices: typing.Optional[typing.Sequence[CreditBundleCurrencyPriceRequestBody]] = OMIT,
- expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT,
- expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT,
- expiry_unit_count: typing.Optional[int] = OMIT,
- price_per_unit_decimal: typing.Optional[str] = OMIT,
- quantity: typing.Optional[int] = OMIT,
- status: typing.Optional[BillingCreditBundleStatus] = OMIT,
+ ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
+ name: typing.Optional[str] = None,
+ limit: typing.Optional[int] = None,
+ offset: typing.Optional[int] = None,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[UpdateCreditBundleDetailsResponse]:
+ ) -> AsyncHttpResponse[CountBillingCreditsResponse]:
"""
Parameters
----------
- bundle_id : str
- bundle_id
-
- bundle_name : str
-
- price_per_unit : int
-
- currency_prices : typing.Optional[typing.Sequence[CreditBundleCurrencyPriceRequestBody]]
-
- expiry_type : typing.Optional[BillingCreditExpiryType]
-
- expiry_unit : typing.Optional[BillingCreditExpiryUnit]
-
- expiry_unit_count : typing.Optional[int]
+ ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
- price_per_unit_decimal : typing.Optional[str]
+ name : typing.Optional[str]
- quantity : typing.Optional[int]
+ limit : typing.Optional[int]
+ Page limit (default 100)
- status : typing.Optional[BillingCreditBundleStatus]
+ offset : typing.Optional[int]
+ Page offset (default 0)
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[UpdateCreditBundleDetailsResponse]
+ AsyncHttpResponse[CountBillingCreditsResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- f"billing/credits/bundles/{jsonable_encoder(bundle_id)}",
- method="PUT",
- json={
- "bundle_name": bundle_name,
- "currency_prices": convert_and_respect_annotation_metadata(
- object_=currency_prices,
- annotation=typing.Sequence[CreditBundleCurrencyPriceRequestBody],
- direction="write",
- ),
- "expiry_type": expiry_type,
- "expiry_unit": expiry_unit,
- "expiry_unit_count": expiry_unit_count,
- "price_per_unit": price_per_unit,
- "price_per_unit_decimal": price_per_unit_decimal,
- "quantity": quantity,
- "status": status,
- },
- headers={
- "content-type": "application/json",
+ "billing/credits/count",
+ method="GET",
+ params={
+ "ids": ids,
+ "name": name,
+ "limit": limit,
+ "offset": offset,
},
request_options=request_options,
- omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- UpdateCreditBundleDetailsResponse,
+ CountBillingCreditsResponse,
parse_obj_as(
- type_=UpdateCreditBundleDetailsResponse, # type: ignore
+ type_=CountBillingCreditsResponse, # type: ignore
object_=_response.json(),
),
)
@@ -5054,34 +5763,47 @@ async def update_credit_bundle_details(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def delete_credit_bundle(
- self, bundle_id: str, *, request_options: typing.Optional[RequestOptions] = None
- ) -> AsyncHttpResponse[DeleteCreditBundleResponse]:
+ async def zero_out_grant(
+ self,
+ grant_id: str,
+ *,
+ reason: typing.Optional[BillingCreditGrantZeroedOutReason] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[ZeroOutGrantResponse]:
"""
Parameters
----------
- bundle_id : str
- bundle_id
+ grant_id : str
+ grant_id
+
+ reason : typing.Optional[BillingCreditGrantZeroedOutReason]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[DeleteCreditBundleResponse]
+ AsyncHttpResponse[ZeroOutGrantResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- f"billing/credits/bundles/{jsonable_encoder(bundle_id)}",
- method="DELETE",
+ f"billing/credits/grants/{jsonable_encoder(grant_id)}/zero-out",
+ method="PUT",
+ json={
+ "reason": reason,
+ },
+ headers={
+ "content-type": "application/json",
+ },
request_options=request_options,
+ omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- DeleteCreditBundleResponse,
+ ZeroOutGrantResponse,
parse_obj_as(
- type_=DeleteCreditBundleResponse, # type: ignore
+ type_=ZeroOutGrantResponse, # type: ignore
object_=_response.json(),
),
)
@@ -5154,61 +5876,87 @@ async def delete_credit_bundle(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def count_credit_bundles(
+ async def grant_billing_credits_to_company(
self,
*,
- ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
- credit_id: typing.Optional[str] = None,
- status: typing.Optional[BillingCreditBundleStatus] = None,
- bundle_type: typing.Optional[BillingCreditBundleType] = None,
- limit: typing.Optional[int] = None,
- offset: typing.Optional[int] = None,
+ company_id: str,
+ credit_id: str,
+ quantity: int,
+ reason: BillingCreditGrantReason,
+ billing_periods_count: typing.Optional[int] = OMIT,
+ currency: typing.Optional[str] = OMIT,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
+ expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT,
+ expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT,
+ expiry_unit_count: typing.Optional[int] = OMIT,
+ renewal_enabled: typing.Optional[bool] = OMIT,
+ renewal_period: typing.Optional[BillingPlanCreditGrantResetStart] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[CountCreditBundlesResponse]:
+ ) -> AsyncHttpResponse[GrantBillingCreditsToCompanyResponse]:
"""
Parameters
----------
- ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ company_id : str
- credit_id : typing.Optional[str]
+ credit_id : str
- status : typing.Optional[BillingCreditBundleStatus]
+ quantity : int
- bundle_type : typing.Optional[BillingCreditBundleType]
+ reason : BillingCreditGrantReason
- limit : typing.Optional[int]
- Page limit (default 100)
+ billing_periods_count : typing.Optional[int]
- offset : typing.Optional[int]
- Page offset (default 0)
+ currency : typing.Optional[str]
+
+ expires_at : typing.Optional[dt.datetime]
+
+ expiry_type : typing.Optional[BillingCreditExpiryType]
+
+ expiry_unit : typing.Optional[BillingCreditExpiryUnit]
+
+ expiry_unit_count : typing.Optional[int]
+
+ renewal_enabled : typing.Optional[bool]
+
+ renewal_period : typing.Optional[BillingPlanCreditGrantResetStart]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[CountCreditBundlesResponse]
- OK
+ AsyncHttpResponse[GrantBillingCreditsToCompanyResponse]
+ Created
"""
_response = await self._client_wrapper.httpx_client.request(
- "billing/credits/bundles/count",
- method="GET",
- params={
- "ids": ids,
+ "billing/credits/grants/company",
+ method="POST",
+ json={
+ "billing_periods_count": billing_periods_count,
+ "company_id": company_id,
"credit_id": credit_id,
- "status": status,
- "bundle_type": bundle_type,
- "limit": limit,
- "offset": offset,
+ "currency": currency,
+ "expires_at": expires_at,
+ "expiry_type": expiry_type,
+ "expiry_unit": expiry_unit,
+ "expiry_unit_count": expiry_unit_count,
+ "quantity": quantity,
+ "reason": reason,
+ "renewal_enabled": renewal_enabled,
+ "renewal_period": renewal_period,
+ },
+ headers={
+ "content-type": "application/json",
},
request_options=request_options,
+ omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- CountCreditBundlesResponse,
+ GrantBillingCreditsToCompanyResponse,
parse_obj_as(
- type_=CountCreditBundlesResponse, # type: ignore
+ type_=GrantBillingCreditsToCompanyResponse, # type: ignore
object_=_response.json(),
),
)
@@ -5281,21 +6029,24 @@ async def count_credit_bundles(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def count_billing_credits(
+ async def count_company_grants(
self,
*,
- ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
- name: typing.Optional[str] = None,
+ company_id: typing.Optional[str] = None,
+ order: typing.Optional[CreditGrantSortOrder] = None,
+ dir: typing.Optional[SortDirection] = None,
limit: typing.Optional[int] = None,
offset: typing.Optional[int] = None,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[CountBillingCreditsResponse]:
+ ) -> AsyncHttpResponse[CountCompanyGrantsResponse]:
"""
Parameters
----------
- ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ company_id : typing.Optional[str]
- name : typing.Optional[str]
+ order : typing.Optional[CreditGrantSortOrder]
+
+ dir : typing.Optional[SortDirection]
limit : typing.Optional[int]
Page limit (default 100)
@@ -5308,15 +6059,16 @@ async def count_billing_credits(
Returns
-------
- AsyncHttpResponse[CountBillingCreditsResponse]
+ AsyncHttpResponse[CountCompanyGrantsResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- "billing/credits/count",
+ "billing/credits/grants/company/count",
method="GET",
params={
- "ids": ids,
- "name": name,
+ "company_id": company_id,
+ "order": order,
+ "dir": dir,
"limit": limit,
"offset": offset,
},
@@ -5325,9 +6077,9 @@ async def count_billing_credits(
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- CountBillingCreditsResponse,
+ CountCompanyGrantsResponse,
parse_obj_as(
- type_=CountBillingCreditsResponse, # type: ignore
+ type_=CountCompanyGrantsResponse, # type: ignore
object_=_response.json(),
),
)
@@ -5400,47 +6152,57 @@ async def count_billing_credits(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def zero_out_grant(
+ async def list_company_grants(
self,
- grant_id: str,
*,
- reason: typing.Optional[BillingCreditGrantZeroedOutReason] = OMIT,
+ company_id: typing.Optional[str] = None,
+ order: typing.Optional[CreditGrantSortOrder] = None,
+ dir: typing.Optional[SortDirection] = None,
+ limit: typing.Optional[int] = None,
+ offset: typing.Optional[int] = None,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[ZeroOutGrantResponse]:
+ ) -> AsyncHttpResponse[ListCompanyGrantsResponse]:
"""
Parameters
----------
- grant_id : str
- grant_id
+ company_id : typing.Optional[str]
- reason : typing.Optional[BillingCreditGrantZeroedOutReason]
+ order : typing.Optional[CreditGrantSortOrder]
+
+ dir : typing.Optional[SortDirection]
+
+ limit : typing.Optional[int]
+ Page limit (default 100)
+
+ offset : typing.Optional[int]
+ Page offset (default 0)
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[ZeroOutGrantResponse]
+ AsyncHttpResponse[ListCompanyGrantsResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- f"billing/credits/grants/{jsonable_encoder(grant_id)}/zero-out",
- method="PUT",
- json={
- "reason": reason,
- },
- headers={
- "content-type": "application/json",
+ "billing/credits/grants/company/list",
+ method="GET",
+ params={
+ "company_id": company_id,
+ "order": order,
+ "dir": dir,
+ "limit": limit,
+ "offset": offset,
},
request_options=request_options,
- omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- ZeroOutGrantResponse,
+ ListCompanyGrantsResponse,
parse_obj_as(
- type_=ZeroOutGrantResponse, # type: ignore
+ type_=ListCompanyGrantsResponse, # type: ignore
object_=_response.json(),
),
)
@@ -5513,87 +6275,53 @@ async def zero_out_grant(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def grant_billing_credits_to_company(
+ async def count_billing_credits_grants(
self,
*,
- company_id: str,
- credit_id: str,
- quantity: int,
- reason: BillingCreditGrantReason,
- billing_periods_count: typing.Optional[int] = OMIT,
- currency: typing.Optional[str] = OMIT,
- expires_at: typing.Optional[dt.datetime] = OMIT,
- expiry_type: typing.Optional[BillingCreditExpiryType] = OMIT,
- expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT,
- expiry_unit_count: typing.Optional[int] = OMIT,
- renewal_enabled: typing.Optional[bool] = OMIT,
- renewal_period: typing.Optional[BillingPlanCreditGrantResetStart] = OMIT,
+ credit_id: typing.Optional[str] = None,
+ ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
+ limit: typing.Optional[int] = None,
+ offset: typing.Optional[int] = None,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[GrantBillingCreditsToCompanyResponse]:
+ ) -> AsyncHttpResponse[CountBillingCreditsGrantsResponse]:
"""
Parameters
----------
- company_id : str
-
- credit_id : str
-
- quantity : int
-
- reason : BillingCreditGrantReason
-
- billing_periods_count : typing.Optional[int]
-
- currency : typing.Optional[str]
-
- expires_at : typing.Optional[dt.datetime]
-
- expiry_type : typing.Optional[BillingCreditExpiryType]
-
- expiry_unit : typing.Optional[BillingCreditExpiryUnit]
+ credit_id : typing.Optional[str]
- expiry_unit_count : typing.Optional[int]
+ ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
- renewal_enabled : typing.Optional[bool]
+ limit : typing.Optional[int]
+ Page limit (default 100)
- renewal_period : typing.Optional[BillingPlanCreditGrantResetStart]
+ offset : typing.Optional[int]
+ Page offset (default 0)
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[GrantBillingCreditsToCompanyResponse]
- Created
+ AsyncHttpResponse[CountBillingCreditsGrantsResponse]
+ OK
"""
_response = await self._client_wrapper.httpx_client.request(
- "billing/credits/grants/company",
- method="POST",
- json={
- "billing_periods_count": billing_periods_count,
- "company_id": company_id,
+ "billing/credits/grants/count",
+ method="GET",
+ params={
"credit_id": credit_id,
- "currency": currency,
- "expires_at": expires_at,
- "expiry_type": expiry_type,
- "expiry_unit": expiry_unit,
- "expiry_unit_count": expiry_unit_count,
- "quantity": quantity,
- "reason": reason,
- "renewal_enabled": renewal_enabled,
- "renewal_period": renewal_period,
- },
- headers={
- "content-type": "application/json",
+ "ids": ids,
+ "limit": limit,
+ "offset": offset,
},
request_options=request_options,
- omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- GrantBillingCreditsToCompanyResponse,
+ CountBillingCreditsGrantsResponse,
parse_obj_as(
- type_=GrantBillingCreditsToCompanyResponse, # type: ignore
+ type_=CountBillingCreditsGrantsResponse, # type: ignore
object_=_response.json(),
),
)
@@ -5666,24 +6394,21 @@ async def grant_billing_credits_to_company(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def count_company_grants(
+ async def list_grants_for_credit(
self,
*,
- company_id: typing.Optional[str] = None,
- order: typing.Optional[CreditGrantSortOrder] = None,
- dir: typing.Optional[SortDirection] = None,
+ credit_id: typing.Optional[str] = None,
+ ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
limit: typing.Optional[int] = None,
offset: typing.Optional[int] = None,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[CountCompanyGrantsResponse]:
+ ) -> AsyncHttpResponse[ListGrantsForCreditResponse]:
"""
Parameters
----------
- company_id : typing.Optional[str]
-
- order : typing.Optional[CreditGrantSortOrder]
+ credit_id : typing.Optional[str]
- dir : typing.Optional[SortDirection]
+ ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
limit : typing.Optional[int]
Page limit (default 100)
@@ -5696,16 +6421,15 @@ async def count_company_grants(
Returns
-------
- AsyncHttpResponse[CountCompanyGrantsResponse]
+ AsyncHttpResponse[ListGrantsForCreditResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- "billing/credits/grants/company/count",
+ "billing/credits/grants/list",
method="GET",
params={
- "company_id": company_id,
- "order": order,
- "dir": dir,
+ "credit_id": credit_id,
+ "ids": ids,
"limit": limit,
"offset": offset,
},
@@ -5714,9 +6438,9 @@ async def count_company_grants(
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- CountCompanyGrantsResponse,
+ ListGrantsForCreditResponse,
parse_obj_as(
- type_=CountCompanyGrantsResponse, # type: ignore
+ type_=ListGrantsForCreditResponse, # type: ignore
object_=_response.json(),
),
)
@@ -5789,57 +6513,55 @@ async def count_company_grants(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def list_company_grants(
+ async def acquire_credit_lease(
self,
*,
- company_id: typing.Optional[str] = None,
- order: typing.Optional[CreditGrantSortOrder] = None,
- dir: typing.Optional[SortDirection] = None,
- limit: typing.Optional[int] = None,
- offset: typing.Optional[int] = None,
+ company_id: str,
+ credit_type_id: str,
+ requested_amount: float,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[ListCompanyGrantsResponse]:
+ ) -> AsyncHttpResponse[AcquireCreditLeaseResponse]:
"""
Parameters
----------
- company_id : typing.Optional[str]
-
- order : typing.Optional[CreditGrantSortOrder]
+ company_id : str
- dir : typing.Optional[SortDirection]
+ credit_type_id : str
- limit : typing.Optional[int]
- Page limit (default 100)
+ requested_amount : float
- offset : typing.Optional[int]
- Page offset (default 0)
+ expires_at : typing.Optional[dt.datetime]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[ListCompanyGrantsResponse]
- OK
+ AsyncHttpResponse[AcquireCreditLeaseResponse]
+ Created
"""
_response = await self._client_wrapper.httpx_client.request(
- "billing/credits/grants/company/list",
- method="GET",
- params={
+ "billing/credits/lease",
+ method="POST",
+ json={
"company_id": company_id,
- "order": order,
- "dir": dir,
- "limit": limit,
- "offset": offset,
+ "credit_type_id": credit_type_id,
+ "expires_at": expires_at,
+ "requested_amount": requested_amount,
+ },
+ headers={
+ "content-type": "application/json",
},
request_options=request_options,
+ omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- ListCompanyGrantsResponse,
+ AcquireCreditLeaseResponse,
parse_obj_as(
- type_=ListCompanyGrantsResponse, # type: ignore
+ type_=AcquireCreditLeaseResponse, # type: ignore
object_=_response.json(),
),
)
@@ -5912,53 +6634,51 @@ async def list_company_grants(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def count_billing_credits_grants(
+ async def extend_credit_lease(
self,
+ lease_id: str,
*,
- credit_id: typing.Optional[str] = None,
- ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
- limit: typing.Optional[int] = None,
- offset: typing.Optional[int] = None,
+ additional_amount: float,
+ expires_at: typing.Optional[dt.datetime] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[CountBillingCreditsGrantsResponse]:
+ ) -> AsyncHttpResponse[ExtendCreditLeaseResponse]:
"""
Parameters
----------
- credit_id : typing.Optional[str]
-
- ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+ lease_id : str
+ lease_id
- limit : typing.Optional[int]
- Page limit (default 100)
+ additional_amount : float
- offset : typing.Optional[int]
- Page offset (default 0)
+ expires_at : typing.Optional[dt.datetime]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[CountBillingCreditsGrantsResponse]
+ AsyncHttpResponse[ExtendCreditLeaseResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- "billing/credits/grants/count",
- method="GET",
- params={
- "credit_id": credit_id,
- "ids": ids,
- "limit": limit,
- "offset": offset,
+ f"billing/credits/lease/{jsonable_encoder(lease_id)}/extend",
+ method="PUT",
+ json={
+ "additional_amount": additional_amount,
+ "expires_at": expires_at,
+ },
+ headers={
+ "content-type": "application/json",
},
request_options=request_options,
+ omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- CountBillingCreditsGrantsResponse,
+ ExtendCreditLeaseResponse,
parse_obj_as(
- type_=CountBillingCreditsGrantsResponse, # type: ignore
+ type_=ExtendCreditLeaseResponse, # type: ignore
object_=_response.json(),
),
)
@@ -6031,53 +6751,45 @@ async def count_billing_credits_grants(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def list_grants_for_credit(
+ async def release_credit_lease(
self,
+ lease_id: str,
*,
- credit_id: typing.Optional[str] = None,
- ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
- limit: typing.Optional[int] = None,
- offset: typing.Optional[int] = None,
+ request: ReleaseCreditLeaseRequestBody,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[ListGrantsForCreditResponse]:
+ ) -> AsyncHttpResponse[ReleaseCreditLeaseResponse]:
"""
Parameters
----------
- credit_id : typing.Optional[str]
-
- ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
-
- limit : typing.Optional[int]
- Page limit (default 100)
+ lease_id : str
+ lease_id
- offset : typing.Optional[int]
- Page offset (default 0)
+ request : ReleaseCreditLeaseRequestBody
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[ListGrantsForCreditResponse]
+ AsyncHttpResponse[ReleaseCreditLeaseResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- "billing/credits/grants/list",
- method="GET",
- params={
- "credit_id": credit_id,
- "ids": ids,
- "limit": limit,
- "offset": offset,
+ f"billing/credits/lease/{jsonable_encoder(lease_id)}/release",
+ method="PUT",
+ json=request,
+ headers={
+ "content-type": "application/json",
},
request_options=request_options,
+ omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- ListGrantsForCreditResponse,
+ ReleaseCreditLeaseResponse,
parse_obj_as(
- type_=ListGrantsForCreditResponse, # type: ignore
+ type_=ReleaseCreditLeaseResponse, # type: ignore
object_=_response.json(),
),
)
@@ -6578,6 +7290,7 @@ async def create_billing_plan_credit_grant(
expiry_unit_count: typing.Optional[int] = OMIT,
plan_version_id: typing.Optional[str] = OMIT,
reset_type: typing.Optional[BillingPlanCreditGrantResetType] = OMIT,
+ rollover_percentage: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> AsyncHttpResponse[CreateBillingPlanCreditGrantResponse]:
"""
@@ -6623,6 +7336,9 @@ async def create_billing_plan_credit_grant(
reset_type : typing.Optional[BillingPlanCreditGrantResetType]
+ rollover_percentage : typing.Optional[int]
+ Percentage of unused credits that carry over when this grant resets. Only applies when reset_type is plan_period. Rolled-over credits expire at the next reset and are not rolled again. Defaults to 0.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -6655,6 +7371,7 @@ async def create_billing_plan_credit_grant(
"reset_cadence": reset_cadence,
"reset_start": reset_start,
"reset_type": reset_type,
+ "rollover_percentage": rollover_percentage,
},
headers={
"content-type": "application/json",
@@ -6850,6 +7567,7 @@ async def update_billing_plan_credit_grant(
expiry_unit: typing.Optional[BillingCreditExpiryUnit] = OMIT,
expiry_unit_count: typing.Optional[int] = OMIT,
reset_type: typing.Optional[BillingPlanCreditGrantResetType] = OMIT,
+ rollover_percentage: typing.Optional[int] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
) -> AsyncHttpResponse[UpdateBillingPlanCreditGrantResponse]:
"""
@@ -6892,6 +7610,9 @@ async def update_billing_plan_credit_grant(
reset_type : typing.Optional[BillingPlanCreditGrantResetType]
+ rollover_percentage : typing.Optional[int]
+ Percentage of unused credits that carry over when this grant resets. Only applies when reset_type is plan_period. Rolled-over credits expire at the next reset and are not rolled again.
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
@@ -6921,6 +7642,7 @@ async def update_billing_plan_credit_grant(
"reset_cadence": reset_cadence,
"reset_start": reset_start,
"reset_type": reset_type,
+ "rollover_percentage": rollover_percentage,
},
headers={
"content-type": "application/json",
diff --git a/src/schematic/credits/types/__init__.py b/src/schematic/credits/types/__init__.py
index d06f5e9..8ede7ac 100644
--- a/src/schematic/credits/types/__init__.py
+++ b/src/schematic/credits/types/__init__.py
@@ -6,6 +6,7 @@
from importlib import import_module
if typing.TYPE_CHECKING:
+ from .acquire_credit_lease_response import AcquireCreditLeaseResponse
from .count_billing_credits_grants_params import CountBillingCreditsGrantsParams
from .count_billing_credits_grants_response import CountBillingCreditsGrantsResponse
from .count_billing_credits_params import CountBillingCreditsParams
@@ -26,6 +27,7 @@
from .delete_billing_plan_credit_grant_params import DeleteBillingPlanCreditGrantParams
from .delete_billing_plan_credit_grant_response import DeleteBillingPlanCreditGrantResponse
from .delete_credit_bundle_response import DeleteCreditBundleResponse
+ from .extend_credit_lease_response import ExtendCreditLeaseResponse
from .get_credit_bundle_response import GetCreditBundleResponse
from .get_enriched_credit_ledger_params import GetEnrichedCreditLedgerParams
from .get_enriched_credit_ledger_response import GetEnrichedCreditLedgerResponse
@@ -46,12 +48,14 @@
from .list_credit_event_ledger_response import ListCreditEventLedgerResponse
from .list_grants_for_credit_params import ListGrantsForCreditParams
from .list_grants_for_credit_response import ListGrantsForCreditResponse
+ from .release_credit_lease_response import ReleaseCreditLeaseResponse
from .soft_delete_billing_credit_response import SoftDeleteBillingCreditResponse
from .update_billing_credit_response import UpdateBillingCreditResponse
from .update_billing_plan_credit_grant_response import UpdateBillingPlanCreditGrantResponse
from .update_credit_bundle_details_response import UpdateCreditBundleDetailsResponse
from .zero_out_grant_response import ZeroOutGrantResponse
_dynamic_imports: typing.Dict[str, str] = {
+ "AcquireCreditLeaseResponse": ".acquire_credit_lease_response",
"CountBillingCreditsGrantsParams": ".count_billing_credits_grants_params",
"CountBillingCreditsGrantsResponse": ".count_billing_credits_grants_response",
"CountBillingCreditsParams": ".count_billing_credits_params",
@@ -72,6 +76,7 @@
"DeleteBillingPlanCreditGrantParams": ".delete_billing_plan_credit_grant_params",
"DeleteBillingPlanCreditGrantResponse": ".delete_billing_plan_credit_grant_response",
"DeleteCreditBundleResponse": ".delete_credit_bundle_response",
+ "ExtendCreditLeaseResponse": ".extend_credit_lease_response",
"GetCreditBundleResponse": ".get_credit_bundle_response",
"GetEnrichedCreditLedgerParams": ".get_enriched_credit_ledger_params",
"GetEnrichedCreditLedgerResponse": ".get_enriched_credit_ledger_response",
@@ -92,6 +97,7 @@
"ListCreditEventLedgerResponse": ".list_credit_event_ledger_response",
"ListGrantsForCreditParams": ".list_grants_for_credit_params",
"ListGrantsForCreditResponse": ".list_grants_for_credit_response",
+ "ReleaseCreditLeaseResponse": ".release_credit_lease_response",
"SoftDeleteBillingCreditResponse": ".soft_delete_billing_credit_response",
"UpdateBillingCreditResponse": ".update_billing_credit_response",
"UpdateBillingPlanCreditGrantResponse": ".update_billing_plan_credit_grant_response",
@@ -122,6 +128,7 @@ def __dir__():
__all__ = [
+ "AcquireCreditLeaseResponse",
"CountBillingCreditsGrantsParams",
"CountBillingCreditsGrantsResponse",
"CountBillingCreditsParams",
@@ -142,6 +149,7 @@ def __dir__():
"DeleteBillingPlanCreditGrantParams",
"DeleteBillingPlanCreditGrantResponse",
"DeleteCreditBundleResponse",
+ "ExtendCreditLeaseResponse",
"GetCreditBundleResponse",
"GetEnrichedCreditLedgerParams",
"GetEnrichedCreditLedgerResponse",
@@ -162,6 +170,7 @@ def __dir__():
"ListCreditEventLedgerResponse",
"ListGrantsForCreditParams",
"ListGrantsForCreditResponse",
+ "ReleaseCreditLeaseResponse",
"SoftDeleteBillingCreditResponse",
"UpdateBillingCreditResponse",
"UpdateBillingPlanCreditGrantResponse",
diff --git a/src/schematic/credits/types/acquire_credit_lease_response.py b/src/schematic/credits/types/acquire_credit_lease_response.py
new file mode 100644
index 0000000..b98085b
--- /dev/null
+++ b/src/schematic/credits/types/acquire_credit_lease_response.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.credit_lease_response_data import CreditLeaseResponseData
+
+
+class AcquireCreditLeaseResponse(UniversalBaseModel):
+ data: CreditLeaseResponseData
+ params: typing.Dict[str, typing.Any] = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/credits/types/extend_credit_lease_response.py b/src/schematic/credits/types/extend_credit_lease_response.py
new file mode 100644
index 0000000..1afbfb8
--- /dev/null
+++ b/src/schematic/credits/types/extend_credit_lease_response.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.credit_lease_response_data import CreditLeaseResponseData
+
+
+class ExtendCreditLeaseResponse(UniversalBaseModel):
+ data: CreditLeaseResponseData
+ params: typing.Dict[str, typing.Any] = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/credits/types/release_credit_lease_response.py b/src/schematic/credits/types/release_credit_lease_response.py
new file mode 100644
index 0000000..70bdcb3
--- /dev/null
+++ b/src/schematic/credits/types/release_credit_lease_response.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.credit_lease_response_data import CreditLeaseResponseData
+
+
+class ReleaseCreditLeaseResponse(UniversalBaseModel):
+ data: CreditLeaseResponseData
+ params: typing.Dict[str, typing.Any] = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/entitlements/client.py b/src/schematic/entitlements/client.py
index 9cd008a..6ebaac7 100644
--- a/src/schematic/entitlements/client.py
+++ b/src/schematic/entitlements/client.py
@@ -605,7 +605,7 @@ def list_feature_usage(
company_id="company_id",
feature_ids=["feature_ids"],
include_usage_aggregation=True,
- managed_by="orb",
+ managed_by="metronome",
q="q",
without_negative_entitlements=True,
limit=1000000,
@@ -746,7 +746,7 @@ def count_feature_usage(
company_id="company_id",
feature_ids=["feature_ids"],
include_usage_aggregation=True,
- managed_by="orb",
+ managed_by="metronome",
q="q",
without_negative_entitlements=True,
limit=1000000,
@@ -989,6 +989,7 @@ def create_plan_entitlement(
quarterly_unit_price_decimal: typing.Optional[str] = OMIT,
soft_limit: typing.Optional[int] = OMIT,
tier_mode: typing.Optional[BillingTiersMode] = OMIT,
+ usage_quantity: typing.Optional[int] = OMIT,
value_bool: typing.Optional[bool] = OMIT,
value_credit_id: typing.Optional[str] = OMIT,
value_numeric: typing.Optional[int] = OMIT,
@@ -1051,6 +1052,9 @@ def create_plan_entitlement(
tier_mode : typing.Optional[BillingTiersMode]
+ usage_quantity : typing.Optional[int]
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
value_bool : typing.Optional[bool]
value_credit_id : typing.Optional[str]
@@ -1113,6 +1117,7 @@ def create_plan_entitlement(
quarterly_unit_price_decimal=quarterly_unit_price_decimal,
soft_limit=soft_limit,
tier_mode=tier_mode,
+ usage_quantity=usage_quantity,
value_bool=value_bool,
value_credit_id=value_credit_id,
value_numeric=value_numeric,
@@ -1181,6 +1186,7 @@ def update_plan_entitlement(
quarterly_unit_price_decimal: typing.Optional[str] = OMIT,
soft_limit: typing.Optional[int] = OMIT,
tier_mode: typing.Optional[BillingTiersMode] = OMIT,
+ usage_quantity: typing.Optional[int] = OMIT,
value_bool: typing.Optional[bool] = OMIT,
value_credit_id: typing.Optional[str] = OMIT,
value_numeric: typing.Optional[int] = OMIT,
@@ -1240,6 +1246,9 @@ def update_plan_entitlement(
tier_mode : typing.Optional[BillingTiersMode]
+ usage_quantity : typing.Optional[int]
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
value_bool : typing.Optional[bool]
value_credit_id : typing.Optional[str]
@@ -1299,6 +1308,7 @@ def update_plan_entitlement(
quarterly_unit_price_decimal=quarterly_unit_price_decimal,
soft_limit=soft_limit,
tier_mode=tier_mode,
+ usage_quantity=usage_quantity,
value_bool=value_bool,
value_credit_id=value_credit_id,
value_numeric=value_numeric,
@@ -1371,6 +1381,7 @@ def upsert_plan_entitlement_for_billing_product(
quarterly_unit_price_decimal: typing.Optional[str] = OMIT,
soft_limit: typing.Optional[int] = OMIT,
tier_mode: typing.Optional[BillingTiersMode] = OMIT,
+ usage_quantity: typing.Optional[int] = OMIT,
value_bool: typing.Optional[bool] = OMIT,
value_credit_id: typing.Optional[str] = OMIT,
value_numeric: typing.Optional[int] = OMIT,
@@ -1437,6 +1448,9 @@ def upsert_plan_entitlement_for_billing_product(
tier_mode : typing.Optional[BillingTiersMode]
+ usage_quantity : typing.Optional[int]
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
value_bool : typing.Optional[bool]
value_credit_id : typing.Optional[str]
@@ -1469,7 +1483,7 @@ def upsert_plan_entitlement_for_billing_product(
api_key="YOUR_API_KEY",
)
client.entitlements.upsert_plan_entitlement_for_billing_product(
- billing_provider="orb",
+ billing_provider="metronome",
external_resource_id="external_resource_id",
feature_id="feature_id",
plan_id="plan_id",
@@ -1503,6 +1517,7 @@ def upsert_plan_entitlement_for_billing_product(
quarterly_unit_price_decimal=quarterly_unit_price_decimal,
soft_limit=soft_limit,
tier_mode=tier_mode,
+ usage_quantity=usage_quantity,
value_bool=value_bool,
value_credit_id=value_credit_id,
value_numeric=value_numeric,
@@ -2311,7 +2326,7 @@ async def main() -> None:
company_id="company_id",
feature_ids=["feature_ids"],
include_usage_aggregation=True,
- managed_by="orb",
+ managed_by="metronome",
q="q",
without_negative_entitlements=True,
limit=1000000,
@@ -2467,7 +2482,7 @@ async def main() -> None:
company_id="company_id",
feature_ids=["feature_ids"],
include_usage_aggregation=True,
- managed_by="orb",
+ managed_by="metronome",
q="q",
without_negative_entitlements=True,
limit=1000000,
@@ -2737,6 +2752,7 @@ async def create_plan_entitlement(
quarterly_unit_price_decimal: typing.Optional[str] = OMIT,
soft_limit: typing.Optional[int] = OMIT,
tier_mode: typing.Optional[BillingTiersMode] = OMIT,
+ usage_quantity: typing.Optional[int] = OMIT,
value_bool: typing.Optional[bool] = OMIT,
value_credit_id: typing.Optional[str] = OMIT,
value_numeric: typing.Optional[int] = OMIT,
@@ -2799,6 +2815,9 @@ async def create_plan_entitlement(
tier_mode : typing.Optional[BillingTiersMode]
+ usage_quantity : typing.Optional[int]
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
value_bool : typing.Optional[bool]
value_credit_id : typing.Optional[str]
@@ -2869,6 +2888,7 @@ async def main() -> None:
quarterly_unit_price_decimal=quarterly_unit_price_decimal,
soft_limit=soft_limit,
tier_mode=tier_mode,
+ usage_quantity=usage_quantity,
value_bool=value_bool,
value_credit_id=value_credit_id,
value_numeric=value_numeric,
@@ -2945,6 +2965,7 @@ async def update_plan_entitlement(
quarterly_unit_price_decimal: typing.Optional[str] = OMIT,
soft_limit: typing.Optional[int] = OMIT,
tier_mode: typing.Optional[BillingTiersMode] = OMIT,
+ usage_quantity: typing.Optional[int] = OMIT,
value_bool: typing.Optional[bool] = OMIT,
value_credit_id: typing.Optional[str] = OMIT,
value_numeric: typing.Optional[int] = OMIT,
@@ -3004,6 +3025,9 @@ async def update_plan_entitlement(
tier_mode : typing.Optional[BillingTiersMode]
+ usage_quantity : typing.Optional[int]
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
value_bool : typing.Optional[bool]
value_credit_id : typing.Optional[str]
@@ -3071,6 +3095,7 @@ async def main() -> None:
quarterly_unit_price_decimal=quarterly_unit_price_decimal,
soft_limit=soft_limit,
tier_mode=tier_mode,
+ usage_quantity=usage_quantity,
value_bool=value_bool,
value_credit_id=value_credit_id,
value_numeric=value_numeric,
@@ -3151,6 +3176,7 @@ async def upsert_plan_entitlement_for_billing_product(
quarterly_unit_price_decimal: typing.Optional[str] = OMIT,
soft_limit: typing.Optional[int] = OMIT,
tier_mode: typing.Optional[BillingTiersMode] = OMIT,
+ usage_quantity: typing.Optional[int] = OMIT,
value_bool: typing.Optional[bool] = OMIT,
value_credit_id: typing.Optional[str] = OMIT,
value_numeric: typing.Optional[int] = OMIT,
@@ -3217,6 +3243,9 @@ async def upsert_plan_entitlement_for_billing_product(
tier_mode : typing.Optional[BillingTiersMode]
+ usage_quantity : typing.Optional[int]
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
value_bool : typing.Optional[bool]
value_credit_id : typing.Optional[str]
@@ -3254,7 +3283,7 @@ async def upsert_plan_entitlement_for_billing_product(
async def main() -> None:
await client.entitlements.upsert_plan_entitlement_for_billing_product(
- billing_provider="orb",
+ billing_provider="metronome",
external_resource_id="external_resource_id",
feature_id="feature_id",
plan_id="plan_id",
@@ -3291,6 +3320,7 @@ async def main() -> None:
quarterly_unit_price_decimal=quarterly_unit_price_decimal,
soft_limit=soft_limit,
tier_mode=tier_mode,
+ usage_quantity=usage_quantity,
value_bool=value_bool,
value_credit_id=value_credit_id,
value_numeric=value_numeric,
diff --git a/src/schematic/entitlements/raw_client.py b/src/schematic/entitlements/raw_client.py
index 292235f..4c3fe11 100644
--- a/src/schematic/entitlements/raw_client.py
+++ b/src/schematic/entitlements/raw_client.py
@@ -1894,6 +1894,7 @@ def create_plan_entitlement(
quarterly_unit_price_decimal: typing.Optional[str] = OMIT,
soft_limit: typing.Optional[int] = OMIT,
tier_mode: typing.Optional[BillingTiersMode] = OMIT,
+ usage_quantity: typing.Optional[int] = OMIT,
value_bool: typing.Optional[bool] = OMIT,
value_credit_id: typing.Optional[str] = OMIT,
value_numeric: typing.Optional[int] = OMIT,
@@ -1956,6 +1957,9 @@ def create_plan_entitlement(
tier_mode : typing.Optional[BillingTiersMode]
+ usage_quantity : typing.Optional[int]
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
value_bool : typing.Optional[bool]
value_credit_id : typing.Optional[str]
@@ -2019,6 +2023,7 @@ def create_plan_entitlement(
"quarterly_unit_price_decimal": quarterly_unit_price_decimal,
"soft_limit": soft_limit,
"tier_mode": tier_mode,
+ "usage_quantity": usage_quantity,
"value_bool": value_bool,
"value_credit_id": value_credit_id,
"value_numeric": value_numeric,
@@ -2231,6 +2236,7 @@ def update_plan_entitlement(
quarterly_unit_price_decimal: typing.Optional[str] = OMIT,
soft_limit: typing.Optional[int] = OMIT,
tier_mode: typing.Optional[BillingTiersMode] = OMIT,
+ usage_quantity: typing.Optional[int] = OMIT,
value_bool: typing.Optional[bool] = OMIT,
value_credit_id: typing.Optional[str] = OMIT,
value_numeric: typing.Optional[int] = OMIT,
@@ -2290,6 +2296,9 @@ def update_plan_entitlement(
tier_mode : typing.Optional[BillingTiersMode]
+ usage_quantity : typing.Optional[int]
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
value_bool : typing.Optional[bool]
value_credit_id : typing.Optional[str]
@@ -2350,6 +2359,7 @@ def update_plan_entitlement(
"quarterly_unit_price_decimal": quarterly_unit_price_decimal,
"soft_limit": soft_limit,
"tier_mode": tier_mode,
+ "usage_quantity": usage_quantity,
"value_bool": value_bool,
"value_credit_id": value_credit_id,
"value_numeric": value_numeric,
@@ -2577,6 +2587,7 @@ def upsert_plan_entitlement_for_billing_product(
quarterly_unit_price_decimal: typing.Optional[str] = OMIT,
soft_limit: typing.Optional[int] = OMIT,
tier_mode: typing.Optional[BillingTiersMode] = OMIT,
+ usage_quantity: typing.Optional[int] = OMIT,
value_bool: typing.Optional[bool] = OMIT,
value_credit_id: typing.Optional[str] = OMIT,
value_numeric: typing.Optional[int] = OMIT,
@@ -2643,6 +2654,9 @@ def upsert_plan_entitlement_for_billing_product(
tier_mode : typing.Optional[BillingTiersMode]
+ usage_quantity : typing.Optional[int]
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
value_bool : typing.Optional[bool]
value_credit_id : typing.Optional[str]
@@ -2708,6 +2722,7 @@ def upsert_plan_entitlement_for_billing_product(
"quarterly_unit_price_decimal": quarterly_unit_price_decimal,
"soft_limit": soft_limit,
"tier_mode": tier_mode,
+ "usage_quantity": usage_quantity,
"value_bool": value_bool,
"value_credit_id": value_credit_id,
"value_numeric": value_numeric,
@@ -5002,6 +5017,7 @@ async def create_plan_entitlement(
quarterly_unit_price_decimal: typing.Optional[str] = OMIT,
soft_limit: typing.Optional[int] = OMIT,
tier_mode: typing.Optional[BillingTiersMode] = OMIT,
+ usage_quantity: typing.Optional[int] = OMIT,
value_bool: typing.Optional[bool] = OMIT,
value_credit_id: typing.Optional[str] = OMIT,
value_numeric: typing.Optional[int] = OMIT,
@@ -5064,6 +5080,9 @@ async def create_plan_entitlement(
tier_mode : typing.Optional[BillingTiersMode]
+ usage_quantity : typing.Optional[int]
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
value_bool : typing.Optional[bool]
value_credit_id : typing.Optional[str]
@@ -5127,6 +5146,7 @@ async def create_plan_entitlement(
"quarterly_unit_price_decimal": quarterly_unit_price_decimal,
"soft_limit": soft_limit,
"tier_mode": tier_mode,
+ "usage_quantity": usage_quantity,
"value_bool": value_bool,
"value_credit_id": value_credit_id,
"value_numeric": value_numeric,
@@ -5339,6 +5359,7 @@ async def update_plan_entitlement(
quarterly_unit_price_decimal: typing.Optional[str] = OMIT,
soft_limit: typing.Optional[int] = OMIT,
tier_mode: typing.Optional[BillingTiersMode] = OMIT,
+ usage_quantity: typing.Optional[int] = OMIT,
value_bool: typing.Optional[bool] = OMIT,
value_credit_id: typing.Optional[str] = OMIT,
value_numeric: typing.Optional[int] = OMIT,
@@ -5398,6 +5419,9 @@ async def update_plan_entitlement(
tier_mode : typing.Optional[BillingTiersMode]
+ usage_quantity : typing.Optional[int]
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
value_bool : typing.Optional[bool]
value_credit_id : typing.Optional[str]
@@ -5458,6 +5482,7 @@ async def update_plan_entitlement(
"quarterly_unit_price_decimal": quarterly_unit_price_decimal,
"soft_limit": soft_limit,
"tier_mode": tier_mode,
+ "usage_quantity": usage_quantity,
"value_bool": value_bool,
"value_credit_id": value_credit_id,
"value_numeric": value_numeric,
@@ -5685,6 +5710,7 @@ async def upsert_plan_entitlement_for_billing_product(
quarterly_unit_price_decimal: typing.Optional[str] = OMIT,
soft_limit: typing.Optional[int] = OMIT,
tier_mode: typing.Optional[BillingTiersMode] = OMIT,
+ usage_quantity: typing.Optional[int] = OMIT,
value_bool: typing.Optional[bool] = OMIT,
value_credit_id: typing.Optional[str] = OMIT,
value_numeric: typing.Optional[int] = OMIT,
@@ -5751,6 +5777,9 @@ async def upsert_plan_entitlement_for_billing_product(
tier_mode : typing.Optional[BillingTiersMode]
+ usage_quantity : typing.Optional[int]
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+
value_bool : typing.Optional[bool]
value_credit_id : typing.Optional[str]
@@ -5816,6 +5845,7 @@ async def upsert_plan_entitlement_for_billing_product(
"quarterly_unit_price_decimal": quarterly_unit_price_decimal,
"soft_limit": soft_limit,
"tier_mode": tier_mode,
+ "usage_quantity": usage_quantity,
"value_bool": value_bool,
"value_credit_id": value_credit_id,
"value_numeric": value_numeric,
diff --git a/src/schematic/features/client.py b/src/schematic/features/client.py
index 8f8cffc..047f365 100644
--- a/src/schematic/features/client.py
+++ b/src/schematic/features/client.py
@@ -114,7 +114,7 @@ def list_features(
boolean_require_event=True,
feature_type=["boolean"],
ids=["ids"],
- managed_by="orb",
+ managed_by="metronome",
plan_version_id="plan_version_id",
q="q",
without_company_override_for="without_company_override_for",
@@ -422,7 +422,7 @@ def upsert_feature_for_billing_product(
api_key="YOUR_API_KEY",
)
client.features.upsert_feature_for_billing_product(
- billing_provider="orb",
+ billing_provider="metronome",
description="description",
external_resource_id="external_resource_id",
feature_type="boolean",
@@ -513,7 +513,7 @@ def count_features(
boolean_require_event=True,
feature_type=["boolean"],
ids=["ids"],
- managed_by="orb",
+ managed_by="metronome",
plan_version_id="plan_version_id",
q="q",
without_company_override_for="without_company_override_for",
@@ -1090,7 +1090,7 @@ async def main() -> None:
boolean_require_event=True,
feature_type=["boolean"],
ids=["ids"],
- managed_by="orb",
+ managed_by="metronome",
plan_version_id="plan_version_id",
q="q",
without_company_override_for="without_company_override_for",
@@ -1438,7 +1438,7 @@ async def upsert_feature_for_billing_product(
async def main() -> None:
await client.features.upsert_feature_for_billing_product(
- billing_provider="orb",
+ billing_provider="metronome",
description="description",
external_resource_id="external_resource_id",
feature_type="boolean",
@@ -1537,7 +1537,7 @@ async def main() -> None:
boolean_require_event=True,
feature_type=["boolean"],
ids=["ids"],
- managed_by="orb",
+ managed_by="metronome",
plan_version_id="plan_version_id",
q="q",
without_company_override_for="without_company_override_for",
diff --git a/src/schematic/integrationsapi/__init__.py b/src/schematic/integrationsapi/__init__.py
index c6490c5..13f91ac 100644
--- a/src/schematic/integrationsapi/__init__.py
+++ b/src/schematic/integrationsapi/__init__.py
@@ -7,19 +7,25 @@
if typing.TYPE_CHECKING:
from .types import (
+ AssumeStripeInstalledResponse,
GetIntegrationWebhookUrlResponse,
+ InstallIntegrationResponse,
+ InstallStripeResponse,
ListIntegrationsParams,
ListIntegrationsResponse,
- LoadSampleDataSetV2Response,
+ LoadSampleDataSetResponse,
RunIntegrationResponse,
StartDataImportResponse,
UninstallIntegrationResponse,
)
_dynamic_imports: typing.Dict[str, str] = {
+ "AssumeStripeInstalledResponse": ".types",
"GetIntegrationWebhookUrlResponse": ".types",
+ "InstallIntegrationResponse": ".types",
+ "InstallStripeResponse": ".types",
"ListIntegrationsParams": ".types",
"ListIntegrationsResponse": ".types",
- "LoadSampleDataSetV2Response": ".types",
+ "LoadSampleDataSetResponse": ".types",
"RunIntegrationResponse": ".types",
"StartDataImportResponse": ".types",
"UninstallIntegrationResponse": ".types",
@@ -48,10 +54,13 @@ def __dir__():
__all__ = [
+ "AssumeStripeInstalledResponse",
"GetIntegrationWebhookUrlResponse",
+ "InstallIntegrationResponse",
+ "InstallStripeResponse",
"ListIntegrationsParams",
"ListIntegrationsResponse",
- "LoadSampleDataSetV2Response",
+ "LoadSampleDataSetResponse",
"RunIntegrationResponse",
"StartDataImportResponse",
"UninstallIntegrationResponse",
diff --git a/src/schematic/integrationsapi/client.py b/src/schematic/integrationsapi/client.py
index b64bbd8..872baa6 100644
--- a/src/schematic/integrationsapi/client.py
+++ b/src/schematic/integrationsapi/client.py
@@ -8,9 +8,12 @@
from ..types.integration_state import IntegrationState
from ..types.integration_type import IntegrationType
from .raw_client import AsyncRawIntegrationsapiClient, RawIntegrationsapiClient
+from .types.assume_stripe_installed_response import AssumeStripeInstalledResponse
from .types.get_integration_webhook_url_response import GetIntegrationWebhookUrlResponse
+from .types.install_integration_response import InstallIntegrationResponse
+from .types.install_stripe_response import InstallStripeResponse
from .types.list_integrations_response import ListIntegrationsResponse
-from .types.load_sample_data_set_v_2_response import LoadSampleDataSetV2Response
+from .types.load_sample_data_set_response import LoadSampleDataSetResponse
from .types.run_integration_response import RunIntegrationResponse
from .types.start_data_import_response import StartDataImportResponse
from .types.uninstall_integration_response import UninstallIntegrationResponse
@@ -164,6 +167,62 @@ def get_integration_webhook_url(
_response = self._raw_client.get_integration_webhook_url(type, request_options=request_options)
return _response.data
+ def install_integration(
+ self,
+ *,
+ type: IntegrationType,
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
+ company_matching_field: typing.Optional[str] = OMIT,
+ config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
+ is_sandbox: typing.Optional[bool] = OMIT,
+ live_mode: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> InstallIntegrationResponse:
+ """
+ Parameters
+ ----------
+ type : IntegrationType
+
+ company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
+
+ company_matching_field : typing.Optional[str]
+
+ config : typing.Optional[typing.Dict[str, typing.Any]]
+
+ is_sandbox : typing.Optional[bool]
+
+ live_mode : typing.Optional[bool]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ InstallIntegrationResponse
+ Created
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.integrationsapi.install_integration(
+ type="clerk",
+ )
+ """
+ _response = self._raw_client.install_integration(
+ type=type,
+ company_matching_criteria=company_matching_criteria,
+ company_matching_field=company_matching_field,
+ config=config,
+ is_sandbox=is_sandbox,
+ live_mode=live_mode,
+ request_options=request_options,
+ )
+ return _response.data
+
def start_data_import(
self,
*,
@@ -208,9 +267,9 @@ def start_data_import(
)
return _response.data
- def load_sample_data_set_v_2(
+ def load_sample_data_set(
self, *, request_options: typing.Optional[RequestOptions] = None
- ) -> LoadSampleDataSetV2Response:
+ ) -> LoadSampleDataSetResponse:
"""
Parameters
----------
@@ -219,7 +278,7 @@ def load_sample_data_set_v_2(
Returns
-------
- LoadSampleDataSetV2Response
+ LoadSampleDataSetResponse
OK
Examples
@@ -229,9 +288,121 @@ def load_sample_data_set_v_2(
client = Schematic(
api_key="YOUR_API_KEY",
)
- client.integrationsapi.load_sample_data_set_v_2()
+ client.integrationsapi.load_sample_data_set()
+ """
+ _response = self._raw_client.load_sample_data_set(request_options=request_options)
+ return _response.data
+
+ def assume_stripe_installed(
+ self,
+ *,
+ type: IntegrationType,
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
+ company_matching_field: typing.Optional[str] = OMIT,
+ config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
+ is_sandbox: typing.Optional[bool] = OMIT,
+ live_mode: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AssumeStripeInstalledResponse:
+ """
+ Parameters
+ ----------
+ type : IntegrationType
+
+ company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
+
+ company_matching_field : typing.Optional[str]
+
+ config : typing.Optional[typing.Dict[str, typing.Any]]
+
+ is_sandbox : typing.Optional[bool]
+
+ live_mode : typing.Optional[bool]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AssumeStripeInstalledResponse
+ Created
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.integrationsapi.assume_stripe_installed(
+ type="clerk",
+ )
+ """
+ _response = self._raw_client.assume_stripe_installed(
+ type=type,
+ company_matching_criteria=company_matching_criteria,
+ company_matching_field=company_matching_field,
+ config=config,
+ is_sandbox=is_sandbox,
+ live_mode=live_mode,
+ request_options=request_options,
+ )
+ return _response.data
+
+ def install_stripe(
+ self,
+ *,
+ type: IntegrationType,
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
+ company_matching_field: typing.Optional[str] = OMIT,
+ config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
+ is_sandbox: typing.Optional[bool] = OMIT,
+ live_mode: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> InstallStripeResponse:
+ """
+ Parameters
+ ----------
+ type : IntegrationType
+
+ company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
+
+ company_matching_field : typing.Optional[str]
+
+ config : typing.Optional[typing.Dict[str, typing.Any]]
+
+ is_sandbox : typing.Optional[bool]
+
+ live_mode : typing.Optional[bool]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ InstallStripeResponse
+ Created
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.integrationsapi.install_stripe(
+ type="clerk",
+ )
"""
- _response = self._raw_client.load_sample_data_set_v_2(request_options=request_options)
+ _response = self._raw_client.install_stripe(
+ type=type,
+ company_matching_criteria=company_matching_criteria,
+ company_matching_field=company_matching_field,
+ config=config,
+ is_sandbox=is_sandbox,
+ live_mode=live_mode,
+ request_options=request_options,
+ )
return _response.data
def uninstall_integration(
@@ -435,6 +606,70 @@ async def main() -> None:
_response = await self._raw_client.get_integration_webhook_url(type, request_options=request_options)
return _response.data
+ async def install_integration(
+ self,
+ *,
+ type: IntegrationType,
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
+ company_matching_field: typing.Optional[str] = OMIT,
+ config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
+ is_sandbox: typing.Optional[bool] = OMIT,
+ live_mode: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> InstallIntegrationResponse:
+ """
+ Parameters
+ ----------
+ type : IntegrationType
+
+ company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
+
+ company_matching_field : typing.Optional[str]
+
+ config : typing.Optional[typing.Dict[str, typing.Any]]
+
+ is_sandbox : typing.Optional[bool]
+
+ live_mode : typing.Optional[bool]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ InstallIntegrationResponse
+ Created
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.integrationsapi.install_integration(
+ type="clerk",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.install_integration(
+ type=type,
+ company_matching_criteria=company_matching_criteria,
+ company_matching_field=company_matching_field,
+ config=config,
+ is_sandbox=is_sandbox,
+ live_mode=live_mode,
+ request_options=request_options,
+ )
+ return _response.data
+
async def start_data_import(
self,
*,
@@ -487,9 +722,9 @@ async def main() -> None:
)
return _response.data
- async def load_sample_data_set_v_2(
+ async def load_sample_data_set(
self, *, request_options: typing.Optional[RequestOptions] = None
- ) -> LoadSampleDataSetV2Response:
+ ) -> LoadSampleDataSetResponse:
"""
Parameters
----------
@@ -498,7 +733,7 @@ async def load_sample_data_set_v_2(
Returns
-------
- LoadSampleDataSetV2Response
+ LoadSampleDataSetResponse
OK
Examples
@@ -513,12 +748,140 @@ async def load_sample_data_set_v_2(
async def main() -> None:
- await client.integrationsapi.load_sample_data_set_v_2()
+ await client.integrationsapi.load_sample_data_set()
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.load_sample_data_set(request_options=request_options)
+ return _response.data
+
+ async def assume_stripe_installed(
+ self,
+ *,
+ type: IntegrationType,
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
+ company_matching_field: typing.Optional[str] = OMIT,
+ config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
+ is_sandbox: typing.Optional[bool] = OMIT,
+ live_mode: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AssumeStripeInstalledResponse:
+ """
+ Parameters
+ ----------
+ type : IntegrationType
+
+ company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
+
+ company_matching_field : typing.Optional[str]
+
+ config : typing.Optional[typing.Dict[str, typing.Any]]
+
+ is_sandbox : typing.Optional[bool]
+
+ live_mode : typing.Optional[bool]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AssumeStripeInstalledResponse
+ Created
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.integrationsapi.assume_stripe_installed(
+ type="clerk",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.assume_stripe_installed(
+ type=type,
+ company_matching_criteria=company_matching_criteria,
+ company_matching_field=company_matching_field,
+ config=config,
+ is_sandbox=is_sandbox,
+ live_mode=live_mode,
+ request_options=request_options,
+ )
+ return _response.data
+
+ async def install_stripe(
+ self,
+ *,
+ type: IntegrationType,
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
+ company_matching_field: typing.Optional[str] = OMIT,
+ config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
+ is_sandbox: typing.Optional[bool] = OMIT,
+ live_mode: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> InstallStripeResponse:
+ """
+ Parameters
+ ----------
+ type : IntegrationType
+
+ company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
+
+ company_matching_field : typing.Optional[str]
+
+ config : typing.Optional[typing.Dict[str, typing.Any]]
+
+ is_sandbox : typing.Optional[bool]
+
+ live_mode : typing.Optional[bool]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ InstallStripeResponse
+ Created
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.integrationsapi.install_stripe(
+ type="clerk",
+ )
asyncio.run(main())
"""
- _response = await self._raw_client.load_sample_data_set_v_2(request_options=request_options)
+ _response = await self._raw_client.install_stripe(
+ type=type,
+ company_matching_criteria=company_matching_criteria,
+ company_matching_field=company_matching_field,
+ config=config,
+ is_sandbox=is_sandbox,
+ live_mode=live_mode,
+ request_options=request_options,
+ )
return _response.data
async def uninstall_integration(
diff --git a/src/schematic/integrationsapi/raw_client.py b/src/schematic/integrationsapi/raw_client.py
index 4889c44..9d84438 100644
--- a/src/schematic/integrationsapi/raw_client.py
+++ b/src/schematic/integrationsapi/raw_client.py
@@ -19,9 +19,12 @@
from ..types.company_matching_criteria import CompanyMatchingCriteria
from ..types.integration_state import IntegrationState
from ..types.integration_type import IntegrationType
+from .types.assume_stripe_installed_response import AssumeStripeInstalledResponse
from .types.get_integration_webhook_url_response import GetIntegrationWebhookUrlResponse
+from .types.install_integration_response import InstallIntegrationResponse
+from .types.install_stripe_response import InstallStripeResponse
from .types.list_integrations_response import ListIntegrationsResponse
-from .types.load_sample_data_set_v_2_response import LoadSampleDataSetV2Response
+from .types.load_sample_data_set_response import LoadSampleDataSetResponse
from .types.run_integration_response import RunIntegrationResponse
from .types.start_data_import_response import StartDataImportResponse
from .types.uninstall_integration_response import UninstallIntegrationResponse
@@ -344,6 +347,135 @@ def get_integration_webhook_url(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
+ def install_integration(
+ self,
+ *,
+ type: IntegrationType,
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
+ company_matching_field: typing.Optional[str] = OMIT,
+ config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
+ is_sandbox: typing.Optional[bool] = OMIT,
+ live_mode: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[InstallIntegrationResponse]:
+ """
+ Parameters
+ ----------
+ type : IntegrationType
+
+ company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
+
+ company_matching_field : typing.Optional[str]
+
+ config : typing.Optional[typing.Dict[str, typing.Any]]
+
+ is_sandbox : typing.Optional[bool]
+
+ live_mode : typing.Optional[bool]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[InstallIntegrationResponse]
+ Created
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "integrations/install",
+ method="POST",
+ json={
+ "company_matching_criteria": company_matching_criteria,
+ "company_matching_field": company_matching_field,
+ "config": config,
+ "is_sandbox": is_sandbox,
+ "live_mode": live_mode,
+ "type": type,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ InstallIntegrationResponse,
+ parse_obj_as(
+ type_=InstallIntegrationResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
def start_data_import(
self,
*,
@@ -461,35 +593,618 @@ def start_data_import(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- def load_sample_data_set_v_2(
+ def load_sample_data_set(
self, *, request_options: typing.Optional[RequestOptions] = None
- ) -> HttpResponse[LoadSampleDataSetV2Response]:
+ ) -> HttpResponse[LoadSampleDataSetResponse]:
+ """
+ Parameters
+ ----------
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[LoadSampleDataSetResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "integrations/stripe/dataset-sample-v2",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ LoadSampleDataSetResponse,
+ parse_obj_as(
+ type_=LoadSampleDataSetResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ def assume_stripe_installed(
+ self,
+ *,
+ type: IntegrationType,
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
+ company_matching_field: typing.Optional[str] = OMIT,
+ config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
+ is_sandbox: typing.Optional[bool] = OMIT,
+ live_mode: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[AssumeStripeInstalledResponse]:
+ """
+ Parameters
+ ----------
+ type : IntegrationType
+
+ company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
+
+ company_matching_field : typing.Optional[str]
+
+ config : typing.Optional[typing.Dict[str, typing.Any]]
+
+ is_sandbox : typing.Optional[bool]
+
+ live_mode : typing.Optional[bool]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[AssumeStripeInstalledResponse]
+ Created
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "integrations/stripe/v2/assume-installed",
+ method="POST",
+ json={
+ "company_matching_criteria": company_matching_criteria,
+ "company_matching_field": company_matching_field,
+ "config": config,
+ "is_sandbox": is_sandbox,
+ "live_mode": live_mode,
+ "type": type,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ AssumeStripeInstalledResponse,
+ parse_obj_as(
+ type_=AssumeStripeInstalledResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ def install_stripe(
+ self,
+ *,
+ type: IntegrationType,
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
+ company_matching_field: typing.Optional[str] = OMIT,
+ config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
+ is_sandbox: typing.Optional[bool] = OMIT,
+ live_mode: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[InstallStripeResponse]:
+ """
+ Parameters
+ ----------
+ type : IntegrationType
+
+ company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
+
+ company_matching_field : typing.Optional[str]
+
+ config : typing.Optional[typing.Dict[str, typing.Any]]
+
+ is_sandbox : typing.Optional[bool]
+
+ live_mode : typing.Optional[bool]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[InstallStripeResponse]
+ Created
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "integrations/stripe/v2/install",
+ method="POST",
+ json={
+ "company_matching_criteria": company_matching_criteria,
+ "company_matching_field": company_matching_field,
+ "config": config,
+ "is_sandbox": is_sandbox,
+ "live_mode": live_mode,
+ "type": type,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ InstallStripeResponse,
+ parse_obj_as(
+ type_=InstallStripeResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ def uninstall_integration(
+ self, integration_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[UninstallIntegrationResponse]:
+ """
+ Parameters
+ ----------
+ integration_id : str
+ integration_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[UninstallIntegrationResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"integrations/uninstall/{jsonable_encoder(integration_id)}",
+ method="DELETE",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ UninstallIntegrationResponse,
+ parse_obj_as(
+ type_=UninstallIntegrationResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+
+class AsyncRawIntegrationsapiClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def run_integration(
+ self, integration_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[RunIntegrationResponse]:
+ """
+ Parameters
+ ----------
+ integration_id : str
+ integration_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[RunIntegrationResponse]
+ OK
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"integration/start/{jsonable_encoder(integration_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RunIntegrationResponse,
+ parse_obj_as(
+ type_=RunIntegrationResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ async def list_integrations(
+ self,
+ *,
+ billing_only: typing.Optional[bool] = None,
+ exclude_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
+ id: typing.Optional[str] = None,
+ state: typing.Optional[IntegrationState] = None,
+ type: typing.Optional[IntegrationType] = None,
+ limit: typing.Optional[int] = None,
+ offset: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[ListIntegrationsResponse]:
"""
Parameters
----------
+ billing_only : typing.Optional[bool]
+
+ exclude_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
+
+ id : typing.Optional[str]
+
+ state : typing.Optional[IntegrationState]
+
+ type : typing.Optional[IntegrationType]
+
+ limit : typing.Optional[int]
+ Page limit (default 100)
+
+ offset : typing.Optional[int]
+ Page offset (default 0)
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[LoadSampleDataSetV2Response]
+ AsyncHttpResponse[ListIntegrationsResponse]
OK
"""
- _response = self._client_wrapper.httpx_client.request(
- "integrations/stripe/dataset-sample-v2",
+ _response = await self._client_wrapper.httpx_client.request(
+ "integrations",
method="GET",
+ params={
+ "billing_only": billing_only,
+ "exclude_ids": exclude_ids,
+ "id": id,
+ "state": state,
+ "type": type,
+ "limit": limit,
+ "offset": offset,
+ },
request_options=request_options,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- LoadSampleDataSetV2Response,
+ ListIntegrationsResponse,
parse_obj_as(
- type_=LoadSampleDataSetV2Response, # type: ignore
+ type_=ListIntegrationsResponse, # type: ignore
object_=_response.json(),
),
)
- return HttpResponse(response=_response, data=_data)
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
if _response.status_code == 401:
raise UnauthorizedError(
headers=dict(_response.headers),
@@ -547,49 +1262,38 @@ def load_sample_data_set_v_2(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- def uninstall_integration(
- self, integration_id: str, *, request_options: typing.Optional[RequestOptions] = None
- ) -> HttpResponse[UninstallIntegrationResponse]:
+ async def get_integration_webhook_url(
+ self, type: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetIntegrationWebhookUrlResponse]:
"""
Parameters
----------
- integration_id : str
- integration_id
+ type : str
+ type
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[UninstallIntegrationResponse]
+ AsyncHttpResponse[GetIntegrationWebhookUrlResponse]
OK
"""
- _response = self._client_wrapper.httpx_client.request(
- f"integrations/uninstall/{jsonable_encoder(integration_id)}",
- method="DELETE",
+ _response = await self._client_wrapper.httpx_client.request(
+ f"integrations/{jsonable_encoder(type)}/webhook-url",
+ method="GET",
request_options=request_options,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- UninstallIntegrationResponse,
+ GetIntegrationWebhookUrlResponse,
parse_obj_as(
- type_=UninstallIntegrationResponse, # type: ignore
+ type_=GetIntegrationWebhookUrlResponse, # type: ignore
object_=_response.json(),
),
)
- return HttpResponse(response=_response, data=_data)
- if _response.status_code == 400:
- raise BadRequestError(
- headers=dict(_response.headers),
- body=typing.cast(
- types_api_error_ApiError,
- parse_obj_as(
- type_=types_api_error_ApiError, # type: ignore
- object_=_response.json(),
- ),
- ),
- )
+ return AsyncHttpResponse(response=_response, data=_data)
if _response.status_code == 401:
raise UnauthorizedError(
headers=dict(_response.headers),
@@ -647,43 +1351,78 @@ def uninstall_integration(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
-
-class AsyncRawIntegrationsapiClient:
- def __init__(self, *, client_wrapper: AsyncClientWrapper):
- self._client_wrapper = client_wrapper
-
- async def run_integration(
- self, integration_id: str, *, request_options: typing.Optional[RequestOptions] = None
- ) -> AsyncHttpResponse[RunIntegrationResponse]:
+ async def install_integration(
+ self,
+ *,
+ type: IntegrationType,
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
+ company_matching_field: typing.Optional[str] = OMIT,
+ config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
+ is_sandbox: typing.Optional[bool] = OMIT,
+ live_mode: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[InstallIntegrationResponse]:
"""
Parameters
----------
- integration_id : str
- integration_id
+ type : IntegrationType
+
+ company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
+
+ company_matching_field : typing.Optional[str]
+
+ config : typing.Optional[typing.Dict[str, typing.Any]]
+
+ is_sandbox : typing.Optional[bool]
+
+ live_mode : typing.Optional[bool]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[RunIntegrationResponse]
- OK
+ AsyncHttpResponse[InstallIntegrationResponse]
+ Created
"""
_response = await self._client_wrapper.httpx_client.request(
- f"integration/start/{jsonable_encoder(integration_id)}",
- method="GET",
+ "integrations/install",
+ method="POST",
+ json={
+ "company_matching_criteria": company_matching_criteria,
+ "company_matching_field": company_matching_field,
+ "config": config,
+ "is_sandbox": is_sandbox,
+ "live_mode": live_mode,
+ "type": type,
+ },
+ headers={
+ "content-type": "application/json",
+ },
request_options=request_options,
+ omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- RunIntegrationResponse,
+ InstallIntegrationResponse,
parse_obj_as(
- type_=RunIntegrationResponse, # type: ignore
+ type_=InstallIntegrationResponse, # type: ignore
object_=_response.json(),
),
)
return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
if _response.status_code == 401:
raise UnauthorizedError(
headers=dict(_response.headers),
@@ -741,65 +1480,51 @@ async def run_integration(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def list_integrations(
+ async def start_data_import(
self,
*,
- billing_only: typing.Optional[bool] = None,
- exclude_ids: typing.Optional[typing.Union[str, typing.Sequence[str]]] = None,
- id: typing.Optional[str] = None,
- state: typing.Optional[IntegrationState] = None,
- type: typing.Optional[IntegrationType] = None,
- limit: typing.Optional[int] = None,
- offset: typing.Optional[int] = None,
+ integration_id: str,
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
+ company_matching_field: typing.Optional[str] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[ListIntegrationsResponse]:
+ ) -> AsyncHttpResponse[StartDataImportResponse]:
"""
Parameters
----------
- billing_only : typing.Optional[bool]
-
- exclude_ids : typing.Optional[typing.Union[str, typing.Sequence[str]]]
-
- id : typing.Optional[str]
-
- state : typing.Optional[IntegrationState]
-
- type : typing.Optional[IntegrationType]
+ integration_id : str
- limit : typing.Optional[int]
- Page limit (default 100)
+ company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
- offset : typing.Optional[int]
- Page offset (default 0)
+ company_matching_field : typing.Optional[str]
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[ListIntegrationsResponse]
- OK
+ AsyncHttpResponse[StartDataImportResponse]
+ Created
"""
_response = await self._client_wrapper.httpx_client.request(
- "integrations",
- method="GET",
- params={
- "billing_only": billing_only,
- "exclude_ids": exclude_ids,
- "id": id,
- "state": state,
- "type": type,
- "limit": limit,
- "offset": offset,
+ "integrations/start-data-import",
+ method="POST",
+ json={
+ "company_matching_criteria": company_matching_criteria,
+ "company_matching_field": company_matching_field,
+ "integration_id": integration_id,
+ },
+ headers={
+ "content-type": "application/json",
},
request_options=request_options,
+ omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- ListIntegrationsResponse,
+ StartDataImportResponse,
parse_obj_as(
- type_=ListIntegrationsResponse, # type: ignore
+ type_=StartDataImportResponse, # type: ignore
object_=_response.json(),
),
)
@@ -872,34 +1597,31 @@ async def list_integrations(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def get_integration_webhook_url(
- self, type: str, *, request_options: typing.Optional[RequestOptions] = None
- ) -> AsyncHttpResponse[GetIntegrationWebhookUrlResponse]:
+ async def load_sample_data_set(
+ self, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[LoadSampleDataSetResponse]:
"""
Parameters
----------
- type : str
- type
-
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[GetIntegrationWebhookUrlResponse]
+ AsyncHttpResponse[LoadSampleDataSetResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- f"integrations/{jsonable_encoder(type)}/webhook-url",
+ "integrations/stripe/dataset-sample-v2",
method="GET",
request_options=request_options,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- GetIntegrationWebhookUrlResponse,
+ LoadSampleDataSetResponse,
parse_obj_as(
- type_=GetIntegrationWebhookUrlResponse, # type: ignore
+ type_=LoadSampleDataSetResponse, # type: ignore
object_=_response.json(),
),
)
@@ -961,38 +1683,50 @@ async def get_integration_webhook_url(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def start_data_import(
+ async def assume_stripe_installed(
self,
*,
- integration_id: str,
+ type: IntegrationType,
company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
company_matching_field: typing.Optional[str] = OMIT,
+ config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
+ is_sandbox: typing.Optional[bool] = OMIT,
+ live_mode: typing.Optional[bool] = OMIT,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[StartDataImportResponse]:
+ ) -> AsyncHttpResponse[AssumeStripeInstalledResponse]:
"""
Parameters
----------
- integration_id : str
+ type : IntegrationType
company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
company_matching_field : typing.Optional[str]
+ config : typing.Optional[typing.Dict[str, typing.Any]]
+
+ is_sandbox : typing.Optional[bool]
+
+ live_mode : typing.Optional[bool]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[StartDataImportResponse]
+ AsyncHttpResponse[AssumeStripeInstalledResponse]
Created
"""
_response = await self._client_wrapper.httpx_client.request(
- "integrations/start-data-import",
+ "integrations/stripe/v2/assume-installed",
method="POST",
json={
"company_matching_criteria": company_matching_criteria,
"company_matching_field": company_matching_field,
- "integration_id": integration_id,
+ "config": config,
+ "is_sandbox": is_sandbox,
+ "live_mode": live_mode,
+ "type": type,
},
headers={
"content-type": "application/json",
@@ -1003,9 +1737,9 @@ async def start_data_import(
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- StartDataImportResponse,
+ AssumeStripeInstalledResponse,
parse_obj_as(
- type_=StartDataImportResponse, # type: ignore
+ type_=AssumeStripeInstalledResponse, # type: ignore
object_=_response.json(),
),
)
@@ -1078,35 +1812,78 @@ async def start_data_import(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def load_sample_data_set_v_2(
- self, *, request_options: typing.Optional[RequestOptions] = None
- ) -> AsyncHttpResponse[LoadSampleDataSetV2Response]:
+ async def install_stripe(
+ self,
+ *,
+ type: IntegrationType,
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = OMIT,
+ company_matching_field: typing.Optional[str] = OMIT,
+ config: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
+ is_sandbox: typing.Optional[bool] = OMIT,
+ live_mode: typing.Optional[bool] = OMIT,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[InstallStripeResponse]:
"""
Parameters
----------
+ type : IntegrationType
+
+ company_matching_criteria : typing.Optional[CompanyMatchingCriteria]
+
+ company_matching_field : typing.Optional[str]
+
+ config : typing.Optional[typing.Dict[str, typing.Any]]
+
+ is_sandbox : typing.Optional[bool]
+
+ live_mode : typing.Optional[bool]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[LoadSampleDataSetV2Response]
- OK
+ AsyncHttpResponse[InstallStripeResponse]
+ Created
"""
_response = await self._client_wrapper.httpx_client.request(
- "integrations/stripe/dataset-sample-v2",
- method="GET",
+ "integrations/stripe/v2/install",
+ method="POST",
+ json={
+ "company_matching_criteria": company_matching_criteria,
+ "company_matching_field": company_matching_field,
+ "config": config,
+ "is_sandbox": is_sandbox,
+ "live_mode": live_mode,
+ "type": type,
+ },
+ headers={
+ "content-type": "application/json",
+ },
request_options=request_options,
+ omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- LoadSampleDataSetV2Response,
+ InstallStripeResponse,
parse_obj_as(
- type_=LoadSampleDataSetV2Response, # type: ignore
+ type_=InstallStripeResponse, # type: ignore
object_=_response.json(),
),
)
return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
if _response.status_code == 401:
raise UnauthorizedError(
headers=dict(_response.headers),
diff --git a/src/schematic/integrationsapi/types/__init__.py b/src/schematic/integrationsapi/types/__init__.py
index df68e27..6719438 100644
--- a/src/schematic/integrationsapi/types/__init__.py
+++ b/src/schematic/integrationsapi/types/__init__.py
@@ -6,18 +6,24 @@
from importlib import import_module
if typing.TYPE_CHECKING:
+ from .assume_stripe_installed_response import AssumeStripeInstalledResponse
from .get_integration_webhook_url_response import GetIntegrationWebhookUrlResponse
+ from .install_integration_response import InstallIntegrationResponse
+ from .install_stripe_response import InstallStripeResponse
from .list_integrations_params import ListIntegrationsParams
from .list_integrations_response import ListIntegrationsResponse
- from .load_sample_data_set_v_2_response import LoadSampleDataSetV2Response
+ from .load_sample_data_set_response import LoadSampleDataSetResponse
from .run_integration_response import RunIntegrationResponse
from .start_data_import_response import StartDataImportResponse
from .uninstall_integration_response import UninstallIntegrationResponse
_dynamic_imports: typing.Dict[str, str] = {
+ "AssumeStripeInstalledResponse": ".assume_stripe_installed_response",
"GetIntegrationWebhookUrlResponse": ".get_integration_webhook_url_response",
+ "InstallIntegrationResponse": ".install_integration_response",
+ "InstallStripeResponse": ".install_stripe_response",
"ListIntegrationsParams": ".list_integrations_params",
"ListIntegrationsResponse": ".list_integrations_response",
- "LoadSampleDataSetV2Response": ".load_sample_data_set_v_2_response",
+ "LoadSampleDataSetResponse": ".load_sample_data_set_response",
"RunIntegrationResponse": ".run_integration_response",
"StartDataImportResponse": ".start_data_import_response",
"UninstallIntegrationResponse": ".uninstall_integration_response",
@@ -46,10 +52,13 @@ def __dir__():
__all__ = [
+ "AssumeStripeInstalledResponse",
"GetIntegrationWebhookUrlResponse",
+ "InstallIntegrationResponse",
+ "InstallStripeResponse",
"ListIntegrationsParams",
"ListIntegrationsResponse",
- "LoadSampleDataSetV2Response",
+ "LoadSampleDataSetResponse",
"RunIntegrationResponse",
"StartDataImportResponse",
"UninstallIntegrationResponse",
diff --git a/src/schematic/integrationsapi/types/assume_stripe_installed_response.py b/src/schematic/integrationsapi/types/assume_stripe_installed_response.py
new file mode 100644
index 0000000..7fc5f86
--- /dev/null
+++ b/src/schematic/integrationsapi/types/assume_stripe_installed_response.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.integration_install_response_data import IntegrationInstallResponseData
+
+
+class AssumeStripeInstalledResponse(UniversalBaseModel):
+ data: IntegrationInstallResponseData
+ params: typing.Dict[str, typing.Any] = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/integrationsapi/types/install_integration_response.py b/src/schematic/integrationsapi/types/install_integration_response.py
new file mode 100644
index 0000000..16cfcdf
--- /dev/null
+++ b/src/schematic/integrationsapi/types/install_integration_response.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.integration_install_response_data import IntegrationInstallResponseData
+
+
+class InstallIntegrationResponse(UniversalBaseModel):
+ data: IntegrationInstallResponseData
+ params: typing.Dict[str, typing.Any] = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/integrationsapi/types/install_stripe_response.py b/src/schematic/integrationsapi/types/install_stripe_response.py
new file mode 100644
index 0000000..3619b4e
--- /dev/null
+++ b/src/schematic/integrationsapi/types/install_stripe_response.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.integration_install_response_data import IntegrationInstallResponseData
+
+
+class InstallStripeResponse(UniversalBaseModel):
+ data: IntegrationInstallResponseData
+ params: typing.Dict[str, typing.Any] = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/integrationsapi/types/load_sample_data_set_v_2_response.py b/src/schematic/integrationsapi/types/load_sample_data_set_response.py
similarity index 92%
rename from src/schematic/integrationsapi/types/load_sample_data_set_v_2_response.py
rename to src/schematic/integrationsapi/types/load_sample_data_set_response.py
index 28bdbe8..9fb274e 100644
--- a/src/schematic/integrationsapi/types/load_sample_data_set_v_2_response.py
+++ b/src/schematic/integrationsapi/types/load_sample_data_set_response.py
@@ -7,7 +7,7 @@
from ...types.integrations_data_set_response_data import IntegrationsDataSetResponseData
-class LoadSampleDataSetV2Response(UniversalBaseModel):
+class LoadSampleDataSetResponse(UniversalBaseModel):
data: IntegrationsDataSetResponseData
params: typing.Dict[str, typing.Any] = pydantic.Field()
"""
diff --git a/src/schematic/plangroups/client.py b/src/schematic/plangroups/client.py
index 2c916b4..33e5350 100644
--- a/src/schematic/plangroups/client.py
+++ b/src/schematic/plangroups/client.py
@@ -4,6 +4,7 @@
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.request_options import RequestOptions
+from ..types.checkout_field_input import CheckoutFieldInput
from ..types.compatible_plans import CompatiblePlans
from ..types.custom_plan_config import CustomPlanConfig
from ..types.ordered_plans_in_group import OrderedPlansInGroup
@@ -91,6 +92,7 @@ def create_plan_group(
show_zero_price_as_free: bool,
sync_customer_billing_details: bool,
add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT,
+ custom_checkout_fields: typing.Optional[typing.Sequence[CheckoutFieldInput]] = OMIT,
custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT,
custom_plan_id: typing.Optional[str] = OMIT,
fallback_plan_id: typing.Optional[str] = OMIT,
@@ -148,6 +150,8 @@ def create_plan_group(
add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]]
+ custom_checkout_fields : typing.Optional[typing.Sequence[CheckoutFieldInput]]
+
custom_plan_config : typing.Optional[CustomPlanConfig]
custom_plan_id : typing.Optional[str]
@@ -242,6 +246,7 @@ def create_plan_group(
show_zero_price_as_free=show_zero_price_as_free,
sync_customer_billing_details=sync_customer_billing_details,
add_on_compatibilities=add_on_compatibilities,
+ custom_checkout_fields=custom_checkout_fields,
custom_plan_config=custom_plan_config,
custom_plan_id=custom_plan_id,
fallback_plan_id=fallback_plan_id,
@@ -282,6 +287,7 @@ def update_plan_group(
show_zero_price_as_free: bool,
sync_customer_billing_details: bool,
add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT,
+ custom_checkout_fields: typing.Optional[typing.Sequence[CheckoutFieldInput]] = OMIT,
custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT,
custom_plan_id: typing.Optional[str] = OMIT,
fallback_plan_id: typing.Optional[str] = OMIT,
@@ -342,6 +348,8 @@ def update_plan_group(
add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]]
+ custom_checkout_fields : typing.Optional[typing.Sequence[CheckoutFieldInput]]
+
custom_plan_config : typing.Optional[CustomPlanConfig]
custom_plan_id : typing.Optional[str]
@@ -438,6 +446,7 @@ def update_plan_group(
show_zero_price_as_free=show_zero_price_as_free,
sync_customer_billing_details=sync_customer_billing_details,
add_on_compatibilities=add_on_compatibilities,
+ custom_checkout_fields=custom_checkout_fields,
custom_plan_config=custom_plan_config,
custom_plan_id=custom_plan_id,
fallback_plan_id=fallback_plan_id,
@@ -536,6 +545,7 @@ async def create_plan_group(
show_zero_price_as_free: bool,
sync_customer_billing_details: bool,
add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT,
+ custom_checkout_fields: typing.Optional[typing.Sequence[CheckoutFieldInput]] = OMIT,
custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT,
custom_plan_id: typing.Optional[str] = OMIT,
fallback_plan_id: typing.Optional[str] = OMIT,
@@ -593,6 +603,8 @@ async def create_plan_group(
add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]]
+ custom_checkout_fields : typing.Optional[typing.Sequence[CheckoutFieldInput]]
+
custom_plan_config : typing.Optional[CustomPlanConfig]
custom_plan_id : typing.Optional[str]
@@ -695,6 +707,7 @@ async def main() -> None:
show_zero_price_as_free=show_zero_price_as_free,
sync_customer_billing_details=sync_customer_billing_details,
add_on_compatibilities=add_on_compatibilities,
+ custom_checkout_fields=custom_checkout_fields,
custom_plan_config=custom_plan_config,
custom_plan_id=custom_plan_id,
fallback_plan_id=fallback_plan_id,
@@ -735,6 +748,7 @@ async def update_plan_group(
show_zero_price_as_free: bool,
sync_customer_billing_details: bool,
add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT,
+ custom_checkout_fields: typing.Optional[typing.Sequence[CheckoutFieldInput]] = OMIT,
custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT,
custom_plan_id: typing.Optional[str] = OMIT,
fallback_plan_id: typing.Optional[str] = OMIT,
@@ -795,6 +809,8 @@ async def update_plan_group(
add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]]
+ custom_checkout_fields : typing.Optional[typing.Sequence[CheckoutFieldInput]]
+
custom_plan_config : typing.Optional[CustomPlanConfig]
custom_plan_id : typing.Optional[str]
@@ -899,6 +915,7 @@ async def main() -> None:
show_zero_price_as_free=show_zero_price_as_free,
sync_customer_billing_details=sync_customer_billing_details,
add_on_compatibilities=add_on_compatibilities,
+ custom_checkout_fields=custom_checkout_fields,
custom_plan_config=custom_plan_config,
custom_plan_id=custom_plan_id,
fallback_plan_id=fallback_plan_id,
diff --git a/src/schematic/plangroups/raw_client.py b/src/schematic/plangroups/raw_client.py
index bbb2221..ecc5f77 100644
--- a/src/schematic/plangroups/raw_client.py
+++ b/src/schematic/plangroups/raw_client.py
@@ -17,6 +17,7 @@
from ..errors.not_found_error import NotFoundError
from ..errors.unauthorized_error import UnauthorizedError
from ..types.api_error import ApiError as types_api_error_ApiError
+from ..types.checkout_field_input import CheckoutFieldInput
from ..types.compatible_plans import CompatiblePlans
from ..types.custom_plan_config import CustomPlanConfig
from ..types.ordered_plans_in_group import OrderedPlansInGroup
@@ -152,6 +153,7 @@ def create_plan_group(
show_zero_price_as_free: bool,
sync_customer_billing_details: bool,
add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT,
+ custom_checkout_fields: typing.Optional[typing.Sequence[CheckoutFieldInput]] = OMIT,
custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT,
custom_plan_id: typing.Optional[str] = OMIT,
fallback_plan_id: typing.Optional[str] = OMIT,
@@ -209,6 +211,8 @@ def create_plan_group(
add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]]
+ custom_checkout_fields : typing.Optional[typing.Sequence[CheckoutFieldInput]]
+
custom_plan_config : typing.Optional[CustomPlanConfig]
custom_plan_id : typing.Optional[str]
@@ -254,6 +258,9 @@ def create_plan_group(
"checkout_collect_address": checkout_collect_address,
"checkout_collect_email": checkout_collect_email,
"checkout_collect_phone": checkout_collect_phone,
+ "custom_checkout_fields": convert_and_respect_annotation_metadata(
+ object_=custom_checkout_fields, annotation=typing.Sequence[CheckoutFieldInput], direction="write"
+ ),
"custom_plan_config": convert_and_respect_annotation_metadata(
object_=custom_plan_config, annotation=CustomPlanConfig, direction="write"
),
@@ -397,6 +404,7 @@ def update_plan_group(
show_zero_price_as_free: bool,
sync_customer_billing_details: bool,
add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT,
+ custom_checkout_fields: typing.Optional[typing.Sequence[CheckoutFieldInput]] = OMIT,
custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT,
custom_plan_id: typing.Optional[str] = OMIT,
fallback_plan_id: typing.Optional[str] = OMIT,
@@ -457,6 +465,8 @@ def update_plan_group(
add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]]
+ custom_checkout_fields : typing.Optional[typing.Sequence[CheckoutFieldInput]]
+
custom_plan_config : typing.Optional[CustomPlanConfig]
custom_plan_id : typing.Optional[str]
@@ -502,6 +512,9 @@ def update_plan_group(
"checkout_collect_address": checkout_collect_address,
"checkout_collect_email": checkout_collect_email,
"checkout_collect_phone": checkout_collect_phone,
+ "custom_checkout_fields": convert_and_respect_annotation_metadata(
+ object_=custom_checkout_fields, annotation=typing.Sequence[CheckoutFieldInput], direction="write"
+ ),
"custom_plan_config": convert_and_respect_annotation_metadata(
object_=custom_plan_config, annotation=CustomPlanConfig, direction="write"
),
@@ -743,6 +756,7 @@ async def create_plan_group(
show_zero_price_as_free: bool,
sync_customer_billing_details: bool,
add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT,
+ custom_checkout_fields: typing.Optional[typing.Sequence[CheckoutFieldInput]] = OMIT,
custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT,
custom_plan_id: typing.Optional[str] = OMIT,
fallback_plan_id: typing.Optional[str] = OMIT,
@@ -800,6 +814,8 @@ async def create_plan_group(
add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]]
+ custom_checkout_fields : typing.Optional[typing.Sequence[CheckoutFieldInput]]
+
custom_plan_config : typing.Optional[CustomPlanConfig]
custom_plan_id : typing.Optional[str]
@@ -845,6 +861,9 @@ async def create_plan_group(
"checkout_collect_address": checkout_collect_address,
"checkout_collect_email": checkout_collect_email,
"checkout_collect_phone": checkout_collect_phone,
+ "custom_checkout_fields": convert_and_respect_annotation_metadata(
+ object_=custom_checkout_fields, annotation=typing.Sequence[CheckoutFieldInput], direction="write"
+ ),
"custom_plan_config": convert_and_respect_annotation_metadata(
object_=custom_plan_config, annotation=CustomPlanConfig, direction="write"
),
@@ -988,6 +1007,7 @@ async def update_plan_group(
show_zero_price_as_free: bool,
sync_customer_billing_details: bool,
add_on_compatibilities: typing.Optional[typing.Sequence[CompatiblePlans]] = OMIT,
+ custom_checkout_fields: typing.Optional[typing.Sequence[CheckoutFieldInput]] = OMIT,
custom_plan_config: typing.Optional[CustomPlanConfig] = OMIT,
custom_plan_id: typing.Optional[str] = OMIT,
fallback_plan_id: typing.Optional[str] = OMIT,
@@ -1048,6 +1068,8 @@ async def update_plan_group(
add_on_compatibilities : typing.Optional[typing.Sequence[CompatiblePlans]]
+ custom_checkout_fields : typing.Optional[typing.Sequence[CheckoutFieldInput]]
+
custom_plan_config : typing.Optional[CustomPlanConfig]
custom_plan_id : typing.Optional[str]
@@ -1093,6 +1115,9 @@ async def update_plan_group(
"checkout_collect_address": checkout_collect_address,
"checkout_collect_email": checkout_collect_email,
"checkout_collect_phone": checkout_collect_phone,
+ "custom_checkout_fields": convert_and_respect_annotation_metadata(
+ object_=custom_checkout_fields, annotation=typing.Sequence[CheckoutFieldInput], direction="write"
+ ),
"custom_plan_config": convert_and_respect_annotation_metadata(
object_=custom_plan_config, annotation=CustomPlanConfig, direction="write"
),
diff --git a/src/schematic/planmigrations/__init__.py b/src/schematic/planmigrations/__init__.py
index d4a051c..5958786 100644
--- a/src/schematic/planmigrations/__init__.py
+++ b/src/schematic/planmigrations/__init__.py
@@ -11,22 +11,28 @@
CountCompanyMigrationsResponse,
CountMigrationsParams,
CountMigrationsResponse,
+ CreateMigrationResponse,
GetMigrationResponse,
ListCompanyMigrationsParams,
ListCompanyMigrationsResponse,
ListMigrationsParams,
ListMigrationsResponse,
+ RetryCompanyMigrationResponse,
+ RetryMigrationResponse,
)
_dynamic_imports: typing.Dict[str, str] = {
"CountCompanyMigrationsParams": ".types",
"CountCompanyMigrationsResponse": ".types",
"CountMigrationsParams": ".types",
"CountMigrationsResponse": ".types",
+ "CreateMigrationResponse": ".types",
"GetMigrationResponse": ".types",
"ListCompanyMigrationsParams": ".types",
"ListCompanyMigrationsResponse": ".types",
"ListMigrationsParams": ".types",
"ListMigrationsResponse": ".types",
+ "RetryCompanyMigrationResponse": ".types",
+ "RetryMigrationResponse": ".types",
}
@@ -56,9 +62,12 @@ def __dir__():
"CountCompanyMigrationsResponse",
"CountMigrationsParams",
"CountMigrationsResponse",
+ "CreateMigrationResponse",
"GetMigrationResponse",
"ListCompanyMigrationsParams",
"ListCompanyMigrationsResponse",
"ListMigrationsParams",
"ListMigrationsResponse",
+ "RetryCompanyMigrationResponse",
+ "RetryMigrationResponse",
]
diff --git a/src/schematic/planmigrations/client.py b/src/schematic/planmigrations/client.py
index 6b35a8c..1d34cb8 100644
--- a/src/schematic/planmigrations/client.py
+++ b/src/schematic/planmigrations/client.py
@@ -4,14 +4,23 @@
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.request_options import RequestOptions
+from ..types.migration_error_code import MigrationErrorCode
+from ..types.plan_type import PlanType
from ..types.plan_version_company_migration_status import PlanVersionCompanyMigrationStatus
from ..types.plan_version_migration_status import PlanVersionMigrationStatus
+from ..types.plan_version_migration_strategy import PlanVersionMigrationStrategy
from .raw_client import AsyncRawPlanmigrationsClient, RawPlanmigrationsClient
from .types.count_company_migrations_response import CountCompanyMigrationsResponse
from .types.count_migrations_response import CountMigrationsResponse
+from .types.create_migration_response import CreateMigrationResponse
from .types.get_migration_response import GetMigrationResponse
from .types.list_company_migrations_response import ListCompanyMigrationsResponse
from .types.list_migrations_response import ListMigrationsResponse
+from .types.retry_company_migration_response import RetryCompanyMigrationResponse
+from .types.retry_migration_response import RetryMigrationResponse
+
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
class PlanmigrationsClient:
@@ -82,6 +91,39 @@ def list_company_migrations(
)
return _response.data
+ def retry_company_migration(
+ self, plan_version_company_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RetryCompanyMigrationResponse:
+ """
+ Parameters
+ ----------
+ plan_version_company_migration_id : str
+ plan_version_company_migration_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RetryCompanyMigrationResponse
+ OK
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.planmigrations.retry_company_migration(
+ plan_version_company_migration_id="plan_version_company_migration_id",
+ )
+ """
+ _response = self._raw_client.retry_company_migration(
+ plan_version_company_migration_id, request_options=request_options
+ )
+ return _response.data
+
def count_company_migrations(
self,
*,
@@ -184,6 +226,72 @@ def list_migrations(
)
return _response.data
+ def create_migration(
+ self,
+ *,
+ company_ids: typing.Sequence[str],
+ excluded_company_ids: typing.Sequence[str],
+ plan_id: str,
+ plan_version_id_to: str,
+ plan_version_ids_from: typing.Sequence[str],
+ strategy: PlanVersionMigrationStrategy,
+ target_plan_type: PlanType,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateMigrationResponse:
+ """
+ Parameters
+ ----------
+ company_ids : typing.Sequence[str]
+
+ excluded_company_ids : typing.Sequence[str]
+
+ plan_id : str
+
+ plan_version_id_to : str
+
+ plan_version_ids_from : typing.Sequence[str]
+
+ strategy : PlanVersionMigrationStrategy
+
+ target_plan_type : PlanType
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateMigrationResponse
+ Created
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.planmigrations.create_migration(
+ company_ids=["company_ids"],
+ excluded_company_ids=["excluded_company_ids"],
+ plan_id="plan_id",
+ plan_version_id_to="plan_version_id_to",
+ plan_version_ids_from=["plan_version_ids_from"],
+ strategy="immediate",
+ target_plan_type="plan",
+ )
+ """
+ _response = self._raw_client.create_migration(
+ company_ids=company_ids,
+ excluded_company_ids=excluded_company_ids,
+ plan_id=plan_id,
+ plan_version_id_to=plan_version_id_to,
+ plan_version_ids_from=plan_version_ids_from,
+ strategy=strategy,
+ target_plan_type=target_plan_type,
+ request_options=request_options,
+ )
+ return _response.data
+
def get_migration(
self, plan_version_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> GetMigrationResponse:
@@ -215,6 +323,46 @@ def get_migration(
_response = self._raw_client.get_migration(plan_version_migration_id, request_options=request_options)
return _response.data
+ def retry_migration(
+ self,
+ plan_version_migration_id: str,
+ *,
+ error_codes: typing.Sequence[MigrationErrorCode],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> RetryMigrationResponse:
+ """
+ Parameters
+ ----------
+ plan_version_migration_id : str
+ plan_version_migration_id
+
+ error_codes : typing.Sequence[MigrationErrorCode]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RetryMigrationResponse
+ OK
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.planmigrations.retry_migration(
+ plan_version_migration_id="plan_version_migration_id",
+ error_codes=["ambiguous_subscription_item"],
+ )
+ """
+ _response = self._raw_client.retry_migration(
+ plan_version_migration_id, error_codes=error_codes, request_options=request_options
+ )
+ return _response.data
+
def count_migrations(
self,
*,
@@ -341,6 +489,47 @@ async def main() -> None:
)
return _response.data
+ async def retry_company_migration(
+ self, plan_version_company_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> RetryCompanyMigrationResponse:
+ """
+ Parameters
+ ----------
+ plan_version_company_migration_id : str
+ plan_version_company_migration_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RetryCompanyMigrationResponse
+ OK
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.planmigrations.retry_company_migration(
+ plan_version_company_migration_id="plan_version_company_migration_id",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.retry_company_migration(
+ plan_version_company_migration_id, request_options=request_options
+ )
+ return _response.data
+
async def count_company_migrations(
self,
*,
@@ -459,6 +648,80 @@ async def main() -> None:
)
return _response.data
+ async def create_migration(
+ self,
+ *,
+ company_ids: typing.Sequence[str],
+ excluded_company_ids: typing.Sequence[str],
+ plan_id: str,
+ plan_version_id_to: str,
+ plan_version_ids_from: typing.Sequence[str],
+ strategy: PlanVersionMigrationStrategy,
+ target_plan_type: PlanType,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> CreateMigrationResponse:
+ """
+ Parameters
+ ----------
+ company_ids : typing.Sequence[str]
+
+ excluded_company_ids : typing.Sequence[str]
+
+ plan_id : str
+
+ plan_version_id_to : str
+
+ plan_version_ids_from : typing.Sequence[str]
+
+ strategy : PlanVersionMigrationStrategy
+
+ target_plan_type : PlanType
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ CreateMigrationResponse
+ Created
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.planmigrations.create_migration(
+ company_ids=["company_ids"],
+ excluded_company_ids=["excluded_company_ids"],
+ plan_id="plan_id",
+ plan_version_id_to="plan_version_id_to",
+ plan_version_ids_from=["plan_version_ids_from"],
+ strategy="immediate",
+ target_plan_type="plan",
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.create_migration(
+ company_ids=company_ids,
+ excluded_company_ids=excluded_company_ids,
+ plan_id=plan_id,
+ plan_version_id_to=plan_version_id_to,
+ plan_version_ids_from=plan_version_ids_from,
+ strategy=strategy,
+ target_plan_type=target_plan_type,
+ request_options=request_options,
+ )
+ return _response.data
+
async def get_migration(
self, plan_version_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None
) -> GetMigrationResponse:
@@ -498,6 +761,54 @@ async def main() -> None:
_response = await self._raw_client.get_migration(plan_version_migration_id, request_options=request_options)
return _response.data
+ async def retry_migration(
+ self,
+ plan_version_migration_id: str,
+ *,
+ error_codes: typing.Sequence[MigrationErrorCode],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> RetryMigrationResponse:
+ """
+ Parameters
+ ----------
+ plan_version_migration_id : str
+ plan_version_migration_id
+
+ error_codes : typing.Sequence[MigrationErrorCode]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ RetryMigrationResponse
+ OK
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.planmigrations.retry_migration(
+ plan_version_migration_id="plan_version_migration_id",
+ error_codes=["ambiguous_subscription_item"],
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.retry_migration(
+ plan_version_migration_id, error_codes=error_codes, request_options=request_options
+ )
+ return _response.data
+
async def count_migrations(
self,
*,
diff --git a/src/schematic/planmigrations/raw_client.py b/src/schematic/planmigrations/raw_client.py
index 519cfa1..2b7c380 100644
--- a/src/schematic/planmigrations/raw_client.py
+++ b/src/schematic/planmigrations/raw_client.py
@@ -16,15 +16,24 @@
from ..errors.not_found_error import NotFoundError
from ..errors.unauthorized_error import UnauthorizedError
from ..types.api_error import ApiError as types_api_error_ApiError
+from ..types.migration_error_code import MigrationErrorCode
+from ..types.plan_type import PlanType
from ..types.plan_version_company_migration_status import PlanVersionCompanyMigrationStatus
from ..types.plan_version_migration_status import PlanVersionMigrationStatus
+from ..types.plan_version_migration_strategy import PlanVersionMigrationStrategy
from .types.count_company_migrations_response import CountCompanyMigrationsResponse
from .types.count_migrations_response import CountMigrationsResponse
+from .types.create_migration_response import CreateMigrationResponse
from .types.get_migration_response import GetMigrationResponse
from .types.list_company_migrations_response import ListCompanyMigrationsResponse
from .types.list_migrations_response import ListMigrationsResponse
+from .types.retry_company_migration_response import RetryCompanyMigrationResponse
+from .types.retry_migration_response import RetryMigrationResponse
from pydantic import ValidationError
+# this is used as the default value for optional parameters
+OMIT = typing.cast(typing.Any, ...)
+
class RawPlanmigrationsClient:
def __init__(self, *, client_wrapper: SyncClientWrapper):
@@ -78,9 +87,686 @@ def list_company_migrations(
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- ListCompanyMigrationsResponse,
+ ListCompanyMigrationsResponse,
+ parse_obj_as(
+ type_=ListCompanyMigrationsResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ def retry_company_migration(
+ self, plan_version_company_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[RetryCompanyMigrationResponse]:
+ """
+ Parameters
+ ----------
+ plan_version_company_migration_id : str
+ plan_version_company_migration_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[RetryCompanyMigrationResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"plan-version-company-migrations/{jsonable_encoder(plan_version_company_migration_id)}/retry",
+ method="POST",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RetryCompanyMigrationResponse,
+ parse_obj_as(
+ type_=RetryCompanyMigrationResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ def count_company_migrations(
+ self,
+ *,
+ migration_id: typing.Optional[str] = None,
+ q: typing.Optional[str] = None,
+ status: typing.Optional[PlanVersionCompanyMigrationStatus] = None,
+ limit: typing.Optional[int] = None,
+ offset: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CountCompanyMigrationsResponse]:
+ """
+ Parameters
+ ----------
+ migration_id : typing.Optional[str]
+
+ q : typing.Optional[str]
+
+ status : typing.Optional[PlanVersionCompanyMigrationStatus]
+
+ limit : typing.Optional[int]
+ Page limit (default 100)
+
+ offset : typing.Optional[int]
+ Page offset (default 0)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CountCompanyMigrationsResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "plan-version-company-migrations/count",
+ method="GET",
+ params={
+ "migration_id": migration_id,
+ "q": q,
+ "status": status,
+ "limit": limit,
+ "offset": offset,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CountCompanyMigrationsResponse,
+ parse_obj_as(
+ type_=CountCompanyMigrationsResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ def list_migrations(
+ self,
+ *,
+ plan_version_id: typing.Optional[str] = None,
+ status: typing.Optional[PlanVersionMigrationStatus] = None,
+ limit: typing.Optional[int] = None,
+ offset: typing.Optional[int] = None,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[ListMigrationsResponse]:
+ """
+ Parameters
+ ----------
+ plan_version_id : typing.Optional[str]
+
+ status : typing.Optional[PlanVersionMigrationStatus]
+
+ limit : typing.Optional[int]
+ Page limit (default 100)
+
+ offset : typing.Optional[int]
+ Page offset (default 0)
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[ListMigrationsResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "plan-version-migrations",
+ method="GET",
+ params={
+ "plan_version_id": plan_version_id,
+ "status": status,
+ "limit": limit,
+ "offset": offset,
+ },
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ ListMigrationsResponse,
+ parse_obj_as(
+ type_=ListMigrationsResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ def create_migration(
+ self,
+ *,
+ company_ids: typing.Sequence[str],
+ excluded_company_ids: typing.Sequence[str],
+ plan_id: str,
+ plan_version_id_to: str,
+ plan_version_ids_from: typing.Sequence[str],
+ strategy: PlanVersionMigrationStrategy,
+ target_plan_type: PlanType,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[CreateMigrationResponse]:
+ """
+ Parameters
+ ----------
+ company_ids : typing.Sequence[str]
+
+ excluded_company_ids : typing.Sequence[str]
+
+ plan_id : str
+
+ plan_version_id_to : str
+
+ plan_version_ids_from : typing.Sequence[str]
+
+ strategy : PlanVersionMigrationStrategy
+
+ target_plan_type : PlanType
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[CreateMigrationResponse]
+ Created
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ "plan-version-migrations",
+ method="POST",
+ json={
+ "company_ids": company_ids,
+ "excluded_company_ids": excluded_company_ids,
+ "plan_id": plan_id,
+ "plan_version_id_to": plan_version_id_to,
+ "plan_version_ids_from": plan_version_ids_from,
+ "strategy": strategy,
+ "target_plan_type": target_plan_type,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ CreateMigrationResponse,
+ parse_obj_as(
+ type_=CreateMigrationResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ def get_migration(
+ self, plan_version_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> HttpResponse[GetMigrationResponse]:
+ """
+ Parameters
+ ----------
+ plan_version_migration_id : str
+ plan_version_migration_id
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[GetMigrationResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"plan-version-migrations/{jsonable_encoder(plan_version_migration_id)}",
+ method="GET",
+ request_options=request_options,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ GetMigrationResponse,
+ parse_obj_as(
+ type_=GetMigrationResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
+ def retry_migration(
+ self,
+ plan_version_migration_id: str,
+ *,
+ error_codes: typing.Sequence[MigrationErrorCode],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[RetryMigrationResponse]:
+ """
+ Parameters
+ ----------
+ plan_version_migration_id : str
+ plan_version_migration_id
+
+ error_codes : typing.Sequence[MigrationErrorCode]
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[RetryMigrationResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"plan-version-migrations/{jsonable_encoder(plan_version_migration_id)}/retry",
+ method="POST",
+ json={
+ "error_codes": error_codes,
+ },
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ RetryMigrationResponse,
parse_obj_as(
- type_=ListCompanyMigrationsResponse, # type: ignore
+ type_=RetryMigrationResponse, # type: ignore
object_=_response.json(),
),
)
@@ -153,24 +839,21 @@ def list_company_migrations(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- def count_company_migrations(
+ def count_migrations(
self,
*,
- migration_id: typing.Optional[str] = None,
- q: typing.Optional[str] = None,
- status: typing.Optional[PlanVersionCompanyMigrationStatus] = None,
+ plan_version_id: typing.Optional[str] = None,
+ status: typing.Optional[PlanVersionMigrationStatus] = None,
limit: typing.Optional[int] = None,
offset: typing.Optional[int] = None,
request_options: typing.Optional[RequestOptions] = None,
- ) -> HttpResponse[CountCompanyMigrationsResponse]:
+ ) -> HttpResponse[CountMigrationsResponse]:
"""
Parameters
----------
- migration_id : typing.Optional[str]
-
- q : typing.Optional[str]
+ plan_version_id : typing.Optional[str]
- status : typing.Optional[PlanVersionCompanyMigrationStatus]
+ status : typing.Optional[PlanVersionMigrationStatus]
limit : typing.Optional[int]
Page limit (default 100)
@@ -183,15 +866,14 @@ def count_company_migrations(
Returns
-------
- HttpResponse[CountCompanyMigrationsResponse]
+ HttpResponse[CountMigrationsResponse]
OK
"""
_response = self._client_wrapper.httpx_client.request(
- "plan-version-company-migrations/count",
+ "plan-version-migrations/count",
method="GET",
params={
- "migration_id": migration_id,
- "q": q,
+ "plan_version_id": plan_version_id,
"status": status,
"limit": limit,
"offset": offset,
@@ -201,9 +883,9 @@ def count_company_migrations(
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- CountCompanyMigrationsResponse,
+ CountMigrationsResponse,
parse_obj_as(
- type_=CountCompanyMigrationsResponse, # type: ignore
+ type_=CountMigrationsResponse, # type: ignore
object_=_response.json(),
),
)
@@ -276,21 +958,29 @@ def count_company_migrations(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- def list_migrations(
+
+class AsyncRawPlanmigrationsClient:
+ def __init__(self, *, client_wrapper: AsyncClientWrapper):
+ self._client_wrapper = client_wrapper
+
+ async def list_company_migrations(
self,
*,
- plan_version_id: typing.Optional[str] = None,
- status: typing.Optional[PlanVersionMigrationStatus] = None,
+ migration_id: typing.Optional[str] = None,
+ q: typing.Optional[str] = None,
+ status: typing.Optional[PlanVersionCompanyMigrationStatus] = None,
limit: typing.Optional[int] = None,
offset: typing.Optional[int] = None,
request_options: typing.Optional[RequestOptions] = None,
- ) -> HttpResponse[ListMigrationsResponse]:
+ ) -> AsyncHttpResponse[ListCompanyMigrationsResponse]:
"""
Parameters
----------
- plan_version_id : typing.Optional[str]
+ migration_id : typing.Optional[str]
- status : typing.Optional[PlanVersionMigrationStatus]
+ q : typing.Optional[str]
+
+ status : typing.Optional[PlanVersionCompanyMigrationStatus]
limit : typing.Optional[int]
Page limit (default 100)
@@ -303,14 +993,15 @@ def list_migrations(
Returns
-------
- HttpResponse[ListMigrationsResponse]
+ AsyncHttpResponse[ListCompanyMigrationsResponse]
OK
"""
- _response = self._client_wrapper.httpx_client.request(
- "plan-version-migrations",
+ _response = await self._client_wrapper.httpx_client.request(
+ "plan-version-company-migrations",
method="GET",
params={
- "plan_version_id": plan_version_id,
+ "migration_id": migration_id,
+ "q": q,
"status": status,
"limit": limit,
"offset": offset,
@@ -320,13 +1011,13 @@ def list_migrations(
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- ListMigrationsResponse,
+ ListCompanyMigrationsResponse,
parse_obj_as(
- type_=ListMigrationsResponse, # type: ignore
+ type_=ListCompanyMigrationsResponse, # type: ignore
object_=_response.json(),
),
)
- return HttpResponse(response=_response, data=_data)
+ return AsyncHttpResponse(response=_response, data=_data)
if _response.status_code == 400:
raise BadRequestError(
headers=dict(_response.headers),
@@ -395,38 +1086,49 @@ def list_migrations(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- def get_migration(
- self, plan_version_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None
- ) -> HttpResponse[GetMigrationResponse]:
+ async def retry_company_migration(
+ self, plan_version_company_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[RetryCompanyMigrationResponse]:
"""
Parameters
----------
- plan_version_migration_id : str
- plan_version_migration_id
+ plan_version_company_migration_id : str
+ plan_version_company_migration_id
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- HttpResponse[GetMigrationResponse]
+ AsyncHttpResponse[RetryCompanyMigrationResponse]
OK
"""
- _response = self._client_wrapper.httpx_client.request(
- f"plan-version-migrations/{jsonable_encoder(plan_version_migration_id)}",
- method="GET",
+ _response = await self._client_wrapper.httpx_client.request(
+ f"plan-version-company-migrations/{jsonable_encoder(plan_version_company_migration_id)}/retry",
+ method="POST",
request_options=request_options,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- GetMigrationResponse,
+ RetryCompanyMigrationResponse,
parse_obj_as(
- type_=GetMigrationResponse, # type: ignore
+ type_=RetryCompanyMigrationResponse, # type: ignore
object_=_response.json(),
),
)
- return HttpResponse(response=_response, data=_data)
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
if _response.status_code == 401:
raise UnauthorizedError(
headers=dict(_response.headers),
@@ -484,21 +1186,24 @@ def get_migration(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- def count_migrations(
+ async def count_company_migrations(
self,
*,
- plan_version_id: typing.Optional[str] = None,
- status: typing.Optional[PlanVersionMigrationStatus] = None,
+ migration_id: typing.Optional[str] = None,
+ q: typing.Optional[str] = None,
+ status: typing.Optional[PlanVersionCompanyMigrationStatus] = None,
limit: typing.Optional[int] = None,
offset: typing.Optional[int] = None,
request_options: typing.Optional[RequestOptions] = None,
- ) -> HttpResponse[CountMigrationsResponse]:
+ ) -> AsyncHttpResponse[CountCompanyMigrationsResponse]:
"""
Parameters
----------
- plan_version_id : typing.Optional[str]
+ migration_id : typing.Optional[str]
- status : typing.Optional[PlanVersionMigrationStatus]
+ q : typing.Optional[str]
+
+ status : typing.Optional[PlanVersionCompanyMigrationStatus]
limit : typing.Optional[int]
Page limit (default 100)
@@ -511,14 +1216,15 @@ def count_migrations(
Returns
-------
- HttpResponse[CountMigrationsResponse]
+ AsyncHttpResponse[CountCompanyMigrationsResponse]
OK
"""
- _response = self._client_wrapper.httpx_client.request(
- "plan-version-migrations/count",
+ _response = await self._client_wrapper.httpx_client.request(
+ "plan-version-company-migrations/count",
method="GET",
params={
- "plan_version_id": plan_version_id,
+ "migration_id": migration_id,
+ "q": q,
"status": status,
"limit": limit,
"offset": offset,
@@ -528,13 +1234,13 @@ def count_migrations(
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- CountMigrationsResponse,
+ CountCompanyMigrationsResponse,
parse_obj_as(
- type_=CountMigrationsResponse, # type: ignore
+ type_=CountCompanyMigrationsResponse, # type: ignore
object_=_response.json(),
),
)
- return HttpResponse(response=_response, data=_data)
+ return AsyncHttpResponse(response=_response, data=_data)
if _response.status_code == 400:
raise BadRequestError(
headers=dict(_response.headers),
@@ -603,29 +1309,21 @@ def count_migrations(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
-
-class AsyncRawPlanmigrationsClient:
- def __init__(self, *, client_wrapper: AsyncClientWrapper):
- self._client_wrapper = client_wrapper
-
- async def list_company_migrations(
+ async def list_migrations(
self,
*,
- migration_id: typing.Optional[str] = None,
- q: typing.Optional[str] = None,
- status: typing.Optional[PlanVersionCompanyMigrationStatus] = None,
+ plan_version_id: typing.Optional[str] = None,
+ status: typing.Optional[PlanVersionMigrationStatus] = None,
limit: typing.Optional[int] = None,
offset: typing.Optional[int] = None,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[ListCompanyMigrationsResponse]:
+ ) -> AsyncHttpResponse[ListMigrationsResponse]:
"""
Parameters
----------
- migration_id : typing.Optional[str]
-
- q : typing.Optional[str]
+ plan_version_id : typing.Optional[str]
- status : typing.Optional[PlanVersionCompanyMigrationStatus]
+ status : typing.Optional[PlanVersionMigrationStatus]
limit : typing.Optional[int]
Page limit (default 100)
@@ -638,15 +1336,14 @@ async def list_company_migrations(
Returns
-------
- AsyncHttpResponse[ListCompanyMigrationsResponse]
+ AsyncHttpResponse[ListMigrationsResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- "plan-version-company-migrations",
+ "plan-version-migrations",
method="GET",
params={
- "migration_id": migration_id,
- "q": q,
+ "plan_version_id": plan_version_id,
"status": status,
"limit": limit,
"offset": offset,
@@ -656,9 +1353,9 @@ async def list_company_migrations(
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- ListCompanyMigrationsResponse,
+ ListMigrationsResponse,
parse_obj_as(
- type_=ListCompanyMigrationsResponse, # type: ignore
+ type_=ListMigrationsResponse, # type: ignore
object_=_response.json(),
),
)
@@ -731,57 +1428,67 @@ async def list_company_migrations(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def count_company_migrations(
+ async def create_migration(
self,
*,
- migration_id: typing.Optional[str] = None,
- q: typing.Optional[str] = None,
- status: typing.Optional[PlanVersionCompanyMigrationStatus] = None,
- limit: typing.Optional[int] = None,
- offset: typing.Optional[int] = None,
+ company_ids: typing.Sequence[str],
+ excluded_company_ids: typing.Sequence[str],
+ plan_id: str,
+ plan_version_id_to: str,
+ plan_version_ids_from: typing.Sequence[str],
+ strategy: PlanVersionMigrationStrategy,
+ target_plan_type: PlanType,
request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[CountCompanyMigrationsResponse]:
+ ) -> AsyncHttpResponse[CreateMigrationResponse]:
"""
Parameters
----------
- migration_id : typing.Optional[str]
+ company_ids : typing.Sequence[str]
- q : typing.Optional[str]
+ excluded_company_ids : typing.Sequence[str]
- status : typing.Optional[PlanVersionCompanyMigrationStatus]
+ plan_id : str
- limit : typing.Optional[int]
- Page limit (default 100)
+ plan_version_id_to : str
- offset : typing.Optional[int]
- Page offset (default 0)
+ plan_version_ids_from : typing.Sequence[str]
+
+ strategy : PlanVersionMigrationStrategy
+
+ target_plan_type : PlanType
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[CountCompanyMigrationsResponse]
- OK
+ AsyncHttpResponse[CreateMigrationResponse]
+ Created
"""
_response = await self._client_wrapper.httpx_client.request(
- "plan-version-company-migrations/count",
- method="GET",
- params={
- "migration_id": migration_id,
- "q": q,
- "status": status,
- "limit": limit,
- "offset": offset,
+ "plan-version-migrations",
+ method="POST",
+ json={
+ "company_ids": company_ids,
+ "excluded_company_ids": excluded_company_ids,
+ "plan_id": plan_id,
+ "plan_version_id_to": plan_version_id_to,
+ "plan_version_ids_from": plan_version_ids_from,
+ "strategy": strategy,
+ "target_plan_type": target_plan_type,
+ },
+ headers={
+ "content-type": "application/json",
},
request_options=request_options,
+ omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- CountCompanyMigrationsResponse,
+ CreateMigrationResponse,
parse_obj_as(
- type_=CountCompanyMigrationsResponse, # type: ignore
+ type_=CreateMigrationResponse, # type: ignore
object_=_response.json(),
),
)
@@ -854,68 +1561,38 @@ async def count_company_migrations(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def list_migrations(
- self,
- *,
- plan_version_id: typing.Optional[str] = None,
- status: typing.Optional[PlanVersionMigrationStatus] = None,
- limit: typing.Optional[int] = None,
- offset: typing.Optional[int] = None,
- request_options: typing.Optional[RequestOptions] = None,
- ) -> AsyncHttpResponse[ListMigrationsResponse]:
+ async def get_migration(
+ self, plan_version_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None
+ ) -> AsyncHttpResponse[GetMigrationResponse]:
"""
Parameters
----------
- plan_version_id : typing.Optional[str]
-
- status : typing.Optional[PlanVersionMigrationStatus]
-
- limit : typing.Optional[int]
- Page limit (default 100)
-
- offset : typing.Optional[int]
- Page offset (default 0)
+ plan_version_migration_id : str
+ plan_version_migration_id
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[ListMigrationsResponse]
+ AsyncHttpResponse[GetMigrationResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- "plan-version-migrations",
+ f"plan-version-migrations/{jsonable_encoder(plan_version_migration_id)}",
method="GET",
- params={
- "plan_version_id": plan_version_id,
- "status": status,
- "limit": limit,
- "offset": offset,
- },
request_options=request_options,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- ListMigrationsResponse,
+ GetMigrationResponse,
parse_obj_as(
- type_=ListMigrationsResponse, # type: ignore
+ type_=GetMigrationResponse, # type: ignore
object_=_response.json(),
),
)
return AsyncHttpResponse(response=_response, data=_data)
- if _response.status_code == 400:
- raise BadRequestError(
- headers=dict(_response.headers),
- body=typing.cast(
- types_api_error_ApiError,
- parse_obj_as(
- type_=types_api_error_ApiError, # type: ignore
- object_=_response.json(),
- ),
- ),
- )
if _response.status_code == 401:
raise UnauthorizedError(
headers=dict(_response.headers),
@@ -973,38 +1650,62 @@ async def list_migrations(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
- async def get_migration(
- self, plan_version_migration_id: str, *, request_options: typing.Optional[RequestOptions] = None
- ) -> AsyncHttpResponse[GetMigrationResponse]:
+ async def retry_migration(
+ self,
+ plan_version_migration_id: str,
+ *,
+ error_codes: typing.Sequence[MigrationErrorCode],
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[RetryMigrationResponse]:
"""
Parameters
----------
plan_version_migration_id : str
plan_version_migration_id
+ error_codes : typing.Sequence[MigrationErrorCode]
+
request_options : typing.Optional[RequestOptions]
Request-specific configuration.
Returns
-------
- AsyncHttpResponse[GetMigrationResponse]
+ AsyncHttpResponse[RetryMigrationResponse]
OK
"""
_response = await self._client_wrapper.httpx_client.request(
- f"plan-version-migrations/{jsonable_encoder(plan_version_migration_id)}",
- method="GET",
+ f"plan-version-migrations/{jsonable_encoder(plan_version_migration_id)}/retry",
+ method="POST",
+ json={
+ "error_codes": error_codes,
+ },
+ headers={
+ "content-type": "application/json",
+ },
request_options=request_options,
+ omit=OMIT,
)
try:
if 200 <= _response.status_code < 300:
_data = typing.cast(
- GetMigrationResponse,
+ RetryMigrationResponse,
parse_obj_as(
- type_=GetMigrationResponse, # type: ignore
+ type_=RetryMigrationResponse, # type: ignore
object_=_response.json(),
),
)
return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
if _response.status_code == 401:
raise UnauthorizedError(
headers=dict(_response.headers),
diff --git a/src/schematic/planmigrations/types/__init__.py b/src/schematic/planmigrations/types/__init__.py
index 75332fc..196e330 100644
--- a/src/schematic/planmigrations/types/__init__.py
+++ b/src/schematic/planmigrations/types/__init__.py
@@ -10,21 +10,27 @@
from .count_company_migrations_response import CountCompanyMigrationsResponse
from .count_migrations_params import CountMigrationsParams
from .count_migrations_response import CountMigrationsResponse
+ from .create_migration_response import CreateMigrationResponse
from .get_migration_response import GetMigrationResponse
from .list_company_migrations_params import ListCompanyMigrationsParams
from .list_company_migrations_response import ListCompanyMigrationsResponse
from .list_migrations_params import ListMigrationsParams
from .list_migrations_response import ListMigrationsResponse
+ from .retry_company_migration_response import RetryCompanyMigrationResponse
+ from .retry_migration_response import RetryMigrationResponse
_dynamic_imports: typing.Dict[str, str] = {
"CountCompanyMigrationsParams": ".count_company_migrations_params",
"CountCompanyMigrationsResponse": ".count_company_migrations_response",
"CountMigrationsParams": ".count_migrations_params",
"CountMigrationsResponse": ".count_migrations_response",
+ "CreateMigrationResponse": ".create_migration_response",
"GetMigrationResponse": ".get_migration_response",
"ListCompanyMigrationsParams": ".list_company_migrations_params",
"ListCompanyMigrationsResponse": ".list_company_migrations_response",
"ListMigrationsParams": ".list_migrations_params",
"ListMigrationsResponse": ".list_migrations_response",
+ "RetryCompanyMigrationResponse": ".retry_company_migration_response",
+ "RetryMigrationResponse": ".retry_migration_response",
}
@@ -54,9 +60,12 @@ def __dir__():
"CountCompanyMigrationsResponse",
"CountMigrationsParams",
"CountMigrationsResponse",
+ "CreateMigrationResponse",
"GetMigrationResponse",
"ListCompanyMigrationsParams",
"ListCompanyMigrationsResponse",
"ListMigrationsParams",
"ListMigrationsResponse",
+ "RetryCompanyMigrationResponse",
+ "RetryMigrationResponse",
]
diff --git a/src/schematic/planmigrations/types/create_migration_response.py b/src/schematic/planmigrations/types/create_migration_response.py
new file mode 100644
index 0000000..d21a8c6
--- /dev/null
+++ b/src/schematic/planmigrations/types/create_migration_response.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.plan_version_migration_response_data import PlanVersionMigrationResponseData
+
+
+class CreateMigrationResponse(UniversalBaseModel):
+ data: PlanVersionMigrationResponseData
+ params: typing.Dict[str, typing.Any] = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/planmigrations/types/retry_company_migration_response.py b/src/schematic/planmigrations/types/retry_company_migration_response.py
new file mode 100644
index 0000000..56e27fc
--- /dev/null
+++ b/src/schematic/planmigrations/types/retry_company_migration_response.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.plan_version_company_migration_response_data import PlanVersionCompanyMigrationResponseData
+
+
+class RetryCompanyMigrationResponse(UniversalBaseModel):
+ data: PlanVersionCompanyMigrationResponseData
+ params: typing.Dict[str, typing.Any] = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/planmigrations/types/retry_migration_response.py b/src/schematic/planmigrations/types/retry_migration_response.py
new file mode 100644
index 0000000..2c07ebe
--- /dev/null
+++ b/src/schematic/planmigrations/types/retry_migration_response.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.plan_version_migration_response_data import PlanVersionMigrationResponseData
+
+
+class RetryMigrationResponse(UniversalBaseModel):
+ data: PlanVersionMigrationResponseData
+ params: typing.Dict[str, typing.Any] = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/plans/__init__.py b/src/schematic/plans/__init__.py
index ef40e49..65c3442 100644
--- a/src/schematic/plans/__init__.py
+++ b/src/schematic/plans/__init__.py
@@ -26,6 +26,7 @@
ListPlanIssuesResponse,
ListPlansParams,
ListPlansResponse,
+ MarkCustomPlanBillingPaidResponse,
PublishPlanVersionResponse,
RetryCustomPlanBillingResponse,
UpdateCompanyPlansResponse,
@@ -53,6 +54,7 @@
"ListPlanIssuesResponse": ".types",
"ListPlansParams": ".types",
"ListPlansResponse": ".types",
+ "MarkCustomPlanBillingPaidResponse": ".types",
"PublishPlanVersionResponse": ".types",
"RetryCustomPlanBillingResponse": ".types",
"UpdateCompanyPlansResponse": ".types",
@@ -103,6 +105,7 @@ def __dir__():
"ListPlanIssuesResponse",
"ListPlansParams",
"ListPlansResponse",
+ "MarkCustomPlanBillingPaidResponse",
"PublishPlanVersionResponse",
"RetryCustomPlanBillingResponse",
"UpdateCompanyPlansResponse",
diff --git a/src/schematic/plans/client.py b/src/schematic/plans/client.py
index 16ba1f2..94061e8 100644
--- a/src/schematic/plans/client.py
+++ b/src/schematic/plans/client.py
@@ -5,9 +5,11 @@
from ..core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ..core.request_options import RequestOptions
from ..types.billing_provider_type import BillingProviderType
+from ..types.billing_strategy import BillingStrategy
from ..types.charge_type import ChargeType
from ..types.custom_plan_activation_strategy import CustomPlanActivationStrategy
from ..types.custom_plan_billing_status import CustomPlanBillingStatus
+from ..types.mark_custom_plan_billing_paid_request_body import MarkCustomPlanBillingPaidRequestBody
from ..types.plan_currency_price_request_body import PlanCurrencyPriceRequestBody
from ..types.plan_icon import PlanIcon
from ..types.plan_type import PlanType
@@ -25,6 +27,7 @@
from .types.list_custom_plan_billings_response import ListCustomPlanBillingsResponse
from .types.list_plan_issues_response import ListPlanIssuesResponse
from .types.list_plans_response import ListPlansResponse
+from .types.mark_custom_plan_billing_paid_response import MarkCustomPlanBillingPaidResponse
from .types.publish_plan_version_response import PublishPlanVersionResponse
from .types.retry_custom_plan_billing_response import RetryCustomPlanBillingResponse
from .types.update_company_plans_response import UpdateCompanyPlansResponse
@@ -163,6 +166,46 @@ def list_custom_plan_billings(
)
return _response.data
+ def mark_custom_plan_billing_paid(
+ self,
+ custom_plan_billing_id: str,
+ *,
+ request: MarkCustomPlanBillingPaidRequestBody,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> MarkCustomPlanBillingPaidResponse:
+ """
+ Parameters
+ ----------
+ custom_plan_billing_id : str
+ custom_plan_billing_id
+
+ request : MarkCustomPlanBillingPaidRequestBody
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ MarkCustomPlanBillingPaidResponse
+ OK
+
+ Examples
+ --------
+ from schematic import Schematic
+
+ client = Schematic(
+ api_key="YOUR_API_KEY",
+ )
+ client.plans.mark_custom_plan_billing_paid(
+ custom_plan_billing_id="custom_plan_billing_id",
+ request={"key": "value"},
+ )
+ """
+ _response = self._raw_client.mark_custom_plan_billing_paid(
+ custom_plan_billing_id, request=request, request_options=request_options
+ )
+ return _response.data
+
def retry_custom_plan_billing(
self,
custom_plan_billing_id: str,
@@ -292,6 +335,7 @@ def list_plans(
plan_type: typing.Optional[PlanType] = None,
q: typing.Optional[str] = None,
scoped_to_company_id: typing.Optional[str] = None,
+ with_entitlements: typing.Optional[bool] = None,
without_entitlement_for: typing.Optional[str] = None,
without_paid_product_id: typing.Optional[bool] = None,
limit: typing.Optional[int] = None,
@@ -334,6 +378,9 @@ def list_plans(
scoped_to_company_id : typing.Optional[str]
Filter plans scoped to a specific company (custom plans)
+ with_entitlements : typing.Optional[bool]
+ Include each plan's entitlements in the response
+
without_entitlement_for : typing.Optional[str]
Filter out plans that already have a plan entitlement for the specified feature ID
@@ -374,6 +421,7 @@ def list_plans(
plan_type="plan",
q="q",
scoped_to_company_id="scoped_to_company_id",
+ with_entitlements=True,
without_entitlement_for="without_entitlement_for",
without_paid_product_id=True,
limit=1000000,
@@ -393,6 +441,7 @@ def list_plans(
plan_type=plan_type,
q=q,
scoped_to_company_id=scoped_to_company_id,
+ with_entitlements=with_entitlements,
without_entitlement_for=without_entitlement_for,
without_paid_product_id=without_paid_product_id,
limit=limit,
@@ -570,6 +619,7 @@ def upsert_billing_product_plan(
charge_type: ChargeType,
is_trialable: bool,
billing_product_id: typing.Optional[str] = OMIT,
+ billing_strategy: typing.Optional[BillingStrategy] = OMIT,
currency: typing.Optional[str] = OMIT,
currency_prices: typing.Optional[typing.Sequence[PlanCurrencyPriceRequestBody]] = OMIT,
monthly_price: typing.Optional[int] = OMIT,
@@ -595,6 +645,8 @@ def upsert_billing_product_plan(
billing_product_id : typing.Optional[str]
+ billing_strategy : typing.Optional[BillingStrategy]
+
currency : typing.Optional[str]
currency_prices : typing.Optional[typing.Sequence[PlanCurrencyPriceRequestBody]]
@@ -643,6 +695,7 @@ def upsert_billing_product_plan(
charge_type=charge_type,
is_trialable=is_trialable,
billing_product_id=billing_product_id,
+ billing_strategy=billing_strategy,
currency=currency,
currency_prices=currency_prices,
monthly_price=monthly_price,
@@ -703,7 +756,7 @@ def upsert_plan_for_billing_product(
api_key="YOUR_API_KEY",
)
client.plans.upsert_plan_for_billing_product(
- billing_provider="orb",
+ billing_provider="metronome",
description="description",
external_resource_id="external_resource_id",
name="name",
@@ -839,6 +892,7 @@ def count_plans(
plan_type: typing.Optional[PlanType] = None,
q: typing.Optional[str] = None,
scoped_to_company_id: typing.Optional[str] = None,
+ with_entitlements: typing.Optional[bool] = None,
without_entitlement_for: typing.Optional[str] = None,
without_paid_product_id: typing.Optional[bool] = None,
limit: typing.Optional[int] = None,
@@ -881,6 +935,9 @@ def count_plans(
scoped_to_company_id : typing.Optional[str]
Filter plans scoped to a specific company (custom plans)
+ with_entitlements : typing.Optional[bool]
+ Include each plan's entitlements in the response
+
without_entitlement_for : typing.Optional[str]
Filter out plans that already have a plan entitlement for the specified feature ID
@@ -921,6 +978,7 @@ def count_plans(
plan_type="plan",
q="q",
scoped_to_company_id="scoped_to_company_id",
+ with_entitlements=True,
without_entitlement_for="without_entitlement_for",
without_paid_product_id=True,
limit=1000000,
@@ -940,6 +998,7 @@ def count_plans(
plan_type=plan_type,
q=q,
scoped_to_company_id=scoped_to_company_id,
+ with_entitlements=with_entitlements,
without_entitlement_for=without_entitlement_for,
without_paid_product_id=without_paid_product_id,
limit=limit,
@@ -1240,6 +1299,54 @@ async def main() -> None:
)
return _response.data
+ async def mark_custom_plan_billing_paid(
+ self,
+ custom_plan_billing_id: str,
+ *,
+ request: MarkCustomPlanBillingPaidRequestBody,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> MarkCustomPlanBillingPaidResponse:
+ """
+ Parameters
+ ----------
+ custom_plan_billing_id : str
+ custom_plan_billing_id
+
+ request : MarkCustomPlanBillingPaidRequestBody
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ MarkCustomPlanBillingPaidResponse
+ OK
+
+ Examples
+ --------
+ import asyncio
+
+ from schematic import AsyncSchematic
+
+ client = AsyncSchematic(
+ api_key="YOUR_API_KEY",
+ )
+
+
+ async def main() -> None:
+ await client.plans.mark_custom_plan_billing_paid(
+ custom_plan_billing_id="custom_plan_billing_id",
+ request={"key": "value"},
+ )
+
+
+ asyncio.run(main())
+ """
+ _response = await self._raw_client.mark_custom_plan_billing_paid(
+ custom_plan_billing_id, request=request, request_options=request_options
+ )
+ return _response.data
+
async def retry_custom_plan_billing(
self,
custom_plan_billing_id: str,
@@ -1385,6 +1492,7 @@ async def list_plans(
plan_type: typing.Optional[PlanType] = None,
q: typing.Optional[str] = None,
scoped_to_company_id: typing.Optional[str] = None,
+ with_entitlements: typing.Optional[bool] = None,
without_entitlement_for: typing.Optional[str] = None,
without_paid_product_id: typing.Optional[bool] = None,
limit: typing.Optional[int] = None,
@@ -1427,6 +1535,9 @@ async def list_plans(
scoped_to_company_id : typing.Optional[str]
Filter plans scoped to a specific company (custom plans)
+ with_entitlements : typing.Optional[bool]
+ Include each plan's entitlements in the response
+
without_entitlement_for : typing.Optional[str]
Filter out plans that already have a plan entitlement for the specified feature ID
@@ -1472,6 +1583,7 @@ async def main() -> None:
plan_type="plan",
q="q",
scoped_to_company_id="scoped_to_company_id",
+ with_entitlements=True,
without_entitlement_for="without_entitlement_for",
without_paid_product_id=True,
limit=1000000,
@@ -1494,6 +1606,7 @@ async def main() -> None:
plan_type=plan_type,
q=q,
scoped_to_company_id=scoped_to_company_id,
+ with_entitlements=with_entitlements,
without_entitlement_for=without_entitlement_for,
without_paid_product_id=without_paid_product_id,
limit=limit,
@@ -1705,6 +1818,7 @@ async def upsert_billing_product_plan(
charge_type: ChargeType,
is_trialable: bool,
billing_product_id: typing.Optional[str] = OMIT,
+ billing_strategy: typing.Optional[BillingStrategy] = OMIT,
currency: typing.Optional[str] = OMIT,
currency_prices: typing.Optional[typing.Sequence[PlanCurrencyPriceRequestBody]] = OMIT,
monthly_price: typing.Optional[int] = OMIT,
@@ -1730,6 +1844,8 @@ async def upsert_billing_product_plan(
billing_product_id : typing.Optional[str]
+ billing_strategy : typing.Optional[BillingStrategy]
+
currency : typing.Optional[str]
currency_prices : typing.Optional[typing.Sequence[PlanCurrencyPriceRequestBody]]
@@ -1786,6 +1902,7 @@ async def main() -> None:
charge_type=charge_type,
is_trialable=is_trialable,
billing_product_id=billing_product_id,
+ billing_strategy=billing_strategy,
currency=currency,
currency_prices=currency_prices,
monthly_price=monthly_price,
@@ -1851,7 +1968,7 @@ async def upsert_plan_for_billing_product(
async def main() -> None:
await client.plans.upsert_plan_for_billing_product(
- billing_provider="orb",
+ billing_provider="metronome",
description="description",
external_resource_id="external_resource_id",
name="name",
@@ -2006,6 +2123,7 @@ async def count_plans(
plan_type: typing.Optional[PlanType] = None,
q: typing.Optional[str] = None,
scoped_to_company_id: typing.Optional[str] = None,
+ with_entitlements: typing.Optional[bool] = None,
without_entitlement_for: typing.Optional[str] = None,
without_paid_product_id: typing.Optional[bool] = None,
limit: typing.Optional[int] = None,
@@ -2048,6 +2166,9 @@ async def count_plans(
scoped_to_company_id : typing.Optional[str]
Filter plans scoped to a specific company (custom plans)
+ with_entitlements : typing.Optional[bool]
+ Include each plan's entitlements in the response
+
without_entitlement_for : typing.Optional[str]
Filter out plans that already have a plan entitlement for the specified feature ID
@@ -2093,6 +2214,7 @@ async def main() -> None:
plan_type="plan",
q="q",
scoped_to_company_id="scoped_to_company_id",
+ with_entitlements=True,
without_entitlement_for="without_entitlement_for",
without_paid_product_id=True,
limit=1000000,
@@ -2115,6 +2237,7 @@ async def main() -> None:
plan_type=plan_type,
q=q,
scoped_to_company_id=scoped_to_company_id,
+ with_entitlements=with_entitlements,
without_entitlement_for=without_entitlement_for,
without_paid_product_id=without_paid_product_id,
limit=limit,
diff --git a/src/schematic/plans/raw_client.py b/src/schematic/plans/raw_client.py
index 9c7def3..90bbe06 100644
--- a/src/schematic/plans/raw_client.py
+++ b/src/schematic/plans/raw_client.py
@@ -18,9 +18,11 @@
from ..errors.unauthorized_error import UnauthorizedError
from ..types.api_error import ApiError as types_api_error_ApiError
from ..types.billing_provider_type import BillingProviderType
+from ..types.billing_strategy import BillingStrategy
from ..types.charge_type import ChargeType
from ..types.custom_plan_activation_strategy import CustomPlanActivationStrategy
from ..types.custom_plan_billing_status import CustomPlanBillingStatus
+from ..types.mark_custom_plan_billing_paid_request_body import MarkCustomPlanBillingPaidRequestBody
from ..types.plan_currency_price_request_body import PlanCurrencyPriceRequestBody
from ..types.plan_icon import PlanIcon
from ..types.plan_type import PlanType
@@ -37,6 +39,7 @@
from .types.list_custom_plan_billings_response import ListCustomPlanBillingsResponse
from .types.list_plan_issues_response import ListPlanIssuesResponse
from .types.list_plans_response import ListPlansResponse
+from .types.mark_custom_plan_billing_paid_response import MarkCustomPlanBillingPaidResponse
from .types.publish_plan_version_response import PublishPlanVersionResponse
from .types.retry_custom_plan_billing_response import RetryCustomPlanBillingResponse
from .types.update_company_plans_response import UpdateCompanyPlansResponse
@@ -303,6 +306,117 @@ def list_custom_plan_billings(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
+ def mark_custom_plan_billing_paid(
+ self,
+ custom_plan_billing_id: str,
+ *,
+ request: MarkCustomPlanBillingPaidRequestBody,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> HttpResponse[MarkCustomPlanBillingPaidResponse]:
+ """
+ Parameters
+ ----------
+ custom_plan_billing_id : str
+ custom_plan_billing_id
+
+ request : MarkCustomPlanBillingPaidRequestBody
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ HttpResponse[MarkCustomPlanBillingPaidResponse]
+ OK
+ """
+ _response = self._client_wrapper.httpx_client.request(
+ f"custom-plan-billings/{jsonable_encoder(custom_plan_billing_id)}/mark-paid",
+ method="PUT",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ MarkCustomPlanBillingPaidResponse,
+ parse_obj_as(
+ type_=MarkCustomPlanBillingPaidResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return HttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
def retry_custom_plan_billing(
self,
custom_plan_billing_id: str,
@@ -570,6 +684,7 @@ def list_plans(
plan_type: typing.Optional[PlanType] = None,
q: typing.Optional[str] = None,
scoped_to_company_id: typing.Optional[str] = None,
+ with_entitlements: typing.Optional[bool] = None,
without_entitlement_for: typing.Optional[str] = None,
without_paid_product_id: typing.Optional[bool] = None,
limit: typing.Optional[int] = None,
@@ -612,6 +727,9 @@ def list_plans(
scoped_to_company_id : typing.Optional[str]
Filter plans scoped to a specific company (custom plans)
+ with_entitlements : typing.Optional[bool]
+ Include each plan's entitlements in the response
+
without_entitlement_for : typing.Optional[str]
Filter out plans that already have a plan entitlement for the specified feature ID
@@ -648,6 +766,7 @@ def list_plans(
"plan_type": plan_type,
"q": q,
"scoped_to_company_id": scoped_to_company_id,
+ "with_entitlements": with_entitlements,
"without_entitlement_for": without_entitlement_for,
"without_paid_product_id": without_paid_product_id,
"limit": limit,
@@ -1181,6 +1300,7 @@ def upsert_billing_product_plan(
charge_type: ChargeType,
is_trialable: bool,
billing_product_id: typing.Optional[str] = OMIT,
+ billing_strategy: typing.Optional[BillingStrategy] = OMIT,
currency: typing.Optional[str] = OMIT,
currency_prices: typing.Optional[typing.Sequence[PlanCurrencyPriceRequestBody]] = OMIT,
monthly_price: typing.Optional[int] = OMIT,
@@ -1206,6 +1326,8 @@ def upsert_billing_product_plan(
billing_product_id : typing.Optional[str]
+ billing_strategy : typing.Optional[BillingStrategy]
+
currency : typing.Optional[str]
currency_prices : typing.Optional[typing.Sequence[PlanCurrencyPriceRequestBody]]
@@ -1241,6 +1363,7 @@ def upsert_billing_product_plan(
method="PUT",
json={
"billing_product_id": billing_product_id,
+ "billing_strategy": billing_strategy,
"charge_type": charge_type,
"currency": currency,
"currency_prices": convert_and_respect_annotation_metadata(
@@ -1731,6 +1854,7 @@ def count_plans(
plan_type: typing.Optional[PlanType] = None,
q: typing.Optional[str] = None,
scoped_to_company_id: typing.Optional[str] = None,
+ with_entitlements: typing.Optional[bool] = None,
without_entitlement_for: typing.Optional[str] = None,
without_paid_product_id: typing.Optional[bool] = None,
limit: typing.Optional[int] = None,
@@ -1773,6 +1897,9 @@ def count_plans(
scoped_to_company_id : typing.Optional[str]
Filter plans scoped to a specific company (custom plans)
+ with_entitlements : typing.Optional[bool]
+ Include each plan's entitlements in the response
+
without_entitlement_for : typing.Optional[str]
Filter out plans that already have a plan entitlement for the specified feature ID
@@ -1809,6 +1936,7 @@ def count_plans(
"plan_type": plan_type,
"q": q,
"scoped_to_company_id": scoped_to_company_id,
+ "with_entitlements": with_entitlements,
"without_entitlement_for": without_entitlement_for,
"without_paid_product_id": without_paid_product_id,
"limit": limit,
@@ -2502,6 +2630,117 @@ async def list_custom_plan_billings(
status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
)
+ async def mark_custom_plan_billing_paid(
+ self,
+ custom_plan_billing_id: str,
+ *,
+ request: MarkCustomPlanBillingPaidRequestBody,
+ request_options: typing.Optional[RequestOptions] = None,
+ ) -> AsyncHttpResponse[MarkCustomPlanBillingPaidResponse]:
+ """
+ Parameters
+ ----------
+ custom_plan_billing_id : str
+ custom_plan_billing_id
+
+ request : MarkCustomPlanBillingPaidRequestBody
+
+ request_options : typing.Optional[RequestOptions]
+ Request-specific configuration.
+
+ Returns
+ -------
+ AsyncHttpResponse[MarkCustomPlanBillingPaidResponse]
+ OK
+ """
+ _response = await self._client_wrapper.httpx_client.request(
+ f"custom-plan-billings/{jsonable_encoder(custom_plan_billing_id)}/mark-paid",
+ method="PUT",
+ json=request,
+ headers={
+ "content-type": "application/json",
+ },
+ request_options=request_options,
+ omit=OMIT,
+ )
+ try:
+ if 200 <= _response.status_code < 300:
+ _data = typing.cast(
+ MarkCustomPlanBillingPaidResponse,
+ parse_obj_as(
+ type_=MarkCustomPlanBillingPaidResponse, # type: ignore
+ object_=_response.json(),
+ ),
+ )
+ return AsyncHttpResponse(response=_response, data=_data)
+ if _response.status_code == 400:
+ raise BadRequestError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 401:
+ raise UnauthorizedError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 403:
+ raise ForbiddenError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 404:
+ raise NotFoundError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ if _response.status_code == 500:
+ raise InternalServerError(
+ headers=dict(_response.headers),
+ body=typing.cast(
+ types_api_error_ApiError,
+ parse_obj_as(
+ type_=types_api_error_ApiError, # type: ignore
+ object_=_response.json(),
+ ),
+ ),
+ )
+ _response_json = _response.json()
+ except JSONDecodeError:
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.text
+ )
+ except ValidationError as e:
+ raise ParsingError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response.json(), cause=e
+ )
+ raise core_api_error_ApiError(
+ status_code=_response.status_code, headers=dict(_response.headers), body=_response_json
+ )
+
async def retry_custom_plan_billing(
self,
custom_plan_billing_id: str,
@@ -2769,6 +3008,7 @@ async def list_plans(
plan_type: typing.Optional[PlanType] = None,
q: typing.Optional[str] = None,
scoped_to_company_id: typing.Optional[str] = None,
+ with_entitlements: typing.Optional[bool] = None,
without_entitlement_for: typing.Optional[str] = None,
without_paid_product_id: typing.Optional[bool] = None,
limit: typing.Optional[int] = None,
@@ -2811,6 +3051,9 @@ async def list_plans(
scoped_to_company_id : typing.Optional[str]
Filter plans scoped to a specific company (custom plans)
+ with_entitlements : typing.Optional[bool]
+ Include each plan's entitlements in the response
+
without_entitlement_for : typing.Optional[str]
Filter out plans that already have a plan entitlement for the specified feature ID
@@ -2847,6 +3090,7 @@ async def list_plans(
"plan_type": plan_type,
"q": q,
"scoped_to_company_id": scoped_to_company_id,
+ "with_entitlements": with_entitlements,
"without_entitlement_for": without_entitlement_for,
"without_paid_product_id": without_paid_product_id,
"limit": limit,
@@ -3380,6 +3624,7 @@ async def upsert_billing_product_plan(
charge_type: ChargeType,
is_trialable: bool,
billing_product_id: typing.Optional[str] = OMIT,
+ billing_strategy: typing.Optional[BillingStrategy] = OMIT,
currency: typing.Optional[str] = OMIT,
currency_prices: typing.Optional[typing.Sequence[PlanCurrencyPriceRequestBody]] = OMIT,
monthly_price: typing.Optional[int] = OMIT,
@@ -3405,6 +3650,8 @@ async def upsert_billing_product_plan(
billing_product_id : typing.Optional[str]
+ billing_strategy : typing.Optional[BillingStrategy]
+
currency : typing.Optional[str]
currency_prices : typing.Optional[typing.Sequence[PlanCurrencyPriceRequestBody]]
@@ -3440,6 +3687,7 @@ async def upsert_billing_product_plan(
method="PUT",
json={
"billing_product_id": billing_product_id,
+ "billing_strategy": billing_strategy,
"charge_type": charge_type,
"currency": currency,
"currency_prices": convert_and_respect_annotation_metadata(
@@ -3930,6 +4178,7 @@ async def count_plans(
plan_type: typing.Optional[PlanType] = None,
q: typing.Optional[str] = None,
scoped_to_company_id: typing.Optional[str] = None,
+ with_entitlements: typing.Optional[bool] = None,
without_entitlement_for: typing.Optional[str] = None,
without_paid_product_id: typing.Optional[bool] = None,
limit: typing.Optional[int] = None,
@@ -3972,6 +4221,9 @@ async def count_plans(
scoped_to_company_id : typing.Optional[str]
Filter plans scoped to a specific company (custom plans)
+ with_entitlements : typing.Optional[bool]
+ Include each plan's entitlements in the response
+
without_entitlement_for : typing.Optional[str]
Filter out plans that already have a plan entitlement for the specified feature ID
@@ -4008,6 +4260,7 @@ async def count_plans(
"plan_type": plan_type,
"q": q,
"scoped_to_company_id": scoped_to_company_id,
+ "with_entitlements": with_entitlements,
"without_entitlement_for": without_entitlement_for,
"without_paid_product_id": without_paid_product_id,
"limit": limit,
diff --git a/src/schematic/plans/types/__init__.py b/src/schematic/plans/types/__init__.py
index 0d4ae7c..c14c286 100644
--- a/src/schematic/plans/types/__init__.py
+++ b/src/schematic/plans/types/__init__.py
@@ -25,6 +25,7 @@
from .list_plan_issues_response import ListPlanIssuesResponse
from .list_plans_params import ListPlansParams
from .list_plans_response import ListPlansResponse
+ from .mark_custom_plan_billing_paid_response import MarkCustomPlanBillingPaidResponse
from .publish_plan_version_response import PublishPlanVersionResponse
from .retry_custom_plan_billing_response import RetryCustomPlanBillingResponse
from .update_company_plans_response import UpdateCompanyPlansResponse
@@ -51,6 +52,7 @@
"ListPlanIssuesResponse": ".list_plan_issues_response",
"ListPlansParams": ".list_plans_params",
"ListPlansResponse": ".list_plans_response",
+ "MarkCustomPlanBillingPaidResponse": ".mark_custom_plan_billing_paid_response",
"PublishPlanVersionResponse": ".publish_plan_version_response",
"RetryCustomPlanBillingResponse": ".retry_custom_plan_billing_response",
"UpdateCompanyPlansResponse": ".update_company_plans_response",
@@ -101,6 +103,7 @@ def __dir__():
"ListPlanIssuesResponse",
"ListPlansParams",
"ListPlansResponse",
+ "MarkCustomPlanBillingPaidResponse",
"PublishPlanVersionResponse",
"RetryCustomPlanBillingResponse",
"UpdateCompanyPlansResponse",
diff --git a/src/schematic/plans/types/count_plans_params.py b/src/schematic/plans/types/count_plans_params.py
index 0ab901f..325b5f6 100644
--- a/src/schematic/plans/types/count_plans_params.py
+++ b/src/schematic/plans/types/count_plans_params.py
@@ -70,6 +70,11 @@ class CountPlansParams(UniversalBaseModel):
Filter plans scoped to a specific company (custom plans)
"""
+ with_entitlements: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Include each plan's entitlements in the response
+ """
+
without_entitlement_for: typing.Optional[str] = pydantic.Field(default=None)
"""
Filter out plans that already have a plan entitlement for the specified feature ID
diff --git a/src/schematic/plans/types/list_plans_params.py b/src/schematic/plans/types/list_plans_params.py
index f43ae92..ec1a4fa 100644
--- a/src/schematic/plans/types/list_plans_params.py
+++ b/src/schematic/plans/types/list_plans_params.py
@@ -70,6 +70,11 @@ class ListPlansParams(UniversalBaseModel):
Filter plans scoped to a specific company (custom plans)
"""
+ with_entitlements: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Include each plan's entitlements in the response
+ """
+
without_entitlement_for: typing.Optional[str] = pydantic.Field(default=None)
"""
Filter out plans that already have a plan entitlement for the specified feature ID
diff --git a/src/schematic/plans/types/mark_custom_plan_billing_paid_response.py b/src/schematic/plans/types/mark_custom_plan_billing_paid_response.py
new file mode 100644
index 0000000..a6c9e98
--- /dev/null
+++ b/src/schematic/plans/types/mark_custom_plan_billing_paid_response.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ...core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from ...types.custom_plan_billing_response_data import CustomPlanBillingResponseData
+
+
+class MarkCustomPlanBillingPaidResponse(UniversalBaseModel):
+ data: CustomPlanBillingResponseData
+ params: typing.Dict[str, typing.Any] = pydantic.Field()
+ """
+ Input parameters
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/__init__.py b/src/schematic/types/__init__.py
index 0daaed6..7c5287f 100644
--- a/src/schematic/types/__init__.py
+++ b/src/schematic/types/__init__.py
@@ -30,6 +30,7 @@
from .billing_credit_grant_reason import BillingCreditGrantReason
from .billing_credit_grant_response_data import BillingCreditGrantResponseData
from .billing_credit_grant_zeroed_out_reason import BillingCreditGrantZeroedOutReason
+ from .billing_credit_ledger_authority import BillingCreditLedgerAuthority
from .billing_credit_ledger_response_data import BillingCreditLedgerResponseData
from .billing_credit_response_data import BillingCreditResponseData
from .billing_credit_rollover_policy import BillingCreditRolloverPolicy
@@ -56,6 +57,7 @@
from .billing_product_pricing import BillingProductPricing
from .billing_product_response_data import BillingProductResponseData
from .billing_provider_type import BillingProviderType
+ from .billing_strategy import BillingStrategy
from .billing_subscription_discount import BillingSubscriptionDiscount
from .billing_subscription_discount_view import BillingSubscriptionDiscountView
from .billing_subscription_response_data import BillingSubscriptionResponseData
@@ -72,6 +74,10 @@
from .check_flags_bulk_response_data import CheckFlagsBulkResponseData
from .check_flags_response_data import CheckFlagsResponseData
from .checkout_data_response_data import CheckoutDataResponseData
+ from .checkout_field_input import CheckoutFieldInput
+ from .checkout_field_response_data import CheckoutFieldResponseData
+ from .checkout_field_value import CheckoutFieldValue
+ from .checkout_field_with_value import CheckoutFieldWithValue
from .checkout_settings_response_data import CheckoutSettingsResponseData
from .checkout_subscription import CheckoutSubscription
from .clerk_integration_config import ClerkIntegrationConfig
@@ -138,6 +144,7 @@
from .credit_grant_detail import CreditGrantDetail
from .credit_grant_expiry_request_body import CreditGrantExpiryRequestBody
from .credit_grant_sort_order import CreditGrantSortOrder
+ from .credit_lease_response_data import CreditLeaseResponseData
from .credit_ledger_enriched_entry_response_data import CreditLedgerEnrichedEntryResponseData
from .credit_ledger_period import CreditLedgerPeriod
from .credit_transfer_response_data import CreditTransferResponseData
@@ -145,6 +152,7 @@
from .credit_trigger_config import CreditTriggerConfig
from .credit_usage import CreditUsage
from .credit_usage_aggregation import CreditUsageAggregation
+ from .credit_usage_reason import CreditUsageReason
from .credits_auto_topup_company_summary import CreditsAutoTopupCompanySummary
from .credits_auto_topup_credit_summary import CreditsAutoTopupCreditSummary
from .credits_auto_topup_hard_failure import CreditsAutoTopupHardFailure
@@ -215,13 +223,18 @@
from .flag_view import FlagView
from .generic_preview_object import GenericPreviewObject
from .insights_summary_response_data import InsightsSummaryResponseData
+ from .install_integration_request_body import InstallIntegrationRequestBody
from .integration_capabilities import IntegrationCapabilities
from .integration_config import (
IntegrationConfig,
IntegrationConfig_Clerk,
+ IntegrationConfig_Metronome,
IntegrationConfig_Orb,
IntegrationConfig_Stripe,
+ IntegrationConfig_Workos,
)
+ from .integration_install_config import IntegrationInstallConfig
+ from .integration_install_response_data import IntegrationInstallResponseData
from .integration_response_data import IntegrationResponseData
from .integration_state import IntegrationState
from .integration_type import IntegrationType
@@ -238,9 +251,12 @@
from .manage_plan_preview_response_response_data import ManagePlanPreviewResponseResponseData
from .manage_plan_request import ManagePlanRequest
from .manage_plan_response_response_data import ManagePlanResponseResponseData
+ from .mark_custom_plan_billing_paid_request_body import MarkCustomPlanBillingPaidRequestBody
from .meter_request_body import MeterRequestBody
from .metric_period import MetricPeriod
from .metric_period_month_reset import MetricPeriodMonthReset
+ from .metronome_integration_config import MetronomeIntegrationConfig
+ from .migration_error_code import MigrationErrorCode
from .mrr_response_data import MrrResponseData
from .orb_integration_config import OrbIntegrationConfig
from .ordered_plans_in_group import OrderedPlansInGroup
@@ -269,6 +285,7 @@
from .plan_growth_response_data import PlanGrowthResponseData
from .plan_icon import PlanIcon
from .plan_issue_response_data import PlanIssueResponseData
+ from .plan_price_cadence import PlanPriceCadence
from .plan_response_data import PlanResponseData
from .plan_selection import PlanSelection
from .plan_snapshot_view import PlanSnapshotView
@@ -293,6 +310,7 @@
from .quickstart_resp import QuickstartResp
from .raw_event_batch_response_data import RawEventBatchResponseData
from .raw_event_response_data import RawEventResponseData
+ from .release_credit_lease_request_body import ReleaseCreditLeaseRequestBody
from .rule import Rule
from .rule_condition_detail_response_data import RuleConditionDetailResponseData
from .rule_condition_group_detail_response_data import RuleConditionGroupDetailResponseData
@@ -374,6 +392,7 @@
from .webhook_status import WebhookStatus
from .webhook_url import WebhookUrl
from .who_am_i_response_data import WhoAmIResponseData
+ from .work_os_integration_config import WorkOsIntegrationConfig
_dynamic_imports: typing.Dict[str, str] = {
"AccountMemberPermission": ".account_member_permission",
"AccountMemberResponseData": ".account_member_response_data",
@@ -399,6 +418,7 @@
"BillingCreditGrantReason": ".billing_credit_grant_reason",
"BillingCreditGrantResponseData": ".billing_credit_grant_response_data",
"BillingCreditGrantZeroedOutReason": ".billing_credit_grant_zeroed_out_reason",
+ "BillingCreditLedgerAuthority": ".billing_credit_ledger_authority",
"BillingCreditLedgerResponseData": ".billing_credit_ledger_response_data",
"BillingCreditResponseData": ".billing_credit_response_data",
"BillingCreditRolloverPolicy": ".billing_credit_rollover_policy",
@@ -425,6 +445,7 @@
"BillingProductPricing": ".billing_product_pricing",
"BillingProductResponseData": ".billing_product_response_data",
"BillingProviderType": ".billing_provider_type",
+ "BillingStrategy": ".billing_strategy",
"BillingSubscriptionDiscount": ".billing_subscription_discount",
"BillingSubscriptionDiscountView": ".billing_subscription_discount_view",
"BillingSubscriptionResponseData": ".billing_subscription_response_data",
@@ -441,6 +462,10 @@
"CheckFlagsBulkResponseData": ".check_flags_bulk_response_data",
"CheckFlagsResponseData": ".check_flags_response_data",
"CheckoutDataResponseData": ".checkout_data_response_data",
+ "CheckoutFieldInput": ".checkout_field_input",
+ "CheckoutFieldResponseData": ".checkout_field_response_data",
+ "CheckoutFieldValue": ".checkout_field_value",
+ "CheckoutFieldWithValue": ".checkout_field_with_value",
"CheckoutSettingsResponseData": ".checkout_settings_response_data",
"CheckoutSubscription": ".checkout_subscription",
"ClerkIntegrationConfig": ".clerk_integration_config",
@@ -507,6 +532,7 @@
"CreditGrantDetail": ".credit_grant_detail",
"CreditGrantExpiryRequestBody": ".credit_grant_expiry_request_body",
"CreditGrantSortOrder": ".credit_grant_sort_order",
+ "CreditLeaseResponseData": ".credit_lease_response_data",
"CreditLedgerEnrichedEntryResponseData": ".credit_ledger_enriched_entry_response_data",
"CreditLedgerPeriod": ".credit_ledger_period",
"CreditTransferResponseData": ".credit_transfer_response_data",
@@ -514,6 +540,7 @@
"CreditTriggerConfig": ".credit_trigger_config",
"CreditUsage": ".credit_usage",
"CreditUsageAggregation": ".credit_usage_aggregation",
+ "CreditUsageReason": ".credit_usage_reason",
"CreditsAutoTopupCompanySummary": ".credits_auto_topup_company_summary",
"CreditsAutoTopupCreditSummary": ".credits_auto_topup_credit_summary",
"CreditsAutoTopupHardFailure": ".credits_auto_topup_hard_failure",
@@ -584,11 +611,16 @@
"FlagView": ".flag_view",
"GenericPreviewObject": ".generic_preview_object",
"InsightsSummaryResponseData": ".insights_summary_response_data",
+ "InstallIntegrationRequestBody": ".install_integration_request_body",
"IntegrationCapabilities": ".integration_capabilities",
"IntegrationConfig": ".integration_config",
"IntegrationConfig_Clerk": ".integration_config",
+ "IntegrationConfig_Metronome": ".integration_config",
"IntegrationConfig_Orb": ".integration_config",
"IntegrationConfig_Stripe": ".integration_config",
+ "IntegrationConfig_Workos": ".integration_config",
+ "IntegrationInstallConfig": ".integration_install_config",
+ "IntegrationInstallResponseData": ".integration_install_response_data",
"IntegrationResponseData": ".integration_response_data",
"IntegrationState": ".integration_state",
"IntegrationType": ".integration_type",
@@ -605,9 +637,12 @@
"ManagePlanPreviewResponseResponseData": ".manage_plan_preview_response_response_data",
"ManagePlanRequest": ".manage_plan_request",
"ManagePlanResponseResponseData": ".manage_plan_response_response_data",
+ "MarkCustomPlanBillingPaidRequestBody": ".mark_custom_plan_billing_paid_request_body",
"MeterRequestBody": ".meter_request_body",
"MetricPeriod": ".metric_period",
"MetricPeriodMonthReset": ".metric_period_month_reset",
+ "MetronomeIntegrationConfig": ".metronome_integration_config",
+ "MigrationErrorCode": ".migration_error_code",
"MrrResponseData": ".mrr_response_data",
"OrbIntegrationConfig": ".orb_integration_config",
"OrderedPlansInGroup": ".ordered_plans_in_group",
@@ -636,6 +671,7 @@
"PlanGrowthResponseData": ".plan_growth_response_data",
"PlanIcon": ".plan_icon",
"PlanIssueResponseData": ".plan_issue_response_data",
+ "PlanPriceCadence": ".plan_price_cadence",
"PlanResponseData": ".plan_response_data",
"PlanSelection": ".plan_selection",
"PlanSnapshotView": ".plan_snapshot_view",
@@ -660,6 +696,7 @@
"QuickstartResp": ".quickstart_resp",
"RawEventBatchResponseData": ".raw_event_batch_response_data",
"RawEventResponseData": ".raw_event_response_data",
+ "ReleaseCreditLeaseRequestBody": ".release_credit_lease_request_body",
"Rule": ".rule",
"RuleConditionDetailResponseData": ".rule_condition_detail_response_data",
"RuleConditionGroupDetailResponseData": ".rule_condition_group_detail_response_data",
@@ -741,6 +778,7 @@
"WebhookStatus": ".webhook_status",
"WebhookUrl": ".webhook_url",
"WhoAmIResponseData": ".who_am_i_response_data",
+ "WorkOsIntegrationConfig": ".work_os_integration_config",
}
@@ -790,6 +828,7 @@ def __dir__():
"BillingCreditGrantReason",
"BillingCreditGrantResponseData",
"BillingCreditGrantZeroedOutReason",
+ "BillingCreditLedgerAuthority",
"BillingCreditLedgerResponseData",
"BillingCreditResponseData",
"BillingCreditRolloverPolicy",
@@ -816,6 +855,7 @@ def __dir__():
"BillingProductPricing",
"BillingProductResponseData",
"BillingProviderType",
+ "BillingStrategy",
"BillingSubscriptionDiscount",
"BillingSubscriptionDiscountView",
"BillingSubscriptionResponseData",
@@ -832,6 +872,10 @@ def __dir__():
"CheckFlagsBulkResponseData",
"CheckFlagsResponseData",
"CheckoutDataResponseData",
+ "CheckoutFieldInput",
+ "CheckoutFieldResponseData",
+ "CheckoutFieldValue",
+ "CheckoutFieldWithValue",
"CheckoutSettingsResponseData",
"CheckoutSubscription",
"ClerkIntegrationConfig",
@@ -898,6 +942,7 @@ def __dir__():
"CreditGrantDetail",
"CreditGrantExpiryRequestBody",
"CreditGrantSortOrder",
+ "CreditLeaseResponseData",
"CreditLedgerEnrichedEntryResponseData",
"CreditLedgerPeriod",
"CreditTransferResponseData",
@@ -905,6 +950,7 @@ def __dir__():
"CreditTriggerConfig",
"CreditUsage",
"CreditUsageAggregation",
+ "CreditUsageReason",
"CreditsAutoTopupCompanySummary",
"CreditsAutoTopupCreditSummary",
"CreditsAutoTopupHardFailure",
@@ -975,11 +1021,16 @@ def __dir__():
"FlagView",
"GenericPreviewObject",
"InsightsSummaryResponseData",
+ "InstallIntegrationRequestBody",
"IntegrationCapabilities",
"IntegrationConfig",
"IntegrationConfig_Clerk",
+ "IntegrationConfig_Metronome",
"IntegrationConfig_Orb",
"IntegrationConfig_Stripe",
+ "IntegrationConfig_Workos",
+ "IntegrationInstallConfig",
+ "IntegrationInstallResponseData",
"IntegrationResponseData",
"IntegrationState",
"IntegrationType",
@@ -996,9 +1047,12 @@ def __dir__():
"ManagePlanPreviewResponseResponseData",
"ManagePlanRequest",
"ManagePlanResponseResponseData",
+ "MarkCustomPlanBillingPaidRequestBody",
"MeterRequestBody",
"MetricPeriod",
"MetricPeriodMonthReset",
+ "MetronomeIntegrationConfig",
+ "MigrationErrorCode",
"MrrResponseData",
"OrbIntegrationConfig",
"OrderedPlansInGroup",
@@ -1027,6 +1081,7 @@ def __dir__():
"PlanGrowthResponseData",
"PlanIcon",
"PlanIssueResponseData",
+ "PlanPriceCadence",
"PlanResponseData",
"PlanSelection",
"PlanSnapshotView",
@@ -1051,6 +1106,7 @@ def __dir__():
"QuickstartResp",
"RawEventBatchResponseData",
"RawEventResponseData",
+ "ReleaseCreditLeaseRequestBody",
"Rule",
"RuleConditionDetailResponseData",
"RuleConditionGroupDetailResponseData",
@@ -1132,4 +1188,5 @@ def __dir__():
"WebhookStatus",
"WebhookUrl",
"WhoAmIResponseData",
+ "WorkOsIntegrationConfig",
]
diff --git a/src/schematic/types/account_member_response_data.py b/src/schematic/types/account_member_response_data.py
index e4e8921..87cf637 100644
--- a/src/schematic/types/account_member_response_data.py
+++ b/src/schematic/types/account_member_response_data.py
@@ -12,8 +12,10 @@
class AccountMemberResponseData(UniversalBaseModel):
created_at: dt.datetime
email: typing.Optional[str] = None
+ first_name: typing.Optional[str] = None
id: str
image_url: typing.Optional[str] = None
+ last_name: typing.Optional[str] = None
name: typing.Optional[str] = None
permissions: typing.Dict[str, typing.List[AccountMemberPermission]]
role: typing.Optional[AccountMemberRole] = None
diff --git a/src/schematic/types/billing_credit_grant_reason.py b/src/schematic/types/billing_credit_grant_reason.py
index 7da59d5..4da4bd7 100644
--- a/src/schematic/types/billing_credit_grant_reason.py
+++ b/src/schematic/types/billing_credit_grant_reason.py
@@ -3,5 +3,5 @@
import typing
BillingCreditGrantReason = typing.Union[
- typing.Literal["adjustment", "billing_credit_auto_topup", "free", "plan", "purchased"], typing.Any
+ typing.Literal["adjustment", "billing_credit_auto_topup", "free", "plan", "purchased", "rollover"], typing.Any
]
diff --git a/src/schematic/types/billing_credit_grant_response_data.py b/src/schematic/types/billing_credit_grant_response_data.py
index f4763b7..504db3a 100644
--- a/src/schematic/types/billing_credit_grant_response_data.py
+++ b/src/schematic/types/billing_credit_grant_response_data.py
@@ -31,6 +31,13 @@ class BillingCreditGrantResponseData(UniversalBaseModel):
quantity_used: float
renewal_enabled: bool
renewal_period: typing.Optional[BillingPlanCreditGrantResetCadence] = None
+ reserved: typing.Optional[float] = None
+ settled: typing.Optional[float] = None
+ source_grant_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ For rollover grants, the ID of the source grant that this grant rolled from.
+ """
+
source_label: str
transfers: typing.Optional[typing.List[CreditTransferResponseData]] = None
updated_at: dt.datetime
diff --git a/src/schematic/types/billing_credit_ledger_authority.py b/src/schematic/types/billing_credit_ledger_authority.py
new file mode 100644
index 0000000..f5730c6
--- /dev/null
+++ b/src/schematic/types/billing_credit_ledger_authority.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BillingCreditLedgerAuthority = typing.Union[
+ typing.Literal["schematic_authoritative", "external_mirror", "external_rated"], typing.Any
+]
diff --git a/src/schematic/types/billing_credit_view.py b/src/schematic/types/billing_credit_view.py
index b4dca66..75cadc1 100644
--- a/src/schematic/types/billing_credit_view.py
+++ b/src/schematic/types/billing_credit_view.py
@@ -7,6 +7,7 @@
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .billing_credit_burn_strategy import BillingCreditBurnStrategy
from .billing_credit_expiry_unit import BillingCreditExpiryUnit
+from .billing_credit_ledger_authority import BillingCreditLedgerAuthority
from .billing_credit_rollover_policy import BillingCreditRolloverPolicy
from .billing_price_view import BillingPriceView
from .billing_product_response_data import BillingProductResponseData
@@ -26,6 +27,7 @@ class BillingCreditView(UniversalBaseModel):
environment_id: str
icon: typing.Optional[str] = None
id: str
+ ledger_authority: BillingCreditLedgerAuthority
name: str
plural_name: typing.Optional[str] = None
price: typing.Optional[BillingPriceView] = None
diff --git a/src/schematic/types/billing_plan_credit_grant_response_data.py b/src/schematic/types/billing_plan_credit_grant_response_data.py
index d026dda..22daee9 100644
--- a/src/schematic/types/billing_plan_credit_grant_response_data.py
+++ b/src/schematic/types/billing_plan_credit_grant_response_data.py
@@ -58,6 +58,11 @@ class BillingPlanCreditGrantResponseData(UniversalBaseModel):
reset_cadence: typing.Optional[BillingPlanCreditGrantResetCadence] = None
reset_start: typing.Optional[BillingPlanCreditGrantResetStart] = None
reset_type: typing.Optional[BillingPlanCreditGrantResetType] = None
+ rollover_percentage: int = pydantic.Field()
+ """
+ Percentage of unused credits that carry over when this grant resets. Only meaningful when reset_type is plan_period.
+ """
+
updated_at: dt.datetime
if IS_PYDANTIC_V2:
diff --git a/src/schematic/types/billing_product_plan_response_data.py b/src/schematic/types/billing_product_plan_response_data.py
index ce5dddd..0ab4e49 100644
--- a/src/schematic/types/billing_product_plan_response_data.py
+++ b/src/schematic/types/billing_product_plan_response_data.py
@@ -5,12 +5,14 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .billing_provider_type import BillingProviderType
+from .billing_strategy import BillingStrategy
from .charge_type import ChargeType
class BillingProductPlanResponseData(UniversalBaseModel):
account_id: str
billing_product_id: str
+ billing_strategy: BillingStrategy
charge_type: ChargeType
controlled_by: BillingProviderType
environment_id: str
diff --git a/src/schematic/types/billing_provider_type.py b/src/schematic/types/billing_provider_type.py
index 889b1f1..748972f 100644
--- a/src/schematic/types/billing_provider_type.py
+++ b/src/schematic/types/billing_provider_type.py
@@ -2,4 +2,4 @@
import typing
-BillingProviderType = typing.Union[typing.Literal["orb", "schematic", "stripe"], typing.Any]
+BillingProviderType = typing.Union[typing.Literal["metronome", "orb", "schematic", "stripe"], typing.Any]
diff --git a/src/schematic/types/billing_strategy.py b/src/schematic/types/billing_strategy.py
new file mode 100644
index 0000000..00eb3ec
--- /dev/null
+++ b/src/schematic/types/billing_strategy.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+BillingStrategy = typing.Union[typing.Literal["schematic_managed", "provider_managed", "no_billing"], typing.Any]
diff --git a/src/schematic/types/change_subscription_internal_request_body.py b/src/schematic/types/change_subscription_internal_request_body.py
index 37d09f0..18d7f2b 100644
--- a/src/schematic/types/change_subscription_internal_request_body.py
+++ b/src/schematic/types/change_subscription_internal_request_body.py
@@ -4,6 +4,7 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .checkout_field_value import CheckoutFieldValue
from .update_add_on_request_body import UpdateAddOnRequestBody
from .update_auto_topup_override_request_body import UpdateAutoTopupOverrideRequestBody
from .update_credit_bundle_request_body import UpdateCreditBundleRequestBody
@@ -16,6 +17,7 @@ class ChangeSubscriptionInternalRequestBody(UniversalBaseModel):
company_id: str
coupon_external_id: typing.Optional[str] = None
credit_bundles: typing.List[UpdateCreditBundleRequestBody]
+ custom_field_values: typing.List[CheckoutFieldValue]
new_plan_id: str
new_price_id: str
pay_in_advance: typing.List[UpdatePayInAdvanceRequestBody]
diff --git a/src/schematic/types/change_subscription_request_body.py b/src/schematic/types/change_subscription_request_body.py
index 50079f0..16fdd42 100644
--- a/src/schematic/types/change_subscription_request_body.py
+++ b/src/schematic/types/change_subscription_request_body.py
@@ -4,6 +4,7 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .checkout_field_value import CheckoutFieldValue
from .update_add_on_request_body import UpdateAddOnRequestBody
from .update_auto_topup_override_request_body import UpdateAutoTopupOverrideRequestBody
from .update_credit_bundle_request_body import UpdateCreditBundleRequestBody
@@ -15,6 +16,7 @@ class ChangeSubscriptionRequestBody(UniversalBaseModel):
auto_topup_overrides: typing.List[UpdateAutoTopupOverrideRequestBody]
coupon_external_id: typing.Optional[str] = None
credit_bundles: typing.List[UpdateCreditBundleRequestBody]
+ custom_field_values: typing.List[CheckoutFieldValue]
new_plan_id: str
new_price_id: str
pay_in_advance: typing.List[UpdatePayInAdvanceRequestBody]
diff --git a/src/schematic/types/charge_type.py b/src/schematic/types/charge_type.py
index 03d40e9..35d2099 100644
--- a/src/schematic/types/charge_type.py
+++ b/src/schematic/types/charge_type.py
@@ -2,4 +2,4 @@
import typing
-ChargeType = typing.Union[typing.Literal["free", "one_time", "recurring"], typing.Any]
+ChargeType = typing.Union[typing.Literal["free", "none", "one_time", "recurring"], typing.Any]
diff --git a/src/schematic/types/checkout_data_response_data.py b/src/schematic/types/checkout_data_response_data.py
index 0cb0ab0..67d2f46 100644
--- a/src/schematic/types/checkout_data_response_data.py
+++ b/src/schematic/types/checkout_data_response_data.py
@@ -5,6 +5,7 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .billing_credit_bundle_response_data import BillingCreditBundleResponseData
+from .checkout_field_with_value import CheckoutFieldWithValue
from .company_detail_response_data import CompanyDetailResponseData
from .company_subscription_response_data import CompanySubscriptionResponseData
from .credit_bundle_purchase_response_data import CreditBundlePurchaseResponseData
@@ -19,6 +20,7 @@ class CheckoutDataResponseData(UniversalBaseModel):
active_usage_based_entitlements: typing.List[UsageBasedEntitlementResponseData]
available_credit_bundles: typing.List[BillingCreditBundleResponseData]
company: typing.Optional[CompanyDetailResponseData] = None
+ custom_checkout_fields: typing.List[CheckoutFieldWithValue]
feature_usage: typing.Optional[FeatureUsageDetailResponseData] = None
selected_credit_bundles: typing.List[CreditBundlePurchaseResponseData]
selected_plan: typing.Optional[PlanDetailResponseData] = None
diff --git a/src/schematic/types/checkout_field_input.py b/src/schematic/types/checkout_field_input.py
new file mode 100644
index 0000000..eb34c57
--- /dev/null
+++ b/src/schematic/types/checkout_field_input.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CheckoutFieldInput(UniversalBaseModel):
+ definition_id: typing.Optional[str] = None
+ helper_text: typing.Optional[str] = None
+ id: typing.Optional[str] = None
+ name: str
+ required: bool
+ stripe_metadata_key: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/checkout_field_response_data.py b/src/schematic/types/checkout_field_response_data.py
new file mode 100644
index 0000000..cdb164f
--- /dev/null
+++ b/src/schematic/types/checkout_field_response_data.py
@@ -0,0 +1,29 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CheckoutFieldResponseData(UniversalBaseModel):
+ created_at: dt.datetime
+ definition_id: str
+ helper_text: typing.Optional[str] = None
+ id: str
+ name: str
+ position: int
+ required: bool
+ stripe_metadata_key: str
+ trait_hierarchy: typing.List[str]
+ updated_at: dt.datetime
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/checkout_field_value.py b/src/schematic/types/checkout_field_value.py
new file mode 100644
index 0000000..260dcb9
--- /dev/null
+++ b/src/schematic/types/checkout_field_value.py
@@ -0,0 +1,20 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CheckoutFieldValue(UniversalBaseModel):
+ id: str
+ value: str
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/checkout_field_with_value.py b/src/schematic/types/checkout_field_with_value.py
new file mode 100644
index 0000000..ad8b216
--- /dev/null
+++ b/src/schematic/types/checkout_field_with_value.py
@@ -0,0 +1,25 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CheckoutFieldWithValue(UniversalBaseModel):
+ definition_id: str
+ helper_text: typing.Optional[str] = None
+ id: str
+ name: str
+ required: bool
+ stripe_metadata_key: str
+ value: typing.Optional[str] = None
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/checkout_subscription.py b/src/schematic/types/checkout_subscription.py
index 94930e9..97e5f44 100644
--- a/src/schematic/types/checkout_subscription.py
+++ b/src/schematic/types/checkout_subscription.py
@@ -23,6 +23,7 @@ class CheckoutSubscription(UniversalBaseModel):
expired_at: typing.Optional[dt.datetime] = None
id: str
interval: str
+ invoice_id: typing.Optional[str] = None
invoice_url: typing.Optional[str] = None
metadata: typing.Optional[typing.Dict[str, typing.Any]] = None
period_end: int
diff --git a/src/schematic/types/company_credit_balance_response_data.py b/src/schematic/types/company_credit_balance_response_data.py
index 0abf080..a503374 100644
--- a/src/schematic/types/company_credit_balance_response_data.py
+++ b/src/schematic/types/company_credit_balance_response_data.py
@@ -10,6 +10,8 @@
class CompanyCreditBalanceResponseData(UniversalBaseModel):
credit_id: str
remaining: float
+ reserved: float
+ settled: float
source: BillingProviderType
total: typing.Optional[float] = None
diff --git a/src/schematic/types/company_plan_credit_grant_view.py b/src/schematic/types/company_plan_credit_grant_view.py
index 4ca5df2..b757a6c 100644
--- a/src/schematic/types/company_plan_credit_grant_view.py
+++ b/src/schematic/types/company_plan_credit_grant_view.py
@@ -61,6 +61,7 @@ class CompanyPlanCreditGrantView(UniversalBaseModel):
reset_cadence: typing.Optional[BillingPlanCreditGrantResetCadence] = None
reset_start: typing.Optional[BillingPlanCreditGrantResetStart] = None
reset_type: BillingPlanCreditGrantResetType
+ rollover_percentage: int
singular_name: typing.Optional[str] = pydantic.Field(default=None)
"""
Deprecated field, will be removed in the future. Use Credit.SingularName instead.
diff --git a/src/schematic/types/company_plan_detail_response_data.py b/src/schematic/types/company_plan_detail_response_data.py
index 639f78b..f3b83d4 100644
--- a/src/schematic/types/company_plan_detail_response_data.py
+++ b/src/schematic/types/company_plan_detail_response_data.py
@@ -9,6 +9,7 @@
from .billing_price_response_data import BillingPriceResponseData
from .billing_product_detail_response_data import BillingProductDetailResponseData
from .billing_provider_type import BillingProviderType
+from .billing_strategy import BillingStrategy
from .charge_type import ChargeType
from .company_plan_invalid_reason import CompanyPlanInvalidReason
from .custom_plan_config import CustomPlanConfig
@@ -18,6 +19,7 @@
from .plan_currency_prices_response_data import PlanCurrencyPricesResponseData
from .plan_entitlement_response_data import PlanEntitlementResponseData
from .plan_icon import PlanIcon
+from .plan_price_cadence import PlanPriceCadence
from .plan_type import PlanType
from .plan_version_response_data import PlanVersionResponseData
@@ -25,8 +27,10 @@
class CompanyPlanDetailResponseData(UniversalBaseModel):
active_version: typing.Optional[PlanVersionResponseData] = None
audience_type: typing.Optional[str] = None
+ available_periods: typing.List[PlanPriceCadence]
billing_linked_resource: typing.Optional[BillingLinkedResourceResponseData] = None
billing_product: typing.Optional[BillingProductDetailResponseData] = None
+ billing_strategy: BillingStrategy
charge_type: ChargeType
company_can_trial: bool
company_count: int
@@ -42,7 +46,7 @@ class CompanyPlanDetailResponseData(UniversalBaseModel):
custom_plan_config: typing.Optional[CustomPlanConfig] = None
description: str
draft_version: typing.Optional[PlanVersionResponseData] = None
- entitlements: typing.List[PlanEntitlementResponseData]
+ entitlements: typing.Optional[typing.List[PlanEntitlementResponseData]] = None
features: typing.List[FeatureInPlanResponseData]
icon: PlanIcon
id: str
@@ -50,7 +54,11 @@ class CompanyPlanDetailResponseData(UniversalBaseModel):
invalid_reason: typing.Optional[CompanyPlanInvalidReason] = None
is_custom: bool
is_default: bool
- is_free: bool
+ is_free: bool = pydantic.Field()
+ """
+ Deprecated: Use BillingStrategy instead
+ """
+
is_trialable: bool
monthly_price: typing.Optional[BillingPriceResponseData] = None
name: str
diff --git a/src/schematic/types/component_hydrate_response_data.py b/src/schematic/types/component_hydrate_response_data.py
index 3c679f0..4fa5e3b 100644
--- a/src/schematic/types/component_hydrate_response_data.py
+++ b/src/schematic/types/component_hydrate_response_data.py
@@ -5,6 +5,7 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .billing_credit_bundle_view import BillingCreditBundleView
+from .checkout_field_with_value import CheckoutFieldWithValue
from .company_detail_response_data import CompanyDetailResponseData
from .company_plan_detail_response_data import CompanyPlanDetailResponseData
from .company_subscription_response_data import CompanySubscriptionResponseData
@@ -33,6 +34,7 @@ class ComponentHydrateResponseData(UniversalBaseModel):
component: typing.Optional[ComponentResponseData] = None
credit_bundles: typing.List[BillingCreditBundleView]
credit_grants: typing.List[CreditCompanyGrantView]
+ custom_checkout_fields: typing.List[CheckoutFieldWithValue]
default_plan: typing.Optional[PlanDetailResponseData] = None
display_settings: ComponentDisplaySettings
feature_usage: typing.Optional[FeatureUsageDetailResponseData] = None
diff --git a/src/schematic/types/component_preview_response_data.py b/src/schematic/types/component_preview_response_data.py
index f81e3be..6f6138f 100644
--- a/src/schematic/types/component_preview_response_data.py
+++ b/src/schematic/types/component_preview_response_data.py
@@ -5,6 +5,7 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .billing_credit_bundle_view import BillingCreditBundleView
+from .checkout_field_with_value import CheckoutFieldWithValue
from .company_detail_response_data import CompanyDetailResponseData
from .company_plan_detail_response_data import CompanyPlanDetailResponseData
from .company_subscription_response_data import CompanySubscriptionResponseData
@@ -33,6 +34,7 @@ class ComponentPreviewResponseData(UniversalBaseModel):
component: typing.Optional[ComponentResponseData] = None
credit_bundles: typing.List[BillingCreditBundleView]
credit_grants: typing.List[CreditCompanyGrantView]
+ custom_checkout_fields: typing.List[CheckoutFieldWithValue]
default_plan: typing.Optional[PlanDetailResponseData] = None
display_settings: ComponentDisplaySettings
feature_usage: typing.Optional[FeatureUsageDetailResponseData] = None
diff --git a/src/schematic/types/create_billing_plan_credit_grant_request_body.py b/src/schematic/types/create_billing_plan_credit_grant_request_body.py
index 400cd48..b826af5 100644
--- a/src/schematic/types/create_billing_plan_credit_grant_request_body.py
+++ b/src/schematic/types/create_billing_plan_credit_grant_request_body.py
@@ -33,6 +33,10 @@ class CreateBillingPlanCreditGrantRequestBody(UniversalBaseModel):
reset_cadence: BillingPlanCreditGrantResetCadence
reset_start: BillingPlanCreditGrantResetStart
reset_type: typing.Optional[BillingPlanCreditGrantResetType] = None
+ rollover_percentage: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Percentage of unused credits that carry over when this grant resets. Only applies when reset_type is plan_period. Rolled-over credits expire at the next reset and are not rolled again. Defaults to 0.
+ """
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
diff --git a/src/schematic/types/create_entitlement_in_bundle_request_body.py b/src/schematic/types/create_entitlement_in_bundle_request_body.py
index 7422449..db48304 100644
--- a/src/schematic/types/create_entitlement_in_bundle_request_body.py
+++ b/src/schematic/types/create_entitlement_in_bundle_request_body.py
@@ -41,6 +41,11 @@ class CreateEntitlementInBundleRequestBody(UniversalBaseModel):
quarterly_unit_price_decimal: typing.Optional[str] = None
soft_limit: typing.Optional[int] = None
tier_mode: typing.Optional[BillingTiersMode] = None
+ usage_quantity: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+ """
+
value_bool: typing.Optional[bool] = None
value_credit_id: typing.Optional[str] = None
value_numeric: typing.Optional[int] = None
diff --git a/src/schematic/types/credit_company_grant_view.py b/src/schematic/types/credit_company_grant_view.py
index 03a43e2..d038a95 100644
--- a/src/schematic/types/credit_company_grant_view.py
+++ b/src/schematic/types/credit_company_grant_view.py
@@ -40,7 +40,10 @@ class CreditCompanyGrantView(UniversalBaseModel):
quantity_used: float
renewal_enabled: bool
renewal_period: typing.Optional[BillingPlanCreditGrantResetCadence] = None
+ reserved: typing.Optional[float] = None
+ settled: typing.Optional[float] = None
singular_name: typing.Optional[str] = None
+ source_grant_id: typing.Optional[str] = None
source_label: str
transfers: typing.Optional[typing.List[CreditTransferView]] = None
updated_at: dt.datetime
diff --git a/src/schematic/types/credit_event_ledger_response_data.py b/src/schematic/types/credit_event_ledger_response_data.py
index 3e86d6e..4bff320 100644
--- a/src/schematic/types/credit_event_ledger_response_data.py
+++ b/src/schematic/types/credit_event_ledger_response_data.py
@@ -12,6 +12,7 @@
from .billing_credit_ledger_response_data import BillingCreditLedgerResponseData
from .company_ledger_response_data import CompanyLedgerResponseData
from .credit_event_type import CreditEventType
+from .credit_usage_reason import CreditUsageReason
from .feature_ledger_response_data import FeatureLedgerResponseData
@@ -46,6 +47,7 @@ class CreditEventLedgerResponseData(UniversalBaseModel):
source_id: int
to_grant_id: typing.Optional[str] = None
usage_event_id: typing.Optional[str] = None
+ usage_reason: typing.Optional[CreditUsageReason] = None
zeroed_out_reason: typing.Optional[BillingCreditGrantZeroedOutReason] = None
if IS_PYDANTIC_V2:
diff --git a/src/schematic/types/credit_lease_response_data.py b/src/schematic/types/credit_lease_response_data.py
new file mode 100644
index 0000000..cc98f48
--- /dev/null
+++ b/src/schematic/types/credit_lease_response_data.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class CreditLeaseResponseData(UniversalBaseModel):
+ company_id: str
+ created_at: dt.datetime
+ credit_type_id: str
+ expires_at: dt.datetime
+ granted_amount: float
+ id: str
+ released_at: typing.Optional[dt.datetime] = None
+ updated_at: dt.datetime
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/credit_usage_reason.py b/src/schematic/types/credit_usage_reason.py
new file mode 100644
index 0000000..76bbedf
--- /dev/null
+++ b/src/schematic/types/credit_usage_reason.py
@@ -0,0 +1,7 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+CreditUsageReason = typing.Union[
+ typing.Literal["lease_hold", "lease_release", "manual_adjustment", "reconciliation", "track"], typing.Any
+]
diff --git a/src/schematic/types/custom_plan_billing_response_data.py b/src/schematic/types/custom_plan_billing_response_data.py
index a8374dd..d859cc7 100644
--- a/src/schematic/types/custom_plan_billing_response_data.py
+++ b/src/schematic/types/custom_plan_billing_response_data.py
@@ -14,6 +14,7 @@ class CustomPlanBillingResponseData(UniversalBaseModel):
company_id: str
created_at: dt.datetime
days_until_due: int
+ external_invoice_id: typing.Optional[str] = None
id: str
paid_at: typing.Optional[dt.datetime] = None
plan_id: str
diff --git a/src/schematic/types/event_body_track.py b/src/schematic/types/event_body_track.py
index d8a6f7d..fc92ccd 100644
--- a/src/schematic/types/event_body_track.py
+++ b/src/schematic/types/event_body_track.py
@@ -17,6 +17,11 @@ class EventBodyTrack(UniversalBaseModel):
The name of the type of track event
"""
+ lease_id: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ Credit lease ID this track event is redeeming against
+ """
+
quantity: typing.Optional[int] = pydantic.Field(default=None)
"""
Optionally specify the quantity of the event
diff --git a/src/schematic/types/event_detail_response_data.py b/src/schematic/types/event_detail_response_data.py
index fa127c0..d86a444 100644
--- a/src/schematic/types/event_detail_response_data.py
+++ b/src/schematic/types/event_detail_response_data.py
@@ -26,6 +26,7 @@ class EventDetailResponseData(UniversalBaseModel):
features: typing.List[PreviewObject]
id: str
idempotency_key: typing.Optional[str] = None
+ lease_id: typing.Optional[str] = None
loaded_at: typing.Optional[dt.datetime] = None
processed_at: typing.Optional[dt.datetime] = None
quantity: int
diff --git a/src/schematic/types/event_response_data.py b/src/schematic/types/event_response_data.py
index a1cd727..e0a7e60 100644
--- a/src/schematic/types/event_response_data.py
+++ b/src/schematic/types/event_response_data.py
@@ -21,6 +21,7 @@ class EventResponseData(UniversalBaseModel):
feature_ids: typing.List[str]
id: str
idempotency_key: typing.Optional[str] = None
+ lease_id: typing.Optional[str] = None
loaded_at: typing.Optional[dt.datetime] = None
processed_at: typing.Optional[dt.datetime] = None
quantity: int
diff --git a/src/schematic/types/feature_view.py b/src/schematic/types/feature_view.py
index 4e56b4c..be5516d 100644
--- a/src/schematic/types/feature_view.py
+++ b/src/schematic/types/feature_view.py
@@ -33,6 +33,7 @@ class FeatureView(UniversalBaseModel):
trait: typing.Optional[EntityTraitDefinitionResponseData] = None
trait_id: typing.Optional[str] = None
updated_at: dt.datetime
+ usage_limit_trait_id: typing.Optional[str] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
diff --git a/src/schematic/types/install_integration_request_body.py b/src/schematic/types/install_integration_request_body.py
new file mode 100644
index 0000000..a30a2a7
--- /dev/null
+++ b/src/schematic/types/install_integration_request_body.py
@@ -0,0 +1,26 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .company_matching_criteria import CompanyMatchingCriteria
+from .integration_type import IntegrationType
+
+
+class InstallIntegrationRequestBody(UniversalBaseModel):
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = None
+ company_matching_field: typing.Optional[str] = None
+ config: typing.Optional[typing.Dict[str, typing.Any]] = None
+ is_sandbox: typing.Optional[bool] = None
+ live_mode: typing.Optional[bool] = None
+ type: IntegrationType
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/integration_config.py b/src/schematic/types/integration_config.py
index 69c8bf9..f34b3be 100644
--- a/src/schematic/types/integration_config.py
+++ b/src/schematic/types/integration_config.py
@@ -24,6 +24,19 @@ class Config:
extra = pydantic.Extra.allow
+class IntegrationConfig_Metronome(UniversalBaseModel):
+ type: typing.Literal["metronome"] = "metronome"
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
+
+
class IntegrationConfig_Orb(UniversalBaseModel):
type: typing.Literal["orb"] = "orb"
external_customer_id_key: typing.Optional[str] = None
@@ -46,7 +59,21 @@ class IntegrationConfig_Stripe(UniversalBaseModel):
is_sandbox: bool
live_mode: bool
onboard_url: typing.Optional[str] = None
- version: int
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
+
+
+class IntegrationConfig_Workos(UniversalBaseModel):
+ type: typing.Literal["workos"] = "workos"
+ first_events_received: typing.Optional[bool] = None
+ webhook_url: typing.Optional[str] = None
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
@@ -59,6 +86,12 @@ class Config:
IntegrationConfig = typing_extensions.Annotated[
- typing.Union[IntegrationConfig_Clerk, IntegrationConfig_Orb, IntegrationConfig_Stripe],
+ typing.Union[
+ IntegrationConfig_Clerk,
+ IntegrationConfig_Metronome,
+ IntegrationConfig_Orb,
+ IntegrationConfig_Stripe,
+ IntegrationConfig_Workos,
+ ],
pydantic.Field(discriminator="type"),
]
diff --git a/src/schematic/types/integration_install_config.py b/src/schematic/types/integration_install_config.py
new file mode 100644
index 0000000..a74cd92
--- /dev/null
+++ b/src/schematic/types/integration_install_config.py
@@ -0,0 +1,31 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import datetime as dt
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .company_matching_criteria import CompanyMatchingCriteria
+from .integration_config import IntegrationConfig
+
+
+class IntegrationInstallConfig(UniversalBaseModel):
+ company_matching_criteria: typing.Optional[CompanyMatchingCriteria] = None
+ company_matching_field: typing.Optional[str] = None
+ config: typing.Optional[IntegrationConfig] = None
+ created_at: dt.datetime
+ id: str
+ integration_id: str
+ is_app_install: bool
+ is_connect_install: bool
+ live_mode: bool
+ updated_at: dt.datetime
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/integration_install_response_data.py b/src/schematic/types/integration_install_response_data.py
new file mode 100644
index 0000000..3e9cb0f
--- /dev/null
+++ b/src/schematic/types/integration_install_response_data.py
@@ -0,0 +1,24 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .integration_capabilities import IntegrationCapabilities
+from .integration_install_config import IntegrationInstallConfig
+from .integration_response_data import IntegrationResponseData
+
+
+class IntegrationInstallResponseData(UniversalBaseModel):
+ capabilities: IntegrationCapabilities
+ config: IntegrationInstallConfig
+ integration: IntegrationResponseData
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/integration_type.py b/src/schematic/types/integration_type.py
index 7f5334d..b600c6e 100644
--- a/src/schematic/types/integration_type.py
+++ b/src/schematic/types/integration_type.py
@@ -2,4 +2,4 @@
import typing
-IntegrationType = typing.Union[typing.Literal["clerk", "orb", "stripe", "unknown"], typing.Any]
+IntegrationType = typing.Union[typing.Literal["clerk", "metronome", "orb", "stripe", "unknown", "workos"], typing.Any]
diff --git a/src/schematic/types/manage_plan_request.py b/src/schematic/types/manage_plan_request.py
index 8a42254..53aaab0 100644
--- a/src/schematic/types/manage_plan_request.py
+++ b/src/schematic/types/manage_plan_request.py
@@ -5,6 +5,7 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .checkout_field_value import CheckoutFieldValue
from .plan_selection import PlanSelection
from .update_credit_bundle_request_body import UpdateCreditBundleRequestBody
from .update_pay_in_advance_request_body import UpdatePayInAdvanceRequestBody
@@ -23,6 +24,7 @@ class ManagePlanRequest(UniversalBaseModel):
company_id: str
coupon_external_id: typing.Optional[str] = None
credit_bundles: typing.List[UpdateCreditBundleRequestBody]
+ custom_field_values: typing.List[CheckoutFieldValue]
pay_in_advance_entitlements: typing.List[UpdatePayInAdvanceRequestBody]
payment_method_external_id: typing.Optional[str] = None
promo_code: typing.Optional[str] = None
diff --git a/src/schematic/types/mark_custom_plan_billing_paid_request_body.py b/src/schematic/types/mark_custom_plan_billing_paid_request_body.py
new file mode 100644
index 0000000..134524c
--- /dev/null
+++ b/src/schematic/types/mark_custom_plan_billing_paid_request_body.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+MarkCustomPlanBillingPaidRequestBody = typing.Dict[str, typing.Any]
diff --git a/src/schematic/types/metronome_integration_config.py b/src/schematic/types/metronome_integration_config.py
new file mode 100644
index 0000000..e81287d
--- /dev/null
+++ b/src/schematic/types/metronome_integration_config.py
@@ -0,0 +1,17 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class MetronomeIntegrationConfig(UniversalBaseModel):
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow
diff --git a/src/schematic/types/migration_error_code.py b/src/schematic/types/migration_error_code.py
new file mode 100644
index 0000000..8d2ed21
--- /dev/null
+++ b/src/schematic/types/migration_error_code.py
@@ -0,0 +1,21 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+MigrationErrorCode = typing.Union[
+ typing.Literal[
+ "ambiguous_subscription_item",
+ "multiple_subscriptions",
+ "no_price_for_interval",
+ "not_on_origin_version",
+ "operation_item_not_found",
+ "permanent_config",
+ "permanent_decline",
+ "transient_decline",
+ "transient_infra",
+ "transient_stripe",
+ "unknown",
+ "would_leave_empty_subscription",
+ ],
+ typing.Any,
+]
diff --git a/src/schematic/types/plan_credit_grant_view.py b/src/schematic/types/plan_credit_grant_view.py
index fe9d9a0..43634fa 100644
--- a/src/schematic/types/plan_credit_grant_view.py
+++ b/src/schematic/types/plan_credit_grant_view.py
@@ -58,6 +58,7 @@ class PlanCreditGrantView(UniversalBaseModel):
reset_cadence: typing.Optional[BillingPlanCreditGrantResetCadence] = None
reset_start: typing.Optional[BillingPlanCreditGrantResetStart] = None
reset_type: BillingPlanCreditGrantResetType
+ rollover_percentage: int
singular_name: typing.Optional[str] = pydantic.Field(default=None)
"""
Deprecated field, will be removed in the future. Use Credit.SingularName instead.
diff --git a/src/schematic/types/plan_detail_response_data.py b/src/schematic/types/plan_detail_response_data.py
index 3a1f015..48de58c 100644
--- a/src/schematic/types/plan_detail_response_data.py
+++ b/src/schematic/types/plan_detail_response_data.py
@@ -10,9 +10,11 @@
from .billing_price_response_data import BillingPriceResponseData
from .billing_product_detail_response_data import BillingProductDetailResponseData
from .billing_provider_type import BillingProviderType
+from .billing_strategy import BillingStrategy
from .charge_type import ChargeType
from .feature_in_plan_response_data import FeatureInPlanResponseData
from .plan_currency_prices_response_data import PlanCurrencyPricesResponseData
+from .plan_entitlement_response_data import PlanEntitlementResponseData
from .plan_icon import PlanIcon
from .plan_type import PlanType
from .plan_version_response_data import PlanVersionResponseData
@@ -23,6 +25,7 @@ class PlanDetailResponseData(UniversalBaseModel):
audience_type: typing.Optional[str] = None
billing_linked_resource: typing.Optional[BillingLinkedResourceResponseData] = None
billing_product: typing.Optional[BillingProductDetailResponseData] = None
+ billing_strategy: BillingStrategy
charge_type: ChargeType
company_count: int
company_id: typing.Optional[str] = None
@@ -33,12 +36,17 @@ class PlanDetailResponseData(UniversalBaseModel):
currency_prices: typing.List[PlanCurrencyPricesResponseData]
description: str
draft_version: typing.Optional[PlanVersionResponseData] = None
+ entitlements: typing.Optional[typing.List[PlanEntitlementResponseData]] = None
features: typing.List[FeatureInPlanResponseData]
icon: PlanIcon
id: str
included_credit_grants: typing.Optional[typing.List[BillingPlanCreditGrantResponseData]] = None
is_default: bool
- is_free: bool
+ is_free: bool = pydantic.Field()
+ """
+ Deprecated: Use BillingStrategy instead
+ """
+
is_trialable: bool
monthly_price: typing.Optional[BillingPriceResponseData] = None
name: str
diff --git a/src/schematic/types/plan_entitlement_response_data.py b/src/schematic/types/plan_entitlement_response_data.py
index 846db8c..dc24b51 100644
--- a/src/schematic/types/plan_entitlement_response_data.py
+++ b/src/schematic/types/plan_entitlement_response_data.py
@@ -42,6 +42,11 @@ class PlanEntitlementResponseData(UniversalBaseModel):
soft_limit: typing.Optional[int] = None
updated_at: dt.datetime
usage_based_product: typing.Optional[BillingProductResponseData] = None
+ usage_quantity: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+ """
+
value_bool: typing.Optional[bool] = None
value_credit: typing.Optional[BillingCreditResponseData] = None
value_numeric: typing.Optional[int] = None
diff --git a/src/schematic/types/plan_group_detail_response_data.py b/src/schematic/types/plan_group_detail_response_data.py
index bd37fd7..87e3be6 100644
--- a/src/schematic/types/plan_group_detail_response_data.py
+++ b/src/schematic/types/plan_group_detail_response_data.py
@@ -5,6 +5,7 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
from .billing_price_view import BillingPriceView
+from .checkout_field_response_data import CheckoutFieldResponseData
from .checkout_settings_response_data import CheckoutSettingsResponseData
from .component_settings_response_data import ComponentSettingsResponseData
from .custom_plan_view_config_response_data import CustomPlanViewConfigResponseData
@@ -17,6 +18,7 @@ class PlanGroupDetailResponseData(UniversalBaseModel):
add_ons: typing.List[PlanGroupPlanDetailResponseData]
checkout_settings: CheckoutSettingsResponseData
component_settings: ComponentSettingsResponseData
+ custom_checkout_fields: typing.List[CheckoutFieldResponseData]
custom_plan_config: typing.Optional[CustomPlanViewConfigResponseData] = None
custom_plan_id: typing.Optional[str] = None
default_plan: typing.Optional[PlanGroupPlanDetailResponseData] = None
diff --git a/src/schematic/types/plan_group_plan_detail_response_data.py b/src/schematic/types/plan_group_plan_detail_response_data.py
index 4a48976..2057c34 100644
--- a/src/schematic/types/plan_group_plan_detail_response_data.py
+++ b/src/schematic/types/plan_group_plan_detail_response_data.py
@@ -10,12 +10,14 @@
from .billing_price_response_data import BillingPriceResponseData
from .billing_product_detail_response_data import BillingProductDetailResponseData
from .billing_provider_type import BillingProviderType
+from .billing_strategy import BillingStrategy
from .charge_type import ChargeType
from .custom_plan_view_config_response_data import CustomPlanViewConfigResponseData
from .feature_in_plan_response_data import FeatureInPlanResponseData
from .plan_currency_prices_response_data import PlanCurrencyPricesResponseData
from .plan_entitlement_response_data import PlanEntitlementResponseData
from .plan_icon import PlanIcon
+from .plan_price_cadence import PlanPriceCadence
from .plan_type import PlanType
from .plan_version_response_data import PlanVersionResponseData
@@ -23,8 +25,10 @@
class PlanGroupPlanDetailResponseData(UniversalBaseModel):
active_version: typing.Optional[PlanVersionResponseData] = None
audience_type: typing.Optional[str] = None
+ available_periods: typing.List[PlanPriceCadence]
billing_linked_resource: typing.Optional[BillingLinkedResourceResponseData] = None
billing_product: typing.Optional[BillingProductDetailResponseData] = None
+ billing_strategy: BillingStrategy
charge_type: ChargeType
company_count: int
company_id: typing.Optional[str] = None
@@ -37,14 +41,18 @@ class PlanGroupPlanDetailResponseData(UniversalBaseModel):
custom_plan_config: typing.Optional[CustomPlanViewConfigResponseData] = None
description: str
draft_version: typing.Optional[PlanVersionResponseData] = None
- entitlements: typing.List[PlanEntitlementResponseData]
+ entitlements: typing.Optional[typing.List[PlanEntitlementResponseData]] = None
features: typing.List[FeatureInPlanResponseData]
icon: PlanIcon
id: str
included_credit_grants: typing.Optional[typing.List[BillingPlanCreditGrantResponseData]] = None
is_custom: bool
is_default: bool
- is_free: bool
+ is_free: bool = pydantic.Field()
+ """
+ Deprecated: Use BillingStrategy instead
+ """
+
is_trialable: bool
monthly_price: typing.Optional[BillingPriceResponseData] = None
name: str
diff --git a/src/schematic/types/plan_price_cadence.py b/src/schematic/types/plan_price_cadence.py
new file mode 100644
index 0000000..f642601
--- /dev/null
+++ b/src/schematic/types/plan_price_cadence.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+PlanPriceCadence = typing.Union[typing.Literal["monthly", "quarterly", "yearly"], typing.Any]
diff --git a/src/schematic/types/plan_version_company_migration_response_data.py b/src/schematic/types/plan_version_company_migration_response_data.py
index be7e8cf..c38c833 100644
--- a/src/schematic/types/plan_version_company_migration_response_data.py
+++ b/src/schematic/types/plan_version_company_migration_response_data.py
@@ -5,6 +5,7 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .migration_error_code import MigrationErrorCode
from .plan_version_company_migration_status import PlanVersionCompanyMigrationStatus
@@ -14,6 +15,7 @@ class PlanVersionCompanyMigrationResponseData(UniversalBaseModel):
completed_at: typing.Optional[dt.datetime] = None
created_at: dt.datetime
error: typing.Optional[str] = None
+ error_code: typing.Optional[MigrationErrorCode] = None
id: str
migration_id: str
plan_version_id_from: typing.Optional[str] = None
diff --git a/src/schematic/types/plan_version_migration_response_data.py b/src/schematic/types/plan_version_migration_response_data.py
index 94a7d93..e3bfbc6 100644
--- a/src/schematic/types/plan_version_migration_response_data.py
+++ b/src/schematic/types/plan_version_migration_response_data.py
@@ -19,6 +19,7 @@ class PlanVersionMigrationResponseData(UniversalBaseModel):
plan_id: str
plan_version_id_from: typing.Optional[str] = None
plan_version_id_to: str
+ plan_version_ids_from: typing.List[str]
skipped_companies: int
started_at: typing.Optional[dt.datetime] = None
status: PlanVersionMigrationStatus
diff --git a/src/schematic/types/plan_view_public_response_data.py b/src/schematic/types/plan_view_public_response_data.py
index 102c64c..04b65ab 100644
--- a/src/schematic/types/plan_view_public_response_data.py
+++ b/src/schematic/types/plan_view_public_response_data.py
@@ -9,6 +9,7 @@
from .billing_price_response_data import BillingPriceResponseData
from .billing_product_detail_response_data import BillingProductDetailResponseData
from .billing_provider_type import BillingProviderType
+from .billing_strategy import BillingStrategy
from .charge_type import ChargeType
from .custom_plan_config import CustomPlanConfig
from .feature_in_plan_response_data import FeatureInPlanResponseData
@@ -16,6 +17,7 @@
from .plan_currency_prices_response_data import PlanCurrencyPricesResponseData
from .plan_entitlement_response_data import PlanEntitlementResponseData
from .plan_icon import PlanIcon
+from .plan_price_cadence import PlanPriceCadence
from .plan_type import PlanType
from .plan_version_response_data import PlanVersionResponseData
@@ -23,8 +25,10 @@
class PlanViewPublicResponseData(UniversalBaseModel):
active_version: typing.Optional[PlanVersionResponseData] = None
audience_type: typing.Optional[str] = None
+ available_periods: typing.List[PlanPriceCadence]
billing_linked_resource: typing.Optional[BillingLinkedResourceResponseData] = None
billing_product: typing.Optional[BillingProductDetailResponseData] = None
+ billing_strategy: BillingStrategy
charge_type: ChargeType
company_count: int
company_id: typing.Optional[str] = None
@@ -38,14 +42,18 @@ class PlanViewPublicResponseData(UniversalBaseModel):
custom_plan_config: typing.Optional[CustomPlanConfig] = None
description: str
draft_version: typing.Optional[PlanVersionResponseData] = None
- entitlements: typing.List[PlanEntitlementResponseData]
+ entitlements: typing.Optional[typing.List[PlanEntitlementResponseData]] = None
features: typing.List[FeatureInPlanResponseData]
icon: PlanIcon
id: str
included_credit_grants: typing.List[PlanCreditGrantView]
is_custom: bool
is_default: bool
- is_free: bool
+ is_free: bool = pydantic.Field()
+ """
+ Deprecated: Use BillingStrategy instead
+ """
+
is_trialable: bool
monthly_price: typing.Optional[BillingPriceResponseData] = None
name: str
diff --git a/src/schematic/types/release_credit_lease_request_body.py b/src/schematic/types/release_credit_lease_request_body.py
new file mode 100644
index 0000000..7fd3367
--- /dev/null
+++ b/src/schematic/types/release_credit_lease_request_body.py
@@ -0,0 +1,5 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+ReleaseCreditLeaseRequestBody = typing.Dict[str, typing.Any]
diff --git a/src/schematic/types/stripe_integration_config.py b/src/schematic/types/stripe_integration_config.py
index b5268bc..84c885e 100644
--- a/src/schematic/types/stripe_integration_config.py
+++ b/src/schematic/types/stripe_integration_config.py
@@ -37,11 +37,6 @@ class StripeIntegrationConfig(UniversalBaseModel):
Onboarding URL returned during the v2 (Connect) install flow before activation
"""
- version: int = pydantic.Field()
- """
- Stripe integration config version (1 = legacy API key install, 2 = Connect/App install)
- """
-
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
else:
diff --git a/src/schematic/types/update_billing_plan_credit_grant_request_body.py b/src/schematic/types/update_billing_plan_credit_grant_request_body.py
index 0a755d4..43b1c74 100644
--- a/src/schematic/types/update_billing_plan_credit_grant_request_body.py
+++ b/src/schematic/types/update_billing_plan_credit_grant_request_body.py
@@ -30,6 +30,10 @@ class UpdateBillingPlanCreditGrantRequestBody(UniversalBaseModel):
reset_cadence: BillingPlanCreditGrantResetCadence
reset_start: BillingPlanCreditGrantResetStart
reset_type: typing.Optional[BillingPlanCreditGrantResetType] = None
+ rollover_percentage: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ Percentage of unused credits that carry over when this grant resets. Only applies when reset_type is plan_period. Rolled-over credits expire at the next reset and are not rolled again.
+ """
if IS_PYDANTIC_V2:
model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
diff --git a/src/schematic/types/upsert_billing_product_request_body.py b/src/schematic/types/upsert_billing_product_request_body.py
index 7599f07..b5a4a6e 100644
--- a/src/schematic/types/upsert_billing_product_request_body.py
+++ b/src/schematic/types/upsert_billing_product_request_body.py
@@ -4,12 +4,14 @@
import pydantic
from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+from .billing_strategy import BillingStrategy
from .charge_type import ChargeType
from .plan_currency_price_request_body import PlanCurrencyPriceRequestBody
class UpsertBillingProductRequestBody(UniversalBaseModel):
billing_product_id: typing.Optional[str] = None
+ billing_strategy: typing.Optional[BillingStrategy] = None
charge_type: ChargeType
currency: typing.Optional[str] = None
currency_prices: typing.Optional[typing.List[PlanCurrencyPriceRequestBody]] = None
diff --git a/src/schematic/types/usage_based_entitlement_request_body.py b/src/schematic/types/usage_based_entitlement_request_body.py
index 9339c66..d284709 100644
--- a/src/schematic/types/usage_based_entitlement_request_body.py
+++ b/src/schematic/types/usage_based_entitlement_request_body.py
@@ -32,6 +32,11 @@ class UsageBasedEntitlementRequestBody(UniversalBaseModel):
quarterly_unit_price_decimal: typing.Optional[str] = None
soft_limit: typing.Optional[int] = None
tier_mode: typing.Optional[BillingTiersMode] = None
+ usage_quantity: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+ """
+
yearly_metered_price_id: typing.Optional[str] = None
yearly_price_tiers: typing.Optional[typing.List[CreatePriceTierRequestBody]] = None
yearly_unit_price: typing.Optional[int] = None
diff --git a/src/schematic/types/usage_based_entitlement_response_data.py b/src/schematic/types/usage_based_entitlement_response_data.py
index 28386c6..e843695 100644
--- a/src/schematic/types/usage_based_entitlement_response_data.py
+++ b/src/schematic/types/usage_based_entitlement_response_data.py
@@ -21,6 +21,11 @@ class UsageBasedEntitlementResponseData(UniversalBaseModel):
monthly_usage_based_price: typing.Optional[BillingPriceView] = None
price_behavior: typing.Optional[EntitlementPriceBehavior] = None
quarterly_usage_based_price: typing.Optional[BillingPriceView] = None
+ usage_quantity: typing.Optional[int] = pydantic.Field(default=None)
+ """
+ The committed unit quantity for this entitlement. For custom plans this is the quantity the company is contractually committed to; for standard plans it is the quantity pre-filled when subscribing. Only applies to pay-in-advance entitlements. Note: this is not yet enforced/auto-provisioned as a true default — it is currently stored for downstream billing use.
+ """
+
value_bool: typing.Optional[bool] = None
value_numeric: typing.Optional[int] = None
value_type: EntitlementValueType
diff --git a/src/schematic/types/work_os_integration_config.py b/src/schematic/types/work_os_integration_config.py
new file mode 100644
index 0000000..a38005a
--- /dev/null
+++ b/src/schematic/types/work_os_integration_config.py
@@ -0,0 +1,27 @@
+# This file was auto-generated by Fern from our API Definition.
+
+import typing
+
+import pydantic
+from ..core.pydantic_utilities import IS_PYDANTIC_V2, UniversalBaseModel
+
+
+class WorkOsIntegrationConfig(UniversalBaseModel):
+ first_events_received: typing.Optional[bool] = pydantic.Field(default=None)
+ """
+ Whether Schematic has received the first webhook event from WorkOS after install
+ """
+
+ webhook_url: typing.Optional[str] = pydantic.Field(default=None)
+ """
+ URL configured on the WorkOS webhook endpoint that delivers events to Schematic
+ """
+
+ if IS_PYDANTIC_V2:
+ model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2
+ else:
+
+ class Config:
+ frozen = True
+ smart_union = True
+ extra = pydantic.Extra.allow