diff --git a/.agents/skills/api/SKILL.md b/.agents/skills/api/SKILL.md index daa030c1f5..9970fc62aa 100644 --- a/.agents/skills/api/SKILL.md +++ b/.agents/skills/api/SKILL.md @@ -26,7 +26,7 @@ You are helping the user add or modify API endpoints in OpenMeter. api/spec/packages/aip/src/ ├── main.tsp # Top-level imports ├── openmeter.tsp # Service definition, routes, and interface wiring -├── konnect.tsp # Konnect-specific service definition +├── konnect.tsp # Konnect-specific service definition (must mirror openmeter.tsp's tags + route interfaces) ├── common/ # Shared types: errors, pagination, parameters ├── shared/ # Shared resources: ULID, request/response wrappers, tags ├── meters/ # Domain: models + operations @@ -47,6 +47,8 @@ Each domain typically has: Routes are wired in `api/spec/packages/aip/src/openmeter.tsp` via interface declarations with `@route` and `@tag` decorators. +`api/spec/packages/aip/src/konnect.tsp` is the parallel Konnect-flavoured service definition. The two files are **not** identical — Konnect has its own service metadata, namespace name, `@useAuth` configuration, security scheme models, and intentionally exposes a narrower subset of the OpenMeter surface. But for any domain that *is* exposed in both, every new domain `import`, `@tagMetadata(...)` entry, and `@route` / `@tag` interface must be added to both files in the same edit. Diff the two files before generating to spot accidental drift; existing differences are expected, but a tag/route you just added showing up in only one file is a bug. + ## Workflow Follow these steps in order: @@ -57,8 +59,8 @@ For a new domain/resource: 1. Create a new directory under `api/spec/packages/aip/src//` 2. Add `index.tsp`, model file(s), and `operations.tsp` -3. Import the domain in `api/spec/packages/aip/src/openmeter.tsp` -4. Wire up the route interface in `openmeter.tsp` +3. Import the domain in `api/spec/packages/aip/src/openmeter.tsp` **and** `api/spec/packages/aip/src/konnect.tsp` (unless the domain is intentionally OpenMeter-only — confirm with the user before excluding it from Konnect) +4. Wire up the route interface (and any new `@tagMetadata`) in **both** `openmeter.tsp` and `konnect.tsp`. After editing, run `diff openmeter.tsp konnect.tsp` and check that your new imports / tags / interfaces appear on both sides — pre-existing differences (service metadata, namespace name, `@useAuth`, security scheme models) are intentional and unrelated to your change. For modifying an existing endpoint: @@ -342,7 +344,9 @@ OpenMeter v3 APIs follow [Kong's AIP](https://kong-aip.netlify.app/list/) conven | `rules/aip-158-pagination.md` | Page-based and cursor-based pagination | | `rules/aip-160-filtering.md` | Filter query syntax, `Common.*FieldFilter` types, label dot-notation | | `rules/aip-129-labels.md` | Label key constraints, PATCH-with-null semantics | -| `rules/aip-193-errors.md` | RFC-7807 error responses, `Common.ErrorResponses`, 403-before-404 rule | +| `rules/aip-193-errors.md` | AIP-193 RFC-7807 error responses, `invalid_parameters`, 403-before-404 rule | +| `rules/openmeter-error-types.md` | OpenMeter `Common.*` error types wiring AIP-193 onto operations | +| `rules/inline-errors.md` | Inline (partial / non-fatal) errors via `Shared.BaseError` for 2xx responses | | `rules/aip-composition.md` | Composition-over-inheritance (spread, `model is`, `@discriminator`) | | `rules/aip-docs.md` | `@doc`/`/** */` requirements, `@operationId`, `@summary` | | `rules/aip-181-stability.md` | `x-private` / `x-unstable` / `x-internal` stability markers | diff --git a/.agents/skills/api/rules/aip-193-errors.md b/.agents/skills/api/rules/aip-193-errors.md index 799159e922..fb2bf32616 100644 --- a/.agents/skills/api/rules/aip-193-errors.md +++ b/.agents/skills/api/rules/aip-193-errors.md @@ -34,18 +34,7 @@ When a caller lacks access to a resource: - Return `403 Forbidden` if the resource is owned by the caller's organization (they exist but can't touch it) - Return `404 Not Found` otherwise — this prevents data-existence leakage across tenants -## OpenMeter Common types +## See also -Use `Common.ErrorResponses` (= `BadRequest | Unauthorized | Forbidden`) on every operation, then add specific types explicitly. Types with ★ are OpenMeter extensions beyond what AIP-193 documents by name. - -| Type | Status | Source | When to add explicitly | -| ----------------------------- | ------ | ----------- | --------------------------------------------------- | -| `Common.NotFound` | 404 | AIP-193 | GET, PATCH, PUT, DELETE by ID | -| `Common.Conflict` | 409 | AIP-193 | Create operations that may conflict | -| `Common.Gone` | 410 | ★ OpenMeter | PUT/PATCH when the resource was soft-deleted | -| `Common.PayloadTooLarge` | 413 | ★ OpenMeter | Endpoints accepting large bodies or bulk operations | -| `Common.UnprocessableContent` | 422 | ★ OpenMeter | Semantically invalid requests | - -```tsp -get(@path meterId: Shared.ULID): Shared.GetResponse | Common.NotFound | Common.ErrorResponses; -``` +- `rules/openmeter-error-types.md` — OpenMeter `Common.*` types that wire AIP-193 onto operations, including OpenMeter-only status codes (410, 413, 422). +- `rules/inline-errors.md` — inline errors returned **inside** a 2xx response body (partial successes, pre-flight validation on draft resources). AIP-193 itself only covers transport-level error responses. diff --git a/.agents/skills/api/rules/inline-errors.md b/.agents/skills/api/rules/inline-errors.md new file mode 100644 index 0000000000..ec653599d6 --- /dev/null +++ b/.agents/skills/api/rules/inline-errors.md @@ -0,0 +1,85 @@ +# Inline (partial / non-fatal) errors + +Some endpoints return errors **inside** a 2xx response body. These are **not** RFC-7807 problem details — RFC-7807 (see `aip-193-errors.md`) covers errors that fail the whole request. Inline errors live as a field on the response or resource model and describe per-item or pre-flight failures that did not stop the response from being produced. + +## When to use + +- **Partially successful responses** — the operation processed some items and reports per-item failures alongside the successful results (typically a `data[]` plus `errors[]` pair on the response model). +- **Not-yet-finalized resources** — the resource itself is in a non-final state (e.g. a draft) and exposes pre-flight findings that block promotion to the final state. The GET itself succeeds; the findings are part of the resource shape. + +If the whole request fails, return an RFC-7807 response instead — see `aip-193-errors.md`. + +## Required shape: `Shared.BaseError` + +All inline errors compose `Shared.BaseError` from `api/spec/packages/aip/src/shared/errors.tsp`. It defines the three uniform fields every inline error must carry, so SDKs and UIs can render them generically: + +| Field | Type | Required | Meaning | +| ------------ | ----------------- | -------- | ------------------------------------------------------------------ | +| `code` | `T` | yes | Machine-readable error code | +| `message` | `string` | yes | Human-readable description | +| `attributes` | `Record` | optional | Additional structured context (field path, offending value, IDs) | + +`T` is the type of `code`. Pick one: + +- **Domain-scoped enum (preferred)** — codes are discoverable and stable, and clients can switch on them. Include an `Unknown: "unknown"` zero member for forward compatibility. +- **`string`** — only when the set of codes is genuinely open-ended (e.g. validation rules that grow over time without API churn). + +## Composition pattern + +Use `model … is Shared.BaseError` and add domain-specific identifying fields as needed (e.g. the input that produced the error, a JSON path, a resource id). Do **not** redeclare `code`, `message`, or `attributes`. + +```tsp +import "../shared/index.tsp"; + +namespace MyDomain; + +/** Machine-readable code for a {operation} error. */ +@friendlyName("MyOperationErrorCode") +enum MyOperationErrorCode { + Unknown: "unknown", + // domain-specific codes... +} + +/** Inline error returned by {operation}. */ +@friendlyName("MyOperationError") +model MyOperationError is Shared.BaseError { + /** Identifier from the request that produced this error. */ + @visibility(Lifecycle.Read) + @summary("Subject") + subject?: string; +} +``` + +For an open-ended code set, pass `string`: + +```tsp +@friendlyName("MyValidationError") +model MyValidationError is Shared.BaseError { + /** JSON path to the offending field. */ + @visibility(Lifecycle.Read) + @summary("Field") + field: string; +} +``` + +## Wiring into the response + +Add the inline errors as a field on the response or resource model — typically named `errors` (partial responses) or a domain-specific name like `validation_errors` (pre-flight findings on a draft resource). + +```tsp +@friendlyName("MyOperationResponse") +model MyOperationResponse { + @visibility(Lifecycle.Read) + data: MyOperationResult[]; + + /** Per-item failures encountered while processing the request. */ + @visibility(Lifecycle.Read) + errors: MyOperationError[]; +} +``` + +## Naming + +- Model: `Error` or `ValidationError`. +- Code enum (when used): `Code` (drop the trailing `Error`, append `Code`). +- All fields use `@visibility(Lifecycle.Read)` — inline errors are always server-produced. diff --git a/.agents/skills/api/rules/openmeter-error-types.md b/.agents/skills/api/rules/openmeter-error-types.md new file mode 100644 index 0000000000..89e750447d --- /dev/null +++ b/.agents/skills/api/rules/openmeter-error-types.md @@ -0,0 +1,17 @@ +# OpenMeter error response types + +OpenMeter wires AIP-193 (`rules/aip-193-errors.md`) onto operations through the `Common.*` types in `api/spec/packages/aip/src/common/`. Use `Common.ErrorResponses` (= `BadRequest | Unauthorized | Forbidden`) on every operation, then add specific types explicitly. Types with ★ are OpenMeter extensions beyond what AIP-193 documents by name. + +| Type | Status | Source | When to add explicitly | +| ----------------------------- | ------ | ----------- | --------------------------------------------------- | +| `Common.NotFound` | 404 | AIP-193 | GET, PATCH, PUT, DELETE by ID | +| `Common.Conflict` | 409 | AIP-193 | Create operations that may conflict | +| `Common.Gone` | 410 | ★ OpenMeter | PUT/PATCH when the resource was soft-deleted | +| `Common.PayloadTooLarge` | 413 | ★ OpenMeter | Endpoints accepting large bodies or bulk operations | +| `Common.UnprocessableContent` | 422 | ★ OpenMeter | Semantically invalid requests | + +```tsp +get(@path meterId: Shared.ULID): Shared.GetResponse | Common.NotFound | Common.ErrorResponses; +``` + +For inline errors returned **inside** a 2xx response body (partial successes, pre-flight validation on draft resources), see `rules/inline-errors.md`. diff --git a/api/spec/package.json b/api/spec/package.json index 49b642f030..04d9090788 100644 --- a/api/spec/package.json +++ b/api/spec/package.json @@ -4,7 +4,7 @@ "type": "module", "scripts": { "generate": "pnpm --filter @openmeter/api-spec-legacy run generate && pnpm --filter @openmeter/api-spec-aip run generate", - "format": "prettier --list-different --find-config-path --write .", + "format": "prettier --list-different --find-config-path --write . && pnpm --filter @openmeter/api-spec-aip run format", "lint": "prettier --check . && pnpm --filter @openmeter/api-spec-legacy run lint && pnpm --filter @openmeter/api-spec-aip run lint", "lint:fix": "prettier --write ." }, diff --git a/api/spec/packages/aip/lib/index.js b/api/spec/packages/aip/lib/index.js index b84068e405..8e51854ed2 100644 --- a/api/spec/packages/aip/lib/index.js +++ b/api/spec/packages/aip/lib/index.js @@ -1,6 +1,6 @@ import { defineLinter } from '@typespec/compiler' import { casingErrorsRule, casingRule } from './rules/casing.js' -import { docDecoratorRule } from './rules/docs.js' +import { docDecoratorRule, docFormatRule } from './rules/docs.js' import { friendlyNameRule } from './rules/friendly-name.js' import { operationSummaryRule } from './rules/operation-summary.js' import { operationIdKebabCaseRule } from './rules/operation-id.js' @@ -13,6 +13,7 @@ const rules = [ casingRule, casingErrorsRule, docDecoratorRule, + docFormatRule, friendlyNameRule, noNullableRule, operationSummaryRule, diff --git a/api/spec/packages/aip/lib/rules/docs.js b/api/spec/packages/aip/lib/rules/docs.js index bc2398d596..c4b7c78b2b 100644 --- a/api/spec/packages/aip/lib/rules/docs.js +++ b/api/spec/packages/aip/lib/rules/docs.js @@ -1,4 +1,17 @@ -import { createRule, paramMessage, getDoc } from '@typespec/compiler' +import { + createRule, + defineCodeFix, + getDoc, + getSourceLocation, + paramMessage, +} from '@typespec/compiler' +import * as prettier from 'prettier' +import { + detectNewline, + extractMarkdownFromDocComment, + getIndentBefore, + wrapMarkdownAsDocComment, +} from './utils.js' export const docDecoratorRule = createRule({ name: 'doc-decorator', @@ -60,3 +73,133 @@ export const docDecoratorRule = createRule({ }, }), }) + +/** + * Format a doc-comment Markdown body through Prettier. + * Returns the formatted Markdown body (no `/** *\/` framing). + * @param {string} markdown + * @param {{ printWidth?: number, proseWrap?: 'always' | 'never' | 'preserve' }} [options] + */ +async function formatDocMarkdown(markdown, options = {}) { + if (markdown.trim() === '') return '' + return await prettier.format(markdown, { + parser: 'markdown', + printWidth: options.printWidth ?? 80, + proseWrap: options.proseWrap ?? 'always', + }) +} + +/** + * Build a code fix that replaces a doc comment with a precomputed string. + * The Prettier work happens before this is constructed; the fix callback is + * sync and just emits the replacement. + * + * @param {import('@typespec/compiler').SourceLocation} location + * The full `/** ... *\/` source range. + * @param {string} newText The replacement text, including `/**` and `*\/`. + */ +function createFormatDocCommentCodeFix(location, newText) { + return defineCodeFix({ + id: 'format-doc-comment', + label: 'Format doc comment', + fix(context) { + return context.replaceText(location, newText) + }, + }) +} + +/** + * Collect every `DocNode` reachable from the program by walking semantic + * targets that can carry doc comments. We use the existing semantic listener + * surface (model/property/enum/etc.) rather than a private AST walker. + */ +function collectDocNodes(target, sink) { + const node = target.node + if (!node || !node.docs || node.docs.length === 0) return + for (const doc of node.docs) sink.push(doc) +} + +export const docFormatRule = createRule({ + name: 'doc-format', + severity: 'warning', + description: + 'Format doc comment bodies as Markdown using Prettier (proseWrap=always).', + messages: { + default: + 'Doc comment is not formatted. Apply the suggested fix to reformat as Markdown.', + }, + // Async because Prettier 3.x's `format` is async. + async: true, + create: (context) => { + /** @type {import('@typespec/compiler').DocNode[]} */ + const docNodes = [] + + const collect = (target) => collectDocNodes(target, docNodes) + + return { + model: collect, + modelProperty: collect, + enum: collect, + enumMember: collect, + union: collect, + unionVariant: collect, + operation: collect, + interface: collect, + scalar: collect, + namespace: collect, + + async exit() { + // Deduplicate: a doc may be visited via multiple semantic kinds. + const seen = new Set() + const work = [] + for (const doc of docNodes) { + if (seen.has(doc)) continue + seen.add(doc) + work.push(processDoc(doc, context)) + } + await Promise.all(work) + }, + } + }, +}) + +/** + * Compute a formatted replacement for a single DocNode and, if it differs + * from the source, report a diagnostic with an attached code fix. + * @param {import('@typespec/compiler').DocNode} doc + * @param {import('@typespec/compiler').LinterRuleContext} context + */ +async function processDoc(doc, context) { + const location = getSourceLocation(doc) + const source = location.file.text + const raw = source.slice(location.pos, location.end) + + // Defensive: only format actual `/** ... */` blocks. + if (!raw.startsWith('/**') || !raw.endsWith('*/')) return + + const indent = getIndentBefore(source, location.pos) + const newline = detectNewline(source) + + let markdown + try { + markdown = extractMarkdownFromDocComment(raw) + } catch { + return + } + + let formatted + try { + formatted = await formatDocMarkdown(markdown) + } catch { + // If Prettier can't parse the body, leave it alone. + return + } + + const replacement = wrapMarkdownAsDocComment(formatted, indent, newline) + if (replacement === raw) return + + context.reportDiagnostic({ + target: doc, + codefixes: [createFormatDocCommentCodeFix(location, replacement)], + }) +} diff --git a/api/spec/packages/aip/lib/rules/utils.js b/api/spec/packages/aip/lib/rules/utils.js index 8d0dbad506..4a5872be4c 100644 --- a/api/spec/packages/aip/lib/rules/utils.js +++ b/api/spec/packages/aip/lib/rules/utils.js @@ -56,3 +56,69 @@ export function isKebabCase(value) { return /^([a-z0-9]+(-[a-z0-9]+)*)$/.test(value) } + +/** + * Detect the dominant line separator in a source string. + * @param {string} source + * @returns {'\n' | '\r\n'} + */ +export function detectNewline(source) { + return source.includes('\r\n') ? '\r\n' : '\n' +} + +/** + * Return the indentation (whitespace from start of line) preceding `position`. + * @param {string} source + * @param {number} position + */ +export function getIndentBefore(source, position) { + const lineStart = source.lastIndexOf('\n', position - 1) + 1 + const between = source.slice(lineStart, position) + const match = between.match(/^[ \t]*/) + return match ? match[0] : '' +} + +/** + * Strip `/** ... *\/` framing and per-line `*` decoration from a doc comment, + * returning the inner Markdown body. Trims leading/trailing blank lines. + * @param {string} raw the full comment text including `/** ... *\/` + */ +export function extractMarkdownFromDocComment(raw) { + let body = raw + if (body.startsWith('/**')) body = body.slice(3) + if (body.endsWith('*/')) body = body.slice(0, -2) + + const lines = body.split(/\r?\n/).map((line) => { + // Strip leading whitespace + a single `*` + an optional space. + return line.replace(/^[ \t]*\*[ \t]?/, '').replace(/[ \t]+$/, '') + }) + + let start = 0 + let end = lines.length + while (start < end && lines[start].trim() === '') start++ + while (end > start && lines[end - 1].trim() === '') end-- + return lines.slice(start, end).join('\n') +} + +/** + * Re-wrap a Markdown body as a TypeSpec doc comment, applying `indent` on each + * line and using `newline` between lines. + * @param {string} markdown + * @param {string} indent + * @param {'\n' | '\r\n'} newline + */ +export function wrapMarkdownAsDocComment(markdown, indent, newline) { + const trimmed = markdown.replace(/\n+$/, '') + if (trimmed === '') { + return `/**${newline}${indent} */` + } + const lines = trimmed.split('\n') + const out = [ + '/**', + ...lines.map((line) => + line.length === 0 ? `${indent} *` : `${indent} * ${line}`, + ), + `${indent} */`, + ] + return out.join(newline) +} diff --git a/api/spec/packages/aip/package.json b/api/spec/packages/aip/package.json index 07662b7bdf..b175adf338 100644 --- a/api/spec/packages/aip/package.json +++ b/api/spec/packages/aip/package.json @@ -6,7 +6,7 @@ "generate": "tsp compile --config tspconfig.yaml ./src && node ./scripts/flatten-allof.mjs ./output/definitions/metering-and-billing/v3/openapi.MeteringAndBilling.yaml && node ./scripts/seal-object-schemas.mjs ./output/definitions/metering-and-billing/v3/*.yaml", "bundle": "openapi bundle output/definitions/metering-and-billing/v3/openapi.OpenMeter.yaml", "watch": "tsp compile --watch --config tspconfig.yaml ./src", - "format": "prettier --ignore-path ../../.prettierignore --list-different --find-config-path --write .", + "format": "node ./scripts/apply-doc-fixes.mjs && prettier --ignore-path ../../.prettierignore --list-different --find-config-path --write .", "lint": "prettier --ignore-path ../../.prettierignore --check .", "lint:fix": "prettier --ignore-path ../../.prettierignore --write ." }, @@ -26,6 +26,7 @@ "@typespec/openapi3": "1.11.0", "@typespec/prettier-plugin-typespec": "1.11.0", "@typespec/rest": "0.81.0", + "prettier": "3.8.3", "yaml": "2.8.3" }, "private": true, diff --git a/api/spec/packages/aip/scripts/apply-doc-fixes.mjs b/api/spec/packages/aip/scripts/apply-doc-fixes.mjs new file mode 100644 index 0000000000..3c0a9da4a8 --- /dev/null +++ b/api/spec/packages/aip/scripts/apply-doc-fixes.mjs @@ -0,0 +1,55 @@ +#!/usr/bin/env node + +import { readFile } from 'node:fs/promises' +import path from 'node:path' +import process from 'node:process' +import { applyCodeFixes, compile, NodeHost } from '@typespec/compiler' + +const CODEFIX_ID = 'format-doc-comment' +const RULE_NAME = 'doc-format' + +const cwd = process.cwd() +const pkg = JSON.parse( + await readFile(path.resolve(cwd, 'package.json'), 'utf8'), +) + +// Derive the linter ruleset id from `package.json#name` (e.g. +// `@openmeter/api-spec-aip/all`) so renaming the package doesn't break this. +const RULE_ID = `${pkg.name}/${RULE_NAME}` +const RULESET = `${pkg.name}/all` + +// Derive the TypeSpec entrypoint from `package.json#exports['.'].typespec`, +// matching how `tsp compile ./src` resolves it. +const entryRel = pkg.exports?.['.']?.typespec +if (!entryRel) { + console.error( + "apply-doc-fixes: package.json must declare exports['.'].typespec", + ) + process.exit(1) +} +const entry = path.resolve(cwd, entryRel) + +// `compile()` doesn't read `tspconfig.yaml`, so the linter ruleset has to be +// passed explicitly here. Mirror what `tspconfig.yaml` configures. +const program = await compile(NodeHost, entry, { + noEmit: true, + linterRuleSet: { extends: [RULESET] }, +}) + +// Each lint diagnostic carries our `format-doc-comment` codefix plus an +// auto-attached `suppress` codefix from the compiler. Apply only ours. +const matching = program.diagnostics.filter((d) => d.code === RULE_ID) +const fixes = matching.flatMap( + (d) => d.codefixes?.filter((c) => c.id === CODEFIX_ID) ?? [], +) + +if (fixes.length === 0) { + console.error('apply-doc-fixes: no doc-format codefixes to apply') + process.exit(0) +} + +await applyCodeFixes(NodeHost, fixes) + +console.error( + `apply-doc-fixes: applied ${fixes.length} fix(es) across ${matching.length} diagnostic(s)`, +) diff --git a/api/spec/packages/aip/src/apps/catalog.tsp b/api/spec/packages/aip/src/apps/catalog.tsp index 9880a6c0f5..b7d7980c47 100644 --- a/api/spec/packages/aip/src/apps/catalog.tsp +++ b/api/spec/packages/aip/src/apps/catalog.tsp @@ -5,7 +5,9 @@ namespace Apps; /** * Available apps for billing integrations to connect with third-party services. - * Apps can have various capabilities like syncing data from or to external systems, integrating with third-party services for tax calculation, delivery of invoices, collection of payments, etc. + * Apps can have various capabilities like syncing data from or to external + * systems, integrating with third-party services for tax calculation, delivery of + * invoices, collection of payments, etc. */ @friendlyName("BillingAppCatalogItem") @example(#{ diff --git a/api/spec/packages/aip/src/apps/external_invoicing.tsp b/api/spec/packages/aip/src/apps/external_invoicing.tsp index 8ec172f93a..60a45d6237 100644 --- a/api/spec/packages/aip/src/apps/external_invoicing.tsp +++ b/api/spec/packages/aip/src/apps/external_invoicing.tsp @@ -5,19 +5,23 @@ import "../invoices/index.tsp"; namespace Apps; /** - * External Invoicing app enables integration with third-party invoicing or payment system. + * External Invoicing app enables integration with third-party invoicing or payment + * system. * - * The app supports a bi-directional synchronization pattern where OpenMeter Billing manages - * the invoice lifecycle while the external system handles invoice presentation and payment collection. + * The app supports a bi-directional synchronization pattern where OpenMeter + * Billing manages the invoice lifecycle while the external system handles invoice + * presentation and payment collection. * * Integration workflow: - * 1. The billing system creates invoices and transitions them through lifecycle states (draft → issuing → issued) + * + * 1. The billing system creates invoices and transitions them through lifecycle + * states (draft → issuing → issued) * 2. The integration receives webhook notifications about invoice state changes * 3. The integration calls back to provide external system IDs and metadata * 4. The integration reports payment events back via the payment status API * - * State synchronization is controlled by hooks that pause invoice progression until the - * external system confirms synchronization via API callbacks. + * State synchronization is controlled by hooks that pause invoice progression + * until the external system confirms synchronization via API callbacks. */ @friendlyName("BillingAppExternalInvoicing") model AppExternalInvoicing { @@ -26,9 +30,10 @@ model AppExternalInvoicing { /** * Enable draft synchronization hook. * - * When enabled, invoices will pause at the draft state and wait for the integration - * to call the draft synchronized endpoint before progressing to the issuing state. - * This allows the external system to validate and prepare the invoice data. + * When enabled, invoices will pause at the draft state and wait for the + * integration to call the draft synchronized endpoint before progressing to the + * issuing state. This allows the external system to validate and prepare the + * invoice data. * * When disabled, invoices automatically progress through the draft state based on * the configured workflow timing. @@ -38,10 +43,10 @@ model AppExternalInvoicing { /** * Enable issuing synchronization hook. * - * When enabled, invoices will pause at the issuing state and wait for the integration - * to call the issuing synchronized endpoint before progressing to the issued state. - * This ensures the external invoicing system has successfully created and finalized - * the invoice before it is marked as issued. + * When enabled, invoices will pause at the issuing state and wait for the + * integration to call the issuing synchronized endpoint before progressing to the + * issued state. This ensures the external invoicing system has successfully + * created and finalized the invoice before it is marked as issued. * * When disabled, invoices automatically progress through the issuing state and are * immediately marked as issued. diff --git a/api/spec/packages/aip/src/apps/stripe.tsp b/api/spec/packages/aip/src/apps/stripe.tsp index 61e5661eb0..c4b9ba4776 100644 --- a/api/spec/packages/aip/src/apps/stripe.tsp +++ b/api/spec/packages/aip/src/apps/stripe.tsp @@ -40,14 +40,16 @@ model AppStripe { /** * Configuration options for creating a Stripe Checkout Session. * - * Based on Stripe's [Checkout Session API parameters](https://docs.stripe.com/api/checkout/sessions/create). + * Based on Stripe's + * [Checkout Session API parameters](https://docs.stripe.com/api/checkout/sessions/create). */ @friendlyName("BillingAppStripeCreateCheckoutSessionRequestOptions") model CreateStripeCheckoutSessionRequestOptions { /** * Whether to collect the customer's billing address. * - * Defaults to auto, which only collects the address when necessary for tax calculation. + * Defaults to auto, which only collects the address when necessary for tax + * calculation. */ billing_address_collection?: CreateStripeCheckoutSessionBillingAddressCollection = CreateStripeCheckoutSessionBillingAddressCollection.Auto; @@ -111,23 +113,24 @@ model CreateStripeCheckoutSessionRequestOptions { /** * Return URL for embedded checkout sessions after payment authentication. * - * Required if ui_mode is "embedded" and redirect-based payment methods are enabled. + * Required if ui_mode is "embedded" and redirect-based payment methods are + * enabled. */ return_url?: string; /** * Success URL to redirect customers after completing payment or setup. * - * Not allowed when ui_mode is "embedded". - * See: https://docs.stripe.com/payments/checkout/custom-success-page + * Not allowed when ui_mode is "embedded". See: + * https://docs.stripe.com/payments/checkout/custom-success-page */ success_url?: string; /** * The UI mode for the checkout session. * - * "hosted" displays a Stripe-hosted page. "embedded" integrates directly into your app. - * Defaults to "hosted". + * "hosted" displays a Stripe-hosted page. "embedded" integrates directly into your + * app. Defaults to "hosted". */ ui_mode?: CheckoutSessionUIMode = CheckoutSessionUIMode.Hosted; @@ -141,8 +144,8 @@ model CreateStripeCheckoutSessionRequestOptions { /** * Redirect behavior for embedded checkout sessions. * - * Controls when to redirect users after completion. - * See: https://docs.stripe.com/payments/checkout/custom-success-page?payment-ui=embedded-form + * Controls when to redirect users after completion. See: + * https://docs.stripe.com/payments/checkout/custom-success-page?payment-ui=embedded-form */ redirect_on_completion?: CreateStripeCheckoutSessionRedirectOnCompletion; @@ -181,8 +184,8 @@ model CreateStripeCheckoutSessionConsentCollection { /** * Enables collection of promotional communication consent. * - * Only available to US merchants. When set to "auto", Checkout determines - * whether to show the option based on the customer's locale. + * Only available to US merchants. When set to "auto", Checkout determines whether + * to show the option based on the customer's locale. */ promotions?: CreateStripeCheckoutSessionConsentCollectionPromotions; @@ -424,8 +427,8 @@ model CheckoutSessionCustomTextParams { /** * Result of creating a Stripe Checkout Session. * - * Contains all the information needed to redirect customers to the checkout - * or initialize an embedded checkout flow. + * Contains all the information needed to redirect customers to the checkout or + * initialize an embedded checkout flow. */ #suppress "@openmeter/api-spec-aip/repeated-prefix-grouping" "Field names match Stripe API response structure" @friendlyName("BillingAppStripeCreateCheckoutSessionResult") @@ -453,8 +456,8 @@ model CreateStripeCheckoutSessionResult { /** * Client secret for initializing Stripe.js on the client side. * - * Required for embedded checkout sessions. - * See: https://docs.stripe.com/payments/checkout/custom-success-page + * Required for embedded checkout sessions. See: + * https://docs.stripe.com/payments/checkout/custom-success-page */ client_secret?: string; @@ -493,7 +496,8 @@ model CreateStripeCheckoutSessionResult { /** * The status of the checkout session. * - * See: https://docs.stripe.com/api/checkout/sessions/object#checkout_session_object-status + * See: + * https://docs.stripe.com/api/checkout/sessions/object#checkout_session_object-status */ status?: string; @@ -546,36 +550,43 @@ enum StripeCheckoutSessionMode { @friendlyName("BillingAppStripeCreateCustomerPortalSessionOptions") model CreateStripeCustomerPortalSessionOptions { /** - * The ID of an existing [Stripe configuration](https://docs.stripe.com/api/customer_portal/configurations) to use for this session, - * describing its functionality and features. - * If not specified, the session uses the default configuration. + * The ID of an existing + * [Stripe configuration](https://docs.stripe.com/api/customer_portal/configurations) + * to use for this session, describing its functionality and features. If not + * specified, the session uses the default configuration. */ configuration_id?: string; /** - * The IETF [language tag](https://docs.stripe.com/api/customer_portal/sessions/create#create_portal_session-locale) of the locale customer portal is displayed in. - * If blank or `auto`, the customer's preferred_locales or browser's locale is used. + * The IETF + * [language tag](https://docs.stripe.com/api/customer_portal/sessions/create#create_portal_session-locale) + * of the locale customer portal is displayed in. If blank or `auto`, the + * customer's preferred_locales or browser's locale is used. */ locale?: string; /** - * The [URL to redirect](https://docs.stripe.com/api/customer_portal/sessions/create#create_portal_session-return_url) the customer to after they have completed - * their requested actions. + * The + * [URL to redirect](https://docs.stripe.com/api/customer_portal/sessions/create#create_portal_session-return_url) + * the customer to after they have completed their requested actions. */ return_url?: string; } /** - * Result of creating a [Stripe Customer Portal Session](https://docs.stripe.com/api/customer_portal/sessions/object). + * Result of creating a + * [Stripe Customer Portal Session](https://docs.stripe.com/api/customer_portal/sessions/object). * - * Contains all the information needed to redirect the customer to the Stripe Customer Portal. + * Contains all the information needed to redirect the customer to the Stripe + * Customer Portal. */ @friendlyName("BillingAppStripeCreateCustomerPortalSessionResult") model CreateStripeCustomerPortalSessionResult { /** * The ID of the customer portal session. * - * See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-id + * See: + * https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-id */ id: string; @@ -587,41 +598,46 @@ model CreateStripeCustomerPortalSessionResult { /** * Configuration used to customize the customer portal. * - * See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-configuration + * See: + * https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-configuration */ configuration_id: string; /** * Livemode. * - * See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-livemode + * See: + * https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-livemode */ livemode: boolean; /** * Created at. * - * See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-created + * See: + * https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-created */ created_at: Shared.DateTime; /** * Return URL. * - * See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-return_url + * See: + * https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-return_url */ return_url: string; /** * The IETF language tag of the locale customer portal is displayed in. * - * See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-locale + * See: + * https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-locale */ locale: string; /** - * The URL to redirect the customer to after they have completed - * their requested actions. + * The URL to redirect the customer to after they have completed their requested + * actions. */ url: string; } diff --git a/api/spec/packages/aip/src/billing/operations.tsp b/api/spec/packages/aip/src/billing/operations.tsp index f82d2c419a..c6215c6f5a 100644 --- a/api/spec/packages/aip/src/billing/operations.tsp +++ b/api/spec/packages/aip/src/billing/operations.tsp @@ -27,9 +27,10 @@ interface BillingProfilesOperations { /** * Create a new billing profile. * - * Billing profiles contain the settings for billing and controls invoice generation. - * An organization can have multiple billing profiles defined. - * A billing profile is linked to a specific app. This association is established during the billing profile's creation and remains immutable. + * Billing profiles contain the settings for billing and controls invoice + * generation. An organization can have multiple billing profiles defined. A + * billing profile is linked to a specific app. This association is established + * during the billing profile's creation and remains immutable. */ @post @operationId("create-billing-profile") @@ -62,6 +63,7 @@ interface BillingProfilesOperations { * Delete a billing profile. * * Only such billing profiles can be deleted that are: + * * - not the default profile * - not pinned to any customer using customer overrides * - only have finalized invoices diff --git a/api/spec/packages/aip/src/billing/profile.tsp b/api/spec/packages/aip/src/billing/profile.tsp index 50604e3510..ae2f7a4f29 100644 --- a/api/spec/packages/aip/src/billing/profile.tsp +++ b/api/spec/packages/aip/src/billing/profile.tsp @@ -6,14 +6,16 @@ import "./tax.tsp"; namespace Billing; /** - * Billing profiles contain the settings for billing and controls invoice generation. + * Billing profiles contain the settings for billing and controls invoice + * generation. */ @friendlyName("BillingProfile") model BillingProfile { ...Shared.Resource; /** - * The name and contact information for the supplier this billing profile represents + * The name and contact information for the supplier this billing profile + * represents */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) supplier: Invoices.BillingParty; @@ -79,7 +81,8 @@ model BillingWorkflow { } /** - * Workflow collection specifies how to collect the pending line items for an invoice. + * Workflow collection specifies how to collect the pending line items for an + * invoice. */ @summary("Workflow collection settings") @friendlyName("BillingWorkflowCollectionSettings") @@ -91,10 +94,11 @@ model BillingWorkflowCollectionSettings { alignment?: BillingWorkflowCollectionAlignment = DefaultBillingWorkflowCollectionAlignment; /** - * This grace period can be used to delay the collection of the pending line items specified in - * alignment. + * This grace period can be used to delay the collection of the pending line items + * specified in alignment. * - * This is useful, in case of multiple subscriptions having slightly different billing periods. + * This is useful, in case of multiple subscriptions having slightly different + * billing periods. */ @encode(DurationKnownEncoding.ISO8601) @example("P1D") @@ -103,8 +107,8 @@ model BillingWorkflowCollectionSettings { } /** - * BillingCollectionAlignment specifies when the pending line items should be collected into - * an invoice. + * BillingCollectionAlignment specifies when the pending line items should be + * collected into an invoice. */ @friendlyName("BillingCollectionAlignment") @summary("Collection alignment") @@ -127,8 +131,9 @@ const DefaultBillingWorkflowCollectionAlignment: BillingWorkflowCollectionAlignm /** * The alignment for collecting the pending line items into an invoice. * - * Defaults to subscription, which means that we are to create a new invoice every time the - * a subscription period starts (for in advance items) or ends (for in arrears items). + * Defaults to subscription, which means that we are to create a new invoice every + * time the a subscription period starts (for in advance items) or ends (for in + * arrears items). */ @friendlyName("BillingWorkflowCollectionAlignment") @discriminated(#{ discriminatorPropertyName: "type", envelope: "none" }) @@ -138,8 +143,8 @@ union BillingWorkflowCollectionAlignment { } /** - * BillingWorkflowCollectionAlignmentAnchored specifies the alignment for collecting the pending line items - * into an invoice. + * BillingWorkflowCollectionAlignmentAnchored specifies the alignment for + * collecting the pending line items into an invoice. */ @friendlyName("BillingWorkflowCollectionAlignmentAnchored") model BillingWorkflowCollectionAlignmentAnchored { @@ -157,8 +162,8 @@ model BillingWorkflowCollectionAlignmentAnchored { } /** - * BillingWorkflowCollectionAlignmentSubscription specifies the alignment for collecting the pending line items - * into an invoice. + * BillingWorkflowCollectionAlignmentSubscription specifies the alignment for + * collecting the pending line items into an invoice. */ @friendlyName("BillingWorkflowCollectionAlignmentSubscription") model BillingWorkflowCollectionAlignmentSubscription { @@ -203,17 +208,17 @@ model BillingWorkflowInvoicingSettings { @friendlyName("BillingWorkflowTaxSettings") model BillingWorkflowTaxSettings { /** - * Enable automatic tax calculation when tax is supported by the app. - * For example, with Stripe Invoicing when enabled, tax is calculated via Stripe Tax. + * Enable automatic tax calculation when tax is supported by the app. For example, + * with Stripe Invoicing when enabled, tax is calculated via Stripe Tax. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) enabled?: boolean = true; /** - * Enforce tax calculation when tax is supported by the app. - * When enabled, the billing system will not allow to create an invoice without tax calculation. - * Enforcement is different per apps, for example, Stripe app requires customer - * to have a tax location when starting a paid subscription. + * Enforce tax calculation when tax is supported by the app. When enabled, the + * billing system will not allow to create an invoice without tax calculation. + * Enforcement is different per apps, for example, Stripe app requires customer to + * have a tax location when starting a paid subscription. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) enforced?: boolean = false; @@ -274,7 +279,8 @@ model BillingProfileAppReferences { } /** - * Collection method specifies how the invoice should be collected (automatic or manual). + * Collection method specifies how the invoice should be collected (automatic or + * manual). */ @friendlyName("BillingCollectionMethod") @summary("Collection method") @@ -300,7 +306,8 @@ union BillingWorkflowPaymentSettings { } /** - * Payment settings for a billing workflow when the collection method is charge automatically. + * Payment settings for a billing workflow when the collection method is charge + * automatically. */ @friendlyName("BillingWorkflowPaymentChargeAutomaticallySettings") model BillingWorkflowPaymentChargeAutomaticallySettings { @@ -312,7 +319,8 @@ model BillingWorkflowPaymentChargeAutomaticallySettings { } /** - * Payment settings for a billing workflow when the collection method is send invoice. + * Payment settings for a billing workflow when the collection method is send + * invoice. */ @friendlyName("BillingWorkflowPaymentSendInvoiceSettings") model BillingWorkflowPaymentSendInvoiceSettings { @@ -323,8 +331,8 @@ model BillingWorkflowPaymentSendInvoiceSettings { collection_method: CollectionMethod.SendInvoice; /** - * The period after which the invoice is due. - * With some payment solutions it's only applicable for manual collection method. + * The period after which the invoice is due. With some payment solutions it's only + * applicable for manual collection method. */ @encode(DurationKnownEncoding.ISO8601) @example("P30D") diff --git a/api/spec/packages/aip/src/billing/tax.tsp b/api/spec/packages/aip/src/billing/tax.tsp index 92ed3aca38..56d50283de 100644 --- a/api/spec/packages/aip/src/billing/tax.tsp +++ b/api/spec/packages/aip/src/billing/tax.tsp @@ -9,8 +9,8 @@ model TaxConfig { /** * Tax behavior. * - * If not specified the billing profile is used to determine the tax behavior. - * If not specified in the billing profile, the provider's default behavior is used. + * If not specified the billing profile is used to determine the tax behavior. If + * not specified in the billing profile, the provider's default behavior is used. */ @summary("Tax behavior") behavior?: TaxBehavior; @@ -18,8 +18,8 @@ model TaxConfig { /** * Stripe tax config. * - * @deprecated Use `tax_code` instead. When both `stripe.code` and `tax_code` are provided, - * `tax_code` takes precedence and `stripe.code` is ignored. + * @deprecated Use `tax_code` instead. When both `stripe.code` and `tax_code` are + * provided, `tax_code` takes precedence and `stripe.code` is ignored. */ #deprecated "Use tax_code instead" @summary("Stripe tax config") @@ -46,8 +46,9 @@ model TaxConfig { /** * Tax code reference. * - * When both `tax_code` and `tax_code_id` are provided, `tax_code` takes precedence. - * When `stripe.code` is also provided, `tax_code` still wins and `stripe.code` is ignored. + * When both `tax_code` and `tax_code_id` are provided, `tax_code` takes + * precedence. When `stripe.code` is also provided, `tax_code` still wins and + * `stripe.code` is ignored. */ @summary("Tax code") tax_code?: Tax.TaxCodeReference; @@ -56,7 +57,8 @@ model TaxConfig { /** * Tax behavior. * - * This enum is used to specify whether tax is included in the price or excluded from the price. + * This enum is used to specify whether tax is included in the price or excluded + * from the price. */ @friendlyName("BillingTaxBehavior") enum TaxBehavior { diff --git a/api/spec/packages/aip/src/common/parameters.tsp b/api/spec/packages/aip/src/common/parameters.tsp index 5d391c25e5..2e29915af0 100644 --- a/api/spec/packages/aip/src/common/parameters.tsp +++ b/api/spec/packages/aip/src/common/parameters.tsp @@ -9,8 +9,8 @@ namespace Common; /** * Sort query. * - * The `asc` suffix is optional as the default sort order is ascending. - * The `desc` suffix is used to specify a descending order. + * The `asc` suffix is optional as the default sort order is ascending. The `desc` + * suffix is used to specify a descending order. */ @useRef("../../../../common/definitions/aip_filters.yaml#/components/schemas/SortQuery") @friendlyName("SortQuery") @@ -29,14 +29,16 @@ model SortQuery {} union BooleanFieldFilter { equals: boolean, object: { - /** Value strictly equals the given boolean value. */ + /** + * Value strictly equals the given boolean value. + */ eq: boolean, }, } /** - * Filter by a numeric value. - * All properties are optional; provide exactly one to specify the comparison. + * Filter by a numeric value. All properties are optional; provide exactly one to + * specify the comparison. */ @friendlyName("NumericFieldFilter") @extension("x-go-type", "filters.FilterNumeric") @@ -48,33 +50,47 @@ union BooleanFieldFilter { union NumericFieldFilter { equals: float64, object: { - /** Value strictly equals the given numeric value. */ + /** + * Value strictly equals the given numeric value. + */ eq?: float64, - /** Value does not equal the given numeric value. */ + /** + * Value does not equal the given numeric value. + */ neq?: float64, - /** Returns entities that match any of the comma-delimited numeric values. */ + /** + * Returns entities that match any of the comma-delimited numeric values. + */ @encode(ArrayEncoding.commaDelimited) oeq?: float64[], - /** Value is less than the given numeric value. */ + /** + * Value is less than the given numeric value. + */ lt?: float64, - /** Value is less than or equal to the given numeric value. */ + /** + * Value is less than or equal to the given numeric value. + */ lte?: float64, - /** Value is greater than the given numeric value. */ + /** + * Value is greater than the given numeric value. + */ gt?: float64, - /** Value is greater than or equal to the given numeric value. */ + /** + * Value is greater than or equal to the given numeric value. + */ gte?: float64, }, } /** - * Filters on the given string field value by either exact or fuzzy match. - * All properties are optional; provide exactly one to specify the comparison. + * Filters on the given string field value by either exact or fuzzy match. All + * properties are optional; provide exactly one to specify the comparison. */ @friendlyName("StringFieldFilter") @extension("x-go-type", "filters.FilterString") @@ -85,43 +101,67 @@ union NumericFieldFilter { union StringFieldFilter { equals: string, object: { - /** Value strictly equals the given string value. */ + /** + * Value strictly equals the given string value. + */ eq?: string, - /** Value does not equal the given string value. */ + /** + * Value does not equal the given string value. + */ neq?: string, - /** Value contains the given string value (fuzzy match). */ + /** + * Value contains the given string value (fuzzy match). + */ contains?: string, - /** Returns entities that fuzzy-match any of the comma-delimited phrases in the filter string. */ + /** + * Returns entities that fuzzy-match any of the comma-delimited phrases in the + * filter string. + */ @encode(ArrayEncoding.commaDelimited) ocontains?: string[], - /** Returns entities that exact match any of the comma-delimited phrases in the filter string. */ + /** + * Returns entities that exact match any of the comma-delimited phrases in the + * filter string. + */ @encode(ArrayEncoding.commaDelimited) oeq?: string[], - /** Value is greater than the given string value (lexicographic compare). */ + /** + * Value is greater than the given string value (lexicographic compare). + */ gt?: string, - /** Value is greater than or equal to the given string value (lexicographic compare). */ + /** + * Value is greater than or equal to the given string value (lexicographic + * compare). + */ gte?: string, - /** Value is less than the given string value (lexicographic compare). */ + /** + * Value is less than the given string value (lexicographic compare). + */ lt?: string, - /** Value is less than or equal to the given string value (lexicographic compare). */ + /** + * Value is less than or equal to the given string value (lexicographic compare). + */ lte?: string, - /** When true, the field must be present (non-null); when false, the field must be absent (null). */ + /** + * When true, the field must be present (non-null); when false, the field must be + * absent (null). + */ exists?: boolean, }, } /** - * Filters on the given string field value by exact match. - * All properties are optional; provide exactly one to specify the comparison. + * Filters on the given string field value by exact match. All properties are + * optional; provide exactly one to specify the comparison. */ @friendlyName("StringFieldFilterExact") @extension("x-go-type", "filters.FilterStringExact") @@ -133,21 +173,28 @@ union StringFieldFilter { union StringFieldFilterExact { equals: string, object: { - /** Value strictly equals the given string value. */ + /** + * Value strictly equals the given string value. + */ eq?: string, - /** Returns entities that exact match any of the comma-delimited phrases in the filter string. */ + /** + * Returns entities that exact match any of the comma-delimited phrases in the + * filter string. + */ @encode(ArrayEncoding.commaDelimited) oeq?: string[], - /** Value does not equal the given string value. */ + /** + * Value does not equal the given string value. + */ neq?: string, }, } /** - * Filters on the given ULID field value by exact match. - * All properties are optional; provide exactly one to specify the comparison. + * Filters on the given ULID field value by exact match. All properties are + * optional; provide exactly one to specify the comparison. */ @friendlyName("ULIDFieldFilter") @extension("x-go-type", "filters.FilterULID") @@ -159,21 +206,28 @@ union StringFieldFilterExact { union ULIDFieldFilter { equals: Shared.ULID, object: { - /** Value strictly equals the given ULID value. */ + /** + * Value strictly equals the given ULID value. + */ eq?: Shared.ULID, - /** Returns entities that exact match any of the comma-delimited ULIDs in the filter string. */ + /** + * Returns entities that exact match any of the comma-delimited ULIDs in the filter + * string. + */ @encode(ArrayEncoding.commaDelimited) oeq?: Shared.ULID[], - /** Value does not equal the given ULID value. */ + /** + * Value does not equal the given ULID value. + */ neq?: Shared.ULID, }, } /** - * Filters on the given datetime (RFC-3339) field value. - * All properties are optional; provide exactly one to specify the comparison. + * Filters on the given datetime (RFC-3339) field value. All properties are + * optional; provide exactly one to specify the comparison. */ @friendlyName("DateTimeFieldFilter") @extension("x-go-type", "filters.FilterDateTime") @@ -185,19 +239,29 @@ union ULIDFieldFilter { union DateTimeFieldFilter { equals: Shared.DateTime, object: { - /** Value strictly equals given RFC-3339 formatted timestamp in UTC. */ + /** + * Value strictly equals given RFC-3339 formatted timestamp in UTC. + */ eq?: Shared.DateTime, - /** Value is less than the given RFC-3339 formatted timestamp in UTC. */ + /** + * Value is less than the given RFC-3339 formatted timestamp in UTC. + */ lt?: Shared.DateTime, - /** Value is less than or equal to the given RFC-3339 formatted timestamp in UTC. */ + /** + * Value is less than or equal to the given RFC-3339 formatted timestamp in UTC. + */ lte?: Shared.DateTime, - /** Value is greater than the given RFC-3339 formatted timestamp in UTC. */ + /** + * Value is greater than the given RFC-3339 formatted timestamp in UTC. + */ gt?: Shared.DateTime, - /** Value is greater than or equal to the given RFC-3339 formatted timestamp in UTC. */ + /** + * Value is greater than or equal to the given RFC-3339 formatted timestamp in UTC. + */ gte?: Shared.DateTime, }, } @@ -205,9 +269,10 @@ union DateTimeFieldFilter { /** * Filters on the resource's `labels` field. * - * The schema is a map keyed by the label name; each value is a `StringFieldFilter`. - * Both deepObject forms are accepted: `filter[labels][key]=value` (nested) and - * `filter[labels.key]=value` (dot-notation). + * The schema is a map keyed by the label name; each value is a + * `StringFieldFilter`. Both deepObject forms are accepted: + * `filter[labels][key]=value` (nested) and `filter[labels.key]=value` + * (dot-notation). */ @friendlyName("LabelsFieldFilter") @extension("x-go-type", "filters.FilterLabels") diff --git a/api/spec/packages/aip/src/common/properties.tsp b/api/spec/packages/aip/src/common/properties.tsp index 0bd9a674e5..d6ff805de0 100644 --- a/api/spec/packages/aip/src/common/properties.tsp +++ b/api/spec/packages/aip/src/common/properties.tsp @@ -6,16 +6,19 @@ using TypeSpec.OpenAPI; namespace Common; /** - * Labels store metadata of an entity that can be used for filtering an entity list or for searching across entity types. + * Labels store metadata of an entity that can be used for filtering an entity list + * or for searching across entity types. * - * Keys must be of length 1-63 characters, and cannot start with "kong", "konnect", "mesh", "kic", or "_". + * Keys must be of length 1-63 characters, and cannot start with "kong", "konnect", + * "mesh", "kic", or "\_". */ @useRef("../../../../common/definitions/konnect_properties.yaml#/components/schemas/Labels") @friendlyName("Labels") model Labels {} /** - * Public labels store information about an entity that can be used for filtering a list of objects. + * Public labels store information about an entity that can be used for filtering a + * list of objects. */ @useRef("../../../../common/definitions/konnect_properties.yaml#/components/schemas/PublicLabels") @friendlyName("PublicLabels") diff --git a/api/spec/packages/aip/src/currencies/cost-bases/cost-basis.tsp b/api/spec/packages/aip/src/currencies/cost-bases/cost-basis.tsp index aa223c573b..23856b37ea 100644 --- a/api/spec/packages/aip/src/currencies/cost-bases/cost-basis.tsp +++ b/api/spec/packages/aip/src/currencies/cost-bases/cost-basis.tsp @@ -24,8 +24,9 @@ model CostBasis { rate: Shared.Numeric; /** - * An ISO-8601 timestamp representation of the date from which the cost basis is effective. - * If not provided, it will be effective immediately and will set to `now` by the system. + * An ISO-8601 timestamp representation of the date from which the cost basis is + * effective. If not provided, it will be effective immediately and will be set to + * `now` by the system. */ @visibility(Lifecycle.Create, Lifecycle.Read) effective_from?: Shared.DateTime; diff --git a/api/spec/packages/aip/src/currencies/cost-bases/operations.tsp b/api/spec/packages/aip/src/currencies/cost-bases/operations.tsp index 21a3a59e2e..c7f348e04a 100644 --- a/api/spec/packages/aip/src/currencies/cost-bases/operations.tsp +++ b/api/spec/packages/aip/src/currencies/cost-bases/operations.tsp @@ -26,8 +26,8 @@ model ListCostBasesParamsFilter { interface CurrenciesCustomCostBasesOperations { /** - * List cost bases for a currency. - * For custom currencies, there can be multiple cost bases with different `effective_from` dates. + * List cost bases for a currency. For custom currencies, there can be multiple + * cost bases with different `effective_from` dates. */ @extension(Shared.UnstableExtension, true) @extension(Shared.InternalExtension, true) @@ -40,7 +40,8 @@ interface CurrenciesCustomCostBasesOperations { /** * Filter cost bases returned in the response. * - * To filter cost bases by fiat currency code add the following query param: filter[fiat_code]=USD + * To filter cost bases by fiat currency code add the following query param: + * filter[fiat_code]=USD */ @query(#{ style: "deepObject", explode: true }) filter?: ListCostBasesParamsFilter, diff --git a/api/spec/packages/aip/src/currencies/currency.tsp b/api/spec/packages/aip/src/currencies/currency.tsp index e2ee431e65..cdf8a808a9 100644 --- a/api/spec/packages/aip/src/currencies/currency.tsp +++ b/api/spec/packages/aip/src/currencies/currency.tsp @@ -6,8 +6,8 @@ namespace Currencies; using TypeSpec.OpenAPI; /** - * Currency type for custom currencies. - * It should be a unique code but not conflicting with any existing standard currency codes. + * Currency type for custom currencies. It should be a unique code but not + * conflicting with any existing standard currency codes. */ @friendlyName("BillingCurrencyType") enum CurrencyType { @@ -55,7 +55,8 @@ model CurrencyBase { type: T; /** - * The name of the currency. It should be a human-readable string that represents the name of the currency, such as "US Dollar" or "Euro". + * The name of the currency. It should be a human-readable string that represents + * the name of the currency, such as "US Dollar" or "Euro". */ @visibility(Lifecycle.Create, Lifecycle.Read) @minLength(1) @@ -71,7 +72,8 @@ model CurrencyBase { description?: string; /** - * The symbol of the currency. It should be a string that represents the symbol of the currency, such as "$" for US Dollar or "€" for Euro. + * The symbol of the currency. It should be a string that represents the symbol of + * the currency, such as "$" for US Dollar or "€" for Euro. */ @visibility(Lifecycle.Create, Lifecycle.Read) @minLength(1) @@ -91,8 +93,8 @@ model CurrencyFiat { } /** - * Custom currency code. - * It should be a unique code but not conflicting with any existing fiat currency codes. + * Custom currency code. It should be a unique code but not conflicting with any + * existing fiat currency codes. */ @friendlyName("BillingCurrencyCodeCustom") @minLength(3) diff --git a/api/spec/packages/aip/src/currencies/operations.tsp b/api/spec/packages/aip/src/currencies/operations.tsp index c620fb0fe1..dfbcdfe3fd 100644 --- a/api/spec/packages/aip/src/currencies/operations.tsp +++ b/api/spec/packages/aip/src/currencies/operations.tsp @@ -47,8 +47,8 @@ interface CurrenciesOperations { interface CurrenciesCustomOperations { /** - * Create a custom currency. - * This operation allows defining your own custom currency for billing purposes. + * Create a custom currency. This operation allows defining your own custom + * currency for billing purposes. */ @extension(Shared.UnstableExtension, true) @extension(Shared.InternalExtension, true) diff --git a/api/spec/packages/aip/src/customers/charges/charges.tsp b/api/spec/packages/aip/src/customers/charges/charges.tsp index 92cb319746..67ca5206e8 100644 --- a/api/spec/packages/aip/src/customers/charges/charges.tsp +++ b/api/spec/packages/aip/src/customers/charges/charges.tsp @@ -9,6 +9,7 @@ namespace Customers; * Type of a charge. * * Values: + * * - `flat_fee`: A fixed-amount charge. * - `usage_based`: A usage-priced charge. */ @@ -23,6 +24,7 @@ enum ChargeType { * Lifecycle status of a charge. * * Values: + * * - `created`: The charge has been created but is not active yet. * - `active`: The charge is active. * - `final`: The charge is fully finalized and no further changes are expected. @@ -40,7 +42,8 @@ enum ChargeStatus { /** * Discounts applicable to flat fee charges. * - * This is the same as `ProductCatalog.Discounts` but without the `usage` field, which is not applicable to flat fee charges. + * This is the same as `ProductCatalog.Discounts` but without the `usage` field, + * which is not applicable to flat fee charges. */ @friendlyName("BillingFlatFeeDiscounts") @summary("Flat fee charge discounts") @@ -79,7 +82,8 @@ model ChargeBase { managed_by: Shared.ResourceManagedBy; /** - * The subscription that originated the charge, when the charge was created from a subscription item. + * The subscription that originated the charge, when the charge was created from a + * subscription item. */ @visibility(Lifecycle.Read) @summary("Subscription") @@ -128,7 +132,8 @@ model ChargeBase { billing_period: Shared.ClosedPeriod; /** - * The earliest time when the charge should be advanced again by background processing. + * The earliest time when the charge should be advanced again by background + * processing. */ @visibility(Lifecycle.Read) @summary("Advance after") @@ -256,7 +261,9 @@ model UsageBasedCharge { // Status fields - /** Aggregated booked and realtime totals for the charge. */ + /** + * Aggregated booked and realtime totals for the charge. + */ @visibility(Lifecycle.Read) @summary("Totals for the charge") totals: ChargeTotals; @@ -284,6 +291,7 @@ union Charge { * Expands for customer charges. * * Values: + * * - `real_time_usage`: The charge's real-time usage. */ @friendlyName("BillingChargesExpand") diff --git a/api/spec/packages/aip/src/customers/charges/operations.tsp b/api/spec/packages/aip/src/customers/charges/operations.tsp index 811bbcfe42..f6e67a8e83 100644 --- a/api/spec/packages/aip/src/customers/charges/operations.tsp +++ b/api/spec/packages/aip/src/customers/charges/operations.tsp @@ -21,6 +21,7 @@ model ListCustomerChargesParamsFilter { * Filter charges by status. * * Supported statuses are: + * * - `created` * - `active` * - `final` @@ -35,7 +36,8 @@ interface CustomerChargesOperations { /** * List customer charges. * - * Returns the customer's charges that are represented as either flat fee or usage-based charges. + * Returns the customer's charges that are represented as either flat fee or + * usage-based charges. */ @extension(Shared.UnstableExtension, true) @extension(Shared.InternalExtension, true) @@ -50,6 +52,7 @@ interface CustomerChargesOperations { * Sort charges returned in the response. * * Supported sort attributes are: + * * - `id` * - `created_at` * - `service_period.from` @@ -61,7 +64,8 @@ interface CustomerChargesOperations { /** * Filter charges. * - * To filter charges by status add the following query param: `filter[status][oeq]=created,active` + * To filter charges by status add the following query param: + * `filter[status][oeq]=created,active` */ @query(#{ style: "deepObject", explode: true }) filter?: ListCustomerChargesParamsFilter, @@ -70,6 +74,7 @@ interface CustomerChargesOperations { * Expand full objects for referenced entities. * * Supported values are: + * * - `real_time_usage`: Expand the charge's real-time usage. */ @query(#{ name: "expand", explode: true }) diff --git a/api/spec/packages/aip/src/customers/credits/adjustment.tsp b/api/spec/packages/aip/src/customers/credits/adjustment.tsp index 00567dcec3..875a0433b2 100644 --- a/api/spec/packages/aip/src/customers/credits/adjustment.tsp +++ b/api/spec/packages/aip/src/customers/credits/adjustment.tsp @@ -2,9 +2,11 @@ import "../../shared/index.tsp"; import "../../currencies/index.tsp"; /** - * A credit adjustment can be used to make manual adjustments to a customer's credit balance. + * A credit adjustment can be used to make manual adjustments to a customer's + * credit balance. * * Supported use-cases: + * * - Usage correction */ @friendlyName("BillingCreditAdjustment") diff --git a/api/spec/packages/aip/src/customers/credits/balance.tsp b/api/spec/packages/aip/src/customers/credits/balance.tsp index 8b7b7091bc..9bce56fcb5 100644 --- a/api/spec/packages/aip/src/customers/credits/balance.tsp +++ b/api/spec/packages/aip/src/customers/credits/balance.tsp @@ -33,16 +33,16 @@ model CreditBalance { currency: Currencies.CurrencyCode; /** - * Credits that have been granted but cannot yet be consumed. - * Includes grants awaiting payment clearance or with a future effective date. + * Credits that have been granted but cannot yet be consumed. Includes grants + * awaiting payment clearance or with a future effective date. */ @visibility(Lifecycle.Read) @example("200.00") pending: Shared.Numeric; /** - * Credits that can be consumed right now. - * Derived from cleared grants after applying eligibility and restriction rules. + * Credits that can be consumed right now. Derived from cleared grants after + * applying eligibility and restriction rules. */ @visibility(Lifecycle.Read) @example("150.00") diff --git a/api/spec/packages/aip/src/customers/credits/grant.tsp b/api/spec/packages/aip/src/customers/credits/grant.tsp index 2c19658e7d..4cbe0487f9 100644 --- a/api/spec/packages/aip/src/customers/credits/grant.tsp +++ b/api/spec/packages/aip/src/customers/credits/grant.tsp @@ -8,7 +8,8 @@ namespace Customers; * * - `none`: No funding workflow applies, for example promotional grants * - `invoice`: The grant is funded by an in-system invoice flow - * - `external`: The grant is funded outside the system (e.g., wire transfer, external invoice, or manual reconciliation) + * - `external`: The grant is funded outside the system (e.g., wire transfer, + * external invoice, or manual reconciliation) */ @friendlyName("BillingCreditFundingMethod") @summary("Credit funding method") @@ -66,9 +67,13 @@ enum CreditPurchasePaymentSettlementStatus { /** * Credit grant lifecycle status. * - * - `pending`: The credit block has been created but is not yet valid. (`effective_at` is in the future or availability_policy is not met) - * - `active`: The credit block is currently valid and eligible for consumption. (`effective_at` is in the past, `expires_at` is in the future and availability_policy is met) - * - `expired`: The credit block expired with remaining unused balance, `expires_at` time has passed. + * - `pending`: The credit block has been created but is not yet valid. + * (`effective_at` is in the future or availability_policy is not met) + * - `active`: The credit block is currently valid and eligible for consumption. + * (`effective_at` is in the past, `expires_at` is in the future and + * availability_policy is met) + * - `expired`: The credit block expired with remaining unused balance, + * `expires_at` time has passed. * - `voided`: The credit block was voided. Remaining balance is forfeited. */ @friendlyName("BillingCreditGrantStatus") @@ -110,8 +115,8 @@ model CreditGrantTaxConfig { /** * A credit grant allocates credits to a customer. * - * Credits are drawn down against charges according to the - * settlement mode configured on the rate card. + * Credits are drawn down against charges according to the settlement mode + * configured on the rate card. */ #suppress "@openmeter/api-spec-aip/repeated-prefix-grouping" "credit grant model" @summary("Credit grant") @@ -138,8 +143,8 @@ model CreditGrant { amount: Shared.Numeric; /** - * Purchase and payment terms of the grant. - * Present when a funding workflow applies (funding_method is not `none`). + * Purchase and payment terms of the grant. Present when a funding workflow applies + * (funding_method is not `none`). */ @visibility(Lifecycle.Read, Lifecycle.Create) purchase?: { @@ -152,9 +157,8 @@ model CreditGrant { /** * Cost basis per credit unit used to calculate the purchase amount. * - * If `per_unit_cost_basis` is 0.50 and credit amount is $100.00, - * the total charge is $50.00. - * The value must be greater than 0. If the cost basis is 0, use + * If `per_unit_cost_basis` is 0.50 and credit amount is $100.00, the total charge + * is $50.00. The value must be greater than 0. If the cost basis is 0, use * `funding_method=none` instead. * * Defaults to 1.0. @@ -163,8 +167,7 @@ model CreditGrant { per_unit_cost_basis?: Shared.Numeric = "1.0"; /** - * The purchase amount. - * Calculated from `per_unit_cost_basis` and credit `amount`. + * The purchase amount. Calculated from `per_unit_cost_basis` and credit `amount`. */ @visibility(Lifecycle.Read) amount: Shared.Numeric; @@ -201,15 +204,16 @@ model CreditGrant { /** * Tax configuration for the grant. * - * For `invoice` and `external` funding methods, tax configuration should be provided to ensure correct revenue recognition. - * When not provided, the default credit grant tax code is applied, if that's not set the global default taxcode is used. + * For `invoice` and `external` funding methods, tax configuration should be + * provided to ensure correct revenue recognition. When not provided, the default + * credit grant tax code is applied, if that's not set the global default taxcode + * is used. */ @visibility(Lifecycle.Read, Lifecycle.Create) tax_config?: CreditGrantTaxConfig; /** - * Invoice references for the grant. - * Available when `funding_method` is `invoice`. + * Invoice references for the grant. Available when `funding_method` is `invoice`. */ @visibility(Lifecycle.Read) invoice?: { @@ -234,16 +238,15 @@ model CreditGrant { @visibility(Lifecycle.Read, Lifecycle.Create) filters?: { /** - * Limit the credit grant to specific features. - * If no features are specified, the credit grant can be used for any feature. + * Limit the credit grant to specific features. If no features are specified, the + * credit grant can be used for any feature. */ @example(#["input_tokens", "output_tokens"]) features?: Shared.ResourceKey[]; }; /** - * Draw-down priority of the grant. - * Lower values have higher priority. + * Draw-down priority of the grant. Lower values have higher priority. */ @visibility(Lifecycle.Create, Lifecycle.Read) @minValue(1) diff --git a/api/spec/packages/aip/src/customers/credits/ledger.tsp b/api/spec/packages/aip/src/customers/credits/ledger.tsp index 90d9dd8857..9f59a98376 100644 --- a/api/spec/packages/aip/src/customers/credits/ledger.tsp +++ b/api/spec/packages/aip/src/customers/credits/ledger.tsp @@ -60,7 +60,8 @@ enum CreditTransactionType { // } /** - * A credit transaction represents a single credit movement on the customer's balance. + * A credit transaction represents a single credit movement on the customer's + * balance. * * Credit transactions are immutable. */ @@ -96,8 +97,8 @@ model CreditTransaction { currency: Currencies.CurrencyCode; /** - * Signed amount of the credit movement. - * Positive values add balance, negative values reduce balance. + * Signed amount of the credit movement. Positive values add balance, negative + * values reduce balance. */ @visibility(Lifecycle.Read) amount: Shared.Numeric; diff --git a/api/spec/packages/aip/src/customers/credits/operations.tsp b/api/spec/packages/aip/src/customers/credits/operations.tsp index b59daaa1d8..bed6473d99 100644 --- a/api/spec/packages/aip/src/customers/credits/operations.tsp +++ b/api/spec/packages/aip/src/customers/credits/operations.tsp @@ -33,8 +33,8 @@ model ListCreditGrantsParamsFilter { interface CustomerCreditGrantsOperations { /** - * Create a new credit grant. - * A credit grant represents an allocation of prepaid credits to a customer. + * Create a new credit grant. A credit grant represents an allocation of prepaid + * credits to a customer. */ @extension(Shared.UnstableExtension, true) @extension(Shared.InternalExtension, true) @@ -99,7 +99,8 @@ interface CustomerCreditGrantsOperations { // } /** - * Request body for updating the external payment settlement status of a credit grant. + * Request body for updating the external payment settlement status of a credit + * grant. */ @friendlyName("UpdateCreditGrantExternalSettlementRequest") model UpdateCreditGrantExternalSettlementRequest { @@ -113,8 +114,8 @@ interface CustomerCreditGrantExternalSettlementOperations { /** * Update the payment settlement status of an externally funded credit grant. * - * Use this endpoint to synchronize the payment state of an external payment - * with the system so that revenue recognition and credit availability work as expected. + * Use this endpoint to synchronize the payment state of an external payment with + * the system so that revenue recognition and credit availability work as expected. */ @extension(Shared.UnstableExtension, true) @extension(Shared.InternalExtension, true) @@ -178,9 +179,9 @@ interface CustomerCreditTransactionOperations { /** * List credit transactions for a customer. * - * Returns an immutable, chronological record of credit movements: - * funded credits and consumed credits. - * Transactions are returned in reverse chronological order by default. + * Returns an immutable, chronological record of credit movements: funded credits + * and consumed credits. Transactions are returned in reverse chronological order + * by default. */ @extension(Shared.UnstableExtension, true) @extension(Shared.InternalExtension, true) @@ -201,9 +202,11 @@ interface CustomerCreditTransactionOperations { interface CustomerCreditAdjustmentsOperations { /** - * A credit adjustment can be used to make manual adjustments to a customer's credit balance. + * A credit adjustment can be used to make manual adjustments to a customer's + * credit balance. * * Supported use-cases: + * * - Usage correction */ @extension(Shared.UnstableExtension, true) diff --git a/api/spec/packages/aip/src/customers/customer.tsp b/api/spec/packages/aip/src/customers/customer.tsp index 9091604a95..0aa6c2e5ea 100644 --- a/api/spec/packages/aip/src/customers/customer.tsp +++ b/api/spec/packages/aip/src/customers/customer.tsp @@ -4,7 +4,8 @@ import "../common/properties.tsp"; namespace Customers; /** - * Customers can be individuals or organizations that can subscribe to plans and have access to features. + * Customers can be individuals or organizations that can subscribe to plans and + * have access to features. */ @friendlyName("BillingCustomer") model Customer { @@ -29,16 +30,14 @@ model Customer { primary_email?: string; /** - * Currency of the customer. - * Used for billing, tax and invoicing. + * Currency of the customer. Used for billing, tax and invoicing. */ @visibility(Lifecycle.Create, Lifecycle.Read, Lifecycle.Update) @summary("Currency") currency?: Shared.CurrencyCode; /** - * The billing address of the customer. - * Used for tax and invoicing. + * The billing address of the customer. Used for tax and invoicing. */ @visibility(Lifecycle.Create, Lifecycle.Read, Lifecycle.Update) @summary("Billing Address") @@ -51,7 +50,8 @@ model Customer { @friendlyName("BillingAddress") model Address { /** - * Country code in [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 format. + * Country code in [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) + * alpha-2 format. */ @visibility(Lifecycle.Create, Lifecycle.Read, Lifecycle.Update) @summary("Country") @@ -101,15 +101,14 @@ model Address { } /** - * Mapping to attribute metered usage to the customer. - * One customer can have zero or more subjects, - * but one subject can only belong to one customer. + * Mapping to attribute metered usage to the customer. One customer can have zero + * or more subjects, but one subject can only belong to one customer. */ @friendlyName("BillingCustomerUsageAttribution") model CustomerUsageAttribution { /** - * The subjects that are attributed to the customer. - * Can be empty when no usage event subjects are associated with the customer. + * The subjects that are attributed to the customer. Can be empty when no usage + * event subjects are associated with the customer. */ @visibility(Lifecycle.Create, Lifecycle.Read, Lifecycle.Update) @summary("Subject Keys") diff --git a/api/spec/packages/aip/src/customers/operations.tsp b/api/spec/packages/aip/src/customers/operations.tsp index 939e2c887e..55ee42532b 100644 --- a/api/spec/packages/aip/src/customers/operations.tsp +++ b/api/spec/packages/aip/src/customers/operations.tsp @@ -56,14 +56,14 @@ interface CustomersOperations { ...Common.PagePaginationQuery, /** - * Sort customers returned in the response. - * Supported sort attributes are: + * Sort customers returned in the response. Supported sort attributes are: + * * - `id` * - `name` (default) * - `created_at` * - * The `asc` suffix is optional as the default sort order is ascending. - * The `desc` suffix is used to specify a descending order. + * The `asc` suffix is optional as the default sort order is ascending. The `desc` + * suffix is used to specify a descending order. */ @query(#{ name: "sort" }) sort?: Common.SortQuery, @@ -133,15 +133,17 @@ interface CustomerBillingOperations { | Common.ErrorResponses; /** - * Create a [Stripe Checkout Session](https://docs.stripe.com/payments/checkout) for the customer. + * Create a [Stripe Checkout Session](https://docs.stripe.com/payments/checkout) + * for the customer. * - * Creates a Checkout Session for collecting payment method information from customers. - * The session operates in "setup" mode, which collects payment details without charging - * the customer immediately. The collected payment method can be used for future - * subscription billing. + * Creates a Checkout Session for collecting payment method information from + * customers. The session operates in "setup" mode, which collects payment details + * without charging the customer immediately. The collected payment method can be + * used for future subscription billing. * - * For hosted checkout sessions, redirect customers to the returned URL. For embedded - * sessions, use the client_secret to initialize Stripe.js in your application. + * For hosted checkout sessions, redirect customers to the returned URL. For + * embedded sessions, use the client_secret to initialize Stripe.js in your + * application. */ @post @route("/stripe/checkout-sessions") @@ -159,9 +161,10 @@ interface CustomerBillingOperations { /** * Create Stripe Customer Portal Session. * - * Useful to redirect the customer to the Stripe Customer Portal to manage their payment methods, - * change their billing address and access their invoice history. - * Only returns URL if the customer billing profile is linked to a stripe app and customer. + * Useful to redirect the customer to the Stripe Customer Portal to manage their + * payment methods, change their billing address and access their invoice history. + * Only returns URL if the customer billing profile is linked to a stripe app and + * customer. */ @post @route("/stripe/portal-sessions") @@ -181,15 +184,16 @@ interface CustomerBillingOperations { * Request to create a Stripe Checkout Session for the customer. * * Checkout Sessions are used to collect payment method information from customers - * in a secure, Stripe-hosted interface. This integration uses setup mode to collect - * payment methods that can be charged later for subscription billing. + * in a secure, Stripe-hosted interface. This integration uses setup mode to + * collect payment methods that can be charged later for subscription billing. */ @friendlyName("BillingCustomerStripeCreateCheckoutSessionRequest") model CustomerBillingStripeCreateCheckoutSessionRequest { /** * Options for configuring the Stripe Checkout Session. * - * These options are passed directly to Stripe's [checkout session creation API](https://docs.stripe.com/api/checkout/sessions/create). + * These options are passed directly to Stripe's + * [checkout session creation API](https://docs.stripe.com/api/checkout/sessions/create). */ stripe_options: Apps.CreateStripeCheckoutSessionRequestOptions; } @@ -197,9 +201,10 @@ model CustomerBillingStripeCreateCheckoutSessionRequest { /** * Request to create a Stripe Customer Portal Session for the customer. * - * Useful to redirect the customer to the Stripe Customer Portal to manage their payment methods, - * change their billing address and access their invoice history. - * Only returns URL if the customer billing profile is linked to a stripe app and customer. + * Useful to redirect the customer to the Stripe Customer Portal to manage their + * payment methods, change their billing address and access their invoice history. + * Only returns URL if the customer billing profile is linked to a stripe app and + * customer. */ @friendlyName("BillingCustomerStripeCreateCustomerPortalSessionRequest") model CustomerBillingStripeCreateCustomerPortalSessionRequest { diff --git a/api/spec/packages/aip/src/entitlements/access.tsp b/api/spec/packages/aip/src/entitlements/access.tsp index 32abf01900..6270c42eeb 100644 --- a/api/spec/packages/aip/src/entitlements/access.tsp +++ b/api/spec/packages/aip/src/entitlements/access.tsp @@ -23,18 +23,16 @@ model EntitlementAccessResult { feature_key: Shared.ResourceKey; /** - * Whether the customer has access to the feature. - * Always true for `boolean` and `static` entitlements. - * Depends on balance for `metered` entitlements. + * Whether the customer has access to the feature. Always true for `boolean` and + * `static` entitlements. Depends on balance for `metered` entitlements. */ @example(true) @visibility(Lifecycle.Read) has_access: boolean; /** - * Only available for static entitlements. - * Config is the JSON parsable configuration of the entitlement. - * Useful to describe per customer configuration. + * Only available for static entitlements. Config is the JSON parsable + * configuration of the entitlement. Useful to describe per customer configuration. */ @example("{ \"availableModels\": [\"gpt-5\", \"gpt-4o\"] }") @visibility(Lifecycle.Read) diff --git a/api/spec/packages/aip/src/events/event.tsp b/api/spec/packages/aip/src/events/event.tsp index b1c6443d91..b4fd221861 100644 --- a/api/spec/packages/aip/src/events/event.tsp +++ b/api/spec/packages/aip/src/events/event.tsp @@ -47,14 +47,16 @@ model MeteringEvent { specversion: string = "1.0"; /** - * Contains a value describing the type of event related to the originating occurrence. + * Contains a value describing the type of event related to the originating + * occurrence. */ @minLength(1) @example("com.example.someevent") type: string; /** - * Content type of the CloudEvents data value. Only the value "application/json" is allowed over HTTP. + * Content type of the CloudEvents data value. Only the value "application/json" is + * allowed over HTTP. */ @example("application/json") datacontenttype?: "application/json" | null; @@ -66,7 +68,8 @@ model MeteringEvent { dataschema?: url | null; /** - * Describes the subject of the event in the context of the event producer (identified by source). + * Describes the subject of the event in the context of the event producer + * (identified by source). */ @minLength(1) @example("customer-id") @@ -79,8 +82,7 @@ model MeteringEvent { time?: Shared.DateTime | null; /** - * The event payload. - * Optional, if present it must be a JSON object. + * The event payload. Optional, if present it must be a JSON object. */ data?: Record | null; } diff --git a/api/spec/packages/aip/src/events/operations.tsp b/api/spec/packages/aip/src/events/operations.tsp index 120c894be1..1ab694b0cf 100644 --- a/api/spec/packages/aip/src/events/operations.tsp +++ b/api/spec/packages/aip/src/events/operations.tsp @@ -82,21 +82,22 @@ interface EventsOperations { /** * Filter events returned in the response. * - * To filter events by subject add the following query param: filter[subject][eq]=customer-1 + * To filter events by subject add the following query param: + * filter[subject][eq]=customer-1 */ @query(#{ style: "deepObject", explode: true }) filter?: ListEventsParamsFilter, /** - * Sort events returned in the response. - * Supported sort attributes are: + * Sort events returned in the response. Supported sort attributes are: + * * - `time` (default) * - `ingested_at` * - `stored_at` * - * When omitted, events are sorted by `time desc` (most recent first). - * When a sort field is provided without a suffix, it sorts descending. - * Append the `asc` suffix to sort ascending, or the `desc` suffix to sort descending. + * When omitted, events are sorted by `time desc` (most recent first). When a sort + * field is provided without a suffix, it sorts descending. Append the `asc` suffix + * to sort ascending, or the `desc` suffix to sort descending. */ @query sort?: Common.SortQuery, diff --git a/api/spec/packages/aip/src/features/cost.tsp b/api/spec/packages/aip/src/features/cost.tsp index 4d98070a55..f861f2ab9d 100644 --- a/api/spec/packages/aip/src/features/cost.tsp +++ b/api/spec/packages/aip/src/features/cost.tsp @@ -15,8 +15,8 @@ model FeatureCostQueryRow { usage: Shared.Numeric; /** - * The computed cost amount (usage × unit cost). - * Null when pricing is not available for the given combination of dimensions. + * The computed cost amount (usage × unit cost). Null when pricing is not available + * for the given combination of dimensions. */ #suppress "@openmeter/api-spec-aip/no-nullable" "cost is nullable" cost: Shared.Numeric | null; @@ -27,7 +27,8 @@ model FeatureCostQueryRow { currency: Shared.CurrencyCode; /** - * Detail message when cost amount is null, explaining why the cost could not be resolved. + * Detail message when cost amount is null, explaining why the cost could not be + * resolved. */ detail?: string; @@ -42,8 +43,8 @@ model FeatureCostQueryRow { to: Shared.DateTime; /** - * The dimensions the value is aggregated over. - * `subject` and `customer_id` are reserved dimensions. + * The dimensions the value is aggregated over. `subject` and `customer_id` are + * reserved dimensions. */ dimensions: Record; } diff --git a/api/spec/packages/aip/src/features/feature.tsp b/api/spec/packages/aip/src/features/feature.tsp index 519603134d..9619bc8dd4 100644 --- a/api/spec/packages/aip/src/features/feature.tsp +++ b/api/spec/packages/aip/src/features/feature.tsp @@ -32,17 +32,17 @@ model Feature { ...Shared.ResourceWithKey; /** - * The meter that the feature is associated with and and based on which usage is calculated. - * If not specified, the feature is static. + * The meter that the feature is associated with and based on which usage is + * calculated. If not specified, the feature is static. */ @summary("Meter reference") @visibility(Lifecycle.Read, Lifecycle.Create) meter?: FeatureMeterReference; /** - * Optional per-unit cost configuration. - * Use "manual" for a fixed per-unit cost, or "llm" to look up cost - * from the LLM cost database based on meter group-by properties. + * Optional per-unit cost configuration. Use "manual" for a fixed per-unit cost, or + * "llm" to look up cost from the LLM cost database based on meter group-by + * properties. */ @summary("Unit cost") @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @@ -50,15 +50,16 @@ model Feature { } /** - * Request body for updating a feature. - * Currently only the unit_cost field can be updated. + * Request body for updating a feature. Currently only the unit_cost field can be + * updated. */ @friendlyName("UpdateFeatureRequest") model FeatureUpdateRequest { /** - * Optional per-unit cost configuration. - * Use "manual" for a fixed per-unit cost, or "llm" to look up cost - * from the LLM cost database based on meter group-by properties. + * Optional per-unit cost configuration. Use "manual" for a fixed per-unit cost, or + * "llm" to look up cost from the LLM cost database based on meter group-by + * properties. Set to `null` to clear the existing unit cost; omit to leave it + * unchanged. */ @summary("Unit cost") unit_cost?: FeatureUnitCost | null; diff --git a/api/spec/packages/aip/src/features/operations.tsp b/api/spec/packages/aip/src/features/operations.tsp index 37db28c403..b5ddf75328 100644 --- a/api/spec/packages/aip/src/features/operations.tsp +++ b/api/spec/packages/aip/src/features/operations.tsp @@ -28,7 +28,7 @@ model ListFeaturesParamsFilter { interface FeatureOperations { /** - * List all features. + * List all features. */ @get @operationId("list-features") @@ -39,15 +39,15 @@ interface FeatureOperations { ...Common.PagePaginationQuery, /** - * Sort features returned in the response. - * Supported sort attributes are: + * Sort features returned in the response. Supported sort attributes are: + * * - `key` * - `name` * - `created_at` (default) * - `updated_at` * - * The `asc` suffix is optional as the default sort order is ascending. - * The `desc` suffix is used to specify a descending order. + * The `asc` suffix is optional as the default sort order is ascending. The `desc` + * suffix is used to specify a descending order. */ @query(#{ name: "sort" }) sort?: Common.SortQuery, @@ -55,7 +55,8 @@ interface FeatureOperations { /** * Filter features returned in the response. * - * To filter features by meter_id add the following query param: filter[meter_id][oeq]= + * To filter features by meter_id add the following query param: + * filter[meter_id][oeq]= */ @query(#{ style: "deepObject", explode: true }) filter?: ListFeaturesParamsFilter, @@ -90,8 +91,7 @@ interface FeatureOperations { | Common.NotFound; /** - * Update a feature by id. - * Currently only the unit_cost field can be updated. + * Update a feature by id. Currently only the unit_cost field can be updated. */ @patch @route("/{featureId}") diff --git a/api/spec/packages/aip/src/features/unitcost.tsp b/api/spec/packages/aip/src/features/unitcost.tsp index 6f88170c37..f9def3fbe6 100644 --- a/api/spec/packages/aip/src/features/unitcost.tsp +++ b/api/spec/packages/aip/src/features/unitcost.tsp @@ -16,10 +16,14 @@ enum FeatureUnitCostType { */ @friendlyName("BillingFeatureManualUnitCost") model FeatureManualUnitCost { - /** The type discriminator for manual unit cost. */ + /** + * The type discriminator for manual unit cost. + */ type: FeatureUnitCostType.Manual; - /** Fixed per-unit cost amount in USD. */ + /** + * Fixed per-unit cost amount in USD. + */ amount: Shared.Numeric; } @@ -42,69 +46,65 @@ enum FeatureLlmTokenType { } /** - * LLM cost lookup configuration. - * Each dimension (provider, model, token type) can be specified as either - * a static value or a meter group-by property name (mutually exclusive). + * LLM cost lookup configuration. Each dimension (provider, model, token type) can + * be specified as either a static value or a meter group-by property name + * (mutually exclusive). */ #suppress "@openmeter/api-spec-aip/repeated-prefix-grouping" "token_type and token_type_property are distinct API fields, not a groupable prefix" @friendlyName("BillingFeatureLLMUnitCost") model FeatureLlmUnitCost { - /** The type discriminator for LLM unit cost. */ + /** + * The type discriminator for LLM unit cost. + */ type: FeatureUnitCostType.Llm; /** - * Meter group-by property that holds the LLM provider. - * Use this when the meter has a group-by dimension for provider. - * Mutually exclusive with `provider`. + * Meter group-by property that holds the LLM provider. Use this when the meter has + * a group-by dimension for provider. Mutually exclusive with `provider`. */ @summary("Provider property") provider_property?: string; /** - * Static LLM provider value (e.g., "openai", "anthropic"). - * Use this when the feature tracks a single provider. - * Mutually exclusive with `provider_property`. + * Static LLM provider value (e.g., "openai", "anthropic"). Use this when the + * feature tracks a single provider. Mutually exclusive with `provider_property`. */ @summary("Provider") provider?: string; /** - * Meter group-by property that holds the model ID. - * Use this when the meter has a group-by dimension for model. - * Mutually exclusive with `model`. + * Meter group-by property that holds the model ID. Use this when the meter has a + * group-by dimension for model. Mutually exclusive with `model`. */ @summary("Model property") model_property?: string; /** - * Static model ID value (e.g., "gpt-4", "claude-3-5-sonnet"). - * Use this when the feature tracks a single model. - * Mutually exclusive with `model_property`. + * Static model ID value (e.g., "gpt-4", "claude-3-5-sonnet"). Use this when the + * feature tracks a single model. Mutually exclusive with `model_property`. */ @summary("Model") `model`?: string; /** - * Meter group-by property that holds the token type. - * Use this when the meter has a group-by dimension for token type. - * Mutually exclusive with `token_type`. + * Meter group-by property that holds the token type. Use this when the meter has a + * group-by dimension for token type. Mutually exclusive with `token_type`. */ @summary("Token type property") token_type_property?: string; /** - * Static token type value. - * Use this when the feature tracks a single token type (e.g., only input tokens). - * `request` is an alias for `input`, `response` is an alias for `output`. - * Mutually exclusive with `token_type_property`. + * Static token type value. Use this when the feature tracks a single token type + * (e.g., only input tokens). `request` is an alias for `input`, `response` is an + * alias for `output`. Mutually exclusive with `token_type_property`. */ @summary("Token type") token_type?: FeatureLlmTokenType; /** - * Resolved per-token pricing from the LLM cost database. - * Populated in responses when the provider and model can be determined, - * either from static values or from meter group-by filters with exact matches. + * Resolved per-token pricing from the LLM cost database. Populated in responses + * when the provider and model can be determined, either from static values or from + * meter group-by filters with exact matches. */ @summary("Resolved pricing") @visibility(Lifecycle.Read) @@ -117,30 +117,40 @@ model FeatureLlmUnitCost { #suppress "@openmeter/api-spec-aip/repeated-prefix-grouping" "cache_read and cache_write are distinct pricing dimensions" @friendlyName("BillingFeatureLLMUnitCostPricing") model FeatureLlmUnitCostPricing { - /** Cost per input token in USD. */ + /** + * Cost per input token in USD. + */ @summary("Input per token") input_per_token: Shared.Numeric; - /** Cost per output token in USD. */ + /** + * Cost per output token in USD. + */ @summary("Output per token") output_per_token: Shared.Numeric; - /** Cost per cache read token in USD. */ + /** + * Cost per cache read token in USD. + */ @summary("Cache read per token") cache_read_per_token?: Shared.Numeric; - /** Cost per reasoning token in USD. */ + /** + * Cost per reasoning token in USD. + */ @summary("Reasoning per token") reasoning_per_token?: Shared.Numeric; - /** Cost per cache write token in USD. */ + /** + * Cost per cache write token in USD. + */ @summary("Cache write per token") cache_write_per_token?: Shared.Numeric; } /** - * Per-unit cost configuration for a feature. - * Either a fixed manual amount or a dynamic LLM cost lookup. + * Per-unit cost configuration for a feature. Either a fixed manual amount or a + * dynamic LLM cost lookup. */ @friendlyName("BillingFeatureUnitCost") @discriminated(#{ envelope: "none", discriminatorPropertyName: "type" }) diff --git a/api/spec/packages/aip/src/invoices/invoice.tsp b/api/spec/packages/aip/src/invoices/invoice.tsp index 573107d366..3364bcc8f4 100644 --- a/api/spec/packages/aip/src/invoices/invoice.tsp +++ b/api/spec/packages/aip/src/invoices/invoice.tsp @@ -3,12 +3,14 @@ import "../shared/index.tsp"; namespace Invoices; /** - * InvoiceNumber is a unique identifier for the invoice, generated by the - * invoicing app. + * InvoiceNumber is a unique identifier for the invoice, generated by the invoicing + * app. * * The uniqueness depends on a lot of factors: + * * - app setting (unique per app or unique per customer) - * - multiple app scenarios (multiple apps generating invoices with the same prefix) + * - multiple app scenarios (multiple apps generating invoices with the same + * prefix) */ @example("INV-2024-01-01-01") @minLength(1) diff --git a/api/spec/packages/aip/src/invoices/party.tsp b/api/spec/packages/aip/src/invoices/party.tsp index 222c049a4d..99e205ea47 100644 --- a/api/spec/packages/aip/src/invoices/party.tsp +++ b/api/spec/packages/aip/src/invoices/party.tsp @@ -44,8 +44,8 @@ model BillingParty { name?: string; /** - * The entity's legal identification used for tax purposes. They may have - * other numbers, but we're only interested in those valid for tax purposes. + * The entity's legal identification used for tax purposes. They may have other + * numbers, but we're only interested in those valid for tax purposes. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) tax_id?: BillingPartyTaxIdentity; @@ -69,7 +69,8 @@ model BillingPartyAddresses { } /** - * Identity stores the details required to identify an entity for tax purposes in a specific country. + * Identity stores the details required to identify an entity for tax purposes in a + * specific country. */ @friendlyName("BillingPartyTaxIdentity") model BillingPartyTaxIdentity { diff --git a/api/spec/packages/aip/src/konnect.tsp b/api/spec/packages/aip/src/konnect.tsp index bfa7cb30cd..8103adb0d1 100644 --- a/api/spec/packages/aip/src/konnect.tsp +++ b/api/spec/packages/aip/src/konnect.tsp @@ -184,7 +184,8 @@ interface OrganizationDefaultTaxCodesEndpoints extends Defaults.OrganizationDefaultTaxCodesOperations {} /** - * The system account access token is meant for automations and integrations that are not directly associated with a human identity. + * The system account access token is meant for automations and integrations that + * are not directly associated with a human identity. */ #suppress "@openmeter/api-spec-aip/casing" "Use existing values" @friendlyName("systemAccountAccessToken") @@ -194,7 +195,8 @@ model systemAccountAccessToken { } /** - * The personal access token is meant to be used as an alternative to basic-auth when accessing Konnect via APIs. + * The personal access token is meant to be used as an alternative to basic-auth + * when accessing Konnect via APIs. */ #suppress "@openmeter/api-spec-aip/casing" "Use existing values" @friendlyName("personalAccessToken") @@ -204,7 +206,8 @@ model personalAccessToken { } /** - * The Konnect access token is meant to be used by the Konnect dashboard and the decK CLI authenticate with. + * The Konnect access token is meant to be used by the Konnect dashboard and the + * decK CLI authenticate with. */ #suppress "@openmeter/api-spec-aip/casing" "Use existing values" @friendlyName("konnectAccessToken") diff --git a/api/spec/packages/aip/src/llmcost/operations.tsp b/api/spec/packages/aip/src/llmcost/operations.tsp index 7bba78d7a5..f0ac721e2c 100644 --- a/api/spec/packages/aip/src/llmcost/operations.tsp +++ b/api/spec/packages/aip/src/llmcost/operations.tsp @@ -18,19 +18,29 @@ namespace LLMCost; #suppress "@openmeter/api-spec-aip/repeated-prefix-grouping" "model_id and model_name should not be grouped" @friendlyName("ListLLMCostPricesParamsFilter") model ListPricesParamsFilter { - /** Filter by provider. e.g. ?filter[provider][eq]=openai */ + /** + * Filter by provider. e.g. ?filter[provider][eq]=openai + */ provider?: Common.StringFieldFilter; - /** Filter by model ID. e.g. ?filter[model_id][eq]=gpt-4 */ + /** + * Filter by model ID. e.g. ?filter[model_id][eq]=gpt-4 + */ model_id?: Common.StringFieldFilter; - /** Filter by model name. e.g. ?filter[model_name][contains]=gpt */ + /** + * Filter by model name. e.g. ?filter[model_name][contains]=gpt + */ model_name?: Common.StringFieldFilter; - /** Filter by currency code. e.g. ?filter[currency][eq]=USD */ + /** + * Filter by currency code. e.g. ?filter[currency][eq]=USD + */ currency?: Common.StringFieldFilter; - /** Filter by source. e.g. ?filter[source][eq]=system */ + /** + * Filter by source. e.g. ?filter[source][eq]=system + */ source?: Common.StringFieldFilter; } @@ -39,8 +49,7 @@ model ListPricesParamsFilter { */ interface LLMCostPricesOperations { /** - * List global LLM cost prices. - * Returns prices with overrides applied if any. + * List global LLM cost prices. Returns prices with overrides applied if any. */ @extension(Shared.UnstableExtension, true) @extension(Shared.InternalExtension, true) @@ -55,16 +64,16 @@ interface LLMCostPricesOperations { filter?: ListPricesParamsFilter, /** - * Sort prices returned in the response. - * Supported sort attributes are: + * Sort prices returned in the response. Supported sort attributes are: + * * - `id` * - `provider.id` * - `model.id` (default) * - `effective_from` * - `effective_to` * - * The `asc` suffix is optional as the default sort order is ascending. - * The `desc` suffix is used to specify a descending order. + * The `asc` suffix is optional as the default sort order is ascending. The `desc` + * suffix is used to specify a descending order. */ @query(#{ name: "sort" }) sort?: Common.SortQuery, @@ -73,8 +82,8 @@ interface LLMCostPricesOperations { ): Shared.PagePaginatedResponse | Common.ErrorResponses; /** - * Get a specific LLM cost price by ID. - * Returns the price with overrides applied if any. + * Get a specific LLM cost price by ID. Returns the price with overrides applied if + * any. */ @extension(Shared.UnstableExtension, true) @extension(Shared.InternalExtension, true) diff --git a/api/spec/packages/aip/src/llmcost/prices.tsp b/api/spec/packages/aip/src/llmcost/prices.tsp index 80eb376d2b..a227cc7c93 100644 --- a/api/spec/packages/aip/src/llmcost/prices.tsp +++ b/api/spec/packages/aip/src/llmcost/prices.tsp @@ -20,66 +20,96 @@ enum PriceSource { #suppress "@openmeter/api-spec-aip/repeated-prefix-grouping" "per token prices should be grouped together" @friendlyName("LLMCostModelPricing") model ModelPricing { - /** Input price per token (USD). */ + /** + * Input price per token (USD). + */ input_per_token: Shared.Numeric; - /** Output price per token (USD). */ + /** + * Output price per token (USD). + */ output_per_token: Shared.Numeric; - /** Cache read price per token (USD). */ + /** + * Cache read price per token (USD). + */ cache_read_per_token?: Shared.Numeric; - /** Cache write price per token (USD). */ + /** + * Cache write price per token (USD). + */ cache_write_per_token?: Shared.Numeric; - /** Reasoning output price per token (USD). */ + /** + * Reasoning output price per token (USD). + */ reasoning_per_token?: Shared.Numeric; } /** - * An LLM cost price record, representing the cost per token - * for a specific model from a specific provider. + * An LLM cost price record, representing the cost per token for a specific model + * from a specific provider. */ #suppress "@openmeter/api-spec-aip/repeated-prefix-grouping" "source and effective_from/to should be grouped together" @friendlyName("LLMCostPrice") model Price { - /** Unique identifier. */ + /** + * Unique identifier. + */ @visibility(Lifecycle.Read) id: Shared.ULID; - /** Provider of the model. */ + /** + * Provider of the model. + */ @visibility(Lifecycle.Read) provider: Provider; - /** The model. */ + /** + * The model. + */ @visibility(Lifecycle.Read) `model`: Model; - /** Token pricing data. */ + /** + * Token pricing data. + */ @visibility(Lifecycle.Read) pricing: ModelPricing; - /** Currency code (currently always "USD"). */ + /** + * Currency code (currently always "USD"). + */ @visibility(Lifecycle.Read) currency: Shared.CurrencyCode; - /** Where this price came from. */ + /** + * Where this price came from. + */ @visibility(Lifecycle.Read) source: PriceSource; - /** When this price becomes effective. */ + /** + * When this price becomes effective. + */ @visibility(Lifecycle.Read) effective_from: Shared.DateTime; - /** When this price expires (null = current). */ + /** + * When this price expires. Omitted when the price is currently effective. + */ @visibility(Lifecycle.Read) effective_to?: Shared.DateTime; - /** Creation timestamp. */ + /** + * Creation timestamp. + */ @visibility(Lifecycle.Read) created_at: Shared.DateTime; - /** Last update timestamp. */ + /** + * Last update timestamp. + */ @visibility(Lifecycle.Read) updated_at: Shared.DateTime; } @@ -89,10 +119,14 @@ model Price { */ @friendlyName("LLMCostProvider") model Provider { - /** Identifier of the provider, e.g., "openai", "anthropic". */ + /** + * Identifier of the provider, e.g., "openai", "anthropic". + */ id: string; - /** Name of the provider, e.g., "OpenAI", "Anthropic". */ + /** + * Name of the provider, e.g., "OpenAI", "Anthropic". + */ name: string; } @@ -101,40 +135,57 @@ model Provider { */ @friendlyName("LLMCostModel") model Model { - /** Identifier of the model, e.g., "gpt-4", "claude-3-5-sonnet". */ + /** + * Identifier of the model, e.g., "gpt-4", "claude-3-5-sonnet". + */ id: string; - /** Name of the model, e.g., "GPT-4", "Claude 3.5 Sonnet". */ + /** + * Name of the model, e.g., "GPT-4", "Claude 3.5 Sonnet". + */ name: string; } /** - * Input for creating a per-namespace price override. - * Unique per provider, model and currency. - * If an override already exists for the given provider, model and currency, it will be updated. - * If an override does not exist, it will be created. + * Input for creating a per-namespace price override. Unique per provider, model + * and currency. If an override already exists for the given provider, model and + * currency, it will be updated. If an override does not exist, it will be created. */ #suppress "@openmeter/api-spec-aip/repeated-prefix-grouping" "model_id, model_name, and effective_from/to should be grouped together" @friendlyName("LLMCostOverrideCreate") model OverrideCreate { - /** Provider/vendor of the model. */ + /** + * Provider/vendor of the model. + */ provider: string; - /** Canonical model identifier. */ + /** + * Canonical model identifier. + */ model_id: string; - /** Human-readable model name. */ + /** + * Human-readable model name. + */ model_name?: string; - /** Token pricing data. */ + /** + * Token pricing data. + */ pricing: ModelPricing; - /** Currency code. */ + /** + * Currency code. + */ currency: Shared.CurrencyCode; - /** When this override becomes effective. */ + /** + * When this override becomes effective. + */ effective_from: Shared.DateTime; - /** When this override expires. */ + /** + * When this override expires. + */ effective_to?: Shared.DateTime; } diff --git a/api/spec/packages/aip/src/meters/meter.tsp b/api/spec/packages/aip/src/meters/meter.tsp index c0a07737d0..dffa38c741 100644 --- a/api/spec/packages/aip/src/meters/meter.tsp +++ b/api/spec/packages/aip/src/meters/meter.tsp @@ -36,19 +36,21 @@ model Meter { event_type: string; /** - * The date since the meter should include events. - * Useful to skip old events. - * If not specified, all historical events are included. + * The date since the meter should include events. Useful to skip old events. If + * not specified, all historical events are included. */ @visibility(Lifecycle.Read, Lifecycle.Create) events_from?: Shared.DateTime; /** - * JSONPath expression to extract the value from the ingested event's data property. + * JSONPath expression to extract the value from the ingested event's data + * property. * - * The ingested value for sum, avg, min, and max aggregations is a number or a string that can be parsed to a number. + * The ingested value for sum, avg, min, and max aggregations is a number or a + * string that can be parsed to a number. * - * For unique_count aggregation, the ingested value must be a string. For count aggregation the value_property is ignored. + * For unique_count aggregation, the ingested value must be a string. For count + * aggregation the value_property is ignored. */ @visibility(Lifecycle.Read, Lifecycle.Create) @minLength(1) @@ -59,7 +61,6 @@ model Meter { * Named JSONPath expressions to extract the group by values from the event data. * * Keys must be unique and consist only alphanumeric and underscore characters. - * */ // TODO: add key format enforcement @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) diff --git a/api/spec/packages/aip/src/meters/operations.tsp b/api/spec/packages/aip/src/meters/operations.tsp index 740ab0c848..e613c1fefa 100644 --- a/api/spec/packages/aip/src/meters/operations.tsp +++ b/api/spec/packages/aip/src/meters/operations.tsp @@ -61,16 +61,16 @@ interface MetersOperations { ...Common.PagePaginationQuery, /** - * Sort meters returned in the response. - * Supported sort attributes are: + * Sort meters returned in the response. Supported sort attributes are: + * * - `key` * - `name` * - `aggregation` * - `createdAt` (default) * - `updatedAt` * - * The `asc` suffix is optional as the default sort order is ascending. - * The `desc` suffix is used to specify a descending order. + * The `asc` suffix is optional as the default sort order is ascending. The `desc` + * suffix is used to specify a descending order. */ @query(#{ name: "sort" }) sort?: Common.SortQuery, @@ -119,9 +119,8 @@ interface MetersQueryOperations { * `from, to, [subject,] [customer_id, customer_key, customer_name,] , value` * * The `subject` column is emitted only when `subject` is in the query's - * `group_by_dimensions`. - * The three `customer_*` columns are emitted together only when `customer_id` - * is in the query's `group_by_dimensions`. + * `group_by_dimensions`. The three `customer_*` columns are emitted together only + * when `customer_id` is in the query's `group_by_dimensions`. */ @extension(Shared.UnstableExtension, true) @extension(Shared.InternalExtension, true) diff --git a/api/spec/packages/aip/src/meters/query.tsp b/api/spec/packages/aip/src/meters/query.tsp index db4e5753cc..ca53b3b80b 100644 --- a/api/spec/packages/aip/src/meters/query.tsp +++ b/api/spec/packages/aip/src/meters/query.tsp @@ -6,8 +6,8 @@ using TypeSpec.JsonSchema; namespace Meters; /** - * The granularity of the time grouping. - * Time durations are specified in ISO 8601 format. + * The granularity of the time grouping. Time durations are specified in ISO 8601 + * format. */ @friendlyName("MeterQueryGranularity") union MeterQueryGranularity { @@ -42,8 +42,8 @@ union MeterQueryGranularity { @friendlyName("MeterQueryFilters") model MeterQueryFilters { /** - * Filters to apply to the dimensions of the query. - * For `subject` and `customer_id` only equals ("eq", "in") comparisons are supported. + * Filters to apply to the dimensions of the query. For `subject` and `customer_id` + * only equals ("eq", "in") comparisons are supported. */ @maxProperties(10) dimensions?: Record; @@ -72,15 +72,15 @@ model MeterQueryRequest { to?: Shared.DateTime; /** - * The size of the time buckets to group the usage into. - * If not specified, the usage is aggregated over the entire period. + * The size of the time buckets to group the usage into. If not specified, the + * usage is aggregated over the entire period. */ granularity?: MeterQueryGranularity; /** - * The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). - * The time zone is used to determine the start and end of the time buckets. - * If not specified, the UTC timezone will be used. + * The value is the name of the time zone as defined in the IANA Time Zone Database + * (http://www.iana.org/time-zones). The time zone is used to determine the start + * and end of the time buckets. If not specified, the UTC timezone will be used. */ time_zone?: string = "UTC"; @@ -129,8 +129,7 @@ model MeterQueryResult { to?: Shared.DateTime; /** - * The usage data. - * If no data is available, an empty array is returned. + * The usage data. If no data is available, an empty array is returned. */ data: MeterQueryRow[]; } @@ -167,8 +166,8 @@ model MeterQueryRow { to: Shared.DateTime; /** - * The dimensions the value is aggregated over. - * `subject` and `customer_id` are reserved dimensions. + * The dimensions the value is aggregated over. `subject` and `customer_id` are + * reserved dimensions. */ dimensions: Record; } diff --git a/api/spec/packages/aip/src/openmeter.tsp b/api/spec/packages/aip/src/openmeter.tsp index fdeab26b4c..cc1a23dfd4 100644 --- a/api/spec/packages/aip/src/openmeter.tsp +++ b/api/spec/packages/aip/src/openmeter.tsp @@ -19,8 +19,8 @@ using TypeSpec.Http; using TypeSpec.OpenAPI; /** - * OpenMeter is a cloud native usage metering and billing service. - * The OpenMeter API allows you to ingest events, query meter usage, and manage resources. + * OpenMeter is a cloud native usage metering and billing service. The OpenMeter + * API allows you to ingest events, query meter usage, and manage resources. */ @service(#{ title: "OpenMeter API" }) @info(#{ diff --git a/api/spec/packages/aip/src/productcatalog/addon.tsp b/api/spec/packages/aip/src/productcatalog/addon.tsp index a3934e77f5..35919b9099 100644 --- a/api/spec/packages/aip/src/productcatalog/addon.tsp +++ b/api/spec/packages/aip/src/productcatalog/addon.tsp @@ -5,7 +5,9 @@ import "./plan.tsp"; namespace ProductCatalog; /** - * The status of the add-on defined by the effectiveFrom and effectiveTo properties. + * The status of the add-on defined by the `effective_from` and `effective_to` + * properties. + * * - `draft`: The add-on has not yet been published and can be edited. * - `active`: The add-on is published and available for use. * - `archived`: The add-on is no longer available for use. @@ -19,6 +21,7 @@ enum AddonStatus { /** * The instanceType of the add-on. + * * - `single`: Can be added to a subscription only once. * - `multiple`: Can be added to a subscription more than once. */ @@ -29,7 +32,8 @@ enum AddonInstanceType { } /** - * Add-on allows extending subscriptions with compatible plans with additional ratecards. + * Add-on allows extending subscriptions with compatible plans with additional + * ratecards. */ #suppress "@openmeter/api-spec-aip/repeated-prefix-grouping" "effective_from and effective_to are standard AIP temporal fields" @friendlyName("Addon") @@ -37,8 +41,9 @@ model Addon { ...Shared.Resource; /** - * A key is a semi-unique string that is used to identify the add-on. - * It is used to reference the latest `active` version of the add-on and is unique with the version number. + * A key is a semi-unique string that is used to identify the add-on. It is used to + * reference the latest `active` version of the add-on and is unique with the + * version number. */ #suppress "@openmeter/api-spec-aip/doc-decorator" "shared model" @visibility(Lifecycle.Read, Lifecycle.Create) @@ -68,25 +73,28 @@ model Addon { currency: Currencies.CurrencyCode; /** - * The date and time when the add-on becomes effective. When not specified, the add-on is a draft. + * The date and time when the add-on becomes effective. When not specified, the + * add-on is a draft. */ @visibility(Lifecycle.Read) @summary("Effective start date") effective_from?: Shared.DateTime; /** - * The date and time when the add-on is no longer effective. When not specified, the add-on is effective indefinitely. + * The date and time when the add-on is no longer effective. When not specified, + * the add-on is effective indefinitely. */ @visibility(Lifecycle.Read) @summary("Effective end date") effective_to?: Shared.DateTime; /** - * The status of the add-on. - * Computed based on the effective start and end dates: - * - draft = no effectiveFrom - * - active = effectiveFrom <= now < effectiveTo - * - archived = effectiveTo <= now + * The status of the add-on. Computed based on the effective start and end dates: + * + * - `draft`: `effective_from` is not set. + * - `active`: `effective_from <= now` and (`effective_to` is not set or + * `now < effective_to`). + * - `archived`: `effective_to <= now`. */ @summary("Status") @visibility(Lifecycle.Read) diff --git a/api/spec/packages/aip/src/productcatalog/operations.tsp b/api/spec/packages/aip/src/productcatalog/operations.tsp index 72ad84aefa..98eaeb9e8f 100644 --- a/api/spec/packages/aip/src/productcatalog/operations.tsp +++ b/api/spec/packages/aip/src/productcatalog/operations.tsp @@ -43,8 +43,8 @@ interface PlanOperations { ...Common.PagePaginationQuery, /** - * Sort plans returned in the response. - * Supported sort attributes are: + * Sort plans returned in the response. Supported sort attributes are: + * * - `id` * - `key` * - `version` @@ -176,16 +176,16 @@ interface AddonOperations { ...Common.PagePaginationQuery, /** - * Sort add-ons returned in the response. - * Supported sort attributes are: + * Sort add-ons returned in the response. Supported sort attributes are: + * * - `id` * - `key` * - `name` * - `created_at` (default) * - `updated_at` * - * The `asc` suffix is optional as the default sort order is ascending. - * The `desc` suffix is used to specify a descending order. + * The `asc` suffix is optional as the default sort order is ascending. The `desc` + * suffix is used to specify a descending order. */ @query(#{ name: "sort" }) sort?: Common.SortQuery, diff --git a/api/spec/packages/aip/src/productcatalog/plan.tsp b/api/spec/packages/aip/src/productcatalog/plan.tsp index 13697299db..b3ead7dd19 100644 --- a/api/spec/packages/aip/src/productcatalog/plan.tsp +++ b/api/spec/packages/aip/src/productcatalog/plan.tsp @@ -5,6 +5,7 @@ namespace ProductCatalog; /** * The status of a plan. + * * - `draft`: The plan has not yet been published and can be edited. * - `active`: The plan is published and can be used in subscriptions. * - `archived`: The plan is no longer available for use. @@ -27,8 +28,9 @@ model Plan { ...Shared.Resource; /** - * A key is a semi-unique string that is used to identify the plan. - * It is used to reference the latest `active` version of the plan and is unique with the version number. + * A key is a semi-unique string that is used to identify the plan. It is used to + * reference the latest `active` version of the plan and is unique with the version + * number. */ #suppress "@openmeter/api-spec-aip/doc-decorator" "shared model" @visibility(Lifecycle.Read, Lifecycle.Create) @@ -36,7 +38,8 @@ model Plan { key: Shared.ResourceKey; /** - * Plans are versioned to allow you to make changes without affecting running subscriptions. + * Plans are versioned to allow you to make changes without affecting running + * subscriptions. */ @visibility(Lifecycle.Read) @summary("Version") @@ -66,37 +69,37 @@ model Plan { pro_rating_enabled?: boolean = true; /** - * The date and time when the plan becomes `active`. - * When not specified, the plan is in `draft` status. + * The date and time when the plan becomes `active`. When not specified, the plan + * is in `draft` status. */ @visibility(Lifecycle.Read) @summary("Effective start date") effective_from?: Shared.DateTime; /** - * A scheduled date and time when the plan becomes `archived`. - * When not specified, the plan is in `active` status indefinitely. + * A scheduled date and time when the plan becomes `archived`. When not specified, + * the plan is in `active` status indefinitely. */ @visibility(Lifecycle.Read) @summary("Effective end date") effective_to?: Shared.DateTime; /** - * The status of the plan. - * Computed based on the effective start and end dates: - * - draft = no effectiveFrom - * - active = effectiveFrom <= now < effectiveTo - * - archived / inactive = effectiveTo <= now - * - scheduled = now < effectiveFrom < effectiveTo + * The status of the plan. Computed based on the effective start and end dates: + * + * - `draft`: `effective_from` is not set. + * - `scheduled`: `now < effective_from`. + * - `active`: `effective_from <= now` and (`effective_to` is not set or + * `now < effective_to`). + * - `archived`: `effective_to <= now`. */ @visibility(Lifecycle.Read) @summary("Status") status: PlanStatus; /** - * The plan phases define the pricing ramp for a subscription. - * A phase switch occurs only at the end of a billing period. - * At least one phase is required. + * The plan phases define the pricing ramp for a subscription. A phase switch + * occurs only at the end of a billing period. At least one phase is required. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @summary("Plan phases") @@ -104,7 +107,8 @@ model Plan { phases: PlanPhase[]; /** - * List of validation errors in `draft` state that prevent the plan from being published. + * List of validation errors in `draft` state that prevent the plan from being + * published. */ @visibility(Lifecycle.Read) @summary("Validation errors") @@ -149,7 +153,8 @@ model ProductCatalogValidationError { } /** - * The plan phase or pricing ramp allows changing a plan's rate cards over time as a subscription progresses. + * The plan phase or pricing ramp allows changing a plan's rate cards over time as + * a subscription progresses. */ @friendlyName("BillingPlanPhase") model PlanPhase { @@ -159,8 +164,8 @@ model PlanPhase { >; /** - * The duration of the phase. - * When not specified, the phase runs indefinitely. Only the last phase may omit the duration. + * The duration of the phase. When not specified, the phase runs indefinitely. Only + * the last phase may omit the duration. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @summary("Duration") diff --git a/api/spec/packages/aip/src/productcatalog/planaddon.tsp b/api/spec/packages/aip/src/productcatalog/planaddon.tsp index 10e9100fad..ce08da8525 100644 --- a/api/spec/packages/aip/src/productcatalog/planaddon.tsp +++ b/api/spec/packages/aip/src/productcatalog/planaddon.tsp @@ -4,8 +4,8 @@ import "./plan.tsp"; namespace ProductCatalog; /** - * PlanAddon represents an association between a plan and an add-on, - * controlling which add-ons are available for purchase within a plan. + * PlanAddon represents an association between a plan and an add-on, controlling + * which add-ons are available for purchase within a plan. */ @friendlyName("PlanAddon") model PlanAddon { @@ -26,9 +26,9 @@ model PlanAddon { from_plan_phase: Shared.ResourceKey; /** - * The maximum number of times the add-on can be purchased for the plan. - * For single-instance add-ons this field must be omitted. - * For multi-instance add-ons when omitted, unlimited quantity can be purchased. + * The maximum number of times the add-on can be purchased for the plan. For + * single-instance add-ons this field must be omitted. For multi-instance add-ons + * when omitted, unlimited quantity can be purchased. */ @summary("Max quantity") @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) diff --git a/api/spec/packages/aip/src/productcatalog/price.tsp b/api/spec/packages/aip/src/productcatalog/price.tsp index ca95e526c0..73b470cd05 100644 --- a/api/spec/packages/aip/src/productcatalog/price.tsp +++ b/api/spec/packages/aip/src/productcatalog/price.tsp @@ -4,11 +4,14 @@ namespace ProductCatalog; /** * The type of the price. + * * - `free`: No charge, the rate card is included at no cost. * - `flat`: A fixed amount charged once per billing period, regardless of usage. * - `unit`: A fixed rate charged per billing unit consumed. - * - `graduated`: Tiered pricing where each tier's rate applies only to usage within that tier. - * - `volume`: Tiered pricing where the rate for the highest tier reached applies to all units in the period. + * - `graduated`: Tiered pricing where each tier's rate applies only to usage + * within that tier. + * - `volume`: Tiered pricing where the rate for the highest tier reached applies + * to all units in the period. */ @friendlyName("BillingPriceType") enum PriceType { @@ -107,9 +110,8 @@ model PriceFlat { /** * Unit price. * - * Charges a fixed rate per billing unit. - * When UnitConfig is present on the rate card, billing units are the - * converted quantities (e.g. GB instead of bytes). + * Charges a fixed rate per billing unit. When UnitConfig is present on the rate + * card, billing units are the converted quantities (e.g. GB instead of bytes). */ @friendlyName("BillingPriceUnit") model PriceUnit { @@ -131,11 +133,11 @@ model PriceUnit { /** * Graduated tiered price. * - * Each tier's rate applies only to the usage within that tier. - * Pricing can change as cumulative usage crosses tier boundaries. + * Each tier's rate applies only to the usage within that tier. Pricing can change + * as cumulative usage crosses tier boundaries. * - * When UnitConfig is present on the rate card, tier boundaries (up_to_amount) - * are expressed in converted billing units. + * When UnitConfig is present on the rate card, tier boundaries (up_to_amount) are + * expressed in converted billing units. */ @friendlyName("BillingPriceGraduated") model PriceGraduated { @@ -147,8 +149,7 @@ model PriceGraduated { type: PriceType.Graduated; /** - * The tiers of the graduated price. - * At least one tier is required. + * The tiers of the graduated price. At least one tier is required. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @summary("Tiers") @@ -159,11 +160,11 @@ model PriceGraduated { /** * Volume tiered price. * - * The maximum quantity within a period determines the per-unit price for - * all units in that period. + * The maximum quantity within a period determines the per-unit price for all units + * in that period. * - * When UnitConfig is present on the rate card, tier boundaries (up_to_amount) - * are expressed in converted billing units. + * When UnitConfig is present on the rate card, tier boundaries (up_to_amount) are + * expressed in converted billing units. */ @friendlyName("BillingPriceVolume") model PriceVolume { @@ -175,8 +176,7 @@ model PriceVolume { type: PriceType.Volume; /** - * The tiers of the volume price. - * At least one tier is required. + * The tiers of the volume price. At least one tier is required. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @summary("Tiers") @@ -187,31 +187,29 @@ model PriceVolume { /** * A price tier used in graduated and volume pricing. * - * At least one price component (flat_price or unit_price) must be set. - * When UnitConfig is present on the rate card, up_to_amount is expressed - * in converted billing units. + * At least one price component (flat_price or unit_price) must be set. When + * UnitConfig is present on the rate card, up_to_amount is expressed in converted + * billing units. */ @friendlyName("BillingPriceTier") model PriceTier { /** - * Up to and including this quantity will be contained in the tier. - * If undefined, the tier is open-ended (the last tier). + * Up to and including this quantity will be contained in the tier. If undefined, + * the tier is open-ended (the last tier). */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @summary("Up to quantity") up_to_amount?: Shared.Numeric; /** - * The flat price component of the tier. - * Charged once when the tier is entered. + * The flat price component of the tier. Charged once when the tier is entered. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @summary("Flat price component") flat_price?: PriceFlat; /** - * The unit price component of the tier. - * Charged per billing unit within the tier. + * The unit price component of the tier. Charged per billing unit within the tier. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @summary("Unit price component") @@ -219,8 +217,8 @@ model PriceTier { } /** - * Spend commitments for a rate card. - * The customer is committed to spend at least the minimum amount and at most the maximum amount. + * Spend commitments for a rate card. The customer is committed to spend at least + * the minimum amount and at most the maximum amount. */ @friendlyName("BillingSpendCommitments") model SpendCommitments { diff --git a/api/spec/packages/aip/src/productcatalog/ratecard.tsp b/api/spec/packages/aip/src/productcatalog/ratecard.tsp index ea1d272812..7301c7d6e2 100644 --- a/api/spec/packages/aip/src/productcatalog/ratecard.tsp +++ b/api/spec/packages/aip/src/productcatalog/ratecard.tsp @@ -10,7 +10,9 @@ namespace ProductCatalog; * Settlement mode for billing. * * Values: - * - `credit_then_invoice`: Credits are applied first, then any remainder is invoiced. + * + * - `credit_then_invoice`: Credits are applied first, then any remainder is + * invoiced. * - `credit_only`: Usage is settled exclusively against credits. */ @friendlyName("BillingSettlementMode") @@ -38,8 +40,8 @@ model RateCard { feature?: Shared.ResourceReference; /** - * The billing cadence of the rate card. - * When null, the charge is one-time (non-recurring). Only valid for flat prices. + * The billing cadence of the rate card. When null, the charge is one-time + * (non-recurring). Only valid for flat prices. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @summary("Billing cadence") @@ -53,16 +55,16 @@ model RateCard { price: Price; /** - * The payment term of the rate card. - * In advance payment term can only be used for flat prices. + * The payment term of the rate card. In advance payment term can only be used for + * flat prices. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @summary("Payment term") payment_term?: PricePaymentTerm = PricePaymentTerm.InArrears; /** - * Spend commitments for this rate card. - * Only applicable to usage-based prices (unit, graduated, volume). + * Spend commitments for this rate card. Only applicable to usage-based prices + * (unit, graduated, volume). */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @summary("Commitments") @@ -108,9 +110,9 @@ model Discounts { percentage?: float; /** - * Number of usage units granted free before billing starts. - * Only applies to usage-based lines (not flat fees). Usage is treated as zero - * until this amount is exhausted. + * Number of usage units granted free before billing starts. Only applies to + * usage-based lines (not flat fees). Usage is treated as zero until this amount is + * exhausted. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) usage?: Shared.Numeric; @@ -133,8 +135,10 @@ model ProrationConfiguration { * The proration mode of the rate card. * * Values: + * * - `no_proration`: No proration. - * - `prorate_prices`: Prorate the price based on the time remaining in the billing period. + * - `prorate_prices`: Prorate the price based on the time remaining in the billing + * period. */ @friendlyName("BillingRateCardProrationMode") enum ProrationMode { diff --git a/api/spec/packages/aip/src/productcatalog/unitconfig.tsp b/api/spec/packages/aip/src/productcatalog/unitconfig.tsp index 42f1aee340..b113fc55b8 100644 --- a/api/spec/packages/aip/src/productcatalog/unitconfig.tsp +++ b/api/spec/packages/aip/src/productcatalog/unitconfig.tsp @@ -5,8 +5,11 @@ namespace ProductCatalog; /** * The arithmetic operation used to convert raw metered units into billing units. - * - `divide`: Divide the metered quantity by the conversion factor (e.g., bytes ÷ 1e9 = GB). - * - `multiply`: Multiply the metered quantity by the conversion factor (e.g., cost × 1.2 = cost + 20% margin). + * + * - `divide`: Divide the metered quantity by the conversion factor (e.g., bytes ÷ + * 1e9 = GB). + * - `multiply`: Multiply the metered quantity by the conversion factor (e.g., cost + * × 1.2 = cost + 20% margin). */ @friendlyName("BillingUnitConfigOperation") enum UnitConfigOperation { @@ -17,8 +20,9 @@ enum UnitConfigOperation { /** * The rounding mode applied to the converted quantity for invoicing. * - * Rounding is applied only to the invoiced quantity. - * Entitlement balance checks use the precise decimal value after conversion. + * Rounding is applied only to the invoiced quantity. Entitlement balance checks + * use the precise decimal value after conversion. + * * - `ceiling`: Round up to the next integer (typical for package-style billing). * - `floor`: Round down to the previous integer. * - `half_up`: Round to the nearest integer, with 0.5 rounding up. @@ -35,19 +39,26 @@ enum UnitConfigRoundingMode { /** * Unit conversion configuration. * - * Transforms raw metered quantities into billing-ready units before pricing - * and entitlement evaluation. Applied at the rate card level so the same - * feature can be billed in different units across plans. + * Transforms raw metered quantities into billing-ready units before pricing and + * entitlement evaluation. Applied at the rate card level so the same feature can + * be billed in different units across plans. * * Examples: - * - Meter bytes, bill GB: operation=divide, conversionFactor=1e9, rounding=ceiling, displayUnit="GB" - * - Meter seconds, bill hours: operation=divide, conversionFactor=3600, rounding=ceiling, displayUnit="hours" - * - Cost + 20% margin: operation=multiply, conversionFactor=1.2 - * - Bill per million tokens: operation=divide, conversionFactor=1e6, rounding=ceiling, displayUnit="M" + * + * - Meter bytes, bill GB: operation=divide, conversionFactor=1e9, + * rounding=ceiling, displayUnit="GB" + * - Meter seconds, bill hours: operation=divide, conversionFactor=3600, + * rounding=ceiling, displayUnit="hours" + * - Cost + 20% margin: operation=multiply, conversionFactor=1.2 + * - Bill per million tokens: operation=divide, conversionFactor=1e6, + * rounding=ceiling, displayUnit="M" * * v1 equivalents: - * - DynamicPrice(multiplier): operation=multiply, conversionFactor=multiplier + UnitPrice(amount=1) - * - PackagePrice(amount, quantityPerPkg): operation=divide, conversionFactor=quantityPerPkg, rounding=ceiling + UnitPrice(amount) + * + * - DynamicPrice(multiplier): operation=multiply, conversionFactor=multiplier + + * UnitPrice(amount=1) + * - PackagePrice(amount, quantityPerPkg): operation=divide, + * conversionFactor=quantityPerPkg, rounding=ceiling + UnitPrice(amount) */ @friendlyName("BillingUnitConfig") model UnitConfig { @@ -61,8 +72,8 @@ model UnitConfig { /** * The factor used in the conversion operation. * - * For divide: converted = raw / conversionFactor - * For multiply: converted = raw × conversionFactor + * - For `divide`: `converted = raw / conversionFactor`. + * - For `multiply`: `converted = raw × conversionFactor`. * * Must be a positive non-zero value. */ @@ -73,8 +84,8 @@ model UnitConfig { /** * The rounding mode applied to the converted quantity for invoicing. * - * Defaults to none (no rounding). - * Entitlement checks always use the precise (unrounded) value. + * Defaults to none (no rounding). Entitlement checks always use the precise + * (unrounded) value. */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @summary("Rounding mode") @@ -83,16 +94,16 @@ model UnitConfig { /** * The number of decimal places to retain after rounding. * - * Only meaningful when rounding is not "none". - * Defaults to 0 (round to whole numbers). + * Only meaningful when rounding is not "none". Defaults to 0 (round to whole + * numbers). */ @visibility(Lifecycle.Read, Lifecycle.Create, Lifecycle.Update) @summary("Rounding precision (decimal places)") precision?: integer = 0; /** - * A human-readable label for the converted unit shown on invoices and - * in the customer portal (e.g., "GB", "hours", "M tokens"). + * A human-readable label for the converted unit shown on invoices and in the + * customer portal (e.g., "GB", "hours", "M tokens"). * * Optional. When omitted, no unit label is rendered. */ @@ -138,8 +149,8 @@ model InvoiceUsageQuantityDetail { display_unit?: string; /** - * Snapshot of the UnitConfig that was in effect at billing time. - * Ensures historical invoices reflect the config that was actually applied. + * Snapshot of the UnitConfig that was in effect at billing time. Ensures + * historical invoices reflect the config that was actually applied. */ @visibility(Lifecycle.Read) @summary("Applied unit config snapshot") diff --git a/api/spec/packages/aip/src/shared/address.tsp b/api/spec/packages/aip/src/shared/address.tsp index 136478c252..8bb360c8ad 100644 --- a/api/spec/packages/aip/src/shared/address.tsp +++ b/api/spec/packages/aip/src/shared/address.tsp @@ -8,7 +8,8 @@ namespace Shared; @friendlyName("Address") model Address { /** - * Country code in [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 format. + * Country code in [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) + * alpha-2 format. */ @visibility(Lifecycle.Create, Lifecycle.Read, Lifecycle.Update) @summary("Country") diff --git a/api/spec/packages/aip/src/shared/enums.tsp b/api/spec/packages/aip/src/shared/enums.tsp index 975ceefc8c..794c759158 100644 --- a/api/spec/packages/aip/src/shared/enums.tsp +++ b/api/spec/packages/aip/src/shared/enums.tsp @@ -4,6 +4,7 @@ namespace Shared; * Identifies which system manages a resource. * * Values: + * * - `manual`: The resource is managed manually (overridden by our API users). * - `system`: The resource is managed by the system. * - `subscription`: The resource is managed by the subscription. diff --git a/api/spec/packages/aip/src/shared/filters.tsp b/api/spec/packages/aip/src/shared/filters.tsp index 0ccefa2299..586b05f628 100644 --- a/api/spec/packages/aip/src/shared/filters.tsp +++ b/api/spec/packages/aip/src/shared/filters.tsp @@ -8,8 +8,8 @@ using TypeSpec.JsonSchema; namespace Shared; /** - * A query filter for a string attribute. - * Operators are mutually exclusive, only one operator is allowed at a time. + * A query filter for a string attribute. Operators are mutually exclusive, only + * one operator is allowed at a time. */ @friendlyName("QueryFilterString") @summary("Query String Filter") @@ -64,8 +64,8 @@ model QueryFilterString { } /** - * A query filter for an item in a string map attribute. - * Operators are mutually exclusive, only one operator is allowed at a time. + * A query filter for an item in a string map attribute. Operators are mutually + * exclusive, only one operator is allowed at a time. */ @friendlyName("QueryFilterStringMapItem") @summary("Query String Map Item Filter") @@ -81,8 +81,8 @@ model QueryFilterStringMapItem { alias QueryFilterStringMap = Record; /** - * A query filter for an integer attribute. - * Operators are mutually exclusive, only one operator is allowed at a time. + * A query filter for an integer attribute. Operators are mutually exclusive, only + * one operator is allowed at a time. */ @friendlyName("QueryFilterInteger") @summary("Query Integer Filter") @@ -147,8 +147,8 @@ model QueryFilterInteger { } /** - * A query filter for a float attribute. - * Operators are mutually exclusive, only one operator is allowed at a time. + * A query filter for a float attribute. Operators are mutually exclusive, only one + * operator is allowed at a time. */ @friendlyName("QueryFilterFloat") @summary("Query Float Filter") @@ -189,8 +189,8 @@ model QueryFilterFloat { } /** - * A query filter for a numeric attribute. - * Operators are mutually exclusive, only one operator is allowed at a time. + * A query filter for a numeric attribute. Operators are mutually exclusive, only + * one operator is allowed at a time. */ @friendlyName("QueryFilterNumeric") @summary("Query Numeric Filter") @@ -231,8 +231,8 @@ model QueryFilterNumeric { } /** - * A query filter for a boolean attribute. - * Operators are mutually exclusive, only one operator is allowed at a time. + * A query filter for a boolean attribute. Operators are mutually exclusive, only + * one operator is allowed at a time. */ @friendlyName("QueryFilterBoolean") @summary("Query Boolean Filter") @@ -244,8 +244,8 @@ model QueryFilterBoolean { } /** - * A query filter for a time attribute. - * Operators are mutually exclusive, only one operator is allowed at a time. + * A query filter for a time attribute. Operators are mutually exclusive, only one + * operator is allowed at a time. */ @friendlyName("QueryFilterDateTime") @summary("Query Date-time Filter") diff --git a/api/spec/packages/aip/src/shared/properties.tsp b/api/spec/packages/aip/src/shared/properties.tsp index 018d7a950a..59721b0a29 100644 --- a/api/spec/packages/aip/src/shared/properties.tsp +++ b/api/spec/packages/aip/src/shared/properties.tsp @@ -37,7 +37,8 @@ union ULIDOrResourceKey { } /** - * ExternalResourceKey is a unique string that is used to identify a resource in an external system. + * ExternalResourceKey is a unique string that is used to identify a resource in an + * external system. */ @maxLength(256) @minLength(1) @@ -57,7 +58,8 @@ union ULIDOrExternalResourceKey { } /** - * [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. + * [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in + * UTC. */ @encode(DateTimeKnownEncoding.rfc3339) @friendlyName("DateTime") @@ -77,7 +79,8 @@ scalar DateTime extends utcDateTime; // A stricter alternative that doesn't allow fractional components is: ^P(?:\d+Y)?(?:\d+M)?(?:\d+W)?(?:\d+D)?(?:T(?:\d+H)?(?:\d+M)?(?:\d+S)?)?$ // ^before using the stricter pattern make sure to double escape the backslashes /** - * [ISO 8601 Duration](https://docs.digi.com/resources/documentation/digidocs/90001488-13/reference/r_iso_8601_duration_format.htm) string. + * [ISO 8601 Duration](https://docs.digi.com/resources/documentation/digidocs/90001488-13/reference/r_iso_8601_duration_format.htm) + * string. */ @encode(DurationKnownEncoding.ISO8601) @pattern("^P(?:\\d+(?:\\.\\d+)?Y)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?W)?(?:\\d+(?:\\.\\d+)?D)?(?:T(?:\\d+(?:\\.\\d+)?H)?(?:\\d+(?:\\.\\d+)?M)?(?:\\d+(?:\\.\\d+)?S)?)?$") @@ -87,8 +90,9 @@ scalar DateTime extends utcDateTime; scalar ISO8601Duration extends string; /** - * Three-letter [ISO4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. - * Custom three-letter currency codes are also supported for convenience. + * Three-letter [ISO4217](https://www.iso.org/iso-4217-currency-codes.html) + * currency code. Custom three-letter currency codes are also supported for + * convenience. */ @pattern("^[A-Z]{3}$") @friendlyName("CurrencyCode") @@ -98,8 +102,8 @@ scalar ISO8601Duration extends string; scalar CurrencyCode extends string; /** - * [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 country code. - * Custom two-letter country codes are also supported for convenience. + * [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 country + * code. Custom two-letter country codes are also supported for convenience. */ @pattern("^[A-Z]{2}$") @friendlyName("CountryCode") @@ -127,7 +131,8 @@ model CurrencyAmount { } /** - * Tax identifier code is a normalized tax code shown on the original identity document. + * Tax identifier code is a normalized tax code shown on the original identity + * document. */ @minLength(1) @maxLength(32) diff --git a/api/spec/packages/aip/src/subscriptions/operations.tsp b/api/spec/packages/aip/src/subscriptions/operations.tsp index 7d6bfc9803..b36660484a 100644 --- a/api/spec/packages/aip/src/subscriptions/operations.tsp +++ b/api/spec/packages/aip/src/subscriptions/operations.tsp @@ -31,8 +31,9 @@ model SubscriptionChange { ...OmitProperties; /** - * Timing configuration for the change, when the change should take effect. - * For changing a subscription, the accepted values depend on the subscription configuration. + * Timing configuration for the change, when the change should take effect. For + * changing a subscription, the accepted values depend on the subscription + * configuration. */ timing: SubscriptionEditTiming; } @@ -87,8 +88,8 @@ interface SubscriptionsOperations { ...Common.PagePaginationQuery, /** - * Sort subscriptions returned in the response. - * Supported sort attributes are: + * Sort subscriptions returned in the response. Supported sort attributes are: + * * - `id` * - `active_from` (default) * - `active_to` @@ -111,8 +112,8 @@ interface SubscriptionsOperations { ): Shared.GetResponse | Common.NotFound | Common.ErrorResponses; /** - * Cancels the subscription. - * Will result in a scheduling conflict if there are other subscriptions scheduled to start after the cancelation time. + * Cancels the subscription. Will result in a scheduling conflict if there are + * other subscriptions scheduled to start after the cancelation time. */ @post @operationId("cancel-subscription") @@ -138,8 +139,8 @@ interface SubscriptionsOperations { | Common.ErrorResponses; /** - * Closes a running subscription and starts a new one according to the specification. - * Can be used for upgrades, downgrades, and plan changes. + * Closes a running subscription and starts a new one according to the + * specification. Can be used for upgrades, downgrades, and plan changes. */ @post @operationId("change-subscription") diff --git a/api/spec/packages/aip/src/subscriptions/reference.tsp b/api/spec/packages/aip/src/subscriptions/reference.tsp index 5473119bfa..3b5d24c84f 100644 --- a/api/spec/packages/aip/src/subscriptions/reference.tsp +++ b/api/spec/packages/aip/src/subscriptions/reference.tsp @@ -3,8 +3,8 @@ import "../shared/index.tsp"; namespace Subscriptions; /** - * Subscription reference represents a reference to the specific subscription item this - * entity represents. + * Subscription reference represents a reference to the specific subscription item + * this entity represents. */ @friendlyName("BillingSubscriptionReference") model SubscriptionReference { diff --git a/api/spec/packages/aip/src/subscriptions/subscription.tsp b/api/spec/packages/aip/src/subscriptions/subscription.tsp index fba5075be6..08f34bc672 100644 --- a/api/spec/packages/aip/src/subscriptions/subscription.tsp +++ b/api/spec/packages/aip/src/subscriptions/subscription.tsp @@ -17,9 +17,9 @@ enum SubscriptionStatus { } /** - * Subscription edit timing. - * When immediate, the requested changes take effect immediately. - * When next_billing_cycle, the requested changes take effect at the next billing cycle. + * Subscription edit timing. When immediate, the requested changes take effect + * immediately. When next_billing_cycle, the requested changes take effect at the + * next billing cycle. */ @friendlyName("BillingSubscriptionEditTimingEnum") enum SubscriptionEditTimingEnum { @@ -28,8 +28,9 @@ enum SubscriptionEditTimingEnum { } /** - * Subscription edit timing defined when the changes should take effect. - * If the provided configuration is not supported by the subscription, an error will be returned. + * Subscription edit timing defined when the changes should take effect. If the + * provided configuration is not supported by the subscription, an error will be + * returned. */ @oneOf @friendlyName("BillingSubscriptionEditTiming") @@ -56,8 +57,8 @@ model SubscriptionCreate { /** * The ID of the customer to create the subscription for. * - * Either customer ID or customer key must be provided. - * If both are provided, the ID will be used. + * Either customer ID or customer key must be provided. If both are provided, the + * ID will be used. */ @visibility(Lifecycle.Create) @summary("Customer ID") @@ -66,8 +67,8 @@ model SubscriptionCreate { /** * The key of the customer to create the subscription for. * - * Either customer ID or customer key must be provided. - * If both are provided, the ID will be used. + * Either customer ID or customer key must be provided. If both are provided, the + * ID will be used. */ @visibility(Lifecycle.Create) @summary("Customer Key") @@ -79,30 +80,29 @@ model SubscriptionCreate { */ plan: { /** - * The plan ID of the subscription. - * Set if subscription is created from a plan. + * The plan ID of the subscription. Set if subscription is created from a plan. * - * ID or Key of the plan is required if creating a subscription from a plan. - * If both are provided, the ID will be used. + * ID or Key of the plan is required if creating a subscription from a plan. If + * both are provided, the ID will be used. */ @visibility(Lifecycle.Create) @summary("Plan ID") id?: Shared.ULID; /** - * The plan Key of the subscription, if any. - * Set if subscription is created from a plan. + * The plan Key of the subscription, if any. Set if subscription is created from a + * plan. * - * ID or Key of the plan is required if creating a subscription from a plan. - * If both are provided, the ID will be used. + * ID or Key of the plan is required if creating a subscription from a plan. If + * both are provided, the ID will be used. */ @visibility(Lifecycle.Create) @summary("Plan Key") key?: Shared.ResourceKey; /** - * The plan version of the subscription, if any. - * If not provided, the latest version of the plan will be used. + * The plan version of the subscription, if any. If not provided, the latest + * version of the plan will be used. */ @visibility(Lifecycle.Create) @summary("Plan Version") @@ -110,14 +110,16 @@ model SubscriptionCreate { }; /** - * A billing anchor is the fixed point in time that determines the subscription's recurring billing cycle. - * It affects when charges occur and how prorations are calculated. - * Common anchors: + * A billing anchor is the fixed point in time that determines the subscription's + * recurring billing cycle. It affects when charges occur and how prorations are + * calculated. Common anchors: + * * - Calendar month (1st of each month): `2025-01-01T00:00:00Z` * - Subscription anniversary (day customer signed up) * - Custom date (customer-specified day) * - * If not provided, the subscription will be created with the subscription's creation time as the billing anchor. + * If not provided, the subscription will be created with the subscription's + * creation time as the billing anchor. */ @visibility(Lifecycle.Create) @summary("Billing anchor") @@ -139,17 +141,17 @@ model Subscription { customer_id: Shared.ULID; /** - * The plan ID of the subscription. - * Set if subscription is created from a plan. + * The plan ID of the subscription. Set if subscription is created from a plan. */ @visibility(Lifecycle.Read) @summary("Plan ID") plan_id?: Shared.ULID; /** - * A billing anchor is the fixed point in time that determines the subscription's recurring billing cycle. - * It affects when charges occur and how prorations are calculated. - * Common anchors: + * A billing anchor is the fixed point in time that determines the subscription's + * recurring billing cycle. It affects when charges occur and how prorations are + * calculated. Common anchors: + * * - Calendar month (1st of each month): `2025-01-01T00:00:00Z` * - Subscription anniversary (day customer signed up) * - Custom date (customer-specified day) diff --git a/api/spec/pnpm-lock.yaml b/api/spec/pnpm-lock.yaml index 589dd89bd7..e100a96632 100644 --- a/api/spec/pnpm-lock.yaml +++ b/api/spec/pnpm-lock.yaml @@ -54,7 +54,7 @@ importers: version: 1.11.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) '@typespec/openapi': specifier: 1.11.0 - version: 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) + version: 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) '@typespec/openapi3': specifier: 1.11.0 version: 1.11.0(patch_hash=9e491a6ec6e4554b27aa219f126fa03debda8f78f528d6ed14d43e0b792c29f4)(ae22031e93b70811715a6f3478d0b37b) @@ -63,7 +63,10 @@ importers: version: 1.11.0 '@typespec/rest': specifier: 0.81.0 - version: 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) + version: 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) + prettier: + specifier: 3.8.3 + version: 3.8.3 yaml: specifier: 2.8.3 version: 2.8.3 @@ -87,7 +90,7 @@ importers: version: 0.28.3(patch_hash=9dcf4fca858e9dbe3b04ba9a577a6a45b074b6ebbab97ab781834c3b609a22b5)(c2ca90c340af53b5650fa3905ab9c113) '@typespec/openapi': specifier: 1.11.0 - version: 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) + version: 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) '@typespec/openapi3': specifier: 1.11.0 version: 1.11.0(patch_hash=9e491a6ec6e4554b27aa219f126fa03debda8f78f528d6ed14d43e0b792c29f4)(ae22031e93b70811715a6f3478d0b37b) @@ -96,7 +99,7 @@ importers: version: 1.11.0 '@typespec/rest': specifier: 0.81.0 - version: 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) + version: 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) '@typespec/versioning': specifier: 0.81.0 version: 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) @@ -1696,8 +1699,8 @@ snapshots: '@azure-tools/typespec-client-generator-core': 0.67.2(cdfe87f2160a3a0c6a4a3d49c0daee85) '@typespec/compiler': 1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0) '@typespec/http': 1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) - '@typespec/openapi': 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) - '@typespec/rest': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) + '@typespec/openapi': 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) + '@typespec/rest': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) '@typespec/versioning': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) optionalDependencies: '@typespec/xml': 0.76.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) @@ -1706,15 +1709,15 @@ snapshots: dependencies: '@typespec/compiler': 1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0) '@typespec/http': 1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) - '@typespec/rest': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) + '@typespec/rest': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) '@azure-tools/typespec-azure-resource-manager@0.62.0(ef14f75551bce5604090a413dfe61341)': dependencies: '@azure-tools/typespec-azure-core': 0.62.0(b9754a5e984ea3d19e9c9b3f73b01d42) '@typespec/compiler': 1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0) '@typespec/http': 1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) - '@typespec/openapi': 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) - '@typespec/rest': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) + '@typespec/openapi': 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) + '@typespec/rest': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) '@typespec/versioning': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) change-case: 5.4.4 pluralize: 8.0.0 @@ -1732,8 +1735,8 @@ snapshots: '@typespec/compiler': 1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0) '@typespec/events': 0.76.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) '@typespec/http': 1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) - '@typespec/openapi': 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) - '@typespec/rest': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) + '@typespec/openapi': 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) + '@typespec/rest': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) '@typespec/sse': 0.76.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/events@0.76.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) '@typespec/streams': 0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) '@typespec/versioning': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) @@ -2270,8 +2273,8 @@ snapshots: '@typespec/compiler': 1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0) '@typespec/events': 0.76.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) '@typespec/http': 1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) - '@typespec/openapi': 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) - '@typespec/rest': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) + '@typespec/openapi': 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) + '@typespec/rest': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) '@typespec/sse': 0.76.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/events@0.76.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) '@typespec/streams': 0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) '@typespec/versioning': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) @@ -2305,7 +2308,7 @@ snapshots: '@typespec/asset-emitter': 0.79.1(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) '@typespec/compiler': 1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0) '@typespec/http': 1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) - '@typespec/openapi': 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) + '@typespec/openapi': 1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))) yaml: 2.8.3 optionalDependencies: '@typespec/events': 0.76.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) @@ -2315,7 +2318,7 @@ snapshots: '@typespec/versioning': 0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) '@typespec/xml': 0.76.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)) - '@typespec/openapi@1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))': + '@typespec/openapi@1.11.0(patch_hash=f3c538331cfd9a1478f99a7a039f3b067fc2e47edd1870495dc30459c37ec827)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))))': dependencies: '@typespec/compiler': 1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0) '@typespec/http': 1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) @@ -2324,7 +2327,7 @@ snapshots: dependencies: prettier: 3.8.3 - '@typespec/rest@0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0)))': + '@typespec/rest@0.81.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/http@1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))))': dependencies: '@typespec/compiler': 1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0) '@typespec/http': 1.11.0(patch_hash=e5eb7d65296bdaff8a23f7b13f46c819ab5f5f0f14d1efd4e4a5694b13be1410)(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))(@typespec/streams@0.75.0(@typespec/compiler@1.11.0(patch_hash=686e482800756581f422013baf6c7c49e3f6363a064606c0d353a0e72053e4bc)(@types/node@25.6.0))) diff --git a/api/v3/api.gen.go b/api/v3/api.gen.go index ed5f1e8150..e8ba5c416c 100644 --- a/api/v3/api.gen.go +++ b/api/v3/api.gen.go @@ -1154,7 +1154,8 @@ func (e ResourceManagedBy) Valid() bool { } } -// Addon Add-on allows extending subscriptions with compatible plans with additional ratecards. +// Addon Add-on allows extending subscriptions with compatible plans with additional +// ratecards. type Addon struct { // CreatedAt An ISO-8601 timestamp representation of entity creation date. CreatedAt DateTime `json:"created_at"` @@ -1170,18 +1171,21 @@ type Addon struct { // Maximum 1024 characters. Description *string `json:"description,omitempty"` - // EffectiveFrom The date and time when the add-on becomes effective. When not specified, the add-on is a draft. + // EffectiveFrom The date and time when the add-on becomes effective. When not specified, the + // add-on is a draft. EffectiveFrom *DateTime `json:"effective_from,omitempty"` - // EffectiveTo The date and time when the add-on is no longer effective. When not specified, the add-on is effective indefinitely. + // EffectiveTo The date and time when the add-on is no longer effective. When not specified, + // the add-on is effective indefinitely. EffectiveTo *DateTime `json:"effective_to,omitempty"` Id ULID `json:"id"` // InstanceType The InstanceType of the add-ons. Can be "single" or "multiple". InstanceType AddonInstanceType `json:"instance_type"` - // Key A key is a semi-unique string that is used to identify the add-on. - // It is used to reference the latest `active` version of the add-on and is unique with the version number. + // Key A key is a semi-unique string that is used to identify the add-on. It is used to + // reference the latest `active` version of the add-on and is unique with the + // version number. Key ResourceKey `json:"key"` // Labels Labels store metadata of an entity that can be used for filtering an entity list or for searching across entity types. @@ -1197,11 +1201,12 @@ type Addon struct { // RateCards The rate cards of the add-on. RateCards []BillingRateCard `json:"rate_cards"` - // Status The status of the add-on. - // Computed based on the effective start and end dates: - // - draft = no effectiveFrom - // - active = effectiveFrom <= now < effectiveTo - // - archived = effectiveTo <= now + // Status The status of the add-on. Computed based on the effective start and end dates: + // + // - `draft`: `effective_from` is not set. + // - `active`: `effective_from <= now` and (`effective_to` is not set or + // `now < effective_to`). + // - `archived`: `effective_to <= now`. Status AddonStatus `json:"status"` // UpdatedAt An ISO-8601 timestamp representation of entity last update date. @@ -1215,6 +1220,7 @@ type Addon struct { } // AddonInstanceType The instanceType of the add-on. +// // - `single`: Can be added to a subscription only once. // - `multiple`: Can be added to a subscription more than once. type AddonInstanceType string @@ -1239,7 +1245,9 @@ type AddonReferenceItem struct { Id ULID `json:"id"` } -// AddonStatus The status of the add-on defined by the effectiveFrom and effectiveTo properties. +// AddonStatus The status of the add-on defined by the `effective_from` and `effective_to` +// properties. +// // - `draft`: The add-on has not yet been published and can be edited. // - `active`: The add-on is published and available for use. // - `archived`: The add-on is no longer available for use. @@ -1250,7 +1258,8 @@ type Address struct { // City City. City *string `json:"city,omitempty"` - // Country Country code in [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 format. + // Country Country code in [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) + // alpha-2 format. Country *CountryCode `json:"country,omitempty"` // Line1 First line of the address. @@ -1337,7 +1346,8 @@ type BillingAddress struct { // City City. City *string `json:"city,omitempty"` - // Country Country code in [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 format. + // Country Country code in [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) + // alpha-2 format. Country *CountryCode `json:"country,omitempty"` // Line1 First line of the address. @@ -1362,7 +1372,9 @@ type BillingApp struct { } // BillingAppCatalogItem Available apps for billing integrations to connect with third-party services. -// Apps can have various capabilities like syncing data from or to external systems, integrating with third-party services for tax calculation, delivery of invoices, collection of payments, etc. +// Apps can have various capabilities like syncing data from or to external +// systems, integrating with third-party services for tax calculation, delivery of +// invoices, collection of payments, etc. type BillingAppCatalogItem struct { // Description Description of the app. Description string `json:"description"` @@ -1401,19 +1413,23 @@ type BillingAppCustomerDataStripe struct { Labels *Labels `json:"labels,omitempty"` } -// BillingAppExternalInvoicing External Invoicing app enables integration with third-party invoicing or payment system. +// BillingAppExternalInvoicing External Invoicing app enables integration with third-party invoicing or payment +// system. // -// The app supports a bi-directional synchronization pattern where OpenMeter Billing manages -// the invoice lifecycle while the external system handles invoice presentation and payment collection. +// The app supports a bi-directional synchronization pattern where OpenMeter +// Billing manages the invoice lifecycle while the external system handles invoice +// presentation and payment collection. // // Integration workflow: -// 1. The billing system creates invoices and transitions them through lifecycle states (draft → issuing → issued) +// +// 1. The billing system creates invoices and transitions them through lifecycle +// states (draft → issuing → issued) // 2. The integration receives webhook notifications about invoice state changes // 3. The integration calls back to provide external system IDs and metadata // 4. The integration reports payment events back via the payment status API // -// State synchronization is controlled by hooks that pause invoice progression until the -// external system confirms synchronization via API callbacks. +// State synchronization is controlled by hooks that pause invoice progression +// until the external system confirms synchronization via API callbacks. type BillingAppExternalInvoicing struct { // CreatedAt An ISO-8601 timestamp representation of entity creation date. CreatedAt DateTime `json:"created_at"` @@ -1431,9 +1447,10 @@ type BillingAppExternalInvoicing struct { // EnableDraftSyncHook Enable draft synchronization hook. // - // When enabled, invoices will pause at the draft state and wait for the integration - // to call the draft synchronized endpoint before progressing to the issuing state. - // This allows the external system to validate and prepare the invoice data. + // When enabled, invoices will pause at the draft state and wait for the + // integration to call the draft synchronized endpoint before progressing to the + // issuing state. This allows the external system to validate and prepare the + // invoice data. // // When disabled, invoices automatically progress through the draft state based on // the configured workflow timing. @@ -1441,10 +1458,10 @@ type BillingAppExternalInvoicing struct { // EnableIssuingSyncHook Enable issuing synchronization hook. // - // When enabled, invoices will pause at the issuing state and wait for the integration - // to call the issuing synchronized endpoint before progressing to the issued state. - // This ensures the external invoicing system has successfully created and finalized - // the invoice before it is marked as issued. + // When enabled, invoices will pause at the issuing state and wait for the + // integration to call the issuing synchronized endpoint before progressing to the + // issued state. This ensures the external invoicing system has successfully + // created and finalized the invoice before it is marked as issued. // // When disabled, invoices automatically progress through the issuing state and are // immediately marked as issued. @@ -1617,8 +1634,8 @@ type BillingAppStripeCreateCheckoutSessionConsentCollection struct { // Promotions Enables collection of promotional communication consent. // - // Only available to US merchants. When set to "auto", Checkout determines - // whether to show the option based on the customer's locale. + // Only available to US merchants. When set to "auto", Checkout determines whether + // to show the option based on the customer's locale. Promotions *BillingAppStripeCreateCheckoutSessionConsentCollectionPromotions `json:"promotions,omitempty"` // TermsOfService Requires customers to accept terms of service before payment. @@ -1668,11 +1685,13 @@ type BillingAppStripeCreateCheckoutSessionRedirectOnCompletion string // BillingAppStripeCreateCheckoutSessionRequestOptions Configuration options for creating a Stripe Checkout Session. // -// Based on Stripe's [Checkout Session API parameters](https://docs.stripe.com/api/checkout/sessions/create). +// Based on Stripe's +// [Checkout Session API parameters](https://docs.stripe.com/api/checkout/sessions/create). type BillingAppStripeCreateCheckoutSessionRequestOptions struct { // BillingAddressCollection Whether to collect the customer's billing address. // - // Defaults to auto, which only collects the address when necessary for tax calculation. + // Defaults to auto, which only collects the address when necessary for tax + // calculation. BillingAddressCollection *BillingAppStripeCreateCheckoutSessionBillingAddressCollection `json:"billing_address_collection,omitempty"` // CancelUrl URL to redirect customers who cancel the checkout session. @@ -1721,19 +1740,20 @@ type BillingAppStripeCreateCheckoutSessionRequestOptions struct { // RedirectOnCompletion Redirect behavior for embedded checkout sessions. // - // Controls when to redirect users after completion. - // See: https://docs.stripe.com/payments/checkout/custom-success-page?payment-ui=embedded-form + // Controls when to redirect users after completion. See: + // https://docs.stripe.com/payments/checkout/custom-success-page?payment-ui=embedded-form RedirectOnCompletion *BillingAppStripeCreateCheckoutSessionRedirectOnCompletion `json:"redirect_on_completion,omitempty"` // ReturnUrl Return URL for embedded checkout sessions after payment authentication. // - // Required if ui_mode is "embedded" and redirect-based payment methods are enabled. + // Required if ui_mode is "embedded" and redirect-based payment methods are + // enabled. ReturnUrl *string `json:"return_url,omitempty"` // SuccessUrl Success URL to redirect customers after completing payment or setup. // - // Not allowed when ui_mode is "embedded". - // See: https://docs.stripe.com/payments/checkout/custom-success-page + // Not allowed when ui_mode is "embedded". See: + // https://docs.stripe.com/payments/checkout/custom-success-page SuccessUrl *string `json:"success_url,omitempty"` // TaxIdCollection Configuration for collecting tax IDs during checkout. @@ -1741,15 +1761,15 @@ type BillingAppStripeCreateCheckoutSessionRequestOptions struct { // UiMode The UI mode for the checkout session. // - // "hosted" displays a Stripe-hosted page. "embedded" integrates directly into your app. - // Defaults to "hosted". + // "hosted" displays a Stripe-hosted page. "embedded" integrates directly into your + // app. Defaults to "hosted". UiMode *BillingAppStripeCheckoutSessionUIMode `json:"ui_mode,omitempty"` } // BillingAppStripeCreateCheckoutSessionResult Result of creating a Stripe Checkout Session. // -// Contains all the information needed to redirect customers to the checkout -// or initialize an embedded checkout flow. +// Contains all the information needed to redirect customers to the checkout or +// initialize an embedded checkout flow. type BillingAppStripeCreateCheckoutSessionResult struct { // CancelUrl The cancel URL where customers are redirected if they cancel. CancelUrl *string `json:"cancel_url,omitempty"` @@ -1761,8 +1781,8 @@ type BillingAppStripeCreateCheckoutSessionResult struct { // ClientSecret Client secret for initializing Stripe.js on the client side. // - // Required for embedded checkout sessions. - // See: https://docs.stripe.com/payments/checkout/custom-success-page + // Required for embedded checkout sessions. See: + // https://docs.stripe.com/payments/checkout/custom-success-page ClientSecret *string `json:"client_secret,omitempty"` // CreatedAt Timestamp when the checkout session was created. @@ -1799,7 +1819,8 @@ type BillingAppStripeCreateCheckoutSessionResult struct { // Status The status of the checkout session. // - // See: https://docs.stripe.com/api/checkout/sessions/object#checkout_session_object-status + // See: + // https://docs.stripe.com/api/checkout/sessions/object#checkout_session_object-status Status *string `json:"status,omitempty"` // StripeCustomerId The Stripe customer ID. @@ -1830,59 +1851,71 @@ type BillingAppStripeCreateCheckoutSessionTaxIdCollectionRequired string // BillingAppStripeCreateCustomerPortalSessionOptions Request to create a Stripe Customer Portal Session. type BillingAppStripeCreateCustomerPortalSessionOptions struct { - // ConfigurationId The ID of an existing [Stripe configuration](https://docs.stripe.com/api/customer_portal/configurations) to use for this session, - // describing its functionality and features. - // If not specified, the session uses the default configuration. + // ConfigurationId The ID of an existing + // [Stripe configuration](https://docs.stripe.com/api/customer_portal/configurations) + // to use for this session, describing its functionality and features. If not + // specified, the session uses the default configuration. ConfigurationId *string `json:"configuration_id,omitempty"` - // Locale The IETF [language tag](https://docs.stripe.com/api/customer_portal/sessions/create#create_portal_session-locale) of the locale customer portal is displayed in. - // If blank or `auto`, the customer's preferred_locales or browser's locale is used. + // Locale The IETF + // [language tag](https://docs.stripe.com/api/customer_portal/sessions/create#create_portal_session-locale) + // of the locale customer portal is displayed in. If blank or `auto`, the + // customer's preferred_locales or browser's locale is used. Locale *string `json:"locale,omitempty"` - // ReturnUrl The [URL to redirect](https://docs.stripe.com/api/customer_portal/sessions/create#create_portal_session-return_url) the customer to after they have completed - // their requested actions. + // ReturnUrl The + // [URL to redirect](https://docs.stripe.com/api/customer_portal/sessions/create#create_portal_session-return_url) + // the customer to after they have completed their requested actions. ReturnUrl *string `json:"return_url,omitempty"` } -// BillingAppStripeCreateCustomerPortalSessionResult Result of creating a [Stripe Customer Portal Session](https://docs.stripe.com/api/customer_portal/sessions/object). +// BillingAppStripeCreateCustomerPortalSessionResult Result of creating a +// [Stripe Customer Portal Session](https://docs.stripe.com/api/customer_portal/sessions/object). // -// Contains all the information needed to redirect the customer to the Stripe Customer Portal. +// Contains all the information needed to redirect the customer to the Stripe +// Customer Portal. type BillingAppStripeCreateCustomerPortalSessionResult struct { // ConfigurationId Configuration used to customize the customer portal. // - // See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-configuration + // See: + // https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-configuration ConfigurationId string `json:"configuration_id"` // CreatedAt Created at. // - // See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-created + // See: + // https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-created CreatedAt DateTime `json:"created_at"` // Id The ID of the customer portal session. // - // See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-id + // See: + // https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-id Id string `json:"id"` // Livemode Livemode. // - // See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-livemode + // See: + // https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-livemode Livemode bool `json:"livemode"` // Locale The IETF language tag of the locale customer portal is displayed in. // - // See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-locale + // See: + // https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-locale Locale string `json:"locale"` // ReturnUrl Return URL. // - // See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-return_url + // See: + // https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-return_url ReturnUrl string `json:"return_url"` // StripeCustomerId The ID of the stripe customer. StripeCustomerId string `json:"stripe_customer_id"` - // Url The URL to redirect the customer to after they have completed - // their requested actions. + // Url The URL to redirect the customer to after they have completed their requested + // actions. Url string `json:"url"` } @@ -1897,6 +1930,7 @@ type BillingCharge struct { // BillingChargeStatus Lifecycle status of a charge. // // Values: +// // - `created`: The charge has been created but is not active yet. // - `active`: The charge is active. // - `final`: The charge is fully finalized and no further changes are expected. @@ -1919,6 +1953,7 @@ type BillingChargeTotals struct { // BillingChargesExpand Expands for customer charges. // // Values: +// // - `real_time_usage`: The charge's real-time usage. type BillingChargesExpand string @@ -1927,8 +1962,9 @@ type BillingCostBasis struct { // CreatedAt An ISO-8601 timestamp representation of entity creation date. CreatedAt DateTime `json:"created_at"` - // EffectiveFrom An ISO-8601 timestamp representation of the date from which the cost basis is effective. - // If not provided, it will be effective immediately and will set to `now` by the system. + // EffectiveFrom An ISO-8601 timestamp representation of the date from which the cost basis is + // effective. If not provided, it will be effective immediately and will be set to + // `now` by the system. EffectiveFrom *DateTime `json:"effective_from,omitempty"` // FiatCode The fiat currency code for the cost basis. @@ -1939,9 +1975,11 @@ type BillingCostBasis struct { Rate Numeric `json:"rate"` } -// BillingCreditAdjustment A credit adjustment can be used to make manual adjustments to a customer's credit balance. +// BillingCreditAdjustment A credit adjustment can be used to make manual adjustments to a customer's +// credit balance. // // Supported use-cases: +// // - Usage correction type BillingCreditAdjustment struct { // Description Optional description of the resource. @@ -1980,13 +2018,14 @@ type BillingCreditBalances struct { // // - `none`: No funding workflow applies, for example promotional grants // - `invoice`: The grant is funded by an in-system invoice flow -// - `external`: The grant is funded outside the system (e.g., wire transfer, external invoice, or manual reconciliation) +// - `external`: The grant is funded outside the system (e.g., wire transfer, +// external invoice, or manual reconciliation) type BillingCreditFundingMethod string // BillingCreditGrant A credit grant allocates credits to a customer. // -// Credits are drawn down against charges according to the -// settlement mode configured on the rate card. +// Credits are drawn down against charges according to the settlement mode +// configured on the rate card. type BillingCreditGrant struct { // Amount Granted credit amount. Amount Numeric `json:"amount"` @@ -2007,8 +2046,8 @@ type BillingCreditGrant struct { // Filters Filters for the credit grant. Filters *struct { - // Features Limit the credit grant to specific features. - // If no features are specified, the credit grant can be used for any feature. + // Features Limit the credit grant to specific features. If no features are specified, the + // credit grant can be used for any feature. Features *[]ResourceKey `json:"features,omitempty"` } `json:"filters,omitempty"` @@ -2016,8 +2055,7 @@ type BillingCreditGrant struct { FundingMethod BillingCreditFundingMethod `json:"funding_method"` Id ULID `json:"id"` - // Invoice Invoice references for the grant. - // Available when `funding_method` is `invoice`. + // Invoice Invoice references for the grant. Available when `funding_method` is `invoice`. Invoice *struct { // Id Identifier of the invoice associated with the grant. Id *ULID `json:"id,omitempty"` @@ -2039,15 +2077,13 @@ type BillingCreditGrant struct { // Between 1 and 256 characters. Name string `json:"name"` - // Priority Draw-down priority of the grant. - // Lower values have higher priority. + // Priority Draw-down priority of the grant. Lower values have higher priority. Priority *int16 `json:"priority,omitempty"` - // Purchase Purchase and payment terms of the grant. - // Present when a funding workflow applies (funding_method is not `none`). + // Purchase Purchase and payment terms of the grant. Present when a funding workflow applies + // (funding_method is not `none`). Purchase *struct { - // Amount The purchase amount. - // Calculated from `per_unit_cost_basis` and credit `amount`. + // Amount The purchase amount. Calculated from `per_unit_cost_basis` and credit `amount`. Amount Numeric `json:"amount"` // AvailabilityPolicy Controls when credits become available for consumption. @@ -2060,9 +2096,8 @@ type BillingCreditGrant struct { // PerUnitCostBasis Cost basis per credit unit used to calculate the purchase amount. // - // If `per_unit_cost_basis` is 0.50 and credit amount is $100.00, - // the total charge is $50.00. - // The value must be greater than 0. If the cost basis is 0, use + // If `per_unit_cost_basis` is 0.50 and credit amount is $100.00, the total charge + // is $50.00. The value must be greater than 0. If the cost basis is 0, use // `funding_method=none` instead. // // Defaults to 1.0. @@ -2077,8 +2112,10 @@ type BillingCreditGrant struct { // TaxConfig Tax configuration for the grant. // - // For `invoice` and `external` funding methods, tax configuration should be provided to ensure correct revenue recognition. - // When not provided, the default credit grant tax code is applied, if that's not set the global default taxcode is used. + // For `invoice` and `external` funding methods, tax configuration should be + // provided to ensure correct revenue recognition. When not provided, the default + // credit grant tax code is applied, if that's not set the global default taxcode + // is used. TaxConfig *BillingCreditGrantTaxConfig `json:"tax_config,omitempty"` // UpdatedAt An ISO-8601 timestamp representation of entity last update date. @@ -2090,9 +2127,13 @@ type BillingCreditGrant struct { // BillingCreditGrantStatus Credit grant lifecycle status. // -// - `pending`: The credit block has been created but is not yet valid. (`effective_at` is in the future or availability_policy is not met) -// - `active`: The credit block is currently valid and eligible for consumption. (`effective_at` is in the past, `expires_at` is in the future and availability_policy is met) -// - `expired`: The credit block expired with remaining unused balance, `expires_at` time has passed. +// - `pending`: The credit block has been created but is not yet valid. +// (`effective_at` is in the future or availability_policy is not met) +// - `active`: The credit block is currently valid and eligible for consumption. +// (`effective_at` is in the past, `expires_at` is in the future and +// availability_policy is met) +// - `expired`: The credit block expired with remaining unused balance, +// `expires_at` time has passed. // - `voided`: The credit block was voided. Remaining balance is forfeited. type BillingCreditGrantStatus string @@ -2115,12 +2156,13 @@ type BillingCreditGrantTaxConfig struct { // - `settled`: Payment has been settled. type BillingCreditPurchasePaymentSettlementStatus string -// BillingCreditTransaction A credit transaction represents a single credit movement on the customer's balance. +// BillingCreditTransaction A credit transaction represents a single credit movement on the customer's +// balance. // // Credit transactions are immutable. type BillingCreditTransaction struct { - // Amount Signed amount of the credit movement. - // Positive values add balance, negative values reduce balance. + // Amount Signed amount of the credit movement. Positive values add balance, negative + // values reduce balance. Amount Numeric `json:"amount"` // AvailableBalance The available balance before and after the transaction. @@ -2172,18 +2214,19 @@ type BillingCurrency struct { union json.RawMessage } -// BillingCurrencyCode Three-letter [ISO4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. -// Custom three-letter currency codes are also supported for convenience. +// BillingCurrencyCode Three-letter [ISO4217](https://www.iso.org/iso-4217-currency-codes.html) +// currency code. Custom three-letter currency codes are also supported for +// convenience. type BillingCurrencyCode = CurrencyCode -// BillingCurrencyCodeCustom Custom currency code. -// It should be a unique code but not conflicting with any existing fiat currency codes. +// BillingCurrencyCodeCustom Custom currency code. It should be a unique code but not conflicting with any +// existing fiat currency codes. type BillingCurrencyCodeCustom = string // BillingCurrencyCustom Describes custom currency. type BillingCurrencyCustom struct { - // Code Custom currency code. - // It should be a unique code but not conflicting with any existing fiat currency codes. + // Code Custom currency code. It should be a unique code but not conflicting with any + // existing fiat currency codes. Code BillingCurrencyCodeCustom `json:"code"` // CreatedAt An ISO-8601 timestamp representation of the custom currency creation date. @@ -2193,10 +2236,12 @@ type BillingCurrencyCustom struct { Description *string `json:"description,omitempty"` Id ULID `json:"id"` - // Name The name of the currency. It should be a human-readable string that represents the name of the currency, such as "US Dollar" or "Euro". + // Name The name of the currency. It should be a human-readable string that represents + // the name of the currency, such as "US Dollar" or "Euro". Name string `json:"name"` - // Symbol The symbol of the currency. It should be a string that represents the symbol of the currency, such as "$" for US Dollar or "€" for Euro. + // Symbol The symbol of the currency. It should be a string that represents the symbol of + // the currency, such as "$" for US Dollar or "€" for Euro. Symbol *string `json:"symbol,omitempty"` // Type The type of the currency. @@ -2214,10 +2259,12 @@ type BillingCurrencyFiat struct { Description *string `json:"description,omitempty"` Id ULID `json:"id"` - // Name The name of the currency. It should be a human-readable string that represents the name of the currency, such as "US Dollar" or "Euro". + // Name The name of the currency. It should be a human-readable string that represents + // the name of the currency, such as "US Dollar" or "Euro". Name string `json:"name"` - // Symbol The symbol of the currency. It should be a string that represents the symbol of the currency, such as "$" for US Dollar or "€" for Euro. + // Symbol The symbol of the currency. It should be a string that represents the symbol of + // the currency, such as "$" for US Dollar or "€" for Euro. Symbol *string `json:"symbol,omitempty"` // Type The type of the currency. @@ -2227,21 +2274,20 @@ type BillingCurrencyFiat struct { // BillingCurrencyFiatType The type of the currency. type BillingCurrencyFiatType string -// BillingCurrencyType Currency type for custom currencies. -// It should be a unique code but not conflicting with any existing standard currency codes. +// BillingCurrencyType Currency type for custom currencies. It should be a unique code but not +// conflicting with any existing standard currency codes. type BillingCurrencyType string -// BillingCustomer Customers can be individuals or organizations that can subscribe to plans and have access to features. +// BillingCustomer Customers can be individuals or organizations that can subscribe to plans and +// have access to features. type BillingCustomer struct { - // BillingAddress The billing address of the customer. - // Used for tax and invoicing. + // BillingAddress The billing address of the customer. Used for tax and invoicing. BillingAddress *BillingAddress `json:"billing_address,omitempty"` // CreatedAt An ISO-8601 timestamp representation of entity creation date. CreatedAt DateTime `json:"created_at"` - // Currency Currency of the customer. - // Used for billing, tax and invoicing. + // Currency Currency of the customer. Used for billing, tax and invoicing. Currency *CurrencyCode `json:"currency,omitempty"` // DeletedAt An ISO-8601 timestamp representation of entity deletion date. @@ -2253,7 +2299,8 @@ type BillingCustomer struct { Description *string `json:"description,omitempty"` Id ULID `json:"id"` - // Key ExternalResourceKey is a unique string that is used to identify a resource in an external system. + // Key ExternalResourceKey is a unique string that is used to identify a resource in an + // external system. Key ExternalResourceKey `json:"key"` // Labels Labels store metadata of an entity that can be used for filtering an entity list or for searching across entity types. @@ -2296,47 +2343,46 @@ type BillingCustomerReference struct { // BillingCustomerStripeCreateCheckoutSessionRequest Request to create a Stripe Checkout Session for the customer. // // Checkout Sessions are used to collect payment method information from customers -// in a secure, Stripe-hosted interface. This integration uses setup mode to collect -// payment methods that can be charged later for subscription billing. +// in a secure, Stripe-hosted interface. This integration uses setup mode to +// collect payment methods that can be charged later for subscription billing. type BillingCustomerStripeCreateCheckoutSessionRequest struct { // StripeOptions Options for configuring the Stripe Checkout Session. // - // These options are passed directly to Stripe's [checkout session creation API](https://docs.stripe.com/api/checkout/sessions/create). + // These options are passed directly to Stripe's + // [checkout session creation API](https://docs.stripe.com/api/checkout/sessions/create). StripeOptions BillingAppStripeCreateCheckoutSessionRequestOptions `json:"stripe_options"` } // BillingCustomerStripeCreateCustomerPortalSessionRequest Request to create a Stripe Customer Portal Session for the customer. // -// Useful to redirect the customer to the Stripe Customer Portal to manage their payment methods, -// change their billing address and access their invoice history. -// Only returns URL if the customer billing profile is linked to a stripe app and customer. +// Useful to redirect the customer to the Stripe Customer Portal to manage their +// payment methods, change their billing address and access their invoice history. +// Only returns URL if the customer billing profile is linked to a stripe app and +// customer. type BillingCustomerStripeCreateCustomerPortalSessionRequest struct { // StripeOptions Options for configuring the Stripe Customer Portal Session. StripeOptions BillingAppStripeCreateCustomerPortalSessionOptions `json:"stripe_options"` } -// BillingCustomerUsageAttribution Mapping to attribute metered usage to the customer. -// One customer can have zero or more subjects, -// but one subject can only belong to one customer. +// BillingCustomerUsageAttribution Mapping to attribute metered usage to the customer. One customer can have zero +// or more subjects, but one subject can only belong to one customer. type BillingCustomerUsageAttribution struct { - // SubjectKeys The subjects that are attributed to the customer. - // Can be empty when no usage event subjects are associated with the customer. + // SubjectKeys The subjects that are attributed to the customer. Can be empty when no usage + // event subjects are associated with the customer. SubjectKeys []UsageAttributionSubjectKey `json:"subject_keys"` } // BillingEntitlementAccessResult Entitlement access result. type BillingEntitlementAccessResult struct { - // Config Only available for static entitlements. - // Config is the JSON parsable configuration of the entitlement. - // Useful to describe per customer configuration. + // Config Only available for static entitlements. Config is the JSON parsable + // configuration of the entitlement. Useful to describe per customer configuration. Config *string `json:"config,omitempty"` // FeatureKey The feature key of the entitlement. FeatureKey ResourceKey `json:"feature_key"` - // HasAccess Whether the customer has access to the feature. - // Always true for `boolean` and `static` entitlements. - // Depends on balance for `metered` entitlements. + // HasAccess Whether the customer has access to the feature. Always true for `boolean` and + // `static` entitlements. Depends on balance for `metered` entitlements. HasAccess bool `json:"has_access"` // Type The type of the entitlement. @@ -2349,44 +2395,38 @@ type BillingEntitlementType string // BillingFeatureLLMTokenType Token type for LLM cost lookup. type BillingFeatureLLMTokenType string -// BillingFeatureLLMUnitCost LLM cost lookup configuration. -// Each dimension (provider, model, token type) can be specified as either -// a static value or a meter group-by property name (mutually exclusive). +// BillingFeatureLLMUnitCost LLM cost lookup configuration. Each dimension (provider, model, token type) can +// be specified as either a static value or a meter group-by property name +// (mutually exclusive). type BillingFeatureLLMUnitCost struct { - // Model Static model ID value (e.g., "gpt-4", "claude-3-5-sonnet"). - // Use this when the feature tracks a single model. - // Mutually exclusive with `model_property`. + // Model Static model ID value (e.g., "gpt-4", "claude-3-5-sonnet"). Use this when the + // feature tracks a single model. Mutually exclusive with `model_property`. Model *string `json:"model,omitempty"` - // ModelProperty Meter group-by property that holds the model ID. - // Use this when the meter has a group-by dimension for model. - // Mutually exclusive with `model`. + // ModelProperty Meter group-by property that holds the model ID. Use this when the meter has a + // group-by dimension for model. Mutually exclusive with `model`. ModelProperty *string `json:"model_property,omitempty"` - // Pricing Resolved per-token pricing from the LLM cost database. - // Populated in responses when the provider and model can be determined, - // either from static values or from meter group-by filters with exact matches. + // Pricing Resolved per-token pricing from the LLM cost database. Populated in responses + // when the provider and model can be determined, either from static values or from + // meter group-by filters with exact matches. Pricing *BillingFeatureLLMUnitCostPricing `json:"pricing,omitempty"` - // Provider Static LLM provider value (e.g., "openai", "anthropic"). - // Use this when the feature tracks a single provider. - // Mutually exclusive with `provider_property`. + // Provider Static LLM provider value (e.g., "openai", "anthropic"). Use this when the + // feature tracks a single provider. Mutually exclusive with `provider_property`. Provider *string `json:"provider,omitempty"` - // ProviderProperty Meter group-by property that holds the LLM provider. - // Use this when the meter has a group-by dimension for provider. - // Mutually exclusive with `provider`. + // ProviderProperty Meter group-by property that holds the LLM provider. Use this when the meter has + // a group-by dimension for provider. Mutually exclusive with `provider`. ProviderProperty *string `json:"provider_property,omitempty"` - // TokenType Static token type value. - // Use this when the feature tracks a single token type (e.g., only input tokens). - // `request` is an alias for `input`, `response` is an alias for `output`. - // Mutually exclusive with `token_type_property`. + // TokenType Static token type value. Use this when the feature tracks a single token type + // (e.g., only input tokens). `request` is an alias for `input`, `response` is an + // alias for `output`. Mutually exclusive with `token_type_property`. TokenType *BillingFeatureLLMTokenType `json:"token_type,omitempty"` - // TokenTypeProperty Meter group-by property that holds the token type. - // Use this when the meter has a group-by dimension for token type. - // Mutually exclusive with `token_type`. + // TokenTypeProperty Meter group-by property that holds the token type. Use this when the meter has a + // group-by dimension for token type. Mutually exclusive with `token_type`. TokenTypeProperty *string `json:"token_type_property,omitempty"` // Type The type discriminator for LLM unit cost. @@ -2426,15 +2466,16 @@ type BillingFeatureManualUnitCost struct { // BillingFeatureManualUnitCostType The type discriminator for manual unit cost. type BillingFeatureManualUnitCostType string -// BillingFeatureUnitCost Per-unit cost configuration for a feature. -// Either a fixed manual amount or a dynamic LLM cost lookup. +// BillingFeatureUnitCost Per-unit cost configuration for a feature. Either a fixed manual amount or a +// dynamic LLM cost lookup. type BillingFeatureUnitCost struct { union json.RawMessage } // BillingFlatFeeCharge A flat fee charge for a customer. type BillingFlatFeeCharge struct { - // AdvanceAfter The earliest time when the charge should be advanced again by background processing. + // AdvanceAfter The earliest time when the charge should be advanced again by background + // processing. AdvanceAfter *DateTime `json:"advance_after,omitempty"` // AmountAfterProration The amount after proration of the charge. @@ -2504,7 +2545,8 @@ type BillingFlatFeeCharge struct { // Status The lifecycle status of the charge. Status BillingChargeStatus `json:"status"` - // Subscription The subscription that originated the charge, when the charge was created from a subscription item. + // Subscription The subscription that originated the charge, when the charge was created from a + // subscription item. Subscription *BillingSubscriptionReference `json:"subscription,omitempty"` // TaxConfig Tax configuration of the charge. @@ -2525,7 +2567,8 @@ type BillingFlatFeeChargeType string // BillingFlatFeeDiscounts Discounts applicable to flat fee charges. // -// This is the same as `ProductCatalog.Discounts` but without the `usage` field, which is not applicable to flat fee charges. +// This is the same as `ProductCatalog.Discounts` but without the `usage` field, +// which is not applicable to flat fee charges. type BillingFlatFeeDiscounts struct { // Percentage Percentage discount applied to the price (0–100). Percentage *float32 `json:"percentage,omitempty"` @@ -2545,8 +2588,8 @@ type BillingParty struct { // Name Legal name or representation of the party. Name *string `json:"name,omitempty"` - // TaxId The entity's legal identification used for tax purposes. They may have - // other numbers, but we're only interested in those valid for tax purposes. + // TaxId The entity's legal identification used for tax purposes. They may have other + // numbers, but we're only interested in those valid for tax purposes. TaxId *BillingPartyTaxIdentity `json:"tax_id,omitempty"` } @@ -2556,7 +2599,8 @@ type BillingPartyAddresses struct { BillingAddress Address `json:"billing_address"` } -// BillingPartyTaxIdentity Identity stores the details required to identify an entity for tax purposes in a specific country. +// BillingPartyTaxIdentity Identity stores the details required to identify an entity for tax purposes in a +// specific country. type BillingPartyTaxIdentity struct { // Code Normalized tax identification code shown on the original identity document. Code *BillingTaxIdentificationCode `json:"code,omitempty"` @@ -2581,17 +2625,18 @@ type BillingPlan struct { // Maximum 1024 characters. Description *string `json:"description,omitempty"` - // EffectiveFrom The date and time when the plan becomes `active`. - // When not specified, the plan is in `draft` status. + // EffectiveFrom The date and time when the plan becomes `active`. When not specified, the plan + // is in `draft` status. EffectiveFrom *DateTime `json:"effective_from,omitempty"` - // EffectiveTo A scheduled date and time when the plan becomes `archived`. - // When not specified, the plan is in `active` status indefinitely. + // EffectiveTo A scheduled date and time when the plan becomes `archived`. When not specified, + // the plan is in `active` status indefinitely. EffectiveTo *DateTime `json:"effective_to,omitempty"` Id ULID `json:"id"` - // Key A key is a semi-unique string that is used to identify the plan. - // It is used to reference the latest `active` version of the plan and is unique with the version number. + // Key A key is a semi-unique string that is used to identify the plan. It is used to + // reference the latest `active` version of the plan and is unique with the version + // number. Key ResourceKey `json:"key"` // Labels Labels store metadata of an entity that can be used for filtering an entity list or for searching across entity types. @@ -2604,41 +2649,44 @@ type BillingPlan struct { // Between 1 and 256 characters. Name string `json:"name"` - // Phases The plan phases define the pricing ramp for a subscription. - // A phase switch occurs only at the end of a billing period. - // At least one phase is required. + // Phases The plan phases define the pricing ramp for a subscription. A phase switch + // occurs only at the end of a billing period. At least one phase is required. Phases []BillingPlanPhase `json:"phases"` // ProRatingEnabled Whether pro-rating is enabled for this plan. ProRatingEnabled *bool `json:"pro_rating_enabled,omitempty"` - // Status The status of the plan. - // Computed based on the effective start and end dates: - // - draft = no effectiveFrom - // - active = effectiveFrom <= now < effectiveTo - // - archived / inactive = effectiveTo <= now - // - scheduled = now < effectiveFrom < effectiveTo + // Status The status of the plan. Computed based on the effective start and end dates: + // + // - `draft`: `effective_from` is not set. + // - `scheduled`: `now < effective_from`. + // - `active`: `effective_from <= now` and (`effective_to` is not set or + // `now < effective_to`). + // - `archived`: `effective_to <= now`. Status BillingPlanStatus `json:"status"` // UpdatedAt An ISO-8601 timestamp representation of entity last update date. UpdatedAt DateTime `json:"updated_at"` - // ValidationErrors List of validation errors in `draft` state that prevent the plan from being published. + // ValidationErrors List of validation errors in `draft` state that prevent the plan from being + // published. ValidationErrors *[]ProductCatalogValidationError `json:"validation_errors,omitempty"` - // Version Plans are versioned to allow you to make changes without affecting running subscriptions. + // Version Plans are versioned to allow you to make changes without affecting running + // subscriptions. Version int `json:"version"` } -// BillingPlanPhase The plan phase or pricing ramp allows changing a plan's rate cards over time as a subscription progresses. +// BillingPlanPhase The plan phase or pricing ramp allows changing a plan's rate cards over time as +// a subscription progresses. type BillingPlanPhase struct { // Description Optional description of the resource. // // Maximum 1024 characters. Description *string `json:"description,omitempty"` - // Duration The duration of the phase. - // When not specified, the phase runs indefinitely. Only the last phase may omit the duration. + // Duration The duration of the phase. When not specified, the phase runs indefinitely. Only + // the last phase may omit the duration. Duration *ISO8601Duration `json:"duration,omitempty"` // Key A key is a unique string that is used to identify a resource. @@ -2659,6 +2707,7 @@ type BillingPlanPhase struct { } // BillingPlanStatus The status of a plan. +// // - `draft`: The plan has not yet been published and can be edited. // - `active`: The plan is published and can be used in subscriptions. // - `archived`: The plan is no longer available for use. @@ -2693,14 +2742,13 @@ type BillingPriceFreeType string // BillingPriceGraduated Graduated tiered price. // -// Each tier's rate applies only to the usage within that tier. -// Pricing can change as cumulative usage crosses tier boundaries. +// Each tier's rate applies only to the usage within that tier. Pricing can change +// as cumulative usage crosses tier boundaries. // -// When UnitConfig is present on the rate card, tier boundaries (up_to_amount) -// are expressed in converted billing units. +// When UnitConfig is present on the rate card, tier boundaries (up_to_amount) are +// expressed in converted billing units. type BillingPriceGraduated struct { - // Tiers The tiers of the graduated price. - // At least one tier is required. + // Tiers The tiers of the graduated price. At least one tier is required. Tiers []BillingPriceTier `json:"tiers"` // Type The type of the price. @@ -2715,28 +2763,25 @@ type BillingPricePaymentTerm string // BillingPriceTier A price tier used in graduated and volume pricing. // -// At least one price component (flat_price or unit_price) must be set. -// When UnitConfig is present on the rate card, up_to_amount is expressed -// in converted billing units. +// At least one price component (flat_price or unit_price) must be set. When +// UnitConfig is present on the rate card, up_to_amount is expressed in converted +// billing units. type BillingPriceTier struct { - // FlatPrice The flat price component of the tier. - // Charged once when the tier is entered. + // FlatPrice The flat price component of the tier. Charged once when the tier is entered. FlatPrice *BillingPriceFlat `json:"flat_price,omitempty"` - // UnitPrice The unit price component of the tier. - // Charged per billing unit within the tier. + // UnitPrice The unit price component of the tier. Charged per billing unit within the tier. UnitPrice *BillingPriceUnit `json:"unit_price,omitempty"` - // UpToAmount Up to and including this quantity will be contained in the tier. - // If undefined, the tier is open-ended (the last tier). + // UpToAmount Up to and including this quantity will be contained in the tier. If undefined, + // the tier is open-ended (the last tier). UpToAmount *Numeric `json:"up_to_amount,omitempty"` } // BillingPriceUnit Unit price. // -// Charges a fixed rate per billing unit. -// When UnitConfig is present on the rate card, billing units are the -// converted quantities (e.g. GB instead of bytes). +// Charges a fixed rate per billing unit. When UnitConfig is present on the rate +// card, billing units are the converted quantities (e.g. GB instead of bytes). type BillingPriceUnit struct { // Amount The amount of the unit price. Amount Numeric `json:"amount"` @@ -2750,14 +2795,13 @@ type BillingPriceUnitType string // BillingPriceVolume Volume tiered price. // -// The maximum quantity within a period determines the per-unit price for -// all units in that period. +// The maximum quantity within a period determines the per-unit price for all units +// in that period. // -// When UnitConfig is present on the rate card, tier boundaries (up_to_amount) -// are expressed in converted billing units. +// When UnitConfig is present on the rate card, tier boundaries (up_to_amount) are +// expressed in converted billing units. type BillingPriceVolume struct { - // Tiers The tiers of the volume price. - // At least one tier is required. + // Tiers The tiers of the volume price. At least one tier is required. Tiers []BillingPriceTier `json:"tiers"` // Type The type of the price. @@ -2767,7 +2811,8 @@ type BillingPriceVolume struct { // BillingPriceVolumeType The type of the price. type BillingPriceVolumeType string -// BillingProfile Billing profiles contain the settings for billing and controls invoice generation. +// BillingProfile Billing profiles contain the settings for billing and controls invoice +// generation. type BillingProfile struct { // Apps The applications used by this billing profile. Apps BillingProfileAppReferences `json:"apps"` @@ -2797,7 +2842,8 @@ type BillingProfile struct { // Between 1 and 256 characters. Name string `json:"name"` - // Supplier The name and contact information for the supplier this billing profile represents + // Supplier The name and contact information for the supplier this billing profile + // represents Supplier BillingParty `json:"supplier"` // UpdatedAt An ISO-8601 timestamp representation of entity last update date. @@ -2835,12 +2881,12 @@ type BillingProfileReference struct { // BillingRateCard A rate card defines the pricing and entitlement of a feature or service. type BillingRateCard struct { - // BillingCadence The billing cadence of the rate card. - // When null, the charge is one-time (non-recurring). Only valid for flat prices. + // BillingCadence The billing cadence of the rate card. When null, the charge is one-time + // (non-recurring). Only valid for flat prices. BillingCadence *ISO8601Duration `json:"billing_cadence,omitempty"` - // Commitments Spend commitments for this rate card. - // Only applicable to usage-based prices (unit, graduated, volume). + // Commitments Spend commitments for this rate card. Only applicable to usage-based prices + // (unit, graduated, volume). Commitments *BillingSpendCommitments `json:"commitments,omitempty"` // Description Optional description of the resource. @@ -2867,8 +2913,8 @@ type BillingRateCard struct { // Between 1 and 256 characters. Name string `json:"name"` - // PaymentTerm The payment term of the rate card. - // In advance payment term can only be used for flat prices. + // PaymentTerm The payment term of the rate card. In advance payment term can only be used for + // flat prices. PaymentTerm *BillingPricePaymentTerm `json:"payment_term,omitempty"` // Price The price of the rate card. @@ -2883,9 +2929,9 @@ type BillingRateCardDiscounts struct { // Percentage Percentage discount applied to the price (0–100). Percentage *float32 `json:"percentage,omitempty"` - // Usage Number of usage units granted free before billing starts. - // Only applies to usage-based lines (not flat fees). Usage is treated as zero - // until this amount is exhausted. + // Usage Number of usage units granted free before billing starts. Only applies to + // usage-based lines (not flat fees). Usage is treated as zero until this amount is + // exhausted. Usage *Numeric `json:"usage,omitempty"` } @@ -2898,15 +2944,18 @@ type BillingRateCardProrationConfiguration struct { // BillingRateCardProrationMode The proration mode of the rate card. // // Values: +// // - `no_proration`: No proration. -// - `prorate_prices`: Prorate the price based on the time remaining in the billing period. +// - `prorate_prices`: Prorate the price based on the time remaining in the billing +// period. type BillingRateCardProrationMode string // BillingRateCardTaxConfig The tax config of the rate card. type BillingRateCardTaxConfig struct { // Behavior Tax behavior. // - // This enum is used to specify whether tax is included in the price or excluded from the price. + // This enum is used to specify whether tax is included in the price or excluded + // from the price. Behavior *BillingTaxBehavior `json:"behavior,omitempty"` // Code TaxCode reference. @@ -2916,12 +2965,14 @@ type BillingRateCardTaxConfig struct { // BillingSettlementMode Settlement mode for billing. // // Values: -// - `credit_then_invoice`: Credits are applied first, then any remainder is invoiced. +// +// - `credit_then_invoice`: Credits are applied first, then any remainder is +// invoiced. // - `credit_only`: Usage is settled exclusively against credits. type BillingSettlementMode string -// BillingSpendCommitments Spend commitments for a rate card. -// The customer is committed to spend at least the minimum amount and at most the maximum amount. +// BillingSpendCommitments Spend commitments for a rate card. The customer is committed to spend at least +// the minimum amount and at most the maximum amount. type BillingSpendCommitments struct { // MaximumAmount The customer is limited to spend at most the amount. MaximumAmount *Numeric `json:"maximum_amount,omitempty"` @@ -2932,9 +2983,10 @@ type BillingSpendCommitments struct { // BillingSubscription Subscription. type BillingSubscription struct { - // BillingAnchor A billing anchor is the fixed point in time that determines the subscription's recurring billing cycle. - // It affects when charges occur and how prorations are calculated. - // Common anchors: + // BillingAnchor A billing anchor is the fixed point in time that determines the subscription's + // recurring billing cycle. It affects when charges occur and how prorations are + // calculated. Common anchors: + // // - Calendar month (1st of each month): `2025-01-01T00:00:00Z` // - Subscription anniversary (day customer signed up) // - Custom date (customer-specified day) @@ -2955,8 +3007,7 @@ type BillingSubscription struct { // Keys must be of length 1-63 characters, and cannot start with "kong", "konnect", "mesh", "kic", or "_". Labels *Labels `json:"labels,omitempty"` - // PlanId The plan ID of the subscription. - // Set if subscription is created from a plan. + // PlanId The plan ID of the subscription. Set if subscription is created from a plan. PlanId *ULID `json:"plan_id,omitempty"` // Status The status of the subscription. @@ -2974,28 +3025,30 @@ type BillingSubscriptionCancel struct { // BillingSubscriptionChange Request for changing a subscription. type BillingSubscriptionChange struct { - // BillingAnchor A billing anchor is the fixed point in time that determines the subscription's recurring billing cycle. - // It affects when charges occur and how prorations are calculated. - // Common anchors: + // BillingAnchor A billing anchor is the fixed point in time that determines the subscription's + // recurring billing cycle. It affects when charges occur and how prorations are + // calculated. Common anchors: + // // - Calendar month (1st of each month): `2025-01-01T00:00:00Z` // - Subscription anniversary (day customer signed up) // - Custom date (customer-specified day) // - // If not provided, the subscription will be created with the subscription's creation time as the billing anchor. + // If not provided, the subscription will be created with the subscription's + // creation time as the billing anchor. BillingAnchor *DateTime `json:"billing_anchor,omitempty"` // Customer The customer to create the subscription for. Customer struct { // Id The ID of the customer to create the subscription for. // - // Either customer ID or customer key must be provided. - // If both are provided, the ID will be used. + // Either customer ID or customer key must be provided. If both are provided, the + // ID will be used. Id *ULID `json:"id,omitempty"` // Key The key of the customer to create the subscription for. // - // Either customer ID or customer key must be provided. - // If both are provided, the ID will be used. + // Either customer ID or customer key must be provided. If both are provided, the + // ID will be used. Key *ExternalResourceKey `json:"key,omitempty"` } `json:"customer"` @@ -3006,27 +3059,27 @@ type BillingSubscriptionChange struct { // Plan The plan reference of the subscription. Plan struct { - // Id The plan ID of the subscription. - // Set if subscription is created from a plan. + // Id The plan ID of the subscription. Set if subscription is created from a plan. // - // ID or Key of the plan is required if creating a subscription from a plan. - // If both are provided, the ID will be used. + // ID or Key of the plan is required if creating a subscription from a plan. If + // both are provided, the ID will be used. Id *ULID `json:"id,omitempty"` - // Key The plan Key of the subscription, if any. - // Set if subscription is created from a plan. + // Key The plan Key of the subscription, if any. Set if subscription is created from a + // plan. // - // ID or Key of the plan is required if creating a subscription from a plan. - // If both are provided, the ID will be used. + // ID or Key of the plan is required if creating a subscription from a plan. If + // both are provided, the ID will be used. Key *ResourceKey `json:"key,omitempty"` - // Version The plan version of the subscription, if any. - // If not provided, the latest version of the plan will be used. + // Version The plan version of the subscription, if any. If not provided, the latest + // version of the plan will be used. Version *int `json:"version,omitempty"` } `json:"plan"` - // Timing Timing configuration for the change, when the change should take effect. - // For changing a subscription, the accepted values depend on the subscription configuration. + // Timing Timing configuration for the change, when the change should take effect. For + // changing a subscription, the accepted values depend on the subscription + // configuration. Timing BillingSubscriptionEditTiming `json:"timing"` } @@ -3041,28 +3094,30 @@ type BillingSubscriptionChangeResponse struct { // BillingSubscriptionCreate Subscription create request. type BillingSubscriptionCreate struct { - // BillingAnchor A billing anchor is the fixed point in time that determines the subscription's recurring billing cycle. - // It affects when charges occur and how prorations are calculated. - // Common anchors: + // BillingAnchor A billing anchor is the fixed point in time that determines the subscription's + // recurring billing cycle. It affects when charges occur and how prorations are + // calculated. Common anchors: + // // - Calendar month (1st of each month): `2025-01-01T00:00:00Z` // - Subscription anniversary (day customer signed up) // - Custom date (customer-specified day) // - // If not provided, the subscription will be created with the subscription's creation time as the billing anchor. + // If not provided, the subscription will be created with the subscription's + // creation time as the billing anchor. BillingAnchor *DateTime `json:"billing_anchor,omitempty"` // Customer The customer to create the subscription for. Customer struct { // Id The ID of the customer to create the subscription for. // - // Either customer ID or customer key must be provided. - // If both are provided, the ID will be used. + // Either customer ID or customer key must be provided. If both are provided, the + // ID will be used. Id *ULID `json:"id,omitempty"` // Key The key of the customer to create the subscription for. // - // Either customer ID or customer key must be provided. - // If both are provided, the ID will be used. + // Either customer ID or customer key must be provided. If both are provided, the + // ID will be used. Key *ExternalResourceKey `json:"key,omitempty"` } `json:"customer"` @@ -3073,39 +3128,39 @@ type BillingSubscriptionCreate struct { // Plan The plan reference of the subscription. Plan struct { - // Id The plan ID of the subscription. - // Set if subscription is created from a plan. + // Id The plan ID of the subscription. Set if subscription is created from a plan. // - // ID or Key of the plan is required if creating a subscription from a plan. - // If both are provided, the ID will be used. + // ID or Key of the plan is required if creating a subscription from a plan. If + // both are provided, the ID will be used. Id *ULID `json:"id,omitempty"` - // Key The plan Key of the subscription, if any. - // Set if subscription is created from a plan. + // Key The plan Key of the subscription, if any. Set if subscription is created from a + // plan. // - // ID or Key of the plan is required if creating a subscription from a plan. - // If both are provided, the ID will be used. + // ID or Key of the plan is required if creating a subscription from a plan. If + // both are provided, the ID will be used. Key *ResourceKey `json:"key,omitempty"` - // Version The plan version of the subscription, if any. - // If not provided, the latest version of the plan will be used. + // Version The plan version of the subscription, if any. If not provided, the latest + // version of the plan will be used. Version *int `json:"version,omitempty"` } `json:"plan"` } -// BillingSubscriptionEditTiming Subscription edit timing defined when the changes should take effect. -// If the provided configuration is not supported by the subscription, an error will be returned. +// BillingSubscriptionEditTiming Subscription edit timing defined when the changes should take effect. If the +// provided configuration is not supported by the subscription, an error will be +// returned. type BillingSubscriptionEditTiming struct { union json.RawMessage } -// BillingSubscriptionEditTimingEnum Subscription edit timing. -// When immediate, the requested changes take effect immediately. -// When next_billing_cycle, the requested changes take effect at the next billing cycle. +// BillingSubscriptionEditTimingEnum Subscription edit timing. When immediate, the requested changes take effect +// immediately. When next_billing_cycle, the requested changes take effect at the +// next billing cycle. type BillingSubscriptionEditTimingEnum string -// BillingSubscriptionReference Subscription reference represents a reference to the specific subscription item this -// entity represents. +// BillingSubscriptionReference Subscription reference represents a reference to the specific subscription item +// this entity represents. type BillingSubscriptionReference struct { // Id The ID of the subscription. Id ULID `json:"id"` @@ -3128,7 +3183,8 @@ type BillingSubscriptionStatus string // BillingTaxBehavior Tax behavior. // -// This enum is used to specify whether tax is included in the price or excluded from the price. +// This enum is used to specify whether tax is included in the price or excluded +// from the price. type BillingTaxBehavior string // BillingTaxCode Tax codes by provider. @@ -3181,8 +3237,8 @@ type BillingTaxCodeReference = TaxCodeReference type BillingTaxConfig struct { // Behavior Tax behavior. // - // If not specified the billing profile is used to determine the tax behavior. - // If not specified in the billing profile, the provider's default behavior is used. + // If not specified the billing profile is used to determine the tax behavior. If + // not specified in the billing profile, the provider's default behavior is used. Behavior *BillingTaxBehavior `json:"behavior,omitempty"` // ExternalInvoicing External invoicing tax config. @@ -3195,8 +3251,9 @@ type BillingTaxConfig struct { // TaxCode Tax code reference. // - // When both `tax_code` and `tax_code_id` are provided, `tax_code` takes precedence. - // When `stripe.code` is also provided, `tax_code` still wins and `stripe.code` is ignored. + // When both `tax_code` and `tax_code_id` are provided, `tax_code` takes + // precedence. When `stripe.code` is also provided, `tax_code` still wins and + // `stripe.code` is ignored. TaxCode *BillingTaxCodeReference `json:"tax_code,omitempty"` // TaxCodeId Tax code ID. @@ -3216,7 +3273,8 @@ type BillingTaxConfigStripe struct { Code string `json:"code"` } -// BillingTaxIdentificationCode Tax identifier code is a normalized tax code shown on the original identity document. +// BillingTaxIdentificationCode Tax identifier code is a normalized tax code shown on the original identity +// document. type BillingTaxIdentificationCode = string // BillingTotals Totals contains the summaries of all calculations for a billing resource. @@ -3248,7 +3306,8 @@ type BillingTotals struct { // BillingUsageBasedCharge A usage-based charge for a customer. type BillingUsageBasedCharge struct { - // AdvanceAfter The earliest time when the charge should be advanced again by background processing. + // AdvanceAfter The earliest time when the charge should be advanced again by background + // processing. AdvanceAfter *DateTime `json:"advance_after,omitempty"` // BillingPeriod The billing period the charge belongs to. @@ -3309,7 +3368,8 @@ type BillingUsageBasedCharge struct { // Status The lifecycle status of the charge. Status BillingChargeStatus `json:"status"` - // Subscription The subscription that originated the charge, when the charge was created from a subscription item. + // Subscription The subscription that originated the charge, when the charge was created from a + // subscription item. Subscription *BillingSubscriptionReference `json:"subscription,omitempty"` // TaxConfig Tax configuration of the charge. @@ -3348,14 +3408,15 @@ type BillingWorkflow struct { // BillingWorkflowCollectionAlignment The alignment for collecting the pending line items into an invoice. // -// Defaults to subscription, which means that we are to create a new invoice every time the -// a subscription period starts (for in advance items) or ends (for in arrears items). +// Defaults to subscription, which means that we are to create a new invoice every +// time the a subscription period starts (for in advance items) or ends (for in +// arrears items). type BillingWorkflowCollectionAlignment struct { union json.RawMessage } -// BillingWorkflowCollectionAlignmentAnchored BillingWorkflowCollectionAlignmentAnchored specifies the alignment for collecting the pending line items -// into an invoice. +// BillingWorkflowCollectionAlignmentAnchored BillingWorkflowCollectionAlignmentAnchored specifies the alignment for +// collecting the pending line items into an invoice. type BillingWorkflowCollectionAlignmentAnchored struct { // RecurringPeriod The recurring period for the alignment. RecurringPeriod RecurringPeriod `json:"recurring_period"` @@ -3367,8 +3428,8 @@ type BillingWorkflowCollectionAlignmentAnchored struct { // BillingWorkflowCollectionAlignmentAnchoredType The type of alignment. type BillingWorkflowCollectionAlignmentAnchoredType string -// BillingWorkflowCollectionAlignmentSubscription BillingWorkflowCollectionAlignmentSubscription specifies the alignment for collecting the pending line items -// into an invoice. +// BillingWorkflowCollectionAlignmentSubscription BillingWorkflowCollectionAlignmentSubscription specifies the alignment for +// collecting the pending line items into an invoice. type BillingWorkflowCollectionAlignmentSubscription struct { // Type The type of alignment. Type BillingWorkflowCollectionAlignmentSubscriptionType `json:"type"` @@ -3377,15 +3438,17 @@ type BillingWorkflowCollectionAlignmentSubscription struct { // BillingWorkflowCollectionAlignmentSubscriptionType The type of alignment. type BillingWorkflowCollectionAlignmentSubscriptionType string -// BillingWorkflowCollectionSettings Workflow collection specifies how to collect the pending line items for an invoice. +// BillingWorkflowCollectionSettings Workflow collection specifies how to collect the pending line items for an +// invoice. type BillingWorkflowCollectionSettings struct { // Alignment The alignment for collecting the pending line items into an invoice. Alignment *BillingWorkflowCollectionAlignment `json:"alignment,omitempty"` - // Interval This grace period can be used to delay the collection of the pending line items specified in - // alignment. + // Interval This grace period can be used to delay the collection of the pending line items + // specified in alignment. // - // This is useful, in case of multiple subscriptions having slightly different billing periods. + // This is useful, in case of multiple subscriptions having slightly different + // billing periods. Interval *string `json:"interval,omitempty"` } @@ -3401,7 +3464,8 @@ type BillingWorkflowInvoicingSettings struct { ProgressiveBilling *bool `json:"progressive_billing,omitempty"` } -// BillingWorkflowPaymentChargeAutomaticallySettings Payment settings for a billing workflow when the collection method is charge automatically. +// BillingWorkflowPaymentChargeAutomaticallySettings Payment settings for a billing workflow when the collection method is charge +// automatically. type BillingWorkflowPaymentChargeAutomaticallySettings struct { // CollectionMethod The collection method for the invoice. CollectionMethod BillingWorkflowPaymentChargeAutomaticallySettingsCollectionMethod `json:"collection_method"` @@ -3410,13 +3474,14 @@ type BillingWorkflowPaymentChargeAutomaticallySettings struct { // BillingWorkflowPaymentChargeAutomaticallySettingsCollectionMethod The collection method for the invoice. type BillingWorkflowPaymentChargeAutomaticallySettingsCollectionMethod string -// BillingWorkflowPaymentSendInvoiceSettings Payment settings for a billing workflow when the collection method is send invoice. +// BillingWorkflowPaymentSendInvoiceSettings Payment settings for a billing workflow when the collection method is send +// invoice. type BillingWorkflowPaymentSendInvoiceSettings struct { // CollectionMethod The collection method for the invoice. CollectionMethod BillingWorkflowPaymentSendInvoiceSettingsCollectionMethod `json:"collection_method"` - // DueAfter The period after which the invoice is due. - // With some payment solutions it's only applicable for manual collection method. + // DueAfter The period after which the invoice is due. With some payment solutions it's only + // applicable for manual collection method. DueAfter *string `json:"due_after,omitempty"` } @@ -3433,14 +3498,14 @@ type BillingWorkflowTaxSettings struct { // DefaultTaxConfig Default tax configuration to apply to the invoices for line items. DefaultTaxConfig *BillingTaxConfig `json:"default_tax_config,omitempty"` - // Enabled Enable automatic tax calculation when tax is supported by the app. - // For example, with Stripe Invoicing when enabled, tax is calculated via Stripe Tax. + // Enabled Enable automatic tax calculation when tax is supported by the app. For example, + // with Stripe Invoicing when enabled, tax is calculated via Stripe Tax. Enabled *bool `json:"enabled,omitempty"` - // Enforced Enforce tax calculation when tax is supported by the app. - // When enabled, the billing system will not allow to create an invoice without tax calculation. - // Enforcement is different per apps, for example, Stripe app requires customer - // to have a tax location when starting a paid subscription. + // Enforced Enforce tax calculation when tax is supported by the app. When enabled, the + // billing system will not allow to create an invoice without tax calculation. + // Enforcement is different per apps, for example, Stripe app requires customer to + // have a tax location when starting a paid subscription. Enforced *bool `json:"enforced,omitempty"` } @@ -3484,8 +3549,8 @@ type CostBasisPagePaginatedResponse struct { Meta PaginatedMeta `json:"meta"` } -// CountryCode [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 country code. -// Custom two-letter country codes are also supported for convenience. +// CountryCode [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 country +// code. Custom two-letter country codes are also supported for convenience. type CountryCode = string // CreateAddonRequest Addon create request. @@ -3501,8 +3566,9 @@ type CreateAddonRequest struct { // InstanceType The InstanceType of the add-ons. Can be "single" or "multiple". InstanceType AddonInstanceType `json:"instance_type"` - // Key A key is a semi-unique string that is used to identify the add-on. - // It is used to reference the latest `active` version of the add-on and is unique with the version number. + // Key A key is a semi-unique string that is used to identify the add-on. It is used to + // reference the latest `active` version of the add-on and is unique with the + // version number. Key ResourceKey `json:"key"` // Labels Labels store metadata of an entity that can be used for filtering an entity list or for searching across entity types. @@ -3542,7 +3608,8 @@ type CreateBillingProfileRequest struct { // Between 1 and 256 characters. Name string `json:"name"` - // Supplier The name and contact information for the supplier this billing profile represents + // Supplier The name and contact information for the supplier this billing profile + // represents Supplier BillingParty `json:"supplier"` // Workflow The billing workflow settings for this profile @@ -3551,8 +3618,9 @@ type CreateBillingProfileRequest struct { // CreateCostBasisRequest CostBasis create request. type CreateCostBasisRequest struct { - // EffectiveFrom An ISO-8601 timestamp representation of the date from which the cost basis is effective. - // If not provided, it will be effective immediately and will set to `now` by the system. + // EffectiveFrom An ISO-8601 timestamp representation of the date from which the cost basis is + // effective. If not provided, it will be effective immediately and will be set to + // `now` by the system. EffectiveFrom *DateTime `json:"effective_from,omitempty"` // FiatCode The fiat currency code for the cost basis. @@ -3601,8 +3669,8 @@ type CreateCreditGrantRequest struct { // Filters Filters for the credit grant. Filters *struct { - // Features Limit the credit grant to specific features. - // If no features are specified, the credit grant can be used for any feature. + // Features Limit the credit grant to specific features. If no features are specified, the + // credit grant can be used for any feature. Features *[]ResourceKey `json:"features,omitempty"` } `json:"filters,omitempty"` @@ -3619,12 +3687,11 @@ type CreateCreditGrantRequest struct { // Between 1 and 256 characters. Name string `json:"name"` - // Priority Draw-down priority of the grant. - // Lower values have higher priority. + // Priority Draw-down priority of the grant. Lower values have higher priority. Priority *int16 `json:"priority,omitempty"` - // Purchase Purchase and payment terms of the grant. - // Present when a funding workflow applies (funding_method is not `none`). + // Purchase Purchase and payment terms of the grant. Present when a funding workflow applies + // (funding_method is not `none`). Purchase *struct { // AvailabilityPolicy Controls when credits become available for consumption. // @@ -3636,9 +3703,8 @@ type CreateCreditGrantRequest struct { // PerUnitCostBasis Cost basis per credit unit used to calculate the purchase amount. // - // If `per_unit_cost_basis` is 0.50 and credit amount is $100.00, - // the total charge is $50.00. - // The value must be greater than 0. If the cost basis is 0, use + // If `per_unit_cost_basis` is 0.50 and credit amount is $100.00, the total charge + // is $50.00. The value must be greater than 0. If the cost basis is 0, use // `funding_method=none` instead. // // Defaults to 1.0. @@ -3647,35 +3713,37 @@ type CreateCreditGrantRequest struct { // TaxConfig Tax configuration for the grant. // - // For `invoice` and `external` funding methods, tax configuration should be provided to ensure correct revenue recognition. - // When not provided, the default credit grant tax code is applied, if that's not set the global default taxcode is used. + // For `invoice` and `external` funding methods, tax configuration should be + // provided to ensure correct revenue recognition. When not provided, the default + // credit grant tax code is applied, if that's not set the global default taxcode + // is used. TaxConfig *BillingCreditGrantTaxConfig `json:"tax_config,omitempty"` } // CreateCurrencyCustomRequest CurrencyCustom create request. type CreateCurrencyCustomRequest struct { - // Code Custom currency code. - // It should be a unique code but not conflicting with any existing fiat currency codes. + // Code Custom currency code. It should be a unique code but not conflicting with any + // existing fiat currency codes. Code BillingCurrencyCodeCustom `json:"code"` // Description Description of the currency. Description *string `json:"description,omitempty"` - // Name The name of the currency. It should be a human-readable string that represents the name of the currency, such as "US Dollar" or "Euro". + // Name The name of the currency. It should be a human-readable string that represents + // the name of the currency, such as "US Dollar" or "Euro". Name string `json:"name"` - // Symbol The symbol of the currency. It should be a string that represents the symbol of the currency, such as "$" for US Dollar or "€" for Euro. + // Symbol The symbol of the currency. It should be a string that represents the symbol of + // the currency, such as "$" for US Dollar or "€" for Euro. Symbol *string `json:"symbol,omitempty"` } // CreateCustomerRequest Customer create request. type CreateCustomerRequest struct { - // BillingAddress The billing address of the customer. - // Used for tax and invoicing. + // BillingAddress The billing address of the customer. Used for tax and invoicing. BillingAddress *BillingAddress `json:"billing_address,omitempty"` - // Currency Currency of the customer. - // Used for billing, tax and invoicing. + // Currency Currency of the customer. Used for billing, tax and invoicing. Currency *CurrencyCode `json:"currency,omitempty"` // Description Optional description of the resource. @@ -3683,7 +3751,8 @@ type CreateCustomerRequest struct { // Maximum 1024 characters. Description *string `json:"description,omitempty"` - // Key ExternalResourceKey is a unique string that is used to identify a resource in an external system. + // Key ExternalResourceKey is a unique string that is used to identify a resource in an + // external system. Key ExternalResourceKey `json:"key"` // Labels Labels store metadata of an entity that can be used for filtering an entity list or for searching across entity types. @@ -3718,8 +3787,8 @@ type CreateFeatureRequest struct { // Keys must be of length 1-63 characters, and cannot start with "kong", "konnect", "mesh", "kic", or "_". Labels *Labels `json:"labels,omitempty"` - // Meter The meter that the feature is associated with and and based on which usage is calculated. - // If not specified, the feature is static. + // Meter The meter that the feature is associated with and based on which usage is + // calculated. If not specified, the feature is static. Meter *FeatureMeterReference `json:"meter,omitempty"` // Name Display name of the resource. @@ -3727,9 +3796,9 @@ type CreateFeatureRequest struct { // Between 1 and 256 characters. Name string `json:"name"` - // UnitCost Optional per-unit cost configuration. - // Use "manual" for a fixed per-unit cost, or "llm" to look up cost - // from the LLM cost database based on meter group-by properties. + // UnitCost Optional per-unit cost configuration. Use "manual" for a fixed per-unit cost, or + // "llm" to look up cost from the LLM cost database based on meter group-by + // properties. UnitCost *BillingFeatureUnitCost `json:"unit_cost,omitempty"` } @@ -3751,9 +3820,8 @@ type CreateMeterRequest struct { // EventType The event type to include in the aggregation. EventType string `json:"event_type"` - // EventsFrom The date since the meter should include events. - // Useful to skip old events. - // If not specified, all historical events are included. + // EventsFrom The date since the meter should include events. Useful to skip old events. If + // not specified, all historical events are included. EventsFrom *DateTime `json:"events_from,omitempty"` // Key A key is a unique string that is used to identify a resource. @@ -3769,11 +3837,14 @@ type CreateMeterRequest struct { // Between 1 and 256 characters. Name string `json:"name"` - // ValueProperty JSONPath expression to extract the value from the ingested event's data property. + // ValueProperty JSONPath expression to extract the value from the ingested event's data + // property. // - // The ingested value for sum, avg, min, and max aggregations is a number or a string that can be parsed to a number. + // The ingested value for sum, avg, min, and max aggregations is a number or a + // string that can be parsed to a number. // - // For unique_count aggregation, the ingested value must be a string. For count aggregation the value_property is ignored. + // For unique_count aggregation, the ingested value must be a string. For count + // aggregation the value_property is ignored. ValueProperty *string `json:"value_property,omitempty"` } @@ -3795,9 +3866,9 @@ type CreatePlanAddonRequest struct { // Keys must be of length 1-63 characters, and cannot start with "kong", "konnect", "mesh", "kic", or "_". Labels *Labels `json:"labels,omitempty"` - // MaxQuantity The maximum number of times the add-on can be purchased for the plan. - // For single-instance add-ons this field must be omitted. - // For multi-instance add-ons when omitted, unlimited quantity can be purchased. + // MaxQuantity The maximum number of times the add-on can be purchased for the plan. For + // single-instance add-ons this field must be omitted. For multi-instance add-ons + // when omitted, unlimited quantity can be purchased. MaxQuantity *int `json:"max_quantity,omitempty"` // Name Display name of the resource. @@ -3819,8 +3890,9 @@ type CreatePlanRequest struct { // Maximum 1024 characters. Description *string `json:"description,omitempty"` - // Key A key is a semi-unique string that is used to identify the plan. - // It is used to reference the latest `active` version of the plan and is unique with the version number. + // Key A key is a semi-unique string that is used to identify the plan. It is used to + // reference the latest `active` version of the plan and is unique with the version + // number. Key ResourceKey `json:"key"` // Labels Labels store metadata of an entity that can be used for filtering an entity list or for searching across entity types. @@ -3833,9 +3905,8 @@ type CreatePlanRequest struct { // Between 1 and 256 characters. Name string `json:"name"` - // Phases The plan phases define the pricing ramp for a subscription. - // A phase switch occurs only at the end of a billing period. - // At least one phase is required. + // Phases The plan phases define the pricing ramp for a subscription. A phase switch + // occurs only at the end of a billing period. At least one phase is required. Phases []BillingPlanPhase `json:"phases"` // ProRatingEnabled Whether pro-rating is enabled for this plan. @@ -3868,13 +3939,13 @@ type CreateTaxCodeRequest struct { // CreditBalance The credit balance by currency. type CreditBalance struct { - // Available Credits that can be consumed right now. - // Derived from cleared grants after applying eligibility and restriction rules. + // Available Credits that can be consumed right now. Derived from cleared grants after + // applying eligibility and restriction rules. Available Numeric `json:"available"` Currency BillingCurrencyCode `json:"currency"` - // Pending Credits that have been granted but cannot yet be consumed. - // Includes grants awaiting payment clearance or with a future effective date. + // Pending Credits that have been granted but cannot yet be consumed. Includes grants + // awaiting payment clearance or with a future effective date. Pending Numeric `json:"pending"` } @@ -3899,13 +3970,15 @@ type CurrencyAmount struct { // Amount Numeric represents an arbitrary precision number. Amount Numeric `json:"amount"` - // Currency Three-letter [ISO4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. - // Custom three-letter currency codes are also supported for convenience. + // Currency Three-letter [ISO4217](https://www.iso.org/iso-4217-currency-codes.html) + // currency code. Custom three-letter currency codes are also supported for + // convenience. Currency CurrencyCode `json:"currency"` } -// CurrencyCode Three-letter [ISO4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. -// Custom three-letter currency codes are also supported for convenience. +// CurrencyCode Three-letter [ISO4217](https://www.iso.org/iso-4217-currency-codes.html) +// currency code. Custom three-letter currency codes are also supported for +// convenience. type CurrencyCode = string // CurrencyPagePaginatedResponse Page paginated response. @@ -3953,14 +4026,16 @@ type CustomerReference struct { Id ULID `json:"id"` } -// DateTime [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC. +// DateTime [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in +// UTC. type DateTime = time.Time -// DateTimeFieldFilter Filters on the given datetime (RFC-3339) field value. -// All properties are optional; provide exactly one to specify the comparison. +// DateTimeFieldFilter Filters on the given datetime (RFC-3339) field value. All properties are +// optional; provide exactly one to specify the comparison. type DateTimeFieldFilter = filters.FilterDateTime -// ExternalResourceKey ExternalResourceKey is a unique string that is used to identify a resource in an external system. +// ExternalResourceKey ExternalResourceKey is a unique string that is used to identify a resource in an +// external system. type ExternalResourceKey = string // Feature A capability or billable dimension offered by a provider. @@ -3985,8 +4060,8 @@ type Feature struct { // Keys must be of length 1-63 characters, and cannot start with "kong", "konnect", "mesh", "kic", or "_". Labels *Labels `json:"labels,omitempty"` - // Meter The meter that the feature is associated with and and based on which usage is calculated. - // If not specified, the feature is static. + // Meter The meter that the feature is associated with and based on which usage is + // calculated. If not specified, the feature is static. Meter *FeatureMeterReference `json:"meter,omitempty"` // Name Display name of the resource. @@ -3994,9 +4069,9 @@ type Feature struct { // Between 1 and 256 characters. Name string `json:"name"` - // UnitCost Optional per-unit cost configuration. - // Use "manual" for a fixed per-unit cost, or "llm" to look up cost - // from the LLM cost database based on meter group-by properties. + // UnitCost Optional per-unit cost configuration. Use "manual" for a fixed per-unit cost, or + // "llm" to look up cost from the LLM cost database based on meter group-by + // properties. UnitCost *BillingFeatureUnitCost `json:"unit_cost,omitempty"` // UpdatedAt An ISO-8601 timestamp representation of entity last update date. @@ -4017,18 +4092,19 @@ type FeatureCostQueryResult struct { // FeatureCostQueryRow A row in the result of a feature cost query. type FeatureCostQueryRow struct { - // Cost The computed cost amount (usage × unit cost). - // Null when pricing is not available for the given combination of dimensions. + // Cost The computed cost amount (usage × unit cost). Null when pricing is not available + // for the given combination of dimensions. Cost nullable.Nullable[Numeric] `json:"cost"` // Currency The currency code of the cost amount. Currency CurrencyCode `json:"currency"` - // Detail Detail message when cost amount is null, explaining why the cost could not be resolved. + // Detail Detail message when cost amount is null, explaining why the cost could not be + // resolved. Detail *string `json:"detail,omitempty"` - // Dimensions The dimensions the value is aggregated over. - // `subject` and `customer_id` are reserved dimensions. + // Dimensions The dimensions the value is aggregated over. `subject` and `customer_id` are + // reserved dimensions. Dimensions map[string]string `json:"dimensions"` // From The start of the time bucket the value is aggregated over. @@ -4088,7 +4164,8 @@ type GoneError struct { Type interface{} `json:"type,omitempty"` } -// ISO8601Duration [ISO 8601 Duration](https://docs.digi.com/resources/documentation/digidocs/90001488-13/reference/r_iso_8601_duration_format.htm) string. +// ISO8601Duration [ISO 8601 Duration](https://docs.digi.com/resources/documentation/digidocs/90001488-13/reference/r_iso_8601_duration_format.htm) +// string. type ISO8601Duration = string // IngestedEventPaginatedResponse Cursor paginated response. @@ -4203,10 +4280,9 @@ type LLMCostModelPricing struct { ReasoningPerToken *Numeric `json:"reasoning_per_token,omitempty"` } -// LLMCostOverrideCreate Input for creating a per-namespace price override. -// Unique per provider, model and currency. -// If an override already exists for the given provider, model and currency, it will be updated. -// If an override does not exist, it will be created. +// LLMCostOverrideCreate Input for creating a per-namespace price override. Unique per provider, model +// and currency. If an override already exists for the given provider, model and +// currency, it will be updated. If an override does not exist, it will be created. type LLMCostOverrideCreate struct { // Currency Currency code. Currency CurrencyCode `json:"currency"` @@ -4230,8 +4306,8 @@ type LLMCostOverrideCreate struct { Provider string `json:"provider"` } -// LLMCostPrice An LLM cost price record, representing the cost per token -// for a specific model from a specific provider. +// LLMCostPrice An LLM cost price record, representing the cost per token for a specific model +// from a specific provider. type LLMCostPrice struct { // CreatedAt Creation timestamp. CreatedAt DateTime `json:"created_at"` @@ -4242,7 +4318,7 @@ type LLMCostPrice struct { // EffectiveFrom When this price becomes effective. EffectiveFrom DateTime `json:"effective_from"` - // EffectiveTo When this price expires (null = current). + // EffectiveTo When this price expires. Omitted when the price is currently effective. EffectiveTo *DateTime `json:"effective_to,omitempty"` // Id Unique identifier. @@ -4283,24 +4359,24 @@ type Labels map[string]string // ListAddonsParamsFilter Filter options for listing add-ons. type ListAddonsParamsFilter struct { - // Currency Filters on the given string field value by exact match. - // All properties are optional; provide exactly one to specify the comparison. + // Currency Filters on the given string field value by exact match. All properties are + // optional; provide exactly one to specify the comparison. Currency *StringFieldFilterExact `json:"currency,omitempty"` - // Id Filters on the given ULID field value by exact match. - // All properties are optional; provide exactly one to specify the comparison. + // Id Filters on the given ULID field value by exact match. All properties are + // optional; provide exactly one to specify the comparison. Id *ULIDFieldFilter `json:"id,omitempty"` - // Key Filters on the given string field value by either exact or fuzzy match. - // All properties are optional; provide exactly one to specify the comparison. + // Key Filters on the given string field value by either exact or fuzzy match. All + // properties are optional; provide exactly one to specify the comparison. Key *StringFieldFilter `json:"key,omitempty"` - // Name Filters on the given string field value by either exact or fuzzy match. - // All properties are optional; provide exactly one to specify the comparison. + // Name Filters on the given string field value by either exact or fuzzy match. All + // properties are optional; provide exactly one to specify the comparison. Name *StringFieldFilter `json:"name,omitempty"` - // Status Filters on the given string field value by exact match. - // All properties are optional; provide exactly one to specify the comparison. + // Status Filters on the given string field value by exact match. All properties are + // optional; provide exactly one to specify the comparison. Status *StringFieldFilterExact `json:"status,omitempty"` } @@ -4309,6 +4385,7 @@ type ListChargesParamsFilter struct { // Status Filter charges by status. // // Supported statuses are: + // // - `created` // - `active` // - `final` @@ -4356,28 +4433,28 @@ type ListCustomerEntitlementAccessResponseData struct { // ListCustomersParamsFilter Filter options for listing customers. type ListCustomersParamsFilter struct { - // BillingProfileId Filters on the given ULID field value by exact match. - // All properties are optional; provide exactly one to specify the comparison. + // BillingProfileId Filters on the given ULID field value by exact match. All properties are + // optional; provide exactly one to specify the comparison. BillingProfileId *ULIDFieldFilter `json:"billing_profile_id,omitempty"` - // Key Filters on the given string field value by either exact or fuzzy match. - // All properties are optional; provide exactly one to specify the comparison. + // Key Filters on the given string field value by either exact or fuzzy match. All + // properties are optional; provide exactly one to specify the comparison. Key *StringFieldFilter `json:"key,omitempty"` - // Name Filters on the given string field value by either exact or fuzzy match. - // All properties are optional; provide exactly one to specify the comparison. + // Name Filters on the given string field value by either exact or fuzzy match. All + // properties are optional; provide exactly one to specify the comparison. Name *StringFieldFilter `json:"name,omitempty"` - // PlanKey Filters on the given string field value by either exact or fuzzy match. - // All properties are optional; provide exactly one to specify the comparison. + // PlanKey Filters on the given string field value by either exact or fuzzy match. All + // properties are optional; provide exactly one to specify the comparison. PlanKey *StringFieldFilter `json:"plan_key,omitempty"` - // PrimaryEmail Filters on the given string field value by either exact or fuzzy match. - // All properties are optional; provide exactly one to specify the comparison. + // PrimaryEmail Filters on the given string field value by either exact or fuzzy match. All + // properties are optional; provide exactly one to specify the comparison. PrimaryEmail *StringFieldFilter `json:"primary_email,omitempty"` - // UsageAttributionSubjectKey Filters on the given string field value by either exact or fuzzy match. - // All properties are optional; provide exactly one to specify the comparison. + // UsageAttributionSubjectKey Filters on the given string field value by either exact or fuzzy match. All + // properties are optional; provide exactly one to specify the comparison. UsageAttributionSubjectKey *StringFieldFilter `json:"usage_attribution_subject_key,omitempty"` } @@ -4410,16 +4487,16 @@ type ListEventsParamsFilter struct { // ListFeatureParamsFilter Filter options for listing features. type ListFeatureParamsFilter struct { - // Key Filters on the given string field value by either exact or fuzzy match. - // All properties are optional; provide exactly one to specify the comparison. + // Key Filters on the given string field value by either exact or fuzzy match. All + // properties are optional; provide exactly one to specify the comparison. Key *StringFieldFilter `json:"key,omitempty"` - // MeterId Filters on the given ULID field value by exact match. - // All properties are optional; provide exactly one to specify the comparison. + // MeterId Filters on the given ULID field value by exact match. All properties are + // optional; provide exactly one to specify the comparison. MeterId *ULIDFieldFilter `json:"meter_id,omitempty"` - // Name Filters on the given string field value by either exact or fuzzy match. - // All properties are optional; provide exactly one to specify the comparison. + // Name Filters on the given string field value by either exact or fuzzy match. All + // properties are optional; provide exactly one to specify the comparison. Name *StringFieldFilter `json:"name,omitempty"` } @@ -4452,43 +4529,43 @@ type ListMetersParamsFilter struct { // ListPlansParamsFilter Filter options for listing plans. type ListPlansParamsFilter struct { - // Currency Filters on the given string field value by exact match. - // All properties are optional; provide exactly one to specify the comparison. + // Currency Filters on the given string field value by exact match. All properties are + // optional; provide exactly one to specify the comparison. Currency *StringFieldFilterExact `json:"currency,omitempty"` - // Key Filters on the given string field value by either exact or fuzzy match. - // All properties are optional; provide exactly one to specify the comparison. + // Key Filters on the given string field value by either exact or fuzzy match. All + // properties are optional; provide exactly one to specify the comparison. Key *StringFieldFilter `json:"key,omitempty"` - // Name Filters on the given string field value by either exact or fuzzy match. - // All properties are optional; provide exactly one to specify the comparison. + // Name Filters on the given string field value by either exact or fuzzy match. All + // properties are optional; provide exactly one to specify the comparison. Name *StringFieldFilter `json:"name,omitempty"` - // Status Filters on the given string field value by exact match. - // All properties are optional; provide exactly one to specify the comparison. + // Status Filters on the given string field value by exact match. All properties are + // optional; provide exactly one to specify the comparison. Status *StringFieldFilterExact `json:"status,omitempty"` } // ListSubscriptionsParamsFilter Filter options for listing subscriptions. type ListSubscriptionsParamsFilter struct { - // CustomerId Filters on the given ULID field value by exact match. - // All properties are optional; provide exactly one to specify the comparison. + // CustomerId Filters on the given ULID field value by exact match. All properties are + // optional; provide exactly one to specify the comparison. CustomerId *ULIDFieldFilter `json:"customer_id,omitempty"` - // Id Filters on the given ULID field value by exact match. - // All properties are optional; provide exactly one to specify the comparison. + // Id Filters on the given ULID field value by exact match. All properties are + // optional; provide exactly one to specify the comparison. Id *ULIDFieldFilter `json:"id,omitempty"` - // PlanId Filters on the given ULID field value by exact match. - // All properties are optional; provide exactly one to specify the comparison. + // PlanId Filters on the given ULID field value by exact match. All properties are + // optional; provide exactly one to specify the comparison. PlanId *ULIDFieldFilter `json:"plan_id,omitempty"` - // PlanKey Filters on the given string field value by exact match. - // All properties are optional; provide exactly one to specify the comparison. + // PlanKey Filters on the given string field value by exact match. All properties are + // optional; provide exactly one to specify the comparison. PlanKey *StringFieldFilterExact `json:"plan_key,omitempty"` - // Status Filters on the given string field value by exact match. - // All properties are optional; provide exactly one to specify the comparison. + // Status Filters on the given string field value by exact match. All properties are + // optional; provide exactly one to specify the comparison. Status *StringFieldFilterExact `json:"status,omitempty"` } @@ -4516,9 +4593,8 @@ type Meter struct { // EventType The event type to include in the aggregation. EventType string `json:"event_type"` - // EventsFrom The date since the meter should include events. - // Useful to skip old events. - // If not specified, all historical events are included. + // EventsFrom The date since the meter should include events. Useful to skip old events. If + // not specified, all historical events are included. EventsFrom *DateTime `json:"events_from,omitempty"` Id ULID `json:"id"` @@ -4538,11 +4614,14 @@ type Meter struct { // UpdatedAt An ISO-8601 timestamp representation of entity last update date. UpdatedAt DateTime `json:"updated_at"` - // ValueProperty JSONPath expression to extract the value from the ingested event's data property. + // ValueProperty JSONPath expression to extract the value from the ingested event's data + // property. // - // The ingested value for sum, avg, min, and max aggregations is a number or a string that can be parsed to a number. + // The ingested value for sum, avg, min, and max aggregations is a number or a + // string that can be parsed to a number. // - // For unique_count aggregation, the ingested value must be a string. For count aggregation the value_property is ignored. + // For unique_count aggregation, the ingested value must be a string. For count + // aggregation the value_property is ignored. ValueProperty *string `json:"value_property,omitempty"` } @@ -4559,13 +4638,13 @@ type MeterPagePaginatedResponse struct { // MeterQueryFilters Filters to apply to a meter query. type MeterQueryFilters struct { - // Dimensions Filters to apply to the dimensions of the query. - // For `subject` and `customer_id` only equals ("eq", "in") comparisons are supported. + // Dimensions Filters to apply to the dimensions of the query. For `subject` and `customer_id` + // only equals ("eq", "in") comparisons are supported. Dimensions *map[string]QueryFilterStringMapItem `json:"dimensions,omitempty"` } -// MeterQueryGranularity The granularity of the time grouping. -// Time durations are specified in ISO 8601 format. +// MeterQueryGranularity The granularity of the time grouping. Time durations are specified in ISO 8601 +// format. type MeterQueryGranularity string // MeterQueryRequest A meter query request. @@ -4576,16 +4655,16 @@ type MeterQueryRequest struct { // From The start of the period the usage is queried from. From *DateTime `json:"from,omitempty"` - // Granularity The size of the time buckets to group the usage into. - // If not specified, the usage is aggregated over the entire period. + // Granularity The size of the time buckets to group the usage into. If not specified, the + // usage is aggregated over the entire period. Granularity *MeterQueryGranularity `json:"granularity,omitempty"` // GroupByDimensions The dimensions to group the results by. GroupByDimensions *[]string `json:"group_by_dimensions,omitempty"` - // TimeZone The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). - // The time zone is used to determine the start and end of the time buckets. - // If not specified, the UTC timezone will be used. + // TimeZone The value is the name of the time zone as defined in the IANA Time Zone Database + // (http://www.iana.org/time-zones). The time zone is used to determine the start + // and end of the time buckets. If not specified, the UTC timezone will be used. TimeZone *string `json:"time_zone,omitempty"` // To The end of the period the usage is queried to. @@ -4594,8 +4673,7 @@ type MeterQueryRequest struct { // MeterQueryResult Meter query result. type MeterQueryResult struct { - // Data The usage data. - // If no data is available, an empty array is returned. + // Data The usage data. If no data is available, an empty array is returned. Data []MeterQueryRow `json:"data"` // From The start of the period the usage is queried from. @@ -4607,8 +4685,8 @@ type MeterQueryResult struct { // MeterQueryRow A row in the result of a meter query. type MeterQueryRow struct { - // Dimensions The dimensions the value is aggregated over. - // `subject` and `customer_id` are reserved dimensions. + // Dimensions The dimensions the value is aggregated over. `subject` and `customer_id` are + // reserved dimensions. Dimensions map[string]string `json:"dimensions"` // From The start of the time bucket the value is aggregated over. @@ -4623,11 +4701,11 @@ type MeterQueryRow struct { // MeteringEvent Metering event following the CloudEvents specification. type MeteringEvent struct { - // Data The event payload. - // Optional, if present it must be a JSON object. + // Data The event payload. Optional, if present it must be a JSON object. Data nullable.Nullable[map[string]interface{}] `json:"data,omitempty"` - // Datacontenttype Content type of the CloudEvents data value. Only the value "application/json" is allowed over HTTP. + // Datacontenttype Content type of the CloudEvents data value. Only the value "application/json" is + // allowed over HTTP. Datacontenttype nullable.Nullable[MeteringEventDatacontenttype] `json:"datacontenttype,omitempty"` // Dataschema Identifies the schema that data adheres to. @@ -4642,17 +4720,20 @@ type MeteringEvent struct { // Specversion The version of the CloudEvents specification which the event uses. Specversion string `json:"specversion"` - // Subject Describes the subject of the event in the context of the event producer (identified by source). + // Subject Describes the subject of the event in the context of the event producer + // (identified by source). Subject string `json:"subject"` // Time Timestamp of when the occurrence happened. Must adhere to RFC 3339. Time nullable.Nullable[DateTime] `json:"time,omitempty"` - // Type Contains a value describing the type of event related to the originating occurrence. + // Type Contains a value describing the type of event related to the originating + // occurrence. Type string `json:"type"` } -// MeteringEventDatacontenttype Content type of the CloudEvents data value. Only the value "application/json" is allowed over HTTP. +// MeteringEventDatacontenttype Content type of the CloudEvents data value. Only the value "application/json" is +// allowed over HTTP. type MeteringEventDatacontenttype string // MeteringIngestedEvent An ingested metering event with ingestion metadata. @@ -4728,8 +4809,8 @@ type PaginatedMeta struct { Page PageMeta `json:"page"` } -// PlanAddon PlanAddon represents an association between a plan and an add-on, -// controlling which add-ons are available for purchase within a plan. +// PlanAddon PlanAddon represents an association between a plan and an add-on, controlling +// which add-ons are available for purchase within a plan. type PlanAddon struct { // Addon The add-on associated with the plan. Addon AddonReferenceItem `json:"addon"` @@ -4754,9 +4835,9 @@ type PlanAddon struct { // Keys must be of length 1-63 characters, and cannot start with "kong", "konnect", "mesh", "kic", or "_". Labels *Labels `json:"labels,omitempty"` - // MaxQuantity The maximum number of times the add-on can be purchased for the plan. - // For single-instance add-ons this field must be omitted. - // For multi-instance add-ons when omitted, unlimited quantity can be purchased. + // MaxQuantity The maximum number of times the add-on can be purchased for the plan. For + // single-instance add-ons this field must be omitted. For multi-instance add-ons + // when omitted, unlimited quantity can be purchased. MaxQuantity *int `json:"max_quantity,omitempty"` // Name Display name of the resource. @@ -4810,8 +4891,8 @@ type ProductCatalogValidationError struct { Message string `json:"message"` } -// QueryFilterString A query filter for a string attribute. -// Operators are mutually exclusive, only one operator is allowed at a time. +// QueryFilterString A query filter for a string attribute. Operators are mutually exclusive, only +// one operator is allowed at a time. type QueryFilterString struct { // And Combines the provided filters with a logical AND. And *[]QueryFilterString `json:"and,omitempty"` @@ -4838,8 +4919,8 @@ type QueryFilterString struct { Or *[]QueryFilterString `json:"or,omitempty"` } -// QueryFilterStringMapItem A query filter for an item in a string map attribute. -// Operators are mutually exclusive, only one operator is allowed at a time. +// QueryFilterStringMapItem A query filter for an item in a string map attribute. Operators are mutually +// exclusive, only one operator is allowed at a time. type QueryFilterStringMapItem struct { // And Combines the provided filters with a logical AND. And *[]QueryFilterString `json:"and,omitempty"` @@ -4884,6 +4965,7 @@ type ResourceKey = string // ResourceManagedBy Identifies which system manages a resource. // // Values: +// // - `manual`: The resource is managed manually (overridden by our API users). // - `system`: The resource is managed by the system. // - `subscription`: The resource is managed by the subscription. @@ -4895,12 +4977,12 @@ type ResourceManagedBy string // JSONPath notation may be used to specify a sub-attribute (eg: 'foo.bar desc'). type SortQuery = string -// StringFieldFilter Filters on the given string field value by either exact or fuzzy match. -// All properties are optional; provide exactly one to specify the comparison. +// StringFieldFilter Filters on the given string field value by either exact or fuzzy match. All +// properties are optional; provide exactly one to specify the comparison. type StringFieldFilter = filters.FilterString -// StringFieldFilterExact Filters on the given string field value by exact match. -// All properties are optional; provide exactly one to specify the comparison. +// StringFieldFilterExact Filters on the given string field value by exact match. All properties are +// optional; provide exactly one to specify the comparison. type StringFieldFilterExact = filters.FilterStringExact // SubscriptionPagePaginatedResponse Page paginated response. @@ -4934,8 +5016,8 @@ type TaxCodeReferenceItem struct { // ULID ULID (Universally Unique Lexicographically Sortable Identifier). type ULID = string -// ULIDFieldFilter Filters on the given ULID field value by exact match. -// All properties are optional; provide exactly one to specify the comparison. +// ULIDFieldFilter Filters on the given ULID field value by exact match. All properties are +// optional; provide exactly one to specify the comparison. type ULIDFieldFilter = filters.FilterULID // UnauthorizedError defines model for UnauthorizedError. @@ -4947,18 +5029,20 @@ type UnauthorizedError struct { Type interface{} `json:"type,omitempty"` } -// UpdateCreditGrantExternalSettlementRequest Request body for updating the external payment settlement status of a credit grant. +// UpdateCreditGrantExternalSettlementRequest Request body for updating the external payment settlement status of a credit +// grant. type UpdateCreditGrantExternalSettlementRequest struct { // Status The new payment settlement status. Status BillingCreditPurchasePaymentSettlementStatus `json:"status"` } -// UpdateFeatureRequest Request body for updating a feature. -// Currently only the unit_cost field can be updated. +// UpdateFeatureRequest Request body for updating a feature. Currently only the unit_cost field can be +// updated. type UpdateFeatureRequest struct { - // UnitCost Optional per-unit cost configuration. - // Use "manual" for a fixed per-unit cost, or "llm" to look up cost - // from the LLM cost database based on meter group-by properties. + // UnitCost Optional per-unit cost configuration. Use "manual" for a fixed per-unit cost, or + // "llm" to look up cost from the LLM cost database based on meter group-by + // properties. Set to `null` to clear the existing unit cost; omit to leave it + // unchanged. UnitCost nullable.Nullable[BillingFeatureUnitCost] `json:"unit_cost,omitempty"` } @@ -5047,7 +5131,8 @@ type UpsertBillingProfileRequest struct { // Between 1 and 256 characters. Name string `json:"name"` - // Supplier The name and contact information for the supplier this billing profile represents + // Supplier The name and contact information for the supplier this billing profile + // represents Supplier BillingParty `json:"supplier"` // Workflow The billing workflow settings for this profile @@ -5067,12 +5152,10 @@ type UpsertCustomerBillingDataRequest struct { // UpsertCustomerRequest Customer upsert request. type UpsertCustomerRequest struct { - // BillingAddress The billing address of the customer. - // Used for tax and invoicing. + // BillingAddress The billing address of the customer. Used for tax and invoicing. BillingAddress *BillingAddress `json:"billing_address,omitempty"` - // Currency Currency of the customer. - // Used for billing, tax and invoicing. + // Currency Currency of the customer. Used for billing, tax and invoicing. Currency *CurrencyCode `json:"currency,omitempty"` // Description Optional description of the resource. @@ -5112,9 +5195,9 @@ type UpsertPlanAddonRequest struct { // Keys must be of length 1-63 characters, and cannot start with "kong", "konnect", "mesh", "kic", or "_". Labels *Labels `json:"labels,omitempty"` - // MaxQuantity The maximum number of times the add-on can be purchased for the plan. - // For single-instance add-ons this field must be omitted. - // For multi-instance add-ons when omitted, unlimited quantity can be purchased. + // MaxQuantity The maximum number of times the add-on can be purchased for the plan. For + // single-instance add-ons this field must be omitted. For multi-instance add-ons + // when omitted, unlimited quantity can be purchased. MaxQuantity *int `json:"max_quantity,omitempty"` // Name Display name of the resource. @@ -5140,9 +5223,8 @@ type UpsertPlanRequest struct { // Between 1 and 256 characters. Name string `json:"name"` - // Phases The plan phases define the pricing ramp for a subscription. - // A phase switch occurs only at the end of a billing period. - // At least one phase is required. + // Phases The plan phases define the pricing ramp for a subscription. A phase switch + // occurs only at the end of a billing period. At least one phase is required. Phases []BillingPlanPhase `json:"phases"` // ProRatingEnabled Whether pro-rating is enabled for this plan. @@ -5217,16 +5299,16 @@ type ListAddonsParams struct { // Page Determines which page of the collection to retrieve. Page *PagePaginationQuery `json:"page,omitempty"` - // Sort Sort add-ons returned in the response. - // Supported sort attributes are: + // Sort Sort add-ons returned in the response. Supported sort attributes are: + // // - `id` // - `key` // - `name` // - `created_at` (default) // - `updated_at` // - // The `asc` suffix is optional as the default sort order is ascending. - // The `desc` suffix is used to specify a descending order. + // The `asc` suffix is optional as the default sort order is ascending. The `desc` + // suffix is used to specify a descending order. Sort *SortQuery `form:"sort,omitempty" json:"sort,omitempty"` // Filter Filter add-ons returned in the response. @@ -5254,7 +5336,8 @@ type ListCurrenciesParams struct { type ListCostBasesParams struct { // Filter Filter cost bases returned in the response. // - // To filter cost bases by fiat currency code add the following query param: filter[fiat_code]=USD + // To filter cost bases by fiat currency code add the following query param: + // filter[fiat_code]=USD Filter *ListCostBasesParamsFilter `json:"filter,omitempty"` // Page Determines which page of the collection to retrieve. @@ -5266,14 +5349,14 @@ type ListCustomersParams struct { // Page Determines which page of the collection to retrieve. Page *PagePaginationQuery `json:"page,omitempty"` - // Sort Sort customers returned in the response. - // Supported sort attributes are: + // Sort Sort customers returned in the response. Supported sort attributes are: + // // - `id` // - `name` (default) // - `created_at` // - // The `asc` suffix is optional as the default sort order is ascending. - // The `desc` suffix is used to specify a descending order. + // The `asc` suffix is optional as the default sort order is ascending. The `desc` + // suffix is used to specify a descending order. Sort *SortQuery `form:"sort,omitempty" json:"sort,omitempty"` // Filter Filter customers returned in the response. @@ -5290,6 +5373,7 @@ type ListCustomerChargesParams struct { // Sort Sort charges returned in the response. // // Supported sort attributes are: + // // - `id` // - `created_at` // - `service_period.from` @@ -5298,12 +5382,14 @@ type ListCustomerChargesParams struct { // Filter Filter charges. // - // To filter charges by status add the following query param: `filter[status][oeq]=created,active` + // To filter charges by status add the following query param: + // `filter[status][oeq]=created,active` Filter *ListChargesParamsFilter `json:"filter,omitempty"` // Expand Expand full objects for referenced entities. // // Supported values are: + // // - `real_time_usage`: Expand the charge's real-time usage. Expand *[]BillingChargesExpand `form:"expand,omitempty" json:"expand,omitempty"` } @@ -5338,18 +5424,19 @@ type ListMeteringEventsParams struct { // Filter Filter events returned in the response. // - // To filter events by subject add the following query param: filter[subject][eq]=customer-1 + // To filter events by subject add the following query param: + // filter[subject][eq]=customer-1 Filter *ListEventsParamsFilter `json:"filter,omitempty"` - // Sort Sort events returned in the response. - // Supported sort attributes are: + // Sort Sort events returned in the response. Supported sort attributes are: + // // - `time` (default) // - `ingested_at` // - `stored_at` // - // When omitted, events are sorted by `time desc` (most recent first). - // When a sort field is provided without a suffix, it sorts descending. - // Append the `asc` suffix to sort ascending, or the `desc` suffix to sort descending. + // When omitted, events are sorted by `time desc` (most recent first). When a sort + // field is provided without a suffix, it sorts descending. Append the `asc` suffix + // to sort ascending, or the `desc` suffix to sort descending. Sort *SortQuery `form:"sort,omitempty" json:"sort,omitempty"` } @@ -5369,20 +5456,21 @@ type ListFeaturesParams struct { // Page Determines which page of the collection to retrieve. Page *PagePaginationQuery `json:"page,omitempty"` - // Sort Sort features returned in the response. - // Supported sort attributes are: + // Sort Sort features returned in the response. Supported sort attributes are: + // // - `key` // - `name` // - `created_at` (default) // - `updated_at` // - // The `asc` suffix is optional as the default sort order is ascending. - // The `desc` suffix is used to specify a descending order. + // The `asc` suffix is optional as the default sort order is ascending. The `desc` + // suffix is used to specify a descending order. Sort *SortQuery `form:"sort,omitempty" json:"sort,omitempty"` // Filter Filter features returned in the response. // - // To filter features by meter_id add the following query param: filter[meter_id][oeq]= + // To filter features by meter_id add the following query param: + // filter[meter_id][oeq]= Filter *ListFeatureParamsFilter `json:"filter,omitempty"` } @@ -5399,16 +5487,16 @@ type ListLlmCostPricesParams struct { // Filter Filter prices. Filter *ListLLMCostPricesParamsFilter `json:"filter,omitempty"` - // Sort Sort prices returned in the response. - // Supported sort attributes are: + // Sort Sort prices returned in the response. Supported sort attributes are: + // // - `id` // - `provider.id` // - `model.id` (default) // - `effective_from` // - `effective_to` // - // The `asc` suffix is optional as the default sort order is ascending. - // The `desc` suffix is used to specify a descending order. + // The `asc` suffix is optional as the default sort order is ascending. The `desc` + // suffix is used to specify a descending order. Sort *SortQuery `form:"sort,omitempty" json:"sort,omitempty"` // Page Determines which page of the collection to retrieve. @@ -5420,16 +5508,16 @@ type ListMetersParams struct { // Page Determines which page of the collection to retrieve. Page *PagePaginationQuery `json:"page,omitempty"` - // Sort Sort meters returned in the response. - // Supported sort attributes are: + // Sort Sort meters returned in the response. Supported sort attributes are: + // // - `key` // - `name` // - `aggregation` // - `createdAt` (default) // - `updatedAt` // - // The `asc` suffix is optional as the default sort order is ascending. - // The `desc` suffix is used to specify a descending order. + // The `asc` suffix is optional as the default sort order is ascending. The `desc` + // suffix is used to specify a descending order. Sort *SortQuery `form:"sort,omitempty" json:"sort,omitempty"` // Filter Filter meters returned in the response. @@ -5443,8 +5531,8 @@ type ListPlansParams struct { // Page Determines which page of the collection to retrieve. Page *PagePaginationQuery `json:"page,omitempty"` - // Sort Sort plans returned in the response. - // Supported sort attributes are: + // Sort Sort plans returned in the response. Supported sort attributes are: + // // - `id` // - `key` // - `version` @@ -5473,8 +5561,8 @@ type ListSubscriptionsParams struct { // Page Determines which page of the collection to retrieve. Page *PagePaginationQuery `json:"page,omitempty"` - // Sort Sort subscriptions returned in the response. - // Supported sort attributes are: + // Sort Sort subscriptions returned in the response. Supported sort attributes are: + // // - `id` // - `active_from` (default) // - `active_to` @@ -9871,608 +9959,615 @@ func HandlerWithOptions(si ServerInterface, options ChiServerOptions) http.Handl // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "H4sIAAAAAAAC/+z9f5IbOZIviF8FX06blfQdksrUr6rSWlubKiV15+tSVY4y1W0zRS0TGQGSGAWBqAAi", - "M9ltMlt7f+wBdv/YS7xb7E3mJGtwBxCICESQQTFV0pTW3myrkgHA4QDcHQ73j/9zlMh1LgUTWo2e/XPE", - "buk6zxj8+5UsrniaMvES/2j+dk2zEv6RMk15Nno2+ndZklQSITVZ0WtGclasuVJcCqKl+a+FLNZEr7gi", - "NNFcitF4xIXSVCRs9Gz0XorlM13QhD17+O3DR8dPHn//+Ntvn373/ffHj548Ho1HSlNdqtGzx0ePxiPN", - "taGjIm304cN49JPUr2Qp0l46f5KawFed4z/97vjp4++fHj188vjou4ePHj58+qQ2/uNq/KozM/5bQUu9", - "kgX/B+unIfywk4zvHj3+9tHjR98+ffrw4dHxk+8fH39XI+O4IqPW3wdDSk4LumaaFbCCJ2WhZHFGl1xQ", - "w/p/K1mxQYpUUvAcluPZ6IVpsOaCKXKz4smK5HTJiFwQvWIkkVnGYOHMehZMF5xdsymQP3o2+hW6HI8E", - "XRuKTEtDbbJia2pGomnKTWOanRUyZ4XmZnMtaKbYeJQHf/rniC40K9rUvWG/lkxpIEawW+2pS6mmY6I0", - "LTQXS3LD9Qo+4pqtCXSG287zxBCtN7mhU+mCi+Xow3h0xRayYP3D5gW75rJUuw2NPe4ytuL/iIx8YSZa", - "rq9YYYYyXSrDei6SrEzhgAEdQY9caLZkBWxG+yd59Z8s0TCI3sBmSRnLf/Z/PaNL9qVsDGRGnFFAEX4Q", - "Y8hvyOMP41HBVC6Fwln8QFO7p8x/JVJoJuCfNM8znsA6PMgLeZWx9b/+pzJk/jPg1x8Kthg9G/3Lg0pg", - "P8Bf1YOq65dFIQsUBfUJ/0BT4ob/MB6dSLHIeHJ4UlzHnYT4kT+MAzG+OxmhhuoQvDH6XLMHLa1mSNxt", - "blXTrskFemk8+rMU7OD8NZ12Dg8jBgpxT7ZG9GkvS5vf785R37JrRoGirevZT7hjYm12n2Ktddc0G4rc", - "9Q0kP09TnEevxKz39zxNJ1IQmmXyRhF2q5lIjaJS5ZX/TKHaMiRTza8yRvKMur9WY5GCapbQIlVGGNYF", - "c1Iwqlk6p7gGWfbzYvTsl35+vKCaXfA1G31416JakNPznyffPT06JpqvmdJ0nZOC5QVTTGhYXSOumdBc", - "bwiMbv6UUg2SumA0/Vlkm9EzXZTsw3iUlEXBRLLZnbofeJZxsTyxDU9kGiPUaA/XN0lk6nUiBb6D1rAm", - "mutpBGuesd+OXTB6L7tq3Tc15s+53Q/Bn920C6ZkWSRsOhMz8Zre8nW5JsdHDx+TZEULmhh71Iy4prc/", - "MrHUq9Ez82vEImKLhbEprtl8Ucj1QdhkFstMmVCRAp/IzYqJYLnIFUvkminiB5+Sv5tPzJ1G5SzhC87S", - "cdjCXGZIWtCFbjOyWvuXrj+0FIGK+iS1/ERT5IoISTIplqwYNk//MeEiZQsuuGbZZrdpM5H6SfN096m+", - "/fH0BUyztUXdlWmOO2fXDkGGntq2F6ZpnInhJ/UzrabkhJqtQmYjxcUyY7MRkQWZjdZlpnlu/js894fo", - "7cN49J4NEF5v7DH8K9vExAV5zza4cxVb80kp+K+l2Zrm7BG9otr8WCqWgiWcGrGx2IRibSZOa98UbMGM", - "cGPwUUa1uS9dUlj7S3LNChXICLujzA41XeDg/uLkPg4sectImMx4lNErlqltyvZH/OqDu3a0LjRc5Rnd", - "EPNrVHj9wPQNY4IcA6EPnzztlmAPnzwdj9ZceIkWEWdGd85BecavIOZ3Ar+3NQhcSrZa/qiv3lDNTmgB", - "VpJj3Bvfd3WJoUVBN3hhQXfCoAN0jo3iRwd7bExjJk7kOi81S8kVNbtGolRiDclomO2EhXo2ExMUruSP", - "Rmr5j18Vcm1+wx1G/lj/hczKo6NHiWlyY/9dfXAhoWGRrPg1S0nY9kKGLXvkmpv+eFTm6W9o92RUaYIk", - "dOvya5rxFFrOmbE6IxvwR6606bb6lOCnO+++s0KmZaJPqKaZXP7N92Pt3G5W/q05ZGSLWpGAdC9omWk4", - "Y/U5/C0mZKbkVCQFWzNhNl5EFdr1gwPNhbFWoOtOai0lUV9AwX4teWEuJL8YHWclzzi0jWsbBmV6Nb2m", - "TgusVn9Ma4LkXcT/0NZvUXHDOxXS1ByPS1RFl8+ccqJpipKe1m4ORIpsQ6QAmTkhl05nbW+4RscYFdh6", - "NB4xYZj/i9WCZkFsZ8E8K3kK8wxcVyx9Y10sAy9Ipg+Su06Ic9S0rzgp1XDF2+k84FXtQ3svr5neelH0", - "U3ptPm5uLaDDdtS5A944hTz8uihFpc7bXEDjbbvJ1j4P22k91Wz9BdB77jXmbrqPgLFsFN+mrvJAV4HC", - "CzRQRT4eKVB/l8/IRdXfiiqw1DdMkytjo+TlVcbViqXQW4Inj6XcSDboxFpitV64arSj15Rn1Fz/F7Iw", - "pp1ta1Vlq3V1jWi3DM4zTGA0HiEN5h+2w65zXTClhm8DaNVyS3AdcWafcL2p3czNVxFaElkKXQwwu0+w", - "QYevwP6KbgIuyC+n5z+TR8dPn06O391baZ2rZw8e3NzcTLmSU1ksH3AlJ/C7JWRiWqrpSq+z+4Rm+YpO", - "HhqOr6muTceSbWxlLthxmwGveKE0MT8GO9UwMOzmR/PzcYwvpuHDdq/nLJEi3anbh7Fu85UUbN7l4j8z", - "v0ZuBfj3n7BVrFepNM3mhnWRTuFHWJFan/hnWMfYY402N9n2/M2fzd0tL+Q1t9IoNBkjncWeEJ7n+eer", - "2Ow143me/zbarfnAsbs/jyrnLh//s6kkBFi+8/qbaV9vp9jirGrQ0iDtPtvzeQczcoS1dpSx0VJapGga", - "txfOvib/s3W/X5VratQiTUEqs9s8o/i+59w7ibHJ4GFSJkmJd3d7aK3XfDoTF+b3BWdZStbUCC6hKTf9", - "wgI8cO5EqqnpbcWyHDooFStIKVJWwARm4mZFNblhQpObQorllLwUSSYVI9e04EAhvJArIxXVryUtGLkq", - "aPKeaTUl5ytZZim5YjMBB8vYk1SR2ejcWPWG7oQqNhuB7kl5wRJtKDB9GWLenk5nInaXa57q6g2+yc+3", - "3suhy0LYJ8+iYBly9PQFuaLJe2Qozn7sRkfpPBPBqz5eMYMO5jyFv7EpAYYbPipSGs6L1DomMnZNhSaZ", - "XCrDTiYIJUmptFyzwtwPZaEVoUYtq5LtOGHVY8f85eLizBkzoVsbNuKUvFVsUWZ4ocqpUug3Yl7IzMSV", - "TDeGI8mKZ2lg1BjGULIo4MEmNatDXpfK2DGWvbi6Zip4teqdTPC6awVt+yyolSz0GI/ExB8JVa7XtNg0", - "9zw51aaB2XBC6plIVlQsGbmyziB/VsDEo67ZmLDbhOUatmAmE5rxf8DSTmfCb19yp7tXd171YMmI+X26", - "vaOGEPO3TuRucEjGTvq8C9y9Vkq1hbZVGl9tu6+23e/btgvMp9YY4LXJMiMgqjdsM07KzWdrYzWhlbCm", - "eW6GgCdtzQpBszkX15In8NdtlttL2+bUNxmPFBXplbzd3vjcfjiGecL0trXA7z74A7z5CSOBgDsfxiMp", - "2O4PsmGHOzewNO/eos2iD+96l9N6PvdxYfjLM81zBXrgCrtFFVhQfKM3ylQKYRSEfSzhRTrJaaE3RLHi", - "mifgMnhuOkmowBhMY2BJo8NpTq94xkEFZ/w9I2ojzLzQelsUcm12t5bEbSiiNspcCMYVFVV8W3tkoFvT", - "W5LQLCnRsBmTlGX8mqGaxQ3K1DiMF5MLktPN2qzCmDCdgOOgisZoHkKz7iFXXFzDRpbIH+jYd4nkYrNp", - "FYFm90/twNY2qLeve17BX7Qfv2meT3fR1fEXqZ+Cl6hdexr29lnt1q6Hz9AbHCOhaR9YP7V1dIedbTkt", - "1nR9Ya+eQ45LnleWr9m87QttTCYO51FIY1wcRG4J3EZEOgJXxpY1avM9S6uj5elyXPYWVOsL1EkoaD9u", - "Dk5q7kG4PXgNYl2HH3Ze6jYbh619mz3btkL1WLwb69yzcYtJ+ANKOXNJi6xlKJfs66ajrmYk2SF2Z9t5", - "tf6788qu2Rb+uJ/n6Cdv3x6a3Zy+gEf/mpw2vcyPHz56/OTpt999f9TaImHrmM1lH/XmVmzP10yvZLqN", - "JNvKCXuCrcjpizpt+bqXtM5eosbxXe2miGb76B10sMN2GkorwoSxVVSN1pZVUB0KYzJb1qJBAcEVF6hg", - "iCpz67ogV3yC11+MLTPmyaqQwl6kSU61IYfcrFjByM85E6+ZZgWx8yVrKuiSqZmA4Hs0NUjGFyzZJBkj", - "NyueYXBKw74hKypSnA+2qT21U5F68iurBaZwGs5fFu8Xmbx5NhPHU3glcRacHQSfgP0gCsOzCioUt8bd", - "iq2JXhWyXK4CsuE2osg9jIH4r//z/wIHj+nY/Zul92fiIQ4aLknBEsavmSI37Gol5XsipOYLe6lQhF7J", - "Uvs5wzAEfR1qJh61u0tolinv5rKejBYvT1/gzNZMUyNvZuJxjDJccsdXdg2mGvR9zSm6Y9yWQQ/U87NT", - "w3K8hDV3BlfgmCwkXJ2uNsRMV2EYU07Rl+KWVi7NldW0KoXmmRlrJpqzSKRY8GKtWiMZ6p6fnQIzDLlf", - "YBysjduzFu1gcyK45MRjf8yhTvArUo2FiwGSjoeXXLN2Lhqog9yvcbLb4mRBHs9BQszNjp2b/d+m5iV8", - "Z6OpmjvbNAFSIAoUu0zHlbi64VlmDxPFRCjbj3axpjeUa6vPasd9Jsy9jGZZ2MqPziDYK5dcaJcs5Q+p", - "WDqPupN5MJp7lrA3v5hI19JFMiFtecFyWjASqgYwh/yMU66aU6allmuquaF946nyMrrJA7eNUQGBCFmW", - "BUu9bjAbjotlkEd0JWXGqAgW0U50h2X0LPnohawxd8BStinYfTFZWl9LJlRZsMZiVjaE19SKqDJJmFKL", - "0iyKFbZA9IILmhka6haApYNDtOqaFu/R/Y5EfOz6t1lHCzYTfL1mKaeaZZv2kNHlP0xE9JcZGDs0/jR0", - "A3YEoZ7Xg3CMSkLHGe9QM92PJ6axezpxAS0R98K7HXw1n32o6F4hjNYDFNgVQaxih27qkXf9bqO9o9ry", - "fHuM2MDjF0kZeFHzne0YUtb2Ug+852Mra3lB5BdE5YMAZwq8tu42smBUG0H71W79arf+1nbrV533Jek8", - "9zz4VdFFFN0Wsd4RZnPi1yeIGoa4l0DShGtgZrExZIUpwrEY2tZL6V6eYzt6A5kjgXiFbb5Z+5lRiVQp", - "mXCw032Ol92awcsCfr/Tm9dXVfVVVf0eVFXGr9k6GtlyKlKegGP4ZsX0ihVe5qMv1J4tSLoxvex+yoI7", - "6Zqq92Zb5HxuU0/bWxG/cd0/PzuFxFLYiZAYxG5zqey9fgFxSUZ9goResJvGOuz5bP5Vd2/V3agEvqru", - "6B010GjBmWvt/2063rD4ZMWS97LU5/jGgE+4F+xWQ5j40LhHbE40u9UkxU1uRLr2MT1K0yXz2yaxg5NF", - "Jm8iinuhWTFX5dWa64GEXDQosHhaLHgZgwcTXM6rUmvctnUC1kwpuuzYtvjKSew3OOd7a3pLjh8eHQXn", - "9X5TYD88Otop7k6tOITMzeleMahNFmRSLBVPGXH9umjI8JXwc2PBIdbeT/wLW3/NirWay8XcxqvNaZKw", - "3Mf7D+VIwfKMJi7q3cUQwCDmPNpBCF0WDJKPYUafF08+DBdor6PWiNX+7ltiPyZGjoICDrDjMNSeQ+R9", - "XhbGOmjJL4XtaxqM6TLf6arToPjtaZzmFrFvT5He0M27vmJpCvCMK6n0jnetE9BCDTLq8e8nXkREL4W6", - "kFll2XlKrWBRtaiQb5T37QXh2G4GtNRyFCjMvek/kcLo6zrhQ1RZk90JdhhGgronMxqXnY3YoIKVis39", - "+drPHNt9vmc4+msY/I0Z+7kfOpYMYBcR8Ey44hB5uwmCXV2YEUyjEhNTG4O6lhClceezqkZqT+KljfNp", - "BOu6JhBZv16XwoaUuCWFE28MtiApWEvy9pysWZGsqNDKYg0pps0vM9ims9G42uqpFxiQ64Q3HEnUSt4A", - "SyXe82o4IsGJgAQcNo2J/bvm6IUZ7+fFuR2tzdU3eBaVpxfiulEZtfWHe0XFTQOs9R1QfONuN3r75kfC", - "BdnIsnA3sxdUra4kLVLDdM3FUk13VAAffTqG5qz2HY+tMkKqvf0uB5rvmSOhvfTuJ7iG1qVCaEx1SoZP", - "sl5nAQs7yN8qxYLctbYyWiEo5uFU0VlNXDZo3iatQulmj0aEZiEFOyDFDSHRNv5aZqS3VYnV5bglKkKB", - "woNoeiuW3sL9eaiar4wXnqyqqF/IIFb+dRKv5g4NI2b3Na6uwZXtgKe6NtMf2Ipec1nYc2tBhkaCXUPm", - "WX2efw90Er3Gu1DDDINsFBe660wzNIahb4WqD/q3AG/OvfX5ztEvKPjawhmaP2yZnrspf75T9Hd5LjDx", - "0gJa+1m6D3pnur+Yjs+kJR7cL4i1Yj6u5UHYwwYZXX13KifbgDV7y4s3DIO2fwZ4N/TlxxDUbWbzVUi7", - "u2C1yKxfYrIbulGj8Ygv5l6+HYBugDDA9wM1XM5VZoi1RjGYH1+HjBggHddidEk7yxU/+kaRX1pXpOdn", - "pxVmvKqSiFOZqCm6dKeJXD+gOX/gGPjAMfABOkPvt4WplVPODzZP6ne6wx3Mzjtv/Wjabdh5Ml1K35Zb", - "b/NEmm7HVg/BU0Tt+uyENOAXCJYwpWixiaUwguhKjOrN5mURwdow1jZAQ9gdXtn1NytJsGVczxmSf5Ia", - "A1kdOl3J52tIIVdk5j0QFk+09RCacXMj9oFN0UfZtwivWQF0WpRPM9eCJVIkHBMV7M7BR1ou6kmgQKxD", - "dAvTecYkoYWGf8iCULEhElbOgobyjnIH1vy6u93X9lhEr+nBMYbjaz8P5amzFNMS+OaWETfGYFTprXDS", - "BWOTjGltuHv+M3n88PjbBsA0F6TMc1YkVLHwSoghX940N596eUr8Q6n5BtxpjS9wOmbOc81uP8ahsuUR", - "JLIOwUOHls7b3GR4++UjoJkV87KyWO/Kuuhz9XycyfthPGK3ubnX26e31iG+DR7QPI5lsyNiOwmP66Mj", - "suai1Azk4sPHZCXLwtkHNphhSkLZ6b4xJxcNIURaefo4WlYD3S2RV+qXF69IRsWyBPc1XfqYck/221Pn", - "rIGMqgW5yqh4j/DHzitUugfkq0LeqNDBQywE/zMjKoX5djZaFPi/KesQmi41qVvl/zOWoFjHwgCw1Pds", - "MwHYIpJTbv04WtNk5SLdoxLfIufAMdSysDrMIewrXZSJhryBwAidxjBVGg5R83sPsmvjxg5fQ7Y/phPc", - "Y9Pl1PAtoUWKHCzV/IqK93P7Pjob3XeL1AAJt4aOywukWVbhFdWHrcPJdiSzV2BiTqfOpZgnNevygCc8", - "asDG/HYDLVg4gYEzX9SshFIZCwFfUqupTWfinLFnpMvUc7AGlb2H8mZisyImOV2yP9mvJiX/o6NvYrYS", - "slSXhYhbMm8Q3coYNP1zs3S7taWlXhlln1CfG+k1El90WTTgBXP8mKArt7FbCC3ctkrjRZNw2vHpnOOP", - "pNtAq7NfLP34TkUOM9EOsXixWWp6O+fp3ZlKF/T2NN3fUDIG8+kLFbWPLKsOZkzY57z6DcI+zsVC5eyr", - "XlvxhBJ5ZnuYjZzpofz1bYI/YQWo+v51iVFMWdiubGP+JtHxTnOze+o+AjfMxzgJ3jAFsx50X8VGRg3s", - "eD89QaA/FOaYTlV5RARjqcPDa52phuqbCVkQCLqB5CxCRUSuxANW+i5d8DyOVytzvDEnPDjYBfO0eWiL", - "jW2x/1UKRoUPg+vU6YsK1836vS08YlPdh7ct85mz2eDCBZumdevqIVWxpGARU/EECcSfYVzPfjOwxcL5", - "T+Xfzez3PI1cJnr1291IuwNH917sYDTfUOVSCe/mVndSu791CqPadYato9CeJ5ULBL7wrgy+qPahlgHm", - "UZvDdciPj057CqFB7Amoox9ErjefZl15ltkb0fRApv9r24W19JHXXa8YLQl/UF34Or7XXgdgnVF1h5tR", - "A2x/tiEzDK6ZjYgzaiwmhxUBgaZvGfNbDEooa9JhVDZsyYYNGTX2sMVWoJrmLkA8mEh3usznHMrGdfaJ", - "jhL8yGxvl3DcNIFaz7fT0UC81TpufHTheuVt3AuMW+9f3A9zx0P8+6RC92yTanqe74EONNxQh+kHxvoW", - "bd66NMUGHOiqbR5iKCV6z6yytf/M2bg/HW2DSw35FWVibRu3N2EjiBnkxbt9TcWmXT8wzBHM+s4ALTwC", - "sXebBhQbXt9qpVviaEPoiNCtYZv3iqanH3qLp9VXS3OXFyZnMQ17c2zNkyv3uJ/ezftiF9ntA9miLYg6", - "IBm7RiPaPdDxxdyrjH0e5uzxOJOFppmldb93OV+oWVpJHVxznITCYfxtp33tCHd5p9zDVG9zm7nlmGL9", - "ixOFYfstr3ZOMORA04NaU3XfTKNUrAIJs6dsPBNI0BW8VWtFFqWwsFlcbxANwyV6xxx24eXDe1ddDHMr", - "xKoNgtbh7wW+vLx4RX4Jnb7DWNB4v/wX/B/7q1NfE6TgvtOW+J+VEsKvzYGqAte5mNYdzJe01PJy3HxX", - "zOFmV7B0jr0q823T8+wq30XZs80i+qWhhu6CQRUN9+uBG1pW6RsbRIi1mtQCp/DCXV+NqoVdpaZDoY23", - "Hu/DeTF+6T/fezIXJ3V/L19Ik9+6MpMaRO4jfOquOFd+Ecfj/2iE6eC0djQe+3nxL/Ud5izIGsGf4Dp/", - "4hB/9J3OCkepUj/7sD6aYmeYyb4XfWApRpDbu/JFf7S/3CVNQeZc2xDbqjJqz4RDxfrdzQnJHijkq3eU", - "u6QtoOAj7m/VNlb1m9zutyrwszduVnelc1qpn9ErVkuK1vI6azesGhf9cpv/7L92dRdW1G0I7SaGhgd0", - "HndASXVZzicrWsSyxbxeSeCDbSUDFhnV8wXbhtz/KqP6FWN20PGoVHTJ5vBSt6XlW/MlxLjZxgeC/q9T", - "tCOYf5uYd2FN9hrnemqXYOMuLI8fa4itFsrDLYeRAn+D+kZQz/bS7kBbTw8/AnA7qOXnfExXpcYie9pV", - "ud0wHanmZ9tzZT/DTwAOr/UFwuZ5qDy4KghJFmUBl1ILAIvvrrc5+FtsEUIEiegg2f4a7nWnQoOyfzDs", - "yANOhIVjkLmk2x9VW4QLqWk2OIPXnE1o6NdGLN2TB82MvWE45GALqEjDgrGXBaPZXPM1m8MxuLTfhDeB", - "RpyllO/38DzYuXUgf6wBVMU7CYFpNANcGIIDepRF95RkwzdCb3x3edsfkGgs15uZ6R52Aq7X6Ezq6U2e", - "622m983gjRtBWzoaWsMuy7ttB129hKEi+JvwdxvtW5ceqnXSm7smPD7fKGDHBKiFnxtYP2HLUbfMskzp", - "PTZS6R+o4kPPDJa4uIJsNfuCdWW6CZ4Irjatx54vDVrOF1+dLwq5/qQ0guOFaobReBhCiPhISltWc1VV", - "h628Oe6pb0y4xneuq7CUeohACoiu5gubb3kp5M2li0QMHugWnGpfSelAwayMmF4b8av+/dNPcno4kJ1i", - "UAzoT+WaFTzpetg0BEJdfk+yncg0bo1WLLSE1KzNPpljLGf9PP3PUuk9siafm12eck2o76EGBaklWdP3", - "jKypKI1K8F9h0GLo/7IdXdGMCoufc+4Pe6nYJKHKSjcwrLAQYmKv/wPK53wa5KYvER6wsbOApFD8N5d6", - "tHVfYSI2ZJueyYwnETQnyMjGxTdGXSKNkq5VdU6kUOU69zF+E3IpxdyJ18tn5MS2NtZj1ZQqoqQU5n8N", - "25YFFWDXuoAL15GDtOvvTYqkDj3CAajZguH5zhTTOoPnikE9YbOaHRtMMbYIAWdJjqztUcPQ6Ac8WvvY", - "r/ZUVs/EdmZo0AY394YpGozY0+nVxsk3zuqRur06IJyUtRxjGFNBVK8uOLs+YIiPsey9krWssbMidjR0", - "tvZjSdUIG1dcay+7/2nbyXtVipSLJSZax9m/wE9cYHbqTS4HduBPjPnSvg1OjBYXxp78SfoePNA8VA9k", - "aowRFxgjXwNugC4VdGPhzq1l2hjLbAkApJxYBHaHqm6GgebOf9HRXpbagwXZLmyk+Q0vGBZAWbBi3AR9", - "Z5BNZNWVj5uDU3i/nfVs2wTulMia1fm89ZT+2cxkXzWMbKBZJhGlz53TmrLFx4VANqUFvREklTeC0CXl", - "Qml3r4BLXJFWIPozUUk4jNsJCg7YwD4wXBJaRO6mePs6hJkEbGKptz/WiC/4BaB0Dg/yc/tju9Hr7V0r", - "jJY1LqG5+xV2c6vxtuCZK8U+4BS+wlaVzR6cyfZRcA/lMZfemutWD5As7iqoN1/Z/R/gPDde3Gu9NIHa", - "qdi4xrXqZb+MuMhLPdfyPRNG38hSB//9bkcl/cauyV/Zpp1oE3vLtdLSJhcNPyMR7dfes6/qqi88LAe8", - "ETrtMGwXnVpN5wO9qw2FBM5EVbcV3ISXdZ5dGjXo1eud1Bw49Tm2jndOP8cwl/0BaAPTcjGYPZ1DQ4Xo", - "3vFjfNg++4hlubW4Qrc1Wu30LxNAPi+4LHz9cxtydnzUcuAV9GYCFoVrUD9lM/GjvGEFgTRGhW9zK75c", - "scI3aCaBHj9Fao1YN0MeHQGx9j9j+aF5WSQrqoZusTPbrFaDz4NdhXM4Qx2Hx5B22sPkXv2EutcVNKXv", - "36WZZIyC3M8HjaSZOLEwA0YHFHJNLnNWzEvB9TyRSs/BNXYJ07e64xKbXkZPcXgXnef+mr+H3I74C+qh", - "jeGluCcheqhHIYx4rPkW7jgrwwFwNRYI9m57RfbdD455x9OjCNO8vzdnhVtuM3AV4uM2S5RWm5kb30Fc", - "kaPpk6NwJ9n3F67IH46PjqZHR2MsmwWvJsGD4R+emB+nWLATk53XpaHVnD5j4BuVSAU5mpLTRcR1fQT5", - "2zPRUI5/hCMHQPWMtsNdj6dHUxujby858z1Rt3FDO1Ficc/OfbediNw2SaKqQ1ldt5CS7e4Ev1/HTpDE", - "HMAfNS+4fW2dQxZ5m+43CDS9neOF8mMIu6C3GK0WE4j0NhJPHgr1mXgli8qAgs1buRsa13k1RtyWWo9q", - "JcssNVs1TIzCUnPObU0Kds0E4KMkcong4FNbE67+zlKLka1dCGBgTJ1BTZOOMeWQ6m9Qw8DLi5lbJq/g", - "0mThgumta4hvyF8CAPt4dC0NR+4wkQv5ekMVwaEOBQPfuNSMI0e0VtKl7kACqrZ6/MIj2Y7TCfdN81g6", - "x17OgEr3Vmw9jplM3vfGiGyYRkDQKbl3WT1pUg3y3+blLUpzwwSknra14HpaM30/EmYSEsLdi7DONhaG", - "1JxPlvElj2n3HpJyqvTYnGyXHhihFyorxgn2xGIHaYxa+xNeRQq2plwY0VEK0K3WmdugAV7lDb9zqpR7", - "WcDtGBsi2KzkjR/BOaE5XB4XjDeCZOxSh0EyltaRO2ZdG7G1fXbzaFYyeXg2UFte07pzBQp7H0wMj2eC", - "iyQrU4dW5YR/tnHuZfRjRx48Auy8YcEr9LaBINhkgof/sKK+ircJrr/cvamjIt0j6RPWKWVVvcMuFZqy", - "XSj5UG2iXVZyq5TbZlB1ST5vtnbbVS0p6CCBvfDDfHZX9zUQf82HwOq/Y900v7aPf7FPI++CwdGtanE5", - "izV2ardPfesJviioUHSfZD7/MqGrLiorQBFKFBfLzAu1tbxGytrg2mFkwEmrU/R88vW61Oaad5d36nO+", - "FGYP1CPJ6vRPZwJhi6+Z83HQNBD5gi1p+GPB0jLxj4d91+yMze1Xe7zjVtdgpyEs0DcoOl9eJeBrRz2X", - "bW4rz73xCEfYucEWd5vtbWzJiN1sMNLukI+8vp43BvjVOQQqGMeMv/f8Tt+jml4Ot+Mo2GMVJl1js30t", - "w/Z5OXxdxa89LuOB2oC0hY4ICpu30FYUH3H9qmSAL8IVu3O1ZWpbfwYEbTVPmjPemqgRmbS1Q9DS9FFE", - "/ik3uJJEvZkTcol/CBu7v5gzB2G95ia2YKyGd4wjYhoLfN2bERJIjeYzKAUgM1tFqIpc7M8Nwc93FTn4", - "MQY+7tjG0HWofJBGn8PEJdL+oS8qM5Ssh/I6d6wLmPLtpKfx6HaylJNty2/GshPqSA5qDDQTpzq4mVFS", - "IkwwXCiuSg02tbkmZBwhTuDuTMWmSnhvR/a25Nrjmlh7tH0bV3PYM0q9tdeb+bXpVhOom7W/nRVR2eAB", - "x3coRNujsl+0NXXIt4Hq6TCqOa5qjbAO1awnkzT28KpcUzExvYJQtkDXUI00uOvoju7GRJXJilBFZqO3", - "5+SFzDJazEYIRvuyLCQCyg6tFrpZX8ku0Bv4beu0euYR7yGcyR9mI9BOfkY4n//6n//L/mBmBvPazf7Y", - "okeDHeQzwfDwbK8+GjMqrNHgbItWBucO0huUw9DKm/aMVdGYtDp4teSXGNpZl9TZU398Pddfz/VneK7B", - "5jvYqd7hIMdNeX9Wgd5Fy7LiGJ73sdaO0lSktEgjFk+NIeNA3nVbO+hN26seMCs8qjwXKb/maQk5rWYD", - "LKmwCRQKt5X5UJVXKMSIliTPqFBweYFYH4qoa7qKXNxaMGQ4lpZtF792NssmNUA1poCgmvrKHODxdany", - "YC67zFXbjx/tv6PHZ6CrJ8ZEy+9xPzf9tfJroPKnc0zZKvt9jV/aJ7BGPO8XG8O4psWmC+n2IigVXIe6", - "bW7vYOOe2QYvoc8vscC9w9mgWhf8qtwL791XLTE9PQ86isDFouvHFq+ADxmBklOQ7wmQPLKO52KtXnYN", - "T1clqOtwDTAvtDbsXuEaW6ruu0m+6EX0jWpSpyz8lFKqaeSJJc/nHi94IHxkjbrIvsnz9uiOga0f4TnF", - "quG8kAueDfcFn2G73hflQB/bYYLM5yBrqZWEHgZHNXtw2ekeMK+hsd2E+jDlHDcr6vcznapw/jsJyI8D", - "g0WTxXfY2Nur1x0QHrNZfS667s2v8LXXR6jaSm2NUjMhXB4WHXJ27ExwYe5BLCkLNm5UXAAAkwVN2JRc", - "rCAiCMsteNDKoIhVNfhMNGuIeDv4ygFvpCSDwFUowYPGsa0njfxvbw2LMiXzu6jK3ahE2N5VP4f1BW3k", - "hkOd7ivicLFiivnqhBTqSCuzVr5chceJ/0aRX1rA2d6CfX52unf5webWb7By6DGIg0ke+jDEsSTjZ8IW", - "eNgPARKRGQRoWcBBa+ze8UwgTpH9uXlbglcoe4eDD1zwz4orLYvN1JZiR5gzhNfmDdjCprzmimRcWCgh", - "6nDhaJ5j/HhnlvmBD0kfKvB+Z6QLAfjjt2jLzhq2FYfbYLCuwRoa+QYX+n+wQkLqtCyYs83MLroqNZHC", - "/wkaANTVFcskDi0F61tdbDh/zzZdCPZ2NJS4ALbgJpNG6LfV6dg61xtbh1PaydYsS4vbEEkoC4ndKQuy", - "uUznOIJLirR2if0r+SvbBCFZVa5kbauEXOnZKC8F9G6O9nM4rnsB4Aa9uFNfQD9dQLKR+7BZ8/q7tTK3", - "lARvKNi5mgLq7YIvjTAwrP4f5z//RHJaKGhVDx+01k7QfhpKRedCx8SWoKhmHWXaZ7yO/klmVUDAa5my", - "TM1Gz8gvs9Ey15MnWJzO/POxnI3ekQ+jrS7Iscvyndsr9m6CqXbJjoMbYbfkPdvE2FCbVhXjsIY5xW5+", - "K6rmuLBRgBYEjg9l94qqwIenK5KmM/Ec6iYT0zWs86XFY7WpFLjsl811f8FyJlKoDuQihaCxFUeN78MZ", - "uiCx6FIEWLB7RbIEW3+HGJbehcCJb41psT7qcOfUFmi3075b+EmTVutQtjy3SQlAs+Njj3f5FVL844+v", - "L+R71hUAY36qXOY//vgaE7cyKd+XNdBSyD/3iefmwk6TFZsb5vn/uCk4gF0VjCopMG7BIrrCv1QuhWK7", - "Ef1WcH0iB5tzjRk0BMxMvKTJiqR8zQSYcvfs3bUYww0iGxPtOXLfXRd8Aj+hijBujt9MUCcwMRsOYqdh", - "ociykGU+udoQF9qCnrR761KXELXObpOsVPw6VpYbqIgUMcSx4FdztcRBfbVOEIMoEZOMlimbPJo8mSgp", - "BLMFO98qhsUDfHaNE1q6oMn7IPQXxpjOxOsWuahyL+GDuZvcZXiXBzEdrbZaa9Oe3+sOzoENsZJZivrH", - "zT86IeQ+iMKqp2qpF2AO7TK39pQ8QaO4/zKxUVODZFl7r5/ZnmJlR5XMrllqtOcEt6gdFu/SZv5+66dU", - "0yssCn0mc5tZzAVxBzDgmdv+oAuQu3bTp4abay5YOp4J3PQ4VLjt4b0J/trY+hayA7nKbmmiyZrqZMVU", - "P2inm6VjBBwPoLDzTJhp+2k0zoXMmaAcDwYVelXInCdDD4TrvG/fuG/ix+LMzSG6exot9z4cISP2PSBD", - "5hqdYu9JgY0730vxx7RZJBcAt0Qlw3FDDFruoLHdR3BBAv2HPyqzfy6tYoM0NSoIzTjFe+clfHo5Jpfu", - "wEW+QTV62cfnilvxXVXp7jpvP34nVSzYdx/Vethhhh0T699N/TZVLbrVWzeQS2+kZGjbZFnsnT5mCPZY", - "e93ifHB5kz1EfaRsqjPP5jkrECjoEOk2AFEAdzgzADED2NXmgrw9f1F7Pq4+yZndFPAiX1mLd0ocjLCF", - "OvymRh5CLd0NYYEYiZB0Cr/WiLFAT3dDDXbeSc7P+HONHm/b3xFJvv9Oqt74LwLCmi8rjSWM8HH7UX4N", - "uIN7XkSekwW/tafYCx0PKXJ36XCvOkf1rNxHdloMxqj4xN92lKC9KBh1/oecb2AC1aYXS2Ot/B8v0Xal", - "dj0c9rFNFzQ/pBtB19aSbNx++1IkjNYYauFDdARwa6eWjR14qPIZHZ3veWvpzZ2ol+oYfIQyqsmC+RoH", - "NkW50ztN02sqEjb3SZEHyTdktMg4vBHxNQvrDGOxiiqeEEdPEbYTIPFp8t5YSMJcaWTClLLvil03oOfY", - "BSZ/GjbiPsUJGcPOVtgaHCr2HA9dbz0JzDj1gzSqMvRRHW1fi1ZgBR+CH3iSScXSM2y1JUIBPgpXBN8y", - "FNGyt8ZFrf3vMlAwhlG6fbXDoMAkDGHdJzRpWxyKd3HLG+Ee8nYh0ZL1NW5xl7hFo+XMCR7+WmvF+wvf", - "QUfGtvu9CVJRLaVbuqCr1ntN98tL9F0Q+h5bOEAzbuKwCNxgr6qHm9gNc1Fm2Vyx4pon7C5EmOl/TEqB", - "IhOqocNYTqbtfCRflVDXI2x8cODUu4Fpb2pTG+EjLDzMlccx6a3241Ba6V5Qnhh5kc6v9ngUfI1tf+h6", - "GqymZUdxYZMLmWXyxog0lBR903vtm35GUbsYoTLXrFjvEYTIEwcac2E6aDPvLED6dPNpmIM1/2PwuXPK", - "s/3o6sLtNL/tfiRtV2Ch2gqE9SKpQ2l7QzU7oUV65vqrlYDtJNoZc9HH+ggf4w0QhfHOBGFVsaghARN5", - "DdEv9tBsZ/t5SwgG4JHrfSCYKlCj13Er6rwBwb/zFmk0/BgYyLAoYZzFXeiPO5Bpux2PwijJ4XwMGm+z", - "+mrhmOCclgVfmls4S9u6PVAfN9RXlEFvKa33xbcUvguJHH0cAuYw2MudV6PVdED2nu/cp6q5CqDvegZE", - "r007gwJy5+Y+kjpaW/YtJtj5j8Kw6K1TjTT+IlM59sp68DAp9iZTM1Nq8CkeNSww1FrSOm7Mti7oTnG2", - "xWZD43frtU6fRYDl8qquyEdb/UcvajeUAZgQ9YsHXAAgzbFOgLKB0ghWDJm3xoyiilyeFTItE31CNc3k", - "cuo7vISEUXPZkCWG+l7a4pQLzrJ0bKv4ucqt/aO3HFk5KxKz2WJVfs/8b/5e1bxWoa1y7+i//o//+/jo", - "6P60AdUeILUfedaLcn1lbswfOpepusb1LNgZtS+PQyDeTZs6Dl3OCmXOWUGuSsUFUyqwk5tOPwiCZsPV", - "Joz73DePyAIbX72QhVE1Rb3of+X5A9h5viCCsdQC+PZIQ14VTXCh5LmhZLpLCOOg0MVonmBM4knnZ7AZ", - "0UEkoyWt8+LxI1vSzF47ig7MEj+99iMuvZ3zdL+Vu6C3WH9Cd92+8MdvFMmASMf4xKePVBnFeVnkUjE1", - "JRcrtiFriiXKZ0LC8wGeDjXGU8++KZgLC9CsYDZTheiVVMwC4bY67s1samzFwbCOmPZiWe5PRHt/HSin", - "uzuZ+4d6akI7rL455rstTAlXeZ/iJHpDlJaulHDKNOWZIo4iIzHttoAaZ7ZFc/EIZii5gj8gBYvNx0J8", - "VJbiaW1ndrhrfzKSBwt2G9oauxlADNRK3giH1mltZrfv9YakMikxurR3L2Z0aOrCGeAJ2MggQolm6zxz", - "FVNDC7wHWCChqU/p24l9p+c/GyvtRf8V2L0T2O7bFBGjYJYY45JnVMSSEx1tv/tXgiS44TaZ9RUtYJDX", - "/Q7qTbfRUatIzwziOhO5ZspDuoclDhplyuB7RGC/TAu60JedFS+qHfCy8uNoWkB4EqtPVcvD7AdiPkrL", - "jKU7TrhIVvyapbtO2TLIOUu4SNmCC65ZttmNAUykfvoHxYU4RNLKczDwOEQ9sjWfWKsvRCKyxShq+tEf", - "egDSCb6orujmEyP4la54eM0KFRqDhs0WstsO7N9s3KdoboXC5cuGuFhR1VV3F9iBHxDYZMxf4cxiFEbQ", - "YdxDqLWmM/EcWxF1w3WyIjJJykKhVUq1zSdJsSZw/a3ctNUkY1RhMiB2wyujaOdMusBgOIPSXh+AFafY", - "9jhwK1eTHLVLAeeFnBsdLpZzJswlOa3VM8MjFk+Dygs5waZQIR9bW7M3os/Pqs/dSLHcpD3dsGaWvU7Y", - "uuvVHqUTuc4hOfKKqqpsK2uIUqirYWUK1l0HqUz+SISsPn5VyLX5DY8e+WP9FzIrj44eJabJjf139cGF", - "hIZWTpIHhIt2Lxcy7MM0qORwvNtg3LCbnfzNX0IRHHPXQzcYKwpZRAuIKsClrz4l+GlTtzKUvHmBia9e", - "VoIj+4rBAS6vMq5WA45o3X/1N0/DS0NCtE63XYa/NcmNHFwrruvVB+N3A1p46W5TyrNM3pCNLDH5/T14", - "mcSSKe9UQ2hyEIKlgOiP1k0irDjYORFLZLsm4d5wNNXMa57Y5k0m8M1a2feu/9Z1tkd9xLoOIZDEEagO", - "YLNC3sK9HD7+RlV1oRWR16xA6wli+msvJnkhl+hMaN/cPofQlcHPqbvdGtPGwwwwt892BOYXpWjYigQy", - "rdEqUtp+tqYbIl1V4TTIfvZBMMHbzg5wYP8tYMDMfpzDfozbSeF+rd8/h5gq7hU9zPR/43veludvhQOK", - "gIDgLce6qxpO3SSgziCYOK2ABabgcK9oVd8GatF4TYBwHBZFIYXSUu2qXe5qE20FVjwXDemKnbhrU70b", - "IUkmxZIVDQyBEs7IhFx6q6DRsLIWMLgnoEdDyVYIx3La1j1TAjfC6liOLCNhXY99acVnLhqkoZnMn7eF", - "eS+yrZj20M+rDIvLFYzt9Ln5bjxaFjQtjXLZpc2f/cfw/LoTWW/Nd+PRtczK9U6E/Q2/PFCseTXXHePL", - "K14OaQCzHNKgYuWQVo43fefd0z+wXH0Gph9P2F0XIK5XSlrUxq1HdO8eWuA7CCMLwhffeBTBvgki1a4a", - "yOSCsS4m7zvRgrH9JrptftUWHTZJ345oDsFTSLNR2YB+YP7q7D9XEhu8BvbxGMF3jBHObfCNaQH1tdGu", - "NGrDwlFRRZJyXWZYPQtbJoWEtyfTilzJUqS04PaJHcwnTBxxuDL29uXuvV7Nj5sdkHtlPtdyjtvj/kyY", - "KwW7zcE6BQWWSHHNEJHdOjyMlIwYrqbnDn0MPwWlcS0rHQ9rjhMg8GP8JqbTC45x6lG/yQUQ2r547blZ", - "K22z59FExm3buWFkZ9zn1QjupA0xVIGOzG1SDYS3zGlRMFojIK7qgadD31AxaALW1FlE1fobcwl1qLte", - "wX6u+9GgA7/c5B6EV9m40QL2Iv7XfV88WzE9HXgqwkMAPi93AgBGcecjUNG2X5Qsquh4WLtfy4AZdkta", - "UXJiERilSAKXvTtPDB7VayihryJ92ii0j5oGGg7RaUCC4W7TyAP8PGjmpaf9dFSLaovPJFjXQ6j6tzl4", - "WQDa25VPBZ/oryVFB5dDZE2k0JQLF8LgZ3e6ICXeZd0t1y2QzJmYYJD+PX+3NT/er80UKHDD9T85+7UY", - "dmorZlpgUoin8smecGyaizP0wNUOEvix9IrNRHXS7AxBRbHpckr+/IMraW/2y9VGM3X/01p11d49qFUH", - "l467teqsiT1sG2Cjtr1jJmQD38JtD2eTuhhzj3SDESI+dRrP6EIWM0GzzC6/M4n8S8oXZ9MEWuzLN2js", - "tfburJkKZHs4rLhFUlVOwGJgKdOai6UKqzCgM0YKXchMeezWJROscg22IMnVvtDfz/Pcx993PVTZeFUX", - "H+MyMLhqwsROv4SQGP820Q2mWEX+OvxyP8HYA+HX8JavVVr7qkKVcK8u9otr7TiTQLyTFDTRdUR1G+jp", - "Ro4e1iDE+gt5Xr2RxftFJm8GM/LvrmF/UKDrvy6WMXQgqEcw/JXQ74BgDmMU25U82q556rJ6KJCUa+g8", - "O1GpTtsivVUSwdUG2gfNe1uul+8csMWrmGyAHLOsmwYZp3dBg/NHbKFA09u7GB1KMPWN3LRe6K3P9kGQ", - "Vcea7RvqjC7N/2Eq3RuHyDo0XWNpWOby8RzKXeR92BZNGWZC2mPXthHXDLvrDXdwZL02Hzc5BwTZjrbz", - "at8qIz+0pO6nKzbSNs8G1Rzxz6NDnWf+imNj2FQtiA2DlyrUcnT5WfAFWbis3988NtyZBm4y/sEfgBrq", - "MAVSsAnETNwTUkwKlpSFUf/37ZN/lQRSucPUttByuV5zDZDaw9NrcybSk6CDSKKy+YQEg1TCJpwxYsPX", - "EtbAsT/B+DScCblnrqHjykM6thfLmgeoRs8XDnXijsbuWCet3bQF5mR3kixuiRdQ5p69BZs+hpASpcxh", - "ohSV1vr9BKHcBaqFvXuG7xfjHd5EmoLoVDiAsfqnQQmPyoLokDmfGCUjur88MMZH5Na7s9ibY28tKxyi", - "l6Qqp74/4gfZtYP6/Nh05SikYY30zyZd2NYpPIQb+yfo0qwUPiSjx3VZUIFwDoyRK7aQRVBpW9MCylVU", - "OgtvO6HCysAcuSek9onX6v6UYHlCroi2eBFUQdmcmSiF5hnqxfCZbUVLpSG798P2HdCB0rJHaGc/gkvP", - "ptgL7aRF/+vupLCKtBD3pOPQh5+2Ttl6S+nnOFUdpUL7iTJK42+AXQ9B9JdCVhAFl8/IT7LqAUPZLDgX", - "PjKqy2cEiWDByakF7oNNWLA15RCybN2+jQyMwIUdEuBhFdxwfS/dbSE4fHdtEZANY5yt6DXHALnd0lp/", - "cC0+jH1qbF9LmEratGsam2VbnfAGYE+7bkADrydwxLd2R1KwlOu5XjExt375y2fkBP5qK1JZUbrghdJw", - "RxBQMRx3QIrvKR7DLOzUKO3LZ5UcQsSNtEJJNyJtSblQmmCTWpnxCGnokXJ9h68iTaih7l3VukcM21Tx", - "OwatHcAariNX9mtbHkxBB9S9SgHePGofD1OKv6+l+9neB7qwle3v88O+t4YTyPiaN8n35FVkVXBuIcH2", - "qeyOSdzG4wiVNa73Kr3zJi7UgP0S5rR14xOIZCWLA2WOVo9uplP37GPRuiVHoGyQ4vDS23geDoOkv1HE", - "3/srX8ImyRhmSGICi62cYLFeME8PS+/Lm0rZoDRJaJZgwRZMDFtLYelEgXRCMyZSWpC1FHpF7h1jahGj", - "yQr/dP8ZuXx49PDJ5Oh4cnR8cXT0DP7ff1ya1iGzCRWCX7NC0WJD7qV0U20XxZeCpaTM78OQ8GfMsr3n", - "vplUNZFSurm/A8yuXcIvIoEe5zg/kHPO87Xy0qnGrt+GY0tM55//q+Nv8+SXZ1Qcaq0gT6FjnWbinAHK", - "Tx1RrgU459JSOpEhcYyPyDMNz/GAfNNdd90XlIAZe5vrfpQLT/a4qVz8arzbTdGdUJFgqbY9qg1DfVro", - "AHPyVK8a1Hy9z+NbSO3LlOsL7KbhlVqvWcop1O1rwOfUq7u3thBsfZgDS4nvJttMd7YVTiCI/GNYWGU1", - "qq+GxH8DQ8Lcvxr7btzeeD5w1Qpe79Bu8NTrepfbGt7EkRuxF5nAVAnh7YfdrMPC37aweGseC1l8gifB", - "XSmBBBEsllIzWYL/fM82PnTdrQ8GCl9JvcLa8rVlO33hF6tU9Yjuhm1zB7h2hg0BkN3nzgeYRExy7mMQ", - "7ZtEXiG5dBgNd7JZD2Z2gfyAtfprgGBok0895htfWNHQ0hyNzvZa0MC+O3CdaZhIMLGQ8rGZFRWbL5Rf", - "9tWwBigRnX4DTKiDBVEdYnGJYnBEvbT1Aki0TutdGGs1TsAPkRciG54gmrjYoipSpOl7hywznYlX3RYU", - "MowmCcvNlrHFXlMoCu4c3bV90Cjk3vLZVjDGIJ08m94NsRT3jFdyzYaZjIjroT9qIXvR9HSdg/Zpq1o0", - "xFxlt3dCgmA3FnMmcpBsJacaKa0FRe5YCnddRhBBH+EidIrbFl/9auh/NfS/GvpfDf2vhv5XQ/+rof/V", - "0P+Ehv4WA3dHgyiw9NtxCiH7Wcqh/qhZGZuS3TTyVdzKP3Wpk9aNW7842PoUqsxziVmmmwi7qcUA9Owr", - "mC4LgSxkt3SdAxNDX/IglKA4S16Kcr0Vnicw3LaxGPrbmc0u9ttPamyjT8HyNIy0XA/YXXODu9hxdqvn", - "Po7dmHq7dGQRXE3jhp0YwmME/G4P0xc7FC/G9BF2eaVOamU8AmBgDDX0EPqtskwQcDcT9u2n6uUTGE47", - "P4yFNKPgz/dFbESwxk+oeqvpIpZh3wslEIcTNEuzx/xgRZvj3fG8thX3OjU0mX4iqKeRFJlGq7gG6O3F", - "cu9dhLPb9Am0xs21oyrpAhmsbdoKwt3JEI+p5+B+R+ORe9XbFV4vjPRrK3R6S1zkYFVmyQwfIoijXNgY", - "nYYZ2fQWA+eSrEwrZBIPpgNBcqkzcqLYANBW4Yx8TN2WaZy4mNkBux1CKFOmjOq0WraIZuzPLapgZJFe", - "4y+QGJXngHmAWZuu86FIDHYuz/Pcdh0CXj63Q4QjEE9cO/Hu88/v/5qN/0my8X8vaUD/PUsKYhJLTRD1", - "6Ja2BBkmF3cSaW0Z6YBghiZZA+5LJ5iJFXcra1Z7ocdVMzGuhpdkG1bZStGsA9tZO6Mo3Y5E46ccjLB9", - "UXY32XdjY6vbNiPfhJY89RzsMOv6IoD2zVc4Z+C5diq2ukpUSQyqP2lhaFWuKn0hWsG1ZtVYR0Tl5Y5k", - "Y4cGj38k8Bsy6K7VWTOLBPsbhzf74hvlsWtcV27A5ta8CvIymHWxzvdHefAr6ty1p74r5FxesASRTGO1", - "PFyrAAqiWtKQ9N4PMZ6y4Dnbn/5zbL8L0fhpB6GtH5sSZDh5/afTyZsAa8BDk4Gj7tKNfgka0v/nnKeX", - "DS9e8Kmm7xmgmSUstZ1Cl5fI6Cl+ZYRopmS8C6V5lpEbLhQO3GzJl0IWLI0Kz4Bp+wb49i+iZ9vpixgB", - "7rK4VZK19/0w0bb1BMSrDHblc6UsqE0KFSrzggXOPdYeLry4BMbS08d76LSdlFhw3D4qbW0hC4L97Mon", - "WxGF/OKY9e7eSutcPXvwIJWJmvodun6g6a35vwnYK/frzk59m6Tz4yP8/wCDRRuujp6N/nf4aTZL//nd", - "hz+M7oaBkYKRUcMkqDXrDR4i6oUkh1WOrO2PRw+32tKOZqlpNjSbDBs5/Dz3nL5eI3aisSyzzL+Aw5M4", - "Zps5PenvCHcMvqkNnRgl07ye+LgOesvUOECHoPU8uT7HVYXbaUMC5jDgYam32XUAQ8ivSisuqsUKi1V3", - "5qvYiAUk74NLR7xLelNmDjPYW4UslyuXKlnje5ip2Uu/bevp98v1KWfgB+0jtaps7omFqc69q+suSAao", - "KpuGmaY26VnmrU1fpRN2Vkp0ZNoVaszCO+/uehaZIXDTcjQOmMmp6J3JHdNfR3IIBV4XvRcNKg9J3wK0", - "Rp84tKFlHyENL5Dy5kUaZWSd6127qeusNAVsWwA0RZrjX4+2hgTvH6hiKYrHwdhaIZiFxZ9CNecenWM1", - "8QEpZg7cPlhpWUaLjDOA+g4rrVqaKpPTjp5i+rpRI1c0eb8sZClSY2kmTCkulr0qz0Ld4AQ+VNlaCKAw", - "oLhxJhVLz7BVPwqYxYMOpnTFMimW5rBMd0hxtaT97mtEuzAs4GF/emtVMLoWgTfkduzCqrahLPqYLnkj", - "EAt/NxItWV+fGX57eLXK5mmovbaE3Ia1NrdPGcMA09p9O7Q09K23+LEos2xu0Q3vQnQtAJiwFBY1JnVI", - "ik6W7XwUX5VZ1mh8uGcjC09yqINzYVF28MA01RC8GmssToFF5jz6Sq8Rh6DrdK9AzDUVdMnS+dUeUYCv", - "se0PXbGA1bTsKM6Ls5BZJm+wlLGREH3Te+2bfkZYe3cLPrd9z3skujs8oEEZ5/rJTOQ1FKuwi7md2vPW", - "4VQe1Ge+F9ZXAygpAhjaQErambNNuKH9oQ7QZO4FOcj4gkHAWwPuYAcyPdCBaiLY7Jtus80KqYW9wXuk", - "9bVpFlqe45ZYu6GtwN5WCN2usWsfib7Yi7roPbMNoLrtq9Fq6m+n+24b63OMmF7LZcGWwMsrKd/b+l4F", - "oxlm8aDbMUiq20Z6rMHuZU2qAXyhHWPQzMGgGb3rGTda7ASqYv1asrl/DLKvJ63aSb+WwYtRmEmydcaR", - "xqPfTSCFfbAPYr4DA6BWEdzX/w5MoJa+iZuJrSuv05htwV+3av2hCeIO37YM5FG3w+LvYdGF4bDnrZoK", - "sYeZLDNqcQ9h64g78V2c22G67Cf/YaTIg6/N8GH8EVUOHE3++W8LSdWzWz9F+1Y8cPRYuN8t1Dg04X5a", - "9ql94Oi4oLdbaND0tnf8D9t3a7Uhnmd8KRzjIuFA7mfMB7bNrEcgZwIq5WVcYEAx3CYkocJdI8AUfoGB", - "FhDQVE+VuFnxZEXWjMJzFdXkhmHNOJ+LRiH51lV5Ytes2LjkUTYTzfL7aC0i0C25ZyjmFRA0EHgf4mFF", - "GvyMMNP2520FrjELcmsF6h4+P3c9NA2pfTtsGiuHqES9+3Af251nR1+d6F3a7yV/d+jYBxbhi+rAAzET", - "zRPRku8+x3nwleqNa9l7q6pyqO35cJaXn8p0N+sr+D4IiXf8f7djHbnWdPdb94+A0RzW+Z2v/56MrwmP", - "dx9bRLvHUhjGXNdRzZTwHFzJGxDu+FuXEoEHmx6O0VBnfaRBVOm/GtTbPz0/G9L18CoSzSnNimt8Wqzg", - "5s4ujv8SKX/AAec98I5Q4esZQLBkRq2fpFoCl13UJieMm5yJaqv57BMMi1yU2RhKbNpUrHWZaZ5n9Uu6", - "Iit6DaZaxpcrnW1Iyhdw6dGNhyNVjw86OzY3IqzQNno2sgVporE/zkqPbjS3Z7dv9Lb5OWyfOx9ozRCj", - "rVppkc1baukLdYfLHYu58zUXJTHt1lTzhGbZhnClSoyGdbZRBUOSFnShUSWQFVUkp8qFtbZrM5pvA8UT", - "bL6jF/HSG3Ul4oZH7/F7lgO+B3TrXEzm0zUVJc1Iwa45u9lz8YGTy4IpeIS2nN7KwnN8aQ2a+kW6Moc3", - "kzexSmJ/irArtvt4Yx/ssPXsTQPdLs/DZd1zL57FLiXtvRi4yaojs2Z6JVPIhEffWW2f9d1G59g0rrra", - "IzQ2TA2dHUae10bertLalLzbmffnTKT2BP+mPFcMSo536Lm74LUZ0UPgx/L70jKIhAjEwaN+eYDiBy90", - "oVzgiqQlxEJzvSJKroM7tMxK1Bpcf6OwLk9QSisQG60ZNgQI0raT+jjcDqq2zV47Y9tNM3ooBrky+gTM", - "uL4RBrpI2oenfe9sM3ffS+gO0xl4D+2byA5bIHTRDM9/HWwx2EM4v6NXCOueCeLE3WuEsTryPNu4yAG7", - "W5DyyoQEC5YJc2jTrer4JXxXaRkctopKtgITM5pbSBs0zy0Wnz39Y4w3sDkk3qjDXixNY9ddBf9Frjl1", - "jS7obdw2YmIhi6Qxp3hKAn65z1z+Xic0iLBSG6XZGlFEhNRoqoSuMX+FAB7IUjfHn86EpQwEkhHF3hzP", - "WWEoUGNYTM9NyxOa5w7oRvlgoJm5uKzoNbMpbZlMgmmC1w2xcHLK0xZOwy7GVOjZjBlSKAI++7KsJ40n", - "rU9ZlbX2zD40eNLqcjhSDjgH1tUWJU3hZUjZu6HX/ZDTdEM3FoIAbGybPBq0vm38xESkbNKikOuDxb3g", - "4P7qC8Wk2qTHaa5bGA+PHj5ymH/Hz+D/TY+Ojv+jlsZGC8Q0lYeLIRXpVvK7+DqI+Jcibe00WAqYTnSf", - "SbHIeKJfFsWgfFGqGDYxKrup5zTl4AKpaHfDoJNEaXdrrr54L8XymS5owp4dP3z0+MnTb7/7/qgeROE/", - "fnz0fSV2uoZx/rjqV5fxBP8LvTIFKU+Pj76PPbe8A/4o/QNVXH3+0spR+hsJLFkKXWziWVm/nJ7/TB4d", - "P306Oa4Sz25ubqZcyakslg+4khP4PcFuMPtsutLr7D6hWb6ik4fE/oY52DNhITf1jZxkTGvI9qo+sPkv", - "mZKBykbPnrhmgrva1NX2eHveiOeqRXM9rGW7/fJ88h/v/vkQU92aVy9EfH2eplLYwg1DJbhpuhX2dXhA", - "s48e3j2uOQlioGiaTqwREAlm/hwAP6xkGQioAOw+tW17MBXCT+o8UVNygt7b2UhxsczYbERkQWYj51+d", - "jWrJtgfo7bAIjM8B9hMyJRVb8wlG0xDkLT7qBon8NsNyE24LwPINvglg0Cp4wkvEW7ps4hRiH2BgmC5w", - "cB+C7D7G+qshI79oxBWoeZnQIlVxh5CvH6jaJ3CIZvAF7gNb/Y3vu4V91FcNuH7CamE/wWyi+gGkmQ9o", - "BSyH/aRjvY+tYtLcjvaIuIXOn+e5D25U3UgrmU1JtpsfLoZcNZErpigl/ctUxxOBfauBFwB7pfcdRF3/", - "v73c/TKPnzELMr5H9s0ZLXRX5DoQj4l9QtNEEy7QnxlWLHAjR7dJAANpqLwJA9P2eSPdkgDWilyr3lAs", - "QV0SwfMvIHKMx63a592iwNur+0kB33yrAPDh6POD3Up3jcmEQ2yIg+jlyqueSKXJFVBvrn6OwBi2L9ce", - "gLaKqw8gV2GzwReKaaN3L4W8ufSQtuB8Asmz4FQPxGLZwVA0vTasRR8R7Cc5ddruYFVeTdegHv1gloR2", - "1YZq3paGni0Jaa7P0/8sFaTk7rkzG71s11AHw2X4s60bj/m6Po97r+zHPS4Ldscva1So6VcttbeWikve", - "wOqye2fbnoaN8THbGTr4upM/j5284Jn5eOBCvsJWlchE1sIcIx5cjK6PXE1+5GuuWz1UgLY8cfmkyik0", - "/wdwyvhQpXG7lzAICuPHNq5xzVvzy4iLvNRzLd8zYQwOWergv9/teENqIHe2LkKtQ7UoIfIqeMgftgdh", - "rq+wk9f2PbW1Fe3vLgwg3IzTL9fezgsuC643tXe446PWO2ZBbyapvBHENagzYCZ+lDescPW54CFrxZfm", - "7uQaTMMoAi708VOk1pw4M+TRkS8/H5LqKx+MR3lZJHugnJ/ZZsAwFx+hWbFWzTmcoaWIb26U2G1VWeOY", - "7K3IvfqGc7ULLoUU7PJ+RAJfU57RK55xvZnnMuP7CEo0YIKezrCjehVdKeYOdWHUts6FLmTmijp5eKJE", - "musR9mxjQxIpVLl25VDqaQaXwRiXe0r/LWL/pCHyc7+ElcrJWTEvBTdmpNJzMGn31XGOecfTo1HsSmNv", - "BTkrnFw0A3unmn/6jtJqMTkvI/QC7uDR9MkRXk5DrWp++cPx0dH06Gg8E9oj7lRJ2H94Yn6c4pMVQty4", - "AkFLsAiMQqGCHE2JrbxRv+Acjc0EZuKyvpn/CJuYcKE0o2lr8Y+nR1012JJN1OL5iMiKwMoZlurptKk7", - "2BjWcGmf9C3ypAMfvPQHHTmgxpFwjQpTpipDLQkTqiwMY4uCJZoU7JoJSEZM5FJwe3qw+EarNozzI9X1", - "dYgHjNASUGNGr6j+xlZIYajnl5m8ApvGR5i4hgi02mGmNnTlQLvVHVt45dnTdK31sf1BxV6OB9qS2PtW", - "0/BF2yKsLq2DlWlcpXsPVHMAcqpDrCKyKtdUTApGU5DDoZs/qGWiO7obE1UmK0IVmY3enpMXMsto4d4o", - "XpaFxNeOof64zfpKZvFJ4W9bp9Uzj3gP4Uz+MBvBafYzwvn81//8X/YHMzOY1x43ti50S7fZHZ7Pftvc", - "ovzsXCgyTQumhnvFn9t2/R5F23uzMt10Jt46qx7A3HzIrIXFakJL+dE+gdaPEWnnM+6n9jN7At2hWkG0", - "vuAXfKlY02IzZ2sbcxJFSDGfEPikc3eOahgp0OAl9BnL8AekAqoRNHSfjG53ZCFH/XnQUXurupoCWhI3", - "IjPmAyCpACUurtOjfTnI42tbcNcIm3CCMCqpDdv96NcttSwO1H5Cy4FIbZNZX8aZ+sizBMu5+yayvHtt", - "Wm0DX4GuqyoQDumrXQQCzqP5P0RMgHhQnqzsFquF3UbQ+sfN3pWmmifhrgNyq7CAz6jyibsqDT7GdiHe", - "Cq7N5S2yBH6H5qyYwFUOrkb10uGgdMhshGkS1tqgrthy2HCMNkmWrWcjc+wzKd+TMoffZsLXhfrxx9c4", - "Tko1NetZLSruh2Uhy3yCxZvsYasJCDfefoLBbsx9xAJukq1+ZotlM0j0QtfPg5Yd7/nVF75gVKmqlyZg", - "4OfiCU75mgnFpehxBv8z0qxG6k90zVLyP85//umM6hVhtzlk2EkB13B2qw1J9pIry9yoF+t88xsOVY3Z", - "bTCnv7KN8i4CG81jH8UVV9rmCGX5igr0jsCvpUhZoRJZsAYfvNfXT+UPU1+jprkFgZR5dzY2kupW1mIg", - "OwjkYPHrwYF5Ide5Hm2VJdC7mh80/hlekBV3oVR4gu21x9GP46IkWZQZeOPf85zILK1+awttmmVkxZWW", - "BU9oZr8EJ70Dh56Ofkc1sGBbz10GVJueyBlpHhF0j/mDwcUSC54Ca79RcEac1N34OHD/mW0uC6LK9ZjQ", - "6+WYrDmUo03J2lxEqh2qbGUDiIojoDLCC7B9SslpYZ2H7lPvpbKQWQmialcdj+uk1z1+bpApeSVtyG1d", - "ZjomeD42Sp5Uh+oPU/98s8ed2pb2CgR67fB3q6ezjIqPiM71zberKfPVwDjUbfaci5SMILVCneqwlBd8", - "+rm8WRZyPTcUzqvysQeqHP6+Ud0b68w2Qm4s3/AJQjXeIJwjvYZya9pX/e0HkXo7/7WkAMwWV0b2Ucqf", - "4QWGE4UUu2NsSayygm1ZcnMKMUp44qIzXRwxhnEtOMtSf3zlmms04U1DCChut4NXG/vlmJQi42tutpqb", - "TIso6xarXtQ8BuutbzSKPbR9vkEWeHjbG7dfruwvUnb23iU09WXwdjpBNo/6hYeY7HXf2e6tDgpBQUqF", - "uoWrlqj5od54dOd462FeQpOYz9Ml9xtH6Vtp8REx+iALf18R+nDiO6LzK9WgbJKlL8kMZZjoOrf3+FoK", - "7Uw8twpK3XCdrIhMkrJwsAk+9Q/wohpgO6atJhmjcINy9dS5cim+6dDEACN2zpxyW3Nxim0D+X1WTTJS", - "Izkv5NzIFLGc75o37sLc80JOsClEwGLrIPS4caTPqs/dSNFU5E4zMXh6bMpRv8zdkt1XI9xHuNvGuyQq", - "fLHVsn8XXtrP11bZscoxBjn8QDO6SxndiPbF+IEr7IBcbWov2NFApOwgMd++Rllwr8W4IZaSgi9Xmgh5", - "M52JF6zg1w4tPMkYLViK8Q7KQtsAEgbIkYwvOYY3WSRsw2NEpynKjDXQrY4hBuYwhWW6AlJbXVuct4Oz", - "EILmrsymdBGuVyUwVkhNNkyH/DVGA/qClOfkDeUgi12IG3Aa9oQs7GMCWZTwFFAlLTg06jCjPc7Trpif", - "iiHjYH+9a9aycxt01HkEIM7n88/ormj9jXK6gYCLggpF4WB8LLtOykKZ6/adMiygd1+2IZ378cxu1udV", - "KPyA1w8pmKbFxkfmCWM+uqjqHmHrB9tJONRl1u5Xsq7yc71BebUuIpZ0wZjL3//l9Pznxw+Pv+3GCDC/", - "TtxwNZCA2s0wQAcI+699sw9AwItGJdiasn4UQQh41IEQYAn5/EVQcJX+DeRPdQwj8GzQs8WSo/D01Jpy", - "Tpds97NuONmiEbroJ+7MjtJIoOCFiuT5vn1z6uI14AsCAwTx6jnVq1E0fWlLd1D5YdfeBLvt78180NWb", - "KDNr2tkCGe2oHHbNZal6R3Af7T2K4v+ISBR7SWMp9Evgo+AUHx/5ntBZ0Vpx2wI4FEwlvgcw4uYLOMdV", - "Sb/f4hw3yxXuGeBYVfpvcQWrvWyv1dYufhKj2L/ItqFs3rw6efTo0feVjtJSZmrKmV6AmjLq6EGxSMxH", - "9wluarOgxvydQM0D667jgry9ONkZ48kfD99R4B+xRBFD9+TC/tY8L25SrzjLUswGw1oIm0Fv1OMta9fI", - "vv71IO/gf4M3SLyhZRvCfi1ppsiSXzNB3rw6mcDsK2ZXSdmOyx/Go6U+ICmA3h3kPkB4xEBy2B3SIwtk", - "kpO2w2jLDsyqjCm1L5+yQ/OpIuZjmBTBC+vKuJThtM3xBTFwz41z3z7Rwav5dCaeZ1kQlwVmqrQutP/N", - "ZXYQdkvhJEjBqtRLhxe/zmnBVR2ryXGGwPEn9vyPR7eTpZzYmdjE0in+6HkZfDTha2Mqo3FlrN7RkutV", - "eQU4ajJnAqJTuKz+/YDm/MH1owcuadUwLhaC3JK0kY/w6WPHVw9aFeA29yhBXBaOR0UIJe/R8feUPT5a", - "TB4/fPLd5NvF8ZPJ94+/P5589/jh4vFD+m36lCbbnXW+0LsdydFO/hqvlWoDCAcjPCY0t6l5xEaqw1u2", - "DwcjEgBCAYuGuj0TqZn9uRdt/lp+eDvo2UHK1X6Ncf4a4/y7jXH+71qzsStK2y6pWc5/K1mxecOUxSQb", - "oISwEb5TuzMB6/Gr6bL72tqB5gNxkYW82f0dszULW7Svcb09WCjueQhDbCbJcedyiUGyBwIMflmBBbcG", - "id27d1rgwYUtn5u1cFHRxcClHiZntkE9rfMSMFjMgNYvfg8F9v/7/xAvNe5PZ+KnMsswds1FYVi4hHq0", - "X2WLJ3J95byIclGZT7AJt/qfPl2EUzB3m3mgo+luL+DvZM0U8AfBFwK+GXZA9Xx2m2eUC4TY31RjJBBU", - "blh2hfoou66VHDpw5gFEt/uOgvhpo7qresXyGoKWL20qm02qd+luc55ewiXJCNfimqWNdWxjuNwZODnc", - "667K5D3T/ZO5O4DxQSTAMTrUSa3nJFaB7AHseUuCIQFjlBi1KJ0Ktry213qkXcNUfDbITbUVUqmfMyBl", - "8dZ8Dnv9Nc1PNWujAnifQLMoR3AM7EraRCMw9UJKwINdszeDtm4eETbtdVGIoCC/qBEIE3FWtgsI5CoE", - "baoTu7sT1q7r5+tcd7f338Sp7rNv7YaH7bZfDu4nc6u/ksUVT1Mm7rjcgB/nUPUGHsXrDdTGGVRw4FFX", - "wYE/M10L0zqjBV2rwFs/FPDN+g4R922JIK+ENmK5Ph26vCWqL5QsCrz2ZynYHe8aM8SBNszxUXzDuCGG", - "7JXjo6690gzsj9ddgFuo+6Z6tkploqYpX3IYxfkelPl7uXaX1AfmA/Plg++Pjo6OH3/33eT40QMvLx4U", - "c67k3IwwT+0Ic/SaT1d6fd+lijXqRP57vMpbED1xdu9Pz2az9F/hf6bmX/f/9O/3/xT56+voX/8e/esL", - "+OtF5Je/DOj7/P6f7v/pD4FeazE5Zi+f2my6l9cMQs8+yzgq0NBcLGvE/gZBVKfimmY8BdlnSDpZSb6j", - "hmtIMWioQgY0Q93rjpbGVMFx9mvJ7OfWWQrPNfXja30xHZ0FmP+MKjypVVt41HDswbegnboqs4hjkSPr", - "SO54pzCaNagdCf/7bocRUCTUib2S6WZrRcZgDgqOA9A69suxy5q/YDkTKRN6j2VPXdvmyjfv9L+/xfes", - "mcNYsBY7cuWQGwP3g98fwYLtsjfsg4lzeA+86e29fh5CNGj8XSyrMbbQkIAppA2+XsuC4Rv0d4Fj/05X", - "fk1v5xlyDFNT8VzAv38bceD4udOSY3bpJ19yl9S695JjpUWXt/XpVpuLYLW5mBtLTttU+3kmb1iRUMXs", - "f5d5XvtvRMtzX/uNwsVvtFHsKuyyUc41FSkt0k+3R+5ArPem8+KE38CCH5DbuzBX7bIXwwec3SoFd67h", - "toLA/VJicOuaWhnaOjBShzat2zpwt6unY243S2q7Yh+B4XfGeMTV3A3F1fyKKvb0sf23zbWE/0ipZnMb", - "iMjV3AlD+A9jUrh/QZQt/NtuLPi33ZTw77LkdtzFr6lwFAiY6nshb0SFyWI4oxQXy3n1yg7fQzwCKBWd", - "rJiaF2zJbqFkFUzdDuoi/eeC6RtZvJ/XALP/IQWbZ1zprq8Tnhbzq0wm75tfuBgbM25wBdzHuvrxx9cn", - "UunXMmXZwIvhjz++Jtgu7sirf32KoVLcIk+sjFmSsmxM2HQ5HZPZaJnryePZyPwzyWiZssmjyZOJkkIw", - "bSva7QZM+1MQ5tAY489nF26MExiDPJo+IefdY3Q+hccEWMjLM3wUHJr4KN8HD4pYkwCCD+w8Uibk2l7D", - "c/CHv2ci4k+jyYrNzdrPc1ZgnYKD5PWZfonpF2hkFQ3k3tvzF/cRNR0Gvym4ZncxOnTcMzyWajjowKem", - "y54hbTmIg475M/TZMygqUiObDjruG9ctkf0UNE9Gg+0RrvQcmZ+vWVHwlGEG/MBDg8sD2VQQ44f1xFkx", - "MQdV5TRx20XaUaYz8RbDOnNEBwBhOsZDhthxzj8MgVlU+KaEZmb7bwi75UqrxhN/X1e16lo2cqbdfSoZ", - "RhFA/7U2NvTmEN7zXQGLIb0NkOYOX9YM4OPh9c5P3uElVTXK6mMf6BE7MjK7zXnBsOYOLN08psJOqJAC", - "sOtweblXaVHthB3FddRf6pjo2J/5NNpTHiiTnWYf00SRF9aatsGsNkTagF0cyYOzvzy4ZiKVdUW+XXn6", - "fgMeV3OrPcg39luP5DCzGxzSLKqAPpQMBUtkkY6rqDkM9raBKl74zYQFWXFZsrhuECYY/PWThUCfuJhm", - "H/c3PQxowBABQe5h/xpgNqGk/2z09vzFbHQ/Ss2dyhJczogg6SXk4IIFybBShdwzVjn5o1UFOs6WA0RM", - "WKVWF0utgdbe1B8sSrqCcdz5b2NKfDrBFR29EmSDhndyLjK0+6kl+1qjV66SgWPzhJ1j2+gWA1+u32OJ", - "ueyYgxSl4cChxj8GscN9Iid2a2pK/y7Rb9nWkhPdscfbtMO5X4iOGylgEBbM3bUCvVDjbuXbFiU19GNq", - "TzB+61p9Fu7AYTfrs4pf+1yuK1PU3X1lzgTlePmlQq8KmfNk74t1u/+fcyaen2L/z3v7H3ap9qkfXbFy", - "QXbC00fN5IQQJYFO/nE0+R6wEo4/3Kv+czKdv/v/B7/+q31y748nRcKI0rJgHhYA4paFi7UPIYR8lUGM", - "moNbiv8wA6DqAnEQGS2SFfyeFFIp39kmZ2pKWpDXckHQ906OJ08fBS5/xPG1QDsYOgohczMIL8GFei+F", - "YInG/1gztbJ/NitncyPms9F0JurI2Excj56NNMOEhkbM4JMgZtCuXmxdudIAQqsOG3VkWGkrw0xsUG73", - "dalPDmJsZZC//PKWhsGN2xR0mPm8W9JTa8TwKA5uWIUK7TPLDx1LdgKF2u5ozbAKXGTNqrnspsO6ZtUZ", - "IYYDk6sNwaEgLercQ7W4IClCC/ZsJibk0iqjS/gPC2IJ/15wQTP8p00ovLSl8jzGLc2yWo+kYLosBEsJ", - "u01Yjr4M33rasxhYl/zOlsMW1outyOErfLul8IOa1WiX/O5jR4VhdVccCYraqU/giakHMFpEtHr84njw", - "4Wgjfp1jD7uPbw/JtqUI0LHudkF0MNBvFV4a0tBaIxeDuccKBUy8gDoUA+kwQ/etFJLJ70yI+P7bC7Mf", - "VyxftzDDD7sTDzC756UAu2XNhH6eJEwpFzL5wgY2DrHhjUnnq2SxqmdCoWsfRknicFLdKYxoLC46+iwz", - "PRieNTbvMtP2maE7aG3nHMGQyXe2z2z33WDmeSEXPGPzL8N+Axj4fUdtlaob3EOr7tzcZsTtSVPX2YOw", - "3zvaE/WCKFHN4NP6hnnfalPrkkG2wo2tkBfAA3ixcPpiOjRbKsLa7eO7cSw/9vIH7TFlyA+sSjbdUOWX", - "ZDraw0W219wtzgFaSrL4TWePBCAteJruevKuICOkiKzZnU/cVrzia7aH3bPXFLfodp/YdxcCxiYeRiTL", - "voIbAqb201B7apouxoUu1DuSz3Vv60Es9wFbKLDR8WYJrkzyJ3TQ/eJ+e/cL+/XdH9+ev2g+Dt8FQfig", - "ePqiQYsbFmmBSKn2C/Pd0QMP0zGKzA/vfkmk0JQLBZSN9np4GUaVf2Ct0+T+jFxCf/cdq5lKv9RJwT8i", - "IfaZoPOgQSLUHZ0wjL/sFE8H54eN97zakPcMb753tjuroTBuopO/Zxm9K/eDsdHvxMX838RbfB7WdLqb", - "JaiVjdpq4Q9UqXs1govb/i33WXq/bw6/jK/Z8OV6buEaIDGhBs2FT2JYwkiRlbwhWhKIoka4NIcbEtzY", - "gmenWinekSobr8IAafu4A9K2QeEpwSCCtxYUpA4xY2MkRn+YurfqVi3YsPRrVbHVLPvo6PjPT5/8x7dP", - "njx/9ffnf/3Ly+OHP/370cm/ff/qLxYn69kIa1HOtdTwkozHFuMaFLmwfw1f7/um1qwkWtW6/PB5FjP+", - "igT5xSNBfi0G/bUY9CcoBv2lAI5+JsCbnzuy5Neq119G1evdIT8HFsVumRJRSbmjJVGF5FlT0JYICpkO", - "1buWNp8Y08/N6YbQpVjgHhD4+aKAoTX+m2CAwdAB9pza6w5XB6OjVqd0wbjuZGR8aqw8JBbPdx9MJNga", - "tnjEvdmI/YqxdVzMRvcD3HzUej65swuEr74cH3oX6M8FFWVGi85S4MvqgxqWI5hZRvLMBMD3O5wlS6NT", - "38Zo8UBEFoIpOI1nF8evR2PzP+bCc3b8Av7/r7vPmwUG3qfg6fNwB4X1TgPTDW2iWr2To2fw/8ztaRky", - "y1JrmAEJuqNno7cXJ4gNGfTwMOjhQx+84+73q9rJ6i7v0Nye9uTcKdIoAmrCPz14uYMLxuDoDw02Dp95", - "uGU7SOL/YBHgUWAJXg8CAoWWnaDqfg4NlFJbDlnzgoVQy9D3/Gozr0ujfnDZkCQblEGuNrV9+cuo5lt4", - "F4RsxMBgXIL+0VFb+AfbNSiJbHdum1AP0wq1twLbFNhq+iHU1ZlO3QXl9PlPzwkIhf8wH7xwQOiA8eaq", - "51FBoS6R6WhiOlL3p2h+VV0H5TNSs/xrV80a95yRo3GIWdW5om8vTuBD6N/nWKoONOG7wcLtOyRaTreJ", - "7L1g0V/XRJ/poCH50Lb4palJa07RfneV84TBm9NEl8WVHAWQNHkZoBx3Sdhu2WnvA6Nno+OH00ePnzwF", - "Pu/b24fdY6hwiazbADYVXhuMVHD43WMI0F/nekPgpGH1c4zU3TnCKljhO4aM309s/3aHYafAsTr7DgQr", - "37A5w/PyxRyT/UzlrxDpnzVEul3lw0CkBwNgsa/WqcPhBsGfO9BOBOvcQ1tBNXRwhC5klskbl2h9kskS", - "IUCVT6Rue0MrkV47cBJvjuvcWD1/YVkmx+RGFln6/4NpgQOkZjn5Ewkn+0lyfLSgKZscJ9+zyeP0aTL5", - "7uG3TybJk4fJo6ffPjpOHyVVZuKzkdnWPGET6yAx5F6zQuEsj6dHoyC6ywuRCfhUMAarr/Ri/UWpU6V1", - "nPDokUZ+53STSZpOZ8K9EIwJXxDrzCNcB/6n/3H+809E2tCxzuoU1bYwVCVSaCZ03P99gj+iN8cejXDJ", - "QfniNiU/m3tzdVZmI3PhsbvhwX8qKWYjOEBm+zjT/S8XF2fhFbTZxGzmyivW+nWHAhyGQjx4vZmkYMjC", - "Z/ap00yMpitWmB/lNEQjLgve8sttpaM3/VNVbyJ1P+COW3yLf1ltz6RF0ASh2S1UFMeSV8aOgj24onnO", - "RNNJ2ThPIX8mIfDWNurCcxjeg/BIRu5B+HFsP9ZEkJ1F9dxU2pSoago4xDYCq5DPZikV819XbvvgZ44s", - "HNKaMY61td/yQqZlwgpyz6f+p1Vk0v06pXV5tIXi/UJGYwrJPx/IBZaKMeTLxEbKsGpnkNdGCuGJMXfE", - "N69OyKNHj77fuXbt1hPULaEoF4pYOWSfT6+cgnKSC1leMCjc5rwwsuBYIVwsg0k1GC/XU/tfUyXXDDra", - "xy/vM+TDDW9bVpvsXaMWhiHtpR2yU63XsbgHo6r494x1XdVD2jH+2KyhHqh2tzNdknufxe0ePP23n0SH", - "z/HFYw8lXou872sZhKhHPnuIn33oinIaknjYLJPdVSLKpirwmjSKVDv0n05rqzPAEejtyjgp9pBlXiIG", - "mQQfldnQ9/ptrjY9aQzwO9fKyOCEAVYkXkFclP/+GQd7UIWjOV3hahW6qwVPsWYCKwpZdPgwq88IfuY0", - "Tf2VdZj7oylY/uYHcRUz+tPKnKQMFzlkbSDq3DgDRV2TomGSD7pos679nuWyqZgaYsI/99+RqoNpDOHX", - "MuF5NUyEAS5pO4LjQ5MVFwjwCLBkYVk4mFPfqJAkG4NBwwJx8SFX5ZqKasBIyNLWcV/b/rfpzgTpc+TE", - "brc/Sf1KliK949ovP0lz+y1FeqiKQY/jBWDMOK/cOIMqBj3uqgLjXA5tbBgbTuWjQ5Sx+mlxxXVBi425", - "ZiYcrG0bIVGvwTKbTf70y9Hk+3f/em82m+K/OlBYfi6WVPB/wEl7gTb+Bb01u2/oi3TY0yRj1ywj9tJA", - "NL3F3e/vHxYSwggdNNObnyp4mEMPZ4UFZ3NPneHuECO5mgkZDD9FvB/DIKNUSi3XVPOEZtkmMJeDBlBA", - "uBMR8rDxlTXj3UVPxpHmIAV9DkABc01vByJE2HXss0leNBfI4n7WYRm8TAp+8E3w1F1LAJ/6hFT6MUMK", - "T90fa+QdOJCrtoBBmNYO0F1tPnWt8jCArjO6ZK9Z7HnGX8Rs8IzZ7PjEFQCKgwFkbmVS08zHZy2sz6r+", - "TlM/GxYiPJSE1bXL44ffTlTO6HtG1WaiWVHQhSzWEwyxqhDe+D/qIjUI1BjWE8aB17var6/G+vmmQKsb", - "qGNBguCg1qogQ1HyBQvDBXpr8Apa53Rutf6WkCQWjUbKnY6256ROXpP+Hdl8ltH/j71v8W3jVvb+Vwjh", - "A5req4eT9tzbk4uDD24ePbknbfw1SYt7KsOmdymJNytyD7nrWA3yv3/gcLjL3eVKK1sP2xJQoI6Wb84M", - "h8PfzAiIObUulsvVqx9veAcyK3GFUE4KTkGY/B2jUPXHwsh/Je1ZgEYxG6AKnkqqOYPTXEUzqm2GS+6a", - "DKiTxVQ6CQiYQTWFY8vLAYysccODrceBFKomFD1i+h8Fpn+i5PwCfJBSQ37d16kCng6S1CdWAM2APaAD", - "i+EtjatIdy56a5gpfOp7beqX7W0OML4u/HtOby7+lVPY67a7ld2Y8qgCqvHn7dDEONG4TGhsmM7iDTUX", - "04QN3KWhECI2DS5nSVzGBbThxrDiPE8y3qwHumURmCwXCZ9zw/BuMo1BDb0MOXBwulsYvSkq9UI5i44I", - "+e4I+VWWmrcYAShocuhklzmDJ4PsBc1oIqcBg0zbbfu3epe9FcabblBye5Q1RVBQU3Gn8f2FaZeKxl6g", - "2qb7+7s4GHTKDHJPy6N4dI8zfVci2+9pgZZJh/XWqCEwMHoDRO4G4xiLQ2oN1zpnj9SE6qVuswmjLjCQ", - "DD4wrWtiLfLJNQeUUqO521dKKFbtH+SuHqVKjhTNWERVrEeAmBnhkP6xdESvMa3b1qy+XoY8ZzV1UXcw", - "ysQGTMMuOV0HE3HDoWRtUKK1ZVgnATLxfcoK0gSMDlM0M+xi7ofzPMvBFshuoiTX/Jr1rXuJFIxILOqD", - "YmhGKEZhanCQCKU2kfMrcMn3YnvHOEjtHvgSOQVnzdNfXnZWNJrrVYOzL8s+B6xmrUEtjmJuxYgrV50A", - "At9C7rL/WtUieu50bI+LVe1xbXdrEmiyqritgv8vXTDRdcWKVENYoetMxeqlK7MYmTXs3HCnNTTN7mId", - "pbojl7z7dUdMUj7+WOlEbBsE44p0EWLOK+7uskwQM2MCVisUa3OaHkXbAxZtNtXZyjahlNeAS995FI5H", - "4Xj/hOPPNCWmzhIp+SuLcmUKn4E3y5rCsajtnGHsCghCRTQDSQkPBFxkTF3TJCTMTLnNmKnA2jQAxBB2", - "n0kIso8Gt9pQ6zFIliHd3IUJm4UB9HtuWt2H/+b9ux/+4+TpS/Q4brEju3YLz+Q2V+Ri7Gfgi1w+t2J9", - "v1rRFiKP69cD3AlvVudBcimN4A3mOAULOASTwKg0fhwJzyUSEbwLyOjtQtf683G/4lXRT37z/erkN+f/", - "/uT/Pr8o/vHtv/0fb3HcDIi98zUkhPv+MxV0yuIfFytyKvFoRmzwQzKHKtqf1ViMxW8gl2xGDZtW6fI5", - "+eDZgM3S2LoxsQWSBXmCeRtjJswdUOaKnJ69MUuowN90QC5tt0sawxi9thzW8SLJdajplV6WHQpwpOUS", - "nQeWu2w5tOrvpcpAdIXl/yXV0SXR+WTCb+AYdU9FtApT0VJlRKoYw7LpiIkYPf1NK6ZhvxlHjxbIYsjR", - "lLB1bDPDsfg5TzKeJsw2XlpWyJwu4NWgOH84hUhw8zklmqVUgb0s4TobjkUR8kVItJhj9eYYdH41KA+8", - "J2z6nHwzkXJ4RRWM75tva6mKPJMzFPCovVzX0KI3YiSCRF6gIKuXXyv7f7sOAuxQ1fdsYlkUFhaY/mSS", - "//nnwkbN+7azBmjbNmWirIxLEe5iLTXQZj1UOeuXRqbiEcp5Fz0RUgxEniTf/pd9c7IrE6hBr7CCKRxW", - "J6dZ2/S4JlPYcGUEq2hdwYTd8EhOFU1nPMJYHCy8ltOMde1NKqfTyU30nCybZsK03tgck6VzLLva8ARF", - "O50GlOSOZCrb2etXxLDAa5x1VqIZAW4auBiUxTM1CKtBzNyLaDpTkJQI7wJ458VATb7X0qlRPF+JSIJ4", - "hWZeulaWKuDNqYTWJzwJdkOjjNy/SQRQpG2RTWSAlK1osJR1tSCMZzOmcLJSEU8QDsfiNElIKWnBuOAO", - "w/9yR5Gti9YF72jBxcKQPEMAFE3lAMeOl5hh5RbiFRnweSpVZkFPRvfqTXk2y68ATStTJqw/jCz/HtGU", - "j66/G7lYMV9DZ46Nyrq5g2crx8J2mPhI+TXKL2e5cUovFCJnNjQ9Y8RlS4KruaFRbkMs4anO9/5B2x/s", - "ft5tEZl871cKx7nXRSrh281rlS1RYv+HLUl4V4PLmmCYLkNytvg9DwvKNoZhfiVPPgp+zZSG+zjmHX/r", - "a37wwVyx4IW3zE9c80ZeGlTFN1+cDP7z/A/Iz/v3//7Hz7+cDT78Nvjn+Zdnf/nqWzBgxIHzpB5rvXKm", - "rl6u2xyzd8rkvupUhj1wUT2KM3gDXbYe2bUeN39Amw42eDx32NRNndiwNHs4r6Ff/7Reek4ja2z4gP4o", - "aJ7NpOJ/sm17zb2xUBlw9jEURi30dhP+c0/D/nP+5NZ2oXva5kL3EXCPXvbVVzdGytHkPcswCePtQmFi", - "LXIl4wU8xgLC0sUvYNgLSekCUkbqojtM52qDY/m+VHdPxFzJZHqGIOIzO4Jyvq35Zz/MGBHsc/uYm0GN", - "cITB8wxWHhOCbXqNqYMlDcfCpii1zIyxbHLBswvIdWUlhcsKb0GwzYUuyq+91ji/j4JDfujAqhbeBClT", - "A9ORTcJVSdRhA7qTMdqzxz2EKk34jblN+RUxT3ySzMc9I7kSKT+RPIVvY1HE6S6SfTm/dHiAiokNCMGU", - "jZg5sOmdcCWCwYec+HP9h0Mr2s0Gb+/bbbUNrohobS+wbF1SHVMx3L9UDA8xfH87ES/xeL4daS9pcCXB", - "H118N+HiG95szVSGXnq3ioUNLoo5NHOvJZbT2S7WSw8K83uDdVvSfxuNwS/iBo8OT0Pywh684551pRr3", - "7Ok1x6fMcc/fuk209mCziSiasQtAhIdfns13At+ry7Ju9vFfjTpMlVWx3dt40fYq/yJ0LaqSVGXw5+28", - "lqYuDtJLmtFbcl21kZX85xTxi0JYrK3i1bp0F4hC0AT44qNRtTCGUxHTaUY1oSTh4hOLywtCMS5C09Tn", - "hleNEvZGpfgt0vjX5vDetnKbgduq9cG6BtslrfNDslnhb7f51TY6yF6MSRh4RIenLfDj5FXkBqatD7+F", - "3wNp/jClm84hWotam3DPqGrNUQCDRyU3MwqzFx+hcOd1PdvNdgFicJe9CANmlJ+l+jRJMPT1OqP83VUM", - "D9T16tqHmzUX0zI+jRtQm8At1s8bZL8g8HaZ65gex3l7uRtoaCX/0TS9KCLo3kFahTCWaVrKJxfdsEBH", - "1j+a9cA9uHALvTYhOsG1PIJfncAcGRbh+gxzYV4FB9jqVwRQvYVGhgWc5Y/Vcstkbxl+8C5bv3K/3RLT", - "ODbX2fW3HestX1lsvbBslwv7sXDjpzc2VGDoguDWreitf4vE5y+whn1YO28uGWY6XzJInE9/+WhdS8fT", - "5w6nT6r4nKrFBZujnTvguWmLECjSSmPexpxhhVfQZij4gaZTduHwk2ulgHV2XOwWsuaeeg01Ce5nmqZw", - "55WeiwIY+liMSSEQRVYIRkTWWjsSRl+tPHhArUq3obOp/ewp3PJvJ3bKMEAP4I79GIK5HMOwPMowLGGF", - "skvoj5KNb8/BD4F5H+ihZvatxVhUMrbLLIZ+YtbSoOg8dc7wvmPFWJyieNGfeRbNbHR1jY8HGaZsi+3T", - "ZaGn2uRtY3GakYRRbX3ibDOQw8nS3rp2Koiq4kRT1eXMncDlJHtNaFOq5IWCx8ILJowojCsmAfu6FTYL", - "pEoObFUzAaztXdVqUdnOyuKup6btIMyFOPp25itM47fhPwdh6nJPm1sFIkBPTrUwm56mEJkfXqmKSKzr", - "7iwO6zRNsWnfFHmKXfg9kGJwzW0+io8NHgoVQggSZU0TfW/VxqATHn4z+stwZeIFeKaYyNAWMmHfhsGd", - "L0pkHhNBM37tkp0V2Q/MsjihhAkH0N+qbOT07I11bddkIXObGX7KdIYp0fvoY2+fyKF9l6lamL7chsCC", - "JzxiCPW0W9o7TWk0Y+QZJDTIVYKYFczXSOErZGzEqnr09s2LV7+8fzV4NjwZzrJ5AqzA1Fy/m7y3U/Bw", - "LwU2aAjLMIKCAzkZ4Gw9mVSZca/fq2RbGAI2x7RGU9573vsOfgIE4Azo2EchQcga8+OUZS2x0WiSFG80", - "PWjYohrexL3nvYTrbICtmC5cUNlWzbgsMvKgtVwK6z72td8gNHCHQ93OhaL1MtFZKO1YvHdJfxsOdFQx", - "6xXJ40v4/ye2sH+YjbV/la5tl+QJHiPfwpcytNqlS3++PzdBeLtPE3h/xUOBm0X6F/reIaWajnv9Xpli", - "aZnoKn334AFiARQ2kWoe2AxEsq/cjl54XBMHres2MkN+cEfUZ4ZqNCLzvGHGjKXvSoCh6x8o+tnJifMQ", - "dOkz6qmqnn/pOJIlIfJAunXEe3/t9763owp1Vox+9CONnU4AVZ6urlLH131/8t3qSq+lugLXXzgydD6f", - "U7Uo+N5ushE71GgOf3hiB4OaEYxqZk6TmwF4dAuaOPXrZpCbu1kBNzJqG4KwavY0YD5CAZ5WvntWJY3l", - "0IELbojqzo8yXmxsl+04KkaNr9WzFKdRo7Onm6WzEElZUwlKqQdIUW6LbYjjzZHU137zOBt9gf+/ib9a", - "UktYyCXzvZxkNpRwaV9ZEB43Kc8WKiivdsiBnAPUbyHmsPtenXK6yj30K2gKtO9D6c4gFPPDIAlT4/vV", - "NVzqkBoNNXdso7IpqAH9xLIV1DFl2X0gjZNdyaDHSWj93vdPO0zlJylYjSpLCtnsSZkHqNFCGMtY+G00", - "aXXWPZHl5s/lAJiv07m8M54oTDBH1vBZw5Hrbg/9EVXRjF/DkR/WN09tAY+P8ALd5CRs66AkPN54D0Gl", - "KCihQga7I9U0v0q4nrWT6pkt0IVUsa0jqT5OUi0oYUekmqYr7ILw8JokLCambJtp0DSzEcPgVqksTQ/N", - "uGP3pUk7p+bDeYAYRl9omuKduv2qJKpk0XJdStNu8sl0eJ+lUwloDIqoND0EwQT7DjvakZoQj4fPk+0C", - "piwHMF9r3EdcU/ESZGMOhoWP19F23ibQHO4NdMkDxVh8kM4Z36thJrRIQQWx7voySeRnMzcvUd9zrPiH", - "KXr+N4vy2pyR/UUxnH0b2h0g8sDEcYVSm2yEcuZWB3nZ9AjJplXZLOzwtqAb1QIerOCdC1nMPbIC+MSQ", - "6kLmisjPol7Th8KSNFep1Ey32vZt5UGB192mlb+A+EKfezL3F0hQfywhKq+WePjvADUy2T7Rj764vsy1", - "K5I6G1w5gNWSE0jqDDzrNeKpPI54LVVtGpxpwPor5iCGznXRbwhCV8d8Ao4GGblkkwmLMn7NLiZKzi8h", - "unSbNu2Nu4v+VE75rkpU68lXzqvryVfWuFqQCadZKSwADdTtHDQVwQ/5/G8f37/c4EkodfajGV2Xg7B/", - "/24yOH6uH/UBejeFtcbaGxA+Kx+2XW+8IUhaz0Jkdb5rVj/f6qnryHPPB64bRvCsdR8fwTFbkN0WTljr", - "aOKfoMErmCu2RXRY0cmG8GEAC6vBwDyA2BEGVtx7O6x79drrKth0cx0P+09scf63+WIQXw0gA+rGbr04", - "mv1feu1ADu7SW8qGpnAqdqd37p2vS+6NsPvbvDBWvWz3dVXEqQYviej790iuhzaT0FLCaDmTzG3P/tkA", - "gQWhXV5/XVQt1/QR4LVZxdxOtfvu98OKx5Rl92dHT/YiAQ7k2WENSkE8VR0npZnaL7FsCy11q+NqP8R6", - "RE+1oKdgWTZ6Fo7QFt96afNl58AVfrQy1IafaSdNPxzOgYnU4tUGUwDcUr7Gvn6+T4LatpwNhGDar8hd", - "h7aPEngZfvV2LLGOOB7RNB24WFrrcNKgqPiIWKolkuR+2KkRrCyI8wkHrTxyUxduomm6BY6ykTRH0YxF", - "n2SeDTRG4O6AfvgDg2C+wLrkva17/sS5ascy0kPbA2QowJD6uuju23BkONuFJrTRto3LLJOERRBqwgXp", - "n7NsJuNq6EMFT844e7Qi4/QQomFzc417mmV5Ou6RuYxZH+MJYSe66MLmh7AP02ZE0YyqKRfTsagElOLz", - "OYs5zViyGEI+V2yIxfXBunD8Lt7PJM9yxcbCD0bidh+W5bVUZCa1acotoJuQ7hPFYq5Y5Jv5MdhVYXX+", - "+OvbITGtsPkVi2MWj0VZP8fMzFHCmcguNIsUy2xsAJ5xmvA/GYY9Hf4vrBuAWTzBsQKvwtTAksKgTmyP", - "QyjX9Aq7VGgTxQkjEe/XNHqapkvHpvMkCypEUByrhio9LHvqDiU6SswWcbkVeZ5KldGkuzR3Y3NS7Azq", - "uyGC9Pmo2SSHNKyFpKkIPhQ2LS1l0kUPyWaMq5os1P2xiGZUFJ/rYS4hc30U2aywpoANE8nIjOtMqsVw", - "LN6JZIGiThtJ1wjgXA8pyrWL5pxJQokuQjrbaLpetMNOUq265I9fprnHOJj2vZRs4RF2km/tVY9SrpOU", - "K7jOsgXRmxR2oHqthsW7Zz5bGoSYSxfnC4ZvtCtik8dR5UXEZjGh2iUBniQ0IxPGiMSwSAObTsj10Aav", - "R0Hhhr0piMdWJUoLhAQXaimQYQ0ISQUuMiCXGMPpAsPpAdQTPhSBq70P9wXe4dGXh+HAlbpauFRnK0Ac", - "l4jisKXP/5DsX+d/w/XpU4C+Xm4Q1GGH1xG+WZ33q5vUnJCTPEmIjYpm4XpFktC4SMdYowdM31SQgWI0", - "ucj4nF0AO10+J9g28CcM8RtDbDQZmFKW6dqiJjGoWlmFdQLy4YrYAYTSxFapYatAFxjKEZq6AppaE/Db", - "w+7VTh/I/qRHNP7fXGdg0FjiQ++ySJWlKxd/0Is/MWJT3nmltNVK/UPKNnRFEyqiuqTNNRtEVDMNjGWj", - "VkdSGTXdHrthHRaaHJS9Pg61FfU/mNxpMbc9I5Jqo2lRQStlHrmuGYx81eSXVTrj5jkbWWy5C2+dH4Mu", - "vKXuZznNtbxbNnO64t3Uhp9YZgn0RzuJfcNBK4yFY9LtbOVKHIyvcfvZsXuOsjkUV1zY6ukWQ3cpy0bY", - "3M65aKPe0P50dxEi1Ev/vH8odzmWo5q7Qs316WQjnNspvmglJ/dYnFZ+8DKGQcidJJGWDIickFSxlGLS", - "dF7XY4crVFFo/vFpoUDp90EBhYG0H5Lw+SDVzjrN7+uMHH2Jyp1YGUemkTo/oILuj7FabJT+/B4CCrI7", - "4xyOankPOWWkWZYlzFwZRy6xbLthBmE2kBAG3yLL+s5kKyfmeHONJQsyyUXM4vrhCI+jNi0KE3EquQDg", - "hF6IaKak4H/W+slMz9W23cexgMAHkLMTYvYQLe2zhGLXTORGM4zkVHAbX0QUY8FkVzzh2QJSbMK7xU0K", - "0JPW0Ke+cBi4sQzKhXikAmMbkLy4eti7xMXvi7XcM961uxQ7oGiBDmzn67YFSzbkwe4lXaao0BRsuN1u", - "z36FIoaCB61zD6BUED6f5zCwPgExJRM55RFNQMIoyG+Fjc7lNSyDfj4WFQmoXeJhnc/LH4dj8cEfhn1Q", - "Le+3RpIpzWq9Ws/vq4XzB19uAagszH2zA7zIlZZqXUtAZet2Zg/wd+p+WAW8EXWyC9jVPlzLQI0VdiSh", - "4IXXSseBRWZ1i3AxCFR8PI5TfryEV+VET2GejojbAPKwqTVkin34JxNGs1wxK28tAs6u3cE88npkQwqy", - "adK6t+hNOBGeLHqU0ZsBZO1b6uAn1ZQK/if8OMC6g7LqFsnondfzS9sx5gsMPnAsKX4oV1J/r4qIMkVy", - "xiCp4ErpdXNNBC9SHWhlW5eOJbu/pyvHBsn3UTsJha4i2yfkqky0KR9XhTCfMnA7sYVbNHOXgnKATa4L", - "c1xTa7a9dA2phKWvFi7Je8eYSlj6/A9A4zkd5unmtPBXMLBb4fAAkbl6GTrAMTPejOTlNr3EZmZSlZG9", - "fq+kD8dRmJueLgJQQ7PExu16MpfasHFkzu8JVzr7doiNUDsum8Kca5Iqec3NHdN5WlGM+tUn3EYJ016o", - "r+FYnKYpQ8xgJdZYJnHGrmyfoLdZNZiYK+c1umNo6TZV0je4j0Boj/hC1dQdi5y4hUBysvNn98Vy3x3f", - "Te0Kg00FejJUdkUhc/jEcUYpZQz9vUhkbjdEY/y6Vh86y4YB4dpNoYAcubbOv69HN26NYJiwvC3tDmCu", - "gdY7oW9r3dRht7Vum51QsXg3aT1e2nrZzODOO+lVz8LZ6ZEwZvSakSvGRHnKgrOTMr+iu5K57YAjAj4o", - "yFwni4fDjJY/1mHHmo7ibr+rEzC7ki0qStHQFqNsFlf1ux3Jx+TLd3TL6LIPvoZYlL/CzOcXPO6oJLri", - "6LQxzk9Ovot4DP9nm1MVX9sR7ttKWwzjoKJweqKjeQN77T5uCICFnbWCpfD7VgN54pz2BFrC3kP0hJ8e", - "fvjOchfvTFHh83L0Bf9akeMZA0oWdLciw3M57tVm+2IAxyCgWwkCukEaWpbaeRVlTFl2X8jiZJcy6OgE", - "3jTFb5QkU3O3bM/wXKPLsbAZgLJkQaRIbA60XPDsAkL8WxOTc7+zOnMrNGp/5Lyth4LbnOg75abDAx7t", - "VAWAfE4jew9pxUXCLcu+QhuWkZNl6ii05TgFcrE8CnaB9YeF8HhlB7zxQuoMu22LUvIBLrAwKDKjmug8", - "ihiLjRx7tLxiSdJJeqSyDfNLksyBfkfyminF41XGppSpgaFmndKIkVTxiJGiaov1yfUxKPsIc8vdTQVv", - "3/5siOnMjOuh5uiCwR+YleHt259R7nok0iR1U8zs76bsDcuoudUI0SDnLZkjkJbfYS920Lu2R/gMFSQ/", - "WLMHb5Jo0N8myG+VpB19AYrraqRYj1jRZhEi1tWKCo7raLvYiu1il8QGO7niTJ8m8oom5bBsnWEJmrc/", - "2NSkBfXaEKgsJnxCqFisOvtxIA3qC75h4Ag294RwG70g8MaFC7GZNHKI91BD98Ncxiwx/6q9ctVSwNZ+", - "y+RBvn0dtbZ7pLUVzL1dMVY9MJdYbR22pDZCcrUgb14Oq+EQ7Zc1ZduU1UXbfs/Vk50pfId4ETdEVaWk", - "zZO6I5xlB7UtswyGulWEh62xeXwHnU4Vm0L/FcDHaRve4/QI9yhUpdWb4oM9sPSt0qtC3cEntticWgZ8", - "s3f3OxjFgR3dhbSoYNGqyVRbjCZQtdU6Al+3CtCAke4JngF9h6jCngAP3g7idq9BFaHDavQF/t/VftFC", - "N2iocD2vVqKw06NxYivGiVYKWAqTgFqoXgeV5XuwvSe7kgIH4nq4hFLQY7AFu9AiCBB/sB9K2Rb2YP3D", - "amdkeniogzaKvfV1rTwBu8ELnKCcuEQKNpo1y8jlaRSxNHtO6tt9SZ5495hvzaVkam0cmcqjLFcsJv/9", - "/t0vlWuY32DGbrJRpK8vTdVYfhaJpFbt13TOILWauSxR8uL9bwQSxOicw8TNMMdCp4rRWM8Yy7TN7GUK", - "RjLJ50L3zX0D7kN9vOKNxeVEyXmfZLJPnBth/5z84ZwIL3jcL9zbLz6xhfcvw9j9c2KB5DGfMwFpfIbD", - "ocWU920k/fL2h+1f4njM1Y1Z3zyLg/o8Y8IrxbW7H8F2faPH4nKqZJ5eXC0uyv4u8VqYzRRj5LIY3r+5", - "fqzHn+spk1MGeTK8Lr3ZXo5Fo18S7rYFaPJYRGIQX7JziVhFmvR7jkFMZXZD52liO/7J7JD16CyiMVAR", - "k3LDoOPyTFxdvt8D+jWXZcMjmez7XFFhiipPwNNAP1ukrA8tjMWzk2ffDU6eDk6efjg5eQ7//bNf+/Ep", - "/Hjy9Kf/+Ms///Mvfzl9/fvpP/7+6umzX/7n5MX/++vrv/dpNGcDLqL+aTRn5I2Ihv1pmg2+H2S5upJ9", - "LtI86z991ujtaai3Zxvp7dlJo7dnod6+q/b243f/88+n//j19K+///Dbf569f/ayP03kFbvp/wT/Iy+k", - "Siu9yTwz3X1vjpZfJAF2HFwtWne3pUxzR9fen/XWd731+d4ehAVzoB+fzhQX06N518dZbVA5SBMqOjjt", - "QbEWa65tYovGXOhgQy+ZhU33mildt+Iud9u7J1bUFauxOYvnmelo3wZPM4gDs3c6fmq+2pwpGedRRl7Q", - "jCZyuslY4qbTVkOp+bhVO6nZ5f2G3jYjCJJUQsXDt5XiBm6KogJHyOiL+V9nfJhZ1eUebDjkDg/V0O/R", - "xLoVE+uGCWepYXYZUUxZtn+KONmp0Dn6rTXtuBsnx+XW32UUiSbgfRDlNgzAmqls7VN4twzxqOPM3Z4v", - "kFp3eMSPaByvDHZN43gAkaW1lhEH9QmAa7RF1SyukgNsfXdMdR8hmgkVp2YdjqmXlgefdWQ2kWoLp0M4", - "X2gcQ0Yl6NmmTlp5e7JE/fAPivK6BtS5pztb0X/bWQEfDylHEtBkQZC7Pwvsv2HZV9wBf2Vzec08Bpoo", - "OW9lIe8yuHMW6re2jfM83jk3S8SONDy62OH9syBIp7FwMwhIzxGmTXcnPQTCPNm17D6UNF1hktvtPXdt", - "yvfuvo+U+Ld5xV5fc9o59x1cSPfd8OFyRUpFM37N2nFZp7aAs0vhA2aTO7GhQ7OXHhBG0FGCTwe7ItM0", - "v0q4nrWT6ZktsJJMsaEjmT5aMnWUsBsyVXLCk1XxA67sDhFXusUOicUGRaMbQbfsgvTsgA8MMVHf1SCR", - "4Qp1cRsT7HO9TUA//1jrh5ito4jA0SzLuJhaU6SrjbkXMyUTTbi4ljxiZMoEUtxwLE5FNZ9MRIUNOD/P", - "k4ynCWvMjsRswgWLIeV77SPhmiRcfLIuoZ53OU3TIfkw47qi43BNGPAU1zMWkzhXLv1Brd1vtLWmuYy2", - "is0pF7pMUNlq/ayx0lZhJFUm2DOgBOcbYLpqiYePLgkyzAoeDAvv0RfeEUESYs93IlkQnUezJstgQNEY", - "jWmQrdlhA4XMKv7XWMl9SrkQyE7Cg0vn2nRQ/LOIx2CqAbgemHjCBU3MWjvm120mziafrNaI+NEEuR3Y", - "C12TmpfiWuqkGjQk3pftP9mfHDyYzPzr0tZykMpK8kJr3R4pbFvWtDuc93uk88NzZqR3Ug50flWs5ooM", - "xtWiW3RJqHS0IdcE6gVOq3kh0CJ+2j1xQqjMf4M+B+/9dvfte+AP5ojDWY7DqXNek70rW1u5hQfvjX6D", - "W7o0osDxB7afyLWBgYRIy//+yMEtpsJfV1d4IcUk4VEWvpfWSGg1SS45d0Zf/H9Ww/o1tflaz6sVrWrj", - "D0CtX4tWD0Sz3yq9jSIqIpa0v7u8gO82lJxfdzgWv/MkMZuQJ5lRUSgxmxnnoJFFyEKET0xVxSBegIQg", - "AVUtBythtLmMGnVmYqYFmSigd2sgzPg8ZA+EEveCNXZzlNj92s9tZC32fNwXkjseJbCL22btGRXTJS//", - "LxKpzY2BqFwIw7R+A2CPB3bUaImVghEaRVJBCMhMWpFQyWE8NuQJKZY0i22Ml3SqaMx0HwKvuL9N2/B8", - "Z4cYeC+zHw6Ire1e7Z+t7UCWXUUOJEDCHRkclnHLDJ4Ld3gOvIOyneE/FuWb57l/1AaMfeGejjro8ZBr", - "54GS3Fop7RY8kdGbQSSraZoCNruy2HbsdW9ElOSx9/ZHbwj0Fwqd0cW2xm2DF9hgLxC05krKhFHRtKdt", - "kys+0JsXMj407EexnUEK/UBv1vb2CpqjHJVuFb+AO7hf4AIOIqhQ2E8PH7HgiOaONNMi70ZfMrtQDVeo", - "4Mu/R1qrD+mi5ePL/1Ze/jdEGf122+B92e6TPQiOAzEEboyI8OW//p6vmdorHW3rPf82598+yPgYiaIl", - "EgUsy6YOV9M2U9fh7GtvZUSTXr+Xq6T3vDfLsvT5aJSYH2dSZ8+/pFJlX0c05aPr7yDypeKmbW3v3Arv", - "3PDE3nve++GHH36ADQ9Y3vK40o1+PirP/GFkvrtuDHPgjOvtvPMgvoOEXbOkgBtGUkz4NFfFhR5Ztlyz", - "l7akDlxuHHI+ssh5MqeCTpm2MeT6LjqCteNlM8aVD/+1UGX/xje4oprFDq0RHEwdq98cU5F+KKYZNQ0S", - "mz6OiykRUs0REJkqHpmfIKqzGUhCxTQ3dxKIIKsJjZTUmrjcc3pIbE48eKDQCxGx2DoJF0hpdmNpimiZ", - "KygpYkLzTA5gkdWcxTbmcTZjC0KnirHgHIvsSAH8A2YwJoqlimkmAC+Ke5DSK57wjDNNrmj0yQbYtYK5", - "j2m7XM6flKlBLnhmV2o1DRSZk5tD+lBcaM3CuHRAEU2iPEFll9mtdmhVHezCsGazdYd5d5QVAIfrPokg", - "p3/E4W8zI7PvSHcO+dphCA4C1BzGaZpqwgTE+l7I3MzQ7LbZXxFjq/xPVgHeQ9hy8lmqT5NEfoZUQkbq", - "TM0yi6ndkJJkFjpjc0syRuxAVkcC3UZUABXNrbdsTJiYURHBQEqoP4ukbcP0oy3sBx7YfLIAdDLVQL4z", - "JQX/0xSxAwVGgEFlM67iQUpVtjCcnE2kmpuFxS0Fq77Z1H7hSoAzjlnCrxmA+N2q98mMithuF13MDcFG", - "MklYZBbWbpB97HP4QMUSau0k+lN4l8yiBLbolch4ljDTRY0UrQMEoVHEtDa/uNT3HUjCbzWExqo8Ufq9", - "ZopGn3Bp5cTulWNVI/bsHg+rRiwHFOci5tc8zmmiTWHfQ0Nb9LgpiKLzirmgG5Z8APndnGxwelUTWuAA", - "cotzq7mVtXc9r6LnwJygBLDMdYNWus7sVVk1VdIMicWEOraSuU4Whg+NtHICWEsr9+d0AcB+sxzzOYs5", - "zViyIPSa8sTlErDB76tnYDFs23fbxHSRiW0mP4PbAOaMY26+dQchKmiyyHikSZqrVGojeLAp3DZ3Prgg", - "WsWJ5+WjM/OcydhuFcT/5mJqWnJl59Um0YZjBlNkWIABEojdboWtGeIkYTf8yjUAz48RE1Rxqeuro3tf", - "z7/+/wAAAP//DjXGksraAwA=", + "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", + "AP//KmmjjRjcAwA=", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/v3/openapi.yaml b/api/v3/openapi.yaml index 0c0575fd2c..b7abb08e90 100644 --- a/api/v3/openapi.yaml +++ b/api/v3/openapi.yaml @@ -7,8 +7,8 @@ info: url: http://www.apache.org/licenses/LICENSE-2.0.html termsOfService: https://openmeter.cloud/terms-of-service description: |- - OpenMeter is a cloud native usage metering and billing service. - The OpenMeter API allows you to ingest events, query meter usage, and manage resources. + OpenMeter is a cloud native usage metering and billing service. The OpenMeter + API allows you to ingest events, query meter usage, and manage resources. servers: - url: http://localhost:{port}/api/v3 description: Local @@ -55,16 +55,16 @@ paths: in: query required: false description: |- - Sort add-ons returned in the response. - Supported sort attributes are: + Sort add-ons returned in the response. Supported sort attributes are: + - `id` - `key` - `name` - `created_at` (default) - `updated_at` - The `asc` suffix is optional as the default sort order is ascending. - The `desc` suffix is used to specify a descending order. + The `asc` suffix is optional as the default sort order is ascending. The `desc` + suffix is used to specify a descending order. schema: $ref: '#/components/schemas/SortQuery' explode: false @@ -363,8 +363,8 @@ paths: operationId: create-custom-currency summary: Create custom currency description: |- - Create a custom currency. - This operation allows defining your own custom currency for billing purposes. + Create a custom currency. This operation allows defining your own custom + currency for billing purposes. responses: '201': description: CurrencyCustom created response. @@ -393,8 +393,8 @@ paths: operationId: list-cost-bases summary: List cost bases description: |- - List cost bases for a currency. - For custom currencies, there can be multiple cost bases with different `effective_from` dates. + List cost bases for a currency. For custom currencies, there can be multiple + cost bases with different `effective_from` dates. parameters: - name: currencyId in: path @@ -407,7 +407,8 @@ paths: description: |- Filter cost bases returned in the response. - To filter cost bases by fiat currency code add the following query param: filter[fiat_code]=USD + To filter cost bases by fiat currency code add the following query param: + filter[fiat_code]=USD schema: $ref: '#/components/schemas/ListCostBasesParamsFilter' style: deepObject @@ -498,14 +499,14 @@ paths: in: query required: false description: |- - Sort customers returned in the response. - Supported sort attributes are: + Sort customers returned in the response. Supported sort attributes are: + - `id` - `name` (default) - `created_at` - The `asc` suffix is optional as the default sort order is ascending. - The `desc` suffix is used to specify a descending order. + The `asc` suffix is optional as the default sort order is ascending. The `desc` + suffix is used to specify a descending order. schema: $ref: '#/components/schemas/SortQuery' explode: false @@ -719,15 +720,17 @@ paths: operationId: create-customer-stripe-checkout-session summary: Create Stripe Checkout Session description: |- - Create a [Stripe Checkout Session](https://docs.stripe.com/payments/checkout) for the customer. + Create a [Stripe Checkout Session](https://docs.stripe.com/payments/checkout) + for the customer. - Creates a Checkout Session for collecting payment method information from customers. - The session operates in "setup" mode, which collects payment details without charging - the customer immediately. The collected payment method can be used for future - subscription billing. + Creates a Checkout Session for collecting payment method information from + customers. The session operates in "setup" mode, which collects payment details + without charging the customer immediately. The collected payment method can be + used for future subscription billing. - For hosted checkout sessions, redirect customers to the returned URL. For embedded - sessions, use the client_secret to initialize Stripe.js in your application. + For hosted checkout sessions, redirect customers to the returned URL. For + embedded sessions, use the client_secret to initialize Stripe.js in your + application. parameters: - name: customerId in: path @@ -766,9 +769,10 @@ paths: description: |- Create Stripe Customer Portal Session. - Useful to redirect the customer to the Stripe Customer Portal to manage their payment methods, - change their billing address and access their invoice history. - Only returns URL if the customer billing profile is linked to a stripe app and customer. + Useful to redirect the customer to the Stripe Customer Portal to manage their + payment methods, change their billing address and access their invoice history. + Only returns URL if the customer billing profile is linked to a stripe app and + customer. parameters: - name: customerId in: path @@ -807,7 +811,8 @@ paths: description: |- List customer charges. - Returns the customer's charges that are represented as either flat fee or usage-based charges. + Returns the customer's charges that are represented as either flat fee or + usage-based charges. parameters: - $ref: '#/components/parameters/PagePaginationQuery' - name: customerId @@ -822,6 +827,7 @@ paths: Sort charges returned in the response. Supported sort attributes are: + - `id` - `created_at` - `service_period.from` @@ -836,7 +842,8 @@ paths: description: |- Filter charges. - To filter charges by status add the following query param: `filter[status][oeq]=created,active` + To filter charges by status add the following query param: + `filter[status][oeq]=created,active` schema: $ref: '#/components/schemas/ListChargesParamsFilter' style: deepObject @@ -847,6 +854,7 @@ paths: Expand full objects for referenced entities. Supported values are: + - `real_time_usage`: Expand the charge's real-time usage. schema: type: array @@ -877,9 +885,11 @@ paths: operationId: create-credit-adjustment summary: Create a credit adjustment description: |- - A credit adjustment can be used to make manual adjustments to a customer's credit balance. + A credit adjustment can be used to make manual adjustments to a customer's + credit balance. Supported use-cases: + - Usage correction parameters: - name: customerId @@ -953,8 +963,8 @@ paths: operationId: create-credit-grant summary: Create a new credit grant description: |- - Create a new credit grant. - A credit grant represents an allocation of prepaid credits to a customer. + Create a new credit grant. A credit grant represents an allocation of prepaid + credits to a customer. parameters: - name: customerId in: path @@ -1065,8 +1075,8 @@ paths: description: |- Update the payment settlement status of an externally funded credit grant. - Use this endpoint to synchronize the payment state of an external payment - with the system so that revenue recognition and credit availability work as expected. + Use this endpoint to synchronize the payment state of an external payment with + the system so that revenue recognition and credit availability work as expected. parameters: - name: customerId in: path @@ -1110,9 +1120,9 @@ paths: description: |- List credit transactions for a customer. - Returns an immutable, chronological record of credit movements: - funded credits and consumed credits. - Transactions are returned in reverse chronological order by default. + Returns an immutable, chronological record of credit movements: funded credits + and consumed credits. Transactions are returned in reverse chronological order + by default. parameters: - name: customerId in: path @@ -1237,7 +1247,8 @@ paths: description: |- Filter events returned in the response. - To filter events by subject add the following query param: filter[subject][eq]=customer-1 + To filter events by subject add the following query param: + filter[subject][eq]=customer-1 schema: $ref: '#/components/schemas/ListEventsParamsFilter' style: deepObject @@ -1245,15 +1256,15 @@ paths: in: query required: false description: |- - Sort events returned in the response. - Supported sort attributes are: + Sort events returned in the response. Supported sort attributes are: + - `time` (default) - `ingested_at` - `stored_at` - When omitted, events are sorted by `time desc` (most recent first). - When a sort field is provided without a suffix, it sorts descending. - Append the `asc` suffix to sort ascending, or the `desc` suffix to sort descending. + When omitted, events are sorted by `time desc` (most recent first). When a sort + field is provided without a suffix, it sorts descending. Append the `asc` suffix + to sort ascending, or the `desc` suffix to sort descending. schema: $ref: '#/components/schemas/SortQuery' explode: false @@ -1319,15 +1330,15 @@ paths: in: query required: false description: |- - Sort features returned in the response. - Supported sort attributes are: + Sort features returned in the response. Supported sort attributes are: + - `key` - `name` - `created_at` (default) - `updated_at` - The `asc` suffix is optional as the default sort order is ascending. - The `desc` suffix is used to specify a descending order. + The `asc` suffix is optional as the default sort order is ascending. The `desc` + suffix is used to specify a descending order. schema: $ref: '#/components/schemas/SortQuery' explode: false @@ -1338,7 +1349,8 @@ paths: description: |- Filter features returned in the response. - To filter features by meter_id add the following query param: filter[meter_id][oeq]= + To filter features by meter_id add the following query param: + filter[meter_id][oeq]= schema: $ref: '#/components/schemas/ListFeatureParamsFilter' style: deepObject @@ -1421,9 +1433,7 @@ paths: patch: operationId: update-feature summary: Update feature - description: |- - Update a feature by id. - Currently only the unit_cost field can be updated. + description: Update a feature by id. Currently only the unit_cost field can be updated. parameters: - name: featureId in: path @@ -1603,9 +1613,7 @@ paths: get: operationId: list-llm-cost-prices summary: List LLM cost prices - description: |- - List global LLM cost prices. - Returns prices with overrides applied if any. + description: List global LLM cost prices. Returns prices with overrides applied if any. parameters: - name: filter in: query @@ -1618,16 +1626,16 @@ paths: in: query required: false description: |- - Sort prices returned in the response. - Supported sort attributes are: + Sort prices returned in the response. Supported sort attributes are: + - `id` - `provider.id` - `model.id` (default) - `effective_from` - `effective_to` - The `asc` suffix is optional as the default sort order is ascending. - The `desc` suffix is used to specify a descending order. + The `asc` suffix is optional as the default sort order is ascending. The `desc` + suffix is used to specify a descending order. schema: $ref: '#/components/schemas/SortQuery' explode: false @@ -1655,8 +1663,8 @@ paths: operationId: get-llm-cost-price summary: Get LLM cost price description: |- - Get a specific LLM cost price by ID. - Returns the price with overrides applied if any. + Get a specific LLM cost price by ID. Returns the price with overrides applied if + any. parameters: - name: priceId in: path @@ -1718,16 +1726,16 @@ paths: in: query required: false description: |- - Sort meters returned in the response. - Supported sort attributes are: + Sort meters returned in the response. Supported sort attributes are: + - `key` - `name` - `aggregation` - `createdAt` (default) - `updatedAt` - The `asc` suffix is optional as the default sort order is ascending. - The `desc` suffix is used to specify a descending order. + The `asc` suffix is optional as the default sort order is ascending. The `desc` + suffix is used to specify a descending order. schema: $ref: '#/components/schemas/SortQuery' explode: false @@ -1862,9 +1870,8 @@ paths: `from, to, [subject,] [customer_id, customer_key, customer_name,] , value` The `subject` column is emitted only when `subject` is in the query's - `group_by_dimensions`. - The three `customer_*` columns are emitted together only when `customer_id` - is in the query's `group_by_dimensions`. + `group_by_dimensions`. The three `customer_*` columns are emitted together only + when `customer_id` is in the query's `group_by_dimensions`. summary: Query meter responses: '200': @@ -1920,8 +1927,8 @@ paths: in: query required: false description: |- - Sort plans returned in the response. - Supported sort attributes are: + Sort plans returned in the response. Supported sort attributes are: + - `id` - `key` - `version` @@ -2335,9 +2342,10 @@ paths: description: |- Create a new billing profile. - Billing profiles contain the settings for billing and controls invoice generation. - An organization can have multiple billing profiles defined. - A billing profile is linked to a specific app. This association is established during the billing profile's creation and remains immutable. + Billing profiles contain the settings for billing and controls invoice + generation. An organization can have multiple billing profiles defined. A + billing profile is linked to a specific app. This association is established + during the billing profile's creation and remains immutable. responses: '201': description: BillingProfile created response. @@ -2427,6 +2435,7 @@ paths: Delete a billing profile. Only such billing profiles can be deleted that are: + - not the default profile - not pinned to any customer using customer overrides - only have finalized invoices @@ -2487,8 +2496,8 @@ paths: in: query required: false description: |- - Sort subscriptions returned in the response. - Supported sort attributes are: + Sort subscriptions returned in the response. Supported sort attributes are: + - `id` - `active_from` (default) - `active_to` @@ -2552,8 +2561,8 @@ paths: operationId: cancel-subscription summary: Cancel subscription description: |- - Cancels the subscription. - Will result in a scheduling conflict if there are other subscriptions scheduled to start after the cancelation time. + Cancels the subscription. Will result in a scheduling conflict if there are + other subscriptions scheduled to start after the cancelation time. parameters: - name: subscriptionId in: path @@ -2590,8 +2599,8 @@ paths: operationId: change-subscription summary: Change subscription description: |- - Closes a running subscription and starts a new one according to the specification. - Can be used for upgrades, downgrades, and plan changes. + Closes a running subscription and starts a new one according to the + specification. Can be used for upgrades, downgrades, and plan changes. parameters: - name: subscriptionId in: path @@ -2891,8 +2900,9 @@ components: allOf: - $ref: '#/components/schemas/ResourceKey' description: |- - A key is a semi-unique string that is used to identify the add-on. - It is used to reference the latest `active` version of the add-on and is unique with the version number. + A key is a semi-unique string that is used to identify the add-on. It is used to + reference the latest `active` version of the add-on and is unique with the + version number. title: Key version: type: integer @@ -2914,24 +2924,29 @@ components: effective_from: allOf: - $ref: '#/components/schemas/DateTime' - description: The date and time when the add-on becomes effective. When not specified, the add-on is a draft. + description: |- + The date and time when the add-on becomes effective. When not specified, the + add-on is a draft. title: Effective start date readOnly: true effective_to: allOf: - $ref: '#/components/schemas/DateTime' - description: The date and time when the add-on is no longer effective. When not specified, the add-on is effective indefinitely. + description: |- + The date and time when the add-on is no longer effective. When not specified, + the add-on is effective indefinitely. title: Effective end date readOnly: true status: allOf: - $ref: '#/components/schemas/AddonStatus' description: |- - The status of the add-on. - Computed based on the effective start and end dates: - - draft = no effectiveFrom - - active = effectiveFrom <= now < effectiveTo - - archived = effectiveTo <= now + The status of the add-on. Computed based on the effective start and end dates: + + - `draft`: `effective_from` is not set. + - `active`: `effective_from <= now` and (`effective_to` is not set or + `now < effective_to`). + - `archived`: `effective_to <= now`. title: Status readOnly: true rate_cards: @@ -2948,7 +2963,9 @@ components: title: Validation errors readOnly: true additionalProperties: false - description: Add-on allows extending subscriptions with compatible plans with additional ratecards. + description: |- + Add-on allows extending subscriptions with compatible plans with additional + ratecards. AddonInstanceType: type: string enum: @@ -2956,6 +2973,7 @@ components: - multiple description: |- The instanceType of the add-on. + - `single`: Can be added to a subscription only once. - `multiple`: Can be added to a subscription more than once. AddonPagePaginatedResponse: @@ -2997,7 +3015,9 @@ components: - active - archived description: |- - The status of the add-on defined by the effectiveFrom and effectiveTo properties. + The status of the add-on defined by the `effective_from` and `effective_to` + properties. + - `draft`: The add-on has not yet been published and can be edited. - `active`: The add-on is published and available for use. - `archived`: The add-on is no longer available for use. @@ -3007,7 +3027,9 @@ components: country: allOf: - $ref: '#/components/schemas/CountryCode' - description: Country code in [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 format. + description: |- + Country code in [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) + alpha-2 format. title: Country postal_code: type: string @@ -3055,7 +3077,9 @@ components: country: allOf: - $ref: '#/components/schemas/CountryCode' - description: Country code in [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 format. + description: |- + Country code in [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) + alpha-2 format. title: Country postal_code: type: string @@ -3119,7 +3143,9 @@ components: additionalProperties: false description: |- Available apps for billing integrations to connect with third-party services. - Apps can have various capabilities like syncing data from or to external systems, integrating with third-party services for tax calculation, delivery of invoices, collection of payments, etc. + Apps can have various capabilities like syncing data from or to external + systems, integrating with third-party services for tax calculation, delivery of + invoices, collection of payments, etc. example: type: stripe name: Stripe @@ -3239,9 +3265,10 @@ components: description: |- Enable draft synchronization hook. - When enabled, invoices will pause at the draft state and wait for the integration - to call the draft synchronized endpoint before progressing to the issuing state. - This allows the external system to validate and prepare the invoice data. + When enabled, invoices will pause at the draft state and wait for the + integration to call the draft synchronized endpoint before progressing to the + issuing state. This allows the external system to validate and prepare the + invoice data. When disabled, invoices automatically progress through the draft state based on the configured workflow timing. @@ -3250,28 +3277,32 @@ components: description: |- Enable issuing synchronization hook. - When enabled, invoices will pause at the issuing state and wait for the integration - to call the issuing synchronized endpoint before progressing to the issued state. - This ensures the external invoicing system has successfully created and finalized - the invoice before it is marked as issued. + When enabled, invoices will pause at the issuing state and wait for the + integration to call the issuing synchronized endpoint before progressing to the + issued state. This ensures the external invoicing system has successfully + created and finalized the invoice before it is marked as issued. When disabled, invoices automatically progress through the issuing state and are immediately marked as issued. additionalProperties: false description: |- - External Invoicing app enables integration with third-party invoicing or payment system. + External Invoicing app enables integration with third-party invoicing or payment + system. - The app supports a bi-directional synchronization pattern where OpenMeter Billing manages - the invoice lifecycle while the external system handles invoice presentation and payment collection. + The app supports a bi-directional synchronization pattern where OpenMeter + Billing manages the invoice lifecycle while the external system handles invoice + presentation and payment collection. Integration workflow: - 1. The billing system creates invoices and transitions them through lifecycle states (draft → issuing → issued) + + 1. The billing system creates invoices and transitions them through lifecycle + states (draft → issuing → issued) 2. The integration receives webhook notifications about invoice state changes 3. The integration calls back to provide external system IDs and metadata 4. The integration reports payment events back via the payment status API - State synchronization is controlled by hooks that pause invoice progression until the - external system confirms synchronization via API callbacks. + State synchronization is controlled by hooks that pause invoice progression + until the external system confirms synchronization via API callbacks. BillingAppReference: type: object required: @@ -3508,8 +3539,8 @@ components: description: |- Enables collection of promotional communication consent. - Only available to US merchants. When set to "auto", Checkout determines - whether to show the option based on the customer's locale. + Only available to US merchants. When set to "auto", Checkout determines whether + to show the option based on the customer's locale. terms_of_service: allOf: - $ref: '#/components/schemas/BillingAppStripeCreateCheckoutSessionConsentCollectionTermsOfService' @@ -3597,7 +3628,8 @@ components: description: |- Whether to collect the customer's billing address. - Defaults to auto, which only collects the address when necessary for tax calculation. + Defaults to auto, which only collects the address when necessary for tax + calculation. default: auto cancel_url: type: string @@ -3656,22 +3688,23 @@ components: description: |- Return URL for embedded checkout sessions after payment authentication. - Required if ui_mode is "embedded" and redirect-based payment methods are enabled. + Required if ui_mode is "embedded" and redirect-based payment methods are + enabled. success_url: type: string description: |- Success URL to redirect customers after completing payment or setup. - Not allowed when ui_mode is "embedded". - See: https://docs.stripe.com/payments/checkout/custom-success-page + Not allowed when ui_mode is "embedded". See: + https://docs.stripe.com/payments/checkout/custom-success-page ui_mode: allOf: - $ref: '#/components/schemas/BillingAppStripeCheckoutSessionUIMode' description: |- The UI mode for the checkout session. - "hosted" displays a Stripe-hosted page. "embedded" integrates directly into your app. - Defaults to "hosted". + "hosted" displays a Stripe-hosted page. "embedded" integrates directly into your + app. Defaults to "hosted". default: hosted payment_method_types: type: array @@ -3687,8 +3720,8 @@ components: description: |- Redirect behavior for embedded checkout sessions. - Controls when to redirect users after completion. - See: https://docs.stripe.com/payments/checkout/custom-success-page?payment-ui=embedded-form + Controls when to redirect users after completion. See: + https://docs.stripe.com/payments/checkout/custom-success-page?payment-ui=embedded-form tax_id_collection: allOf: - $ref: '#/components/schemas/BillingAppStripeCreateCheckoutSessionTaxIdCollection' @@ -3697,7 +3730,8 @@ components: description: |- Configuration options for creating a Stripe Checkout Session. - Based on Stripe's [Checkout Session API parameters](https://docs.stripe.com/api/checkout/sessions/create). + Based on Stripe's + [Checkout Session API parameters](https://docs.stripe.com/api/checkout/sessions/create). BillingAppStripeCreateCheckoutSessionResult: type: object required: @@ -3726,8 +3760,8 @@ components: description: |- Client secret for initializing Stripe.js on the client side. - Required for embedded checkout sessions. - See: https://docs.stripe.com/payments/checkout/custom-success-page + Required for embedded checkout sessions. See: + https://docs.stripe.com/payments/checkout/custom-success-page client_reference_id: type: string description: |- @@ -3759,7 +3793,8 @@ components: description: |- The status of the checkout session. - See: https://docs.stripe.com/api/checkout/sessions/object#checkout_session_object-status + See: + https://docs.stripe.com/api/checkout/sessions/object#checkout_session_object-status url: type: string description: URL to redirect customers to the checkout page (for hosted mode). @@ -3783,8 +3818,8 @@ components: description: |- Result of creating a Stripe Checkout Session. - Contains all the information needed to redirect customers to the checkout - or initialize an embedded checkout flow. + Contains all the information needed to redirect customers to the checkout or + initialize an embedded checkout flow. BillingAppStripeCreateCheckoutSessionTaxIdCollection: type: object properties: @@ -3817,19 +3852,23 @@ components: configuration_id: type: string description: |- - The ID of an existing [Stripe configuration](https://docs.stripe.com/api/customer_portal/configurations) to use for this session, - describing its functionality and features. - If not specified, the session uses the default configuration. + The ID of an existing + [Stripe configuration](https://docs.stripe.com/api/customer_portal/configurations) + to use for this session, describing its functionality and features. If not + specified, the session uses the default configuration. locale: type: string description: |- - The IETF [language tag](https://docs.stripe.com/api/customer_portal/sessions/create#create_portal_session-locale) of the locale customer portal is displayed in. - If blank or `auto`, the customer's preferred_locales or browser's locale is used. + The IETF + [language tag](https://docs.stripe.com/api/customer_portal/sessions/create#create_portal_session-locale) + of the locale customer portal is displayed in. If blank or `auto`, the + customer's preferred_locales or browser's locale is used. return_url: type: string description: |- - The [URL to redirect](https://docs.stripe.com/api/customer_portal/sessions/create#create_portal_session-return_url) the customer to after they have completed - their requested actions. + The + [URL to redirect](https://docs.stripe.com/api/customer_portal/sessions/create#create_portal_session-return_url) + the customer to after they have completed their requested actions. additionalProperties: false description: Request to create a Stripe Customer Portal Session. BillingAppStripeCreateCustomerPortalSessionResult: @@ -3849,7 +3888,8 @@ components: description: |- The ID of the customer portal session. - See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-id + See: + https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-id stripe_customer_id: type: string description: The ID of the stripe customer. @@ -3858,42 +3898,49 @@ components: description: |- Configuration used to customize the customer portal. - See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-configuration + See: + https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-configuration livemode: type: boolean description: |- Livemode. - See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-livemode + See: + https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-livemode created_at: allOf: - $ref: '#/components/schemas/DateTime' description: |- Created at. - See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-created + See: + https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-created return_url: type: string description: |- Return URL. - See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-return_url + See: + https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-return_url locale: type: string description: |- The IETF language tag of the locale customer portal is displayed in. - See: https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-locale + See: + https://docs.stripe.com/api/customer_portal/sessions/object#portal_session_object-locale url: type: string description: |- - The URL to redirect the customer to after they have completed - their requested actions. + The URL to redirect the customer to after they have completed their requested + actions. additionalProperties: false description: |- - Result of creating a [Stripe Customer Portal Session](https://docs.stripe.com/api/customer_portal/sessions/object). + Result of creating a + [Stripe Customer Portal Session](https://docs.stripe.com/api/customer_portal/sessions/object). - Contains all the information needed to redirect the customer to the Stripe Customer Portal. + Contains all the information needed to redirect the customer to the Stripe + Customer Portal. BillingAppType: type: string enum: @@ -3924,6 +3971,7 @@ components: Lifecycle status of a charge. Values: + - `created`: The charge has been created but is not active yet. - `active`: The charge is active. - `final`: The charge is fully finalized and no further changes are expected. @@ -3962,6 +4010,7 @@ components: Expands for customer charges. Values: + - `real_time_usage`: The charge's real-time usage. title: Customer charge expands BillingCostBasis: @@ -3988,8 +4037,9 @@ components: allOf: - $ref: '#/components/schemas/DateTime' description: |- - An ISO-8601 timestamp representation of the date from which the cost basis is effective. - If not provided, it will be effective immediately and will set to `now` by the system. + An ISO-8601 timestamp representation of the date from which the cost basis is + effective. If not provided, it will be effective immediately and will be set to + `now` by the system. created_at: allOf: - $ref: '#/components/schemas/DateTime' @@ -4021,9 +4071,11 @@ components: $ref: '#/components/schemas/Labels' additionalProperties: false description: |- - A credit adjustment can be used to make manual adjustments to a customer's credit balance. + A credit adjustment can be used to make manual adjustments to a customer's + credit balance. Supported use-cases: + - Usage correction title: Credit adjustment BillingCreditAvailabilityPolicy: @@ -4068,7 +4120,8 @@ components: - `none`: No funding workflow applies, for example promotional grants - `invoice`: The grant is funded by an in-system invoice flow - - `external`: The grant is funded outside the system (e.g., wire transfer, external invoice, or manual reconciliation) + - `external`: The grant is funded outside the system (e.g., wire transfer, + external invoice, or manual reconciliation) title: Credit funding method BillingCreditGrant: type: object @@ -4143,9 +4196,8 @@ components: description: |- Cost basis per credit unit used to calculate the purchase amount. - If `per_unit_cost_basis` is 0.50 and credit amount is $100.00, - the total charge is $50.00. - The value must be greater than 0. If the cost basis is 0, use + If `per_unit_cost_basis` is 0.50 and credit amount is $100.00, the total charge + is $50.00. The value must be greater than 0. If the cost basis is 0, use `funding_method=none` instead. Defaults to 1.0. @@ -4153,9 +4205,7 @@ components: amount: allOf: - $ref: '#/components/schemas/Numeric' - description: |- - The purchase amount. - Calculated from `per_unit_cost_basis` and credit `amount`. + description: The purchase amount. Calculated from `per_unit_cost_basis` and credit `amount`. readOnly: true availability_policy: allOf: @@ -4175,16 +4225,18 @@ components: - amount additionalProperties: false description: |- - Purchase and payment terms of the grant. - Present when a funding workflow applies (funding_method is not `none`). + Purchase and payment terms of the grant. Present when a funding workflow applies + (funding_method is not `none`). tax_config: allOf: - $ref: '#/components/schemas/BillingCreditGrantTaxConfig' description: |- Tax configuration for the grant. - For `invoice` and `external` funding methods, tax configuration should be provided to ensure correct revenue recognition. - When not provided, the default credit grant tax code is applied, if that's not set the global default taxcode is used. + For `invoice` and `external` funding methods, tax configuration should be + provided to ensure correct revenue recognition. When not provided, the default + credit grant tax code is applied, if that's not set the global default taxcode + is used. invoice: type: object properties: @@ -4204,9 +4256,7 @@ components: description: Identifier of the invoice line associated with the grant. readOnly: true additionalProperties: false - description: |- - Invoice references for the grant. - Available when `funding_method` is `invoice`. + description: Invoice references for the grant. Available when `funding_method` is `invoice`. readOnly: true filters: type: object @@ -4216,8 +4266,8 @@ components: items: $ref: '#/components/schemas/ResourceKey' description: |- - Limit the credit grant to specific features. - If no features are specified, the credit grant can be used for any feature. + Limit the credit grant to specific features. If no features are specified, the + credit grant can be used for any feature. example: - input_tokens - output_tokens @@ -4228,9 +4278,7 @@ components: format: int16 minimum: 1 maximum: 1000 - description: |- - Draw-down priority of the grant. - Lower values have higher priority. + description: Draw-down priority of the grant. Lower values have higher priority. default: 10 voided_at: allOf: @@ -4246,8 +4294,8 @@ components: description: |- A credit grant allocates credits to a customer. - Credits are drawn down against charges according to the - settlement mode configured on the rate card. + Credits are drawn down against charges according to the settlement mode + configured on the rate card. title: Credit grant BillingCreditGrantStatus: type: string @@ -4259,9 +4307,13 @@ components: description: |- Credit grant lifecycle status. - - `pending`: The credit block has been created but is not yet valid. (`effective_at` is in the future or availability_policy is not met) - - `active`: The credit block is currently valid and eligible for consumption. (`effective_at` is in the past, `expires_at` is in the future and availability_policy is met) - - `expired`: The credit block expired with remaining unused balance, `expires_at` time has passed. + - `pending`: The credit block has been created but is not yet valid. + (`effective_at` is in the future or availability_policy is not met) + - `active`: The credit block is currently valid and eligible for consumption. + (`effective_at` is in the past, `expires_at` is in the future and + availability_policy is met) + - `expired`: The credit block expired with remaining unused balance, + `expires_at` time has passed. - `voided`: The credit block was voided. Remaining balance is forfeited. title: Credit grant lifecycle status BillingCreditGrantTaxConfig: @@ -4352,8 +4404,8 @@ components: allOf: - $ref: '#/components/schemas/Numeric' description: |- - Signed amount of the credit movement. - Positive values add balance, negative values reduce balance. + Signed amount of the credit movement. Positive values add balance, negative + values reduce balance. readOnly: true available_balance: type: object @@ -4370,7 +4422,8 @@ components: readOnly: true additionalProperties: false description: |- - A credit transaction represents a single credit movement on the customer's balance. + A credit transaction represents a single credit movement on the customer's + balance. Credit transactions are immutable. title: Credit transaction @@ -4406,8 +4459,8 @@ components: minLength: 3 maxLength: 24 description: |- - Custom currency code. - It should be a unique code but not conflicting with any existing fiat currency codes. + Custom currency code. It should be a unique code but not conflicting with any + existing fiat currency codes. BillingCurrencyCustom: type: object required: @@ -4431,7 +4484,9 @@ components: type: string minLength: 1 maxLength: 256 - description: The name of the currency. It should be a human-readable string that represents the name of the currency, such as "US Dollar" or "Euro". + description: |- + The name of the currency. It should be a human-readable string that represents + the name of the currency, such as "US Dollar" or "Euro". description: type: string minLength: 1 @@ -4440,7 +4495,9 @@ components: symbol: type: string minLength: 1 - description: The symbol of the currency. It should be a string that represents the symbol of the currency, such as "$" for US Dollar or "€" for Euro. + description: |- + The symbol of the currency. It should be a string that represents the symbol of + the currency, such as "$" for US Dollar or "€" for Euro. code: $ref: '#/components/schemas/BillingCurrencyCodeCustom' created_at: @@ -4472,7 +4529,9 @@ components: type: string minLength: 1 maxLength: 256 - description: The name of the currency. It should be a human-readable string that represents the name of the currency, such as "US Dollar" or "Euro". + description: |- + The name of the currency. It should be a human-readable string that represents + the name of the currency, such as "US Dollar" or "Euro". description: type: string minLength: 1 @@ -4481,7 +4540,9 @@ components: symbol: type: string minLength: 1 - description: The symbol of the currency. It should be a string that represents the symbol of the currency, such as "$" for US Dollar or "€" for Euro. + description: |- + The symbol of the currency. It should be a string that represents the symbol of + the currency, such as "$" for US Dollar or "€" for Euro. code: allOf: - $ref: '#/components/schemas/CurrencyCode' @@ -4494,8 +4555,8 @@ components: - fiat - custom description: |- - Currency type for custom currencies. - It should be a unique code but not conflicting with any existing standard currency codes. + Currency type for custom currencies. It should be a unique code but not + conflicting with any existing standard currency codes. BillingCustomer: type: object required: @@ -4555,19 +4616,17 @@ components: currency: allOf: - $ref: '#/components/schemas/CurrencyCode' - description: |- - Currency of the customer. - Used for billing, tax and invoicing. + description: Currency of the customer. Used for billing, tax and invoicing. title: Currency billing_address: allOf: - $ref: '#/components/schemas/BillingAddress' - description: |- - The billing address of the customer. - Used for tax and invoicing. + description: The billing address of the customer. Used for tax and invoicing. title: Billing Address additionalProperties: false - description: Customers can be individuals or organizations that can subscribe to plans and have access to features. + description: |- + Customers can be individuals or organizations that can subscribe to plans and + have access to features. BillingCustomerData: type: object properties: @@ -4608,14 +4667,15 @@ components: description: |- Options for configuring the Stripe Checkout Session. - These options are passed directly to Stripe's [checkout session creation API](https://docs.stripe.com/api/checkout/sessions/create). + These options are passed directly to Stripe's + [checkout session creation API](https://docs.stripe.com/api/checkout/sessions/create). additionalProperties: false description: |- Request to create a Stripe Checkout Session for the customer. Checkout Sessions are used to collect payment method information from customers - in a secure, Stripe-hosted interface. This integration uses setup mode to collect - payment methods that can be charged later for subscription billing. + in a secure, Stripe-hosted interface. This integration uses setup mode to + collect payment methods that can be charged later for subscription billing. BillingCustomerStripeCreateCustomerPortalSessionRequest: type: object required: @@ -4629,9 +4689,10 @@ components: description: |- Request to create a Stripe Customer Portal Session for the customer. - Useful to redirect the customer to the Stripe Customer Portal to manage their payment methods, - change their billing address and access their invoice history. - Only returns URL if the customer billing profile is linked to a stripe app and customer. + Useful to redirect the customer to the Stripe Customer Portal to manage their + payment methods, change their billing address and access their invoice history. + Only returns URL if the customer billing profile is linked to a stripe app and + customer. BillingCustomerUsageAttribution: type: object required: @@ -4643,14 +4704,13 @@ components: $ref: '#/components/schemas/UsageAttributionSubjectKey' minItems: 0 description: |- - The subjects that are attributed to the customer. - Can be empty when no usage event subjects are associated with the customer. + The subjects that are attributed to the customer. Can be empty when no usage + event subjects are associated with the customer. title: Subject Keys additionalProperties: false description: |- - Mapping to attribute metered usage to the customer. - One customer can have zero or more subjects, - but one subject can only belong to one customer. + Mapping to attribute metered usage to the customer. One customer can have zero + or more subjects, but one subject can only belong to one customer. BillingEntitlementAccessResult: type: object required: @@ -4673,17 +4733,15 @@ components: has_access: type: boolean description: |- - Whether the customer has access to the feature. - Always true for `boolean` and `static` entitlements. - Depends on balance for `metered` entitlements. + Whether the customer has access to the feature. Always true for `boolean` and + `static` entitlements. Depends on balance for `metered` entitlements. example: true readOnly: true config: type: string description: |- - Only available for static entitlements. - Config is the JSON parsable configuration of the entitlement. - Useful to describe per customer configuration. + Only available for static entitlements. Config is the JSON parsable + configuration of the entitlement. Useful to describe per customer configuration. example: '{ "availableModels": ["gpt-5", "gpt-4o"] }' readOnly: true additionalProperties: false @@ -4719,61 +4777,55 @@ components: provider_property: type: string description: |- - Meter group-by property that holds the LLM provider. - Use this when the meter has a group-by dimension for provider. - Mutually exclusive with `provider`. + Meter group-by property that holds the LLM provider. Use this when the meter has + a group-by dimension for provider. Mutually exclusive with `provider`. title: Provider property provider: type: string description: |- - Static LLM provider value (e.g., "openai", "anthropic"). - Use this when the feature tracks a single provider. - Mutually exclusive with `provider_property`. + Static LLM provider value (e.g., "openai", "anthropic"). Use this when the + feature tracks a single provider. Mutually exclusive with `provider_property`. title: Provider model_property: type: string description: |- - Meter group-by property that holds the model ID. - Use this when the meter has a group-by dimension for model. - Mutually exclusive with `model`. + Meter group-by property that holds the model ID. Use this when the meter has a + group-by dimension for model. Mutually exclusive with `model`. title: Model property model: type: string description: |- - Static model ID value (e.g., "gpt-4", "claude-3-5-sonnet"). - Use this when the feature tracks a single model. - Mutually exclusive with `model_property`. + Static model ID value (e.g., "gpt-4", "claude-3-5-sonnet"). Use this when the + feature tracks a single model. Mutually exclusive with `model_property`. title: Model token_type_property: type: string description: |- - Meter group-by property that holds the token type. - Use this when the meter has a group-by dimension for token type. - Mutually exclusive with `token_type`. + Meter group-by property that holds the token type. Use this when the meter has a + group-by dimension for token type. Mutually exclusive with `token_type`. title: Token type property token_type: allOf: - $ref: '#/components/schemas/BillingFeatureLLMTokenType' description: |- - Static token type value. - Use this when the feature tracks a single token type (e.g., only input tokens). - `request` is an alias for `input`, `response` is an alias for `output`. - Mutually exclusive with `token_type_property`. + Static token type value. Use this when the feature tracks a single token type + (e.g., only input tokens). `request` is an alias for `input`, `response` is an + alias for `output`. Mutually exclusive with `token_type_property`. title: Token type pricing: allOf: - $ref: '#/components/schemas/BillingFeatureLLMUnitCostPricing' description: |- - Resolved per-token pricing from the LLM cost database. - Populated in responses when the provider and model can be determined, - either from static values or from meter group-by filters with exact matches. + Resolved per-token pricing from the LLM cost database. Populated in responses + when the provider and model can be determined, either from static values or from + meter group-by filters with exact matches. title: Resolved pricing readOnly: true additionalProperties: false description: |- - LLM cost lookup configuration. - Each dimension (provider, model, token type) can be specified as either - a static value or a meter group-by property name (mutually exclusive). + LLM cost lookup configuration. Each dimension (provider, model, token type) can + be specified as either a static value or a meter group-by property name + (mutually exclusive). BillingFeatureLLMUnitCostPricing: type: object required: @@ -4835,8 +4887,8 @@ components: manual: '#/components/schemas/BillingFeatureManualUnitCost' llm: '#/components/schemas/BillingFeatureLLMUnitCost' description: |- - Per-unit cost configuration for a feature. - Either a fixed manual amount or a dynamic LLM cost lookup. + Per-unit cost configuration for a feature. Either a fixed manual amount or a + dynamic LLM cost lookup. BillingFlatFeeCharge: type: object required: @@ -4917,7 +4969,9 @@ components: subscription: allOf: - $ref: '#/components/schemas/BillingSubscriptionReference' - description: The subscription that originated the charge, when the charge was created from a subscription item. + description: |- + The subscription that originated the charge, when the charge was created from a + subscription item. title: Subscription readOnly: true currency: @@ -4959,7 +5013,9 @@ components: advance_after: allOf: - $ref: '#/components/schemas/DateTime' - description: The earliest time when the charge should be advanced again by background processing. + description: |- + The earliest time when the charge should be advanced again by background + processing. title: Advance after readOnly: true price: @@ -5025,7 +5081,8 @@ components: description: |- Discounts applicable to flat fee charges. - This is the same as `ProductCatalog.Discounts` but without the `usage` field, which is not applicable to flat fee charges. + This is the same as `ProductCatalog.Discounts` but without the `usage` field, + which is not applicable to flat fee charges. title: Flat fee charge discounts BillingParty: type: object @@ -5045,8 +5102,8 @@ components: allOf: - $ref: '#/components/schemas/BillingPartyTaxIdentity' description: |- - The entity's legal identification used for tax purposes. They may have - other numbers, but we're only interested in those valid for tax purposes. + The entity's legal identification used for tax purposes. They may have other + numbers, but we're only interested in those valid for tax purposes. addresses: allOf: - $ref: '#/components/schemas/BillingPartyAddresses' @@ -5072,7 +5129,9 @@ components: - $ref: '#/components/schemas/BillingTaxIdentificationCode' description: Normalized tax identification code shown on the original identity document. additionalProperties: false - description: Identity stores the details required to identify an entity for tax purposes in a specific country. + description: |- + Identity stores the details required to identify an entity for tax purposes in a + specific country. BillingPlan: type: object required: @@ -5127,13 +5186,16 @@ components: allOf: - $ref: '#/components/schemas/ResourceKey' description: |- - A key is a semi-unique string that is used to identify the plan. - It is used to reference the latest `active` version of the plan and is unique with the version number. + A key is a semi-unique string that is used to identify the plan. It is used to + reference the latest `active` version of the plan and is unique with the version + number. title: Key version: type: integer minimum: 1 - description: Plans are versioned to allow you to make changes without affecting running subscriptions. + description: |- + Plans are versioned to allow you to make changes without affecting running + subscriptions. title: Version default: 1 readOnly: true @@ -5156,28 +5218,29 @@ components: allOf: - $ref: '#/components/schemas/DateTime' description: |- - The date and time when the plan becomes `active`. - When not specified, the plan is in `draft` status. + The date and time when the plan becomes `active`. When not specified, the plan + is in `draft` status. title: Effective start date readOnly: true effective_to: allOf: - $ref: '#/components/schemas/DateTime' description: |- - A scheduled date and time when the plan becomes `archived`. - When not specified, the plan is in `active` status indefinitely. + A scheduled date and time when the plan becomes `archived`. When not specified, + the plan is in `active` status indefinitely. title: Effective end date readOnly: true status: allOf: - $ref: '#/components/schemas/BillingPlanStatus' description: |- - The status of the plan. - Computed based on the effective start and end dates: - - draft = no effectiveFrom - - active = effectiveFrom <= now < effectiveTo - - archived / inactive = effectiveTo <= now - - scheduled = now < effectiveFrom < effectiveTo + The status of the plan. Computed based on the effective start and end dates: + + - `draft`: `effective_from` is not set. + - `scheduled`: `now < effective_from`. + - `active`: `effective_from <= now` and (`effective_to` is not set or + `now < effective_to`). + - `archived`: `effective_to <= now`. title: Status readOnly: true phases: @@ -5186,15 +5249,16 @@ components: $ref: '#/components/schemas/BillingPlanPhase' minItems: 1 description: |- - The plan phases define the pricing ramp for a subscription. - A phase switch occurs only at the end of a billing period. - At least one phase is required. + The plan phases define the pricing ramp for a subscription. A phase switch + occurs only at the end of a billing period. At least one phase is required. title: Plan phases validation_errors: type: array items: $ref: '#/components/schemas/ProductCatalogValidationError' - description: List of validation errors in `draft` state that prevent the plan from being published. + description: |- + List of validation errors in `draft` state that prevent the plan from being + published. title: Validation errors readOnly: true additionalProperties: false @@ -5229,8 +5293,8 @@ components: allOf: - $ref: '#/components/schemas/ISO8601Duration' description: |- - The duration of the phase. - When not specified, the phase runs indefinitely. Only the last phase may omit the duration. + The duration of the phase. When not specified, the phase runs indefinitely. Only + the last phase may omit the duration. title: Duration rate_cards: type: array @@ -5239,7 +5303,9 @@ components: description: The rate cards of the plan. title: Rate cards additionalProperties: false - description: The plan phase or pricing ramp allows changing a plan's rate cards over time as a subscription progresses. + description: |- + The plan phase or pricing ramp allows changing a plan's rate cards over time as + a subscription progresses. BillingPlanStatus: type: string enum: @@ -5249,6 +5315,7 @@ components: - scheduled description: |- The status of a plan. + - `draft`: The plan has not yet been published and can be edited. - `active`: The plan is published and can be used in subscriptions. - `archived`: The plan is no longer available for use. @@ -5319,19 +5386,17 @@ components: items: $ref: '#/components/schemas/BillingPriceTier' minItems: 1 - description: |- - The tiers of the graduated price. - At least one tier is required. + description: The tiers of the graduated price. At least one tier is required. title: Tiers additionalProperties: false description: |- Graduated tiered price. - Each tier's rate applies only to the usage within that tier. - Pricing can change as cumulative usage crosses tier boundaries. + Each tier's rate applies only to the usage within that tier. Pricing can change + as cumulative usage crosses tier boundaries. - When UnitConfig is present on the rate card, tier boundaries (up_to_amount) - are expressed in converted billing units. + When UnitConfig is present on the rate card, tier boundaries (up_to_amount) are + expressed in converted billing units. BillingPricePaymentTerm: type: string enum: @@ -5345,30 +5410,26 @@ components: allOf: - $ref: '#/components/schemas/Numeric' description: |- - Up to and including this quantity will be contained in the tier. - If undefined, the tier is open-ended (the last tier). + Up to and including this quantity will be contained in the tier. If undefined, + the tier is open-ended (the last tier). title: Up to quantity flat_price: allOf: - $ref: '#/components/schemas/BillingPriceFlat' - description: |- - The flat price component of the tier. - Charged once when the tier is entered. + description: The flat price component of the tier. Charged once when the tier is entered. title: Flat price component unit_price: allOf: - $ref: '#/components/schemas/BillingPriceUnit' - description: |- - The unit price component of the tier. - Charged per billing unit within the tier. + description: The unit price component of the tier. Charged per billing unit within the tier. title: Unit price component additionalProperties: false description: |- A price tier used in graduated and volume pricing. - At least one price component (flat_price or unit_price) must be set. - When UnitConfig is present on the rate card, up_to_amount is expressed - in converted billing units. + At least one price component (flat_price or unit_price) must be set. When + UnitConfig is present on the rate card, up_to_amount is expressed in converted + billing units. BillingPriceUnit: type: object required: @@ -5390,9 +5451,8 @@ components: description: |- Unit price. - Charges a fixed rate per billing unit. - When UnitConfig is present on the rate card, billing units are the - converted quantities (e.g. GB instead of bytes). + Charges a fixed rate per billing unit. When UnitConfig is present on the rate + card, billing units are the converted quantities (e.g. GB instead of bytes). BillingPriceVolume: type: object required: @@ -5410,19 +5470,17 @@ components: items: $ref: '#/components/schemas/BillingPriceTier' minItems: 1 - description: |- - The tiers of the volume price. - At least one tier is required. + description: The tiers of the volume price. At least one tier is required. title: Tiers additionalProperties: false description: |- Volume tiered price. - The maximum quantity within a period determines the per-unit price for - all units in that period. + The maximum quantity within a period determines the per-unit price for all units + in that period. - When UnitConfig is present on the rate card, tier boundaries (up_to_amount) - are expressed in converted billing units. + When UnitConfig is present on the rate card, tier boundaries (up_to_amount) are + expressed in converted billing units. BillingProfile: type: object required: @@ -5474,7 +5532,9 @@ components: supplier: allOf: - $ref: '#/components/schemas/BillingParty' - description: The name and contact information for the supplier this billing profile represents + description: |- + The name and contact information for the supplier this billing profile + represents workflow: allOf: - $ref: '#/components/schemas/BillingWorkflow' @@ -5487,7 +5547,9 @@ components: type: boolean description: Whether this is the default profile. additionalProperties: false - description: Billing profiles contain the settings for billing and controls invoice generation. + description: |- + Billing profiles contain the settings for billing and controls invoice + generation. BillingProfileAppReferences: type: object required: @@ -5569,8 +5631,8 @@ components: allOf: - $ref: '#/components/schemas/ISO8601Duration' description: |- - The billing cadence of the rate card. - When null, the charge is one-time (non-recurring). Only valid for flat prices. + The billing cadence of the rate card. When null, the charge is one-time + (non-recurring). Only valid for flat prices. title: Billing cadence price: allOf: @@ -5581,16 +5643,16 @@ components: allOf: - $ref: '#/components/schemas/BillingPricePaymentTerm' description: |- - The payment term of the rate card. - In advance payment term can only be used for flat prices. + The payment term of the rate card. In advance payment term can only be used for + flat prices. title: Payment term default: in_arrears commitments: allOf: - $ref: '#/components/schemas/BillingSpendCommitments' description: |- - Spend commitments for this rate card. - Only applicable to usage-based prices (unit, graduated, volume). + Spend commitments for this rate card. Only applicable to usage-based prices + (unit, graduated, volume). title: Commitments discounts: allOf: @@ -5616,9 +5678,9 @@ components: allOf: - $ref: '#/components/schemas/Numeric' description: |- - Number of usage units granted free before billing starts. - Only applies to usage-based lines (not flat fees). Usage is treated as zero - until this amount is exhausted. + Number of usage units granted free before billing starts. Only applies to + usage-based lines (not flat fees). Usage is treated as zero until this amount is + exhausted. additionalProperties: false description: Discount configuration for a rate card. BillingRateCardProrationConfiguration: @@ -5642,8 +5704,10 @@ components: The proration mode of the rate card. Values: + - `no_proration`: No proration. - - `prorate_prices`: Prorate the price based on the time remaining in the billing period. + - `prorate_prices`: Prorate the price based on the time remaining in the billing + period. BillingRateCardTaxConfig: type: object required: @@ -5664,7 +5728,9 @@ components: Settlement mode for billing. Values: - - `credit_then_invoice`: Credits are applied first, then any remainder is invoiced. + + - `credit_then_invoice`: Credits are applied first, then any remainder is + invoiced. - `credit_only`: Usage is settled exclusively against credits. title: Settlement mode BillingSpendCommitments: @@ -5682,8 +5748,8 @@ components: title: Maximum amount additionalProperties: false description: |- - Spend commitments for a rate card. - The customer is committed to spend at least the minimum amount and at most the maximum amount. + Spend commitments for a rate card. The customer is committed to spend at least + the minimum amount and at most the maximum amount. BillingSubscription: type: object required: @@ -5724,18 +5790,17 @@ components: plan_id: allOf: - $ref: '#/components/schemas/ULID' - description: |- - The plan ID of the subscription. - Set if subscription is created from a plan. + description: The plan ID of the subscription. Set if subscription is created from a plan. title: Plan ID readOnly: true billing_anchor: allOf: - $ref: '#/components/schemas/DateTime' description: |- - A billing anchor is the fixed point in time that determines the subscription's recurring billing cycle. - It affects when charges occur and how prorations are calculated. - Common anchors: + A billing anchor is the fixed point in time that determines the subscription's + recurring billing cycle. It affects when charges occur and how prorations are + calculated. Common anchors: + - Calendar month (1st of each month): `2025-01-01T00:00:00Z` - Subscription anniversary (day customer signed up) - Custom date (customer-specified day) @@ -5777,8 +5842,8 @@ components: description: |- The ID of the customer to create the subscription for. - Either customer ID or customer key must be provided. - If both are provided, the ID will be used. + Either customer ID or customer key must be provided. If both are provided, the + ID will be used. title: Customer ID key: allOf: @@ -5786,8 +5851,8 @@ components: description: |- The key of the customer to create the subscription for. - Either customer ID or customer key must be provided. - If both are provided, the ID will be used. + Either customer ID or customer key must be provided. If both are provided, the + ID will be used. title: Customer Key additionalProperties: false description: The customer to create the subscription for. @@ -5798,27 +5863,26 @@ components: allOf: - $ref: '#/components/schemas/ULID' description: |- - The plan ID of the subscription. - Set if subscription is created from a plan. + The plan ID of the subscription. Set if subscription is created from a plan. - ID or Key of the plan is required if creating a subscription from a plan. - If both are provided, the ID will be used. + ID or Key of the plan is required if creating a subscription from a plan. If + both are provided, the ID will be used. title: Plan ID key: allOf: - $ref: '#/components/schemas/ResourceKey' description: |- - The plan Key of the subscription, if any. - Set if subscription is created from a plan. + The plan Key of the subscription, if any. Set if subscription is created from a + plan. - ID or Key of the plan is required if creating a subscription from a plan. - If both are provided, the ID will be used. + ID or Key of the plan is required if creating a subscription from a plan. If + both are provided, the ID will be used. title: Plan Key version: type: integer description: |- - The plan version of the subscription, if any. - If not provided, the latest version of the plan will be used. + The plan version of the subscription, if any. If not provided, the latest + version of the plan will be used. title: Plan Version additionalProperties: false description: The plan reference of the subscription. @@ -5826,21 +5890,24 @@ components: allOf: - $ref: '#/components/schemas/DateTime' description: |- - A billing anchor is the fixed point in time that determines the subscription's recurring billing cycle. - It affects when charges occur and how prorations are calculated. - Common anchors: + A billing anchor is the fixed point in time that determines the subscription's + recurring billing cycle. It affects when charges occur and how prorations are + calculated. Common anchors: + - Calendar month (1st of each month): `2025-01-01T00:00:00Z` - Subscription anniversary (day customer signed up) - Custom date (customer-specified day) - If not provided, the subscription will be created with the subscription's creation time as the billing anchor. + If not provided, the subscription will be created with the subscription's + creation time as the billing anchor. title: Billing anchor timing: allOf: - $ref: '#/components/schemas/BillingSubscriptionEditTiming' description: |- - Timing configuration for the change, when the change should take effect. - For changing a subscription, the accepted values depend on the subscription configuration. + Timing configuration for the change, when the change should take effect. For + changing a subscription, the accepted values depend on the subscription + configuration. additionalProperties: false description: Request for changing a subscription. BillingSubscriptionChangeResponse: @@ -5876,8 +5943,8 @@ components: description: |- The ID of the customer to create the subscription for. - Either customer ID or customer key must be provided. - If both are provided, the ID will be used. + Either customer ID or customer key must be provided. If both are provided, the + ID will be used. title: Customer ID key: allOf: @@ -5885,8 +5952,8 @@ components: description: |- The key of the customer to create the subscription for. - Either customer ID or customer key must be provided. - If both are provided, the ID will be used. + Either customer ID or customer key must be provided. If both are provided, the + ID will be used. title: Customer Key additionalProperties: false description: The customer to create the subscription for. @@ -5897,27 +5964,26 @@ components: allOf: - $ref: '#/components/schemas/ULID' description: |- - The plan ID of the subscription. - Set if subscription is created from a plan. + The plan ID of the subscription. Set if subscription is created from a plan. - ID or Key of the plan is required if creating a subscription from a plan. - If both are provided, the ID will be used. + ID or Key of the plan is required if creating a subscription from a plan. If + both are provided, the ID will be used. title: Plan ID key: allOf: - $ref: '#/components/schemas/ResourceKey' description: |- - The plan Key of the subscription, if any. - Set if subscription is created from a plan. + The plan Key of the subscription, if any. Set if subscription is created from a + plan. - ID or Key of the plan is required if creating a subscription from a plan. - If both are provided, the ID will be used. + ID or Key of the plan is required if creating a subscription from a plan. If + both are provided, the ID will be used. title: Plan Key version: type: integer description: |- - The plan version of the subscription, if any. - If not provided, the latest version of the plan will be used. + The plan version of the subscription, if any. If not provided, the latest + version of the plan will be used. title: Plan Version additionalProperties: false description: The plan reference of the subscription. @@ -5925,14 +5991,16 @@ components: allOf: - $ref: '#/components/schemas/DateTime' description: |- - A billing anchor is the fixed point in time that determines the subscription's recurring billing cycle. - It affects when charges occur and how prorations are calculated. - Common anchors: + A billing anchor is the fixed point in time that determines the subscription's + recurring billing cycle. It affects when charges occur and how prorations are + calculated. Common anchors: + - Calendar month (1st of each month): `2025-01-01T00:00:00Z` - Subscription anniversary (day customer signed up) - Custom date (customer-specified day) - If not provided, the subscription will be created with the subscription's creation time as the billing anchor. + If not provided, the subscription will be created with the subscription's + creation time as the billing anchor. title: Billing anchor additionalProperties: false description: Subscription create request. @@ -5941,8 +6009,9 @@ components: - $ref: '#/components/schemas/BillingSubscriptionEditTimingEnum' - $ref: '#/components/schemas/DateTime' description: |- - Subscription edit timing defined when the changes should take effect. - If the provided configuration is not supported by the subscription, an error will be returned. + Subscription edit timing defined when the changes should take effect. If the + provided configuration is not supported by the subscription, an error will be + returned. example: immediate BillingSubscriptionEditTimingEnum: type: string @@ -5950,9 +6019,9 @@ components: - immediate - next_billing_cycle description: |- - Subscription edit timing. - When immediate, the requested changes take effect immediately. - When next_billing_cycle, the requested changes take effect at the next billing cycle. + Subscription edit timing. When immediate, the requested changes take effect + immediately. When next_billing_cycle, the requested changes take effect at the + next billing cycle. BillingSubscriptionReference: type: object required: @@ -5998,8 +6067,8 @@ components: readOnly: true additionalProperties: false description: |- - Subscription reference represents a reference to the specific subscription item this - entity represents. + Subscription reference represents a reference to the specific subscription item + this entity represents. BillingSubscriptionStatus: type: string enum: @@ -6016,7 +6085,8 @@ components: description: |- Tax behavior. - This enum is used to specify whether tax is included in the price or excluded from the price. + This enum is used to specify whether tax is included in the price or excluded + from the price. BillingTaxCode: type: object required: @@ -6107,8 +6177,8 @@ components: description: |- Tax behavior. - If not specified the billing profile is used to determine the tax behavior. - If not specified in the billing profile, the provider's default behavior is used. + If not specified the billing profile is used to determine the tax behavior. If + not specified in the billing profile, the provider's default behavior is used. title: Tax behavior stripe: allOf: @@ -6134,8 +6204,9 @@ components: description: |- Tax code reference. - When both `tax_code` and `tax_code_id` are provided, `tax_code` takes precedence. - When `stripe.code` is also provided, `tax_code` still wins and `stripe.code` is ignored. + When both `tax_code` and `tax_code_id` are provided, `tax_code` takes + precedence. When `stripe.code` is also provided, `tax_code` still wins and + `stripe.code` is ignored. title: Tax code additionalProperties: false description: Set of provider specific tax configs. @@ -6168,7 +6239,9 @@ components: type: string minLength: 1 maxLength: 32 - description: Tax identifier code is a normalized tax code shown on the original identity document. + description: |- + Tax identifier code is a normalized tax code shown on the original identity + document. BillingTotals: type: object required: @@ -6310,7 +6383,9 @@ components: subscription: allOf: - $ref: '#/components/schemas/BillingSubscriptionReference' - description: The subscription that originated the charge, when the charge was created from a subscription item. + description: |- + The subscription that originated the charge, when the charge was created from a + subscription item. title: Subscription readOnly: true currency: @@ -6352,7 +6427,9 @@ components: advance_after: allOf: - $ref: '#/components/schemas/DateTime' - description: The earliest time when the charge should be advanced again by background processing. + description: |- + The earliest time when the charge should be advanced again by background + processing. title: Advance after readOnly: true price: @@ -6430,8 +6507,9 @@ components: description: |- The alignment for collecting the pending line items into an invoice. - Defaults to subscription, which means that we are to create a new invoice every time the - a subscription period starts (for in advance items) or ends (for in arrears items). + Defaults to subscription, which means that we are to create a new invoice every + time the a subscription period starts (for in advance items) or ends (for in + arrears items). BillingWorkflowCollectionAlignmentAnchored: type: object required: @@ -6449,8 +6527,8 @@ components: description: The recurring period for the alignment. additionalProperties: false description: |- - BillingWorkflowCollectionAlignmentAnchored specifies the alignment for collecting the pending line items - into an invoice. + BillingWorkflowCollectionAlignmentAnchored specifies the alignment for + collecting the pending line items into an invoice. BillingWorkflowCollectionAlignmentSubscription: type: object required: @@ -6463,8 +6541,8 @@ components: description: The type of alignment. additionalProperties: false description: |- - BillingWorkflowCollectionAlignmentSubscription specifies the alignment for collecting the pending line items - into an invoice. + BillingWorkflowCollectionAlignmentSubscription specifies the alignment for + collecting the pending line items into an invoice. BillingWorkflowCollectionSettings: type: object properties: @@ -6478,14 +6556,17 @@ components: type: string format: ISO8601 description: |- - This grace period can be used to delay the collection of the pending line items specified in - alignment. + This grace period can be used to delay the collection of the pending line items + specified in alignment. - This is useful, in case of multiple subscriptions having slightly different billing periods. + This is useful, in case of multiple subscriptions having slightly different + billing periods. example: P1D default: PT1H additionalProperties: false - description: Workflow collection specifies how to collect the pending line items for an invoice. + description: |- + Workflow collection specifies how to collect the pending line items for an + invoice. title: Workflow collection settings BillingWorkflowInvoicingSettings: type: object @@ -6518,7 +6599,9 @@ components: - charge_automatically description: The collection method for the invoice. additionalProperties: false - description: Payment settings for a billing workflow when the collection method is charge automatically. + description: |- + Payment settings for a billing workflow when the collection method is charge + automatically. BillingWorkflowPaymentSendInvoiceSettings: type: object required: @@ -6533,12 +6616,14 @@ components: type: string format: ISO8601 description: |- - The period after which the invoice is due. - With some payment solutions it's only applicable for manual collection method. + The period after which the invoice is due. With some payment solutions it's only + applicable for manual collection method. example: P30D default: P30D additionalProperties: false - description: Payment settings for a billing workflow when the collection method is send invoice. + description: |- + Payment settings for a billing workflow when the collection method is send + invoice. BillingWorkflowPaymentSettings: type: object oneOf: @@ -6556,16 +6641,16 @@ components: enabled: type: boolean description: |- - Enable automatic tax calculation when tax is supported by the app. - For example, with Stripe Invoicing when enabled, tax is calculated via Stripe Tax. + Enable automatic tax calculation when tax is supported by the app. For example, + with Stripe Invoicing when enabled, tax is calculated via Stripe Tax. default: true enforced: type: boolean description: |- - Enforce tax calculation when tax is supported by the app. - When enabled, the billing system will not allow to create an invoice without tax calculation. - Enforcement is different per apps, for example, Stripe app requires customer - to have a tax location when starting a paid subscription. + Enforce tax calculation when tax is supported by the app. When enabled, the + billing system will not allow to create an invoice without tax calculation. + Enforcement is different per apps, for example, Stripe app requires customer to + have a tax location when starting a paid subscription. default: false default_tax_config: allOf: @@ -6637,8 +6722,8 @@ components: maxLength: 2 pattern: ^[A-Z]{2}$ description: |- - [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 country code. - Custom two-letter country codes are also supported for convenience. + [ISO 3166-1](https://www.iso.org/iso-3166-country-codes.html) alpha-2 country + code. Custom two-letter country codes are also supported for convenience. example: US CreateAddonRequest: type: object @@ -6670,8 +6755,9 @@ components: allOf: - $ref: '#/components/schemas/ResourceKey' description: |- - A key is a semi-unique string that is used to identify the add-on. - It is used to reference the latest `active` version of the add-on and is unique with the version number. + A key is a semi-unique string that is used to identify the add-on. It is used to + reference the latest `active` version of the add-on and is unique with the + version number. title: Key instance_type: allOf: @@ -6720,7 +6806,9 @@ components: supplier: allOf: - $ref: '#/components/schemas/BillingParty' - description: The name and contact information for the supplier this billing profile represents + description: |- + The name and contact information for the supplier this billing profile + represents workflow: allOf: - $ref: '#/components/schemas/BillingWorkflow' @@ -6752,8 +6840,9 @@ components: allOf: - $ref: '#/components/schemas/DateTime' description: |- - An ISO-8601 timestamp representation of the date from which the cost basis is effective. - If not provided, it will be effective immediately and will set to `now` by the system. + An ISO-8601 timestamp representation of the date from which the cost basis is + effective. If not provided, it will be effective immediately and will be set to + `now` by the system. additionalProperties: false description: CostBasis create request. CreateCreditAdjustmentRequest: @@ -6840,9 +6929,8 @@ components: description: |- Cost basis per credit unit used to calculate the purchase amount. - If `per_unit_cost_basis` is 0.50 and credit amount is $100.00, - the total charge is $50.00. - The value must be greater than 0. If the cost basis is 0, use + If `per_unit_cost_basis` is 0.50 and credit amount is $100.00, the total charge + is $50.00. The value must be greater than 0. If the cost basis is 0, use `funding_method=none` instead. Defaults to 1.0. @@ -6859,16 +6947,18 @@ components: - currency additionalProperties: false description: |- - Purchase and payment terms of the grant. - Present when a funding workflow applies (funding_method is not `none`). + Purchase and payment terms of the grant. Present when a funding workflow applies + (funding_method is not `none`). tax_config: allOf: - $ref: '#/components/schemas/BillingCreditGrantTaxConfig' description: |- Tax configuration for the grant. - For `invoice` and `external` funding methods, tax configuration should be provided to ensure correct revenue recognition. - When not provided, the default credit grant tax code is applied, if that's not set the global default taxcode is used. + For `invoice` and `external` funding methods, tax configuration should be + provided to ensure correct revenue recognition. When not provided, the default + credit grant tax code is applied, if that's not set the global default taxcode + is used. filters: type: object properties: @@ -6877,8 +6967,8 @@ components: items: $ref: '#/components/schemas/ResourceKey' description: |- - Limit the credit grant to specific features. - If no features are specified, the credit grant can be used for any feature. + Limit the credit grant to specific features. If no features are specified, the + credit grant can be used for any feature. example: - input_tokens - output_tokens @@ -6889,9 +6979,7 @@ components: format: int16 minimum: 1 maximum: 1000 - description: |- - Draw-down priority of the grant. - Lower values have higher priority. + description: Draw-down priority of the grant. Lower values have higher priority. default: 10 additionalProperties: false description: CreditGrant create request. @@ -6905,7 +6993,9 @@ components: type: string minLength: 1 maxLength: 256 - description: The name of the currency. It should be a human-readable string that represents the name of the currency, such as "US Dollar" or "Euro". + description: |- + The name of the currency. It should be a human-readable string that represents + the name of the currency, such as "US Dollar" or "Euro". description: type: string minLength: 1 @@ -6914,7 +7004,9 @@ components: symbol: type: string minLength: 1 - description: The symbol of the currency. It should be a string that represents the symbol of the currency, such as "$" for US Dollar or "€" for Euro. + description: |- + The symbol of the currency. It should be a string that represents the symbol of + the currency, such as "$" for US Dollar or "€" for Euro. code: $ref: '#/components/schemas/BillingCurrencyCodeCustom' additionalProperties: false @@ -6956,16 +7048,12 @@ components: currency: allOf: - $ref: '#/components/schemas/CurrencyCode' - description: |- - Currency of the customer. - Used for billing, tax and invoicing. + description: Currency of the customer. Used for billing, tax and invoicing. title: Currency billing_address: allOf: - $ref: '#/components/schemas/BillingAddress' - description: |- - The billing address of the customer. - Used for tax and invoicing. + description: The billing address of the customer. Used for tax and invoicing. title: Billing Address additionalProperties: false description: Customer create request. @@ -6998,16 +7086,16 @@ components: allOf: - $ref: '#/components/schemas/FeatureMeterReference' description: |- - The meter that the feature is associated with and and based on which usage is calculated. - If not specified, the feature is static. + The meter that the feature is associated with and based on which usage is + calculated. If not specified, the feature is static. title: Meter reference unit_cost: allOf: - $ref: '#/components/schemas/BillingFeatureUnitCost' description: |- - Optional per-unit cost configuration. - Use "manual" for a fixed per-unit cost, or "llm" to look up cost - from the LLM cost database based on meter group-by properties. + Optional per-unit cost configuration. Use "manual" for a fixed per-unit cost, or + "llm" to look up cost from the LLM cost database based on meter group-by + properties. title: Unit cost additionalProperties: false description: Feature create request. @@ -7051,18 +7139,20 @@ components: allOf: - $ref: '#/components/schemas/DateTime' description: |- - The date since the meter should include events. - Useful to skip old events. - If not specified, all historical events are included. + The date since the meter should include events. Useful to skip old events. If + not specified, all historical events are included. value_property: type: string minLength: 1 description: |- - JSONPath expression to extract the value from the ingested event's data property. + JSONPath expression to extract the value from the ingested event's data + property. - The ingested value for sum, avg, min, and max aggregations is a number or a string that can be parsed to a number. + The ingested value for sum, avg, min, and max aggregations is a number or a + string that can be parsed to a number. - For unique_count aggregation, the ingested value must be a string. For count aggregation the value_property is ignored. + For unique_count aggregation, the ingested value must be a string. For count + aggregation the value_property is ignored. example: $.tokens dimensions: type: object @@ -7114,9 +7204,9 @@ components: type: integer minimum: 1 description: |- - The maximum number of times the add-on can be purchased for the plan. - For single-instance add-ons this field must be omitted. - For multi-instance add-ons when omitted, unlimited quantity can be purchased. + The maximum number of times the add-on can be purchased for the plan. For + single-instance add-ons this field must be omitted. For multi-instance add-ons + when omitted, unlimited quantity can be purchased. title: Max quantity additionalProperties: false description: PlanAddon create request. @@ -7150,8 +7240,9 @@ components: allOf: - $ref: '#/components/schemas/ResourceKey' description: |- - A key is a semi-unique string that is used to identify the plan. - It is used to reference the latest `active` version of the plan and is unique with the version number. + A key is a semi-unique string that is used to identify the plan. It is used to + reference the latest `active` version of the plan and is unique with the version + number. title: Key currency: allOf: @@ -7174,9 +7265,8 @@ components: $ref: '#/components/schemas/BillingPlanPhase' minItems: 1 description: |- - The plan phases define the pricing ramp for a subscription. - A phase switch occurs only at the end of a billing period. - At least one phase is required. + The plan phases define the pricing ramp for a subscription. A phase switch + occurs only at the end of a billing period. At least one phase is required. title: Plan phases additionalProperties: false description: Plan create request. @@ -7229,16 +7319,16 @@ components: allOf: - $ref: '#/components/schemas/Numeric' description: |- - Credits that have been granted but cannot yet be consumed. - Includes grants awaiting payment clearance or with a future effective date. + Credits that have been granted but cannot yet be consumed. Includes grants + awaiting payment clearance or with a future effective date. example: '200.00' readOnly: true available: allOf: - $ref: '#/components/schemas/Numeric' description: |- - Credits that can be consumed right now. - Derived from cleared grants after applying eligibility and restriction rules. + Credits that can be consumed right now. Derived from cleared grants after + applying eligibility and restriction rules. example: '150.00' readOnly: true additionalProperties: false @@ -7290,8 +7380,9 @@ components: maxLength: 3 pattern: ^[A-Z]{3}$ description: |- - Three-letter [ISO4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. - Custom three-letter currency codes are also supported for convenience. + Three-letter [ISO4217](https://www.iso.org/iso-4217-currency-codes.html) + currency code. Custom three-letter currency codes are also supported for + convenience. example: USD CurrencyPagePaginatedResponse: type: object @@ -7333,7 +7424,9 @@ components: DateTime: type: string format: date-time - description: '[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC.' + description: |- + [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in + UTC. title: RFC3339 Date-Time example: '2023-01-01T01:01:01.001Z' DateTimeFieldFilter: @@ -7363,8 +7456,8 @@ components: description: Value is greater than or equal to the given RFC-3339 formatted timestamp in UTC. additionalProperties: false description: |- - Filters on the given datetime (RFC-3339) field value. - All properties are optional; provide exactly one to specify the comparison. + Filters on the given datetime (RFC-3339) field value. All properties are + optional; provide exactly one to specify the comparison. title: DateTime Field Filter x-go-type-import: path: github.com/openmeterio/openmeter/api/v3/filters @@ -7373,7 +7466,9 @@ components: type: string minLength: 1 maxLength: 256 - description: ExternalResourceKey is a unique string that is used to identify a resource in an external system. + description: |- + ExternalResourceKey is a unique string that is used to identify a resource in an + external system. title: External Resource Key example: 019ae40f-4258-7f15-9491-842f42a7d6ac Feature: @@ -7427,16 +7522,16 @@ components: allOf: - $ref: '#/components/schemas/FeatureMeterReference' description: |- - The meter that the feature is associated with and and based on which usage is calculated. - If not specified, the feature is static. + The meter that the feature is associated with and based on which usage is + calculated. If not specified, the feature is static. title: Meter reference unit_cost: allOf: - $ref: '#/components/schemas/BillingFeatureUnitCost' description: |- - Optional per-unit cost configuration. - Use "manual" for a fixed per-unit cost, or "llm" to look up cost - from the LLM cost database based on meter group-by properties. + Optional per-unit cost configuration. Use "manual" for a fixed per-unit cost, or + "llm" to look up cost from the LLM cost database based on meter group-by + properties. title: Unit cost additionalProperties: false description: A capability or billable dimension offered by a provider. @@ -7480,15 +7575,17 @@ components: - $ref: '#/components/schemas/Numeric' nullable: true description: |- - The computed cost amount (usage × unit cost). - Null when pricing is not available for the given combination of dimensions. + The computed cost amount (usage × unit cost). Null when pricing is not available + for the given combination of dimensions. currency: allOf: - $ref: '#/components/schemas/CurrencyCode' description: The currency code of the cost amount. detail: type: string - description: Detail message when cost amount is null, explaining why the cost could not be resolved. + description: |- + Detail message when cost amount is null, explaining why the cost could not be + resolved. from: allOf: - $ref: '#/components/schemas/DateTime' @@ -7502,8 +7599,8 @@ components: additionalProperties: type: string description: |- - The dimensions the value is aggregated over. - `subject` and `customer_id` are reserved dimensions. + The dimensions the value is aggregated over. `subject` and `customer_id` are + reserved dimensions. additionalProperties: false description: A row in the result of a feature cost query. FeatureMeterReference: @@ -7559,7 +7656,9 @@ components: ISO8601Duration: type: string pattern: ^P(?:\d+(?:\.\d+)?Y)?(?:\d+(?:\.\d+)?M)?(?:\d+(?:\.\d+)?W)?(?:\d+(?:\.\d+)?D)?(?:T(?:\d+(?:\.\d+)?H)?(?:\d+(?:\.\d+)?M)?(?:\d+(?:\.\d+)?S)?)?$ - description: '[ISO 8601 Duration](https://docs.digi.com/resources/documentation/digidocs/90001488-13/reference/r_iso_8601_duration_format.htm) string.' + description: |- + [ISO 8601 Duration](https://docs.digi.com/resources/documentation/digidocs/90001488-13/reference/r_iso_8601_duration_format.htm) + string. title: ISO 8601 Duration example: P1Y format: ISO8601 @@ -7655,10 +7754,9 @@ components: description: When this override expires. additionalProperties: false description: |- - Input for creating a per-namespace price override. - Unique per provider, model and currency. - If an override already exists for the given provider, model and currency, it will be updated. - If an override does not exist, it will be created. + Input for creating a per-namespace price override. Unique per provider, model + and currency. If an override already exists for the given provider, model and + currency, it will be updated. If an override does not exist, it will be created. LLMCostPrice: type: object required: @@ -7710,7 +7808,7 @@ components: effective_to: allOf: - $ref: '#/components/schemas/DateTime' - description: When this price expires (null = current). + description: When this price expires. Omitted when the price is currently effective. readOnly: true created_at: allOf: @@ -7724,8 +7822,8 @@ components: readOnly: true additionalProperties: false description: |- - An LLM cost price record, representing the cost per token - for a specific model from a specific provider. + An LLM cost price record, representing the cost per token for a specific model + from a specific provider. LLMCostPriceSource: type: string enum: @@ -7771,6 +7869,7 @@ components: Filter charges by status. Supported statuses are: + - `created` - `active` - `final` @@ -8029,18 +8128,20 @@ components: allOf: - $ref: '#/components/schemas/DateTime' description: |- - The date since the meter should include events. - Useful to skip old events. - If not specified, all historical events are included. + The date since the meter should include events. Useful to skip old events. If + not specified, all historical events are included. value_property: type: string minLength: 1 description: |- - JSONPath expression to extract the value from the ingested event's data property. + JSONPath expression to extract the value from the ingested event's data + property. - The ingested value for sum, avg, min, and max aggregations is a number or a string that can be parsed to a number. + The ingested value for sum, avg, min, and max aggregations is a number or a + string that can be parsed to a number. - For unique_count aggregation, the ingested value must be a string. For count aggregation the value_property is ignored. + For unique_count aggregation, the ingested value must be a string. For count + aggregation the value_property is ignored. example: $.tokens dimensions: type: object @@ -8101,8 +8202,8 @@ components: $ref: '#/components/schemas/QueryFilterStringMapItem' maxProperties: 10 description: |- - Filters to apply to the dimensions of the query. - For `subject` and `customer_id` only equals ("eq", "in") comparisons are supported. + Filters to apply to the dimensions of the query. For `subject` and `customer_id` + only equals ("eq", "in") comparisons are supported. additionalProperties: false description: Filters to apply to a meter query. MeterQueryGranularity: @@ -8113,8 +8214,8 @@ components: - P1D - P1M description: |- - The granularity of the time grouping. - Time durations are specified in ISO 8601 format. + The granularity of the time grouping. Time durations are specified in ISO 8601 + format. MeterQueryRequest: type: object properties: @@ -8130,14 +8231,14 @@ components: allOf: - $ref: '#/components/schemas/MeterQueryGranularity' description: |- - The size of the time buckets to group the usage into. - If not specified, the usage is aggregated over the entire period. + The size of the time buckets to group the usage into. If not specified, the + usage is aggregated over the entire period. time_zone: type: string description: |- - The value is the name of the time zone as defined in the IANA Time Zone Database (http://www.iana.org/time-zones). - The time zone is used to determine the start and end of the time buckets. - If not specified, the UTC timezone will be used. + The value is the name of the time zone as defined in the IANA Time Zone Database + (http://www.iana.org/time-zones). The time zone is used to determine the start + and end of the time buckets. If not specified, the UTC timezone will be used. default: UTC group_by_dimensions: type: array @@ -8176,9 +8277,7 @@ components: type: array items: $ref: '#/components/schemas/MeterQueryRow' - description: |- - The usage data. - If no data is available, an empty array is returned. + description: The usage data. If no data is available, an empty array is returned. additionalProperties: false description: Meter query result. example: @@ -8217,8 +8316,8 @@ components: additionalProperties: type: string description: |- - The dimensions the value is aggregated over. - `subject` and `customer_id` are reserved dimensions. + The dimensions the value is aggregated over. `subject` and `customer_id` are + reserved dimensions. additionalProperties: false description: A row in the result of a meter query. example: @@ -8258,14 +8357,18 @@ components: type: type: string minLength: 1 - description: Contains a value describing the type of event related to the originating occurrence. + description: |- + Contains a value describing the type of event related to the originating + occurrence. example: com.example.someevent datacontenttype: type: string enum: - application/json nullable: true - description: Content type of the CloudEvents data value. Only the value "application/json" is allowed over HTTP. + description: |- + Content type of the CloudEvents data value. Only the value "application/json" is + allowed over HTTP. example: application/json dataschema: type: string @@ -8276,7 +8379,9 @@ components: subject: type: string minLength: 1 - description: Describes the subject of the event in the context of the event producer (identified by source). + description: |- + Describes the subject of the event in the context of the event producer + (identified by source). example: customer-id time: type: string @@ -8289,9 +8394,7 @@ components: type: object additionalProperties: {} nullable: true - description: |- - The event payload. - Optional, if present it must be a JSON object. + description: The event payload. Optional, if present it must be a JSON object. additionalProperties: false description: Metering event following the CloudEvents specification. title: Metering Event @@ -8472,9 +8575,9 @@ components: type: integer minimum: 1 description: |- - The maximum number of times the add-on can be purchased for the plan. - For single-instance add-ons this field must be omitted. - For multi-instance add-ons when omitted, unlimited quantity can be purchased. + The maximum number of times the add-on can be purchased for the plan. For + single-instance add-ons this field must be omitted. For multi-instance add-ons + when omitted, unlimited quantity can be purchased. title: Max quantity validation_errors: type: array @@ -8485,8 +8588,8 @@ components: readOnly: true additionalProperties: false description: |- - PlanAddon represents an association between a plan and an add-on, - controlling which add-ons are available for purchase within a plan. + PlanAddon represents an association between a plan and an add-on, controlling + which add-ons are available for purchase within a plan. PlanAddonPagePaginatedResponse: type: object required: @@ -8607,8 +8710,8 @@ components: $ref: '#/components/schemas/QueryFilterString' additionalProperties: false description: |- - A query filter for a string attribute. - Operators are mutually exclusive, only one operator is allowed at a time. + A query filter for a string attribute. Operators are mutually exclusive, only + one operator is allowed at a time. title: Query String Filter QueryFilterStringMapItem: type: object @@ -8658,8 +8761,8 @@ components: description: Combines the provided filters with a logical OR. additionalProperties: false description: |- - A query filter for an item in a string map attribute. - Operators are mutually exclusive, only one operator is allowed at a time. + A query filter for an item in a string map attribute. Operators are mutually + exclusive, only one operator is allowed at a time. title: Query String Map Item Filter RecurringPeriod: type: object @@ -8699,6 +8802,7 @@ components: Identifies which system manages a resource. Values: + - `manual`: The resource is managed manually (overridden by our API users). - `system`: The resource is managed by the system. - `subscription`: The resource is managed by the subscription. @@ -8722,19 +8826,25 @@ components: items: type: string format: ArrayEncoding.commaDelimited - description: Returns entities that fuzzy-match any of the comma-delimited phrases in the filter string. + description: |- + Returns entities that fuzzy-match any of the comma-delimited phrases in the + filter string. oeq: type: string items: type: string format: ArrayEncoding.commaDelimited - description: Returns entities that exact match any of the comma-delimited phrases in the filter string. + description: |- + Returns entities that exact match any of the comma-delimited phrases in the + filter string. gt: type: string description: Value is greater than the given string value (lexicographic compare). gte: type: string - description: Value is greater than or equal to the given string value (lexicographic compare). + description: |- + Value is greater than or equal to the given string value (lexicographic + compare). lt: type: string description: Value is less than the given string value (lexicographic compare). @@ -8743,11 +8853,13 @@ components: description: Value is less than or equal to the given string value (lexicographic compare). exists: type: boolean - description: When true, the field must be present (non-null); when false, the field must be absent (null). + description: |- + When true, the field must be present (non-null); when false, the field must be + absent (null). additionalProperties: false description: |- - Filters on the given string field value by either exact or fuzzy match. - All properties are optional; provide exactly one to specify the comparison. + Filters on the given string field value by either exact or fuzzy match. All + properties are optional; provide exactly one to specify the comparison. x-go-type-import: path: github.com/openmeterio/openmeter/api/v3/filters x-go-type: filters.FilterString @@ -8764,14 +8876,16 @@ components: items: type: string format: ArrayEncoding.commaDelimited - description: Returns entities that exact match any of the comma-delimited phrases in the filter string. + description: |- + Returns entities that exact match any of the comma-delimited phrases in the + filter string. neq: type: string description: Value does not equal the given string value. additionalProperties: false description: |- - Filters on the given string field value by exact match. - All properties are optional; provide exactly one to specify the comparison. + Filters on the given string field value by exact match. All properties are + optional; provide exactly one to specify the comparison. title: String Field Filter Exact x-go-type-import: path: github.com/openmeterio/openmeter/api/v3/filters @@ -8840,15 +8954,17 @@ components: items: $ref: '#/components/schemas/ULID' format: ArrayEncoding.commaDelimited - description: Returns entities that exact match any of the comma-delimited ULIDs in the filter string. + description: |- + Returns entities that exact match any of the comma-delimited ULIDs in the filter + string. neq: allOf: - $ref: '#/components/schemas/ULID' description: Value does not equal the given ULID value. additionalProperties: false description: |- - Filters on the given ULID field value by exact match. - All properties are optional; provide exactly one to specify the comparison. + Filters on the given ULID field value by exact match. All properties are + optional; provide exactly one to specify the comparison. title: ULID Field Filter x-go-type-import: path: github.com/openmeterio/openmeter/api/v3/filters @@ -8863,7 +8979,9 @@ components: - $ref: '#/components/schemas/BillingCreditPurchasePaymentSettlementStatus' description: The new payment settlement status. additionalProperties: false - description: Request body for updating the external payment settlement status of a credit grant. + description: |- + Request body for updating the external payment settlement status of a credit + grant. UpdateFeatureRequest: type: object properties: @@ -8872,14 +8990,15 @@ components: - $ref: '#/components/schemas/BillingFeatureUnitCost' nullable: true description: |- - Optional per-unit cost configuration. - Use "manual" for a fixed per-unit cost, or "llm" to look up cost - from the LLM cost database based on meter group-by properties. + Optional per-unit cost configuration. Use "manual" for a fixed per-unit cost, or + "llm" to look up cost from the LLM cost database based on meter group-by + properties. Set to `null` to clear the existing unit cost; omit to leave it + unchanged. title: Unit cost additionalProperties: false description: |- - Request body for updating a feature. - Currently only the unit_cost field can be updated. + Request body for updating a feature. Currently only the unit_cost field can be + updated. UpdateMeterRequest: type: object properties: @@ -9007,7 +9126,9 @@ components: supplier: allOf: - $ref: '#/components/schemas/BillingParty' - description: The name and contact information for the supplier this billing profile represents + description: |- + The name and contact information for the supplier this billing profile + represents workflow: allOf: - $ref: '#/components/schemas/BillingWorkflow' @@ -9069,16 +9190,12 @@ components: currency: allOf: - $ref: '#/components/schemas/CurrencyCode' - description: |- - Currency of the customer. - Used for billing, tax and invoicing. + description: Currency of the customer. Used for billing, tax and invoicing. title: Currency billing_address: allOf: - $ref: '#/components/schemas/BillingAddress' - description: |- - The billing address of the customer. - Used for tax and invoicing. + description: The billing address of the customer. Used for tax and invoicing. title: Billing Address additionalProperties: false description: Customer upsert request. @@ -9114,9 +9231,9 @@ components: type: integer minimum: 1 description: |- - The maximum number of times the add-on can be purchased for the plan. - For single-instance add-ons this field must be omitted. - For multi-instance add-ons when omitted, unlimited quantity can be purchased. + The maximum number of times the add-on can be purchased for the plan. For + single-instance add-ons this field must be omitted. For multi-instance add-ons + when omitted, unlimited quantity can be purchased. title: Max quantity additionalProperties: false description: PlanAddon upsert request. @@ -9154,9 +9271,8 @@ components: $ref: '#/components/schemas/BillingPlanPhase' minItems: 1 description: |- - The plan phases define the pricing ramp for a subscription. - A phase switch occurs only at the end of a billing period. - At least one phase is required. + The plan phases define the pricing ramp for a subscription. A phase switch + occurs only at the end of a billing period. At least one phase is required. title: Plan phases additionalProperties: false description: Plan upsert request. diff --git a/api/v3/test/openapi.test.yaml b/api/v3/test/openapi.test.yaml index d8c626034d..156ea8ce0c 100644 --- a/api/v3/test/openapi.test.yaml +++ b/api/v3/test/openapi.test.yaml @@ -39,7 +39,9 @@ components: DateTime: type: string format: date-time - description: "[RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in UTC." + description: |- + [RFC3339](https://tools.ietf.org/html/rfc3339) formatted date-time string in + UTC. title: RFC3339 Date-Time example: 2023-01-01T01:01:01.001Z DateTimeFieldFilter: @@ -69,8 +71,8 @@ components: description: Value is greater than or equal to the given RFC-3339 formatted timestamp in UTC. additionalProperties: false description: |- - Filters on the given datetime (RFC-3339) field value. - All properties are optional; provide exactly one to specify the comparison. + Filters on the given datetime (RFC-3339) field value. All properties are + optional; provide exactly one to specify the comparison. title: DateTime Field Filter x-go-type-import: path: github.com/openmeterio/openmeter/api/v3/filters @@ -101,9 +103,10 @@ components: description: |- Filters on the resource's `labels` field. - The schema is a map keyed by the label name; each value is a `StringFieldFilter`. - Both deepObject forms are accepted: `filter[labels][key]=value` (nested) and - `filter[labels.key]=value` (dot-notation). + The schema is a map keyed by the label name; each value is a + `StringFieldFilter`. Both deepObject forms are accepted: + `filter[labels][key]=value` (nested) and `filter[labels.key]=value` + (dot-notation). title: Labels Field Filter x-go-type-import: path: github.com/openmeterio/openmeter/api/v3/filters @@ -147,8 +150,8 @@ components: description: Value is greater than or equal to the given numeric value. additionalProperties: false description: |- - Filter by a numeric value. - All properties are optional; provide exactly one to specify the comparison. + Filter by a numeric value. All properties are optional; provide exactly one to + specify the comparison. title: Numeric Field Filter x-go-type-import: path: github.com/openmeterio/openmeter/api/v3/filters @@ -172,19 +175,25 @@ components: items: type: string format: ArrayEncoding.commaDelimited - description: Returns entities that fuzzy-match any of the comma-delimited phrases in the filter string. + description: |- + Returns entities that fuzzy-match any of the comma-delimited phrases in the + filter string. oeq: type: string items: type: string format: ArrayEncoding.commaDelimited - description: Returns entities that exact match any of the comma-delimited phrases in the filter string. + description: |- + Returns entities that exact match any of the comma-delimited phrases in the + filter string. gt: type: string description: Value is greater than the given string value (lexicographic compare). gte: type: string - description: Value is greater than or equal to the given string value (lexicographic compare). + description: |- + Value is greater than or equal to the given string value (lexicographic + compare). lt: type: string description: Value is less than the given string value (lexicographic compare). @@ -193,11 +202,13 @@ components: description: Value is less than or equal to the given string value (lexicographic compare). exists: type: boolean - description: When true, the field must be present (non-null); when false, the field must be absent (null). + description: |- + When true, the field must be present (non-null); when false, the field must be + absent (null). additionalProperties: false description: |- - Filters on the given string field value by either exact or fuzzy match. - All properties are optional; provide exactly one to specify the comparison. + Filters on the given string field value by either exact or fuzzy match. All + properties are optional; provide exactly one to specify the comparison. x-go-type-import: path: github.com/openmeterio/openmeter/api/v3/filters x-go-type: filters.FilterString @@ -214,14 +225,16 @@ components: items: type: string format: ArrayEncoding.commaDelimited - description: Returns entities that exact match any of the comma-delimited phrases in the filter string. + description: |- + Returns entities that exact match any of the comma-delimited phrases in the + filter string. neq: type: string description: Value does not equal the given string value. additionalProperties: false description: |- - Filters on the given string field value by exact match. - All properties are optional; provide exactly one to specify the comparison. + Filters on the given string field value by exact match. All properties are + optional; provide exactly one to specify the comparison. title: String Field Filter Exact x-go-type-import: path: github.com/openmeterio/openmeter/api/v3/filters @@ -246,15 +259,17 @@ components: items: $ref: "#/components/schemas/ULID" format: ArrayEncoding.commaDelimited - description: Returns entities that exact match any of the comma-delimited ULIDs in the filter string. + description: |- + Returns entities that exact match any of the comma-delimited ULIDs in the filter + string. neq: allOf: - $ref: "#/components/schemas/ULID" description: Value does not equal the given ULID value. additionalProperties: false description: |- - Filters on the given ULID field value by exact match. - All properties are optional; provide exactly one to specify the comparison. + Filters on the given ULID field value by exact match. All properties are + optional; provide exactly one to specify the comparison. title: ULID Field Filter x-go-type-import: path: github.com/openmeterio/openmeter/api/v3/filters