@leaflow/sdk 0.100.1 → 0.102.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -410,10 +410,14 @@ export interface components {
410
410
  currency: string;
411
411
  lines: components["schemas"]["QuoteLine"][];
412
412
  };
413
- QuoteLineResult: {
413
+ /**
414
+ * @description One public catalog estimate. Prices are used as listed, before account discounts; tax is not
415
+ * evaluated. Monetary fields are absent when the line cannot be priced.
416
+ */
417
+ QuotedLine: {
414
418
  /** @description Tax included in the account quote. Absent in public catalogue estimates. */
415
419
  tax_amount?: components["schemas"]["Money"];
416
- /** @description Tax already included in the displayed price. */
420
+ /** @description Tax already included in the displayed price. Absent in public catalogue estimates. */
417
421
  tax_included_amount?: components["schemas"]["Money"];
418
422
  /** @description Which line of the request this answers. */
419
423
  index: number;
@@ -451,14 +455,18 @@ export interface components {
451
455
  * `quantity` multiplied by that duration.
452
456
  */
453
457
  quantity?: string;
454
- /** @description Not rounded. Round only for display. */
458
+ /** @description Public list-price amount including any setup charges, before account discounts. Not rounded; round only for display. */
455
459
  amount?: components["schemas"]["Money"];
456
460
  currency: string;
457
461
  };
462
+ /**
463
+ * @description A public catalog estimate. No account discounts or tax are evaluated. Its total is a list-price
464
+ * estimate, not an expected checkout amount. Nothing is saved, charged or reserved.
465
+ */
458
466
  Quote: {
459
- lines?: components["schemas"]["QuoteLineResult"][];
467
+ lines?: components["schemas"]["QuotedLine"][];
460
468
  /**
461
- * @description What would be owed in total. Amounts to be returned are not netted off it.
469
+ * @description Sum of the public list-price line amounts, without evaluating account discounts or tax.
462
470
  *
463
471
  * Null when any line could not be priced. What would be owed is not knowable then, and a
464
472
  * total that silently left the unpriced lines out would read as a smaller bill rather than
@@ -247,8 +247,8 @@ export interface paths {
247
247
  };
248
248
  /**
249
249
  * List project orders
250
- * @description An order awaiting payment shows what is outstanding. Paying it is done from the billing
251
- * centre by the account owner.
250
+ * @description A draft order invoice shows base amounts awaiting checkout. A confirmed invoice shows what
251
+ * is outstanding. Checkout and payment are performed in the billing centre by the account owner.
252
252
  */
253
253
  get: operations["list-project-orders"];
254
254
  put?: never;
@@ -314,15 +314,27 @@ export interface paths {
314
314
  put?: never;
315
315
  /**
316
316
  * Quote for a project
317
- * @description Priced in the project billing account's currency, and at any rate negotiated for that account.
318
- * Nothing is reserved and nothing is recorded, so this may be called as often as required.
317
+ * @description Computes a price preview without creating a resource or saving a quote. Nothing is charged,
318
+ * reserved or applied to an order, and no discount redemption is consumed. The response has no
319
+ * quote ID and does not guarantee a price or reserve a promotion code.
319
320
  *
320
- * Prices may change between quoting and ordering. An order is charged at the price in
321
- * effect when it is placed, so a quote should be refreshed before a final confirmation is
322
- * shown.
321
+ * New purchases use the project's current billing account and currency. With order_id, the order
322
+ * must belong to this project; its recorded purchase terms, billing account and currency are used.
323
+ * An optional promotion_code previews one code for the purchase or order. Without it, Billing
324
+ * selects an applicable account discount. An invalid or inapplicable explicit code is refused
325
+ * rather than silently replaced. Give total as expected_amount when confirming checkout through
326
+ * Billing; eligibility and availability are checked again. An order already checked out returns
327
+ * its confirmed amounts without reapplying its discount; a different code is refused with
328
+ * BILLING_ORDER_CHECKOUT_CONFLICT.
329
+ *
330
+ * Prices may change before an order is created; confirmed purchase terms are not repriced from
331
+ * today's catalog. Usage estimates describe future usage and are not checkout amounts. They do
332
+ * not accept a promotion code, including when mixed with fixed purchase lines.
323
333
  *
324
334
  * A renewal is priced exactly as renewing would charge it: at the agreed amount or the price
325
- * named, with the discounts the account holds, and with tax.
335
+ * named, with the discounts the account holds, and with tax. A renewal list does not accept a
336
+ * promotion code because its entries create separate orders. To use a new code on a renewal,
337
+ * first create a renewal order and quote its checkout by order_id.
326
338
  *
327
339
  * A cancellation is quoted as creating it would compute the refund, as of now and under the refund
328
340
  * terms agreed when each subscription was bought. It is quoted on its own: combined with lines or
@@ -331,8 +343,8 @@ export interface paths {
331
343
  * amount is not checked. Give the returned `cancellation.proration_date` and
332
344
  * `cancellation.refundable_amount` when creating it.
333
345
  *
334
- * Returns 404 when the project has no billing account, or when a subscription to be renewed or
335
- * canceled does not belong to this project.
346
+ * Returns 404 when the project has no billing account for a new purchase quote, or when the order
347
+ * or a subscription to be renewed or canceled does not belong to this project.
336
348
  */
337
349
  post: operations["create-project-quote"];
338
350
  delete?: never;
@@ -653,37 +665,17 @@ export interface components {
653
665
  /**
654
666
  * @description Identify a price directly, or select a price for a plan. For each resource give its ID or lookup key, never both. Lookup keys require product_id.
655
667
  *
656
- * A line that gives a meter, `dimensions` or `duration_seconds` estimates usage and is
657
- * priced only at a postpaid price. Such a line is refused with HTTP 400
658
- * `BILLING_PURCHASE_INVALID` when `price_type` is `prepaid` or `one_time`, or when the price
659
- * it names is not postpaid; `meta.field` is `price_type`, `price_id` or `price_lookup_key`
660
- * accordingly. When the plan has no postpaid price, the line is returned unpriced with
661
- * `no_price`.
668
+ * Charges for future usage are not estimated here; the service that sells the product quotes
669
+ * them with its purchase.
662
670
  */
663
671
  QuoteLine: {
664
672
  price_lookup_key?: string;
665
673
  plan_lookup_key?: string;
666
- meter_lookup_key?: string;
667
674
  /** Format: uuid */
668
675
  price_id?: string;
669
676
  product_id?: components["schemas"]["ProductID"];
670
677
  /** Format: uuid */
671
678
  plan_id?: string;
672
- /** Format: uuid */
673
- meter_id?: string;
674
- /**
675
- * @description The attributes the price depends on — region, instance type, token class.
676
- *
677
- * Required when the price draws its rates from a price list, which is how anything
678
- * sold by region or by machine type is priced. A price that carries a single unit
679
- * amount, or a ladder, has no attributes to give and takes none.
680
- *
681
- * Every attribute the meter declares must be present. A combination with no rate
682
- * covering it is refused rather than priced at zero.
683
- */
684
- dimensions?: {
685
- [key: string]: string;
686
- };
687
679
  /**
688
680
  * @description Narrows the selection when a plan offers more than one billing type.
689
681
  * @enum {string}
@@ -693,13 +685,6 @@ export interface components {
693
685
  interval?: "none" | "day" | "month" | "year";
694
686
  interval_count?: number;
695
687
  quantity: string;
696
- /**
697
- * Format: int64
698
- * @description For metered items, how long to price for. This allows an estimate such as "about
699
- * this much per month" to be shown before anything exists. The priced quantity is
700
- * `quantity` multiplied by this duration.
701
- */
702
- duration_seconds?: number;
703
688
  };
704
689
  /**
705
690
  * @description Price renewing a prepaid subscription. Give `price_id`, or `interval` with
@@ -720,22 +705,57 @@ export interface components {
720
705
  */
721
706
  periods?: number;
722
707
  };
708
+ /** @description Quote exactly one target. Purchase lines, an existing order, a renewal list and a cancellation are mutually exclusive. */
709
+ QuoteRequest: components["schemas"]["PurchaseQuoteRequest"] | components["schemas"]["OrderQuoteRequest"] | components["schemas"]["RenewalQuoteRequest"] | components["schemas"]["CancellationQuoteRequest"];
723
710
  /**
724
- * @description Specify lines for new purchases and renewals for existing subscriptions, or one cancellation on
725
- * its own. The total includes all requested lines and renewals.
711
+ * @description Preview one proposed purchase using the project's current billing account. Without a code,
712
+ * an applicable account discount is selected. An explicit code is evaluated without reserving or
713
+ * consuming a redemption and must be supplied again when confirming checkout through Billing.
714
+ * Future usage estimates cannot be combined with a promotion code or used as a checkout amount.
726
715
  */
727
- QuoteRequest: {
728
- lines?: components["schemas"]["QuoteLine"][];
729
- renewals?: components["schemas"]["QuoteRenewal"][];
730
- cancellation?: components["schemas"]["QuoteCancellation"];
716
+ PurchaseQuoteRequest: {
717
+ lines: components["schemas"]["QuoteLine"][];
718
+ promotion_code?: string;
719
+ };
720
+ /**
721
+ * @description Preview checkout of one existing order. Its recorded purchase terms supply every line.
722
+ * Without a code, an applicable account discount is selected. A preview neither changes the
723
+ * order nor reserves or consumes a redemption. A confirmed order returns its recorded amounts.
724
+ */
725
+ OrderQuoteRequest: {
726
+ /** Format: uuid */
727
+ order_id: string;
728
+ /** @description Code to evaluate for this order. Must be supplied again when confirming checkout. */
729
+ promotion_code?: string;
731
730
  };
732
- QuoteLineResult: {
733
- /** @description Tax included in the account quote. Absent in public catalogue estimates. */
731
+ /**
732
+ * @description Preview renewing subscriptions, each at most once. Each entry represents a separate renewal
733
+ * order. To preview a new promotion code, create a renewal order and quote it by order_id.
734
+ */
735
+ RenewalQuoteRequest: {
736
+ renewals: components["schemas"]["QuoteRenewal"][];
737
+ };
738
+ /** @description Preview one cancellation without combining it with a purchase, renewal or promotion code. */
739
+ CancellationQuoteRequest: {
740
+ cancellation: components["schemas"]["QuoteCancellation"];
741
+ };
742
+ /**
743
+ * @description A purchase quote line or one recorded order item. Monetary fields use the account currency.
744
+ * Fixed purchase amounts are rounded as checkout rounds them. Usage estimates are not amounts
745
+ * collectible at checkout. When priced is false, monetary fields and price_id are absent.
746
+ */
747
+ QuotedLine: {
748
+ /** @description Tax on the discounted amount, including any tax already contained in that amount. */
734
749
  tax_amount?: components["schemas"]["Money"];
735
- /** @description Tax already included in the displayed price. */
750
+ /** @description The part of tax_amount already contained in amount minus discount_amount. */
736
751
  tax_included_amount?: components["schemas"]["Money"];
737
- /** @description Which line of the request this answers. */
752
+ /** @description Zero-based request line index, or the recorded order item's position for an order quote. */
738
753
  index: number;
754
+ /**
755
+ * Format: uuid
756
+ * @description Present for an existing order quote; identifies the recorded item being priced.
757
+ */
758
+ order_item_id?: string;
739
759
  /**
740
760
  * @description Whether a price was found for this line. Read this before anything else.
741
761
  *
@@ -749,14 +769,9 @@ export interface components {
749
769
  priced: boolean;
750
770
  /**
751
771
  * @description Why no price was found; `none` while `priced` is true.
752
- *
753
- * The last four are told apart because their remedies differ: the price points
754
- * at no price list, the list holds no rate for that meter, that exact combination
755
- * of attributes is not configured, or it is configured but nothing is in effect
756
- * at the moment asked about.
757
772
  * @enum {string}
758
773
  */
759
- unpriced_reason?: "none" | "no_price" | "no_rate_card" | "no_meter" | "no_dimensions" | "no_effective_rule";
774
+ unpriced_reason?: "none" | "no_price";
760
775
  /**
761
776
  * Format: uuid
762
777
  * @description The price selected. Returned whenever `priced` is true, including when the
@@ -764,14 +779,19 @@ export interface components {
764
779
  */
765
780
  price_id?: string;
766
781
  plan_name?: string;
782
+ /** @description Unit price before discounts, with tax included only where the price includes it. */
767
783
  unit_amount?: components["schemas"]["Money"];
784
+ /** @description The quantity priced. */
785
+ quantity?: string;
768
786
  /**
769
- * @description The quantity actually priced. When `duration_seconds` is given, it is the requested
770
- * `quantity` multiplied by that duration.
787
+ * @description Before discounts, including any setup charges. Contains tax only where the price includes it.
788
+ * Zero for a priced order item with no immediate charge.
771
789
  */
772
- quantity?: string;
773
- /** @description Not rounded. Round only for display. */
774
790
  amount?: components["schemas"]["Money"];
791
+ /** @description Total reduction on this line, including any committed recurring discount. */
792
+ discount_amount?: components["schemas"]["Money"];
793
+ /** @description amount minus discount_amount plus tax_amount minus tax_included_amount. */
794
+ total?: components["schemas"]["Money"];
775
795
  currency: string;
776
796
  };
777
797
  /**
@@ -811,23 +831,55 @@ export interface components {
811
831
  */
812
832
  total: components["schemas"]["Money"];
813
833
  };
834
+ /**
835
+ * @description A computed price preview, without a saved quote or a price guarantee. No funds or discount
836
+ * redemptions are reserved. Amounts use currency and exclude payment from credit grants or balance.
837
+ */
814
838
  Quote: {
815
- lines?: components["schemas"]["QuoteLineResult"][];
839
+ /**
840
+ * @description Sum before discounts, less tax already included in the discounted line amounts, as on an
841
+ * invoice. Null when any line cannot be priced. Zero for a cancellation-only quote.
842
+ */
843
+ subtotal: components["schemas"]["Money"] | null;
844
+ /** @description Total line discounts. Null when any line cannot be priced; zero for a cancellation-only quote. */
845
+ discount_amount: components["schemas"]["Money"] | null;
846
+ /** @description Total tax on the discounted amounts. Null when any line cannot be priced; zero for a cancellation-only quote. */
847
+ tax_amount: components["schemas"]["Money"] | null;
848
+ /**
849
+ * @description The one new discount evaluated for a purchase or order, without applying it. Null when
850
+ * none is selected, pricing is incomplete, or the quote targets a renewal list or cancellation.
851
+ * A confirmed order instead reports its recorded discount.
852
+ */
853
+ discount: components["schemas"]["QuotedDiscount"] | null;
854
+ lines?: components["schemas"]["QuotedLine"][];
816
855
  renewals?: components["schemas"]["QuoteRenewalResult"][];
817
856
  /** @description What the cancellation requested would return. Present only when one was requested. */
818
857
  cancellation?: components["schemas"]["CancellationRefundPreview"];
819
858
  /**
820
- * @description What would be owed in total, renewals included. Amounts to be returned are not netted
821
- * off it: a quote of a cancellation alone has a total of zero, and what it would return is
822
- * in `cancellation`.
859
+ * @description subtotal minus discount_amount plus tax_amount, before applying credit grants or balance.
860
+ * For a purchase or order with no usage estimates, pass this as expected_amount at checkout.
861
+ * A renewal list sums separate orders; use each renewal's total when confirming that order.
862
+ * Refunds are not netted off: a cancellation-only quote has zero totals and its refund is in
863
+ * cancellation. Usage estimates are projections, not checkout amounts.
823
864
  *
824
865
  * Null when any line could not be priced. What would be owed is not knowable then, and a
825
866
  * total that silently left the unpriced lines out would read as a smaller bill rather than
826
867
  * an incomplete one — the per-line `priced` flag is easy to skip, a missing total is not.
827
868
  */
828
- total?: components["schemas"]["Money"] | null;
869
+ total: components["schemas"]["Money"] | null;
829
870
  currency: string;
830
871
  };
872
+ /**
873
+ * @description The discount selected for this calculation. Its presence in a quote does not apply it or
874
+ * reserve a redemption. Discount amounts are reported on the quote and its lines.
875
+ */
876
+ QuotedDiscount: {
877
+ /** @enum {string} */
878
+ type: "promotion_code" | "account_discount";
879
+ name: string;
880
+ /** @description Code text for a promotion_code discount; null for an account_discount. */
881
+ promotion_code: string | null;
882
+ };
831
883
  /**
832
884
  * @description A narrow view of the project's billing account, restricted to what a project member needs in order
833
885
  * to know whether the project's resources will keep running.
@@ -870,7 +922,11 @@ export interface components {
870
922
  currency: string;
871
923
  };
872
924
  /**
873
- * @description `refunded` means the invoice was paid and has since been refunded in full; a partial refund
925
+ * @description An order invoice stays `draft` until checkout confirms its discount and final amounts. It
926
+ * cannot be collected while draft. Confirmation makes it `open`, or `paid` when its total is zero
927
+ * without creating a payment transaction. A quote never changes this status.
928
+ *
929
+ * `refunded` means the invoice was paid and has since been refunded in full; a partial refund
874
930
  * leaves it `paid`, with the refunded part in `amount_refunded`.
875
931
  *
876
932
  * `void` means the invoice will not be paid and holds no money: nothing was paid, or its order
@@ -946,7 +1002,29 @@ export interface components {
946
1002
  items: components["schemas"]["Subscription"][];
947
1003
  pagination: components["schemas"]["OffsetPagination"];
948
1004
  };
949
- /** @description An independently billed purchase. Fixed renewals use the agreed recurring_amount and interval; already paid periods retain their original value. Technical state belongs to the owning service. */
1005
+ /**
1006
+ * @description An independently billed purchase relationship, separate from the owning service's resource.
1007
+ * Placing a new prepaid or postpaid service order creates a pending subscription for each line
1008
+ * in the same purchase transaction. Its ID is returned on the order item and remains stable
1009
+ * through checkout and delivery. One order may create several subscriptions, such as an instance,
1010
+ * its system disk and its address; it has no single subscription ID.
1011
+ *
1012
+ * Pending does not grant service or accrue usage. Payment confirmation and order acceptance do
1013
+ * not activate a service-owned subscription. It becomes active when the owning service confirms
1014
+ * delivery, with started_at set to the confirmed effective time. Prepaid service periods start
1015
+ * then; postpaid usage starts only when the service reports actual delivery and metering.
1016
+ *
1017
+ * One-time delivery may omit a subscription. Renewals reference and extend existing subscriptions
1018
+ * rather than creating another; changes may create pending replacements. Canceling or failing an
1019
+ * unfulfilled purchase closes its pending subscriptions without starting a service period.
1020
+ * Fixed renewals use the agreed recurring_amount and interval; already paid periods retain their
1021
+ * original value. Technical state belongs to the owning service.
1022
+ *
1023
+ * A purchased shared capacity limit, such as a regional snapshot count quota, can have its own
1024
+ * subscription. Activating that capacity confirms delivery of the quota, not individual snapshots.
1025
+ * Creating or deleting snapshots within it does not create, activate or terminate more subscriptions;
1026
+ * the owning service enforces current holdings against the purchased count.
1027
+ */
950
1028
  Subscription: {
951
1029
  currency: string;
952
1030
  /** @enum {string} */
@@ -954,7 +1032,11 @@ export interface components {
954
1032
  /** @enum {string} */
955
1033
  interval: "none" | "day" | "month" | "year";
956
1034
  interval_count?: number;
957
- /** @description Whole-subscription prepaid renewal amount, after continuing discounts and before tax. Absent for other billing types. */
1035
+ /**
1036
+ * @description Whole-subscription prepaid renewal amount, after continuing discounts and before tax.
1037
+ * Pending subscriptions show base terms until checkout confirms any new continuing discount.
1038
+ * Absent for other billing types.
1039
+ */
958
1040
  recurring_amount?: string;
959
1041
  termination_policy?: components["schemas"]["TerminationPolicy"];
960
1042
  refund_policy?: components["schemas"]["RefundPolicy"];
@@ -1008,13 +1090,21 @@ export interface components {
1008
1090
  quantity: string;
1009
1091
  /**
1010
1092
  * Format: date-time
1011
- * @description Present for prepaid items. Absent for metered ones, which have no end date.
1093
+ * @description End of the prepaid service already activated. Null for a new pending subscription, even
1094
+ * when its purchase has been paid, and for postpaid subscriptions with no prepaid end date.
1012
1095
  */
1013
1096
  paid_until?: string | null;
1014
1097
  auto_renew: boolean;
1015
- /** @enum {string} */
1098
+ /**
1099
+ * @description pending means the purchase relationship exists but service has not started. For a
1100
+ * service-owned purchase, only confirmed delivery moves it to active; paying alone does not.
1101
+ * @enum {string}
1102
+ */
1016
1103
  status: "pending" | "active" | "suspended" | "canceled" | "terminated";
1017
- /** Format: date-time */
1104
+ /**
1105
+ * Format: date-time
1106
+ * @description Confirmed start of service. Null for a new pending subscription, including after payment.
1107
+ */
1018
1108
  started_at?: string | null;
1019
1109
  /** Format: date-time */
1020
1110
  ended_at?: string | null;
@@ -1063,7 +1153,11 @@ export interface components {
1063
1153
  pagination: components["schemas"]["OffsetPagination"];
1064
1154
  };
1065
1155
  /**
1066
- * @description Follows the items. `pending` is not yet accepted and may be paid or unpaid. `active` is
1156
+ * @description pending_checkout has recorded purchase terms but no confirmed checkout. An absent invoice
1157
+ * or zero total does not permit acceptance. Confirmation moves it to pending. Both pending_checkout
1158
+ * and pending can expire or be canceled; neither establishes service delivery.
1159
+ *
1160
+ * Follows the items. `pending` has confirmed checkout, is not yet accepted and may be paid or unpaid. `active` is
1067
1161
  * accepted with items still being set up. `completed` means every item was set up.
1068
1162
  * `partially_completed` means some items were set up and the others failed and were
1069
1163
  * refunded to their original payment sources. `failed` means every item failed and the
@@ -1071,7 +1165,7 @@ export interface components {
1071
1165
  * nothing was charged.
1072
1166
  * @enum {string}
1073
1167
  */
1074
- OrderStatus: "pending" | "active" | "completed" | "partially_completed" | "failed" | "canceled";
1168
+ OrderStatus: "pending_checkout" | "pending" | "active" | "completed" | "partially_completed" | "failed" | "canceled";
1075
1169
  /**
1076
1170
  * @description `pending` is waiting to be set up. `completed` was confirmed by the service.
1077
1171
  * `failed` was not set up and its amount was refunded to the original payment sources.
@@ -1080,13 +1174,19 @@ export interface components {
1080
1174
  * @enum {string}
1081
1175
  */
1082
1176
  OrderItemStatus: "pending" | "completed" | "failed" | "canceled";
1177
+ /**
1178
+ * @description A recorded purchase. pending_checkout requires explicit Billing confirmation before collection
1179
+ * or acceptance, even without an invoice. Coupon fields describe a discount confirmed at checkout and are absent
1180
+ * before confirmation; a quote never populates them. A draft invoice contains base purchase
1181
+ * amounts awaiting checkout. Payment and acceptance remain separate from resource delivery.
1182
+ */
1083
1183
  Order: {
1084
1184
  /** Format: uuid */
1085
1185
  coupon_id?: string;
1086
1186
  coupon?: components["schemas"]["ObjectIdentity"];
1087
1187
  /** Format: uuid */
1088
1188
  promotion_code_id?: string;
1089
- /** @description Code text frozen when this order applied the coupon. */
1189
+ /** @description Code text frozen when checkout applied the coupon. Absent for an account discount. */
1090
1190
  promotion_code?: string;
1091
1191
  invoice?: components["schemas"]["InvoiceSummary"];
1092
1192
  /** @description How the order was paid. Absent until it is paid. */
@@ -1137,7 +1237,7 @@ export interface components {
1137
1237
  change_effective?: "none" | "immediate" | "period_end";
1138
1238
  /**
1139
1239
  * Format: date-time
1140
- * @description Acceptance deadline. Only pending orders expire automatically.
1240
+ * @description Acceptance deadline. pending_checkout and pending orders can expire automatically.
1141
1241
  */
1142
1242
  expires_at?: string | null;
1143
1243
  /** Format: date-time */
@@ -1172,13 +1272,22 @@ export interface components {
1172
1272
  brand?: string;
1173
1273
  last4?: string;
1174
1274
  };
1175
- /** @description Frozen purchase terms. Monetary fields come from related invoice-line snapshots and are absent when there is no immediate invoice. Later catalog changes do not reprice this line. */
1275
+ /**
1276
+ * @description Frozen purchase terms. Monetary fields come from related invoice-line snapshots and are absent
1277
+ * when there is no immediate invoice. Later catalog changes do not reprice this line. A new service
1278
+ * purchase creates its pending subscription when this item is recorded, not when payment succeeds.
1279
+ */
1176
1280
  OrderItem: {
1177
1281
  position?: number;
1178
1282
  configuration?: {
1179
1283
  [key: string]: unknown;
1180
1284
  };
1181
- /** Format: uuid */
1285
+ /**
1286
+ * Format: uuid
1287
+ * @description Stable Billing subscription ID. A new prepaid or postpaid service purchase returns the
1288
+ * pending subscription here; renewals reference the existing subscription and changes the
1289
+ * replacement. Absent for delivery without a subscription. This is not a business resource ID.
1290
+ */
1182
1291
  subscription_id?: string;
1183
1292
  /** @enum {string} */
1184
1293
  interval: "none" | "day" | "month" | "year";
@@ -1316,7 +1425,11 @@ export interface components {
1316
1425
  items: components["schemas"]["Entitlement"][];
1317
1426
  pagination: components["schemas"]["OffsetPagination"];
1318
1427
  };
1319
- /** @description Purchase-related invoice amounts, without account contact details or payment methods. Absent on an order with no immediate invoice. */
1428
+ /**
1429
+ * @description Purchase-related invoice amounts, without account contact details or payment methods. A draft
1430
+ * order invoice shows base amounts awaiting checkout, not a confirmed discount or collectible total.
1431
+ * Absent when no invoice has been created; absence does not establish acceptance or delivery.
1432
+ */
1320
1433
  InvoiceSummary: {
1321
1434
  /** Format: uuid */
1322
1435
  id: string;
@@ -2498,7 +2498,7 @@ export interface components {
2498
2498
  PlacedOrder: {
2499
2499
  /**
2500
2500
  * Format: uuid
2501
- * @description The invoice for this purchase. Null when there is no immediate invoice. Read the invoice for its current payment state.
2501
+ * @description The invoice for this purchase, which may still be a draft awaiting checkout. Null when no invoice has been created. Its presence or absence does not establish whether delivery may begin.
2502
2502
  */
2503
2503
  invoice_id: string | null;
2504
2504
  /**
@@ -434,14 +434,17 @@ export interface components {
434
434
  /** @description **The rules compiled from every policy that applies. Do not walk them to reach a decision.** They are here to render what a user may do; each request is decided by the service handling it */
435
435
  rules: components["schemas"]["RuleResource"][] | null;
436
436
  };
437
+ ProjectTraitResource: {
438
+ key: string;
439
+ value: string;
440
+ /** @enum {string} */
441
+ effect: "NoWrite" | "NoAccess";
442
+ reason: string;
443
+ };
437
444
  ProjectResource: {
438
- /**
439
- * Format: date-time
440
- * @description A read-only management lock. Running resources and billing remain unchanged. Only an operator can release it.
441
- */
442
- locked_at: string | null;
443
- lock_reason: string;
444
- ban_reason: string;
445
+ traits: components["schemas"]["ProjectTraitResource"][];
446
+ /** Format: date-time */
447
+ deletion_requested_at: string | null;
445
448
  /** Format: date-time */
446
449
  created_at: string;
447
450
  created_by: string;
@@ -454,10 +457,6 @@ export interface components {
454
457
  /** Format: uuid */
455
458
  id: string;
456
459
  name: string;
457
- /** @enum {string} */
458
- status: "ACTIVE" | "SUSPENDED" | "BANNED" | "DELETING" | "DELETED";
459
- /** @description Written for a reader; it takes part in no query */
460
- status_reason: string;
461
460
  /** Format: date-time */
462
461
  updated_at: string;
463
462
  };
@@ -470,9 +469,13 @@ export interface components {
470
469
  name?: string;
471
470
  };
472
471
  MembershipResource: {
472
+ traits: components["schemas"]["ProjectTraitResource"][];
473
+ /** Format: date-time */
474
+ deleted_at: string | null;
475
+ /** Format: date-time */
476
+ deletion_requested_at: string | null;
473
477
  grant: components["schemas"]["GrantResource"];
474
478
  member: boolean;
475
- project_status: string;
476
479
  user_status: string;
477
480
  };
478
481
  InvitationResource: {
package/dist/routes.d.ts CHANGED
@@ -938,8 +938,8 @@ export declare const routes: readonly [{
938
938
  readonly service: "billing";
939
939
  readonly contract: "billing/account";
940
940
  readonly method: "POST";
941
- readonly path: "/account/v1/invoices/{invoiceId}/pay";
942
- readonly operationId: "pay-invoice";
941
+ readonly path: "/account/v1/invoices/{invoiceId}/collect-payment";
942
+ readonly operationId: "collect-invoice-payment";
943
943
  readonly securityScheme: "AccessToken";
944
944
  readonly upstreamUrl: "https://billing.leaflow.cloud";
945
945
  }, {
@@ -950,6 +950,14 @@ export declare const routes: readonly [{
950
950
  readonly operationId: "cancel-order";
951
951
  readonly securityScheme: "AccessToken";
952
952
  readonly upstreamUrl: "https://billing.leaflow.cloud";
953
+ }, {
954
+ readonly service: "billing";
955
+ readonly contract: "billing/account";
956
+ readonly method: "POST";
957
+ readonly path: "/account/v1/orders/{orderId}/checkout";
958
+ readonly operationId: "checkout-order";
959
+ readonly securityScheme: "AccessToken";
960
+ readonly upstreamUrl: "https://billing.leaflow.cloud";
953
961
  }, {
954
962
  readonly service: "billing";
955
963
  readonly contract: "billing/account";
package/dist/routes.js CHANGED
@@ -1057,8 +1057,8 @@ export const routes = [
1057
1057
  service: "billing",
1058
1058
  contract: "billing/account",
1059
1059
  method: "POST",
1060
- path: "/account/v1/invoices/{invoiceId}/pay",
1061
- operationId: "pay-invoice",
1060
+ path: "/account/v1/invoices/{invoiceId}/collect-payment",
1061
+ operationId: "collect-invoice-payment",
1062
1062
  securityScheme: "AccessToken",
1063
1063
  upstreamUrl: "https://billing.leaflow.cloud",
1064
1064
  },
@@ -1071,6 +1071,15 @@ export const routes = [
1071
1071
  securityScheme: "AccessToken",
1072
1072
  upstreamUrl: "https://billing.leaflow.cloud",
1073
1073
  },
1074
+ {
1075
+ service: "billing",
1076
+ contract: "billing/account",
1077
+ method: "POST",
1078
+ path: "/account/v1/orders/{orderId}/checkout",
1079
+ operationId: "checkout-order",
1080
+ securityScheme: "AccessToken",
1081
+ upstreamUrl: "https://billing.leaflow.cloud",
1082
+ },
1074
1083
  {
1075
1084
  service: "billing",
1076
1085
  contract: "billing/account",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leaflow/sdk",
3
- "version": "0.100.1",
3
+ "version": "0.102.0",
4
4
  "description": "Leaflow 平台 API 的 TypeScript SDK",
5
5
  "license": "MIT",
6
6
  "repository": {