@hyperline/cli 0.1.0-build.1.f3a8945 → 0.1.0-build.1.f5418f4

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.
@@ -37739,10 +37739,9 @@ Examples:
37739
37739
  baseUrlOverride: resolveIngestBaseUrl(ctx.baseUrl)
37740
37740
  });
37741
37741
  });
37742
- resource.command("send").description(`Send a single billable event.`).requiredOption("--customer-id <value>", `Customer ID or external ID`).requiredOption("--event-type <value>", `Event type`).requiredOption("--timestamp <value>", `ISO8601 timestamp`).requiredOption("--record <value>", `Event record as JSON (must include "id" key)`).option("--with-price-calculation", `Whether to calculate prices for the event`).addHelpText("after", `
37742
+ resource.command("send").description(`Send a single billable event.`).requiredOption("--customer-id <value>", `Customer ID or external ID`).requiredOption("--event-type <value>", `Event type`).requiredOption("--timestamp <value>", `ISO8601 timestamp`).requiredOption("--record <value>", `Event record as JSON (must include "id" key)`).addHelpText("after", `
37743
37743
  Examples:
37744
- hyperline events send --customer-id cus_xyz --event-type api_call --timestamp 2024-01-15T10:00:00Z --record '{"id":"evt_1","duration":32}'
37745
- hyperline events send --customer-id cus_xyz --event-type api_call --timestamp 2024-01-15T10:00:00Z --record '{"id":"evt_1"}' --with-price-calculation`).action(async (opts) => {
37744
+ hyperline events send --customer-id cus_xyz --event-type api_call --timestamp 2024-01-15T10:00:00Z --record '{"id":"evt_1","duration":32}'`).action(async (opts) => {
37746
37745
  const ctx = resource.parent?.opts()._ctx;
37747
37746
  if (!ctx) {
37748
37747
  process.stderr.write("Error: Not authenticated\n");
@@ -37762,14 +37761,10 @@ Examples:
37762
37761
  timestamp: opts.timestamp,
37763
37762
  record: record2
37764
37763
  };
37765
- const args = {};
37766
- if (opts.withPriceCalculation !== void 0)
37767
- args.with_price_calculation = true;
37768
37764
  await ctx.execute({
37769
37765
  method: "POST",
37770
37766
  path: "/v1/events",
37771
- args,
37772
- queryParamKeys: ["with_price_calculation"],
37767
+ args: {},
37773
37768
  body,
37774
37769
  baseUrlOverride: resolveIngestBaseUrl(ctx.baseUrl)
37775
37770
  });
@@ -38285,7 +38280,7 @@ Examples:
38285
38280
  queryParamKeys: []
38286
38281
  });
38287
38282
  });
38288
- resource.command("preview-manual-journal-entry-recognition").description(`Preview revenue-recognition slices for a manual journal entry without writing data.`).requiredOption("--ledger-id <value>", `Ledger identifier.`).requiredOption("--amount <value>", `Deferred amount in minor ledger-currency units.`).requiredOption("--method <value>", `Recognition method to preview.`).option("--recognition-date <value>", `Recognition date for point-in-time recognition.`).option("--window <json>", `Service window for over-time recognition.`).option("--granularity <value>", `Slice granularity for over-time recognition.`).addHelpText("after", `
38283
+ resource.command("preview-manual-journal-entry-recognition").description(`Preview revenue-recognition slices for a manual journal entry without writing data.`).requiredOption("--ledger-id <value>", `Ledger identifier.`).requiredOption("--amount <number>", `Deferred amount in minor ledger-currency units.`).requiredOption("--method <value>", `Recognition method to preview.`).option("--recognition-date <value>", `Recognition date for point-in-time recognition.`).option("--window <json>", `Service window for over-time recognition.`).option("--granularity <value>", `Slice granularity for over-time recognition.`).addHelpText("after", `
38289
38284
  Examples:
38290
38285
  hyperline accounting-journal-entries preview-manual-journal-entry-recognition --ledger-id <ledger_id> --amount <amount> --method <method>
38291
38286
  hyperline accounting-journal-entries preview-manual-journal-entry-recognition --ledger-id <ledger_id> --amount <amount> --method <method> --recognition-date <recognition_date> --window <window>
@@ -38298,14 +38293,14 @@ Examples:
38298
38293
  const args = {};
38299
38294
  if (opts.ledgerId !== void 0)
38300
38295
  args.ledger_id = opts.ledgerId;
38301
- if (opts.amount !== void 0)
38302
- args.amount = opts.amount;
38303
38296
  if (opts.method !== void 0)
38304
38297
  args.method = opts.method;
38305
38298
  if (opts.recognitionDate !== void 0)
38306
38299
  args.recognition_date = opts.recognitionDate;
38307
38300
  if (opts.granularity !== void 0)
38308
38301
  args.granularity = opts.granularity;
38302
+ if (opts.amount !== void 0)
38303
+ args.amount = Number(opts.amount);
38309
38304
  if (opts.window !== void 0)
38310
38305
  args.window = JSON.parse(opts.window);
38311
38306
  await ctx.execute({
@@ -38483,7 +38478,7 @@ Examples:
38483
38478
  queryParamKeys: []
38484
38479
  });
38485
38480
  });
38486
- resource.command("delete-ledger").description(`Delete an unused accounting ledger.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
38481
+ resource.command("delete-ledger").description(`Permanently delete a ledger with its accounts, rules, journal entries and revenue recognition schedules, and unlink the suppliers, supplier contracts and accounting settings that reference it.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
38487
38482
  Examples:
38488
38483
  hyperline accounting-ledgers delete-ledger --id <id>
38489
38484
  hyperline accounting-ledgers delete-ledger --id <id> --output json`).action(async (opts) => {
@@ -38583,7 +38578,7 @@ Examples:
38583
38578
  // build/commands/generated/accounting-revenue-recognition.js
38584
38579
  function registerAccounting_Revenue_RecognitionCommands(parent) {
38585
38580
  const resource = parent.command("accounting-revenue-recognition").description("Manage accounting > revenue recognition");
38586
- resource.command("get-rev-rec-waterfall").description(`Aggregate revenue-recognition schedules into a booked-by-recognition month matrix.`).option("--ledger-id <value>", `Ledger identifier.`).option("--year <number>", `Booked calendar year.`).option("--customer-id.in <value>", `Comma-separated customer identifiers.`).option("--product-id.in <value>", `Comma-separated product identifiers.`).option("--search <value>", `Search customer, product, invoice, or schedule data.`).addHelpText("after", `
38581
+ resource.command("get-rev-rec-waterfall").description(`Aggregate revenue-recognition schedules into a booked-by-recognition month matrix.`).option("--ledger-id <value>", `Ledger identifier.`).option("--year <number>", `Booked calendar year.`).option("--customer-id.in <value>", `Comma-separated customer identifiers.`).option("--product-id.in <value>", `Comma-separated product identifiers.`).option("--search <value>", `Search by invoice ID or number, customer name or ID, or subscription ID.`).addHelpText("after", `
38587
38582
  Examples:
38588
38583
  hyperline accounting-revenue-recognition get-rev-rec-waterfall
38589
38584
  hyperline accounting-revenue-recognition get-rev-rec-waterfall --ledger-id <ledger_id> --year <year>`).action(async (opts) => {
@@ -38616,7 +38611,7 @@ Examples:
38616
38611
  ]
38617
38612
  });
38618
38613
  });
38619
- resource.command("get-rev-rec-waterfall-cell").description(`List the schedules and slices contributing to a waterfall cell.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--ledger-id <value>", `Ledger identifier.`).option("--booked-month <value>", `Booked month formatted YYYY-MM; required if year is absent.`).option("--year <number>", `Booked year; required if booked_month is absent.`).option("--recognition-month <value>", `Recognition month formatted YYYY-MM.`).option("--cell-type <value>", `Waterfall cell category.`).option("--status <value>", `Recognition status filter.`).option("--customer-id.in <value>", `Comma-separated customer identifiers.`).option("--product-id.in <value>", `Comma-separated product identifiers.`).option("--search <value>", `Search customer, product, invoice, or schedule data.`).addHelpText("after", `
38614
+ resource.command("get-rev-rec-waterfall-cell").description(`List the schedules and slices contributing to a waterfall cell.`).option("--take <number>", `take`).option("--skip <number>", `skip`).option("--ledger-id <value>", `Ledger identifier.`).option("--booked-month <value>", `Booked month formatted YYYY-MM; required if year is absent.`).option("--year <number>", `Booked year; required if booked_month is absent.`).option("--recognition-month <value>", `Recognition month formatted YYYY-MM.`).option("--cell-type <value>", `Waterfall cell category.`).option("--status <value>", `Recognition status filter.`).option("--customer-id.in <value>", `Comma-separated customer identifiers.`).option("--product-id.in <value>", `Comma-separated product identifiers.`).option("--search <value>", `Search by invoice ID or number, customer name or ID, or subscription ID.`).addHelpText("after", `
38620
38615
  Examples:
38621
38616
  hyperline accounting-revenue-recognition get-rev-rec-waterfall-cell
38622
38617
  hyperline accounting-revenue-recognition get-rev-rec-waterfall-cell --take <take> --ledger-id <ledger_id>`).action(async (opts) => {
@@ -38794,7 +38789,7 @@ Examples:
38794
38789
  queryParamKeys: []
38795
38790
  });
38796
38791
  });
38797
- resource.command("reshape-rev-rec-schedule").description(`Recognize an amount now and optionally spread the remainder over a new window.`).requiredOption("--schedule-id <value>", `schedule_id parameter`).requiredOption("--recognize-now-amount <value>", `Amount to recognize immediately in ledger currency.`).option("--window <json>", `Window over which to spread the remaining amount.`).requiredOption("--reason-code <value>", `Stable reason code for the adjustment.`).option("--reason-detail <value>", `Required explanation when reason_code is \`other\`.`).addHelpText("after", `
38792
+ resource.command("reshape-rev-rec-schedule").description(`Recognize an amount now and optionally spread the remainder over a new window.`).requiredOption("--schedule-id <value>", `schedule_id parameter`).requiredOption("--recognize-now-amount <number>", `Amount to recognize immediately in ledger currency. Expressed in currency's smallest unit.`).option("--window <json>", `Window over which to spread the remaining amount.`).requiredOption("--reason-code <value>", `Stable reason code for the adjustment.`).option("--reason-detail <value>", `Required explanation when reason_code is \`other\`.`).addHelpText("after", `
38798
38793
  Examples:
38799
38794
  hyperline accounting-revenue-recognition reshape-rev-rec-schedule --schedule-id <schedule_id> --recognize-now-amount <recognize_now_amount> --reason-code <reason_code>
38800
38795
  hyperline accounting-revenue-recognition reshape-rev-rec-schedule --schedule-id <schedule_id> --recognize-now-amount <recognize_now_amount> --reason-code <reason_code> --window <window> --reason-detail <reason_detail>
@@ -38807,12 +38802,12 @@ Examples:
38807
38802
  const args = {};
38808
38803
  if (opts.scheduleId !== void 0)
38809
38804
  args.schedule_id = opts.scheduleId;
38810
- if (opts.recognizeNowAmount !== void 0)
38811
- args.recognize_now_amount = opts.recognizeNowAmount;
38812
38805
  if (opts.reasonCode !== void 0)
38813
38806
  args.reason_code = opts.reasonCode;
38814
38807
  if (opts.reasonDetail !== void 0)
38815
38808
  args.reason_detail = opts.reasonDetail;
38809
+ if (opts.recognizeNowAmount !== void 0)
38810
+ args.recognize_now_amount = Number(opts.recognizeNowAmount);
38816
38811
  if (opts.window !== void 0)
38817
38812
  args.window = JSON.parse(opts.window);
38818
38813
  await ctx.execute({
@@ -38822,7 +38817,7 @@ Examples:
38822
38817
  queryParamKeys: []
38823
38818
  });
38824
38819
  });
38825
- resource.command("preview-reshape-rev-rec-schedule").description(`Preview the exact reshape plan without writing data.`).requiredOption("--schedule-id <value>", `schedule_id parameter`).requiredOption("--recognize-now-amount <value>", `Amount to recognize immediately in ledger currency.`).option("--window <json>", `Window over which to spread the remaining amount.`).addHelpText("after", `
38820
+ resource.command("preview-reshape-rev-rec-schedule").description(`Preview the exact reshape plan without writing data.`).requiredOption("--schedule-id <value>", `schedule_id parameter`).requiredOption("--recognize-now-amount <number>", `Amount to recognize immediately in ledger currency. Expressed in currency's smallest unit.`).option("--window <json>", `Window over which to spread the remaining amount.`).addHelpText("after", `
38826
38821
  Examples:
38827
38822
  hyperline accounting-revenue-recognition preview-reshape-rev-rec-schedule --schedule-id <schedule_id> --recognize-now-amount <recognize_now_amount>
38828
38823
  hyperline accounting-revenue-recognition preview-reshape-rev-rec-schedule --schedule-id <schedule_id> --recognize-now-amount <recognize_now_amount> --window <window>
@@ -38836,7 +38831,7 @@ Examples:
38836
38831
  if (opts.scheduleId !== void 0)
38837
38832
  args.schedule_id = opts.scheduleId;
38838
38833
  if (opts.recognizeNowAmount !== void 0)
38839
- args.recognize_now_amount = opts.recognizeNowAmount;
38834
+ args.recognize_now_amount = Number(opts.recognizeNowAmount);
38840
38835
  if (opts.window !== void 0)
38841
38836
  args.window = JSON.parse(opts.window);
38842
38837
  await ctx.execute({
@@ -39013,7 +39008,7 @@ Examples:
39013
39008
  queryParamKeys: []
39014
39009
  });
39015
39010
  });
39016
- resource.command("create").description(`Create a new accounting rule for account code routing or journal posting.`).option("--ledger-id <value>", `Identifier of the ledger this rule belongs to.`).option("--name <value>", `Optional user-defined name for the rule.`).requiredOption("--category <value>", `Rule category (e.g. accounting_software, invoice_posted).`).requiredOption("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (month, year, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-property-filters <json>", `Invoice custom property filters. A rule matches only when every entry matches (AND across entries), and an entry matches when the invoice value is one of its \`values\` (any-of). Matching is strict: an invoice without a value for the property never matches. Each entry adds 10 to the \`suggested_priority\` returned by the rule defaults endpoint. Allowed on invoice_posted, invoice_settled, revenue_recognition, credit_note_created and accounting_software (invoice side) rules. An invoice_settled rule with filters cannot set \`payments_clearing_ledger_account_id\`, as PSP payouts are booked without the invoice. Empty means match all.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Use an asset account for doubtful-receivable reclassification or an expense account for direct write-off.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances.`).option("--journal-id <value>", `Journal ID used to route entries in the accounting provider.`).option("--entity-type <value>", `Entity type the rule applies to.`).addHelpText("after", `
39011
+ resource.command("create").description(`Create a new accounting rule for account code routing or journal posting, with the filters, accounts and required fields the rule editor applies to its category.`).option("--ledger-id <value>", `Identifier of the ledger this rule belongs to.`).option("--name <value>", `Optional user-defined name for the rule.`).requiredOption("--category <value>", `Rule category (e.g. accounting_software, invoice_posted).`).requiredOption("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--tax-schemes <json>", `Tax schemes to match. A context without a tax scheme never matches a rule that sets this filter. Empty means match all.`).option("--tax-territories <json>", `Tax territory country codes to match. A context without a tax territory never matches a rule that sets this filter. Empty means match all.`).option("--tax-rate-classes <json>", `Tax rate classes to match. A context without a tax rate class never matches a rule that sets this filter. Empty means match all.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--bank-account-ids <json>", `Bank account IDs to match. Empty means match all.`).option("--invoice-types <json>", `Invoice kinds to match: \`invoice\` or \`document\`. Refunds and other standard invoices match as \`invoice\`. A context without an invoice, such as a PSP payout, never matches a rule that sets this filter. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (months, years, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-property-filters <json>", `Invoice custom property filters. A rule matches only when every entry matches (AND across entries), and an entry matches when the invoice value is one of its \`values\` (any-of). Matching is strict: an invoice without a value for the property never matches. Each entry adds 10 to the \`suggested_priority\` returned by the rule defaults endpoint. Allowed on invoice_posted, invoice_settled, revenue_recognition, credit_note_created and accounting_software (invoice side) rules. An invoice_settled rule with filters cannot set \`payments_clearing_ledger_account_id\`, as PSP payouts are booked without the invoice. Empty means match all.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing. Must be a \`revenue\` account. On accounting_software rules, a \`revenue\` or \`contra_revenue\` account with entity_type invoice, an \`asset\` or \`contra_asset\` account with entity_type payment.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized. Must be a \`liability\` account.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized. Must be an \`asset\` or \`contra_liability\` account.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue. Must be a \`contra_revenue\` account.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts. Must be a \`contra_revenue\` account.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting. Must be an \`asset\` account.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement. Must be an \`asset\` account.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle. Must be an \`asset\` account.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability. Must be a \`liability\` account.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Must be an \`asset\` account, for doubtful-receivable reclassification, or an \`expense\` account, for direct write-off.`).option("--allowance-for-doubtful-accounts-id <value>", `Allowance for doubtful accounts ledger account ID, set on credit_note_created rules. Must be a \`contra_asset\` account.`).option("--provider-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment provider fees when a payment settles. Must be an \`expense\` account.`).option("--payment-processing-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment processing fees when a payment settles. Takes precedence over \`provider_fees_expense_ledger_account_id\` when set by the same or a higher priority rule. Must be an \`expense\` account.`).option("--payment-processing-fees-revenue-ledger-account-id <value>", `Payment processing fees revenue ledger account ID, set on invoice_settled rules. Must be a \`revenue\` account.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances. Must be a \`liability\` account.`).option("--rev-rec-method <value>", `Revenue recognition method.`).option("--rev-rec-granularity <value>", `Recognition period granularity. Used when \`rev_rec_method\` is \`over_time\`.`).option("--rev-rec-point-in-time-basis <value>", `Date revenue is recognized on. Used when \`rev_rec_method\` is \`point_in_time\`.`).option("--discount-recognition-method <value>", `Method used to recognize discounts.`).option("--journal-id <value>", `Journal ID used to route entries in the accounting provider.`).option("--entity-type <value>", `Entity type the rule applies to.`).addHelpText("after", `
39017
39012
  Examples:
39018
39013
  hyperline accounting-rules create --category <category> --priority <priority>
39019
39014
  hyperline accounting-rules create --category <category> --priority <priority> --ledger-id <ledger_id> --name <name>
@@ -39052,8 +39047,24 @@ Examples:
39052
39047
  args.output_tax_ledger_account_id = opts.outputTaxLedgerAccountId;
39053
39048
  if (opts.uncollectibleDebitLedgerAccountId !== void 0)
39054
39049
  args.uncollectible_debit_ledger_account_id = opts.uncollectibleDebitLedgerAccountId;
39050
+ if (opts.allowanceForDoubtfulAccountsId !== void 0)
39051
+ args.allowance_for_doubtful_accounts_id = opts.allowanceForDoubtfulAccountsId;
39052
+ if (opts.providerFeesExpenseLedgerAccountId !== void 0)
39053
+ args.provider_fees_expense_ledger_account_id = opts.providerFeesExpenseLedgerAccountId;
39054
+ if (opts.paymentProcessingFeesExpenseLedgerAccountId !== void 0)
39055
+ args.payment_processing_fees_expense_ledger_account_id = opts.paymentProcessingFeesExpenseLedgerAccountId;
39056
+ if (opts.paymentProcessingFeesRevenueLedgerAccountId !== void 0)
39057
+ args.payment_processing_fees_revenue_ledger_account_id = opts.paymentProcessingFeesRevenueLedgerAccountId;
39055
39058
  if (opts.customerCreditsLedgerAccountId !== void 0)
39056
39059
  args.customer_credits_ledger_account_id = opts.customerCreditsLedgerAccountId;
39060
+ if (opts.revRecMethod !== void 0)
39061
+ args.rev_rec_method = opts.revRecMethod;
39062
+ if (opts.revRecGranularity !== void 0)
39063
+ args.rev_rec_granularity = opts.revRecGranularity;
39064
+ if (opts.revRecPointInTimeBasis !== void 0)
39065
+ args.rev_rec_point_in_time_basis = opts.revRecPointInTimeBasis;
39066
+ if (opts.discountRecognitionMethod !== void 0)
39067
+ args.discount_recognition_method = opts.discountRecognitionMethod;
39057
39068
  if (opts.journalId !== void 0)
39058
39069
  args.journal_id = opts.journalId;
39059
39070
  if (opts.entityType !== void 0)
@@ -39072,12 +39083,22 @@ Examples:
39072
39083
  args.currencies = JSON.parse(opts.currencies);
39073
39084
  if (opts.countries !== void 0)
39074
39085
  args.countries = JSON.parse(opts.countries);
39086
+ if (opts.taxSchemes !== void 0)
39087
+ args.tax_schemes = JSON.parse(opts.taxSchemes);
39088
+ if (opts.taxTerritories !== void 0)
39089
+ args.tax_territories = JSON.parse(opts.taxTerritories);
39090
+ if (opts.taxRateClasses !== void 0)
39091
+ args.tax_rate_classes = JSON.parse(opts.taxRateClasses);
39075
39092
  if (opts.couponIds !== void 0)
39076
39093
  args.coupon_ids = JSON.parse(opts.couponIds);
39077
39094
  if (opts.clientProviderIds !== void 0)
39078
39095
  args.client_provider_ids = JSON.parse(opts.clientProviderIds);
39079
39096
  if (opts.paymentMethodTypes !== void 0)
39080
39097
  args.payment_method_types = JSON.parse(opts.paymentMethodTypes);
39098
+ if (opts.bankAccountIds !== void 0)
39099
+ args.bank_account_ids = JSON.parse(opts.bankAccountIds);
39100
+ if (opts.invoiceTypes !== void 0)
39101
+ args.invoice_types = JSON.parse(opts.invoiceTypes);
39081
39102
  if (opts.customPropertyFilters !== void 0)
39082
39103
  args.custom_property_filters = JSON.parse(opts.customPropertyFilters);
39083
39104
  await ctx.execute({
@@ -39087,7 +39108,7 @@ Examples:
39087
39108
  queryParamKeys: []
39088
39109
  });
39089
39110
  });
39090
- resource.command("update").description(`Update an existing accounting rule.`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `Optional user-defined name for the rule.`).option("--category <value>", `Rule category. Cannot be changed after creation, must match the current category when sent.`).option("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (month, year, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-property-filters <json>", `Invoice custom property filters. A rule matches only when every entry matches (AND across entries), and an entry matches when the invoice value is one of its \`values\` (any-of). Matching is strict: an invoice without a value for the property never matches. Each entry adds 10 to the \`suggested_priority\` returned by the rule defaults endpoint. Allowed on invoice_posted, invoice_settled, revenue_recognition, credit_note_created and accounting_software (invoice side) rules. An invoice_settled rule with filters cannot set \`payments_clearing_ledger_account_id\`, as PSP payouts are booked without the invoice. Empty means match all.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Use an asset account for doubtful-receivable reclassification or an expense account for direct write-off.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances.`).option("--journal-id <value>", `Journal ID used to route entries in the accounting provider.`).option("--entity-type <value>", `Entity type the rule applies to.`).addHelpText("after", `
39111
+ resource.command("update").description(`Update an existing accounting rule, with the filters, accounts and required fields the rule editor applies to its category.`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `Optional user-defined name for the rule.`).option("--category <value>", `Rule category. Cannot be changed after creation, must match the current category when sent.`).option("--priority <number>", `Override order. Higher priority wins when multiple rules match.`).option("--product-ids <json>", `Product IDs to match. Empty means match all.`).option("--product-types <json>", `Product types to match. Allowed values: flat_fee, dynamic, seat, credit. Empty means match all.`).option("--customer-ids <json>", `Customer IDs for customer-specific overrides.`).option("--currencies <json>", `Currency codes to match (e.g. EUR, USD).`).option("--countries <json>", `Country codes for jurisdiction-based overrides.`).option("--tax-schemes <json>", `Tax schemes to match. A context without a tax scheme never matches a rule that sets this filter. Empty means match all.`).option("--tax-territories <json>", `Tax territory country codes to match. A context without a tax territory never matches a rule that sets this filter. Empty means match all.`).option("--tax-rate-classes <json>", `Tax rate classes to match. A context without a tax rate class never matches a rule that sets this filter. Empty means match all.`).option("--coupon-ids <json>", `Coupon IDs to match. Empty means match all.`).option("--client-provider-ids <json>", `Client provider IDs to match. Empty means match all.`).option("--payment-method-types <json>", `Payment method types to match. Empty means match all.`).option("--bank-account-ids <json>", `Bank account IDs to match. Empty means match all.`).option("--invoice-types <json>", `Invoice kinds to match: \`invoice\` or \`document\`. Refunds and other standard invoices match as \`invoice\`. A context without an invoice, such as a PSP payout, never matches a rule that sets this filter. Empty means match all.`).option("--interval-period <value>", `Billing interval period filter (months, years, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-property-filters <json>", `Invoice custom property filters. A rule matches only when every entry matches (AND across entries), and an entry matches when the invoice value is one of its \`values\` (any-of). Matching is strict: an invoice without a value for the property never matches. Each entry adds 10 to the \`suggested_priority\` returned by the rule defaults endpoint. Allowed on invoice_posted, invoice_settled, revenue_recognition, credit_note_created and accounting_software (invoice side) rules. An invoice_settled rule with filters cannot set \`payments_clearing_ledger_account_id\`, as PSP payouts are booked without the invoice. Empty means match all.`).option("--revenue-ledger-account-id <value>", `Revenue ledger account ID used for invoice line revenue routing. Must be a \`revenue\` account. On accounting_software rules, a \`revenue\` or \`contra_revenue\` account with entity_type invoice, an \`asset\` or \`contra_asset\` account with entity_type payment.`).option("--deferred-revenue-ledger-account-id <value>", `Deferred revenue ledger account ID used before revenue is recognized. Must be a \`liability\` account.`).option("--deferred-discount-ledger-account-id <value>", `Deferred discount ledger account ID used before discounts are recognized. Must be an \`asset\` or \`contra_liability\` account.`).option("--contra-revenue-ledger-account-id <value>", `Contra revenue ledger account ID used for amounts that reduce revenue. Must be a \`contra_revenue\` account.`).option("--discount-ledger-account-id <value>", `Discount ledger account ID used for recognized discounts. Must be a \`contra_revenue\` account.`).option("--ar-ledger-account-id <value>", `Accounts receivable ledger account ID used for invoice posting. Must be an \`asset\` account.`).option("--cash-ledger-account-id <value>", `Cash ledger account ID used for payment settlement. Must be an \`asset\` account.`).option("--payments-clearing-ledger-account-id <value>", `Payments clearing ledger account ID used while payments settle. Must be an \`asset\` account.`).option("--output-tax-ledger-account-id <value>", `Output tax ledger account ID used for tax liability. Must be a \`liability\` account.`).option("--uncollectible-debit-ledger-account-id <value>", `Ledger account ID debited when an invoice becomes uncollectible. Must be an \`asset\` account, for doubtful-receivable reclassification, or an \`expense\` account, for direct write-off.`).option("--allowance-for-doubtful-accounts-id <value>", `Allowance for doubtful accounts ledger account ID, set on credit_note_created rules. Must be a \`contra_asset\` account.`).option("--provider-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment provider fees when a payment settles. Must be an \`expense\` account.`).option("--payment-processing-fees-expense-ledger-account-id <value>", `Expense ledger account ID debited for payment processing fees when a payment settles. Takes precedence over \`provider_fees_expense_ledger_account_id\` when set by the same or a higher priority rule. Must be an \`expense\` account.`).option("--payment-processing-fees-revenue-ledger-account-id <value>", `Payment processing fees revenue ledger account ID, set on invoice_settled rules. Must be a \`revenue\` account.`).option("--customer-credits-ledger-account-id <value>", `Customer credits ledger account ID used for credit balances. Must be a \`liability\` account.`).option("--rev-rec-method <value>", `Revenue recognition method.`).option("--rev-rec-granularity <value>", `Recognition period granularity. Used when \`rev_rec_method\` is \`over_time\`.`).option("--rev-rec-point-in-time-basis <value>", `Date revenue is recognized on. Used when \`rev_rec_method\` is \`point_in_time\`.`).option("--discount-recognition-method <value>", `Method used to recognize discounts.`).option("--journal-id <value>", `Journal ID used to route entries in the accounting provider.`).option("--entity-type <value>", `Entity type the rule applies to.`).addHelpText("after", `
39091
39112
  Examples:
39092
39113
  hyperline accounting-rules update --id <id>
39093
39114
  hyperline accounting-rules update --id <id> --name <name> --category <category>
@@ -39126,8 +39147,24 @@ Examples:
39126
39147
  args.output_tax_ledger_account_id = opts.outputTaxLedgerAccountId;
39127
39148
  if (opts.uncollectibleDebitLedgerAccountId !== void 0)
39128
39149
  args.uncollectible_debit_ledger_account_id = opts.uncollectibleDebitLedgerAccountId;
39150
+ if (opts.allowanceForDoubtfulAccountsId !== void 0)
39151
+ args.allowance_for_doubtful_accounts_id = opts.allowanceForDoubtfulAccountsId;
39152
+ if (opts.providerFeesExpenseLedgerAccountId !== void 0)
39153
+ args.provider_fees_expense_ledger_account_id = opts.providerFeesExpenseLedgerAccountId;
39154
+ if (opts.paymentProcessingFeesExpenseLedgerAccountId !== void 0)
39155
+ args.payment_processing_fees_expense_ledger_account_id = opts.paymentProcessingFeesExpenseLedgerAccountId;
39156
+ if (opts.paymentProcessingFeesRevenueLedgerAccountId !== void 0)
39157
+ args.payment_processing_fees_revenue_ledger_account_id = opts.paymentProcessingFeesRevenueLedgerAccountId;
39129
39158
  if (opts.customerCreditsLedgerAccountId !== void 0)
39130
39159
  args.customer_credits_ledger_account_id = opts.customerCreditsLedgerAccountId;
39160
+ if (opts.revRecMethod !== void 0)
39161
+ args.rev_rec_method = opts.revRecMethod;
39162
+ if (opts.revRecGranularity !== void 0)
39163
+ args.rev_rec_granularity = opts.revRecGranularity;
39164
+ if (opts.revRecPointInTimeBasis !== void 0)
39165
+ args.rev_rec_point_in_time_basis = opts.revRecPointInTimeBasis;
39166
+ if (opts.discountRecognitionMethod !== void 0)
39167
+ args.discount_recognition_method = opts.discountRecognitionMethod;
39131
39168
  if (opts.journalId !== void 0)
39132
39169
  args.journal_id = opts.journalId;
39133
39170
  if (opts.entityType !== void 0)
@@ -39146,12 +39183,22 @@ Examples:
39146
39183
  args.currencies = JSON.parse(opts.currencies);
39147
39184
  if (opts.countries !== void 0)
39148
39185
  args.countries = JSON.parse(opts.countries);
39186
+ if (opts.taxSchemes !== void 0)
39187
+ args.tax_schemes = JSON.parse(opts.taxSchemes);
39188
+ if (opts.taxTerritories !== void 0)
39189
+ args.tax_territories = JSON.parse(opts.taxTerritories);
39190
+ if (opts.taxRateClasses !== void 0)
39191
+ args.tax_rate_classes = JSON.parse(opts.taxRateClasses);
39149
39192
  if (opts.couponIds !== void 0)
39150
39193
  args.coupon_ids = JSON.parse(opts.couponIds);
39151
39194
  if (opts.clientProviderIds !== void 0)
39152
39195
  args.client_provider_ids = JSON.parse(opts.clientProviderIds);
39153
39196
  if (opts.paymentMethodTypes !== void 0)
39154
39197
  args.payment_method_types = JSON.parse(opts.paymentMethodTypes);
39198
+ if (opts.bankAccountIds !== void 0)
39199
+ args.bank_account_ids = JSON.parse(opts.bankAccountIds);
39200
+ if (opts.invoiceTypes !== void 0)
39201
+ args.invoice_types = JSON.parse(opts.invoiceTypes);
39155
39202
  if (opts.customPropertyFilters !== void 0)
39156
39203
  args.custom_property_filters = JSON.parse(opts.customPropertyFilters);
39157
39204
  await ctx.execute({
@@ -39187,7 +39234,7 @@ Examples:
39187
39234
  queryParamKeys: []
39188
39235
  });
39189
39236
  });
39190
- resource.command("resolve").description(`Preview which account codes would be resolved for a given context.`).requiredOption("--ledger-id <value>", `Identifier of the ledger this rule belongs to.`).requiredOption("--category <value>", `Rule category (e.g. accounting_software, invoice_posted).`).option("--product-id <value>", `Product ID to resolve against.`).option("--product-type <value>", `Product type to resolve against.`).option("--currency <value>", `Currency code to resolve against.`).option("--country <value>", `Country code to resolve against.`).option("--customer-id <value>", `Customer ID to resolve against.`).option("--invoice-type <value>", `Invoice kind to resolve against. Accepts \`invoice\` or \`document\`; any other invoice kind is matched as \`invoice\`.`).option("--interval-period <value>", `Billing interval period filter (month, year, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-properties <json>", `Invoice custom property values to resolve against, keyed by custom property slug. Unknown slugs and null values are ignored. Rules with custom property filters never match without them.`).addHelpText("after", `
39237
+ resource.command("resolve").description(`Preview which account codes would be resolved for a given context.`).requiredOption("--ledger-id <value>", `Identifier of the ledger this rule belongs to.`).requiredOption("--category <value>", `Rule category (e.g. accounting_software, invoice_posted).`).option("--product-id <value>", `Product ID to resolve against.`).option("--product-type <value>", `Product type to resolve against.`).option("--currency <value>", `Currency code to resolve against.`).option("--country <value>", `Country code to resolve against.`).option("--tax-scheme <value>", `Tax scheme to resolve against.`).option("--tax-territory <value>", `Tax territory country code to resolve against.`).option("--tax-rate-class <value>", `Tax rate class to resolve against.`).option("--customer-id <value>", `Customer ID to resolve against.`).option("--coupon-id <value>", `Coupon ID to resolve against.`).option("--client-provider-id <value>", `Client provider ID to resolve against.`).option("--payment-method-type <value>", `Payment method type to resolve against.`).option("--bank-account-id <value>", `Bank account ID to resolve against.`).option("--invoice-type <value>", `Invoice kind to resolve against. Accepts \`invoice\` or \`document\`; any other invoice kind is matched as \`invoice\`.`).option("--interval-period <value>", `Billing interval period filter (months, years, etc.).`).option("--interval-count <number>", `Billing interval count filter.`).option("--custom-properties <json>", `Invoice custom property values to resolve against, keyed by custom property slug. Unknown slugs and null values are ignored. Rules with custom property filters never match without them.`).addHelpText("after", `
39191
39238
  Examples:
39192
39239
  hyperline accounting-rules resolve --ledger-id <ledger_id> --category <category>
39193
39240
  hyperline accounting-rules resolve --ledger-id <ledger_id> --category <category> --product-id <product_id> --product-type <product_type>
@@ -39210,8 +39257,22 @@ Examples:
39210
39257
  args.currency = opts.currency;
39211
39258
  if (opts.country !== void 0)
39212
39259
  args.country = opts.country;
39260
+ if (opts.taxScheme !== void 0)
39261
+ args.tax_scheme = opts.taxScheme;
39262
+ if (opts.taxTerritory !== void 0)
39263
+ args.tax_territory = opts.taxTerritory;
39264
+ if (opts.taxRateClass !== void 0)
39265
+ args.tax_rate_class = opts.taxRateClass;
39213
39266
  if (opts.customerId !== void 0)
39214
39267
  args.customer_id = opts.customerId;
39268
+ if (opts.couponId !== void 0)
39269
+ args.coupon_id = opts.couponId;
39270
+ if (opts.clientProviderId !== void 0)
39271
+ args.client_provider_id = opts.clientProviderId;
39272
+ if (opts.paymentMethodType !== void 0)
39273
+ args.payment_method_type = opts.paymentMethodType;
39274
+ if (opts.bankAccountId !== void 0)
39275
+ args.bank_account_id = opts.bankAccountId;
39215
39276
  if (opts.invoiceType !== void 0)
39216
39277
  args.invoice_type = opts.invoiceType;
39217
39278
  if (opts.intervalPeriod !== void 0)
@@ -39524,7 +39585,7 @@ Examples:
39524
39585
 
39525
39586
  // build/commands/generated/ai-billing.js
39526
39587
  function registerAi_BillingCommands(parent) {
39527
- const resource = parent.command("ai-billing").description("Manage ai billing");
39588
+ const resource = parent.command("ai-billing").description("Manage ai > billing");
39528
39589
  resource.command("list-agent-plans").description(`List AI agent billing plans: workspace-level offers carrying a billing mode (wallet/credits/windows), rate card, allowance windows, markups and per-seat credit grants. Filter by mode; paginated with take/skip.`).option("--mode <value>", `Billing mode.
39529
39590
 
39530
39591
  - wallet: Charges a monetary wallet.
@@ -39547,7 +39608,7 @@ Examples:
39547
39608
  args.skip = Number(opts.skip);
39548
39609
  await ctx.execute({
39549
39610
  method: "GET",
39550
- path: "/v1/ai-billing/plans",
39611
+ path: "/v1/ai/billing/plans",
39551
39612
  args,
39552
39613
  queryParamKeys: ["mode", "take", "skip"]
39553
39614
  });
@@ -39598,39 +39659,32 @@ Examples:
39598
39659
  args.windows = JSON.parse(opts.windows);
39599
39660
  await ctx.execute({
39600
39661
  method: "POST",
39601
- path: "/v1/ai-billing/plans",
39662
+ path: "/v1/ai/billing/plans",
39602
39663
  args,
39603
39664
  queryParamKeys: []
39604
39665
  });
39605
39666
  });
39606
- resource.command("get-agent-plan").description(`Get one AI agent billing plan by id, with its embedded rate card, window definitions, markups, per-seat grants and minted catalog object ids.`).requiredOption("--plan-id <value>", `plan_id parameter`).addHelpText("after", `
39667
+ resource.command("get-agent-default-plan").description(`Get the workspace's default AI agent billing plan marker (plan id and auto_apply flag). 404 when none is set.`).addHelpText("after", `
39607
39668
  Examples:
39608
- hyperline ai-billing get-agent-plan --plan-id <plan_id>`).action(async (opts) => {
39669
+ hyperline ai-billing get-agent-default-plan`).action(async (_opts) => {
39609
39670
  const ctx = resource.parent?.opts()._ctx;
39610
39671
  if (!ctx) {
39611
39672
  process.stderr.write("Error: Not authenticated\n");
39612
39673
  process.exit(1);
39613
39674
  }
39614
39675
  const args = {};
39615
- if (opts.planId !== void 0)
39616
- args.plan_id = opts.planId;
39617
39676
  await ctx.execute({
39618
39677
  method: "GET",
39619
- path: "/v1/ai-billing/plans/{plan_id}",
39678
+ path: "/v1/ai/billing/plans/default",
39620
39679
  args,
39621
39680
  queryParamKeys: []
39622
39681
  });
39623
39682
  });
39624
- resource.command("replace-agent-plan").description(`Replace an AI agent billing plan (whole-row semantics). Changes take effect on the next call for every customer on the plan; mode is immutable. Overage is priced by overage_markup_percent or by overage_rate_card_id, never both.`).requiredOption("--plan-id <value>", `plan_id parameter`).requiredOption("--name <value>", `Human-readable resource name.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--overage-mode <value>", `Behavior when credits or an allowance are exhausted. Policy values may inherit the attached plan.
39625
-
39626
- - refuse: Rejects the call that crosses the boundary without deducting usage.
39627
- - metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--windows <json>", `Rolling allowances. Required for windows plans; each window meters every call. A plan replacement replaces the entire array.`).option("--per-seat-credits <value>", `Credits granted per seat per billing period. Null grants no credits.`).option("--grant-rollover-enabled", `Whether granted credits survive renewal. Purchased credits always roll over.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
39628
-
39629
- - calendar_month: Settles at the end of each UTC calendar month.`).addHelpText("after", `
39683
+ resource.command("set-agent-default-plan").description(`Mark one plan as the workspace's default AI agent billing plan (body: plan_id, optional auto_apply). Replaces the previous marker; 404 when the plan is not this workspace's.`).requiredOption("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).option("--auto-apply", `Whether eligible newly ingested customers receive the default plan automatically.`).addHelpText("after", `
39630
39684
  Examples:
39631
- hyperline ai-billing replace-agent-plan --plan-id <plan_id> --name <name>
39632
- hyperline ai-billing replace-agent-plan --plan-id <plan_id> --name <name> --rate-card-id <rate_card_id> --overage-mode <overage_mode>
39633
- hyperline ai-billing replace-agent-plan --plan-id <plan_id> --name <name> --output json`).action(async (opts) => {
39685
+ hyperline ai-billing set-agent-default-plan --plan-id <plan_id>
39686
+ hyperline ai-billing set-agent-default-plan --plan-id <plan_id> --auto-apply
39687
+ hyperline ai-billing set-agent-default-plan --plan-id <plan_id> --output json`).action(async (opts) => {
39634
39688
  const ctx = resource.parent?.opts()._ctx;
39635
39689
  if (!ctx) {
39636
39690
  process.stderr.write("Error: Not authenticated\n");
@@ -39639,47 +39693,25 @@ Examples:
39639
39693
  const args = {};
39640
39694
  if (opts.planId !== void 0)
39641
39695
  args.plan_id = opts.planId;
39642
- if (opts.name !== void 0)
39643
- args.name = opts.name;
39644
- if (opts.rateCardId !== void 0)
39645
- args.rate_card_id = opts.rateCardId;
39646
- if (opts.overageMode !== void 0)
39647
- args.overage_mode = opts.overageMode;
39648
- if (opts.markupPercent !== void 0)
39649
- args.markup_percent = opts.markupPercent;
39650
- if (opts.overageMarkupPercent !== void 0)
39651
- args.overage_markup_percent = opts.overageMarkupPercent;
39652
- if (opts.overageRateCardId !== void 0)
39653
- args.overage_rate_card_id = opts.overageRateCardId;
39654
- if (opts.perSeatCredits !== void 0)
39655
- args.per_seat_credits = opts.perSeatCredits;
39656
- if (opts.settlementSchedule !== void 0)
39657
- args.settlement_schedule = opts.settlementSchedule;
39658
- if (opts.settlementIntervalMinutes !== void 0)
39659
- args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
39660
- if (opts.grantRolloverEnabled !== void 0)
39661
- args.grant_rollover_enabled = true;
39662
- if (opts.windows !== void 0)
39663
- args.windows = JSON.parse(opts.windows);
39696
+ if (opts.autoApply !== void 0)
39697
+ args.auto_apply = true;
39664
39698
  await ctx.execute({
39665
39699
  method: "PUT",
39666
- path: "/v1/ai-billing/plans/{plan_id}",
39700
+ path: "/v1/ai/billing/plans/default",
39667
39701
  args,
39668
39702
  queryParamKeys: []
39669
39703
  });
39670
39704
  });
39671
- resource.command("delete-agent-plan").description(`Delete an AI agent billing plan. Refused (409, plan_in_use) while any customer is still attached to it.`).requiredOption("--plan-id <value>", `plan_id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39705
+ resource.command("clear-agent-default-plan").description(`Clear the workspace's default AI agent billing plan marker. The plan itself is untouched. 404 when none is set.`).option("--yes", "Skip confirmation").addHelpText("after", `
39672
39706
  Examples:
39673
- hyperline ai-billing delete-agent-plan --plan-id <plan_id>
39674
- hyperline ai-billing delete-agent-plan --plan-id <plan_id> --output json`).action(async (opts) => {
39707
+ hyperline ai-billing clear-agent-default-plan
39708
+ hyperline ai-billing clear-agent-default-plan --output json`).action(async (opts) => {
39675
39709
  const ctx = resource.parent?.opts()._ctx;
39676
39710
  if (!ctx) {
39677
39711
  process.stderr.write("Error: Not authenticated\n");
39678
39712
  process.exit(1);
39679
39713
  }
39680
39714
  const args = {};
39681
- if (opts.planId !== void 0)
39682
- args.plan_id = opts.planId;
39683
39715
  if (!opts.yes) {
39684
39716
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39685
39717
  if (!confirmed) {
@@ -39689,59 +39721,88 @@ Examples:
39689
39721
  }
39690
39722
  await ctx.execute({
39691
39723
  method: "DELETE",
39692
- path: "/v1/ai-billing/plans/{plan_id}",
39724
+ path: "/v1/ai/billing/plans/default",
39693
39725
  args,
39694
39726
  queryParamKeys: []
39695
39727
  });
39696
39728
  });
39697
- resource.command("get-agent-default-plan").description(`Get the workspace's default AI agent billing plan marker (plan id and auto_apply flag). 404 when none is set.`).addHelpText("after", `
39729
+ resource.command("get-agent-plan").description(`Get one AI agent billing plan by id, with its embedded rate card, window definitions, markups, per-seat grants and minted catalog object ids.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
39698
39730
  Examples:
39699
- hyperline ai-billing get-agent-default-plan`).action(async (_opts) => {
39731
+ hyperline ai-billing get-agent-plan --id <id>`).action(async (opts) => {
39700
39732
  const ctx = resource.parent?.opts()._ctx;
39701
39733
  if (!ctx) {
39702
39734
  process.stderr.write("Error: Not authenticated\n");
39703
39735
  process.exit(1);
39704
39736
  }
39705
39737
  const args = {};
39738
+ if (opts.id !== void 0)
39739
+ args.id = opts.id;
39706
39740
  await ctx.execute({
39707
39741
  method: "GET",
39708
- path: "/v1/ai-billing/default-plan",
39742
+ path: "/v1/ai/billing/plans/{id}",
39709
39743
  args,
39710
39744
  queryParamKeys: []
39711
39745
  });
39712
39746
  });
39713
- resource.command("set-agent-default-plan").description(`Mark one plan as the workspace's default AI agent billing plan (body: plan_id, optional auto_apply). Replaces the previous marker; 404 when the plan is not this workspace's.`).requiredOption("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).option("--auto-apply", `Whether eligible newly ingested customers receive the default plan automatically.`).addHelpText("after", `
39747
+ resource.command("replace-agent-plan").description(`Replace an AI agent billing plan (whole-row semantics). Changes take effect on the next call for every customer on the plan; mode is immutable. Overage is priced by overage_markup_percent or by overage_rate_card_id, never both.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Human-readable resource name.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--overage-mode <value>", `Behavior when credits or an allowance are exhausted. Policy values may inherit the attached plan.
39748
+
39749
+ - refuse: Rejects the call that crosses the boundary without deducting usage.
39750
+ - metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--windows <json>", `Rolling allowances. Required for windows plans; each window meters every call. A plan replacement replaces the entire array.`).option("--per-seat-credits <value>", `Credits granted per seat per billing period. Null grants no credits.`).option("--grant-rollover-enabled", `Whether granted credits survive renewal. Purchased credits always roll over.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
39751
+
39752
+ - calendar_month: Settles at the end of each UTC calendar month.`).addHelpText("after", `
39714
39753
  Examples:
39715
- hyperline ai-billing set-agent-default-plan --plan-id <plan_id>
39716
- hyperline ai-billing set-agent-default-plan --plan-id <plan_id> --auto-apply
39717
- hyperline ai-billing set-agent-default-plan --plan-id <plan_id> --output json`).action(async (opts) => {
39754
+ hyperline ai-billing replace-agent-plan --id <id> --name <name>
39755
+ hyperline ai-billing replace-agent-plan --id <id> --name <name> --rate-card-id <rate_card_id> --overage-mode <overage_mode>
39756
+ hyperline ai-billing replace-agent-plan --id <id> --name <name> --output json`).action(async (opts) => {
39718
39757
  const ctx = resource.parent?.opts()._ctx;
39719
39758
  if (!ctx) {
39720
39759
  process.stderr.write("Error: Not authenticated\n");
39721
39760
  process.exit(1);
39722
39761
  }
39723
39762
  const args = {};
39724
- if (opts.planId !== void 0)
39725
- args.plan_id = opts.planId;
39726
- if (opts.autoApply !== void 0)
39727
- args.auto_apply = true;
39763
+ if (opts.id !== void 0)
39764
+ args.id = opts.id;
39765
+ if (opts.name !== void 0)
39766
+ args.name = opts.name;
39767
+ if (opts.rateCardId !== void 0)
39768
+ args.rate_card_id = opts.rateCardId;
39769
+ if (opts.overageMode !== void 0)
39770
+ args.overage_mode = opts.overageMode;
39771
+ if (opts.markupPercent !== void 0)
39772
+ args.markup_percent = opts.markupPercent;
39773
+ if (opts.overageMarkupPercent !== void 0)
39774
+ args.overage_markup_percent = opts.overageMarkupPercent;
39775
+ if (opts.overageRateCardId !== void 0)
39776
+ args.overage_rate_card_id = opts.overageRateCardId;
39777
+ if (opts.perSeatCredits !== void 0)
39778
+ args.per_seat_credits = opts.perSeatCredits;
39779
+ if (opts.settlementSchedule !== void 0)
39780
+ args.settlement_schedule = opts.settlementSchedule;
39781
+ if (opts.settlementIntervalMinutes !== void 0)
39782
+ args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
39783
+ if (opts.grantRolloverEnabled !== void 0)
39784
+ args.grant_rollover_enabled = true;
39785
+ if (opts.windows !== void 0)
39786
+ args.windows = JSON.parse(opts.windows);
39728
39787
  await ctx.execute({
39729
39788
  method: "PUT",
39730
- path: "/v1/ai-billing/default-plan",
39789
+ path: "/v1/ai/billing/plans/{id}",
39731
39790
  args,
39732
39791
  queryParamKeys: []
39733
39792
  });
39734
39793
  });
39735
- resource.command("clear-agent-default-plan").description(`Clear the workspace's default AI agent billing plan marker. The plan itself is untouched. 404 when none is set.`).option("--yes", "Skip confirmation").addHelpText("after", `
39794
+ resource.command("delete-agent-plan").description(`Delete an AI agent billing plan. Refused (409, plan_in_use) while any customer is still attached to it.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39736
39795
  Examples:
39737
- hyperline ai-billing clear-agent-default-plan
39738
- hyperline ai-billing clear-agent-default-plan --output json`).action(async (opts) => {
39796
+ hyperline ai-billing delete-agent-plan --id <id>
39797
+ hyperline ai-billing delete-agent-plan --id <id> --output json`).action(async (opts) => {
39739
39798
  const ctx = resource.parent?.opts()._ctx;
39740
39799
  if (!ctx) {
39741
39800
  process.stderr.write("Error: Not authenticated\n");
39742
39801
  process.exit(1);
39743
39802
  }
39744
39803
  const args = {};
39804
+ if (opts.id !== void 0)
39805
+ args.id = opts.id;
39745
39806
  if (!opts.yes) {
39746
39807
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39747
39808
  if (!confirmed) {
@@ -39751,7 +39812,7 @@ Examples:
39751
39812
  }
39752
39813
  await ctx.execute({
39753
39814
  method: "DELETE",
39754
- path: "/v1/ai-billing/default-plan",
39815
+ path: "/v1/ai/billing/plans/{id}",
39755
39816
  args,
39756
39817
  queryParamKeys: []
39757
39818
  });
@@ -39782,7 +39843,7 @@ Examples:
39782
39843
  args.skip = Number(opts.skip);
39783
39844
  await ctx.execute({
39784
39845
  method: "GET",
39785
- path: "/v1/ai-billing/rate-cards",
39846
+ path: "/v1/ai/billing/rate-cards",
39786
39847
  args,
39787
39848
  queryParamKeys: ["denomination", "currency", "search", "take", "skip"]
39788
39849
  });
@@ -39814,42 +39875,42 @@ Examples:
39814
39875
  args.rows = JSON.parse(opts.rows);
39815
39876
  await ctx.execute({
39816
39877
  method: "POST",
39817
- path: "/v1/ai-billing/rate-cards",
39878
+ path: "/v1/ai/billing/rate-cards",
39818
39879
  args,
39819
39880
  queryParamKeys: []
39820
39881
  });
39821
39882
  });
39822
- resource.command("get-agent-rate-card").description(`Get one AI rate card by id with all its pricing rows and usage counts (plans, policies, credit product).`).requiredOption("--rate-card-id <value>", `rate_card_id parameter`).addHelpText("after", `
39883
+ resource.command("get-agent-rate-card").description(`Get one AI rate card by id with all its pricing rows and usage counts (plans, policies, credit product).`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
39823
39884
  Examples:
39824
- hyperline ai-billing get-agent-rate-card --rate-card-id <rate_card_id>`).action(async (opts) => {
39885
+ hyperline ai-billing get-agent-rate-card --id <id>`).action(async (opts) => {
39825
39886
  const ctx = resource.parent?.opts()._ctx;
39826
39887
  if (!ctx) {
39827
39888
  process.stderr.write("Error: Not authenticated\n");
39828
39889
  process.exit(1);
39829
39890
  }
39830
39891
  const args = {};
39831
- if (opts.rateCardId !== void 0)
39832
- args.rate_card_id = opts.rateCardId;
39892
+ if (opts.id !== void 0)
39893
+ args.id = opts.id;
39833
39894
  await ctx.execute({
39834
39895
  method: "GET",
39835
- path: "/v1/ai-billing/rate-cards/{rate_card_id}",
39896
+ path: "/v1/ai/billing/rate-cards/{id}",
39836
39897
  args,
39837
39898
  queryParamKeys: []
39838
39899
  });
39839
39900
  });
39840
- resource.command("replace-agent-rate-card").description(`Replace an AI rate card's rows, name, description and USD fallback (whole-card semantics). Denomination and currency are immutable.`).requiredOption("--rate-card-id <value>", `rate_card_id parameter`).requiredOption("--name <value>", `Human-readable resource name.`).option("--fallback-per-usd <value>", `Credits, allowance units, or major currency units per USD of provider cost. Null leaves unmatched usage unpriced.`).requiredOption("--rows <json>", `All pricing rows on the card; replacement replaces the complete list.`).addHelpText("after", `
39901
+ resource.command("replace-agent-rate-card").description(`Replace an AI rate card's rows, name and USD fallback (whole-card semantics). Denomination and currency are immutable.`).requiredOption("--id <value>", `id parameter`).requiredOption("--name <value>", `Human-readable resource name.`).option("--fallback-per-usd <value>", `Credits, allowance units, or major currency units per USD of provider cost. Null leaves unmatched usage unpriced.`).requiredOption("--rows <json>", `All pricing rows on the card; replacement replaces the complete list.`).addHelpText("after", `
39841
39902
  Examples:
39842
- hyperline ai-billing replace-agent-rate-card --rate-card-id <rate_card_id> --name <name> --rows <rows>
39843
- hyperline ai-billing replace-agent-rate-card --rate-card-id <rate_card_id> --name <name> --rows <rows> --fallback-per-usd <fallback_per_usd>
39844
- hyperline ai-billing replace-agent-rate-card --rate-card-id <rate_card_id> --name <name> --rows <rows> --output json`).action(async (opts) => {
39903
+ hyperline ai-billing replace-agent-rate-card --id <id> --name <name> --rows <rows>
39904
+ hyperline ai-billing replace-agent-rate-card --id <id> --name <name> --rows <rows> --fallback-per-usd <fallback_per_usd>
39905
+ hyperline ai-billing replace-agent-rate-card --id <id> --name <name> --rows <rows> --output json`).action(async (opts) => {
39845
39906
  const ctx = resource.parent?.opts()._ctx;
39846
39907
  if (!ctx) {
39847
39908
  process.stderr.write("Error: Not authenticated\n");
39848
39909
  process.exit(1);
39849
39910
  }
39850
39911
  const args = {};
39851
- if (opts.rateCardId !== void 0)
39852
- args.rate_card_id = opts.rateCardId;
39912
+ if (opts.id !== void 0)
39913
+ args.id = opts.id;
39853
39914
  if (opts.name !== void 0)
39854
39915
  args.name = opts.name;
39855
39916
  if (opts.fallbackPerUsd !== void 0)
@@ -39858,23 +39919,23 @@ Examples:
39858
39919
  args.rows = JSON.parse(opts.rows);
39859
39920
  await ctx.execute({
39860
39921
  method: "PUT",
39861
- path: "/v1/ai-billing/rate-cards/{rate_card_id}",
39922
+ path: "/v1/ai/billing/rate-cards/{id}",
39862
39923
  args,
39863
39924
  queryParamKeys: []
39864
39925
  });
39865
39926
  });
39866
- resource.command("delete-agent-rate-card").description(`Delete an AI rate card. Refused (409, rate_card_in_use) while any plan, credit product or customer policy still uses it.`).requiredOption("--rate-card-id <value>", `rate_card_id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39927
+ resource.command("delete-agent-rate-card").description(`Delete an AI rate card. Refused (409, rate_card_in_use) while any plan, credit product or customer policy still uses it.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39867
39928
  Examples:
39868
- hyperline ai-billing delete-agent-rate-card --rate-card-id <rate_card_id>
39869
- hyperline ai-billing delete-agent-rate-card --rate-card-id <rate_card_id> --output json`).action(async (opts) => {
39929
+ hyperline ai-billing delete-agent-rate-card --id <id>
39930
+ hyperline ai-billing delete-agent-rate-card --id <id> --output json`).action(async (opts) => {
39870
39931
  const ctx = resource.parent?.opts()._ctx;
39871
39932
  if (!ctx) {
39872
39933
  process.stderr.write("Error: Not authenticated\n");
39873
39934
  process.exit(1);
39874
39935
  }
39875
39936
  const args = {};
39876
- if (opts.rateCardId !== void 0)
39877
- args.rate_card_id = opts.rateCardId;
39937
+ if (opts.id !== void 0)
39938
+ args.id = opts.id;
39878
39939
  if (!opts.yes) {
39879
39940
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39880
39941
  if (!confirmed) {
@@ -39884,81 +39945,123 @@ Examples:
39884
39945
  }
39885
39946
  await ctx.execute({
39886
39947
  method: "DELETE",
39887
- path: "/v1/ai-billing/rate-cards/{rate_card_id}",
39948
+ path: "/v1/ai/billing/rate-cards/{id}",
39888
39949
  args,
39889
39950
  queryParamKeys: []
39890
39951
  });
39891
39952
  });
39892
- resource.command("list-agent-credit-products").description(`List the credit products AI agent usage can draw down, with their purchasable packs and default rate cards. Customer pot balances live on the customer credits endpoints.`).addHelpText("after", `
39953
+ resource.command("list-agent-customer-policies").description(`List all AI billing policies (scopes) for one customer: the default shared pool plus per-agent overrides. Accepts Hyperline or external customer ids.`).requiredOption("--id <value>", `id parameter`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
39893
39954
  Examples:
39894
- hyperline ai-billing list-agent-credit-products`).action(async (_opts) => {
39955
+ hyperline ai-billing list-agent-customer-policies --id <id>
39956
+ hyperline ai-billing list-agent-customer-policies --id <id> --take <take>`).action(async (opts) => {
39895
39957
  const ctx = resource.parent?.opts()._ctx;
39896
39958
  if (!ctx) {
39897
39959
  process.stderr.write("Error: Not authenticated\n");
39898
39960
  process.exit(1);
39899
39961
  }
39900
39962
  const args = {};
39963
+ if (opts.id !== void 0)
39964
+ args.id = opts.id;
39965
+ if (opts.take !== void 0)
39966
+ args.take = Number(opts.take);
39967
+ if (opts.skip !== void 0)
39968
+ args.skip = Number(opts.skip);
39901
39969
  await ctx.execute({
39902
39970
  method: "GET",
39903
- path: "/v1/ai-billing/credit-products",
39971
+ path: "/v1/ai/billing/customers/{id}/policies",
39904
39972
  args,
39905
- queryParamKeys: []
39973
+ queryParamKeys: ["take", "skip"]
39906
39974
  });
39907
39975
  });
39908
- resource.command("list-agent-cost-catalog").description(`List the AI cost catalog: registry model prices merged with this workspace's negotiated overrides, its own custom cost items (source custom), and the unpriced pairs its telemetry has carried (source unlisted). Rates are USD decimal strings. Pass enabled_only=true for just the enabled catalog.`).option("--enabled-only <value>", `enabled_only`).addHelpText("after", `
39976
+ resource.command("get-default-customer-billing-policy").description(`Get the exact customer billing policy addressed by this resource; agent policies never fall back to the shared pool.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
39909
39977
  Examples:
39910
- hyperline ai-billing list-agent-cost-catalog
39911
- hyperline ai-billing list-agent-cost-catalog --enabled-only <enabled_only>`).action(async (opts) => {
39978
+ hyperline ai-billing get-default-customer-billing-policy --id <id>`).action(async (opts) => {
39912
39979
  const ctx = resource.parent?.opts()._ctx;
39913
39980
  if (!ctx) {
39914
39981
  process.stderr.write("Error: Not authenticated\n");
39915
39982
  process.exit(1);
39916
39983
  }
39917
39984
  const args = {};
39918
- if (opts.enabledOnly !== void 0)
39919
- args.enabled_only = opts.enabledOnly;
39985
+ if (opts.id !== void 0)
39986
+ args.id = opts.id;
39920
39987
  await ctx.execute({
39921
39988
  method: "GET",
39922
- path: "/v1/ai-billing/cost-catalog",
39989
+ path: "/v1/ai/billing/customers/{id}/policies/default",
39923
39990
  args,
39924
- queryParamKeys: ["enabled_only"]
39991
+ queryParamKeys: []
39925
39992
  });
39926
39993
  });
39927
- resource.command("create-agent-cost-catalog-item").description(`Create a custom AI cost item so a non-LLM vendor call is priced instead of landing unpriced at $0. provider/item must match hyperline.cost({ vendor, item }) verbatim and each dimensions[].key must match the unit the SDK sends. Re-creating an existing open item returns it unchanged (200); a pair the global registry already prices is refused \u2014 use the overrides endpoint for that.`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--item <value>", `Custom item name matching the usage payload.`).requiredOption("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
39994
+ resource.command("upsert-default-customer-billing-policy").description(`Replace customer billing settings while preserving omitted plan_id and rate_card_id references; null detaches them, and a shared policy enables automatic telemetry billing.`).requiredOption("--id <value>", `id parameter`).requiredOption("--mode <value>", `Billing mode.
39995
+
39996
+ - wallet: Charges a monetary wallet.
39997
+ - credits: Consumes a credit balance.
39998
+ - windows: Meters weighted units against rolling allowances.`).option("--wallet-id <value>", `Customer wallet identifier. Omit on wallet policy writes to provision or reuse the customer's wallet.`).option("--credit-product-id <value>", `Public credit product identifier whose balance this policy consumes.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-mode <value>", `Behavior when credits or an allowance are exhausted. Policy values may inherit the attached plan.
39999
+
40000
+ - refuse: Rejects the call that crosses the boundary without deducting usage.
40001
+ - metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--overage-wallet-id <value>", `Wallet charged for overage. Null bills overage in arrears.`).option("--floor <value>", `Minimum available balance a spend check requires, in the policy's denomination.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
40002
+
40003
+ - calendar_month: Settles at the end of each UTC calendar month.`).option("--windows <json>", `Rolling allowances. Required for windows plans; each window meters every call. A plan replacement replaces the entire array.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).requiredOption("--blocked", `Whether spending is disabled for this billing scope.`).addHelpText("after", `
39928
40004
  Examples:
39929
- hyperline ai-billing create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions>
39930
- hyperline ai-billing create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions> --output json`).action(async (opts) => {
40005
+ hyperline ai-billing upsert-default-customer-billing-policy --id <id> --mode <mode> --blocked
40006
+ hyperline ai-billing upsert-default-customer-billing-policy --id <id> --mode <mode> --blocked --wallet-id <wallet_id> --credit-product-id <credit_product_id>
40007
+ hyperline ai-billing upsert-default-customer-billing-policy --id <id> --mode <mode> --blocked --output json`).action(async (opts) => {
39931
40008
  const ctx = resource.parent?.opts()._ctx;
39932
40009
  if (!ctx) {
39933
40010
  process.stderr.write("Error: Not authenticated\n");
39934
40011
  process.exit(1);
39935
40012
  }
39936
40013
  const args = {};
39937
- if (opts.provider !== void 0)
39938
- args.provider = opts.provider;
39939
- if (opts.item !== void 0)
39940
- args.item = opts.item;
39941
- if (opts.dimensions !== void 0)
39942
- args.dimensions = JSON.parse(opts.dimensions);
40014
+ if (opts.id !== void 0)
40015
+ args.id = opts.id;
40016
+ if (opts.mode !== void 0)
40017
+ args.mode = opts.mode;
40018
+ if (opts.walletId !== void 0)
40019
+ args.wallet_id = opts.walletId;
40020
+ if (opts.creditProductId !== void 0)
40021
+ args.credit_product_id = opts.creditProductId;
40022
+ if (opts.markupPercent !== void 0)
40023
+ args.markup_percent = opts.markupPercent;
40024
+ if (opts.overageMode !== void 0)
40025
+ args.overage_mode = opts.overageMode;
40026
+ if (opts.overageMarkupPercent !== void 0)
40027
+ args.overage_markup_percent = opts.overageMarkupPercent;
40028
+ if (opts.overageRateCardId !== void 0)
40029
+ args.overage_rate_card_id = opts.overageRateCardId;
40030
+ if (opts.overageWalletId !== void 0)
40031
+ args.overage_wallet_id = opts.overageWalletId;
40032
+ if (opts.floor !== void 0)
40033
+ args.floor = opts.floor;
40034
+ if (opts.settlementSchedule !== void 0)
40035
+ args.settlement_schedule = opts.settlementSchedule;
40036
+ if (opts.rateCardId !== void 0)
40037
+ args.rate_card_id = opts.rateCardId;
40038
+ if (opts.planId !== void 0)
40039
+ args.plan_id = opts.planId;
40040
+ if (opts.settlementIntervalMinutes !== void 0)
40041
+ args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
40042
+ if (opts.blocked !== void 0)
40043
+ args.blocked = true;
40044
+ if (opts.windows !== void 0)
40045
+ args.windows = JSON.parse(opts.windows);
39943
40046
  await ctx.execute({
39944
- method: "POST",
39945
- path: "/v1/ai-billing/cost-catalog/items",
40047
+ method: "PUT",
40048
+ path: "/v1/ai/billing/customers/{id}/policies/default",
39946
40049
  args,
39947
40050
  queryParamKeys: []
39948
40051
  });
39949
40052
  });
39950
- resource.command("delete-agent-cost-catalog-item").description(`Close a custom AI cost item by its custom_item_id. History is kept; new calls on that pair go back to unpriced. An override id passed here is a 404.`).requiredOption("--item-id <value>", `item_id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40053
+ resource.command("delete-default-customer-billing-policy").description(`Delete one customer's AI billing policy scope. Refused (409) while it owes unsettled consumption or while agent overrides still depend on it.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
39951
40054
  Examples:
39952
- hyperline ai-billing delete-agent-cost-catalog-item --item-id <item_id>
39953
- hyperline ai-billing delete-agent-cost-catalog-item --item-id <item_id> --output json`).action(async (opts) => {
40055
+ hyperline ai-billing delete-default-customer-billing-policy --id <id>
40056
+ hyperline ai-billing delete-default-customer-billing-policy --id <id> --output json`).action(async (opts) => {
39954
40057
  const ctx = resource.parent?.opts()._ctx;
39955
40058
  if (!ctx) {
39956
40059
  process.stderr.write("Error: Not authenticated\n");
39957
40060
  process.exit(1);
39958
40061
  }
39959
40062
  const args = {};
39960
- if (opts.itemId !== void 0)
39961
- args.item_id = opts.itemId;
40063
+ if (opts.id !== void 0)
40064
+ args.id = opts.id;
39962
40065
  if (!opts.yes) {
39963
40066
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
39964
40067
  if (!confirmed) {
@@ -39968,55 +40071,106 @@ Examples:
39968
40071
  }
39969
40072
  await ctx.execute({
39970
40073
  method: "DELETE",
39971
- path: "/v1/ai-billing/cost-catalog/items/{item_id}",
40074
+ path: "/v1/ai/billing/customers/{id}/policies/default",
39972
40075
  args,
39973
40076
  queryParamKeys: []
39974
40077
  });
39975
40078
  });
39976
- resource.command("upsert-agent-cost-catalog-override").description(`Set this workspace's negotiated price for a registry AI model (input/output/cached/cache-write USD per 1M tokens, plus optional dimensions). Replaces any open override immediately; historical calls keep their original rate. A pair the registry does not know is refused \u2014 create a custom cost item instead.`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--model <value>", `Model identifier, or custom item identifier. Null on wildcard pricing rows.`).requiredOption("--input-per-m-tokens <value>", `Provider cost in USD per million input tokens, as an exact decimal string.`).requiredOption("--output-per-m-tokens <value>", `Provider cost in USD per million output tokens, as an exact decimal string.`).option("--cached-input-per-m-tokens <value>", `Provider cost in USD per million cached input tokens, as an exact decimal string.`).option("--cache-write-per-m-tokens <value>", `Provider cost in USD per million cache write tokens, as an exact decimal string.`).option("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
40079
+ resource.command("get-agent-customer-billing-policy").description(`Get the exact customer billing policy addressed by this resource; agent policies never fall back to the shared pool.`).requiredOption("--id <value>", `id parameter`).requiredOption("--agent-slug <value>", `agent_slug parameter`).addHelpText("after", `
39977
40080
  Examples:
39978
- hyperline ai-billing upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens>
39979
- hyperline ai-billing upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens> --cached-input-per-m-tokens <cached_input_per_m_tokens> --cache-write-per-m-tokens <cache_write_per_m_tokens>
39980
- hyperline ai-billing upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens> --output json`).action(async (opts) => {
40081
+ hyperline ai-billing get-agent-customer-billing-policy --id <id> --agent-slug <agent_slug>`).action(async (opts) => {
39981
40082
  const ctx = resource.parent?.opts()._ctx;
39982
40083
  if (!ctx) {
39983
40084
  process.stderr.write("Error: Not authenticated\n");
39984
40085
  process.exit(1);
39985
40086
  }
39986
40087
  const args = {};
39987
- if (opts.provider !== void 0)
39988
- args.provider = opts.provider;
39989
- if (opts.model !== void 0)
39990
- args.model = opts.model;
39991
- if (opts.inputPerMTokens !== void 0)
39992
- args.input_per_m_tokens = opts.inputPerMTokens;
39993
- if (opts.outputPerMTokens !== void 0)
39994
- args.output_per_m_tokens = opts.outputPerMTokens;
39995
- if (opts.cachedInputPerMTokens !== void 0)
39996
- args.cached_input_per_m_tokens = opts.cachedInputPerMTokens;
39997
- if (opts.cacheWritePerMTokens !== void 0)
39998
- args.cache_write_per_m_tokens = opts.cacheWritePerMTokens;
39999
- if (opts.dimensions !== void 0)
40000
- args.dimensions = JSON.parse(opts.dimensions);
40088
+ if (opts.id !== void 0)
40089
+ args.id = opts.id;
40090
+ if (opts.agentSlug !== void 0)
40091
+ args.agent_slug = opts.agentSlug;
40092
+ await ctx.execute({
40093
+ method: "GET",
40094
+ path: "/v1/ai/billing/customers/{id}/policies/agents/{agent_slug}",
40095
+ args,
40096
+ queryParamKeys: []
40097
+ });
40098
+ });
40099
+ resource.command("upsert-agent-customer-billing-policy").description(`Replace customer billing settings while preserving omitted plan_id and rate_card_id references; null detaches them, and a shared policy enables automatic telemetry billing.`).requiredOption("--id <value>", `id parameter`).requiredOption("--agent-slug <value>", `agent_slug parameter`).requiredOption("--mode <value>", `Billing mode.
40100
+
40101
+ - wallet: Charges a monetary wallet.
40102
+ - credits: Consumes a credit balance.
40103
+ - windows: Meters weighted units against rolling allowances.`).option("--wallet-id <value>", `Customer wallet identifier. Omit on wallet policy writes to provision or reuse the customer's wallet.`).option("--credit-product-id <value>", `Public credit product identifier whose balance this policy consumes.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-mode <value>", `Behavior when credits or an allowance are exhausted. Policy values may inherit the attached plan.
40104
+
40105
+ - refuse: Rejects the call that crosses the boundary without deducting usage.
40106
+ - metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--overage-wallet-id <value>", `Wallet charged for overage. Null bills overage in arrears.`).option("--floor <value>", `Minimum available balance a spend check requires, in the policy's denomination.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
40107
+
40108
+ - calendar_month: Settles at the end of each UTC calendar month.`).option("--windows <json>", `Rolling allowances. Required for windows plans; each window meters every call. A plan replacement replaces the entire array.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).requiredOption("--blocked", `Whether spending is disabled for this billing scope.`).addHelpText("after", `
40109
+ Examples:
40110
+ hyperline ai-billing upsert-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --mode <mode> --blocked
40111
+ hyperline ai-billing upsert-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --mode <mode> --blocked --wallet-id <wallet_id> --credit-product-id <credit_product_id>
40112
+ hyperline ai-billing upsert-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --mode <mode> --blocked --output json`).action(async (opts) => {
40113
+ const ctx = resource.parent?.opts()._ctx;
40114
+ if (!ctx) {
40115
+ process.stderr.write("Error: Not authenticated\n");
40116
+ process.exit(1);
40117
+ }
40118
+ const args = {};
40119
+ if (opts.id !== void 0)
40120
+ args.id = opts.id;
40121
+ if (opts.agentSlug !== void 0)
40122
+ args.agent_slug = opts.agentSlug;
40123
+ if (opts.mode !== void 0)
40124
+ args.mode = opts.mode;
40125
+ if (opts.walletId !== void 0)
40126
+ args.wallet_id = opts.walletId;
40127
+ if (opts.creditProductId !== void 0)
40128
+ args.credit_product_id = opts.creditProductId;
40129
+ if (opts.markupPercent !== void 0)
40130
+ args.markup_percent = opts.markupPercent;
40131
+ if (opts.overageMode !== void 0)
40132
+ args.overage_mode = opts.overageMode;
40133
+ if (opts.overageMarkupPercent !== void 0)
40134
+ args.overage_markup_percent = opts.overageMarkupPercent;
40135
+ if (opts.overageRateCardId !== void 0)
40136
+ args.overage_rate_card_id = opts.overageRateCardId;
40137
+ if (opts.overageWalletId !== void 0)
40138
+ args.overage_wallet_id = opts.overageWalletId;
40139
+ if (opts.floor !== void 0)
40140
+ args.floor = opts.floor;
40141
+ if (opts.settlementSchedule !== void 0)
40142
+ args.settlement_schedule = opts.settlementSchedule;
40143
+ if (opts.rateCardId !== void 0)
40144
+ args.rate_card_id = opts.rateCardId;
40145
+ if (opts.planId !== void 0)
40146
+ args.plan_id = opts.planId;
40147
+ if (opts.settlementIntervalMinutes !== void 0)
40148
+ args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
40149
+ if (opts.blocked !== void 0)
40150
+ args.blocked = true;
40151
+ if (opts.windows !== void 0)
40152
+ args.windows = JSON.parse(opts.windows);
40001
40153
  await ctx.execute({
40002
40154
  method: "PUT",
40003
- path: "/v1/ai-billing/cost-catalog/overrides",
40155
+ path: "/v1/ai/billing/customers/{id}/policies/agents/{agent_slug}",
40004
40156
  args,
40005
40157
  queryParamKeys: []
40006
40158
  });
40007
40159
  });
40008
- resource.command("delete-agent-cost-catalog-override").description(`Close this workspace's negotiated price override by its override.id; pricing falls back to the global registry rate. A custom cost item id passed here is a 404.`).requiredOption("--override-id <value>", `override_id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40160
+ resource.command("delete-agent-customer-billing-policy").description(`Delete one customer's AI billing policy scope. Refused (409) while it owes unsettled consumption or while agent overrides still depend on it.`).requiredOption("--id <value>", `id parameter`).requiredOption("--agent-slug <value>", `agent_slug parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40009
40161
  Examples:
40010
- hyperline ai-billing delete-agent-cost-catalog-override --override-id <override_id>
40011
- hyperline ai-billing delete-agent-cost-catalog-override --override-id <override_id> --output json`).action(async (opts) => {
40162
+ hyperline ai-billing delete-agent-customer-billing-policy --id <id> --agent-slug <agent_slug>
40163
+ hyperline ai-billing delete-agent-customer-billing-policy --id <id> --agent-slug <agent_slug> --output json`).action(async (opts) => {
40012
40164
  const ctx = resource.parent?.opts()._ctx;
40013
40165
  if (!ctx) {
40014
40166
  process.stderr.write("Error: Not authenticated\n");
40015
40167
  process.exit(1);
40016
40168
  }
40017
40169
  const args = {};
40018
- if (opts.overrideId !== void 0)
40019
- args.override_id = opts.overrideId;
40170
+ if (opts.id !== void 0)
40171
+ args.id = opts.id;
40172
+ if (opts.agentSlug !== void 0)
40173
+ args.agent_slug = opts.agentSlug;
40020
40174
  if (!opts.yes) {
40021
40175
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40022
40176
  if (!confirmed) {
@@ -40026,128 +40180,155 @@ Examples:
40026
40180
  }
40027
40181
  await ctx.execute({
40028
40182
  method: "DELETE",
40029
- path: "/v1/ai-billing/cost-catalog/overrides/{override_id}",
40183
+ path: "/v1/ai/billing/customers/{id}/policies/agents/{agent_slug}",
40030
40184
  args,
40031
40185
  queryParamKeys: []
40032
40186
  });
40033
40187
  });
40034
- resource.command("list-agent-customer-policies").description(`List all AI billing policies (scopes) for one customer: the default shared pool plus per-agent overrides. Accepts Hyperline or external customer ids.`).requiredOption("--customer-id <value>", `customer_id parameter`).addHelpText("after", `
40188
+ resource.command("apply-agent-default-plan").description(`Apply the workspace's default AI agent billing plan to one customer (by id or external id). Idempotent; refuses (409) if the customer already has a different billing policy, 404 when no default plan is set.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
40035
40189
  Examples:
40036
- hyperline ai-billing list-agent-customer-policies --customer-id <customer_id>`).action(async (opts) => {
40190
+ hyperline ai-billing apply-agent-default-plan --id <id>
40191
+ hyperline ai-billing apply-agent-default-plan --id <id> --output json`).action(async (opts) => {
40037
40192
  const ctx = resource.parent?.opts()._ctx;
40038
40193
  if (!ctx) {
40039
40194
  process.stderr.write("Error: Not authenticated\n");
40040
40195
  process.exit(1);
40041
40196
  }
40042
40197
  const args = {};
40043
- if (opts.customerId !== void 0)
40044
- args.customer_id = opts.customerId;
40198
+ if (opts.id !== void 0)
40199
+ args.id = opts.id;
40045
40200
  await ctx.execute({
40046
- method: "GET",
40047
- path: "/v1/ai-billing/customers/{customer_id}/policies",
40201
+ method: "POST",
40202
+ path: "/v1/ai/billing/customers/{id}/apply-default-plan",
40048
40203
  args,
40049
40204
  queryParamKeys: []
40050
40205
  });
40051
40206
  });
40052
- resource.command("get-agent-customer-policy").description(`Get one customer's AI billing policy \u2014 the default shared pool, or one agent's own scope via the agent query param.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent scope identifier. Null on scoped results denotes the customer's shared pool.`).addHelpText("after", `
40207
+ resource.command("get-agent-customer-balance").description(`Get one customer's live AI balance, shaped by their billing mode: wallet shadow balance, credit pot, or rolling window meters with reset times. Includes per-agent scopes and overage state.`).requiredOption("--id <value>", `id parameter`).option("--agent-slug <value>", `Agent scope identifier. Null is the customer's shared pool.`).addHelpText("after", `
40053
40208
  Examples:
40054
- hyperline ai-billing get-agent-customer-policy --customer-id <customer_id>
40055
- hyperline ai-billing get-agent-customer-policy --customer-id <customer_id> --agent <agent>`).action(async (opts) => {
40209
+ hyperline ai-billing get-agent-customer-balance --id <id>
40210
+ hyperline ai-billing get-agent-customer-balance --id <id> --agent-slug <agent_slug>`).action(async (opts) => {
40056
40211
  const ctx = resource.parent?.opts()._ctx;
40057
40212
  if (!ctx) {
40058
40213
  process.stderr.write("Error: Not authenticated\n");
40059
40214
  process.exit(1);
40060
40215
  }
40061
40216
  const args = {};
40062
- if (opts.customerId !== void 0)
40063
- args.customer_id = opts.customerId;
40064
- if (opts.agent !== void 0)
40065
- args.agent = opts.agent;
40217
+ if (opts.id !== void 0)
40218
+ args.id = opts.id;
40219
+ if (opts.agentSlug !== void 0)
40220
+ args.agent_slug = opts.agentSlug;
40066
40221
  await ctx.execute({
40067
40222
  method: "GET",
40068
- path: "/v1/ai-billing/customers/{customer_id}/policy",
40223
+ path: "/v1/ai/billing/customers/{id}/balance",
40069
40224
  args,
40070
- queryParamKeys: ["agent"]
40225
+ queryParamKeys: ["agent_slug"]
40071
40226
  });
40072
40227
  });
40073
- resource.command("upsert-agent-customer-policy").description(`Create or replace one customer's AI billing policy (whole-row). Pass plan_id to attach the customer to a billing plan \u2014 this also attaches the plan's overage invoice container to their subscription. Past-limit usage is priced by overage_markup_percent over the base rates, or by overage_rate_card_id (a currency rate card whose rates ARE the overage price) \u2014 never both. Wallet/credit pots are auto-opened empty.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent scope identifier. Null on scoped results denotes the customer's shared pool.`).requiredOption("--mode <value>", `Billing mode.
40074
-
40075
- - wallet: Charges a monetary wallet.
40076
- - credits: Consumes a credit balance.
40077
- - windows: Meters weighted units against rolling allowances.`).option("--wallet-id <value>", `Customer wallet identifier. Omit on wallet policy writes to provision or reuse the customer's wallet.`).option("--credit-product-id <value>", `Public credit product identifier whose balance this policy consumes.`).option("--markup-percent <value>", `Percentage added to resolved cost. Null on writes means no override; an attached plan may supply the value.`).option("--overage-mode <value>", `Behavior when credits or an allowance are exhausted. Policy values may inherit the attached plan.
40078
-
40079
- - refuse: Rejects the call that crosses the boundary without deducting usage.
40080
- - metered: Prices the whole call as monetary overage, using the overage card or USD provider cost plus markup.`).option("--overage-markup-percent <value>", `Percentage added to provider cost for overage. Mutually exclusive with overage_rate_card_id.`).option("--overage-rate-card-id <value>", `Currency rate card used to price overage directly. Null means provider cost plus the resolved overage markup.`).option("--overage-wallet-id <value>", `Wallet charged for overage. Null bills overage in arrears.`).option("--floor <value>", `Minimum available balance a spend check requires, in the policy's denomination.`).option("--settlement-interval-minutes <number>", `Settlement interval in minutes. Null means no interval override. Mutually exclusive with settlement_schedule.`).option("--settlement-schedule <value>", `Calendar settlement schedule. Null clears the override; mutually exclusive with settlement_interval_minutes.
40081
-
40082
- - calendar_month: Settles at the end of each UTC calendar month.`).option("--credit-rates <json>", `Inline credit pricing. Mutually exclusive with rate_card_id. Omitted rates may be supplied by a plan or product default.`).option("--window-rates <json>", `Window definitions and optional inline unit rates. An attached plan may supply omitted definitions; rate_card_id may supply unit rates.`).option("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).option("--plan-id <value>", `Billing plan reference. On policy writes, omission preserves the current plan and null detaches it.`).requiredOption("--blocked", `Whether spending is disabled for this billing scope.`).addHelpText("after", `
40228
+ resource.command("reset-agent-customer-windows").description(`Reset one customer's open AI allowance windows so their next call starts a fresh full allowance. Windows-mode scopes only.`).requiredOption("--id <value>", `id parameter`).option("--agent-slug <value>", `Agent scope identifier. Null is the customer's shared pool.`).addHelpText("after", `
40083
40229
  Examples:
40084
- hyperline ai-billing upsert-agent-customer-policy --customer-id <customer_id> --mode <mode> --blocked
40085
- hyperline ai-billing upsert-agent-customer-policy --customer-id <customer_id> --mode <mode> --blocked --agent <agent> --wallet-id <wallet_id>
40086
- hyperline ai-billing upsert-agent-customer-policy --customer-id <customer_id> --mode <mode> --blocked --output json`).action(async (opts) => {
40230
+ hyperline ai-billing reset-agent-customer-windows --id <id>
40231
+ hyperline ai-billing reset-agent-customer-windows --id <id> --agent-slug <agent_slug>
40232
+ hyperline ai-billing reset-agent-customer-windows --id <id> --output json`).action(async (opts) => {
40087
40233
  const ctx = resource.parent?.opts()._ctx;
40088
40234
  if (!ctx) {
40089
40235
  process.stderr.write("Error: Not authenticated\n");
40090
40236
  process.exit(1);
40091
40237
  }
40092
40238
  const args = {};
40093
- if (opts.customerId !== void 0)
40094
- args.customer_id = opts.customerId;
40095
- if (opts.agent !== void 0)
40096
- args.agent = opts.agent;
40097
- if (opts.mode !== void 0)
40098
- args.mode = opts.mode;
40099
- if (opts.walletId !== void 0)
40100
- args.wallet_id = opts.walletId;
40101
- if (opts.creditProductId !== void 0)
40102
- args.credit_product_id = opts.creditProductId;
40103
- if (opts.markupPercent !== void 0)
40104
- args.markup_percent = opts.markupPercent;
40105
- if (opts.overageMode !== void 0)
40106
- args.overage_mode = opts.overageMode;
40107
- if (opts.overageMarkupPercent !== void 0)
40108
- args.overage_markup_percent = opts.overageMarkupPercent;
40109
- if (opts.overageRateCardId !== void 0)
40110
- args.overage_rate_card_id = opts.overageRateCardId;
40111
- if (opts.overageWalletId !== void 0)
40112
- args.overage_wallet_id = opts.overageWalletId;
40113
- if (opts.floor !== void 0)
40114
- args.floor = opts.floor;
40115
- if (opts.settlementSchedule !== void 0)
40116
- args.settlement_schedule = opts.settlementSchedule;
40239
+ if (opts.id !== void 0)
40240
+ args.id = opts.id;
40241
+ if (opts.agentSlug !== void 0)
40242
+ args.agent_slug = opts.agentSlug;
40243
+ await ctx.execute({
40244
+ method: "POST",
40245
+ path: "/v1/ai/billing/customers/{id}/windows/reset",
40246
+ args,
40247
+ queryParamKeys: ["agent_slug"]
40248
+ });
40249
+ });
40250
+ resource.command("list-agent-customer-consumption").description(`List one customer's AI consumption ledger entries, newest first, with amounts, denominations and overage flags. Filter by agent scope, overage, and from/to time range; paginated with take/skip.`).requiredOption("--id <value>", `id parameter`).option("--agent-slug <value>", `Billing scope: an empty string selects the shared pool; omission includes all scopes.`).option("--overage <value>", `Filter by overage status; omission includes both ordinary and overage entries.`).option("--from <value>", `UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--to <value>", `UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
40251
+ Examples:
40252
+ hyperline ai-billing list-agent-customer-consumption --id <id>
40253
+ hyperline ai-billing list-agent-customer-consumption --id <id> --agent-slug <agent_slug> --overage <overage>`).action(async (opts) => {
40254
+ const ctx = resource.parent?.opts()._ctx;
40255
+ if (!ctx) {
40256
+ process.stderr.write("Error: Not authenticated\n");
40257
+ process.exit(1);
40258
+ }
40259
+ const args = {};
40260
+ if (opts.id !== void 0)
40261
+ args.id = opts.id;
40262
+ if (opts.agentSlug !== void 0)
40263
+ args.agent_slug = opts.agentSlug;
40264
+ if (opts.overage !== void 0)
40265
+ args.overage = opts.overage;
40266
+ if (opts.from !== void 0)
40267
+ args.from = opts.from;
40268
+ if (opts.to !== void 0)
40269
+ args.to = opts.to;
40270
+ if (opts.take !== void 0)
40271
+ args.take = Number(opts.take);
40272
+ if (opts.skip !== void 0)
40273
+ args.skip = Number(opts.skip);
40274
+ await ctx.execute({
40275
+ method: "GET",
40276
+ path: "/v1/ai/billing/customers/{id}/consumption",
40277
+ args,
40278
+ queryParamKeys: ["agent_slug", "overage", "from", "to", "take", "skip"]
40279
+ });
40280
+ });
40281
+ resource.command("get-product-ai-rate-card").description(`Get the default AI rate-card reference for a credit product, or 404 when none is attached.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
40282
+ Examples:
40283
+ hyperline ai-billing get-product-ai-rate-card --id <id>`).action(async (opts) => {
40284
+ const ctx = resource.parent?.opts()._ctx;
40285
+ if (!ctx) {
40286
+ process.stderr.write("Error: Not authenticated\n");
40287
+ process.exit(1);
40288
+ }
40289
+ const args = {};
40290
+ if (opts.id !== void 0)
40291
+ args.id = opts.id;
40292
+ await ctx.execute({
40293
+ method: "GET",
40294
+ path: "/v1/ai/billing/products/{id}/rate-card",
40295
+ args,
40296
+ queryParamKeys: []
40297
+ });
40298
+ });
40299
+ resource.command("set-product-ai-rate-card").description(`Attach a credits-denominated AI rate card with complete fallback pricing as the credit product's default.`).requiredOption("--id <value>", `id parameter`).requiredOption("--rate-card-id <value>", `Rate card reference. On policy writes, omission preserves the current reference and null detaches it; on plan replacement omission clears it.`).addHelpText("after", `
40300
+ Examples:
40301
+ hyperline ai-billing set-product-ai-rate-card --id <id> --rate-card-id <rate_card_id>
40302
+ hyperline ai-billing set-product-ai-rate-card --id <id> --rate-card-id <rate_card_id> --output json`).action(async (opts) => {
40303
+ const ctx = resource.parent?.opts()._ctx;
40304
+ if (!ctx) {
40305
+ process.stderr.write("Error: Not authenticated\n");
40306
+ process.exit(1);
40307
+ }
40308
+ const args = {};
40309
+ if (opts.id !== void 0)
40310
+ args.id = opts.id;
40117
40311
  if (opts.rateCardId !== void 0)
40118
40312
  args.rate_card_id = opts.rateCardId;
40119
- if (opts.planId !== void 0)
40120
- args.plan_id = opts.planId;
40121
- if (opts.settlementIntervalMinutes !== void 0)
40122
- args.settlement_interval_minutes = Number(opts.settlementIntervalMinutes);
40123
- if (opts.blocked !== void 0)
40124
- args.blocked = true;
40125
- if (opts.creditRates !== void 0)
40126
- args.credit_rates = JSON.parse(opts.creditRates);
40127
- if (opts.windowRates !== void 0)
40128
- args.window_rates = JSON.parse(opts.windowRates);
40129
40313
  await ctx.execute({
40130
40314
  method: "PUT",
40131
- path: "/v1/ai-billing/customers/{customer_id}/policy",
40315
+ path: "/v1/ai/billing/products/{id}/rate-card",
40132
40316
  args,
40133
- queryParamKeys: ["agent"]
40317
+ queryParamKeys: []
40134
40318
  });
40135
40319
  });
40136
- resource.command("delete-agent-customer-policy").description(`Delete one customer's AI billing policy scope. Refused (409) while it owes unsettled consumption or while agent overrides still depend on it.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent scope identifier. Null on scoped results denotes the customer's shared pool.`).option("--yes", "Skip confirmation").addHelpText("after", `
40320
+ resource.command("clear-product-ai-rate-card").description(`Detach a credit product's default AI rate card without deleting the card, or return 404 when none is attached.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40137
40321
  Examples:
40138
- hyperline ai-billing delete-agent-customer-policy --customer-id <customer_id>
40139
- hyperline ai-billing delete-agent-customer-policy --customer-id <customer_id> --agent <agent>
40140
- hyperline ai-billing delete-agent-customer-policy --customer-id <customer_id> --output json`).action(async (opts) => {
40322
+ hyperline ai-billing clear-product-ai-rate-card --id <id>
40323
+ hyperline ai-billing clear-product-ai-rate-card --id <id> --output json`).action(async (opts) => {
40141
40324
  const ctx = resource.parent?.opts()._ctx;
40142
40325
  if (!ctx) {
40143
40326
  process.stderr.write("Error: Not authenticated\n");
40144
40327
  process.exit(1);
40145
40328
  }
40146
40329
  const args = {};
40147
- if (opts.customerId !== void 0)
40148
- args.customer_id = opts.customerId;
40149
- if (opts.agent !== void 0)
40150
- args.agent = opts.agent;
40330
+ if (opts.id !== void 0)
40331
+ args.id = opts.id;
40151
40332
  if (!opts.yes) {
40152
40333
  const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40153
40334
  if (!confirmed) {
@@ -40157,118 +40338,229 @@ Examples:
40157
40338
  }
40158
40339
  await ctx.execute({
40159
40340
  method: "DELETE",
40160
- path: "/v1/ai-billing/customers/{customer_id}/policy",
40341
+ path: "/v1/ai/billing/products/{id}/rate-card",
40161
40342
  args,
40162
- queryParamKeys: ["agent"]
40343
+ queryParamKeys: []
40163
40344
  });
40164
40345
  });
40165
- resource.command("apply-agent-default-plan").description(`Apply the workspace's default AI agent billing plan to one customer (by id or external id). Idempotent; refuses (409) if the customer already has a different billing policy, 404 when no default plan is set.`).requiredOption("--customer-id <value>", `customer_id parameter`).addHelpText("after", `
40346
+ }
40347
+
40348
+ // build/commands/generated/ai-costs.js
40349
+ function registerAi_CostsCommands(parent) {
40350
+ const resource = parent.command("ai-costs").description("Manage ai > costs");
40351
+ resource.command("list-agent-cost-catalog").description(`List the AI cost catalog: registry model prices merged with this workspace's negotiated overrides, its own custom cost items (source custom), and the unpriced pairs its telemetry has carried (source unlisted). Rates are USD decimal strings. Pass enabled_only=true for just the enabled catalog.`).option("--take <number>", `Maximum catalog entries to return.`).option("--skip <number>", `skip`).option("--enabled-only <value>", `enabled_only`).addHelpText("after", `
40166
40352
  Examples:
40167
- hyperline ai-billing apply-agent-default-plan --customer-id <customer_id>
40168
- hyperline ai-billing apply-agent-default-plan --customer-id <customer_id> --output json`).action(async (opts) => {
40353
+ hyperline ai-costs list-agent-cost-catalog
40354
+ hyperline ai-costs list-agent-cost-catalog --take <take> --enabled-only <enabled_only>`).action(async (opts) => {
40169
40355
  const ctx = resource.parent?.opts()._ctx;
40170
40356
  if (!ctx) {
40171
40357
  process.stderr.write("Error: Not authenticated\n");
40172
40358
  process.exit(1);
40173
40359
  }
40174
40360
  const args = {};
40175
- if (opts.customerId !== void 0)
40176
- args.customer_id = opts.customerId;
40361
+ if (opts.enabledOnly !== void 0)
40362
+ args.enabled_only = opts.enabledOnly;
40363
+ if (opts.take !== void 0)
40364
+ args.take = Number(opts.take);
40365
+ if (opts.skip !== void 0)
40366
+ args.skip = Number(opts.skip);
40367
+ await ctx.execute({
40368
+ method: "GET",
40369
+ path: "/v1/ai/billing/costs",
40370
+ args,
40371
+ queryParamKeys: ["take", "skip", "enabled_only"]
40372
+ });
40373
+ });
40374
+ resource.command("create-agent-cost-catalog-item").description(`Create a custom provider/item cost; an existing pair returns 200 with its unchanged rates, so use PUT /v1/ai/billing/costs/items/:id to edit it.`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--item <value>", `Custom item name matching the usage payload.`).requiredOption("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
40375
+ Examples:
40376
+ hyperline ai-costs create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions>
40377
+ hyperline ai-costs create-agent-cost-catalog-item --provider <provider> --item <item> --dimensions <dimensions> --output json`).action(async (opts) => {
40378
+ const ctx = resource.parent?.opts()._ctx;
40379
+ if (!ctx) {
40380
+ process.stderr.write("Error: Not authenticated\n");
40381
+ process.exit(1);
40382
+ }
40383
+ const args = {};
40384
+ if (opts.provider !== void 0)
40385
+ args.provider = opts.provider;
40386
+ if (opts.item !== void 0)
40387
+ args.item = opts.item;
40388
+ if (opts.dimensions !== void 0)
40389
+ args.dimensions = JSON.parse(opts.dimensions);
40390
+ await ctx.execute({
40391
+ method: "POST",
40392
+ path: "/v1/ai/billing/costs/items",
40393
+ args,
40394
+ queryParamKeys: []
40395
+ });
40396
+ });
40397
+ resource.command("delete-agent-cost-catalog-item").description(`Close a custom AI cost item by its custom_item_id. History is kept; new calls on that pair go back to unpriced. An override id passed here is a 404.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40398
+ Examples:
40399
+ hyperline ai-costs delete-agent-cost-catalog-item --id <id>
40400
+ hyperline ai-costs delete-agent-cost-catalog-item --id <id> --output json`).action(async (opts) => {
40401
+ const ctx = resource.parent?.opts()._ctx;
40402
+ if (!ctx) {
40403
+ process.stderr.write("Error: Not authenticated\n");
40404
+ process.exit(1);
40405
+ }
40406
+ const args = {};
40407
+ if (opts.id !== void 0)
40408
+ args.id = opts.id;
40409
+ if (!opts.yes) {
40410
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40411
+ if (!confirmed) {
40412
+ process.stdout.write("Aborted.\n");
40413
+ return;
40414
+ }
40415
+ }
40416
+ await ctx.execute({
40417
+ method: "DELETE",
40418
+ path: "/v1/ai/billing/costs/items/{id}",
40419
+ args,
40420
+ queryParamKeys: []
40421
+ });
40422
+ });
40423
+ resource.command("upsert-agent-cost-catalog-override").description(`Set this workspace's negotiated price for a registry AI model (input/output/cached/cache-write USD per 1M tokens, plus optional dimensions). Replaces any open override immediately; historical calls keep their original rate. A pair the registry does not know is refused \u2014 create a custom cost item instead.`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--model <value>", `Model identifier, or custom item identifier. Null on wildcard pricing rows.`).requiredOption("--input-per-m-tokens <value>", `Provider cost in USD per million input tokens, as an exact decimal string.`).requiredOption("--output-per-m-tokens <value>", `Provider cost in USD per million output tokens, as an exact decimal string.`).option("--cached-input-per-m-tokens <value>", `Provider cost in USD per million cached input tokens, as an exact decimal string.`).option("--cache-write-per-m-tokens <value>", `Provider cost in USD per million cache write tokens, as an exact decimal string.`).option("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
40424
+ Examples:
40425
+ hyperline ai-costs upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens>
40426
+ hyperline ai-costs upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens> --cached-input-per-m-tokens <cached_input_per_m_tokens> --cache-write-per-m-tokens <cache_write_per_m_tokens>
40427
+ hyperline ai-costs upsert-agent-cost-catalog-override --provider <provider> --model <model> --input-per-m-tokens <input_per_m_tokens> --output-per-m-tokens <output_per_m_tokens> --output json`).action(async (opts) => {
40428
+ const ctx = resource.parent?.opts()._ctx;
40429
+ if (!ctx) {
40430
+ process.stderr.write("Error: Not authenticated\n");
40431
+ process.exit(1);
40432
+ }
40433
+ const args = {};
40434
+ if (opts.provider !== void 0)
40435
+ args.provider = opts.provider;
40436
+ if (opts.model !== void 0)
40437
+ args.model = opts.model;
40438
+ if (opts.inputPerMTokens !== void 0)
40439
+ args.input_per_m_tokens = opts.inputPerMTokens;
40440
+ if (opts.outputPerMTokens !== void 0)
40441
+ args.output_per_m_tokens = opts.outputPerMTokens;
40442
+ if (opts.cachedInputPerMTokens !== void 0)
40443
+ args.cached_input_per_m_tokens = opts.cachedInputPerMTokens;
40444
+ if (opts.cacheWritePerMTokens !== void 0)
40445
+ args.cache_write_per_m_tokens = opts.cacheWritePerMTokens;
40446
+ if (opts.dimensions !== void 0)
40447
+ args.dimensions = JSON.parse(opts.dimensions);
40177
40448
  await ctx.execute({
40178
- method: "POST",
40179
- path: "/v1/ai-billing/customers/{customer_id}/apply-default-plan",
40449
+ method: "PUT",
40450
+ path: "/v1/ai/billing/costs/overrides",
40180
40451
  args,
40181
40452
  queryParamKeys: []
40182
40453
  });
40183
40454
  });
40184
- resource.command("get-agent-customer-balance").description(`Get one customer's live AI balance, shaped by their billing mode: wallet shadow balance, credit pot, or rolling window meters with reset times. Includes per-agent scopes and overage state.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent scope identifier. Null on scoped results denotes the customer's shared pool.`).addHelpText("after", `
40455
+ resource.command("delete-agent-cost-catalog-override").description(`Close this workspace's negotiated price override by its override.id; pricing falls back to the global registry rate. A custom cost item id passed here is a 404.`).requiredOption("--id <value>", `id parameter`).option("--yes", "Skip confirmation").addHelpText("after", `
40185
40456
  Examples:
40186
- hyperline ai-billing get-agent-customer-balance --customer-id <customer_id>
40187
- hyperline ai-billing get-agent-customer-balance --customer-id <customer_id> --agent <agent>`).action(async (opts) => {
40457
+ hyperline ai-costs delete-agent-cost-catalog-override --id <id>
40458
+ hyperline ai-costs delete-agent-cost-catalog-override --id <id> --output json`).action(async (opts) => {
40188
40459
  const ctx = resource.parent?.opts()._ctx;
40189
40460
  if (!ctx) {
40190
40461
  process.stderr.write("Error: Not authenticated\n");
40191
40462
  process.exit(1);
40192
40463
  }
40193
40464
  const args = {};
40194
- if (opts.customerId !== void 0)
40195
- args.customer_id = opts.customerId;
40196
- if (opts.agent !== void 0)
40197
- args.agent = opts.agent;
40465
+ if (opts.id !== void 0)
40466
+ args.id = opts.id;
40467
+ if (!opts.yes) {
40468
+ const confirmed = await confirmPrompt("Are you sure? Pass --yes to skip. [y/N] ");
40469
+ if (!confirmed) {
40470
+ process.stdout.write("Aborted.\n");
40471
+ return;
40472
+ }
40473
+ }
40198
40474
  await ctx.execute({
40199
- method: "GET",
40200
- path: "/v1/ai-billing/customers/{customer_id}/balance",
40475
+ method: "DELETE",
40476
+ path: "/v1/ai/billing/costs/overrides/{id}",
40201
40477
  args,
40202
- queryParamKeys: ["agent"]
40478
+ queryParamKeys: []
40203
40479
  });
40204
40480
  });
40205
- resource.command("reset-agent-customer-windows").description(`Reset one customer's open AI allowance windows so their next call starts a fresh full allowance. Windows-mode scopes only.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent scope identifier. Null on scoped results denotes the customer's shared pool.`).addHelpText("after", `
40481
+ resource.command("replace-agent-cost-catalog-item").description(`Replace a custom item's provider, item and dimensions, preserving historical prices and returning the new active custom_item_id.`).requiredOption("--id <value>", `id parameter`).requiredOption("--provider <value>", `AI model provider, or the vendor of a custom cost item. This is not an integration connection.`).requiredOption("--item <value>", `Custom item name matching the usage payload.`).requiredOption("--dimensions <json>", `Additional billable dimensions; each key matches a usage_extra key and rates use the owning card's units or USD for cost-catalog dimensions.`).addHelpText("after", `
40206
40482
  Examples:
40207
- hyperline ai-billing reset-agent-customer-windows --customer-id <customer_id>
40208
- hyperline ai-billing reset-agent-customer-windows --customer-id <customer_id> --agent <agent>
40209
- hyperline ai-billing reset-agent-customer-windows --customer-id <customer_id> --output json`).action(async (opts) => {
40483
+ hyperline ai-costs replace-agent-cost-catalog-item --id <id> --provider <provider> --item <item> --dimensions <dimensions>
40484
+ hyperline ai-costs replace-agent-cost-catalog-item --id <id> --provider <provider> --item <item> --dimensions <dimensions> --output json`).action(async (opts) => {
40210
40485
  const ctx = resource.parent?.opts()._ctx;
40211
40486
  if (!ctx) {
40212
40487
  process.stderr.write("Error: Not authenticated\n");
40213
40488
  process.exit(1);
40214
40489
  }
40215
40490
  const args = {};
40216
- if (opts.customerId !== void 0)
40217
- args.customer_id = opts.customerId;
40218
- if (opts.agent !== void 0)
40219
- args.agent = opts.agent;
40491
+ if (opts.id !== void 0)
40492
+ args.id = opts.id;
40493
+ if (opts.provider !== void 0)
40494
+ args.provider = opts.provider;
40495
+ if (opts.item !== void 0)
40496
+ args.item = opts.item;
40497
+ if (opts.dimensions !== void 0)
40498
+ args.dimensions = JSON.parse(opts.dimensions);
40220
40499
  await ctx.execute({
40221
- method: "POST",
40222
- path: "/v1/ai-billing/customers/{customer_id}/windows/reset",
40500
+ method: "PUT",
40501
+ path: "/v1/ai/billing/costs/items/{id}",
40223
40502
  args,
40224
- queryParamKeys: ["agent"]
40503
+ queryParamKeys: []
40225
40504
  });
40226
40505
  });
40227
- resource.command("list-agent-customer-consumption").description(`List one customer's AI consumption ledger entries, newest first, with amounts, denominations and overage flags. Filter by agent scope, overage, and from/to time range; paginated with take/skip.`).requiredOption("--customer-id <value>", `customer_id parameter`).option("--agent <value>", `Agent slug. An empty string selects the shared pool; omission includes all scopes.`).option("--overage <value>", `Filter by overage status. Omit to include both ordinary and overage entries.`).option("--from <value>", `UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--to <value>", `UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--take <number>", `take`).option("--skip <number>", `skip`).addHelpText("after", `
40506
+ }
40507
+
40508
+ // build/commands/generated/ai-monitoring.js
40509
+ function registerAi_MonitoringCommands(parent) {
40510
+ const resource = parent.command("ai-monitoring").description("Manage ai > monitoring");
40511
+ resource.command("list-monitoring-analyses").description(`List customer health analyses from the monitoring agent, newest first: health score (0-100), tier, summary, per-dimension scores, risk factors and positive signals. Filter by customer (Hyperline or external ID) with limit=1 to get a customer's current health score. Only completed analyses unless status is set.`).option("--limit <number>", `Maximum number of items to return (1-100).`).option("--cursor <value>", `Opaque cursor returned in the previous response's \`next_cursor\`. Omit to fetch the first page.`).option("--include-total <value>", `Set to \`true\` to include \`total\` in the response.`).option("--customer-id <value>", `Return only analyses of this customer. Accepts the Hyperline ID or your own external ID.`).option("--status <value>", `Return only analyses with this status. Defaults to \`completed\`, the analyses that carry a score.`).option("--created-at.gte <value>", `Return only analyses created at or after this date.`).option("--created-at.lte <value>", `Return only analyses created at or before this date.`).addHelpText("after", `
40228
40512
  Examples:
40229
- hyperline ai-billing list-agent-customer-consumption --customer-id <customer_id>
40230
- hyperline ai-billing list-agent-customer-consumption --customer-id <customer_id> --agent <agent> --overage <overage>`).action(async (opts) => {
40513
+ hyperline ai-monitoring list-monitoring-analyses
40514
+ hyperline ai-monitoring list-monitoring-analyses --limit <limit> --cursor <cursor>`).action(async (opts) => {
40231
40515
  const ctx = resource.parent?.opts()._ctx;
40232
40516
  if (!ctx) {
40233
40517
  process.stderr.write("Error: Not authenticated\n");
40234
40518
  process.exit(1);
40235
40519
  }
40236
40520
  const args = {};
40521
+ if (opts.cursor !== void 0)
40522
+ args.cursor = opts.cursor;
40523
+ if (opts.includeTotal !== void 0)
40524
+ args.include_total = opts.includeTotal;
40237
40525
  if (opts.customerId !== void 0)
40238
40526
  args.customer_id = opts.customerId;
40239
- if (opts.agent !== void 0)
40240
- args.agent = opts.agent;
40241
- if (opts.overage !== void 0)
40242
- args.overage = opts.overage;
40243
- if (opts.from !== void 0)
40244
- args.from = opts.from;
40245
- if (opts.to !== void 0)
40246
- args.to = opts.to;
40247
- if (opts.take !== void 0)
40248
- args.take = Number(opts.take);
40249
- if (opts.skip !== void 0)
40250
- args.skip = Number(opts.skip);
40527
+ if (opts.status !== void 0)
40528
+ args.status = opts.status;
40529
+ if (opts["createdAt.gte"] !== void 0)
40530
+ args.created_at__gte = opts["createdAt.gte"];
40531
+ if (opts["createdAt.lte"] !== void 0)
40532
+ args.created_at__lte = opts["createdAt.lte"];
40533
+ if (opts.limit !== void 0)
40534
+ args.limit = Number(opts.limit);
40251
40535
  await ctx.execute({
40252
40536
  method: "GET",
40253
- path: "/v1/ai-billing/customers/{customer_id}/consumption",
40537
+ path: "/v1/agents/monitoring/analyses",
40254
40538
  args,
40255
- queryParamKeys: ["agent", "overage", "from", "to", "take", "skip"]
40539
+ queryParamKeys: [
40540
+ "limit",
40541
+ "cursor",
40542
+ "include_total",
40543
+ "customer_id",
40544
+ "status",
40545
+ "created_at__gte",
40546
+ "created_at__lte"
40547
+ ]
40256
40548
  });
40257
40549
  });
40258
- resource.command("get-agent-customer-overview").description(`Get one customer's full AI billing overview: default policy, per-agent scopes, balances and billed consumption totals in one read.`).requiredOption("--customer-id <value>", `customer_id parameter`).addHelpText("after", `
40550
+ resource.command("get-monitoring-analysis").description(`Get one customer health analysis by ID: health score (0-100), tier, summary, per-dimension scores, risk factors and positive signals.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
40259
40551
  Examples:
40260
- hyperline ai-billing get-agent-customer-overview --customer-id <customer_id>`).action(async (opts) => {
40552
+ hyperline ai-monitoring get-monitoring-analysis --id <id>`).action(async (opts) => {
40261
40553
  const ctx = resource.parent?.opts()._ctx;
40262
40554
  if (!ctx) {
40263
40555
  process.stderr.write("Error: Not authenticated\n");
40264
40556
  process.exit(1);
40265
40557
  }
40266
40558
  const args = {};
40267
- if (opts.customerId !== void 0)
40268
- args.customer_id = opts.customerId;
40559
+ if (opts.id !== void 0)
40560
+ args.id = opts.id;
40269
40561
  await ctx.execute({
40270
40562
  method: "GET",
40271
- path: "/v1/ai-billing/customers/{customer_id}/overview",
40563
+ path: "/v1/agents/monitoring/analyses/{id}",
40272
40564
  args,
40273
40565
  queryParamKeys: []
40274
40566
  });
@@ -41945,7 +42237,7 @@ Examples:
41945
42237
  queryParamKeys: []
41946
42238
  });
41947
42239
  });
41948
- resource.command("purchase-customer-credits").description(`Purchase credits for a customer. This generates an invoice and charges the customer. Returns the invoice ID and new balance.`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).requiredOption("--credit-count <number>", `Value indicating a number of credits to add. If \`price_id\` is defined, this value must correspond to a full credit pack for the price.`).option("--amount-excluding-tax <number>", `Custom amount for the added credits. Either \`amount_excluding_tax\` or \`price_id\` must be defined. Expressed in currency's smallest unit.`).option("--price-id <value>", `Price ID used to add credits. The price must be of type \`bundle\`. Either \`amount_excluding_tax\` or \`price_id\` must be defined.`).option("--expires-at <value>", `Expiration date for credits linked to this transaction. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).addHelpText("after", `
42240
+ resource.command("purchase-customer-credits").description(`Purchase credits for a customer. This generates an invoice and charges the customer's card immediately, granting the credits only once paid. Requires a card payment method (otherwise fails with reason \`payment_method_not_supported\`). Returns the invoice ID and new balance.`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).requiredOption("--credit-count <number>", `Value indicating a number of credits to add. If \`price_id\` is defined, this value must correspond to a full credit pack for the price.`).option("--amount-excluding-tax <number>", `Custom amount for the added credits. Either \`amount_excluding_tax\` or \`price_id\` must be defined. Expressed in currency's smallest unit.`).option("--price-id <value>", `Price ID used to add credits. The price must be of type \`bundle\`. Either \`amount_excluding_tax\` or \`price_id\` must be defined.`).option("--expires-at <value>", `Expiration date for credits linked to this transaction. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).addHelpText("after", `
41949
42241
  Examples:
41950
42242
  hyperline customers-credits purchase-customer-credits --id <id> --product-id <productId> --credit-count <credit_count>
41951
42243
  hyperline customers-credits purchase-customer-credits --id <id> --product-id <productId> --credit-count <credit_count> --amount-excluding-tax <amount_excluding_tax> --price-id <price_id>
@@ -42047,7 +42339,7 @@ Examples:
42047
42339
  queryParamKeys: []
42048
42340
  });
42049
42341
  });
42050
- resource.command("update-customer-credit-portal-settings").description(`Enable or disable customer portal credit top-ups for a customer and credit product, with the price configuration (or a custom price) the customer pays.`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).requiredOption("--enabled", `Whether the customer can buy this credit product from the customer portal. Enabling requires a price: \`price_configuration_id\`, \`custom_price_configuration\`, or the price already set. Disabling clears the price and removes the customer's own price.`).option("--price-configuration-id <value>", `ID of one of the credit product's price configurations, in the customer's price book and currency, of type \`bundle\`, \`volume\` or \`bulk\`. Mutually exclusive with \`custom_price_configuration\`.`).option("--custom-price-configuration <json>", `A price of the customer's own, in the customer's currency, replacing any previous one. Same shape as a credit product price configuration. Mutually exclusive with \`price_configuration_id\`.`).addHelpText("after", `
42342
+ resource.command("update-customer-credit-portal-settings").description(`Enable or disable customer portal credit top-ups for a customer and credit product, with the price configuration (or a custom price) the customer pays. Enabling requires the customer's credit balance for the product: create it first (createCustomerCredit, a 0 balance is fine).`).requiredOption("--id <value>", `id parameter`).requiredOption("--product-id <value>", `productId parameter`).requiredOption("--enabled", `Whether the customer can buy this credit product from the customer portal. Enabling requires a price: \`price_configuration_id\`, \`custom_price_configuration\`, or the price already set. Disabling clears the price and removes the customer's own price.`).option("--price-configuration-id <value>", `ID of one of the credit product's price configurations, in the customer's price book and currency, of type \`bundle\`, \`volume\` or \`bulk\`. Mutually exclusive with \`custom_price_configuration\`.`).option("--custom-price-configuration <json>", `A price of the customer's own, in the customer's currency, replacing any previous one. Same shape as a credit product price configuration. Mutually exclusive with \`price_configuration_id\`. It needs at least one price; \`unit_count\` is a whole number of at least 1; \`amount\` is never negative, a \`bundle\` pack is never free, and the price is not free altogether; volume tiers start at 0 and each starts where the previous one ends; bulk tiers are in increasing \`to\` order; only the last tier has \`to: null\`. Otherwise the request fails with reason \`invalid_custom_price\`.`).addHelpText("after", `
42051
42343
  Examples:
42052
42344
  hyperline customers-credits update-customer-credit-portal-settings --id <id> --product-id <productId> --enabled
42053
42345
  hyperline customers-credits update-customer-credit-portal-settings --id <id> --product-id <productId> --enabled --price-configuration-id <price_configuration_id> --custom-price-configuration <custom_price_configuration>
@@ -43204,7 +43496,7 @@ Examples:
43204
43496
  queryParamKeys: []
43205
43497
  });
43206
43498
  });
43207
- resource.command("void").description(`Void an invoice in to_pay status. Automatically generates a corresponding credit note. Optionally send an email notification.`).requiredOption("--id <value>", `id parameter`).option("--send-email", `Indicates if an email for the generated credit note should be sent to the customer.`).addHelpText("after", `
43499
+ resource.command("void").description(`Void an invoice in to_pay status. Automatically generates a corresponding credit note. A zero-priced paid invoice can also be voided, without a credit note. Optionally send an email notification.`).requiredOption("--id <value>", `id parameter`).option("--send-email", `Indicates if an email for the generated credit note should be sent to the customer.`).addHelpText("after", `
43208
43500
  Examples:
43209
43501
  hyperline invoices void --id <id>
43210
43502
  hyperline invoices void --id <id> --send-email
@@ -43513,7 +43805,7 @@ Examples:
43513
43805
  queryParamKeys: []
43514
43806
  });
43515
43807
  });
43516
- resource.command("create-invoicing-entity").description(`Create a new invoicing entity with company details, address, and tax configuration. Used as the sender on invoices.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).requiredOption("--name <value>", `The name of the invoicing entity.`).option("--trade-name <value>", `The trade name of the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).requiredOption("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).requiredOption("--currency <value>", `The currency code that the invoicing entity operates in.`).requiredOption("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--next-invoice-number <number>", `The next invoice number to be used.`).option("--next-credit-note-number <number>", `The next credit note number to be used.`).option("--next-document-number <number>", `The next document number to be used.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--quote-footer <value>", `The footer text to be used in quotes.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity.`).addHelpText("after", `
43808
+ resource.command("create-invoicing-entity").description(`Create a new invoicing entity with company details, address, and tax configuration. Used as the sender on invoices.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).requiredOption("--name <value>", `The name of the invoicing entity.`).option("--trade-name <value>", `The trade name of the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).requiredOption("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).requiredOption("--currency <value>", `The currency code that the invoicing entity operates in.`).requiredOption("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--next-invoice-number <number>", `The next invoice number to be used.`).option("--next-credit-note-number <number>", `The next credit note number to be used.`).option("--next-document-number <number>", `The next document number to be used.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--quote-footer <value>", `The footer text to be used in quotes.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity. Defaults to \`true\`.`).option("--fx-conversion-display-enabled", `Whether the exchange rate and converted amount in the accounting currency are displayed on the invoice PDF when the invoice currency differs from the accounting currency. The conversion data is still stored and returned by the API when disabled. Defaults to \`true\`.`).addHelpText("after", `
43517
43809
  Examples:
43518
43810
  hyperline invoicing-entities create-invoicing-entity --name <name> --country <country> --currency <currency> --accounting-currency <accounting_currency>
43519
43811
  hyperline invoicing-entities create-invoicing-entity --name <name> --country <country> --currency <currency> --accounting-currency <accounting_currency> --is-default --trade-name <trade_name>
@@ -43596,6 +43888,8 @@ Examples:
43596
43888
  args.credit_note_wallet_refund_enabled = true;
43597
43889
  if (opts.standaloneCreditNoteCreationEnabled !== void 0)
43598
43890
  args.standalone_credit_note_creation_enabled = true;
43891
+ if (opts.fxConversionDisplayEnabled !== void 0)
43892
+ args.fx_conversion_display_enabled = true;
43599
43893
  await ctx.execute({
43600
43894
  method: "POST",
43601
43895
  path: "/v1/invoicing-entities",
@@ -43603,7 +43897,7 @@ Examples:
43603
43897
  queryParamKeys: []
43604
43898
  });
43605
43899
  });
43606
- resource.command("update-invoicing-entity").description(`Update an existing invoicing entity's details (address, tax ID, branding, etc.).`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `The name of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).option("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).option("--currency <value>", `The currency code that the invoicing entity operates in.`).option("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity.`).addHelpText("after", `
43900
+ resource.command("update-invoicing-entity").description(`Update an existing invoicing entity's details (address, tax ID, branding, etc.).`).requiredOption("--id <value>", `id parameter`).option("--name <value>", `The name of the invoicing entity.`).option("--registration-number <value>", `The registration number of the invoicing entity.`).option("--tax-id <value>", `The tax identification number of the invoicing entity.`).option("--billing-email <value>", `The billing email address for the invoicing entity.`).option("--timezone <value>", `The timezone the invoicing entity operates in.`).option("--language <value>", `The default language of the invoicing entity.`).option("--is-default", `Flag to indicate if this is the default invoicing entity. If true, it will switch the other existing invoicing entities to non-default.`).option("--address-line1 <value>", `The first line of the address for the invoicing entity.`).option("--address-line2 <value>", `The second line of the address for the invoicing entity.`).option("--zip-code <value>", `The postal code for the invoicing entity's address.`).option("--state <value>", `The state or province of the invoicing entity.`).option("--city <value>", `The city of the invoicing entity.`).option("--country <value>", `The country in which the invoicing entity is registered. It cannot be changed after creation.`).option("--currency <value>", `The currency code that the invoicing entity operates in.`).option("--accounting-currency <value>", `The currency used for accounting purposes.`).option("--invoice-number-pattern <value>", `The pattern used for generating invoice numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--credit-note-number-pattern <value>", `The pattern used for generating credit note numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--document-number-pattern <value>", `The pattern used for generating document numbers. Available dynamic elements: number {number} (mandatory), year {YYYY}, month {MM} and day {DD}.`).option("--default-payment-delay <number>", `The default payment term in days.`).option("--invoice-grace-period-duration <number>", `The grace period duration in days.`).option("--invoice-payment-initiation-delay <number>", `The payment initiation delay in days for the invoices.`).option("--document-payment-initiation-delay <number>", `The payment initiation delay in days for the custom documents.`).option("--invoice-late-fees <value>", `The late fees applicable to the invoices.`).option("--invoice-footer <value>", `The footer text to be used in invoices.`).option("--document-footer <value>", `The footer text to be used in documents. If not specified, the invoice footer will be used.`).option("--logo-url <value>", `URL of the logo to be used in invoices.`).option("--favicon-url <value>", `URL of the logo to be used as favicon.`).option("--brand-color <value>", `Brand color to be used in invoices (hexadecimal color code).`).option("--forced-customer-type <value>", `Forces all customers created under this invoicing entity to have this type. Set to null to allow users to choose.`).option("--credit-note-wallet-refund-enabled", `When enabled and no \`refund_method\` is specified, credit note refunds default to the customer's wallet, including credit notes generated by subscription updates, cancellations, and transitions. An explicit \`refund_method\` always wins. Requires wallets to be enabled at the workspace level.`).option("--standalone-credit-note-creation-enabled", `Whether credit notes without an original invoice can be created under this invoicing entity. Defaults to \`true\`.`).option("--fx-conversion-display-enabled", `Whether the exchange rate and converted amount in the accounting currency are displayed on the invoice PDF when the invoice currency differs from the accounting currency. The conversion data is still stored and returned by the API when disabled. Defaults to \`true\`.`).addHelpText("after", `
43607
43901
  Examples:
43608
43902
  hyperline invoicing-entities update-invoicing-entity --id <id>
43609
43903
  hyperline invoicing-entities update-invoicing-entity --id <id> --name <name> --registration-number <registration_number>
@@ -43678,6 +43972,8 @@ Examples:
43678
43972
  args.credit_note_wallet_refund_enabled = true;
43679
43973
  if (opts.standaloneCreditNoteCreationEnabled !== void 0)
43680
43974
  args.standalone_credit_note_creation_enabled = true;
43975
+ if (opts.fxConversionDisplayEnabled !== void 0)
43976
+ args.fx_conversion_display_enabled = true;
43681
43977
  await ctx.execute({
43682
43978
  method: "PUT",
43683
43979
  path: "/v1/invoicing-entities/{id}",
@@ -44430,7 +44726,7 @@ Quote status.
44430
44726
  - \`draft\`: The quote is a draft.
44431
44727
  - \`approved\`: The quote is approved and ready to be sent to the customer.
44432
44728
  - \`pending_signature\`: The quote is awaiting the customer's signature.
44433
- `).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. If not specified, the Hyperline account owner will be assigned.`).requiredOption("--customer-id <value>", `ID of the customer.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity attached to the quote.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. For subscription quotes, defaults to the computed subscription value if not specified. For one-off quotes, this field is ignored \u2014 the amount is always derived from the linked invoice's \`amount_excluding_tax\`.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
44729
+ `).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. The owner requests approval when the quote is finalized using an API key or finalized during creation. If not specified, the Hyperline account owner will be assigned.`).requiredOption("--customer-id <value>", `ID of the customer.`).option("--invoicing-entity-id <value>", `ID of the invoicing entity attached to the quote.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. For subscription quotes, defaults to the computed subscription value if not specified. For one-off quotes, this field is ignored \u2014 the amount is always derived from the linked invoice's \`amount_excluding_tax\`.`).option("--contract-value <number>", `What the customer pays over the contract, each coupon counted on the invoices it applies to. Computed from the subscription for \`subscription\` and \`subscription_update\` quotes, unless set manually. Not set on \`one_off\` quotes. When specified, overrides the computed value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
44434
44730
 
44435
44731
  - \`all\`: Display all pricing tiers.
44436
44732
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
@@ -44488,6 +44784,8 @@ Examples:
44488
44784
  args.expires_at = opts.expiresAt;
44489
44785
  if (opts.amount !== void 0)
44490
44786
  args.amount = Number(opts.amount);
44787
+ if (opts.contractValue !== void 0)
44788
+ args.contract_value = Number(opts.contractValue);
44491
44789
  if (opts.collectCustomPropertyIds !== void 0)
44492
44790
  args.collect_custom_property_ids = JSON.parse(opts.collectCustomPropertyIds);
44493
44791
  if (opts.contractClauseIds !== void 0)
@@ -44722,7 +45020,7 @@ Examples:
44722
45020
  queryParamKeys: []
44723
45021
  });
44724
45022
  });
44725
- resource.command("update").description(`Update quote-level fields before a quote is finalized. On draft quotes, pass \`subscription\` inline \u2014 the full configuration, not a reference to an existing subscription \u2014 to create or replace the draft subscription configuration, or pass \`invoice\` on a one-off quote to replace the linked draft invoice. For quotes created from \`template_id\`, use this tool for subscription overrides such as dates, contract terms, products, phases, coupons, discounts, prices, seats, and subscription custom properties. Omit \`terms\`, \`comments\`, and \`contract_clause_ids\` unless deliberately overriding template content. Discover product and price configuration IDs with \`get_catalog_context\`.`).requiredOption("--id <value>", `id parameter`).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. Set to \`null\` to clear the manually set value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
45023
+ resource.command("update").description(`Update quote-level fields before a quote is finalized. On draft quotes, pass \`subscription\` inline \u2014 the full configuration, not a reference to an existing subscription \u2014 to create or replace the draft subscription configuration, or pass \`invoice\` on a one-off quote to replace the linked draft invoice. For quotes created from \`template_id\`, use this tool for subscription overrides such as dates, contract terms, products, phases, coupons, discounts, prices, seats, and subscription custom properties. Omit \`terms\`, \`comments\`, and \`contract_clause_ids\` unless deliberately overriding template content. Discover product and price configuration IDs with \`get_catalog_context\`.`).requiredOption("--id <value>", `id parameter`).option("--owner-email <value>", `Email address of the Hyperline user acting as the quote owner. The owner requests approval when the quote is finalized using an API key or finalized during creation.`).option("--catalog-version-id <value>", `ID of a published catalog version to price every product of the quote from, instead of the live products catalog. A product's own \`catalog_version_id\` takes precedence, and explicit \`prices\` always win over both.`).option("--comments <value>", `Custom comments displayed on the quote.`).option("--terms <value>", `Custom quotation terms.`).option("--amount <number>", `Estimated contract value. Set to \`null\` to clear the manually set value.`).option("--contract-value <number>", `What the customer pays over the contract, each coupon counted on the invoices it applies to. Computed from the subscription for \`subscription\` and \`subscription_update\` quotes, unless set manually. Not set on \`one_off\` quotes. When specified, overrides the computed value. Set to \`null\` to go back to the computed value.`).option("--collect-payment-details <value>", `Collect customer payment method mandate during signature flow or not.`).option("--collect-custom-property-ids <json>", `IDs of the customer custom properties required to be filled during the signature flow.`).option("--contract-clause-ids <json>", `IDs of the contract clauses used in the quote terms.`).option("--require-tax-id <value>", `Require the customer to provide a tax ID during the signature flow.`).option("--display-quote-value <value>", `Display the total quote value on the quote.`).option("--display-quote-value-with-tax <value>", `Display the total quote value including tax on the quote. Only applies to \`one_off\` quotes.`).option("--display-taxes <value>", `Display tax breakdown on the quote.`).option("--display-price-tiers <value>", `Controls which price tiers are displayed on the quote.
44726
45024
 
44727
45025
  - \`all\`: Display all pricing tiers.
44728
45026
  - \`matching\`: Only display the tiers used to compute the price based on quantity.
@@ -44776,6 +45074,8 @@ Examples:
44776
45074
  args.expires_at = opts.expiresAt;
44777
45075
  if (opts.amount !== void 0)
44778
45076
  args.amount = Number(opts.amount);
45077
+ if (opts.contractValue !== void 0)
45078
+ args.contract_value = Number(opts.contractValue);
44779
45079
  if (opts.collectCustomPropertyIds !== void 0)
44780
45080
  args.collect_custom_property_ids = JSON.parse(opts.collectCustomPropertyIds);
44781
45081
  if (opts.contractClauseIds !== void 0)
@@ -44831,10 +45131,11 @@ Examples:
44831
45131
  queryParamKeys: ["locale"]
44832
45132
  });
44833
45133
  });
44834
- resource.command("approve").description(`Approve a quote as the account owner. This is a prerequisite before sending the quote for customer signature.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45134
+ resource.command("finalize").description(`Finalize a draft quote. The quote is submitted for approval when approval is required, otherwise it becomes approved and ready to be sent for signature.`).requiredOption("--id <value>", `id parameter`).option("--requester-comment <value>", `Internal comment supplied by the requester for approvers; not displayed on the customer-facing quote.`).addHelpText("after", `
44835
45135
  Examples:
44836
- hyperline quotes approve --id <id>
44837
- hyperline quotes approve --id <id> --output json`).action(async (opts) => {
45136
+ hyperline quotes finalize --id <id>
45137
+ hyperline quotes finalize --id <id> --requester-comment <requester_comment>
45138
+ hyperline quotes finalize --id <id> --output json`).action(async (opts) => {
44838
45139
  const ctx = resource.parent?.opts()._ctx;
44839
45140
  if (!ctx) {
44840
45141
  process.stderr.write("Error: Not authenticated\n");
@@ -44843,17 +45144,20 @@ Examples:
44843
45144
  const args = {};
44844
45145
  if (opts.id !== void 0)
44845
45146
  args.id = opts.id;
45147
+ if (opts.requesterComment !== void 0)
45148
+ args.requester_comment = opts.requesterComment;
44846
45149
  await ctx.execute({
44847
45150
  method: "POST",
44848
- path: "/v1/quotes/{id}/approve",
45151
+ path: "/v1/quotes/{id}/finalize",
44849
45152
  args,
44850
45153
  queryParamKeys: []
44851
45154
  });
44852
45155
  });
44853
- resource.command("finalize").description(`Finalize a draft quote. The quote is submitted for approval when approval is required, otherwise it becomes approved and ready to be sent for signature.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45156
+ resource.command("send").description(`Send a quote by email for customer signature. Requires the quote to be approved first.`).requiredOption("--id <value>", `id parameter`).option("--email <value>", `Email address to which the quote will be sent for signature. Required unless the quote has signers, in which case the email goes to the signers of the current step and this field is ignored.`).option("--message <value>", `Custom message used in the email content.`).addHelpText("after", `
44854
45157
  Examples:
44855
- hyperline quotes finalize --id <id>
44856
- hyperline quotes finalize --id <id> --output json`).action(async (opts) => {
45158
+ hyperline quotes send --id <id>
45159
+ hyperline quotes send --id <id> --email <email> --message <message>
45160
+ hyperline quotes send --id <id> --output json`).action(async (opts) => {
44857
45161
  const ctx = resource.parent?.opts()._ctx;
44858
45162
  if (!ctx) {
44859
45163
  process.stderr.write("Error: Not authenticated\n");
@@ -44862,18 +45166,20 @@ Examples:
44862
45166
  const args = {};
44863
45167
  if (opts.id !== void 0)
44864
45168
  args.id = opts.id;
45169
+ if (opts.email !== void 0)
45170
+ args.email = opts.email;
45171
+ if (opts.message !== void 0)
45172
+ args.message = opts.message;
44865
45173
  await ctx.execute({
44866
45174
  method: "POST",
44867
- path: "/v1/quotes/{id}/finalize",
45175
+ path: "/v1/quotes/{id}/send",
44868
45176
  args,
44869
45177
  queryParamKeys: []
44870
45178
  });
44871
45179
  });
44872
- resource.command("send").description(`Send a quote by email for customer signature. Requires the quote to be approved first.`).requiredOption("--id <value>", `id parameter`).requiredOption("--email <value>", `Email address to which the quote will be sent for signature.`).option("--message <value>", `Custom message used in the email content.`).addHelpText("after", `
45180
+ resource.command("list-quote-signers").description(`List the signers of a quote in signing order, with each signer's status (pending, notified, viewed, signed, declined). An empty list means the quote uses the single-signer flow of \`send_quote\`.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
44873
45181
  Examples:
44874
- hyperline quotes send --id <id> --email <email>
44875
- hyperline quotes send --id <id> --email <email> --message <message>
44876
- hyperline quotes send --id <id> --email <email> --output json`).action(async (opts) => {
45182
+ hyperline quotes list-quote-signers --id <id>`).action(async (opts) => {
44877
45183
  const ctx = resource.parent?.opts()._ctx;
44878
45184
  if (!ctx) {
44879
45185
  process.stderr.write("Error: Not authenticated\n");
@@ -44882,13 +45188,36 @@ Examples:
44882
45188
  const args = {};
44883
45189
  if (opts.id !== void 0)
44884
45190
  args.id = opts.id;
44885
- if (opts.email !== void 0)
44886
- args.email = opts.email;
44887
- if (opts.message !== void 0)
44888
- args.message = opts.message;
44889
45191
  await ctx.execute({
44890
- method: "POST",
44891
- path: "/v1/quotes/{id}/send",
45192
+ method: "GET",
45193
+ path: "/v1/quotes/{id}/signers",
45194
+ args,
45195
+ queryParamKeys: []
45196
+ });
45197
+ });
45198
+ resource.command("set-quote-signers").description(`Replace the full list of signers of a quote. Signers with the same \`step_order\` sign in parallel; steps sign in ascending order. Requires at least one \`external\` signer, and a \`countersigner\` must sign after an external step. Set signers before calling \`send_quote\`, which then emails the signers of the first step and no longer needs \`email\`. Pass an empty list to go back to the single-signer flow.`).requiredOption("--id <value>", `id parameter`).requiredOption("--signers <json>", `
45199
+ Signature workflow of the quote, replaced as a whole.
45200
+
45201
+ Signers sign step by step, in ascending \`step_order\`. Signers sharing a step sign in parallel, and the next step opens once all of them have signed. The workflow needs at least one \`external\` signer, and a \`countersigner\` must sign after the first external step.
45202
+
45203
+ Signers who already signed cannot be removed or moved. Once the quote is out for signature at an electronic signature provider, the workflow can no longer be changed.
45204
+ `).addHelpText("after", `
45205
+ Examples:
45206
+ hyperline quotes set-quote-signers --id <id> --signers <signers>
45207
+ hyperline quotes set-quote-signers --id <id> --signers <signers> --output json`).action(async (opts) => {
45208
+ const ctx = resource.parent?.opts()._ctx;
45209
+ if (!ctx) {
45210
+ process.stderr.write("Error: Not authenticated\n");
45211
+ process.exit(1);
45212
+ }
45213
+ const args = {};
45214
+ if (opts.id !== void 0)
45215
+ args.id = opts.id;
45216
+ if (opts.signers !== void 0)
45217
+ args.signers = JSON.parse(opts.signers);
45218
+ await ctx.execute({
45219
+ method: "PUT",
45220
+ path: "/v1/quotes/{id}/signers",
44892
45221
  args,
44893
45222
  queryParamKeys: []
44894
45223
  });
@@ -44976,6 +45305,48 @@ Examples:
44976
45305
  });
44977
45306
  }
44978
45307
 
45308
+ // build/commands/generated/quotes-approvals.js
45309
+ function registerQuotes_ApprovalsCommands(parent) {
45310
+ const resource = parent.command("quotes-approvals").description("Manage quotes > approvals");
45311
+ resource.command("approve-quote").description(`Approve a quote as the account owner. This is a prerequisite before sending the quote for customer signature.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45312
+ Examples:
45313
+ hyperline quotes-approvals approve-quote --id <id>
45314
+ hyperline quotes-approvals approve-quote --id <id> --output json`).action(async (opts) => {
45315
+ const ctx = resource.parent?.opts()._ctx;
45316
+ if (!ctx) {
45317
+ process.stderr.write("Error: Not authenticated\n");
45318
+ process.exit(1);
45319
+ }
45320
+ const args = {};
45321
+ if (opts.id !== void 0)
45322
+ args.id = opts.id;
45323
+ await ctx.execute({
45324
+ method: "POST",
45325
+ path: "/v1/quotes/{id}/approve",
45326
+ args,
45327
+ queryParamKeys: []
45328
+ });
45329
+ });
45330
+ resource.command("get-quote-approvals").description(`Read quote approvals without submitting the quote. Returns a newest-first array, currently containing one element. Draft and changes-requested quotes return current approval routing in preview mode; other statuses return the recorded request, ordered steps and decisions in execution mode. A null request means no workflow execution was recorded, including automatic and legacy approval.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45331
+ Examples:
45332
+ hyperline quotes-approvals get-quote-approvals --id <id>`).action(async (opts) => {
45333
+ const ctx = resource.parent?.opts()._ctx;
45334
+ if (!ctx) {
45335
+ process.stderr.write("Error: Not authenticated\n");
45336
+ process.exit(1);
45337
+ }
45338
+ const args = {};
45339
+ if (opts.id !== void 0)
45340
+ args.id = opts.id;
45341
+ await ctx.execute({
45342
+ method: "GET",
45343
+ path: "/v1/quotes/{id}/approvals",
45344
+ args,
45345
+ queryParamKeys: []
45346
+ });
45347
+ });
45348
+ }
45349
+
44979
45350
  // build/commands/generated/quotes-templates.js
44980
45351
  function registerQuotes_TemplatesCommands(parent) {
44981
45352
  const resource = parent.command("quotes-templates").description("Manage quotes > templates");
@@ -45175,7 +45546,7 @@ Examples:
45175
45546
  queryParamKeys: []
45176
45547
  });
45177
45548
  });
45178
- resource.command("cancel").description(`Cancel a subscription. Supports immediate or end-of-period cancellation. Optionally specify a cancellation reason.`).requiredOption("--id <value>", `id parameter`).option("--cancel-at <value>", `Subscription cancel date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--reason <value>", `Reason for the cancellation.`).option("--pro-rata", `Indicates if the cancel should refund the customer using a pro rata strategy.`).option("--refund-method <value>", `Override the refund destination for the resulting credit note. When omitted, falls back to the invoicing entity's \`creditNoteWalletRefundEnabled\` setting.`).addHelpText("after", `
45549
+ resource.command("cancel").description(`Cancel a subscription. Supports immediate or end-of-period cancellation. Optionally specify a cancellation reason. On a cancelled subscription with a scheduled reinstatement, call it with an empty body to remove that reinstatement; the subscription stays cancelled.`).requiredOption("--id <value>", `id parameter`).option("--cancel-at <value>", `Subscription cancel date. UTC date time string in the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) format.`).option("--reason <value>", `Reason for the cancellation.`).option("--pro-rata", `Indicates if the cancel should refund the customer using a pro rata strategy.`).option("--refund-method <value>", `Override the refund destination for the resulting credit note. When omitted, falls back to the invoicing entity's \`creditNoteWalletRefundEnabled\` setting.`).addHelpText("after", `
45179
45550
  Examples:
45180
45551
  hyperline subscriptions cancel --id <id>
45181
45552
  hyperline subscriptions cancel --id <id> --cancel-at <cancel_at> --reason <reason>
@@ -45203,9 +45574,10 @@ Examples:
45203
45574
  queryParamKeys: []
45204
45575
  });
45205
45576
  });
45206
- resource.command("reinstate").description(`Reinstate a subscription that is scheduled for cancellation, reverting it to active status.`).requiredOption("--id <value>", `id parameter`).addHelpText("after", `
45577
+ resource.command("reinstate").description(`Reinstate a subscription, reverting it to active status. Works for a subscription scheduled for cancellation and for a fully-cancelled one. For a fully-cancelled subscription, optionally pass reactivate_at (may be in the past, after the cancellation date; a future date schedules it) and invoicing_mode (or charge_line_items for a custom charge) to control how the cancelled gap is invoiced.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date a fully-cancelled subscription resumes from. May be in the past (after the cancellation date). Defaults to now. A future date schedules the reinstatement; calling again with another date reschedules it, and cancelling the subscription removes it. Ignored for scheduled-cancellation reinstatement.`).option("--invoicing-mode <value>", `How the paused/cancelled gap is invoiced when the subscription resumes. \`charge_full_period\`: bill the frozen periods as if never paused. \`prorate_remaining_period\`: skip the gap and bill the prorated remainder from the resume date. \`resume_at_next_cycle\` (default): skip the gap with no catch-up invoice.`).option("--charge-line-items <json>", `Custom charge: bill exactly these lines on an immediate resume instead of applying \`invoicing_mode\`. The lines cover the stopped period (pause or cancellation date to resume date). Requires the \`invoices_create\` permission. Fully-cancelled subscriptions only. Not allowed with a future \`reactivate_at\`.`).addHelpText("after", `
45207
45578
  Examples:
45208
45579
  hyperline subscriptions reinstate --id <id>
45580
+ hyperline subscriptions reinstate --id <id> --reactivate-at <reactivate_at> --invoicing-mode <invoicing_mode>
45209
45581
  hyperline subscriptions reinstate --id <id> --output json`).action(async (opts) => {
45210
45582
  const ctx = resource.parent?.opts()._ctx;
45211
45583
  if (!ctx) {
@@ -45215,6 +45587,12 @@ Examples:
45215
45587
  const args = {};
45216
45588
  if (opts.id !== void 0)
45217
45589
  args.id = opts.id;
45590
+ if (opts.reactivateAt !== void 0)
45591
+ args.reactivate_at = opts.reactivateAt;
45592
+ if (opts.invoicingMode !== void 0)
45593
+ args.invoicing_mode = opts.invoicingMode;
45594
+ if (opts.chargeLineItems !== void 0)
45595
+ args.charge_line_items = JSON.parse(opts.chargeLineItems);
45218
45596
  await ctx.execute({
45219
45597
  method: "POST",
45220
45598
  path: "/v1/subscriptions/{id}/reinstate",
@@ -45263,7 +45641,7 @@ Examples:
45263
45641
  queryParamKeys: []
45264
45642
  });
45265
45643
  });
45266
- resource.command("reactivate").description(`Resume a paused subscription. Optionally pass reactivate_at (may be in the past, after the pause date; a future date schedules it) and invoicing_mode to control how the paused gap is invoiced.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date the subscription resumes from. May be in the past (after the pause date). Defaults to now. A future date schedules the reactivation.`).option("--invoicing-mode <value>", `How the paused/cancelled gap is invoiced when the subscription resumes. \`charge_full_period\`: bill the frozen periods as if never paused. \`prorate_remaining_period\`: skip the gap and bill the prorated remainder from the resume date. \`resume_at_next_cycle\` (default): skip the gap with no catch-up invoice.`).addHelpText("after", `
45644
+ resource.command("reactivate").description(`Resume a paused subscription. Optionally pass reactivate_at (may be in the past, after the pause date; a future date schedules it) and invoicing_mode (or charge_line_items for a custom charge) to control how the paused gap is invoiced.`).requiredOption("--id <value>", `id parameter`).option("--reactivate-at <value>", `Date the subscription resumes from. May be in the past (after the pause date). Defaults to now. A future date schedules the reactivation.`).option("--invoicing-mode <value>", `How the paused/cancelled gap is invoiced when the subscription resumes. \`charge_full_period\`: bill the frozen periods as if never paused. \`prorate_remaining_period\`: skip the gap and bill the prorated remainder from the resume date. \`resume_at_next_cycle\` (default): skip the gap with no catch-up invoice.`).option("--charge-line-items <json>", `Custom charge: bill exactly these lines on an immediate resume instead of applying \`invoicing_mode\`. The lines cover the stopped period (pause or cancellation date to resume date). Requires the \`invoices_create\` permission. Not allowed with a future \`reactivate_at\`.`).addHelpText("after", `
45267
45645
  Examples:
45268
45646
  hyperline subscriptions reactivate --id <id>
45269
45647
  hyperline subscriptions reactivate --id <id> --reactivate-at <reactivate_at> --invoicing-mode <invoicing_mode>
@@ -45280,6 +45658,8 @@ Examples:
45280
45658
  args.reactivate_at = opts.reactivateAt;
45281
45659
  if (opts.invoicingMode !== void 0)
45282
45660
  args.invoicing_mode = opts.invoicingMode;
45661
+ if (opts.chargeLineItems !== void 0)
45662
+ args.charge_line_items = JSON.parse(opts.chargeLineItems);
45283
45663
  await ctx.execute({
45284
45664
  method: "POST",
45285
45665
  path: "/v1/subscriptions/{id}/reactivate",
@@ -46867,6 +47247,7 @@ function registerAllCommands(program2) {
46867
47247
  registerAggregatorsCommands(program2);
46868
47248
  registerAggregators_UsageCommands(program2);
46869
47249
  registerAi_BillingCommands(program2);
47250
+ registerAi_CostsCommands(program2);
46870
47251
  registerAnalyticsCommands(program2);
46871
47252
  registerBank_AccountsCommands(program2);
46872
47253
  registerCompaniesCommands(program2);
@@ -46885,11 +47266,13 @@ function registerAllCommands(program2) {
46885
47266
  registerInvoicesCommands(program2);
46886
47267
  registerInvoices_TransactionsCommands(program2);
46887
47268
  registerInvoicing_EntitiesCommands(program2);
47269
+ registerAi_MonitoringCommands(program2);
46888
47270
  registerPaymentsCommands(program2);
46889
47271
  registerProductsCommands(program2);
46890
47272
  registerPrice_ConfigurationsCommands(program2);
46891
47273
  registerQuotesCommands(program2);
46892
47274
  registerQuotes_TemplatesCommands(program2);
47275
+ registerQuotes_ApprovalsCommands(program2);
46893
47276
  registerSubscriptions_TemplatesCommands(program2);
46894
47277
  registerSubscriptionsCommands(program2);
46895
47278
  registerSubscriptions_TransitionsCommands(program2);
@@ -62900,17 +63283,18 @@ var languages = [
62900
63283
 
62901
63284
  // ../hyperline-i18n/build/locales/de.js
62902
63285
  var de = {
62903
- "accounting.invoicePosted.entryDescription": "Buchungseintrag f\xFCr Rechnung {{invoiceId}}",
62904
- "accounting.transactionSettled.entryDescription": "Zahlungsabwicklung f\xFCr Rechnung {{invoiceId}}",
62905
- "accounting.transactionRefunded.entryDescription": "R\xFCckerstattung f\xFCr Rechnung {{invoiceId}}",
62906
63286
  "accounting.creditNotePosted.entryDescription": "Gutschrift {{creditNoteId}} f\xFCr Rechnung {{invoiceId}}",
62907
- "accounting.standaloneCreditNotePosted.entryDescription": "Gutschrift {{creditNoteId}}",
63287
+ "accounting.invoicePosted.entryDescription": "Buchungseintrag f\xFCr Rechnung {{invoiceId}}",
63288
+ "accounting.revrec.closedPeriodFallbackNote": " (in die n\xE4chste offene Periode gebucht \u2013 Zielperiode geschlossen; urspr\xFCngliches Datum {{originalDate}})",
62908
63289
  "accounting.revrec.creditLineDescription": "Umsatz realisieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62909
63290
  "accounting.revrec.debitLineDescription": "Abgrenzungsposten reduzieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62910
63291
  "accounting.revrec.discountCreditLineDescription": "Erl\xF6sminderung (Rabatt) erfassen \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62911
- "accounting.revrec.closedPeriodFallbackNote": " (in die n\xE4chste offene Periode gebucht \u2013 Zielperiode geschlossen; urspr\xFCngliches Datum {{originalDate}})",
62912
63292
  "accounting.revrec.discountDebitLineDescription": "Abgegrenzten Rabatt reduzieren \u2013 Zeitplan {{scheduleId}}, Zeitraum {{periodDate}}",
62913
63293
  "accounting.revrec.entryDescription": "Umsatzrealisierung f\xFCr Zeitplan {{scheduleId}}, Zeitraum {{periodStart}} - {{periodEnd}}",
63294
+ "accounting.standaloneCreditNotePosted.entryDescription": "Gutschrift {{creditNoteId}}",
63295
+ "accounting.transactionChargedBack.entryDescription": "R\xFCckbuchung f\xFCr Rechnung {{invoiceId}}",
63296
+ "accounting.transactionRefunded.entryDescription": "R\xFCckerstattung f\xFCr Rechnung {{invoiceId}}",
63297
+ "accounting.transactionSettled.entryDescription": "Zahlungsabwicklung f\xFCr Rechnung {{invoiceId}}",
62914
63298
  "creditNotes.refundChargeName": "R\xFCckerstattung f\xFCr die Rechnung",
62915
63299
  "credits.bundleOf": "{{productName}} - Paket mit {{creditCount}} Guthaben",
62916
63300
  "credits.unitsOf": "{{productName}} - {{creditCount}} Guthaben",
@@ -62924,9 +63308,9 @@ var de = {
62924
63308
  "invoices.prorata.paymentForItemFullPeriod": "Zahlung f\xFCr",
62925
63309
  "invoices.prorata.refundForItem": "Anteilig erstatteter Betrag f\xFCr",
62926
63310
  "invoices.prorata.refundForItemFullPeriod": "Erstattung f\xFCr",
62927
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben",
62928
63311
  "subscriptions.closingChargeName": "Abschlussgeb\xFChr f\xFCr das Abonnement",
62929
63312
  "subscriptions.correction": "Vorperiodische Anpassung",
63313
+ "subscriptions.reinstatementRechargeName": "Wiederherstellungsgeb\xFChr f\xFCr den stornierten Zeitraum",
62930
63314
  "subscriptions.updates.addCoupon": "Gutschein hinzuf\xFCgen {{couponName}}",
62931
63315
  "subscriptions.updates.addProduct": "{{productName}} hinzuf\xFCgen",
62932
63316
  "subscriptions.updates.removeCoupon": "Gutschein entfernen {{couponName}}",
@@ -62941,7 +63325,8 @@ var de = {
62941
63325
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Betrag von {{amount}} (mit einer minimal zugesicherten Anzahl von {{committedCount}}) f\xFCr den anteiligen Zeitraum nicht in Rechnung gestellt",
62942
63326
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Diese Position wurde f\xFCr den anteiligen Zeitraum in Rechnung gestellt",
62943
63327
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Betrag von {{amount}} f\xFCr den anteiligen Zeitraum nicht in Rechnung gestellt",
62944
- "subscriptions.updates.updatePrices": "Preise f\xFCr {{productName}} aktualisieren"
63328
+ "subscriptions.updates.updatePrices": "Preise f\xFCr {{productName}} aktualisieren",
63329
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 abgelaufenes Guthaben"
62945
63330
  };
62946
63331
 
62947
63332
  // ../hyperline-i18n/build/locales/en.js
@@ -62958,6 +63343,7 @@ var en = {
62958
63343
  "invoices.prorata.refundForItemFullPeriod": "Refund for",
62959
63344
  "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 expired balance",
62960
63345
  "subscriptions.closingChargeName": "Closing fee for subscription",
63346
+ "subscriptions.reinstatementRechargeName": "Reinstatement recharge of canceled period",
62961
63347
  "subscriptions.correction": "Adjustment previous period",
62962
63348
  "subscriptions.updates.addCoupon": "Add coupon {{couponName}}",
62963
63349
  "subscriptions.updates.addProduct": "Add {{productName}}",
@@ -62977,6 +63363,7 @@ var en = {
62977
63363
  "accounting.invoicePosted.entryDescription": "Posting entry for Invoice {{invoiceId}} issued",
62978
63364
  "accounting.transactionSettled.entryDescription": "Payment settlement for Invoice {{invoiceId}}",
62979
63365
  "accounting.transactionRefunded.entryDescription": "Refund for Invoice {{invoiceId}}",
63366
+ "accounting.transactionChargedBack.entryDescription": "Chargeback for Invoice {{invoiceId}}",
62980
63367
  "accounting.creditNotePosted.entryDescription": "Credit note {{creditNoteId}} for Invoice {{invoiceId}}",
62981
63368
  "accounting.standaloneCreditNotePosted.entryDescription": "Credit note {{creditNoteId}}",
62982
63369
  "accounting.revrec.entryDescription": "Revenue recognition for schedule {{scheduleId}}, period {{periodStart}} - {{periodEnd}}",
@@ -62992,17 +63379,18 @@ var en = {
62992
63379
 
62993
63380
  // ../hyperline-i18n/build/locales/es.js
62994
63381
  var es = {
62995
- "accounting.invoicePosted.entryDescription": "Asiento contable para la factura {{invoiceId}}",
62996
- "accounting.transactionSettled.entryDescription": "Liquidaci\xF3n de pago para la factura {{invoiceId}}",
62997
- "accounting.transactionRefunded.entryDescription": "Reembolso de la factura {{invoiceId}}",
62998
63382
  "accounting.creditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}} para la factura {{invoiceId}}",
62999
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63383
+ "accounting.invoicePosted.entryDescription": "Asiento contable para la factura {{invoiceId}}",
63384
+ "accounting.revrec.closedPeriodFallbackNote": " (registrado en el pr\xF3ximo per\xEDodo abierto \u2014 per\xEDodo contable de destino cerrado; fecha original {{originalDate}})",
63000
63385
  "accounting.revrec.creditLineDescription": "Reconocer ingresos \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63001
63386
  "accounting.revrec.debitLineDescription": "Disminuci\xF3n de ingresos diferidos \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63002
63387
  "accounting.revrec.discountCreditLineDescription": "Reconocer contra-ingresos (descuento) \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63003
- "accounting.revrec.closedPeriodFallbackNote": " (registrado en el pr\xF3ximo per\xEDodo abierto \u2014 per\xEDodo contable de destino cerrado; fecha original {{originalDate}})",
63004
63388
  "accounting.revrec.discountDebitLineDescription": "Disminuci\xF3n de descuento diferido \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63005
63389
  "accounting.revrec.entryDescription": "Reconocimiento de ingresos para el cronograma {{scheduleId}}, per\xEDodo {{periodStart}} - {{periodEnd}}",
63390
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63391
+ "accounting.transactionChargedBack.entryDescription": "Contracargo de la factura {{invoiceId}}",
63392
+ "accounting.transactionRefunded.entryDescription": "Reembolso de la factura {{invoiceId}}",
63393
+ "accounting.transactionSettled.entryDescription": "Liquidaci\xF3n de pago para la factura {{invoiceId}}",
63006
63394
  "creditNotes.refundChargeName": "Reembolso por factura",
63007
63395
  "credits.bundleOf": "{{productName}} - Paquete de {{creditCount}} cr\xE9ditos",
63008
63396
  "credits.unitsOf": "{{productName}} - {{creditCount}} cr\xE9ditos",
@@ -63016,9 +63404,9 @@ var es = {
63016
63404
  "invoices.prorata.paymentForItemFullPeriod": "Pago por",
63017
63405
  "invoices.prorata.refundForItem": "Reembolso prorrateado por",
63018
63406
  "invoices.prorata.refundForItemFullPeriod": "Reembolso por",
63019
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado",
63020
63407
  "subscriptions.closingChargeName": "Cargo por cierre de suscripci\xF3n",
63021
63408
  "subscriptions.correction": "Ajuste del periodo anterior",
63409
+ "subscriptions.reinstatementRechargeName": "Recarga de reinstalaci\xF3n del per\xEDodo cancelado",
63022
63410
  "subscriptions.updates.addCoupon": "A\xF1adir cup\xF3n {{couponName}}",
63023
63411
  "subscriptions.updates.addProduct": "A\xF1adir {{productName}}",
63024
63412
  "subscriptions.updates.removeCoupon": "Eliminar cup\xF3n {{couponName}}",
@@ -63033,22 +63421,24 @@ var es = {
63033
63421
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Importe de {{amount}} (con un m\xEDnimo comprometido de {{committedCount}}) no facturado para el per\xEDodo prorrateado",
63034
63422
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta l\xEDnea ha sido facturada para el per\xEDodo prorrateado",
63035
63423
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importe de {{amount}} no facturado para el per\xEDodo prorrateado",
63036
- "subscriptions.updates.updatePrices": "Actualizar precios para {{productName}}"
63424
+ "subscriptions.updates.updatePrices": "Actualizar precios para {{productName}}",
63425
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo caducado"
63037
63426
  };
63038
63427
 
63039
63428
  // ../hyperline-i18n/build/locales/fr.js
63040
63429
  var fr = {
63430
+ "accounting.creditNotePosted.entryDescription": "Avoir {{creditNoteId}} pour la facture {{invoiceId}}",
63431
+ "accounting.invoicePosted.entryDescription": "\xC9criture de comptabilisation pour la facture {{invoiceId}}",
63432
+ "accounting.revrec.closedPeriodFallbackNote": " (comptabilis\xE9 sur la prochaine p\xE9riode ouverte \u2014 p\xE9riode comptable cible cl\xF4tur\xE9e ; date d'origine {{originalDate}})",
63041
63433
  "accounting.revrec.creditLineDescription": "Reconnaissance du chiffre d'affaires \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
63042
63434
  "accounting.revrec.debitLineDescription": "Diminution des produits constat\xE9s d'avance \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
63043
63435
  "accounting.revrec.discountCreditLineDescription": "Reconnaissance du contre-revenu (remise) \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
63044
- "accounting.revrec.closedPeriodFallbackNote": " (comptabilis\xE9 sur la prochaine p\xE9riode ouverte \u2014 p\xE9riode comptable cible cl\xF4tur\xE9e ; date d'origine {{originalDate}})",
63045
63436
  "accounting.revrec.discountDebitLineDescription": "Diminution des remises diff\xE9r\xE9es \u2013 \xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodDate}}",
63046
- "accounting.invoicePosted.entryDescription": "\xC9criture de comptabilisation pour la facture {{invoiceId}}",
63047
- "accounting.transactionSettled.entryDescription": "R\xE8glement de la facture {{invoiceId}}",
63048
- "accounting.transactionRefunded.entryDescription": "Remboursement de la facture {{invoiceId}}",
63049
- "accounting.creditNotePosted.entryDescription": "Avoir {{creditNoteId}} pour la facture {{invoiceId}}",
63050
- "accounting.standaloneCreditNotePosted.entryDescription": "Avoir {{creditNoteId}}",
63051
63437
  "accounting.revrec.entryDescription": "Reconnaissance du chiffre d'affaires pour l'\xE9ch\xE9ancier {{scheduleId}}, p\xE9riode {{periodStart}} - {{periodEnd}}",
63438
+ "accounting.standaloneCreditNotePosted.entryDescription": "Avoir {{creditNoteId}}",
63439
+ "accounting.transactionChargedBack.entryDescription": "R\xE9trofacturation de la facture {{invoiceId}}",
63440
+ "accounting.transactionRefunded.entryDescription": "Remboursement de la facture {{invoiceId}}",
63441
+ "accounting.transactionSettled.entryDescription": "R\xE8glement de la facture {{invoiceId}}",
63052
63442
  "creditNotes.refundChargeName": "Remboursement pour facture",
63053
63443
  "credits.bundleOf": "{{productName}} - Pack de {{creditCount}} cr\xE9dits",
63054
63444
  "credits.unitsOf": "{{productName}} - {{creditCount}} cr\xE9dits",
@@ -63062,9 +63452,9 @@ var fr = {
63062
63452
  "invoices.prorata.paymentForItemFullPeriod": "Paiement pour",
63063
63453
  "invoices.prorata.refundForItem": "Remboursement au prorata pour",
63064
63454
  "invoices.prorata.refundForItemFullPeriod": "Remboursement pour",
63065
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9",
63066
63455
  "subscriptions.closingChargeName": "Frais de cl\xF4ture pour abonnement",
63067
63456
  "subscriptions.correction": "Ajustement p\xE9riode pr\xE9c\xE9dente",
63457
+ "subscriptions.reinstatementRechargeName": "Recharge de r\xE9tablissement de la p\xE9riode annul\xE9e",
63068
63458
  "subscriptions.updates.addCoupon": "Ajout du coupon {{couponName}}",
63069
63459
  "subscriptions.updates.addProduct": "Ajout {{productName}}",
63070
63460
  "subscriptions.updates.removeCoupon": "Retrait du coupon {{couponName}}",
@@ -63079,22 +63469,24 @@ var fr = {
63079
63469
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Montant de {{amount}} (avec un minimum engag\xE9 de {{committedCount}}) non factur\xE9 pour la p\xE9riode proratis\xE9e",
63080
63470
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Cette ligne a \xE9t\xE9 factur\xE9e pour la p\xE9riode proratis\xE9e",
63081
63471
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Montant de {{amount}} non factur\xE9 pour la p\xE9riode proratis\xE9e",
63082
- "subscriptions.updates.updatePrices": "Mise \xE0 jour des prix pour {{productName}}"
63472
+ "subscriptions.updates.updatePrices": "Mise \xE0 jour des prix pour {{productName}}",
63473
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 solde expir\xE9"
63083
63474
  };
63084
63475
 
63085
63476
  // ../hyperline-i18n/build/locales/it.js
63086
63477
  var it = {
63087
- "accounting.invoicePosted.entryDescription": "Registrazione contabile per la fattura {{invoiceId}}",
63088
- "accounting.transactionSettled.entryDescription": "Regolamento pagamento per la fattura {{invoiceId}}",
63089
- "accounting.transactionRefunded.entryDescription": "Rimborso per la fattura {{invoiceId}}",
63090
63478
  "accounting.creditNotePosted.entryDescription": "Nota di credito {{creditNoteId}} per la fattura {{invoiceId}}",
63091
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota di credito {{creditNoteId}}",
63479
+ "accounting.invoicePosted.entryDescription": "Registrazione contabile per la fattura {{invoiceId}}",
63480
+ "accounting.revrec.closedPeriodFallbackNote": " (registrato nel prossimo periodo aperto \u2014 periodo contabile di destinazione chiuso; data originale {{originalDate}})",
63092
63481
  "accounting.revrec.creditLineDescription": "Riconoscere i ricavi \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
63093
63482
  "accounting.revrec.debitLineDescription": "Diminuzione dei ricavi differiti \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
63094
63483
  "accounting.revrec.discountCreditLineDescription": "Riconoscere il contra-ricavo (sconto) \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
63095
- "accounting.revrec.closedPeriodFallbackNote": " (registrato nel prossimo periodo aperto \u2014 periodo contabile di destinazione chiuso; data originale {{originalDate}})",
63096
63484
  "accounting.revrec.discountDebitLineDescription": "Diminuzione dello sconto differito \u2013 programma {{scheduleId}}, periodo {{periodDate}}",
63097
63485
  "accounting.revrec.entryDescription": "Riconoscimento dei ricavi per il programma {{scheduleId}}, periodo {{periodStart}} - {{periodEnd}}",
63486
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota di credito {{creditNoteId}}",
63487
+ "accounting.transactionChargedBack.entryDescription": "Riaddebito per la fattura {{invoiceId}}",
63488
+ "accounting.transactionRefunded.entryDescription": "Rimborso per la fattura {{invoiceId}}",
63489
+ "accounting.transactionSettled.entryDescription": "Regolamento pagamento per la fattura {{invoiceId}}",
63098
63490
  "creditNotes.refundChargeName": "Rimborso per fattura",
63099
63491
  "credits.bundleOf": "{{productName}} - Pacchetto di {{creditCount}} crediti",
63100
63492
  "credits.unitsOf": "{{productName}} - {{creditCount}} crediti",
@@ -63108,9 +63500,9 @@ var it = {
63108
63500
  "invoices.prorata.paymentForItemFullPeriod": "Pagamento per",
63109
63501
  "invoices.prorata.refundForItem": "Rimborso proporzionale per",
63110
63502
  "invoices.prorata.refundForItemFullPeriod": "Rimborso per",
63111
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto",
63112
63503
  "subscriptions.closingChargeName": "Costo di chiusura per abbonamento",
63113
63504
  "subscriptions.correction": "Correzione periodo precedente",
63505
+ "subscriptions.reinstatementRechargeName": "Ricarica di reintegrazione del periodo annullato",
63114
63506
  "subscriptions.updates.addCoupon": "Aggiungi coupon {{couponName}}",
63115
63507
  "subscriptions.updates.addProduct": "Aggiungi {{productName}}",
63116
63508
  "subscriptions.updates.removeCoupon": "Rimuovi coupon {{couponName}}",
@@ -63125,14 +63517,30 @@ var it = {
63125
63517
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Importo di {{amount}} (con un minimo impegnato di {{committedCount}}) non fatturato per il periodo proporzionato",
63126
63518
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Questa voce \xE8 stata fatturata per il periodo proporzionato",
63127
63519
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Importo di {{amount}} non fatturato per il periodo proporzionato",
63128
- "subscriptions.updates.updatePrices": "Aggiorna prezzi per {{productName}}"
63520
+ "subscriptions.updates.updatePrices": "Aggiorna prezzi per {{productName}}",
63521
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo scaduto"
63129
63522
  };
63130
63523
 
63131
63524
  // ../hyperline-i18n/build/locales/lt.js
63132
63525
  var lt = {
63526
+ "accounting.creditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}} s\u0105skaitai fakt\u016Brai {{invoiceId}}",
63527
+ "accounting.invoicePosted.entryDescription": "I\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros {{invoiceId}} registravimo \u012Fra\u0161as",
63528
+ "accounting.revrec.closedPeriodFallbackNote": " (u\u017Eregistruota kitame atvirame laikotarpyje, nes tikslinis apskaitos laikotarpis u\u017Edarytas; pradin\u0117 data {{originalDate}})",
63529
+ "accounting.revrec.creditLineDescription": "Pajam\u0173 pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63530
+ "accounting.revrec.debitLineDescription": "Atid\u0117t\u0173j\u0173 pajam\u0173 suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63531
+ "accounting.revrec.discountCreditLineDescription": "Pajamas ma\u017Einan\u010Dios sumos (nuolaidos) pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63532
+ "accounting.revrec.discountDebitLineDescription": "Atid\u0117tosios nuolaidos suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63533
+ "accounting.revrec.entryDescription": "Pajam\u0173 pripa\u017Einimas pagal grafik\u0105 {{scheduleId}}, laikotarpis {{periodStart}}\u2013{{periodEnd}}",
63534
+ "accounting.standaloneCreditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}}",
63535
+ "accounting.transactionChargedBack.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} u\u017Egin\u010Dyto mok\u0117jimo gr\u0105\u017Einimas",
63536
+ "accounting.transactionRefunded.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} gr\u0105\u017Einimas",
63537
+ "accounting.transactionSettled.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} mok\u0117jimo sudengimas",
63133
63538
  "creditNotes.refundChargeName": "S\u0105skaitos fakt\u016Bros gr\u0105\u017Einimas",
63134
63539
  "credits.bundleOf": "{{productName}} \u2013 {{creditCount}} kredit\u0173 paketas",
63135
63540
  "credits.unitsOf": "{{productName}} \u2013 {{creditCount}} kredit\u0173",
63541
+ "einvoicing.paymentFromWallet": "Mok\u0117jimas i\u0161 pinigin\u0117s",
63542
+ "einvoicing.paymentProcessed": "Mok\u0117jimas apdorotas",
63543
+ "einvoicing.paymentReceived": "Mok\u0117jimas gautas",
63136
63544
  "invoices.outstandingProduct.description": "Neapmok\u0117ta {{date}} i\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma",
63137
63545
  "invoices.outstandingProduct.descriptionPeriod": "Neapmok\u0117ta s\u0105skaitos fakt\u016Bros{{invoiceNumber}} suma u\u017E laikotarp\u012F nuo {{periodStart}} iki {{periodEnd}}",
63138
63546
  "invoices.outstandingProduct.name": "Neapmok\u0117tas likutis",
@@ -63140,53 +63548,41 @@ var lt = {
63140
63548
  "invoices.prorata.paymentForItemFullPeriod": "Mok\u0117jimas u\u017E",
63141
63549
  "invoices.prorata.refundForItem": "Proporcingas gr\u0105\u017Einimas u\u017E",
63142
63550
  "invoices.prorata.refundForItemFullPeriod": "Gr\u0105\u017Einimas u\u017E",
63143
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis",
63144
63551
  "subscriptions.closingChargeName": "Prenumeratos u\u017Ebaigimo mokestis",
63145
63552
  "subscriptions.correction": "Ankstesnio laikotarpio koregavimas",
63553
+ "subscriptions.reinstatementRechargeName": "Atnaujinimo \u012Fmokos u\u017E nutraukt\u0105 laikotarp\u012F",
63146
63554
  "subscriptions.updates.addCoupon": "Prid\u0117ti kupon\u0105 {{couponName}}",
63147
63555
  "subscriptions.updates.addProduct": "Prid\u0117ti {{productName}}",
63148
63556
  "subscriptions.updates.removeCoupon": "Pa\u0161alinti kupon\u0105 {{couponName}}",
63149
63557
  "subscriptions.updates.removeProduct": "Pa\u0161alinti {{productName}}",
63150
63558
  "subscriptions.updates.unit": "vnt.",
63151
- "subscriptions.updates.updatePrices": "Atnaujinti {{productName}} kainas",
63152
63559
  "subscriptions.updates.updateCount": "Atnaujinti {{productName}} kiek\u012F ({{previousCount}} \u2192 {{newCount}} {{unit}})",
63153
- "subscriptions.updates.updateCount.description.prorata.committed.invoiced": "Pritaikytas minimalus \u012Fsipareigotas {{committedCount}} kiekis.",
63154
- "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma (minimalus \u012Fsipareigotas kiekis \u2013 {{committedCount}})",
63155
- "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 proporcingam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63156
- "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63157
63560
  "subscriptions.updates.updateCount.description.full.committed.invoiced": "Visam laikotarpiui pritaikytas minimalus \u012Fsipareigotas {{committedCount}} kiekis.",
63158
63561
  "subscriptions.updates.updateCount.description.full.committed.not_invoiced": "Visam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma (minimalus \u012Fsipareigotas kiekis \u2013 {{committedCount}})",
63159
63562
  "subscriptions.updates.updateCount.description.full.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 visam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63160
63563
  "subscriptions.updates.updateCount.description.full.not_committed.not_invoiced": "Visam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63161
- "accounting.invoicePosted.entryDescription": "I\u0161ra\u0161ytos s\u0105skaitos fakt\u016Bros {{invoiceId}} registravimo \u012Fra\u0161as",
63162
- "accounting.transactionSettled.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} mok\u0117jimo sudengimas",
63163
- "accounting.transactionRefunded.entryDescription": "S\u0105skaitos fakt\u016Bros {{invoiceId}} gr\u0105\u017Einimas",
63164
- "accounting.creditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}} s\u0105skaitai fakt\u016Brai {{invoiceId}}",
63165
- "accounting.standaloneCreditNotePosted.entryDescription": "Kreditin\u0117 s\u0105skaita {{creditNoteId}}",
63166
- "accounting.revrec.entryDescription": "Pajam\u0173 pripa\u017Einimas pagal grafik\u0105 {{scheduleId}}, laikotarpis {{periodStart}}\u2013{{periodEnd}}",
63167
- "accounting.revrec.debitLineDescription": "Atid\u0117t\u0173j\u0173 pajam\u0173 suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63168
- "accounting.revrec.creditLineDescription": "Pajam\u0173 pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63169
- "accounting.revrec.discountDebitLineDescription": "Atid\u0117tosios nuolaidos suma\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63170
- "accounting.revrec.discountCreditLineDescription": "Pajamas ma\u017Einan\u010Dios sumos (nuolaidos) pripa\u017Einimas \u2013 grafikas {{scheduleId}}, laikotarpis {{periodDate}}",
63171
- "accounting.revrec.closedPeriodFallbackNote": " (u\u017Eregistruota kitame atvirame laikotarpyje, nes tikslinis apskaitos laikotarpis u\u017Edarytas; pradin\u0117 data {{originalDate}})",
63172
- "einvoicing.paymentProcessed": "Mok\u0117jimas apdorotas",
63173
- "einvoicing.paymentReceived": "Mok\u0117jimas gautas",
63174
- "einvoicing.paymentFromWallet": "Mok\u0117jimas i\u0161 pinigin\u0117s"
63564
+ "subscriptions.updates.updateCount.description.prorata.committed.invoiced": "Pritaikytas minimalus \u012Fsipareigotas {{committedCount}} kiekis.",
63565
+ "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma (minimalus \u012Fsipareigotas kiekis \u2013 {{committedCount}})",
63566
+ "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "U\u017E \u0161i\u0105 eilut\u0119 proporcingam laikotarpiui s\u0105skaita fakt\u016Bra i\u0161ra\u0161yta",
63567
+ "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Proporcingam laikotarpiui nei\u0161ra\u0161yta {{amount}} suma",
63568
+ "subscriptions.updates.updatePrices": "Atnaujinti {{productName}} kainas",
63569
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 nebegaliojantis likutis"
63175
63570
  };
63176
63571
 
63177
63572
  // ../hyperline-i18n/build/locales/nl.js
63178
63573
  var nl = {
63179
- "accounting.invoicePosted.entryDescription": "Boekingsregel voor factuur {{invoiceId}}",
63180
- "accounting.transactionSettled.entryDescription": "Betalingsafwikkeling voor factuur {{invoiceId}}",
63181
- "accounting.transactionRefunded.entryDescription": "Terugbetaling voor factuur {{invoiceId}}",
63182
63574
  "accounting.creditNotePosted.entryDescription": "Creditnota {{creditNoteId}} voor factuur {{invoiceId}}",
63183
- "accounting.standaloneCreditNotePosted.entryDescription": "Creditnota {{creditNoteId}}",
63575
+ "accounting.invoicePosted.entryDescription": "Boekingsregel voor factuur {{invoiceId}}",
63576
+ "accounting.revrec.closedPeriodFallbackNote": " (geboekt in de volgende open periode \u2014 doelboekingsperiode gesloten; oorspronkelijke datum {{originalDate}})",
63184
63577
  "accounting.revrec.creditLineDescription": "Omzet erkennen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
63185
63578
  "accounting.revrec.debitLineDescription": "Uitgestelde omzet verlagen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
63186
63579
  "accounting.revrec.discountCreditLineDescription": "Omzetvermindering (korting) erkennen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
63187
- "accounting.revrec.closedPeriodFallbackNote": " (geboekt in de volgende open periode \u2014 doelboekingsperiode gesloten; oorspronkelijke datum {{originalDate}})",
63188
63580
  "accounting.revrec.discountDebitLineDescription": "Uitgestelde korting verlagen \u2013 schema {{scheduleId}}, periode {{periodDate}}",
63189
63581
  "accounting.revrec.entryDescription": "Omzeterkenning voor schema {{scheduleId}}, periode {{periodStart}} - {{periodEnd}}",
63582
+ "accounting.standaloneCreditNotePosted.entryDescription": "Creditnota {{creditNoteId}}",
63583
+ "accounting.transactionChargedBack.entryDescription": "Terugboeking voor factuur {{invoiceId}}",
63584
+ "accounting.transactionRefunded.entryDescription": "Terugbetaling voor factuur {{invoiceId}}",
63585
+ "accounting.transactionSettled.entryDescription": "Betalingsafwikkeling voor factuur {{invoiceId}}",
63190
63586
  "creditNotes.refundChargeName": "Terugbetaling voor factuur",
63191
63587
  "credits.bundleOf": "{{productName}} - Bundel van {{creditCount}} credits",
63192
63588
  "credits.unitsOf": "{{productName}} - {{creditCount}} credits",
@@ -63200,9 +63596,9 @@ var nl = {
63200
63596
  "invoices.prorata.paymentForItemFullPeriod": "Betaling voor",
63201
63597
  "invoices.prorata.refundForItem": "Gedeeltelijke terugbetaling voor",
63202
63598
  "invoices.prorata.refundForItemFullPeriod": "Terugbetaling voor",
63203
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo",
63204
63599
  "subscriptions.closingChargeName": "Afsluitkosten voor abonnement",
63205
63600
  "subscriptions.correction": "Aanpassing vorige periode",
63601
+ "subscriptions.reinstatementRechargeName": "Herstelkosten van geannuleerde periode",
63206
63602
  "subscriptions.updates.addCoupon": "Coupon toevoegen {{couponName}}",
63207
63603
  "subscriptions.updates.addProduct": "{{productName}} toevoegen",
63208
63604
  "subscriptions.updates.removeCoupon": "Coupon verwijderen {{couponName}}",
@@ -63217,22 +63613,24 @@ var nl = {
63217
63613
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Bedrag van {{amount}} (met een minimaal toegezegd aantal van {{committedCount}}) niet gefactureerd voor de geproportioneerde periode",
63218
63614
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Deze regel is gefactureerd voor de geproportioneerde periode",
63219
63615
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Bedrag van {{amount}} niet gefactureerd voor de geproportioneerde periode",
63220
- "subscriptions.updates.updatePrices": "Prijzen bijwerken voor {{productName}}"
63616
+ "subscriptions.updates.updatePrices": "Prijzen bijwerken voor {{productName}}",
63617
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 verlopen saldo"
63221
63618
  };
63222
63619
 
63223
63620
  // ../hyperline-i18n/build/locales/pl.js
63224
63621
  var pl = {
63225
- "accounting.invoicePosted.entryDescription": "Zapis ksi\u0119gowy dla faktury {{invoiceId}}",
63226
- "accounting.transactionSettled.entryDescription": "Rozliczenie p\u0142atno\u015Bci dla faktury {{invoiceId}}",
63227
- "accounting.transactionRefunded.entryDescription": "Zwrot za faktur\u0119 {{invoiceId}}",
63228
63622
  "accounting.creditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}} dla faktury {{invoiceId}}",
63229
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}}",
63623
+ "accounting.invoicePosted.entryDescription": "Zapis ksi\u0119gowy dla faktury {{invoiceId}}",
63624
+ "accounting.revrec.closedPeriodFallbackNote": " (zaksi\u0119gowano w nast\u0119pnym otwartym okresie \u2014 docelowy okres ksi\u0119gowy zamkni\u0119ty; pierwotna data {{originalDate}})",
63230
63625
  "accounting.revrec.creditLineDescription": "Rozpoznanie przychodu \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
63231
63626
  "accounting.revrec.debitLineDescription": "Zmniejszenie przychod\xF3w przysz\u0142ych okres\xF3w \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
63232
63627
  "accounting.revrec.discountCreditLineDescription": "Rozpoznanie kontra-przychodu (rabat) \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
63233
- "accounting.revrec.closedPeriodFallbackNote": " (zaksi\u0119gowano w nast\u0119pnym otwartym okresie \u2014 docelowy okres ksi\u0119gowy zamkni\u0119ty; pierwotna data {{originalDate}})",
63234
63628
  "accounting.revrec.discountDebitLineDescription": "Zmniejszenie odroczonego rabatu \u2013 harmonogram {{scheduleId}}, okres {{periodDate}}",
63235
63629
  "accounting.revrec.entryDescription": "Rozpoznanie przychodu dla harmonogramu {{scheduleId}}, okres {{periodStart}} - {{periodEnd}}",
63630
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota kredytowa {{creditNoteId}}",
63631
+ "accounting.transactionChargedBack.entryDescription": "Obci\u0105\u017Cenie zwrotne za faktur\u0119 {{invoiceId}}",
63632
+ "accounting.transactionRefunded.entryDescription": "Zwrot za faktur\u0119 {{invoiceId}}",
63633
+ "accounting.transactionSettled.entryDescription": "Rozliczenie p\u0142atno\u015Bci dla faktury {{invoiceId}}",
63236
63634
  "creditNotes.refundChargeName": "Zwrot za faktur\u0119",
63237
63635
  "credits.bundleOf": "{{productName}} - Pakiet {{creditCount}} kredyt\xF3w",
63238
63636
  "credits.unitsOf": "{{productName}} - {{creditCount}} kredyt\xF3w",
@@ -63246,9 +63644,9 @@ var pl = {
63246
63644
  "invoices.prorata.paymentForItemFullPeriod": "P\u0142atno\u015B\u0107 za",
63247
63645
  "invoices.prorata.refundForItem": "Zwrot proporcjonalny za",
63248
63646
  "invoices.prorata.refundForItemFullPeriod": "Zwrot za",
63249
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo",
63250
63647
  "subscriptions.closingChargeName": "Op\u0142ata za zamkni\u0119cie subskrypcji",
63251
63648
  "subscriptions.correction": "Korekta poprzedniego okresu",
63649
+ "subscriptions.reinstatementRechargeName": "Op\u0142ata za przywr\xF3cenie anulowanego okresu",
63252
63650
  "subscriptions.updates.addCoupon": "Dodaj kupon {{couponName}}",
63253
63651
  "subscriptions.updates.addProduct": "Dodaj {{productName}}",
63254
63652
  "subscriptions.updates.removeCoupon": "Usu\u0144 kupon {{couponName}}",
@@ -63263,22 +63661,24 @@ var pl = {
63263
63661
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Kwota {{amount}} (z minimaln\u0105 zobowi\u0105zan\u0105 ilo\u015Bci\u0105 {{committedCount}}) niefakturowana za okres proporcjonalny",
63264
63662
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Ta pozycja zosta\u0142a zafakturowana za okres proporcjonalny",
63265
63663
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Kwota {{amount}} niefakturowana za okres proporcjonalny",
63266
- "subscriptions.updates.updatePrices": "Aktualizuj ceny dla {{productName}}"
63664
+ "subscriptions.updates.updatePrices": "Aktualizuj ceny dla {{productName}}",
63665
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 wygas\u0142e saldo"
63267
63666
  };
63268
63667
 
63269
63668
  // ../hyperline-i18n/build/locales/pt.js
63270
63669
  var pt = {
63271
- "accounting.invoicePosted.entryDescription": "Lan\xE7amento cont\xE1bil para a fatura {{invoiceId}}",
63272
- "accounting.transactionSettled.entryDescription": "Liquida\xE7\xE3o de pagamento para a fatura {{invoiceId}}",
63273
- "accounting.transactionRefunded.entryDescription": "Reembolso da fatura {{invoiceId}}",
63274
63670
  "accounting.creditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}} para a fatura {{invoiceId}}",
63275
- "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63671
+ "accounting.invoicePosted.entryDescription": "Lan\xE7amento cont\xE1bil para a fatura {{invoiceId}}",
63672
+ "accounting.revrec.closedPeriodFallbackNote": " (lan\xE7ado no pr\xF3ximo per\xEDodo aberto \u2014 per\xEDodo cont\xE1bil de destino fechado; data original {{originalDate}})",
63276
63673
  "accounting.revrec.creditLineDescription": "Reconhecer receita \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63277
63674
  "accounting.revrec.debitLineDescription": "Diminui\xE7\xE3o da receita diferida \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63278
63675
  "accounting.revrec.discountCreditLineDescription": "Reconhecer contra-receita (desconto) \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63279
- "accounting.revrec.closedPeriodFallbackNote": " (lan\xE7ado no pr\xF3ximo per\xEDodo aberto \u2014 per\xEDodo cont\xE1bil de destino fechado; data original {{originalDate}})",
63280
63676
  "accounting.revrec.discountDebitLineDescription": "Diminui\xE7\xE3o do desconto diferido \u2013 cronograma {{scheduleId}}, per\xEDodo {{periodDate}}",
63281
63677
  "accounting.revrec.entryDescription": "Reconhecimento de receita para o cronograma {{scheduleId}}, per\xEDodo {{periodStart}} - {{periodEnd}}",
63678
+ "accounting.standaloneCreditNotePosted.entryDescription": "Nota de cr\xE9dito {{creditNoteId}}",
63679
+ "accounting.transactionChargedBack.entryDescription": "Estorno da fatura {{invoiceId}}",
63680
+ "accounting.transactionRefunded.entryDescription": "Reembolso da fatura {{invoiceId}}",
63681
+ "accounting.transactionSettled.entryDescription": "Liquida\xE7\xE3o de pagamento para a fatura {{invoiceId}}",
63282
63682
  "creditNotes.refundChargeName": "Reembolso pela fatura",
63283
63683
  "credits.bundleOf": "{{productName}} - Pacote de {{creditCount}} cr\xE9ditos",
63284
63684
  "credits.unitsOf": "{{productName}} - {{creditCount}} cr\xE9ditos",
@@ -63292,9 +63692,9 @@ var pt = {
63292
63692
  "invoices.prorata.paymentForItemFullPeriod": "Pagamento por",
63293
63693
  "invoices.prorata.refundForItem": "Reembolso proporcional por",
63294
63694
  "invoices.prorata.refundForItemFullPeriod": "Reembolso por",
63295
- "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado",
63296
63695
  "subscriptions.closingChargeName": "Taxa de encerramento da assinatura",
63297
63696
  "subscriptions.correction": "Ajuste do per\xEDodo anterior",
63697
+ "subscriptions.reinstatementRechargeName": "Recarga de reintegra\xE7\xE3o do per\xEDodo cancelado",
63298
63698
  "subscriptions.updates.addCoupon": "Adicionar cupom {{couponName}}",
63299
63699
  "subscriptions.updates.addProduct": "Adicionar {{productName}}",
63300
63700
  "subscriptions.updates.removeCoupon": "Remover cupom {{couponName}}",
@@ -63309,7 +63709,8 @@ var pt = {
63309
63709
  "subscriptions.updates.updateCount.description.prorata.committed.not_invoiced": "Valor de {{amount}} (com um m\xEDnimo comprometido de {{committedCount}}) n\xE3o faturado para o per\xEDodo proporcional",
63310
63710
  "subscriptions.updates.updateCount.description.prorata.not_committed.invoiced": "Esta linha foi faturada para o per\xEDodo proporcional",
63311
63711
  "subscriptions.updates.updateCount.description.prorata.not_committed.not_invoiced": "Valor de {{amount}} n\xE3o faturado para o per\xEDodo proporcional",
63312
- "subscriptions.updates.updatePrices": "Atualizar pre\xE7os para {{productName}}"
63712
+ "subscriptions.updates.updatePrices": "Atualizar pre\xE7os para {{productName}}",
63713
+ "wallets.expiredBalanceInvoiceLineName": "{{walletName}} \u2013 saldo expirado"
63313
63714
  };
63314
63715
 
63315
63716
  // ../hyperline-i18n/build/language.js