@leaflow/sdk 0.0.0-dev.210.g700abef → 0.0.0-dev.214.g13f9d6c

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.
@@ -0,0 +1,910 @@
1
+ /**
2
+ * This file was auto-generated by openapi-typescript.
3
+ * Do not make direct changes to the file.
4
+ */
5
+ export interface paths {
6
+ "/catalog/v1/prices": {
7
+ parameters: {
8
+ query?: never;
9
+ header?: never;
10
+ path?: never;
11
+ cookie?: never;
12
+ };
13
+ /**
14
+ * List what is on sale, with prices
15
+ * @description Every sellable thing and what it costs, in one request. A plan appears once per price.
16
+ *
17
+ * `currency` is required: a plan has a price in each currency it is sold in, so "what does
18
+ * this cost" has no answer without one.
19
+ *
20
+ * Retired prices are left out. Existing subscriptions still reference them, so this is not
21
+ * the place to look up what an existing purchase is paying.
22
+ */
23
+ get: operations["list-prices"];
24
+ put?: never;
25
+ post?: never;
26
+ delete?: never;
27
+ options?: never;
28
+ head?: never;
29
+ patch?: never;
30
+ trace?: never;
31
+ };
32
+ "/catalog/v1/products": {
33
+ parameters: {
34
+ query?: never;
35
+ header?: never;
36
+ path?: never;
37
+ cookie?: never;
38
+ };
39
+ /** List catalog products */
40
+ get: operations["list-products"];
41
+ put?: never;
42
+ post?: never;
43
+ delete?: never;
44
+ options?: never;
45
+ head?: never;
46
+ patch?: never;
47
+ trace?: never;
48
+ };
49
+ "/catalog/v1/products/{productId}": {
50
+ parameters: {
51
+ query?: never;
52
+ header?: never;
53
+ path: {
54
+ productId: components["schemas"]["ProductID"];
55
+ };
56
+ cookie?: never;
57
+ };
58
+ /**
59
+ * Get a service
60
+ * @description Resolves an identifier that was stored elsewhere — on an order line, an invoice line, or
61
+ * the terms of a credit — into something that can be displayed.
62
+ */
63
+ get: operations["get-product"];
64
+ put?: never;
65
+ post?: never;
66
+ delete?: never;
67
+ options?: never;
68
+ head?: never;
69
+ patch?: never;
70
+ trace?: never;
71
+ };
72
+ "/catalog/v1/plans/{planId}": {
73
+ parameters: {
74
+ query?: never;
75
+ header?: never;
76
+ path: {
77
+ planId: string;
78
+ };
79
+ cookie?: never;
80
+ };
81
+ /**
82
+ * Get a sellable item
83
+ * @description Resolves a stored identifier into something that can be displayed. Returns items that are
84
+ * no longer on sale: an existing purchase still refers to one.
85
+ */
86
+ get: operations["get-plan"];
87
+ put?: never;
88
+ post?: never;
89
+ delete?: never;
90
+ options?: never;
91
+ head?: never;
92
+ patch?: never;
93
+ trace?: never;
94
+ };
95
+ "/catalog/v1/prices/{priceId}": {
96
+ parameters: {
97
+ query?: never;
98
+ header?: never;
99
+ path: {
100
+ priceId: string;
101
+ };
102
+ cookie?: never;
103
+ };
104
+ /**
105
+ * Get a price
106
+ * @description Returns the catalog price, including retired prices. Fixed purchase history and renewal agreements are shown on orders and subscriptions rather than reconstructed from today's catalog.
107
+ */
108
+ get: operations["get-price"];
109
+ put?: never;
110
+ post?: never;
111
+ delete?: never;
112
+ options?: never;
113
+ head?: never;
114
+ patch?: never;
115
+ trace?: never;
116
+ };
117
+ "/catalog/v1/plans": {
118
+ parameters: {
119
+ query: {
120
+ product_id: components["schemas"]["ProductID"];
121
+ };
122
+ header?: never;
123
+ path?: never;
124
+ cookie?: never;
125
+ };
126
+ /** List catalog plans */
127
+ get: operations["list-plans"];
128
+ put?: never;
129
+ post?: never;
130
+ delete?: never;
131
+ options?: never;
132
+ head?: never;
133
+ patch?: never;
134
+ trace?: never;
135
+ };
136
+ "/catalog/v1/plans/{planId}/prices": {
137
+ parameters: {
138
+ query?: never;
139
+ header?: never;
140
+ path: {
141
+ planId: components["parameters"]["PlanId"];
142
+ };
143
+ cookie?: never;
144
+ };
145
+ /**
146
+ * List catalog prices
147
+ * @description Public list prices only. An account holding a negotiated agreement may be charged less;
148
+ * it is never charged more.
149
+ */
150
+ get: operations["list-prices-by-plan"];
151
+ put?: never;
152
+ post?: never;
153
+ delete?: never;
154
+ options?: never;
155
+ head?: never;
156
+ patch?: never;
157
+ trace?: never;
158
+ };
159
+ "/catalog/v1/rate-cards/{rateCardId}/rules": {
160
+ parameters: {
161
+ query?: never;
162
+ header?: never;
163
+ path: {
164
+ rateCardId: components["parameters"]["RateCardId"];
165
+ };
166
+ cookie?: never;
167
+ };
168
+ /**
169
+ * List catalog rates
170
+ * @description Only public price lists are readable here. A list written for a single agreement is not,
171
+ * and its identifier cannot be used to reach it.
172
+ */
173
+ get: operations["list-rates"];
174
+ put?: never;
175
+ post?: never;
176
+ delete?: never;
177
+ options?: never;
178
+ head?: never;
179
+ patch?: never;
180
+ trace?: never;
181
+ };
182
+ "/catalog/v1/estimates": {
183
+ parameters: {
184
+ query?: never;
185
+ header?: never;
186
+ path?: never;
187
+ cookie?: never;
188
+ };
189
+ get?: never;
190
+ put?: never;
191
+ /**
192
+ * Estimate a basket
193
+ * @description Uses public list prices. Nothing is reserved and nothing is recorded, so this may be
194
+ * called as often as required.
195
+ *
196
+ * `POST` is used because the set of items to price does not fit in a query string. There is
197
+ * no corresponding `GET`, and no estimate is stored to retrieve.
198
+ *
199
+ * An account holding a negotiated agreement may be charged less than this. Tax and
200
+ * discounts are not included.
201
+ */
202
+ post: operations["create-estimate"];
203
+ delete?: never;
204
+ options?: never;
205
+ head?: never;
206
+ patch?: never;
207
+ trace?: never;
208
+ };
209
+ }
210
+ export type webhooks = Record<string, never>;
211
+ export interface components {
212
+ schemas: {
213
+ /**
214
+ * @description Whether a fulfilled purchase may end immediately or only after its paid term. Does not grant a refund. When absent, the terms are not configured and termination requires review.
215
+ * @enum {string}
216
+ */
217
+ TerminationPolicy: "immediate" | "period_end";
218
+ /**
219
+ * @description Prorated returns the unused value of paid service periods using integer-second duration ratios. Setup fees are excluded. Tax and funds follow the original invoice and payment sources.
220
+ * @enum {string}
221
+ */
222
+ RefundPolicy: "none" | "prorated";
223
+ Error: {
224
+ code?: string;
225
+ message: string;
226
+ /**
227
+ * @description What a given `code` carries alongside the message. The keys depend on the code,
228
+ * and a client that does not recognise one ignores it.
229
+ */
230
+ meta?: {
231
+ [key: string]: unknown;
232
+ };
233
+ /** Format: int64 */
234
+ status: number;
235
+ };
236
+ Product: {
237
+ id: components["schemas"]["ProductID"];
238
+ name: string;
239
+ description?: string;
240
+ };
241
+ /** @description Immutable platform service identifier, such as compute, canopy or assistant. */
242
+ ProductID: string;
243
+ ProductList: {
244
+ items: components["schemas"]["Product"][];
245
+ /** Format: int64 */
246
+ total_count?: number;
247
+ };
248
+ Plan: {
249
+ enabled: boolean;
250
+ lookup_key?: string;
251
+ product: components["schemas"]["Product"];
252
+ features: components["schemas"]["PlanFeature"][];
253
+ /** Format: uuid */
254
+ id: string;
255
+ product_id: components["schemas"]["ProductID"];
256
+ name: string;
257
+ description?: string;
258
+ };
259
+ PlanList: {
260
+ items: components["schemas"]["Plan"][];
261
+ /** Format: int64 */
262
+ total_count?: number;
263
+ };
264
+ Price: {
265
+ rate_card?: components["schemas"]["ObjectIdentity"];
266
+ lookup_key?: string;
267
+ product: components["schemas"]["Product"];
268
+ plan: components["schemas"]["ObjectIdentity"];
269
+ /** Format: uuid */
270
+ meter_id?: string;
271
+ meter?: components["schemas"]["ObjectIdentity"];
272
+ unit_quantity: string;
273
+ enabled?: boolean;
274
+ termination_policy?: components["schemas"]["TerminationPolicy"];
275
+ refund_policy?: components["schemas"]["RefundPolicy"];
276
+ product_id?: components["schemas"]["ProductID"];
277
+ /** Format: uuid */
278
+ id: string;
279
+ /** Format: uuid */
280
+ plan_id: string;
281
+ currency: string;
282
+ /**
283
+ * @description `postpaid` charges for what is used, `prepaid` buys a period in advance, `one_time`
284
+ * charges once.
285
+ * @enum {string}
286
+ */
287
+ type: "postpaid" | "prepaid" | "one_time";
288
+ /**
289
+ * @description How the amount is arrived at. `rated` means the rate depends on attributes such as
290
+ * region or machine type, and is looked up on a price list.
291
+ * @enum {string}
292
+ */
293
+ billing_scheme: "per_unit" | "tiered" | "rated";
294
+ /** @description Present for `per_unit`. */
295
+ unit_amount?: components["schemas"]["Money"];
296
+ /**
297
+ * @description `none` for a price that is not tiered, which is most of them.
298
+ *
299
+ * Otherwise `graduated` charges each band at its own rate, and `volume` charges
300
+ * everything at the rate of the band the total falls in.
301
+ * @enum {string}
302
+ */
303
+ tiers_mode?: "none" | "graduated" | "volume";
304
+ /** @description Present for `tiered`, in ascending order. */
305
+ tiers?: components["schemas"]["Tier"][];
306
+ /**
307
+ * Format: uuid
308
+ * @description For `rated` prices, the price list the rates are read from.
309
+ */
310
+ rate_card_id?: string;
311
+ /** @description The smallest quantity that can be bought. Absent means no lower bound. */
312
+ min_quantity?: string;
313
+ /**
314
+ * @description The largest purchasable quantity. Omitted when no maximum applies. A quantity above this limit is
315
+ * rejected with BILLING_PRICE_INVALID and field=max_quantity.
316
+ */
317
+ max_quantity?: string;
318
+ /** @description Quantities must be a multiple of this. Absent means any quantity within the bounds. */
319
+ quantity_step?: string;
320
+ /** @description For prepaid prices, how many periods one purchase covers. */
321
+ interval_count?: number;
322
+ /** @enum {string} */
323
+ interval: "none" | "day" | "month" | "year";
324
+ setup_fee?: components["schemas"]["Money"];
325
+ };
326
+ PriceList: {
327
+ items: components["schemas"]["Price"][];
328
+ /** Format: int64 */
329
+ total_count?: number;
330
+ };
331
+ Rate: {
332
+ meter: components["schemas"]["ObjectIdentity"];
333
+ /** @description The unit readings arrive in, such as `core-second`. */
334
+ unit?: string;
335
+ /** @description The attributes this rate applies to, such as region and machine type. */
336
+ dimensions: {
337
+ [key: string]: string;
338
+ };
339
+ /** @enum {string} */
340
+ pricing_model: "per_unit" | "graduated" | "volume";
341
+ /** @description Present for `per_unit`. Tiered rates carry their amounts on the tiers. */
342
+ unit_amount?: components["schemas"]["Money"];
343
+ /** @description Present for `graduated` and `volume`, in ascending order. */
344
+ tiers?: components["schemas"]["Tier"][];
345
+ /**
346
+ * @description How many measured units one amount covers. An hourly rate on a per-second meter is
347
+ * `"3600"`.
348
+ */
349
+ unit_quantity?: string;
350
+ currency: string;
351
+ /** Format: date-time */
352
+ effective_from: string;
353
+ /** Format: date-time */
354
+ effective_to?: string | null;
355
+ };
356
+ RateList: {
357
+ items: components["schemas"]["Rate"][];
358
+ /** Format: int64 */
359
+ total_count?: number;
360
+ };
361
+ /**
362
+ * @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.
363
+ *
364
+ * A line that gives a meter, `dimensions` or `duration_seconds` estimates usage and is
365
+ * priced only at a postpaid price. Such a line is refused with HTTP 400
366
+ * `BILLING_PURCHASE_INVALID` when `price_type` is `prepaid` or `one_time`, or when the price
367
+ * it names is not postpaid; `meta.field` is `price_type`, `price_id` or `price_lookup_key`
368
+ * accordingly. When the plan has no postpaid price, the line is returned unpriced with
369
+ * `no_price`.
370
+ */
371
+ QuoteLine: {
372
+ price_lookup_key?: string;
373
+ plan_lookup_key?: string;
374
+ meter_lookup_key?: string;
375
+ /** Format: uuid */
376
+ price_id?: string;
377
+ product_id?: components["schemas"]["ProductID"];
378
+ /** Format: uuid */
379
+ plan_id?: string;
380
+ /** Format: uuid */
381
+ meter_id?: string;
382
+ /**
383
+ * @description The attributes the price depends on — region, instance type, token class.
384
+ *
385
+ * Required when the price draws its rates from a price list, which is how anything
386
+ * sold by region or by machine type is priced. A price that carries a single unit
387
+ * amount, or a ladder, has no attributes to give and takes none.
388
+ *
389
+ * Every attribute the meter declares must be present. A combination with no rate
390
+ * covering it is refused rather than priced at zero.
391
+ */
392
+ dimensions?: {
393
+ [key: string]: string;
394
+ };
395
+ /**
396
+ * @description Narrows the selection when a plan offers more than one billing type.
397
+ * @enum {string}
398
+ */
399
+ price_type?: "postpaid" | "prepaid" | "one_time";
400
+ /** @enum {string} */
401
+ interval?: "none" | "day" | "month" | "year";
402
+ interval_count?: number;
403
+ quantity: string;
404
+ /**
405
+ * Format: int64
406
+ * @description For metered items, how long to price for. This allows an estimate such as "about
407
+ * this much per month" to be shown before anything exists. The priced quantity is
408
+ * `quantity` multiplied by this duration.
409
+ */
410
+ duration_seconds?: number;
411
+ };
412
+ EstimateRequest: {
413
+ /** @description Must be one the catalogue publishes. */
414
+ currency: string;
415
+ lines: components["schemas"]["QuoteLine"][];
416
+ };
417
+ QuoteLineResult: {
418
+ /** @description Tax included in the account quote. Absent in public catalogue estimates. */
419
+ tax_amount?: components["schemas"]["Money"];
420
+ /** @description Tax already included in the displayed price. */
421
+ tax_included_amount?: components["schemas"]["Money"];
422
+ /** @description Which line of the request this answers. */
423
+ index: number;
424
+ /**
425
+ * @description Whether a price was found for this line. Read this before anything else.
426
+ *
427
+ * A single item with no price no longer fails the whole request. A catalogue
428
+ * almost always has something not yet priced, and refusing the request would
429
+ * leave no way to render a list in which a few entries are simply not on sale.
430
+ *
431
+ * When false, `price_id`, `unit_amount` and `amount` are absent and
432
+ * `unpriced_reason` states what is missing.
433
+ */
434
+ priced: boolean;
435
+ /**
436
+ * @description Why no price was found; `none` while `priced` is true.
437
+ *
438
+ * The last four are told apart because their remedies differ: the price points
439
+ * at no price list, the list holds no rate for that meter, that exact combination
440
+ * of attributes is not configured, or it is configured but nothing is in effect
441
+ * at the moment asked about.
442
+ * @enum {string}
443
+ */
444
+ unpriced_reason?: "none" | "no_price" | "no_rate_card" | "no_meter" | "no_dimensions" | "no_effective_rule";
445
+ /**
446
+ * Format: uuid
447
+ * @description The price selected. Returned whenever `priced` is true, including when the
448
+ * request identified the item indirectly, so that the choice can be confirmed.
449
+ */
450
+ price_id?: string;
451
+ plan_name?: string;
452
+ unit_amount?: components["schemas"]["Money"];
453
+ /**
454
+ * @description The quantity actually priced. When `duration_seconds` is given, it is the requested
455
+ * `quantity` multiplied by that duration.
456
+ */
457
+ quantity?: string;
458
+ /** @description Not rounded. Round only for display. */
459
+ amount?: components["schemas"]["Money"];
460
+ currency: string;
461
+ };
462
+ Quote: {
463
+ lines?: components["schemas"]["QuoteLineResult"][];
464
+ /**
465
+ * @description What would be owed in total. Amounts to be returned are not netted off it.
466
+ *
467
+ * Null when any line could not be priced. What would be owed is not knowable then, and a
468
+ * total that silently left the unpriced lines out would read as a smaller bill rather than
469
+ * an incomplete one — the per-line `priced` flag is easy to skip, a missing total is not.
470
+ */
471
+ total?: components["schemas"]["Money"] | null;
472
+ currency: string;
473
+ };
474
+ Tier: {
475
+ /** @description The upper bound of this band. Null on the last band, which has no bound. */
476
+ up_to?: string | null;
477
+ unit_amount: components["schemas"]["Money"];
478
+ /** @description Charged once when this band is reached, in addition to the per-unit amount. */
479
+ flat_amount?: components["schemas"]["Money"];
480
+ };
481
+ PlanFeature: {
482
+ feature: components["schemas"]["ObjectIdentity"];
483
+ name: string;
484
+ };
485
+ /** @description A catalog object inlined for display. */
486
+ ObjectIdentity: {
487
+ lookup_key?: string;
488
+ /** Format: uuid */
489
+ id: string;
490
+ name: string;
491
+ };
492
+ /**
493
+ * @description A decimal string, in the currency stated alongside it.
494
+ *
495
+ * **The currency is not part of this type.** It is carried by a `currency` field next to the
496
+ * amount, or by the account the amount belongs to. Reading an amount without that field is
497
+ * reading a number with no unit.
498
+ *
499
+ * It is a string rather than a JSON number because a JSON number is a float in most parsers,
500
+ * and a float loses precision on the first arithmetic. Nothing on this platform puts an amount
501
+ * through a float.
502
+ * @example 10.2500000000
503
+ */
504
+ Money: string;
505
+ };
506
+ responses: {
507
+ /** @description Unchanged since the `ETag` that was sent. No body. */
508
+ NotModified: {
509
+ headers: {
510
+ /** @description The same entity tag that was sent. */
511
+ ETag?: string;
512
+ [name: string]: unknown;
513
+ };
514
+ content?: never;
515
+ };
516
+ /** @description Error */
517
+ Error: {
518
+ headers: {
519
+ [name: string]: unknown;
520
+ };
521
+ content: {
522
+ "application/json": components["schemas"]["Error"];
523
+ };
524
+ };
525
+ };
526
+ parameters: {
527
+ /**
528
+ * @description The `ETag` from an earlier reply. When the catalogue has not changed since, the
529
+ * answer is `304` with no body.
530
+ *
531
+ * Send it on every catalogue read. An unchanged catalogue is answered without a body.
532
+ */
533
+ IfNoneMatch: string;
534
+ /** @description 1-based page number; the first page when omitted. */
535
+ Page: number;
536
+ /** @description How many per page, 100 at most. */
537
+ PageSize: number;
538
+ PlanId: string;
539
+ RateCardId: string;
540
+ };
541
+ requestBodies: never;
542
+ headers: never;
543
+ pathItems: never;
544
+ }
545
+ export type $defs = Record<string, never>;
546
+ export interface operations {
547
+ "list-prices": {
548
+ parameters: {
549
+ query: {
550
+ /** @description 1-based page number; the first page when omitted. */
551
+ page?: components["parameters"]["Page"];
552
+ /** @description How many per page, 100 at most. */
553
+ page_size?: components["parameters"]["PageSize"];
554
+ /** @description ISO 4217, three uppercase letters. */
555
+ currency: string;
556
+ product_id?: components["schemas"]["ProductID"];
557
+ /** @description Narrows to one payment timing. */
558
+ type?: "postpaid" | "prepaid" | "one_time";
559
+ };
560
+ header?: {
561
+ /**
562
+ * @description The `ETag` from an earlier reply. When the catalogue has not changed since, the
563
+ * answer is `304` with no body.
564
+ *
565
+ * Send it on every catalogue read. An unchanged catalogue is answered without a body.
566
+ */
567
+ "If-None-Match"?: components["parameters"]["IfNoneMatch"];
568
+ };
569
+ path?: never;
570
+ cookie?: never;
571
+ };
572
+ requestBody?: never;
573
+ responses: {
574
+ /** @description OK */
575
+ 200: {
576
+ headers: {
577
+ /** @description Changes whenever this catalog representation changes. */
578
+ ETag?: string;
579
+ [name: string]: unknown;
580
+ };
581
+ content: {
582
+ "application/json": components["schemas"]["PriceList"];
583
+ };
584
+ };
585
+ /** @description Not Modified */
586
+ 304: {
587
+ headers: {
588
+ [name: string]: unknown;
589
+ };
590
+ content?: never;
591
+ };
592
+ default: components["responses"]["Error"];
593
+ };
594
+ };
595
+ "list-products": {
596
+ parameters: {
597
+ query?: {
598
+ /** @description 1-based page number; the first page when omitted. */
599
+ page?: components["parameters"]["Page"];
600
+ /** @description How many per page, 100 at most. */
601
+ page_size?: components["parameters"]["PageSize"];
602
+ };
603
+ header?: {
604
+ /**
605
+ * @description The `ETag` from an earlier reply. When the catalogue has not changed since, the
606
+ * answer is `304` with no body.
607
+ *
608
+ * Send it on every catalogue read. An unchanged catalogue is answered without a body.
609
+ */
610
+ "If-None-Match"?: components["parameters"]["IfNoneMatch"];
611
+ };
612
+ path?: never;
613
+ cookie?: never;
614
+ };
615
+ requestBody?: never;
616
+ responses: {
617
+ /** @description OK */
618
+ 200: {
619
+ headers: {
620
+ /**
621
+ * @description Changes whenever the catalogue changes. Send it back as `If-None-Match`
622
+ * to be told `304` instead of receiving the same listing again.
623
+ */
624
+ ETag?: string;
625
+ [name: string]: unknown;
626
+ };
627
+ content: {
628
+ "application/json": components["schemas"]["ProductList"];
629
+ };
630
+ };
631
+ 304: components["responses"]["NotModified"];
632
+ default: components["responses"]["Error"];
633
+ };
634
+ };
635
+ "get-product": {
636
+ parameters: {
637
+ query?: never;
638
+ header?: {
639
+ /**
640
+ * @description The `ETag` from an earlier reply. When the catalogue has not changed since, the
641
+ * answer is `304` with no body.
642
+ *
643
+ * Send it on every catalogue read. An unchanged catalogue is answered without a body.
644
+ */
645
+ "If-None-Match"?: components["parameters"]["IfNoneMatch"];
646
+ };
647
+ path: {
648
+ productId: components["schemas"]["ProductID"];
649
+ };
650
+ cookie?: never;
651
+ };
652
+ requestBody?: never;
653
+ responses: {
654
+ /** @description OK */
655
+ 200: {
656
+ headers: {
657
+ /** @description Changes whenever this catalog representation changes. */
658
+ ETag?: string;
659
+ [name: string]: unknown;
660
+ };
661
+ content: {
662
+ "application/json": components["schemas"]["Product"];
663
+ };
664
+ };
665
+ /** @description Not Modified */
666
+ 304: {
667
+ headers: {
668
+ [name: string]: unknown;
669
+ };
670
+ content?: never;
671
+ };
672
+ default: components["responses"]["Error"];
673
+ };
674
+ };
675
+ "get-plan": {
676
+ parameters: {
677
+ query?: never;
678
+ header?: {
679
+ /**
680
+ * @description The `ETag` from an earlier reply. When the catalogue has not changed since, the
681
+ * answer is `304` with no body.
682
+ *
683
+ * Send it on every catalogue read. An unchanged catalogue is answered without a body.
684
+ */
685
+ "If-None-Match"?: components["parameters"]["IfNoneMatch"];
686
+ };
687
+ path: {
688
+ planId: string;
689
+ };
690
+ cookie?: never;
691
+ };
692
+ requestBody?: never;
693
+ responses: {
694
+ /** @description OK */
695
+ 200: {
696
+ headers: {
697
+ /** @description Changes whenever this catalog representation changes. */
698
+ ETag?: string;
699
+ [name: string]: unknown;
700
+ };
701
+ content: {
702
+ "application/json": components["schemas"]["Plan"];
703
+ };
704
+ };
705
+ /** @description Not Modified */
706
+ 304: {
707
+ headers: {
708
+ [name: string]: unknown;
709
+ };
710
+ content?: never;
711
+ };
712
+ default: components["responses"]["Error"];
713
+ };
714
+ };
715
+ "get-price": {
716
+ parameters: {
717
+ query?: never;
718
+ header?: {
719
+ /**
720
+ * @description The `ETag` from an earlier reply. When the catalogue has not changed since, the
721
+ * answer is `304` with no body.
722
+ *
723
+ * Send it on every catalogue read. An unchanged catalogue is answered without a body.
724
+ */
725
+ "If-None-Match"?: components["parameters"]["IfNoneMatch"];
726
+ };
727
+ path: {
728
+ priceId: string;
729
+ };
730
+ cookie?: never;
731
+ };
732
+ requestBody?: never;
733
+ responses: {
734
+ /** @description OK */
735
+ 200: {
736
+ headers: {
737
+ /** @description Changes whenever this catalog listing changes. */
738
+ ETag?: string;
739
+ [name: string]: unknown;
740
+ };
741
+ content: {
742
+ "application/json": components["schemas"]["Price"];
743
+ };
744
+ };
745
+ /** @description Not Modified */
746
+ 304: {
747
+ headers: {
748
+ [name: string]: unknown;
749
+ };
750
+ content?: never;
751
+ };
752
+ default: components["responses"]["Error"];
753
+ };
754
+ };
755
+ "list-plans": {
756
+ parameters: {
757
+ query: {
758
+ product_id: components["schemas"]["ProductID"];
759
+ /** @description 1-based page number; the first page when omitted. */
760
+ page?: components["parameters"]["Page"];
761
+ /** @description How many per page, 100 at most. */
762
+ page_size?: components["parameters"]["PageSize"];
763
+ };
764
+ header?: {
765
+ /**
766
+ * @description The `ETag` from an earlier reply. When the catalogue has not changed since, the
767
+ * answer is `304` with no body.
768
+ *
769
+ * Send it on every catalogue read. An unchanged catalogue is answered without a body.
770
+ */
771
+ "If-None-Match"?: components["parameters"]["IfNoneMatch"];
772
+ };
773
+ path?: never;
774
+ cookie?: never;
775
+ };
776
+ requestBody?: never;
777
+ responses: {
778
+ /** @description OK */
779
+ 200: {
780
+ headers: {
781
+ /**
782
+ * @description Changes whenever the catalogue changes. Send it back as `If-None-Match`
783
+ * to be told `304` instead of receiving the same listing again.
784
+ */
785
+ ETag?: string;
786
+ [name: string]: unknown;
787
+ };
788
+ content: {
789
+ "application/json": components["schemas"]["PlanList"];
790
+ };
791
+ };
792
+ 304: components["responses"]["NotModified"];
793
+ default: components["responses"]["Error"];
794
+ };
795
+ };
796
+ "list-prices-by-plan": {
797
+ parameters: {
798
+ query?: {
799
+ /** @description 1-based page number; the first page when omitted. */
800
+ page?: components["parameters"]["Page"];
801
+ /** @description How many per page, 100 at most. */
802
+ page_size?: components["parameters"]["PageSize"];
803
+ currency?: string;
804
+ };
805
+ header?: {
806
+ /**
807
+ * @description The `ETag` from an earlier reply. When the catalogue has not changed since, the
808
+ * answer is `304` with no body.
809
+ *
810
+ * Send it on every catalogue read. An unchanged catalogue is answered without a body.
811
+ */
812
+ "If-None-Match"?: components["parameters"]["IfNoneMatch"];
813
+ };
814
+ path: {
815
+ planId: components["parameters"]["PlanId"];
816
+ };
817
+ cookie?: never;
818
+ };
819
+ requestBody?: never;
820
+ responses: {
821
+ /** @description OK */
822
+ 200: {
823
+ headers: {
824
+ /**
825
+ * @description Changes whenever the catalogue changes. Send it back as `If-None-Match`
826
+ * to be told `304` instead of receiving the same listing again.
827
+ */
828
+ ETag?: string;
829
+ [name: string]: unknown;
830
+ };
831
+ content: {
832
+ "application/json": components["schemas"]["PriceList"];
833
+ };
834
+ };
835
+ 304: components["responses"]["NotModified"];
836
+ default: components["responses"]["Error"];
837
+ };
838
+ };
839
+ "list-rates": {
840
+ parameters: {
841
+ query?: {
842
+ /** @description 1-based page number; the first page when omitted. */
843
+ page?: components["parameters"]["Page"];
844
+ /** @description How many per page, 100 at most. */
845
+ page_size?: components["parameters"]["PageSize"];
846
+ /** @description Filter by the meter UUID. */
847
+ meter_id?: string;
848
+ /** @description Return the rates in effect at this moment. Defaults to now. */
849
+ at?: string;
850
+ };
851
+ header?: {
852
+ /**
853
+ * @description The `ETag` from an earlier reply. When the catalogue has not changed since, the
854
+ * answer is `304` with no body.
855
+ *
856
+ * Send it on every catalogue read. An unchanged catalogue is answered without a body.
857
+ */
858
+ "If-None-Match"?: components["parameters"]["IfNoneMatch"];
859
+ };
860
+ path: {
861
+ rateCardId: components["parameters"]["RateCardId"];
862
+ };
863
+ cookie?: never;
864
+ };
865
+ requestBody?: never;
866
+ responses: {
867
+ /** @description OK */
868
+ 200: {
869
+ headers: {
870
+ /**
871
+ * @description Changes whenever the catalogue changes. Send it back as `If-None-Match`
872
+ * to be told `304` instead of receiving the same listing again.
873
+ */
874
+ ETag?: string;
875
+ [name: string]: unknown;
876
+ };
877
+ content: {
878
+ "application/json": components["schemas"]["RateList"];
879
+ };
880
+ };
881
+ 304: components["responses"]["NotModified"];
882
+ default: components["responses"]["Error"];
883
+ };
884
+ };
885
+ "create-estimate": {
886
+ parameters: {
887
+ query?: never;
888
+ header?: never;
889
+ path?: never;
890
+ cookie?: never;
891
+ };
892
+ requestBody: {
893
+ content: {
894
+ "application/json": components["schemas"]["EstimateRequest"];
895
+ };
896
+ };
897
+ responses: {
898
+ /** @description OK */
899
+ 200: {
900
+ headers: {
901
+ [name: string]: unknown;
902
+ };
903
+ content: {
904
+ "application/json": components["schemas"]["Quote"];
905
+ };
906
+ };
907
+ default: components["responses"]["Error"];
908
+ };
909
+ };
910
+ }