@metronome/sdk 3.0.0 → 3.4.1

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.
Files changed (347) hide show
  1. package/CHANGELOG.md +142 -0
  2. package/README.md +2 -2
  3. package/client.d.mts +5 -3
  4. package/client.d.mts.map +1 -1
  5. package/client.d.ts +5 -3
  6. package/client.d.ts.map +1 -1
  7. package/client.js +26 -10
  8. package/client.js.map +1 -1
  9. package/client.mjs +26 -10
  10. package/client.mjs.map +1 -1
  11. package/internal/parse.d.mts.map +1 -1
  12. package/internal/parse.d.ts.map +1 -1
  13. package/internal/parse.js +5 -0
  14. package/internal/parse.js.map +1 -1
  15. package/internal/parse.mjs +5 -0
  16. package/internal/parse.mjs.map +1 -1
  17. package/internal/tslib.js +17 -17
  18. package/internal/utils/query.d.mts +2 -0
  19. package/internal/utils/query.d.mts.map +1 -0
  20. package/internal/utils/query.d.ts +2 -0
  21. package/internal/utils/query.d.ts.map +1 -0
  22. package/internal/utils/query.js +10 -0
  23. package/internal/utils/query.js.map +1 -0
  24. package/internal/utils/query.mjs +6 -0
  25. package/internal/utils/query.mjs.map +1 -0
  26. package/internal/utils.d.mts +1 -0
  27. package/internal/utils.d.ts +1 -0
  28. package/internal/utils.js +1 -0
  29. package/internal/utils.js.map +1 -1
  30. package/internal/utils.mjs +1 -0
  31. package/package.json +12 -1
  32. package/resources/shared.d.mts +49 -24
  33. package/resources/shared.d.mts.map +1 -1
  34. package/resources/shared.d.ts +49 -24
  35. package/resources/shared.d.ts.map +1 -1
  36. package/resources/v1/alerts.d.mts +3 -0
  37. package/resources/v1/alerts.d.mts.map +1 -1
  38. package/resources/v1/alerts.d.ts +3 -0
  39. package/resources/v1/alerts.d.ts.map +1 -1
  40. package/resources/v1/alerts.js +3 -0
  41. package/resources/v1/alerts.js.map +1 -1
  42. package/resources/v1/alerts.mjs +3 -0
  43. package/resources/v1/alerts.mjs.map +1 -1
  44. package/resources/v1/audit-logs.d.mts +3 -0
  45. package/resources/v1/audit-logs.d.mts.map +1 -1
  46. package/resources/v1/audit-logs.d.ts +3 -0
  47. package/resources/v1/audit-logs.d.ts.map +1 -1
  48. package/resources/v1/audit-logs.js +3 -0
  49. package/resources/v1/audit-logs.js.map +1 -1
  50. package/resources/v1/audit-logs.mjs +3 -0
  51. package/resources/v1/audit-logs.mjs.map +1 -1
  52. package/resources/v1/billable-metrics.d.mts +3 -0
  53. package/resources/v1/billable-metrics.d.mts.map +1 -1
  54. package/resources/v1/billable-metrics.d.ts +3 -0
  55. package/resources/v1/billable-metrics.d.ts.map +1 -1
  56. package/resources/v1/billable-metrics.js +3 -0
  57. package/resources/v1/billable-metrics.js.map +1 -1
  58. package/resources/v1/billable-metrics.mjs +3 -0
  59. package/resources/v1/billable-metrics.mjs.map +1 -1
  60. package/resources/v1/contracts/contracts.d.mts +134 -14
  61. package/resources/v1/contracts/contracts.d.mts.map +1 -1
  62. package/resources/v1/contracts/contracts.d.ts +134 -14
  63. package/resources/v1/contracts/contracts.d.ts.map +1 -1
  64. package/resources/v1/contracts/contracts.js +69 -0
  65. package/resources/v1/contracts/contracts.js.map +1 -1
  66. package/resources/v1/contracts/contracts.mjs +69 -0
  67. package/resources/v1/contracts/contracts.mjs.map +1 -1
  68. package/resources/v1/contracts/index.d.mts +1 -1
  69. package/resources/v1/contracts/index.d.mts.map +1 -1
  70. package/resources/v1/contracts/index.d.ts +1 -1
  71. package/resources/v1/contracts/index.d.ts.map +1 -1
  72. package/resources/v1/contracts/index.js.map +1 -1
  73. package/resources/v1/contracts/index.mjs.map +1 -1
  74. package/resources/v1/contracts/named-schedules.d.mts +3 -0
  75. package/resources/v1/contracts/named-schedules.d.mts.map +1 -1
  76. package/resources/v1/contracts/named-schedules.d.ts +3 -0
  77. package/resources/v1/contracts/named-schedules.d.ts.map +1 -1
  78. package/resources/v1/contracts/named-schedules.js +3 -0
  79. package/resources/v1/contracts/named-schedules.js.map +1 -1
  80. package/resources/v1/contracts/named-schedules.mjs +3 -0
  81. package/resources/v1/contracts/named-schedules.mjs.map +1 -1
  82. package/resources/v1/contracts/products.d.mts +3 -0
  83. package/resources/v1/contracts/products.d.mts.map +1 -1
  84. package/resources/v1/contracts/products.d.ts +3 -0
  85. package/resources/v1/contracts/products.d.ts.map +1 -1
  86. package/resources/v1/contracts/products.js +3 -0
  87. package/resources/v1/contracts/products.js.map +1 -1
  88. package/resources/v1/contracts/products.mjs +3 -0
  89. package/resources/v1/contracts/products.mjs.map +1 -1
  90. package/resources/v1/contracts/rate-cards/named-schedules.d.mts +3 -0
  91. package/resources/v1/contracts/rate-cards/named-schedules.d.mts.map +1 -1
  92. package/resources/v1/contracts/rate-cards/named-schedules.d.ts +3 -0
  93. package/resources/v1/contracts/rate-cards/named-schedules.d.ts.map +1 -1
  94. package/resources/v1/contracts/rate-cards/named-schedules.js +3 -0
  95. package/resources/v1/contracts/rate-cards/named-schedules.js.map +1 -1
  96. package/resources/v1/contracts/rate-cards/named-schedules.mjs +3 -0
  97. package/resources/v1/contracts/rate-cards/named-schedules.mjs.map +1 -1
  98. package/resources/v1/contracts/rate-cards/product-orders.d.mts +3 -0
  99. package/resources/v1/contracts/rate-cards/product-orders.d.mts.map +1 -1
  100. package/resources/v1/contracts/rate-cards/product-orders.d.ts +3 -0
  101. package/resources/v1/contracts/rate-cards/product-orders.d.ts.map +1 -1
  102. package/resources/v1/contracts/rate-cards/product-orders.js +3 -0
  103. package/resources/v1/contracts/rate-cards/product-orders.js.map +1 -1
  104. package/resources/v1/contracts/rate-cards/product-orders.mjs +3 -0
  105. package/resources/v1/contracts/rate-cards/product-orders.mjs.map +1 -1
  106. package/resources/v1/contracts/rate-cards/rate-cards.d.mts +3 -0
  107. package/resources/v1/contracts/rate-cards/rate-cards.d.mts.map +1 -1
  108. package/resources/v1/contracts/rate-cards/rate-cards.d.ts +3 -0
  109. package/resources/v1/contracts/rate-cards/rate-cards.d.ts.map +1 -1
  110. package/resources/v1/contracts/rate-cards/rate-cards.js +3 -0
  111. package/resources/v1/contracts/rate-cards/rate-cards.js.map +1 -1
  112. package/resources/v1/contracts/rate-cards/rate-cards.mjs +3 -0
  113. package/resources/v1/contracts/rate-cards/rate-cards.mjs.map +1 -1
  114. package/resources/v1/contracts/rate-cards/rates.d.mts +6 -3
  115. package/resources/v1/contracts/rate-cards/rates.d.mts.map +1 -1
  116. package/resources/v1/contracts/rate-cards/rates.d.ts +6 -3
  117. package/resources/v1/contracts/rate-cards/rates.d.ts.map +1 -1
  118. package/resources/v1/contracts/rate-cards/rates.js +3 -0
  119. package/resources/v1/contracts/rate-cards/rates.js.map +1 -1
  120. package/resources/v1/contracts/rate-cards/rates.mjs +3 -0
  121. package/resources/v1/contracts/rate-cards/rates.mjs.map +1 -1
  122. package/resources/v1/credit-grants.d.mts +3 -0
  123. package/resources/v1/credit-grants.d.mts.map +1 -1
  124. package/resources/v1/credit-grants.d.ts +3 -0
  125. package/resources/v1/credit-grants.d.ts.map +1 -1
  126. package/resources/v1/credit-grants.js +3 -0
  127. package/resources/v1/credit-grants.js.map +1 -1
  128. package/resources/v1/credit-grants.mjs +3 -0
  129. package/resources/v1/credit-grants.mjs.map +1 -1
  130. package/resources/v1/custom-fields.d.mts +3 -0
  131. package/resources/v1/custom-fields.d.mts.map +1 -1
  132. package/resources/v1/custom-fields.d.ts +3 -0
  133. package/resources/v1/custom-fields.d.ts.map +1 -1
  134. package/resources/v1/custom-fields.js +3 -0
  135. package/resources/v1/custom-fields.js.map +1 -1
  136. package/resources/v1/custom-fields.mjs +3 -0
  137. package/resources/v1/custom-fields.mjs.map +1 -1
  138. package/resources/v1/customers/alerts.d.mts +3 -0
  139. package/resources/v1/customers/alerts.d.mts.map +1 -1
  140. package/resources/v1/customers/alerts.d.ts +3 -0
  141. package/resources/v1/customers/alerts.d.ts.map +1 -1
  142. package/resources/v1/customers/alerts.js +3 -0
  143. package/resources/v1/customers/alerts.js.map +1 -1
  144. package/resources/v1/customers/alerts.mjs +3 -0
  145. package/resources/v1/customers/alerts.mjs.map +1 -1
  146. package/resources/v1/customers/billing-config.d.mts +3 -0
  147. package/resources/v1/customers/billing-config.d.mts.map +1 -1
  148. package/resources/v1/customers/billing-config.d.ts +3 -0
  149. package/resources/v1/customers/billing-config.d.ts.map +1 -1
  150. package/resources/v1/customers/billing-config.js +3 -0
  151. package/resources/v1/customers/billing-config.js.map +1 -1
  152. package/resources/v1/customers/billing-config.mjs +3 -0
  153. package/resources/v1/customers/billing-config.mjs.map +1 -1
  154. package/resources/v1/customers/commits.d.mts +3 -0
  155. package/resources/v1/customers/commits.d.mts.map +1 -1
  156. package/resources/v1/customers/commits.d.ts +3 -0
  157. package/resources/v1/customers/commits.d.ts.map +1 -1
  158. package/resources/v1/customers/commits.js +3 -0
  159. package/resources/v1/customers/commits.js.map +1 -1
  160. package/resources/v1/customers/commits.mjs +3 -0
  161. package/resources/v1/customers/commits.mjs.map +1 -1
  162. package/resources/v1/customers/credits.d.mts +3 -0
  163. package/resources/v1/customers/credits.d.mts.map +1 -1
  164. package/resources/v1/customers/credits.d.ts +3 -0
  165. package/resources/v1/customers/credits.d.ts.map +1 -1
  166. package/resources/v1/customers/credits.js +3 -0
  167. package/resources/v1/customers/credits.js.map +1 -1
  168. package/resources/v1/customers/credits.mjs +3 -0
  169. package/resources/v1/customers/credits.mjs.map +1 -1
  170. package/resources/v1/customers/customers.d.mts +77 -1
  171. package/resources/v1/customers/customers.d.mts.map +1 -1
  172. package/resources/v1/customers/customers.d.ts +77 -1
  173. package/resources/v1/customers/customers.d.ts.map +1 -1
  174. package/resources/v1/customers/customers.js +53 -0
  175. package/resources/v1/customers/customers.js.map +1 -1
  176. package/resources/v1/customers/customers.mjs +53 -0
  177. package/resources/v1/customers/customers.mjs.map +1 -1
  178. package/resources/v1/customers/index.d.mts +1 -1
  179. package/resources/v1/customers/index.d.mts.map +1 -1
  180. package/resources/v1/customers/index.d.ts +1 -1
  181. package/resources/v1/customers/index.d.ts.map +1 -1
  182. package/resources/v1/customers/index.js.map +1 -1
  183. package/resources/v1/customers/index.mjs.map +1 -1
  184. package/resources/v1/customers/invoices.d.mts +20 -12
  185. package/resources/v1/customers/invoices.d.mts.map +1 -1
  186. package/resources/v1/customers/invoices.d.ts +20 -12
  187. package/resources/v1/customers/invoices.d.ts.map +1 -1
  188. package/resources/v1/customers/invoices.js +3 -0
  189. package/resources/v1/customers/invoices.js.map +1 -1
  190. package/resources/v1/customers/invoices.mjs +3 -0
  191. package/resources/v1/customers/invoices.mjs.map +1 -1
  192. package/resources/v1/customers/named-schedules.d.mts +3 -0
  193. package/resources/v1/customers/named-schedules.d.mts.map +1 -1
  194. package/resources/v1/customers/named-schedules.d.ts +3 -0
  195. package/resources/v1/customers/named-schedules.d.ts.map +1 -1
  196. package/resources/v1/customers/named-schedules.js +3 -0
  197. package/resources/v1/customers/named-schedules.js.map +1 -1
  198. package/resources/v1/customers/named-schedules.mjs +3 -0
  199. package/resources/v1/customers/named-schedules.mjs.map +1 -1
  200. package/resources/v1/customers/plans.d.mts +3 -0
  201. package/resources/v1/customers/plans.d.mts.map +1 -1
  202. package/resources/v1/customers/plans.d.ts +3 -0
  203. package/resources/v1/customers/plans.d.ts.map +1 -1
  204. package/resources/v1/customers/plans.js +3 -0
  205. package/resources/v1/customers/plans.js.map +1 -1
  206. package/resources/v1/customers/plans.mjs +3 -0
  207. package/resources/v1/customers/plans.mjs.map +1 -1
  208. package/resources/v1/dashboards.d.mts +3 -0
  209. package/resources/v1/dashboards.d.mts.map +1 -1
  210. package/resources/v1/dashboards.d.ts +3 -0
  211. package/resources/v1/dashboards.d.ts.map +1 -1
  212. package/resources/v1/dashboards.js +3 -0
  213. package/resources/v1/dashboards.js.map +1 -1
  214. package/resources/v1/dashboards.mjs +3 -0
  215. package/resources/v1/dashboards.mjs.map +1 -1
  216. package/resources/v1/index.d.mts +3 -2
  217. package/resources/v1/index.d.mts.map +1 -1
  218. package/resources/v1/index.d.ts +3 -2
  219. package/resources/v1/index.d.ts.map +1 -1
  220. package/resources/v1/index.js +3 -1
  221. package/resources/v1/index.js.map +1 -1
  222. package/resources/v1/index.mjs +1 -0
  223. package/resources/v1/index.mjs.map +1 -1
  224. package/resources/v1/invoices.d.mts +3 -0
  225. package/resources/v1/invoices.d.mts.map +1 -1
  226. package/resources/v1/invoices.d.ts +3 -0
  227. package/resources/v1/invoices.d.ts.map +1 -1
  228. package/resources/v1/invoices.js +3 -0
  229. package/resources/v1/invoices.js.map +1 -1
  230. package/resources/v1/invoices.mjs +3 -0
  231. package/resources/v1/invoices.mjs.map +1 -1
  232. package/resources/v1/packages.d.mts +2352 -0
  233. package/resources/v1/packages.d.mts.map +1 -0
  234. package/resources/v1/packages.d.ts +2352 -0
  235. package/resources/v1/packages.d.ts.map +1 -0
  236. package/resources/v1/packages.js +160 -0
  237. package/resources/v1/packages.js.map +1 -0
  238. package/resources/v1/packages.mjs +156 -0
  239. package/resources/v1/packages.mjs.map +1 -0
  240. package/resources/v1/plans.d.mts +3 -0
  241. package/resources/v1/plans.d.mts.map +1 -1
  242. package/resources/v1/plans.d.ts +3 -0
  243. package/resources/v1/plans.d.ts.map +1 -1
  244. package/resources/v1/plans.js +3 -0
  245. package/resources/v1/plans.js.map +1 -1
  246. package/resources/v1/plans.mjs +3 -0
  247. package/resources/v1/plans.mjs.map +1 -1
  248. package/resources/v1/pricing-units.d.mts +3 -0
  249. package/resources/v1/pricing-units.d.mts.map +1 -1
  250. package/resources/v1/pricing-units.d.ts +3 -0
  251. package/resources/v1/pricing-units.d.ts.map +1 -1
  252. package/resources/v1/pricing-units.js +3 -0
  253. package/resources/v1/pricing-units.js.map +1 -1
  254. package/resources/v1/pricing-units.mjs +3 -0
  255. package/resources/v1/pricing-units.mjs.map +1 -1
  256. package/resources/v1/services.d.mts +3 -0
  257. package/resources/v1/services.d.mts.map +1 -1
  258. package/resources/v1/services.d.ts +3 -0
  259. package/resources/v1/services.d.ts.map +1 -1
  260. package/resources/v1/services.js +3 -0
  261. package/resources/v1/services.js.map +1 -1
  262. package/resources/v1/services.mjs +3 -0
  263. package/resources/v1/services.mjs.map +1 -1
  264. package/resources/v1/settings/billing-providers.d.mts +3 -0
  265. package/resources/v1/settings/billing-providers.d.mts.map +1 -1
  266. package/resources/v1/settings/billing-providers.d.ts +3 -0
  267. package/resources/v1/settings/billing-providers.d.ts.map +1 -1
  268. package/resources/v1/settings/billing-providers.js +3 -0
  269. package/resources/v1/settings/billing-providers.js.map +1 -1
  270. package/resources/v1/settings/billing-providers.mjs +3 -0
  271. package/resources/v1/settings/billing-providers.mjs.map +1 -1
  272. package/resources/v1/settings/settings.d.mts +3 -0
  273. package/resources/v1/settings/settings.d.mts.map +1 -1
  274. package/resources/v1/settings/settings.d.ts +3 -0
  275. package/resources/v1/settings/settings.d.ts.map +1 -1
  276. package/resources/v1/settings/settings.js +3 -0
  277. package/resources/v1/settings/settings.js.map +1 -1
  278. package/resources/v1/settings/settings.mjs +3 -0
  279. package/resources/v1/settings/settings.mjs.map +1 -1
  280. package/resources/v1/usage.d.mts +81 -12
  281. package/resources/v1/usage.d.mts.map +1 -1
  282. package/resources/v1/usage.d.ts +81 -12
  283. package/resources/v1/usage.d.ts.map +1 -1
  284. package/resources/v1/usage.js +37 -11
  285. package/resources/v1/usage.js.map +1 -1
  286. package/resources/v1/usage.mjs +37 -11
  287. package/resources/v1/usage.mjs.map +1 -1
  288. package/resources/v1/v1.d.mts +8 -4
  289. package/resources/v1/v1.d.mts.map +1 -1
  290. package/resources/v1/v1.d.ts +8 -4
  291. package/resources/v1/v1.d.ts.map +1 -1
  292. package/resources/v1/v1.js +4 -0
  293. package/resources/v1/v1.js.map +1 -1
  294. package/resources/v1/v1.mjs +4 -0
  295. package/resources/v1/v1.mjs.map +1 -1
  296. package/resources/v2/contracts.d.mts +45 -7
  297. package/resources/v2/contracts.d.mts.map +1 -1
  298. package/resources/v2/contracts.d.ts +45 -7
  299. package/resources/v2/contracts.d.ts.map +1 -1
  300. package/resources/v2/contracts.js +1 -4
  301. package/resources/v2/contracts.js.map +1 -1
  302. package/resources/v2/contracts.mjs +1 -4
  303. package/resources/v2/contracts.mjs.map +1 -1
  304. package/src/client.ts +37 -15
  305. package/src/internal/parse.ts +6 -0
  306. package/src/internal/utils/query.ts +7 -0
  307. package/src/internal/utils.ts +1 -0
  308. package/src/resources/shared.ts +51 -25
  309. package/src/resources/v1/alerts.ts +3 -0
  310. package/src/resources/v1/audit-logs.ts +3 -0
  311. package/src/resources/v1/billable-metrics.ts +3 -0
  312. package/src/resources/v1/contracts/contracts.ts +151 -13
  313. package/src/resources/v1/contracts/index.ts +2 -0
  314. package/src/resources/v1/contracts/named-schedules.ts +3 -0
  315. package/src/resources/v1/contracts/products.ts +3 -0
  316. package/src/resources/v1/contracts/rate-cards/named-schedules.ts +3 -0
  317. package/src/resources/v1/contracts/rate-cards/product-orders.ts +3 -0
  318. package/src/resources/v1/contracts/rate-cards/rate-cards.ts +3 -0
  319. package/src/resources/v1/contracts/rate-cards/rates.ts +6 -3
  320. package/src/resources/v1/credit-grants.ts +3 -0
  321. package/src/resources/v1/custom-fields.ts +3 -0
  322. package/src/resources/v1/customers/alerts.ts +3 -0
  323. package/src/resources/v1/customers/billing-config.ts +3 -0
  324. package/src/resources/v1/customers/commits.ts +3 -0
  325. package/src/resources/v1/customers/credits.ts +3 -0
  326. package/src/resources/v1/customers/customers.ts +89 -0
  327. package/src/resources/v1/customers/index.ts +2 -0
  328. package/src/resources/v1/customers/invoices.ts +21 -12
  329. package/src/resources/v1/customers/named-schedules.ts +3 -0
  330. package/src/resources/v1/customers/plans.ts +3 -0
  331. package/src/resources/v1/dashboards.ts +3 -0
  332. package/src/resources/v1/index.ts +19 -0
  333. package/src/resources/v1/invoices.ts +3 -0
  334. package/src/resources/v1/packages.ts +3057 -0
  335. package/src/resources/v1/plans.ts +3 -0
  336. package/src/resources/v1/pricing-units.ts +3 -0
  337. package/src/resources/v1/services.ts +3 -0
  338. package/src/resources/v1/settings/billing-providers.ts +3 -0
  339. package/src/resources/v1/settings/settings.ts +3 -0
  340. package/src/resources/v1/usage.ts +80 -12
  341. package/src/resources/v1/v1.ts +42 -0
  342. package/src/resources/v2/contracts.ts +55 -7
  343. package/src/version.ts +1 -1
  344. package/version.d.mts +1 -1
  345. package/version.d.ts +1 -1
  346. package/version.js +1 -1
  347. package/version.mjs +1 -1
package/src/client.ts CHANGED
@@ -11,7 +11,7 @@ import type { APIResponseProps } from './internal/parse';
11
11
  import { getPlatformHeaders } from './internal/detect-platform';
12
12
  import * as Shims from './internal/shims';
13
13
  import * as Opts from './internal/request-options';
14
- import * as qs from './internal/qs';
14
+ import { stringifyQuery } from './internal/utils/query';
15
15
  import { VERSION } from './version';
16
16
  import * as Errors from './core/error';
17
17
  import * as Pagination from './core/pagination';
@@ -233,8 +233,8 @@ export class Metronome {
233
233
  return buildHeaders([{ Authorization: `Bearer ${this.bearerToken}` }]);
234
234
  }
235
235
 
236
- protected stringifyQuery(query: Record<string, unknown>): string {
237
- return qs.stringify(query, { arrayFormat: 'comma' });
236
+ protected stringifyQuery(query: object | Record<string, unknown>): string {
237
+ return stringifyQuery(query);
238
238
  }
239
239
 
240
240
  private getUserAgent(): string {
@@ -266,12 +266,13 @@ export class Metronome {
266
266
  : new URL(baseURL + (baseURL.endsWith('/') && path.startsWith('/') ? path.slice(1) : path));
267
267
 
268
268
  const defaultQuery = this.defaultQuery();
269
- if (!isEmptyObj(defaultQuery)) {
270
- query = { ...defaultQuery, ...query };
269
+ const pathQuery = Object.fromEntries(url.searchParams);
270
+ if (!isEmptyObj(defaultQuery) || !isEmptyObj(pathQuery)) {
271
+ query = { ...pathQuery, ...defaultQuery, ...query };
271
272
  }
272
273
 
273
274
  if (typeof query === 'object' && query && !Array.isArray(query)) {
274
- url.search = this.stringifyQuery(query as Record<string, unknown>);
275
+ url.search = this.stringifyQuery(query);
275
276
  }
276
277
 
277
278
  return url.toString();
@@ -455,7 +456,7 @@ export class Metronome {
455
456
  loggerFor(this).info(`${responseInfo} - ${retryMessage}`);
456
457
 
457
458
  const errText = await response.text().catch((err: any) => castToError(err).message);
458
- const errJSON = safeJSON(errText);
459
+ const errJSON = safeJSON(errText) as any;
459
460
  const errMessage = errJSON ? undefined : errText;
460
461
 
461
462
  loggerFor(this).debug(
@@ -492,9 +493,14 @@ export class Metronome {
492
493
  getAPIList<Item, PageClass extends Pagination.AbstractPage<Item> = Pagination.AbstractPage<Item>>(
493
494
  path: string,
494
495
  Page: new (...args: any[]) => PageClass,
495
- opts?: RequestOptions,
496
+ opts?: PromiseOrValue<RequestOptions>,
496
497
  ): Pagination.PagePromise<PageClass, Item> {
497
- return this.requestAPIList(Page, { method: 'get', path, ...opts });
498
+ return this.requestAPIList(
499
+ Page,
500
+ opts && 'then' in opts ?
501
+ opts.then((opts) => ({ method: 'get', path, ...opts }))
502
+ : { method: 'get', path, ...opts },
503
+ );
498
504
  }
499
505
 
500
506
  requestAPIList<
@@ -502,7 +508,7 @@ export class Metronome {
502
508
  PageClass extends Pagination.AbstractPage<Item> = Pagination.AbstractPage<Item>,
503
509
  >(
504
510
  Page: new (...args: ConstructorParameters<typeof Pagination.AbstractPage>) => PageClass,
505
- options: FinalRequestOptions,
511
+ options: PromiseOrValue<FinalRequestOptions>,
506
512
  ): Pagination.PagePromise<PageClass, Item> {
507
513
  const request = this.makeRequest(options, null, undefined);
508
514
  return new Pagination.PagePromise<PageClass, Item>(this as any as Metronome, request, Page);
@@ -515,9 +521,10 @@ export class Metronome {
515
521
  controller: AbortController,
516
522
  ): Promise<Response> {
517
523
  const { signal, method, ...options } = init || {};
518
- if (signal) signal.addEventListener('abort', () => controller.abort());
524
+ const abort = this._makeAbort(controller);
525
+ if (signal) signal.addEventListener('abort', abort, { once: true });
519
526
 
520
- const timeout = setTimeout(() => controller.abort(), ms);
527
+ const timeout = setTimeout(abort, ms);
521
528
 
522
529
  const isReadableBody =
523
530
  ((globalThis as any).ReadableStream && options.body instanceof (globalThis as any).ReadableStream) ||
@@ -594,9 +601,9 @@ export class Metronome {
594
601
  }
595
602
  }
596
603
 
597
- // If the API asks us to wait a certain amount of time (and it's a reasonable amount),
598
- // just do what it says, but otherwise calculate a default
599
- if (!(timeoutMillis && 0 <= timeoutMillis && timeoutMillis < 60 * 1000)) {
604
+ // If the API asks us to wait a certain amount of time, just do what it
605
+ // says, but otherwise calculate a default
606
+ if (timeoutMillis === undefined) {
600
607
  const maxRetries = options.maxRetries ?? this.maxRetries;
601
608
  timeoutMillis = this.calculateDefaultRetryTimeoutMillis(retriesRemaining, maxRetries);
602
609
  }
@@ -684,6 +691,12 @@ export class Metronome {
684
691
  return headers.values;
685
692
  }
686
693
 
694
+ private _makeAbort(controller: AbortController) {
695
+ // note: we can't just inline this method inside `fetchWithTimeout()` because then the closure
696
+ // would capture all request options, and cause a memory leak.
697
+ return () => controller.abort();
698
+ }
699
+
687
700
  private buildBody({ options: { body, headers: rawHeaders } }: { options: FinalRequestOptions }): {
688
701
  bodyHeaders: HeadersLike;
689
702
  body: BodyInit | undefined;
@@ -716,6 +729,14 @@ export class Metronome {
716
729
  (Symbol.iterator in body && 'next' in body && typeof body.next === 'function'))
717
730
  ) {
718
731
  return { bodyHeaders: undefined, body: Shims.ReadableStreamFrom(body as AsyncIterable<Uint8Array>) };
732
+ } else if (
733
+ typeof body === 'object' &&
734
+ headers.values.get('content-type') === 'application/x-www-form-urlencoded'
735
+ ) {
736
+ return {
737
+ bodyHeaders: { 'content-type': 'application/x-www-form-urlencoded' },
738
+ body: this.stringifyQuery(body),
739
+ };
719
740
  } else {
720
741
  return this.#encoder({ body, headers });
721
742
  }
@@ -771,6 +792,7 @@ export declare namespace Metronome {
771
792
 
772
793
  export { V1 as V1 };
773
794
 
795
+ export type BalanceFilter = API.BalanceFilter;
774
796
  export type BaseThresholdCommit = API.BaseThresholdCommit;
775
797
  export type BaseUsageFilter = API.BaseUsageFilter;
776
798
  export type Commit = API.Commit;
@@ -29,6 +29,12 @@ export async function defaultParseResponse<T>(client: Metronome, props: APIRespo
29
29
  const mediaType = contentType?.split(';')[0]?.trim();
30
30
  const isJSON = mediaType?.includes('application/json') || mediaType?.endsWith('+json');
31
31
  if (isJSON) {
32
+ const contentLength = response.headers.get('content-length');
33
+ if (contentLength === '0') {
34
+ // if there is no content we can't do anything
35
+ return undefined as T;
36
+ }
37
+
32
38
  const json = await response.json();
33
39
  return json as T;
34
40
  }
@@ -0,0 +1,7 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ import * as qs from '../qs/stringify';
4
+
5
+ export function stringifyQuery(query: object | Record<string, unknown>) {
6
+ return qs.stringify(query, { arrayFormat: 'comma' });
7
+ }
@@ -6,3 +6,4 @@ export * from './utils/env';
6
6
  export * from './utils/log';
7
7
  export * from './utils/uuid';
8
8
  export * from './utils/sleep';
9
+ export * from './utils/query';
@@ -3,6 +3,23 @@
3
3
  import * as Shared from './shared';
4
4
  import { BodyCursorPage } from '../core/pagination';
5
5
 
6
+ export interface BalanceFilter {
7
+ /**
8
+ * The balance type to filter by.
9
+ */
10
+ balance_types?: Array<'PREPAID_COMMIT' | 'POSTPAID_COMMIT' | 'CREDIT'>;
11
+
12
+ /**
13
+ * Custom fields to compute balance across. Must match all custom fields
14
+ */
15
+ custom_fields?: { [key: string]: string };
16
+
17
+ /**
18
+ * Specific IDs to compute balance across.
19
+ */
20
+ ids?: Array<string>;
21
+ }
22
+
6
23
  export interface BaseThresholdCommit {
7
24
  /**
8
25
  * The commit product that will be used to generate the line item for commit
@@ -407,10 +424,12 @@ export namespace CommitHierarchyConfiguration {
407
424
  * list rate when consuming a credit or commit.
408
425
  */
409
426
  export interface CommitRate {
410
- rate_type: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'TIERED' | 'CUSTOM';
427
+ rate_type: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'TIERED' | 'TIERED_PERCENTAGE' | 'CUSTOM';
411
428
 
412
429
  /**
413
- * Commit rate price. For FLAT rate_type, this must be >=0.
430
+ * Commit rate price. For FLAT rate_type, this must be >=0. For PERCENTAGE
431
+ * rate_type, this is a decimal fraction, e.g. use 0.1 for 10%; this must be >=0
432
+ * and <=1.
414
433
  */
415
434
  price?: number;
416
435
 
@@ -438,8 +457,16 @@ export interface CommitSpecifier {
438
457
  }
439
458
 
440
459
  export interface CommitSpecifierInput {
460
+ /**
461
+ * If provided, the specifier will apply to product usage with these set of
462
+ * presentation group values.
463
+ */
441
464
  presentation_group_values?: { [key: string]: string };
442
465
 
466
+ /**
467
+ * If provided, the specifier will apply to product usage with these set of pricing
468
+ * group values.
469
+ */
443
470
  pricing_group_values?: { [key: string]: string };
444
471
 
445
472
  /**
@@ -481,12 +508,12 @@ export interface Contract {
481
508
  */
482
509
  customer_billing_provider_configuration?: Contract.CustomerBillingProviderConfiguration;
483
510
 
484
- prepaid_balance_threshold_configuration?: PrepaidBalanceThresholdConfiguration;
485
-
486
511
  /**
487
- * Priority of the contract.
512
+ * ID of the package this contract was created from, if applicable.
488
513
  */
489
- priority?: number;
514
+ package_id?: string;
515
+
516
+ prepaid_balance_threshold_configuration?: PrepaidBalanceThresholdConfiguration;
490
517
 
491
518
  /**
492
519
  * Determines which scheduled and commit charges to consolidate onto the Contract's
@@ -1101,7 +1128,7 @@ export namespace ContractV2 {
1101
1128
  }
1102
1129
 
1103
1130
  export interface OverwriteRate {
1104
- rate_type: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'TIERED' | 'CUSTOM';
1131
+ rate_type: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'TIERED' | 'TIERED_PERCENTAGE' | 'CUSTOM';
1105
1132
 
1106
1133
  credit_type?: Shared.CreditTypeData;
1107
1134
 
@@ -1433,8 +1460,8 @@ export namespace ContractV2 {
1433
1460
 
1434
1461
  export interface ParentBehavior {
1435
1462
  /**
1436
- * Account hierarchy M3 - Indicates the desired behavior of consolidated invoices
1437
- * generated by the parent in a customer hierarchy
1463
+ * Indicates the desired behavior of consolidated invoices generated by the parent
1464
+ * in a customer hierarchy
1438
1465
  *
1439
1466
  * **CONCATENATE**: Statements on the invoices of child customers will be appended
1440
1467
  * to the consolidated invoice
@@ -1452,15 +1479,15 @@ export namespace ContractV2 {
1452
1479
  parent: ChildHierarchyConfigurationV2.Parent;
1453
1480
 
1454
1481
  /**
1455
- * Account hierarchy M3 - Indicates which customer should pay for the child's
1456
- * invoice charges **SELF**: The child pays for its own invoice charges **PARENT**:
1457
- * The parent pays for the child's invoice charges
1482
+ * Indicates which customer should pay for the child's invoice charges **SELF**:
1483
+ * The child pays for its own invoice charges **PARENT**: The parent pays for the
1484
+ * child's invoice charges
1458
1485
  */
1459
1486
  payer?: 'SELF' | 'PARENT';
1460
1487
 
1461
1488
  /**
1462
- * Account hierarchy M3 - Indicates the behavior of the child's invoice statements
1463
- * on the parent's invoices.
1489
+ * Indicates the behavior of the child's invoice statements on the parent's
1490
+ * invoices.
1464
1491
  *
1465
1492
  * **CONSOLIDATE**: Child's invoice statements will be added to parent's
1466
1493
  * consolidated invoices
@@ -2536,8 +2563,8 @@ export namespace HierarchyConfiguration {
2536
2563
 
2537
2564
  export interface ParentBehavior {
2538
2565
  /**
2539
- * Account hierarchy M3 - Indicates the desired behavior of consolidated invoices
2540
- * generated by the parent in a customer hierarchy
2566
+ * Indicates the desired behavior of consolidated invoices generated by the parent
2567
+ * in a customer hierarchy
2541
2568
  *
2542
2569
  * **CONCATENATE**: Statements on the invoices of child customers will be appended
2543
2570
  * to the consolidated invoice
@@ -2555,8 +2582,7 @@ export namespace HierarchyConfiguration {
2555
2582
  parent: ChildHierarchyConfiguration.Parent;
2556
2583
 
2557
2584
  /**
2558
- * Account hierarchy M3 - Indicates which customer should pay for the child's
2559
- * invoice charges
2585
+ * Indicates which customer should pay for the child's invoice charges
2560
2586
  *
2561
2587
  * **SELF**: The child pays for its own invoice charges
2562
2588
  *
@@ -2565,8 +2591,8 @@ export namespace HierarchyConfiguration {
2565
2591
  payer?: 'SELF' | 'PARENT';
2566
2592
 
2567
2593
  /**
2568
- * Account hierarchy M3 - Indicates the behavior of the child's invoice statements
2569
- * on the parent's invoices.
2594
+ * Indicates the behavior of the child's invoice statements on the parent's
2595
+ * invoices.
2570
2596
  *
2571
2597
  * **CONSOLIDATE**: Child's invoice statements will be added to parent's
2572
2598
  * consolidated invoices
@@ -2637,7 +2663,7 @@ export interface Override {
2637
2663
  */
2638
2664
  quantity?: number;
2639
2665
 
2640
- rate_type?: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'TIERED' | 'CUSTOM';
2666
+ rate_type?: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'TIERED' | 'TIERED_PERCENTAGE' | 'CUSTOM';
2641
2667
 
2642
2668
  target?: 'COMMIT_RATE' | 'LIST_RATE';
2643
2669
 
@@ -2688,7 +2714,7 @@ export interface OverrideTier {
2688
2714
  }
2689
2715
 
2690
2716
  export interface OverwriteRate {
2691
- rate_type: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'TIERED' | 'CUSTOM';
2717
+ rate_type: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'TIERED' | 'TIERED_PERCENTAGE' | 'CUSTOM';
2692
2718
 
2693
2719
  credit_type?: CreditTypeData;
2694
2720
 
@@ -2745,7 +2771,7 @@ export interface PaymentGateConfig {
2745
2771
  * not wish Metronome to calculate tax on your behalf. Leaving this field blank
2746
2772
  * will default to NONE.
2747
2773
  */
2748
- tax_type?: 'NONE' | 'STRIPE' | 'ANROK' | 'AVALARA' | 'PRECALCULATED';
2774
+ tax_type?: 'NONE' | 'STRIPE' | 'ANROK' | 'PRECALCULATED';
2749
2775
  }
2750
2776
 
2751
2777
  export namespace PaymentGateConfig {
@@ -2807,7 +2833,7 @@ export interface PaymentGateConfigV2 {
2807
2833
  * not wish Metronome to calculate tax on your behalf. Leaving this field blank
2808
2834
  * will default to NONE.
2809
2835
  */
2810
- tax_type?: 'NONE' | 'STRIPE' | 'ANROK' | 'AVALARA' | 'PRECALCULATED';
2836
+ tax_type?: 'NONE' | 'STRIPE' | 'ANROK' | 'PRECALCULATED';
2811
2837
  }
2812
2838
 
2813
2839
  export namespace PaymentGateConfigV2 {
@@ -3026,7 +3052,7 @@ export interface ProService {
3026
3052
  }
3027
3053
 
3028
3054
  export interface Rate {
3029
- rate_type: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'CUSTOM' | 'TIERED';
3055
+ rate_type: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'CUSTOM' | 'TIERED' | 'TIERED_PERCENTAGE';
3030
3056
 
3031
3057
  credit_type?: CreditTypeData;
3032
3058
 
@@ -5,6 +5,9 @@ import * as Shared from '../shared';
5
5
  import { APIPromise } from '../../core/api-promise';
6
6
  import { RequestOptions } from '../../internal/request-options';
7
7
 
8
+ /**
9
+ * [Alerts](https://docs.metronome.com/connecting-metronome/alerts/) monitor customer spending, balances, and other billing factors. Use these endpoints to create, retrieve, and archive customer alerts. To view sample alert payloads by alert type, navigate [here.](https://docs.metronome.com/manage-product-access/create-manage-alerts/#webhook-notifications)
10
+ */
8
11
  export class Alerts extends APIResource {
9
12
  /**
10
13
  * Create a new threshold notification to monitor customer spending, balances, and
@@ -4,6 +4,9 @@ import { APIResource } from '../../core/resource';
4
4
  import { CursorPage, type CursorPageParams, PagePromise } from '../../core/pagination';
5
5
  import { RequestOptions } from '../../internal/request-options';
6
6
 
7
+ /**
8
+ * [Security](https://docs.metronome.com/developer-resources/security/) endpoints allow you to retrieve security-related data.
9
+ */
7
10
  export class AuditLogs extends APIResource {
8
11
  /**
9
12
  * Get a comprehensive audit trail of all operations performed in your Metronome
@@ -7,6 +7,9 @@ import { CursorPage, type CursorPageParams, PagePromise } from '../../core/pagin
7
7
  import { RequestOptions } from '../../internal/request-options';
8
8
  import { path } from '../../internal/utils/path';
9
9
 
10
+ /**
11
+ * [Billable metrics](https://docs.metronome.com/understanding-metronome/how-metronome-works#billable-metrics) in Metronome represent the various consumption components that Metronome meters and aggregates.
12
+ */
10
13
  export class BillableMetrics extends APIResource {
11
14
  /**
12
15
  * Create billable metrics programmatically with this endpoint—an essential step in
@@ -374,6 +374,79 @@ export class Contracts extends APIResource {
374
374
  return this._client.post('/v1/contracts/createHistoricalInvoices', { body, ...options });
375
375
  }
376
376
 
377
+ /**
378
+ * Retrieve the combined current balance across any grouping of credits and commits
379
+ * for a customer in a single API call.
380
+ *
381
+ * - Display real-time available balance to customers in billing dashboards
382
+ * - Build finance dashboards showing credit utilization across customer segments
383
+ * - Validate expected vs. actual balance during billing reconciliation
384
+ *
385
+ * ### Key response fields:
386
+ *
387
+ * - `balance`: The combined net balance available to use at this moment across all
388
+ * matching commits and credits
389
+ * - `credit_type_id`: The credit type (fiat or custom pricing unit) the balance is
390
+ * denominated in
391
+ *
392
+ * ### Filtering options:
393
+ *
394
+ * Balance filters allow you to scope the calculation to specific subsets of
395
+ * commits and credits. When using multiple filter objects, they are OR'd together
396
+ * — if a commit or credit matches any filter, it's included in the net balance.
397
+ * Within a single filter object, all specified conditions are AND'd together.
398
+ *
399
+ * - **Balance types**: Include any combination of `PREPAID_COMMIT`,
400
+ * `POSTPAID_COMMIT`, and `CREDIT` (e.g., `["PREPAID_COMMIT", "CREDIT"]` to
401
+ * exclude postpaid commits). If not specified, all balance types are included.
402
+ * - **Specific IDs**: Target exact commit or credit IDs for precise balance
403
+ * queries
404
+ * - **Custom fields**: Filter by custom field key-value pairs; when multiple pairs
405
+ * are provided, commits must match all of them
406
+ *
407
+ * **Example**: To get the balance of all free-trial credits OR all
408
+ * signup-promotion commits, you'd pass two filter objects — one filtering for
409
+ * CREDIT with custom field campaign: free-trial, and another filtering for
410
+ * PREPAID_COMMIT with custom field campaign: signup-promotion.
411
+ *
412
+ * ### Usage guidelines:
413
+ *
414
+ * - **Draft invoice handling**: Use `invoice_inclusion_mode` to control whether
415
+ * pending draft invoice deductions are included (`FINALIZED_AND_DRAFT`, the
416
+ * default) or excluded (`FINALIZED`) from the balance calculation
417
+ * - **Account hierarchies**: When querying a child customer, shared commits from
418
+ * parent contracts are not included — query the parent customer directly to see
419
+ * shared commit balances
420
+ * - **Negative balances**: Manual ledger entries can cause negative segment
421
+ * balances; these are treated as zero when calculating the net balance
422
+ * - **Credit types**: If `credit_type_id` is not specified, the balance defaults
423
+ * to USD (cents)
424
+ *
425
+ * @example
426
+ * ```ts
427
+ * const response = await client.v1.contracts.getNetBalance({
428
+ * customer_id: '13117714-3f05-48e5-a6e9-a66093f13b4d',
429
+ * credit_type_id: '2714e483-4ff1-48e4-9e25-ac732e8f24f2',
430
+ * filters: [
431
+ * {
432
+ * balance_types: ['CREDIT'],
433
+ * custom_fields: { campaign: 'free-trial' },
434
+ * },
435
+ * {
436
+ * balance_types: ['PREPAID_COMMIT', 'POSTPAID_COMMIT'],
437
+ * custom_fields: { campaign: 'signup-promotion' },
438
+ * },
439
+ * ],
440
+ * });
441
+ * ```
442
+ */
443
+ getNetBalance(
444
+ body: ContractGetNetBalanceParams,
445
+ options?: RequestOptions,
446
+ ): APIPromise<ContractGetNetBalanceResponse> {
447
+ return this._client.post('/v1/contracts/customerBalances/getNetBalance', { body, ...options });
448
+ }
449
+
377
450
  /**
378
451
  * Retrieve a comprehensive view of all available balances (commits and credits)
379
452
  * for a customer. This endpoint provides real-time visibility into prepaid funds,
@@ -624,6 +697,26 @@ export interface ContractCreateHistoricalInvoicesResponse {
624
697
  data: Array<InvoicesAPI.Invoice>;
625
698
  }
626
699
 
700
+ export interface ContractGetNetBalanceResponse {
701
+ data: ContractGetNetBalanceResponse.Data;
702
+ }
703
+
704
+ export namespace ContractGetNetBalanceResponse {
705
+ export interface Data {
706
+ /**
707
+ * The combined net balance that the customer has access to use at this moment
708
+ * across all pertinent commits and credits.
709
+ */
710
+ balance: number;
711
+
712
+ /**
713
+ * The ID of the credit type (can be fiat or a custom pricing unit) that the
714
+ * balance is for.
715
+ */
716
+ credit_type_id: string;
717
+ }
718
+ }
719
+
627
720
  export type ContractListBalancesResponse = Shared.Commit | Shared.Credit;
628
721
 
629
722
  export interface ContractRetrieveRateScheduleResponse {
@@ -763,12 +856,20 @@ export interface ContractCreateParams {
763
856
 
764
857
  overrides?: Array<ContractCreateParams.Override>;
765
858
 
766
- prepaid_balance_threshold_configuration?: Shared.PrepaidBalanceThresholdConfiguration;
859
+ /**
860
+ * Selects the package linked to the specified alias as of the contract's start
861
+ * date. Mutually exclusive with package_id.
862
+ */
863
+ package_alias?: string;
767
864
 
768
865
  /**
769
- * Priority of the contract.
866
+ * If provided, provisions a customer on a package instead of creating a
867
+ * traditional contract. When specified, only customer_id, starting_at, package_id,
868
+ * and uniqueness_key are allowed.
770
869
  */
771
- priority?: number;
870
+ package_id?: string;
871
+
872
+ prepaid_balance_threshold_configuration?: Shared.PrepaidBalanceThresholdConfiguration;
772
873
 
773
874
  /**
774
875
  * This field's availability is dependent on your client's configuration.
@@ -1124,7 +1225,7 @@ export namespace ContractCreateParams {
1124
1225
  * not wish Metronome to calculate tax on your behalf. Leaving this field blank
1125
1226
  * will default to NONE.
1126
1227
  */
1127
- tax_type?: 'NONE' | 'STRIPE' | 'ANROK' | 'AVALARA' | 'PRECALCULATED';
1228
+ tax_type?: 'NONE' | 'STRIPE' | 'ANROK' | 'PRECALCULATED';
1128
1229
  }
1129
1230
 
1130
1231
  export namespace PaymentGateConfig {
@@ -1228,6 +1329,11 @@ export namespace ContractCreateParams {
1228
1329
 
1229
1330
  rate_type?: 'COMMIT_RATE' | 'LIST_RATE';
1230
1331
 
1332
+ /**
1333
+ * Fraction of unused segments that will be rolled over. Must be between 0 and 1.
1334
+ */
1335
+ rollover_fraction?: number;
1336
+
1231
1337
  /**
1232
1338
  * List of filters that determine what kind of customer usage draws down a commit
1233
1339
  * or credit. A customer's usage needs to meet the condition of at least one of the
@@ -1399,8 +1505,7 @@ export namespace ContractCreateParams {
1399
1505
  parent_behavior?: HierarchyConfiguration.ParentBehavior;
1400
1506
 
1401
1507
  /**
1402
- * Account hierarchy M3 - Indicates which customer should pay for the child's
1403
- * invoice charges
1508
+ * Indicates which customer should pay for the child's invoice charges
1404
1509
  *
1405
1510
  * **SELF**: The child pays for its own invoice charges
1406
1511
  *
@@ -1409,8 +1514,8 @@ export namespace ContractCreateParams {
1409
1514
  payer?: 'SELF' | 'PARENT';
1410
1515
 
1411
1516
  /**
1412
- * Account hierarchy M3 - Indicates the behavior of the child's invoice statements
1413
- * on the parent's invoices.
1517
+ * Indicates the behavior of the child's invoice statements on the parent's
1518
+ * invoices.
1414
1519
  *
1415
1520
  * **CONSOLIDATE**: Child's invoice statements will be added to parent's
1416
1521
  * consolidated invoices
@@ -1430,8 +1535,8 @@ export namespace ContractCreateParams {
1430
1535
 
1431
1536
  export interface ParentBehavior {
1432
1537
  /**
1433
- * Account hierarchy M3 - Indicates the desired behavior of consolidated invoices
1434
- * generated by the parent in a customer hierarchy
1538
+ * Indicates the desired behavior of consolidated invoices generated by the parent
1539
+ * in a customer hierarchy
1435
1540
  *
1436
1541
  * **CONCATENATE**: Statements on the invoices of child customers will be appended
1437
1542
  * to the consolidated invoice
@@ -1573,7 +1678,7 @@ export namespace ContractCreateParams {
1573
1678
  * Required for OVERWRITE type.
1574
1679
  */
1575
1680
  export interface OverwriteRate {
1576
- rate_type: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'TIERED' | 'CUSTOM';
1681
+ rate_type: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'TIERED' | 'TIERED_PERCENTAGE' | 'CUSTOM';
1577
1682
 
1578
1683
  credit_type_id?: string;
1579
1684
 
@@ -2754,7 +2859,7 @@ export namespace ContractAmendParams {
2754
2859
  * not wish Metronome to calculate tax on your behalf. Leaving this field blank
2755
2860
  * will default to NONE.
2756
2861
  */
2757
- tax_type?: 'NONE' | 'STRIPE' | 'ANROK' | 'AVALARA' | 'PRECALCULATED';
2862
+ tax_type?: 'NONE' | 'STRIPE' | 'ANROK' | 'PRECALCULATED';
2758
2863
  }
2759
2864
 
2760
2865
  export namespace PaymentGateConfig {
@@ -2858,6 +2963,11 @@ export namespace ContractAmendParams {
2858
2963
 
2859
2964
  rate_type?: 'COMMIT_RATE' | 'LIST_RATE';
2860
2965
 
2966
+ /**
2967
+ * Fraction of unused segments that will be rolled over. Must be between 0 and 1.
2968
+ */
2969
+ rollover_fraction?: number;
2970
+
2861
2971
  /**
2862
2972
  * List of filters that determine what kind of customer usage draws down a commit
2863
2973
  * or credit. A customer's usage needs to meet the condition of at least one of the
@@ -3154,7 +3264,7 @@ export namespace ContractAmendParams {
3154
3264
  * Required for OVERWRITE type.
3155
3265
  */
3156
3266
  export interface OverwriteRate {
3157
- rate_type: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'TIERED' | 'CUSTOM';
3267
+ rate_type: 'FLAT' | 'PERCENTAGE' | 'SUBSCRIPTION' | 'TIERED' | 'TIERED_PERCENTAGE' | 'CUSTOM';
3158
3268
 
3159
3269
  credit_type_id?: string;
3160
3270
 
@@ -3483,6 +3593,32 @@ export namespace ContractCreateHistoricalInvoicesParams {
3483
3593
  }
3484
3594
  }
3485
3595
 
3596
+ export interface ContractGetNetBalanceParams {
3597
+ /**
3598
+ * The ID of the customer.
3599
+ */
3600
+ customer_id: string;
3601
+
3602
+ /**
3603
+ * The ID of the credit type (can be fiat or a custom pricing unit) to get the
3604
+ * balance for. Defaults to USD (cents) if not specified.
3605
+ */
3606
+ credit_type_id?: string;
3607
+
3608
+ /**
3609
+ * Balance filters are OR'd together, so if a given commit or credit matches any of
3610
+ * the filters, it will be included in the net balance.
3611
+ */
3612
+ filters?: Array<Shared.BalanceFilter>;
3613
+
3614
+ /**
3615
+ * Controls which invoices are considered when calculating the remaining balance.
3616
+ * `FINALIZED` considers only deductions from finalized invoices.
3617
+ * `FINALIZED_AND_DRAFT` also includes deductions from pending draft invoices.
3618
+ */
3619
+ invoice_inclusion_mode?: 'FINALIZED' | 'FINALIZED_AND_DRAFT';
3620
+ }
3621
+
3486
3622
  export interface ContractListBalancesParams extends BodyCursorPageParams {
3487
3623
  customer_id: string;
3488
3624
 
@@ -3729,6 +3865,7 @@ export declare namespace Contracts {
3729
3865
  type ContractAmendResponse as ContractAmendResponse,
3730
3866
  type ContractArchiveResponse as ContractArchiveResponse,
3731
3867
  type ContractCreateHistoricalInvoicesResponse as ContractCreateHistoricalInvoicesResponse,
3868
+ type ContractGetNetBalanceResponse as ContractGetNetBalanceResponse,
3732
3869
  type ContractListBalancesResponse as ContractListBalancesResponse,
3733
3870
  type ContractRetrieveRateScheduleResponse as ContractRetrieveRateScheduleResponse,
3734
3871
  type ContractRetrieveSubscriptionQuantityHistoryResponse as ContractRetrieveSubscriptionQuantityHistoryResponse,
@@ -3742,6 +3879,7 @@ export declare namespace Contracts {
3742
3879
  type ContractAmendParams as ContractAmendParams,
3743
3880
  type ContractArchiveParams as ContractArchiveParams,
3744
3881
  type ContractCreateHistoricalInvoicesParams as ContractCreateHistoricalInvoicesParams,
3882
+ type ContractGetNetBalanceParams as ContractGetNetBalanceParams,
3745
3883
  type ContractListBalancesParams as ContractListBalancesParams,
3746
3884
  type ContractRetrieveRateScheduleParams as ContractRetrieveRateScheduleParams,
3747
3885
  type ContractRetrieveSubscriptionQuantityHistoryParams as ContractRetrieveSubscriptionQuantityHistoryParams,
@@ -8,6 +8,7 @@ export {
8
8
  type ContractAmendResponse,
9
9
  type ContractArchiveResponse,
10
10
  type ContractCreateHistoricalInvoicesResponse,
11
+ type ContractGetNetBalanceResponse,
11
12
  type ContractListBalancesResponse,
12
13
  type ContractRetrieveRateScheduleResponse,
13
14
  type ContractRetrieveSubscriptionQuantityHistoryResponse,
@@ -20,6 +21,7 @@ export {
20
21
  type ContractAmendParams,
21
22
  type ContractArchiveParams,
22
23
  type ContractCreateHistoricalInvoicesParams,
24
+ type ContractGetNetBalanceParams,
23
25
  type ContractListBalancesParams,
24
26
  type ContractRetrieveRateScheduleParams,
25
27
  type ContractRetrieveSubscriptionQuantityHistoryParams,
@@ -5,6 +5,9 @@ import { APIPromise } from '../../../core/api-promise';
5
5
  import { buildHeaders } from '../../../internal/headers';
6
6
  import { RequestOptions } from '../../../internal/request-options';
7
7
 
8
+ /**
9
+ * Named schedules are used for storing custom data that can change over time. Named schedules are often used in custom pricing logic.
10
+ */
8
11
  export class NamedSchedules extends APIResource {
9
12
  /**
10
13
  * Get a named schedule for the given rate card. This endpoint's availability is